class_docstr: Ops wrapper that tries to propagate constant and index_expr values through the computation.
  
  This aims to maximize the compile time simplification possible, and convert
  indirect indexing from arange into normal static indexing.
code: def __getattr__(self, name: str) -> Callable[..., IndexPropResult]:
      def inner(*args: Any, **kwargs: Any) -> IndexPropResult:
          if not hasattr(SymPyOps, name):
              return self.fallback(name, args, kwargs)
  
          var_arguments = [
              a
              for a in itertools.chain(args, kwargs.values())
              if isinstance(a, IndexPropVar)
          ]
          if not all(v.is_symbolic for v in var_arguments):
              return self.fallback(name, args, kwargs)
  
          return self.propagate_sympy(name, args, kwargs)
  
      return inner
  
imports: import itertools
  from dataclasses import dataclass
  from typing import Any, Callable, Dict, Literal, Optional, overload, Tuple, Union
  import sympy
  from typing_extensions import TypeAlias
  import torch
  from torch._prims_common import is_boolean_dtype, is_integer_dtype
  from torch.utils._sympy.functions import FloorDiv, ModularIndexing, Where
label_desc: Use image node_id 9 for calling the IndexPropagation obj's underlying member method code with example usage: obj.__getattr__(name) and returns: inner, self, self, self