Spec-Zone.ru › PyTorch 2.14

ShapeEnv

class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs) [исходный код]
add_backed_var_to_val(expr, val) [исходный код]

Добавляет новый символ в символьное окружение.

add_var_to_val(expr, val) [исходный код]

Устарело: вместо этого используйте add_backed_var_to_val.

bind_symbols(placeholders, args) [исходный код]

Принимает список пар заполнителей (фиктивные тензоры с символьными размерами) и конкретных аргументов (обычные тензоры с реальными размерами) и возвращает словарь, сопоставляющий каждый символ его реальному значению. Например, если у вас есть заполнитель с размером (s0, s1), привязка к нему значений (2, 4) даст {s0: 2, s1: 4}. Не гарантируется, что будут привязаны ВСЕ символы в ShapeEnv: символ нельзя привязать, если он не встречается ни в одном заполнителе, а символы, для которых уже имеются замены, не получат привязок.

Это несколько дублирует evaluate_guards, но различия достаточно существенны, поэтому самым простым решением показалось создать отдельную копию. Предполагается, что проверки уже выполнены, хотя при небольших затратах мы проверим, нет ли хитростей.

Тип возвращаемого значения:

dict[sympy.Symbol, int]

bound_sympy(expr, size_oblivious=False) [исходный код]

Для выражения sympy вычисляет границу ValueRanges для возможных значений этого выражения.

Тип возвращаемого значения:

ValueRanges[Expr]

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.

Тип возвращаемого значения:

sympy.Expr

create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None) [исходный код]

Создает символьные размеры/шаги/смещение для тензора.

Если у тензора символьные размеры из другого ShapeEnv, делегирует выполнение transfer_symbols_from_foreign_shape_env.

Тип возвращаемого значения:

tuple[tuple[IntLikeType, …], tuple[IntLikeType, …], IntLikeType]

create_symboolnode(sym) [исходный код]

Создает объект SymBool из логического выражения sympy.

Тип возвращаемого значения:

SymBool

create_symfloatnode(sym, *, hint, source=None) [исходный код]

Создает значение SymFloat из символьного выражения.

Тип возвращаемого значения:

FloatLikeType

create_symintnode(sym, *, hint, source=None) [исходный код]

Создает значение SymInt из символьного выражения.

Если вам известно текущее значение подсказки создаваемого SymInt, передайте его в hint. В противном случае передайте None, и мы постараемся угадать его как можно точнее.

Тип возвращаемого значения:

IntLikeType

create_unbacked_symbool() [исходный код]

Создает символьное логическое значение без значения-подсказки.

Тип возвращаемого значения:

SymBool

create_unbacked_symfloat() [исходный код]

Создает символьное вещественное число без значения-подсказки.

Тип возвращаемого значения:

SymFloat

create_unbacked_symint(source=None) [исходный код]

Создает символьное целое число без значения-подсказки.

Тип возвращаемого значения:

SymInt

create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, symbolic_context=None) [исходный код]

Создает символ с неопределенным значением.

В отличие от стандартных символов, мы не предполагаем, что значение положительно, и не выполняем специализацию для значений ноль или один.

Тип возвращаемого значения:

Expr

create_unspecified_symint_and_symbol(value, source, dynamic_dim, excluded_value=None) [исходный код]

Создает SymInt, оборачивающий новый неопределенный символ.

Тип возвращаемого значения:

IntLikeType

deserialize_symexpr(code) [исходный код]

Предназначен для использования compile_fx при десериализации символьных выражений.

Тип возвращаемого значения:

SymInt | SymFloat | SymBool

error_on_new_guards() [исходный код]

Менеджер контекста, который вызывает _ShapeEnvGuardError при попытке установить проверку.

Временно замораживает ShapeEnv и заставляет _check_frozen вызывать исключение вместо предупреждения, чтобы пути выполнения кода, устанавливающего проверки, генерировали исключение, которое не кэшируется LRU-кэшем _inner_evaluate_expr.

Тип возвращаемого значения:

Generator[None, None, None]

evaluate_expr(orig_expr, hint=None, fx_node=None, size_oblivious=False, fallback_value=None, *, forcing_spec=False) [исходный код]

Получив выражение, вычисляет его и при необходимости добавляет проверки. Если fallback_value не равен None, функция возвращает fallback_value вместо ошибки, вызванной зависимостью от данных.

Тип возвращаемого значения:

Basic

evaluate_guards_expression(code, args) [исходный код]

Предназначен для использования вместе с produce_guards_expression(). Вычисляет выражение, созданное produce_guards_expression, для заданных конкретных аргументов.

Тип возвращаемого значения:

bool

evaluate_guards_for_args(placeholders, args, *, ignore_static=True) [исходный код]

Создает проверки для значений заполнителей графа и вычисляет их с аргументами.

Тип возвращаемого значения:

bool

evaluate_sym_node(sym_node, size_oblivious=False, fallback_value=None) [исходный код]

Получив SymNode, вычисляет sym_node.expr и при необходимости добавляет проверки.

Тип возвращаемого значения:

Basic

evaluate_symexpr(code) [исходный код]

Предназначен для использования compile_fx при вычислении символьных выражений.

Тип возвращаемого значения:

int | float | bool

format_guards(verbose=False) [исходный код]

Форматирует выражения проверок этого shape env, добавляя сведения о трассировке стека, если включен подробный режим.

Тип возвращаемого значения:

str

freeze() [исходный код]

Замораживает этот ShapeEnv, прекращая накопление проверок.

Замороженный ShapeEnv игнорирует все последующие проверки, созданные для него, и выдает только предупреждение, что может привести к проблемам с точностью.

freeze_runtime_asserts() [исходный код]

Замораживает этот ShapeEnv, прекращая добавление отложенных проверок времени выполнения.

При попытке установить новую проверку времени выполнения в замороженном состоянии возникнет ошибка. Это указывало бы на нарушение при понижении уровня либо, возможно, на то, что мы повторно проверяем условие, которое статически известно как True, но явно не может быть доказано.

get_axioms(symbols=None, compute_hint=False) [исходный код]

Получив символы в выражении, возвращает все проверки времени выполнения, содержащие эти символы, объединенные со всеми проверками. Если symbols равен None, возвращает все проверки времени выполнения (и все проверки).

Тип возвращаемого значения:

tuple[sympy.logic.boolalg.Boolean, …]

get_implications(e) [исходный код]

Получив выражение, возвращает список предикатов, следующих из него.

Тип возвращаемого значения:

tuple[tuple[sympy.logic.boolalg.Boolean, BooleanAtom], …]

get_nontrivial_guards() [исходный код]

Возвращает список выражений проверок, истинность которых нельзя определить статически (то есть нетривиальных).

Тип возвращаемого значения:

list[sympy.logic.boolalg.Boolean]

get_pruned_guards(symints) [исходный код]

Возвращает список проверок, отфильтрованный так, чтобы в нем остались только проверки, ссылающиеся на symints из переданного входного значения.

Тип возвращаемого значения:

list[ShapeGuard]

guard_or_defer_runtime_assert(orig_expr, msg, fx_node=None) [исходный код]

Добавляет проверку того, что orig_expr равно True, если это возможно; в противном случае добавляет проверяемое во время выполнения утверждение.

Параметры:
  • orig_expr (sympy.Expr) – логическое выражение, истинность которого нужно проверить
  • msg (str) – сообщение, отображаемое при сбое утверждения
  • fx_node (Optional, torch.fx.Node) – узел в self.graph, соответствующий выражению, если применимо
Тип возвращаемого значения:

bool

guarding_hint_or_throw(expr) [исходный код]

Возвращает конкретное значение-подсказку для выражения.

Для логических выражений (например, Eq, Ne) возвращает Python bool (True/False), а для целочисленных выражений — Python int.

Тип возвращаемого значения:

int | bool

ignore_fresh_unbacked_symbols() [исходный код]

Указывает, что вновь выделенные неподкрепленные SymInt отбрасываются.

Тип возвращаемого значения:

Generator[None, None, None]

is_unbacked_symint(symbol) [исходный код]

Проверяет, соответствует ли символ sympy соглашению об именовании неподкрепленных символов.

Тип возвращаемого значения:

bool

optimization_hint(expr, fallback=None) [исходный код]

Возвращает конкретное целочисленное значение-подсказку для выражения.

Эту функцию следует использовать для оптимизаций, не основанных на проверках. Если вам нужна подсказка, на которую можно установить проверку, используйте вместо этого API guarding_hint.

Эта функция использует для неподкрепленных символов предоставленные пользователем подсказки оптимизации. Если они не указаны, используется резервное значение и эвристики, стремящиеся обеспечить максимальную согласованность с окружением форм.

Особые случаи:

  • Комплексные числа (содержащие sympy.I): вызывают ошибку, поскольку размерности тензора не могут быть комплексными.
  • Бесконечность (int_oo, sympy.oo): возвращает sys.maxsize.
  • NaN (sympy.nan): возвращает резервное значение.
Тип возвращаемого значения:

int

patch_source_specialization(source, check_fn) [исходный код]

Временно добавляет аксиомы на уровне символов в ShapeEnv. Это полезно, когда нужно создать «ветвление» с параллельными экземплярами ShapeEnv. Например, мы используем это при компиляции нескольких графов, чтобы поддерживать графы с разными уровнями специализации.

Этот менеджер контекста позволяет временно добавлять ограничения в окружение форм на основе функции специализации, примененной к символу, связанному с источником.

Параметры:
  • source (Source) – источник символа, подлежащего специализации
  • check_fn (Callable[[Symbol], Expr]) – функция, принимающая символ sympy и возвращающая выражение sympy, представляющее применяемое ограничение/специализацию
Тип возвращаемого значения:

Generator[None, None, None]

produce_guards(*args, **kwargs) [исходный код]

Как produce_guards_verbose, но возвращает только неподлежащее подробному выводу представление выражений проверок Python (подробные проверки не создаются).

Тип возвращаемого значения:

list[str]

produce_guards_expression(placeholders, *, guards=None, ignore_static=True) [исходный код]

Предназначен для использования вместе с evaluate_guards_expression(). Создает проверки для заданных заполнителей и возвращает строковое выражение, которое evaluate_guards_expression вычисляет с конкретными значениями заполнителей.

Тип возвращаемого значения:

str | None

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')) [исходный код]

Создает список строк проверок, которые при вычислении в контексте, где определены тензоры для всех источников, возвращают True или False в зависимости от того, истинны ли проверки из списка. В основном используется Dynamo, но также полезно для ручного тестирования проверок (см. evaluate_guards_for_args).

Для удобства тестирования источником может быть str; в этом случае предполагается, что это LocalSource.

Параметр simplified позволяет опустить проверки duck sizing, равенства и 0/1. Это полезно для тестирования, когда не нужны шаблонные проверки, а также может быть полезно для вывода пользователю (но будьте осторожны: некоторые проверки равенства нетривиальны! Было бы неплохо также выводить их в упрощенном представлении). Этот параметр является внутренним, поскольку не предназначен для обычного использования.

По умолчанию возвращает проверки на Python и их представление на Python с подробными комментариями (verbose).

Тип возвращаемого значения:

list[_ShapeGuardsHelper]

replace(expr) [исходный код]

Применяет замены символов ко всем символам в заданном выражении.

ВАЖНО: результат этого метода ДОЛЖЕН зависеть только от self.replacements и входного expr. Не добавляйте зависимости от других изменяемых состояний. SymNode.expr использует _replacements_version_counter (который отслеживает только изменения замен) для кэширования вызовов этого метода, поэтому зависимость от других состояний приведёт к устаревшим результатам кэша.

Тип возвращаемого значения:

_SympyT

set_real_tensor_prop_unbacked_vals(k, v) [исходный код]

Используется только при propagate_real_tensors; регистрирует значение для символа без привязки, которое можно использовать в крайнем случае для разрешения подсказок.

simplify(expr, size_oblivious=False, *, axioms=None, var_to_range=None) [исходный код]

Использует известные ограничения и замены для упрощения заданного выражения

Тип возвращаемого значения:

_SympyT

size_hint(expr, *, allow_none=False) [исходный код]

Получает подсказку о размере для заданного выражения на основе имеющихся базовых форм. Не устанавливает защитную проверку, поэтому используйте этот метод, только если можете гарантировать, что ваш код остаётся корректным для произвольных форм (например, при принятии решений об оптимизации).

Тип возвращаемого значения:

Basic | None

suppress_guards() [исходный код]

Менеджер контекста, игнорирующий все защитные проверки, созданные внутри него.

Тип возвращаемого значения:

_GeneratorContextManager[None]

transfer_symbols_from_foreign_shape_env(sizes, strides, storage_offset, source, *, symbolic_context=None) [исходный код]

Переносит символические размеры, шаги и смещение из внешнего ShapeEnv в текущий.

Если symbolic_context равен None, каждое измерение автоматически классифицируется как STATIC, DUCK или UNBACKED в зависимости от того, есть ли у внешнего символа подсказка с защитной проверкой. Если указан symbolic_context (например, из _automatic_dynamic), вместо этого используется его классификация.

Для измерений без привязки базовые внешние символы без привязки (и любые заданные пользователем подсказки оптимизации, зарегистрированные во внешнем ShapeEnv) переносятся в эту среду с помощью _transfer_foreign_expr_as_unbacked.

Тип возвращаемого значения:

tuple[tuple[IntLikeType, …], tuple[IntLikeType, …], IntLikeType]

property var_to_val: dict[Symbol, Integer]

используйте вместо этого backed_var_to_val.

Тип:

Устарело

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.fx.experimental.symbolic_shapes.ShapeEnv.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API