编译器与跟踪器¶
- trace_function(fn, kwargs: dict, *, allow_constants=False)[source]¶
将函数跟踪到一个在后端值上运行的
OpProgram
。示例
# Create a function involving ops. def fn(a, b, x): return ops.add(ops.matmul(a, x), b) # Evaluate via Funsor substitution. data = dict(a=randn(3, 3), b=randn(3), x=randn(3)) expected = fn(**data) # Alternatively evaluate via a program. program = trace_function(expr, data) actual = program(**data) assert (acutal == expected).all()
- class OpProgram(constants, inputs, operations)[source]¶
基类:
object
用于评估符号化 funsor 表达式的后端程序。
程序仅通过
funsor.ops
和操作注册依赖于 funsor 库;程序评估不涉及 funsor 的解释或重写。程序可以被序列化和反序列化(pickled and unpickled)。- 参数
constants (iterable) – 内置常量列表(叶节点)。
inputs (iterable) – 程序输入(叶节点)的字符串名称列表。
operations (iterable) – 定义程序有向无环图(DAG)中非叶节点的程序操作列表。每个操作是一个元组
(op, arg_ids)
,其中 op 是一个 funsor 操作,arg_ids
是值的索引元组,从零开始计数:常量、输入和操作输出。