仿射模式匹配

affine_inputs(fn)[源代码]

返回 `fn` 的实数输入的一个[健全子]集,`fn` 相对于该子集已知是仿射的。

参数

fn (Funsor) – 一个 funsor。

返回值

输入名称的集合,`fn` 相对于该集合是仿射的。

返回类型

frozenset

extract_affine(fn)[源代码]

提取 funsor 的仿射表示,满足

x = ...
const, coeffs = extract_affine(x)
y = sum(Einsum(eqn, coeff, Variable(var, coeff.output))
        for var, (coeff, eqn) in coeffs.items())
assert_close(y, x)
assert frozenset(coeffs) == affine_inputs(x)

coeffs 将为每个输入设置一个键,对于这些输入,fn 已知为仿射(通过 affine_inputs()),并且 constcoeffs.values 都将相对于这些输入是常数。

仿射近似是通过在零点和每个基向量处计算 `fn` 来获得的。为了提高性能,用户可能希望在 Memoize() 解释器下运行。

参数

fn (Funsor) – 一个 funsor,它相对于其输入中的某个子集相对于 (加法, 乘法) 半环是仿射的。

返回值

一个对 `(const, coeffs)`,其中 const 是一个没有实数输入的 funsor,`coeffs` 是一个 OrderedDict,它将输入名称映射到 einsum 形式的 `(系数, 方程)` 对。

返回类型

tuple

is_affine(fn)[源代码]

一个健全但不完备的测试,用于确定一个 funsor 是否相对于其所有实数输入是仿射的。

参数

fn (Funsor) – 一个 funsor。

返回类型

bool