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: :return: The set of variables used by this edge.
  :rtype: set(Variable)
docstr_tok: [":","return",":","The","set","of","variables","used","by","this","edge",".",":","rtype",":","set","(","Variable",")"]
code: def variables(self):
      """
      :return: The set of variables used by this edge.
      :rtype: set(Variable)
      """
      return find_variables(
          [self._lhs]
          + list(self._rhs)
          + list(self._bindings.keys())
          + list(self._bindings.values()),
          fs_class=FeatStruct,
      )
  
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 7 for calling the FeatureTreeEdge obj's underlying member method code with example usage: obj.variables() and returns: find_variables