class_docstr: Normalized delta distribution binding multiple variables.
  
  There are three syntaxes supported for constructing Deltas::
  
      Delta(((name1, (point1, log_density1)),
             (name2, (point2, log_density2)),
             (name3, (point3, log_density3))))
  
  or for a single name::
  
      Delta(name, point, log_density)
  
  or for default ``log_density == 0``::
  
      Delta(name, point)
  
  :param tuple terms: A tuple of tuples of the form
      ``(name, (point, log_density))``.
class_docstr_tok: ["Normalized","delta","distribution","binding","multiple","variables",".","There","are","three","syntaxes","supported","for","constructing","Deltas",":",":","Delta","(","(","(","name1",",","(","point1",",","log_density1",")",")",",","(","name2",",","(","point2",",","log_density2",")",")",",","(","name3",",","(","point3",",","log_density3",")",")",")",")","or","for","a","single","name",":",":","Delta","(","name",",","point",",","log_density",")","or","for","default","``","log_density","==","0","``",":",":","Delta","(","name",",","point",")",":","param","tuple","terms",":","A","tuple","of","tuples","of","the","form","``","(","name",",","(","point",",","log_density",")",")","``","."]
code: def __init__(self, terms):
      assert isinstance(terms, tuple) and len(terms) > 0
      inputs = OrderedDict()
      for name, (point, log_density) in terms:
          assert isinstance(name, str)
          assert isinstance(point, Funsor)
          assert isinstance(log_density, Funsor)
          assert log_density.output == Real
          assert name not in inputs
          assert name not in point.inputs
          inputs.update({name: point.output})
          inputs.update(point.inputs)
  
      output = Real
      fresh = frozenset(name for name, term in terms)
      bound = {}
      super(Delta, self).__init__(inputs, output, fresh, bound)
      self.terms = terms
  
imports: from collections import OrderedDict
  from functools import reduce
  from funsor.domains import Domain, Real
  from funsor.instrument import debug_logged
  from funsor.ops import AddOp, SubOp, TransformOp
  from funsor.registry import KeyedRegistry
  from funsor.terms import Align, Binary, Funsor, FunsorMeta, Independent, Lambda, Number, Unary, Variable, eager, to_funsor
  from funsor.util import get_default_dtype
  from .None import ops
label_desc: Use image node_id 1 to create a new Delta object from inherited base classes: Funsor with example: obj = Delta(terms)