接入接口

把 ArcTN 作为路径优化器或收缩树来源接入现有 Python 张量网络工作流。

本页目录

作为 opt_einsum PathOptimizer

python
import opt_einsum as oe
from arctn import ArcTNOptimizer

optimizer = ArcTNOptimizer(
    preset="heavy", seed=0, max_time=30,
    flops_weight=1, read_write_weight=64,
)
result = oe.contract(equation, *arrays, optimize=optimizer)

接口边界

opt_einsum 直接调用 ArcTNOptimizer.__call__,其 PathOptimizer 协议只能返回 path,不能同时返回 sliced legs。非 None 的 memory_limit 会抛出 NotImplementedError;需要切片时,应走 Cotengra/Quimb 的 search() tree dispatch,或直接使用 arctn_tree / arctn_contract

返回 Cotengra ContractionTree

python
from arctn import arctn_plan, arctn_tree

tree, info = arctn_tree(
    inputs, output, size_dict,
    preset="heavy", seed=0,
    target_size=2**24, slicing_mode="fixed",
    return_info=True,
)
result = tree.contract(arrays)

# 先生成计划;随后转换为树时不重新寻路
plan = arctn_plan(
    inputs, output, size_dict,
    target_size=2**24, slicing_mode="fixed",
)
same_plan_tree = plan.to_tree()

ArcTNOptimizer.search()arctn_tree() 都会当场运行 planner;plan.to_tree() 只转换已经保存的路径和 sliced legs。三者得到的都是 Cotengra ContractionTree,而不是 TreeSA 算法或 Rust 的 arctn::tree 模块。

在 Quimb 中使用

Quimb 使用同一个 ArcTNOptimizer.search() 收缩树接口。网络构造、化简与切片收缩的完整示例见教程。

显式选择数组后端

使用 arctn_contract 时,可以选择 native 或显式指定数组后端。通过 Quimb 或 Cotengra 收缩树执行时,使用相应库的执行接口。