torch.fx.experimental.symbolic_shapes.constrain_range
-
torch.fx.experimental.symbolic_shapes.constrain_range(a, *, min, max=None)[источник] -
Накладывает ограничение, согласно которому переданный SymInt должен находиться в диапазоне от min до max включительно, НЕ устанавливая проверку для SymInt (то есть его можно использовать с неподкреплёнными SymInt). Если min/max равны None, предполагается, что размерность не ограничена в соответствующем направлении. Повторное применение constrain_range пересекает диапазоны. Это низкоуровневый API, не предоставляющий многих гарантий безопасности (TODO: предоставить API более высокого уровня).
В настоящее время мы используем этот API в следующих случаях: когда мы выделяем неподкреплённый SymInt, обозначающий целочисленную величину, зависящую от данных, нам обычно неизвестно, какие значения она может принимать. Это означает, что любая проверка для неё немедленно завершится неудачей. Однако во многих случаях нам кое-что известно о неподкреплённом SymInt: например, мы знаем, что nonzero(x).size(0) должно быть >= 0. Мы используем constrain_range, чтобы сузить возможный диапазон и объявить отрицательные символы невозможными. Это позволяет уверенно отвечать True на такие запросы, как ‘nnz >= 0’, даже если фактическое (подсказанное) значение ‘nnz’ неизвестно. Более того, мы фактически используем constrain_range, чтобы небезопасно снимать распространённые проверки: для неподкреплённого SymInt, полученного из nonzero, мы также предполагаем, что он не равен 0/1 (хотя во время выполнения это вполне возможные значения), поскольку обычно ожидаем, что графы, корректные для N=2, будут также корректны для N=1.
© 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.constrain_range.html