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 align(self, names):
      assert isinstance(names, tuple)
      assert all(name in self.fresh for name in names)
      if not names or names == tuple(n for n, p in self.terms):
          return self
  
      new_terms = tuple(
          sorted(self.terms, key=lambda t: names.index(t[0]))
      )
      return Delta(new_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 2 for calling the Delta obj's underlying member method code with example usage: obj.align(names) and returns: Delta, self