code: def differentiable_loss(self, model, guide, *args, **kwargs):
      kwargs["_model_id"] = id(model)
      kwargs["_guide_id"] = id(guide)
      if getattr(self, "_differentiable_loss", None) is None:
          # build a closure for differentiable_loss
          superself = super()
  
          @pyro.ops.jit.trace(
              ignore_warnings=self.ignore_jit_warnings,
              jit_options=self.jit_options,
          )
          def differentiable_loss(*args, **kwargs):
              kwargs.pop("_model_id")
              kwargs.pop("_guide_id")
  
              with ignore_jit_warnings(
                  [("Iterating over a tensor", RuntimeWarning)]
              ):
                  return superself.differentiable_loss(
                      model, guide, *args, **kwargs
                  )
  
          self._differentiable_loss = differentiable_loss
  
      return self._differentiable_loss(*args, **kwargs)
  
file_path: pyro/pyro/contrib/funsor/infer/elbo.py
imports: import pyro.ops.jit
  from pyro.infer import ELBO
  from pyro.util import ignore_jit_warnings
label_desc: Use image node_id 1 for calling the Jit_ELBO obj's underlying member method code with example usage: obj.differentiable_loss(model, guide) and returns: self, superself