class_docstr: Execution trace poutine.
  
  A TraceHandler records the input and output to every Pyro primitive
  and stores them as a site in a Trace().
  This should, in theory, be sufficient information for every inference algorithm
  (along with the implicit computational graph in the Variables?)
  
  We can also use this for visualization.
code: def __init__(self, msngr: TraceMessenger, fn: Callable) -> None:
      self.fn = fn
      self.msngr = msngr
  
imports: import sys
  from typing import TYPE_CHECKING, Any, Callable, Literal, Optional
  from typing_extensions import Self
  from pyro.poutine.messenger import Messenger
  from pyro.poutine.trace_struct import Trace
  from pyro.poutine.util import site_is_subsample
label_desc: Use image node_id 1 to create a new TraceHandler object  with example: obj = TraceHandler(msngr, fn)