docstr: Returns True if adding (G1_node, G2_node) is semantically
  feasible.
  
  Any subclass which redefines semantic_feasibility() must
  maintain the self.tests if needed, to keep the match() method
  functional. Implementations should consider multigraphs.
docstr_tok: ["Returns","True","if","adding","(","G1_node",",","G2_node",")","is","semantically","feasible",".","Any","subclass","which","redefines","semantic_feasibility","(",")","must","maintain","the","self.tests","if","needed",",","to","keep","the","match","(",")","method","functional",".","Implementations","should","consider","multigraphs","."]
code: def semantic_feasibility(self, G1_node, G2_node):
      """Returns True if adding (G1_node, G2_node) is semantically
      feasible.
  
      Any subclass which redefines semantic_feasibility() must
      maintain the self.tests if needed, to keep the match() method
      functional. Implementations should consider multigraphs.
      """
      neighbors = [n for n in self.G1[G1_node] if n in self.core_1]
      if not self.one_hop(
          self.G1, G1_node, neighbors
      ):  # Fail fast on first node.
          return False
      if not self.two_hop(self.G1, self.core_1, G1_node, neighbors):
          return False
      # Otherwise, this node is semantically feasible!
      return True
  
imports: import networkx
  from .isomorphvf2 import DiGraphMatcher, GraphMatcher
label_desc: Use image node_id 4 for calling the TimeRespectingGraphMatcher obj's underlying member method code with example usage: obj.semantic_feasibility(G1_node, G2_node) and returns: True, False, False