class_docstr: Performs Value Range Analysis on LoopBody's fx graph by calling BoundVars.run()
  It exposes the ranges of the nodes in the `bounds` variable
  
  Note. A current limitation of this analysis is that it just works on a per-loop basis.
  We should be able to propagate the bounds between across the whole graph. This may benefit
  the case a bounded variable is returned by a kernel and fed into another.
code: def set_indirect(self, old: Expr, new: ValueRanges) -> ValueRanges:
      assert isinstance(new, ValueRanges)
      self.replacement_vals[old] = new
      return new
  
file_path: pytorch/torch/_inductor/bounds.py
imports: import operator
  from functools import partial
  from typing import Any, Callable, Dict
  from sympy import Expr
  import torch
  from torch.utils._sympy.value_ranges import bound_sympy, ValueRangeAnalysis, ValueRanges
  from .ir import InterpreterShim, LoopBody, LoopBodyBlock
  from .utils import cache_on_self, dominated_nodes
  from .virtualized import V
label_desc: Use image node_id 5 for calling the BoundVars obj's underlying member method code with example usage: obj.set_indirect(old, new) and returns: new