class_docstr: This messenger keeps track of stack of independence information declared by
  nested ``plate`` contexts. This information is stored in a
  ``cond_indep_stack`` at each sample/observe site for consumption by
  ``TraceMessenger``.
  
  Example::
  
      x_axis = IndepMessenger('outer', 320, dim=-1)
      y_axis = IndepMessenger('inner', 200, dim=-2)
      with x_axis:
          x_noise = sample("x_noise", dist.Normal(loc, scale).expand_by([320]))
      with y_axis:
          y_noise = sample("y_noise", dist.Normal(loc, scale).expand_by([200, 1]))
      with x_axis, y_axis:
          xy_noise = sample("xy_noise", dist.Normal(loc, scale).expand_by([200, 320]))
code: def _process_message(self, msg: Message) -> None:
      frame = CondIndepStackFrame(
          self.name, self.dim, self.size, self.counter
      )
      msg["cond_indep_stack"] = (frame,) + msg["cond_indep_stack"]
  
imports: import numbers
  from typing import Iterator, NamedTuple, Optional, Tuple
  import torch
  from typing_extensions import Self
  from pyro.poutine.messenger import Messenger
  from pyro.poutine.runtime import _DIM_ALLOCATOR, Message
  from pyro.util import ignore_jit_warnings
label_desc: Use image node_id 8 for calling the IndepMessenger obj's underlying member method code with example usage: obj._process_message(msg) without return types