def test_isomorphism_disconnected(self): """ Check the graph isomorphism for broken graphs. This tries to match graphs with a missing bond, eg. [ 0-1-2-3-4 5 ] should match [ 0-1-2-3-4 5 ] """ vertices1 = [Vertex() for _ in range(6)] edges1 = [ Edge(vertices1[0], vertices1[1]), Edge(vertices1[1], vertices1[2]), Edge(vertices1[2], vertices1[3]), Edge(vertices1[3], vertices1[4]), # Edge(vertices1[4], vertices1[5]), ] vertices2 = [Vertex() for _ in range(6)] edges2 = [ Edge(vertices2[0], vertices2[1]), Edge(vertices2[1], vertices2[2]), Edge(vertices2[2], vertices2[3]), Edge(vertices2[3], vertices2[4]), # Edge(vertices2[4], vertices2[5]), ] graph1 = Graph() for vertex in vertices1: graph1.add_vertex(vertex) for edge in edges1: graph1.add_edge(edge) graph2 = Graph() for vertex in vertices2: graph2.add_vertex(vertex) for edge in edges2: graph2.add_edge(edge) self.assertTrue(graph1.is_isomorphic(graph2)) self.assertTrue(graph1.is_subgraph_isomorphic(graph2)) self.assertTrue(graph2.is_isomorphic(graph1)) self.assertTrue(graph2.is_subgraph_isomorphic(graph1)) self.assertTrue(len(graph1.find_subgraph_isomorphisms(graph2)) > 0)
def test_subgraph_isomorphism(self): """ Check the subgraph isomorphism functions. """ vertices1 = [Vertex() for _ in range(6)] edges1 = [ Edge(vertices1[0], vertices1[1]), Edge(vertices1[1], vertices1[2]), Edge(vertices1[2], vertices1[3]), Edge(vertices1[3], vertices1[4]), Edge(vertices1[4], vertices1[5]), ] vertices2 = [Vertex() for _ in range(2)] edges2 = [ Edge(vertices2[0], vertices2[1]), ] graph1 = Graph() for vertex in vertices1: graph1.add_vertex(vertex) for edge in edges1: graph1.add_edge(edge) graph2 = Graph() for vertex in vertices2: graph2.add_vertex(vertex) for edge in edges2: graph2.add_edge(edge) self.assertFalse(graph1.is_isomorphic(graph2)) self.assertFalse(graph2.is_isomorphic(graph1)) self.assertTrue(graph1.is_subgraph_isomorphic(graph2)) map_list = graph1.find_subgraph_isomorphisms(graph2) self.assertTrue(len(map_list) == 10) for mapping in map_list: self.assertTrue(graph1.is_mapping_valid(graph2, mapping)) self.assertTrue(graph1.is_mapping_valid(graph2, mapping))