class_docstr: Wrapper around :class:`~pyro.distributions.Normal` to allow partially
  observed data as specified by NAN elements in :meth:`log_prob`; the
  ``log_prob`` of these elements will be zero. This is useful for likelihoods
  with missing data.
  
  Example::
  
      from math import nan
      data = torch.tensor([0.5, 0.1, nan, 0.9])
      with pyro.plate("data", len(data)):
          pyro.sample("obs", NanMaskedNormal(0, 1), obs=data)
code: def log_prob(self, value: torch.Tensor) -> torch.Tensor:
      ok = value.isfinite()
      if ok.all():
          return super().log_prob(value)
  
      # Broadcast all tensors.
      value, ok, loc, scale = torch.broadcast_tensors(
          value, ok, self.loc, self.scale
      )
      result = value.new_zeros(value.shape)
  
      # Evaluate ok elements.
      if ok.any():
          marginal = Normal(loc[ok], scale[ok], validate_args=False)
          result[ok] = marginal.log_prob(value[ok])
      return result
  
file_path: pyro/pyro/distributions/nanmasked.py
imports: import torch
  from .torch import MultivariateNormal, Normal
label_desc: Use image node_id 1 for calling the NanMaskedNormal obj's underlying member method code with example usage: obj.log_prob(value) and returns: result, super