形状环境 ¶
- class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[source][source]¶
- bind_symbols(placeholders, args)[源码][源码] ¶
给定一对占位符(具有符号大小的假张量)和具体参数(具有实际大小的常规张量)的列表,返回一个字典,将每个符号映射到其实际值。例如,如果您有一个大小为(s0,s1)的占位符,将其绑定到(2,4)将得到 {s0: 2, s1: 4}。这并不保证绑定 ShapeEnv 中的所有符号;如果符号在任何占位符中都没有出现,则无法绑定该符号,并且已经具有替换的符号不会获得绑定。
这与 evaluate_guards 有点重复,但它足够不同,所以最好再复制一份。这假设守卫已经检查过,尽管如果代价不高,我们也会检查是否有恶作剧。
- bound_sympy(expr, size_oblivious=False)[source][source]¶
给定一个 sympy 表达式,计算其可能取值的 ValueRanges 范围
- 返回类型:
ValueRanges
- create_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, positive=True, do_not_specialize_zero_one=False, symbolic_context=None)[source][source]¶
创建一个由这个 ShapeEnv 跟踪的新符号
- 返回类型:
表达式
- create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[source][source]¶
返回给定张量的符号大小和步长的列表。我们尽力用大小来表示步长,以避免引入新的符号变量。
- 返回类型:
tuple[tuple[Union[int, torch.SymInt], ...], tuple[Union[int, torch.SymInt], ...], Union[int, torch.SymInt]]
- create_symfloatnode(sym, *, hint, source=None)[source][source]¶
从符号表达式创建 SymFloat 值
- 返回类型:
float 和 SymFloat 的联合
- create_symintnode(sym, *, hint, source=None)[source][source]¶
从符号表达式创建 SymInt 值
如果你知道要创建的 SymInt 的当前提示值,请将其传递到 hint 中。否则,传递 None,我们将尽力猜测
- 返回类型:
Union[int, SymInt]
- 创建不带提示值的符号布尔值()[来源][来源] ¶
创建不带提示值的符号布尔值
- 返回类型:
- 创建不带提示值的符号浮点数()[来源][来源] ¶
创建不带提示值的符号浮点数
- 返回类型:
- create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, symbolic_context=None)[source][source]¶
创建一个具有未指定值的符号
与标准符号相比,我们不假设值是正数,也不专门针对零或一进行优化。
- 返回类型:
表达式
- 创建未指定的符号整数和符号(value, source, dynamic_dim)[source][source] ¶
创建一个包装新未指定符号的 SymInt
- 返回类型:
Union[int, SymInt]
- defer_runtime_assert(orig_expr, msg, fx_node=None)[source][source]¶
创建在运行时检查的断言
- 参数:
sympy.Expr(表达式)- 断言为真的布尔表达式
msg(字符串)- 断言失败时显示的消息
fx_node(可选,torch.fx.Node)- 对应于表达式的
self.graph
节点,如果适用
- 返回类型:
- deserialize_symexpr(code)[source][source]
供 compile_fx 使用以反序列化 symexprs
- evaluate_guards_expression(code, args)[source][source]¶
预期与 produce_guards_expression() 一起使用。评估由 produce_guards_expression() 为给定具体参数生成的表达式。
- 返回类型:
- 评估参数的守卫(placeholders, args, *, ignore_static=True)[source][source] ¶
生成图占位符值的守卫并使用参数评估守卫
- 返回类型:
- evaluate_sym_node(sym_node, size_oblivious=False)[source][source]¶
给定一个 SymNode,评估 sym_node.expr,并在必要时添加守卫。
- 返回类型:
基本翻译
- freeze_runtime_asserts()[source][source]
冻结此 ShapeEnv 以停止添加延迟运行时断言。
如果您尝试在冻结时安装新的运行时断言,我们将报错。这表明存在降低违规,或者可能是我们知道静态上是已为真但以非明显释放的方式再次检查的情况。
- get_axioms(symbols=None, compute_hint=False)[source][source]¶
给定表达式中的符号,返回所有包含这些符号的运行时断言以及所有守卫。如果 symbols 为 None,则返回所有运行时断言(以及所有守卫)
- 返回类型:
tuple[sympy 逻辑布尔代数布尔类型, …]
- get_implications(e)[source][source]¶
给定一个表达式,返回由此表达式推导出的谓词列表
- 返回类型:
tuple[tuple[sympy.logic.boolalg.Boolean, sympy.logic.boolalg.BooleanAtom], …]
- get_nontrivial_guards()[源代码][源代码] ¶
返回一个列表,包含不是静态已知(即非平凡)的守卫表达式
- 返回类型:
list[sympy.logic.boolalg.Boolean]
- get_pruned_guards(symints)[source][source]¶
获取一个守卫列表,但已修剪,仅提供引用传入输入中的 symints 的守卫
- 返回类型:
list[torch._guards.ShapeGuard]
- 忽略未备份的符号()[源][源] ¶
表示正在丢弃新分配的未备份的 SymInts
- 返回类型:
迭代器[None]
- is_unbacked_symint(符号)[源][源] ¶
检查 sympy 符号是否符合无符号符号的命名约定
- 返回类型:
- produce_guards(*args, **kwargs)[source][source]¶
与 produce_guards_verbose 相似,但仅返回非详尽的 Python 守卫表达式(不生成详尽守卫。)
- 返回类型:
list[str]
- produce_guards_expression(placeholders, *, guards=None, ignore_static=True)[source][source]¶
预期与 evaluate_guards_expression() 一起使用。根据给定的占位符生成守卫,并返回一个字符串表达式,由 evaluate_guards_expression 根据占位符的具体值进行评估。
- 返回类型:
可选的 [ str ]
- produce_guards_verbose(placeholders, sources, source_ref=<function ShapeEnv.<lambda>>, *, guards=None, input_contexts=None, equalities_inputs=None, _simplified=False, ignore_static=True, langs=('python', 'verbose_python'))[source][source]¶
生成一个守卫字符串列表,当在定义了所有来源张量的上下文中评估时,根据列表中的守卫是否评估为真返回 True 或 False。主要用于 Dynamo,但这也对守卫的手动测试很有帮助(参见 evaluate_guards_for_args)。
为了测试方便,允许源为字符串类型,在这种情况下,我们将假设它是一个 LocalSource
简化版允许省略鸭的大小、相等性和 0/1 守卫。这在测试时很有用,当你不关心样板守卫时,对于用户输出也可能很有帮助(但请注意;一些相等守卫并不简单!最好也能将简化输出打印出来)。它是私有的,因为它不打算用于常规用途
默认情况下,以详细注释(详细)的形式返回 Python 和 Python 中的守卫
- 返回类型:
list[_ShapeGuardsHelper]
- set_unbacked_var_to_val(k, v)[source][source]¶
仅在 propagate_real_tensors 时使用;为未备份的符号注册一个值,可以作为最后的手段来解析提示。