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 indirect_indexing(
      self,
      index: Union[Any, IndexPropVar],
      size: Any,
      check: bool = True,
  ) -> Any:
      # nb. We do index + Where(...) rather than Where(idx >= 0, idx, idx + sz) because we don't have CSE
      #     for SymPy expressions, so we don't want to repeat idx too much
  
      # indirect_indexing returns a sympy value, so no need to wrap in IndexPropVar here
      if isinstance(index, IndexPropVar) and index.is_symbolic:
          # If we are turning a indirect indexing into direct, we need to wrap it.
          index = index.value.expr
          return index + Where(index >= 0, 0, size)
      return self.fallback(
          "indirect_indexing", (index, size, check), {}
      ).value
  
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 10 for calling the IndexPropagation obj's underlying member method code with example usage: obj.indirect_indexing(index, size, check) and returns: self, unknown