Shortcuts

ShapeEnv

class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[源代码]
bind_symbols(placeholders, args)[源代码]

给定一个占位符(带有符号大小的假张量)和具体参数(带有实际大小的常规张量)的配对列表,返回一个字典,将每个符号映射到其实际值。例如,如果你有一个大小为 (s0, s1) 的占位符,将其绑定到 (2, 4) 将得到 {s0: 2, s1: 4}。这不能保证绑定 ShapeEnv 中的所有符号;如果符号不在任何占位符中出现,我们就无法绑定它,而已有替换的符号不会获得绑定。

这与evaluate_guards有些重复, 但它足够不同,以至于复制一份看起来最干净。 这假设守卫已经检查过了, 尽管如果成本低廉,我们会检查是否有可疑行为

bound_sympy(expr, size_oblivious=False)[源代码]

给定一个sympy表达式,计算它可以取值的范围边界

Return type

值范围

check_equal(other)[源代码]

比较另一个 ShapeEnv 以检查是否等效

cleanup()[源代码]

打破引用循环。

这将销毁堆栈。如果你真的想保留它们,我们只需要找到一种方法来打破对代码对象的引用。

create_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, positive=True, do_not_specialize_zero_one=False, symbolic_context=None)[源代码]

创建一个由该ShapeEnv跟踪的新符号

Return type

表达式

create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[源代码]

返回给定张量的符号大小和步幅的列表。 我们尽量用大小来表示步幅,以避免引入新的符号变量。

create_symboolnode(sym)[源代码]

从 sympy 布尔表达式创建一个 SymBool 对象

create_symintnode(sym, *, hint, source=None)[源代码]

从符号表达式创建一个 SymInt 值

如果你知道要创建的 SymInt 的当前提示值是什么,请将其传递给 hint。否则,传递 None,我们将尽力猜测

create_unbacked_symbool()[源代码]

创建一个没有提示值的符号布尔值

create_unbacked_symfloat()[源代码]

创建一个没有提示值的符号浮点数

create_unbacked_symint()[源代码]

创建一个没有提示值的符号整数

create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None)[源代码]

创建一个未指定值的符号

与标准符号相比,我们不假设值是正的,也不专门处理零或一的值。

Return type

表达式

create_unspecified_symint_and_symbol(value, source, dynamic_dim)[源代码]

创建一个包装新未指定符号的 SymInt

defer_runtime_assert(orig_expr, msg, fx_node=None)[源代码]

创建一个在运行时检查的断言

Parameters
  • orig_expr (sympy.Expr) – 要断言为真的布尔表达式

  • msg (str) – 断言失败时显示的消息

  • fx_node (可选, torch.fx.Node) – 在 self.graph 中对应于表达式的节点,如果适用

evaluate_expr(orig_expr, hint=None, fx_node=None, expect_rational=True, size_oblivious=False, *, forcing_spec=False)[源代码]

给定一个表达式,对其进行求值,并在必要时添加保护措施

evaluate_guards_expression(code, args)[源代码]

预期与 produce_guards_expression() 一起使用。对由 produce_guards_expression 生成的表达式进行求值,针对给定的具体参数。

evaluate_guards_for_args(placeholders, args, *, ignore_static=True)[源代码]

为图形的占位符值生成保护条件,并使用参数评估这些保护条件

format_guards(verbose=False)[源代码]

如果详细,格式化此形状环境的保护表达式并附带可选的回溯信息

freeze()[源代码]

冻结此 ShapeEnv 以停止累积保护

冻结的 ShapeEnv 将忽略在其上生成的任何进一步的守卫,并且只会发出警告,这可能会导致精度问题。

get_nontrivial_guards()[源代码]

返回一个非静态已知的(即非平凡的)守卫表达式列表

is_unbacked_symint(symbol)[源代码]

检查一个sympy符号是否符合未支持符号的命名约定

Return type

bool

produce_guards(placeholders, sources, source_ref=<function ShapeEnv.<lambda>>, *, input_contexts=None, equalities_inputs=None, _simplified=False, ignore_static=True)[源代码]

生成一组守卫字符串,当在定义了所有源张量的上下文中进行评估时,根据列表中的守卫是否评估为True或False,返回True或False。主要由Dynamo使用,但这对于手动测试守卫也很有帮助(参见evaluate_guards_for_args)

为了方便测试,允许源是一个字符串,在这种情况下,我们将假设它是一个本地源

简化功能允许你省略鸭子尺寸、相等性和0/1保护。这在测试时非常有用,因为你不需要关心样板保护,对于用户输出也可能有帮助(但要小心;有些相等性保护并不简单!如果能简化输出并打印它们就更好了)。它是私有的,因为它不是为正常使用而设计的

Return type

列表[字符串]

produce_guards_expression(placeholders, ignore_static=True)[源代码]

预期与 evaluate_guards_expression() 一起使用。为给定的占位符生成守卫,并返回一个字符串表达式,该表达式将由 evaluate_guards_expression 根据占位符的具体值进行评估。

replace(expr)[源代码]

对给定表达式中的任何符号应用符号替换

Return type

表达式

simplify(expr)[源代码]

使用已知的约束和替换来简化给定的表达式

Return type

表达式

size_hint(expr, *, allow_none=False)[源代码]

从我们已有的底层形状中获取给定表达式的大小提示。 不引入保护,因此仅在您可以保证代码对于任意形状仍然有效时使用(例如优化决策)

suppress_guards()[源代码]

上下文管理器以忽略内部生成的所有保护

优云智算