class_docstr: A specialized tree edge that allows shared variable bindings
  between nonterminals on the left-hand side and right-hand side.
  
  Each ``FeatureTreeEdge`` contains a set of ``bindings``, i.e., a
  dictionary mapping from variables to values.  If the edge is not
  complete, then these bindings are simply stored.  However, if the
  edge is complete, then the constructor applies these bindings to
  every nonterminal in the edge whose symbol implements the
  interface ``SubstituteBindingsI``.
class_docstr_tok: ["A","specialized","tree","edge","that","allows","shared","variable","bindings","between","nonterminals","on","the","left-hand","side","and","right-hand","side",".","Each","``","FeatureTreeEdge","``","contains","a","set","of","``","bindings","``",",","i.e.",",","a","dictionary","mapping","from","variables","to","values",".","If","the","edge","is","not","complete",",","then","these","bindings","are","simply","stored",".","However",",","if","the","edge","is","complete",",","then","the","constructor","applies","these","bindings","to","every","nonterminal","in","the","edge","whose","symbol","implements","the","interface","``","SubstituteBindingsI","``","."]
docstr: Construct a new edge.  If the edge is incomplete (i.e., if
  ``dot<len(rhs)``), then store the bindings as-is.  If the edge
  is complete (i.e., if ``dot==len(rhs)``), then apply the
  bindings to all nonterminals in ``lhs`` and ``rhs``, and then
  clear the bindings.  See ``TreeEdge`` for a description of
  the other arguments.
docstr_tok: ["Construct","a","new","edge",".","If","the","edge","is","incomplete","(","i.e.",",","if","``","dot","<","len","(","rhs",")","``",")",",","then","store","the","bindings","as-is",".","If","the","edge","is","complete","(","i.e.",",","if","``","dot==len","(","rhs",")","``",")",",","then","apply","the","bindings","to","all","nonterminals","in","``","lhs","``","and","``","rhs","``",",","and","then","clear","the","bindings",".","See","``","TreeEdge","``","for","a","description","of","the","other","arguments","."]
code: def __init__(self, span, lhs, rhs, dot=0, bindings=None):
      """
      Construct a new edge.  If the edge is incomplete (i.e., if
      ``dot<len(rhs)``), then store the bindings as-is.  If the edge
      is complete (i.e., if ``dot==len(rhs)``), then apply the
      bindings to all nonterminals in ``lhs`` and ``rhs``, and then
      clear the bindings.  See ``TreeEdge`` for a description of
      the other arguments.
      """
      if bindings is None:
          bindings = {}
  
      # If the edge is complete, then substitute in the bindings,
      # and then throw them away.  (If we didn't throw them away, we
      # might think that 2 complete edges are different just because
      # they have different bindings, even though all bindings have
      # already been applied.)
      if dot == len(rhs) and bindings:
          lhs = self._bind(lhs, bindings)
          rhs = [self._bind(elt, bindings) for elt in rhs]
          bindings = {}
  
      # Initialize the edge.
      TreeEdge.__init__(self, span, lhs, rhs, dot)
      self._bindings = bindings
      self._comparison_key = (
          self._comparison_key,
          tuple(sorted(bindings.items())),
      )
  
imports: from time import perf_counter
  from nltk.featstruct import TYPE, FeatStruct, find_variables, unify
  from nltk.grammar import CFG, FeatStructNonterminal, Nonterminal, Production, is_nonterminal, is_terminal
  from nltk.parse.chart import BottomUpPredictCombineRule, BottomUpPredictRule, CachedTopDownPredictRule, Chart, ChartParser, EdgeI, EmptyPredictRule, FundamentalRule, LeafInitRule, SingleEdgeFundamentalRule, TopDownInitRule, TreeEdge
  from nltk.sem import logic
  from nltk.tree import Tree
label_desc: Use image node_id 1 to create a new FeatureTreeEdge object from inherited base classes: TreeEdge with example: obj = FeatureTreeEdge(span, lhs, rhs, dot, bindings)