'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.'

def semantic_feasibility(self, G1_node, G2_node):

    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)):
        return False
    if (not self.two_hop(self.G1, self.core_1, G1_node, neighbors)):
        return False
    return True
