class_docstr: Base class for "easy guides", which are more flexible than
  :class:`~pyro.infer.AutoGuide` s, but are easier to write than raw Pyro guides.
  
  Derived classes should define a :meth:`guide` method. This :meth:`guide`
  method can combine ordinary guide statements (e.g. ``pyro.sample`` and
  ``pyro.param``) with the following special statements:
  
  - ``group = self.group(...)`` selects multiple ``pyro.sample`` sites in the
    model. See :class:`Group` for subsequent methods.
  - ``with self.plate(...): ...`` should be used instead of ``pyro.plate``.
  - ``self.map_estimate(...)`` uses a ``Delta`` guide for a single site.
  
  Derived classes may also override the :meth:`init` method to provide custom
  initialization for models sites.
  
  :param callable model: A Pyro model.
code: def __init__(self, model):
      super().__init__()
      self._pyro_name = type(self).__name__
      self._model = (model,)
      self.prototype_trace = None
      self.frames = {}
      self.groups = {}
      self.plates = {}
  
imports: import re
  import weakref
  from abc import ABCMeta, abstractmethod
  from contextlib import ExitStack
  import torch
  from torch.distributions import biject_to
  import pyro
  import pyro.distributions
  import pyro.poutine
  import pyro.poutine.runtime
  from pyro.distributions.util import broadcast_shape, sum_rightmost
  from pyro.infer.autoguide.guides import prototype_hide_fn
  from pyro.infer.autoguide.initialization import InitMessenger
  from pyro.nn.module import PyroModule, PyroParam
label_desc: Use image node_id 1 to create a new EasyGuide object from inherited base classes: PyroModule with example: obj = EasyGuide(model)