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 i 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 i 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.addVertex(vertex) for edge in edges1: graph1.addEdge(edge) graph2 = Graph() for vertex in vertices2: graph2.addVertex(vertex) for edge in edges2: graph2.addEdge(edge) self.assertTrue(graph1.isIsomorphic(graph2)) self.assertTrue(graph1.isSubgraphIsomorphic(graph2)) self.assertTrue(graph2.isIsomorphic(graph1)) self.assertTrue(graph2.isSubgraphIsomorphic(graph1)) self.assertTrue(len(graph1.findSubgraphIsomorphisms(graph2)) > 0)
def test_subgraphIsomorphism(self): """ Check the subgraph isomorphism functions. """ vertices1 = [Vertex() for i 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 i in range(2)] edges2 = [ Edge(vertices2[0], vertices2[1]), ] graph1 = Graph() for vertex in vertices1: graph1.addVertex(vertex) for edge in edges1: graph1.addEdge(edge) graph2 = Graph() for vertex in vertices2: graph2.addVertex(vertex) for edge in edges2: graph2.addEdge(edge) self.assertFalse(graph1.isIsomorphic(graph2)) self.assertFalse(graph2.isIsomorphic(graph1)) self.assertTrue(graph1.isSubgraphIsomorphic(graph2)) mapList = graph1.findSubgraphIsomorphisms(graph2) self.assertTrue(len(mapList) == 10) for mapping in mapList: self.assertTrue(graph1.isMappingValid(graph2, mapping)) self.assertTrue(graph1.isMappingValid(graph2, mapping))
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 i 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 i 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.addVertex(vertex) for edge in edges1: graph1.addEdge(edge) graph2 = Graph() for vertex in vertices2: graph2.addVertex(vertex) for edge in edges2: graph2.addEdge(edge) self.assertTrue(graph1.isIsomorphic(graph2)) self.assertTrue(graph1.isSubgraphIsomorphic(graph2)) self.assertTrue(graph2.isIsomorphic(graph1)) self.assertTrue(graph2.isSubgraphIsomorphic(graph1)) self.assertTrue(len(graph1.findSubgraphIsomorphisms(graph2)) > 0)
def test_subgraphIsomorphism(self): """ Check the subgraph isomorphism functions. """ vertices1 = [Vertex() for i 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 i in range(2)] edges2 = [Edge(vertices2[0], vertices2[1])] graph1 = Graph() for vertex in vertices1: graph1.addVertex(vertex) for edge in edges1: graph1.addEdge(edge) graph2 = Graph() for vertex in vertices2: graph2.addVertex(vertex) for edge in edges2: graph2.addEdge(edge) self.assertFalse(graph1.isIsomorphic(graph2)) self.assertFalse(graph2.isIsomorphic(graph1)) self.assertTrue(graph1.isSubgraphIsomorphic(graph2)) mapList = graph1.findSubgraphIsomorphisms(graph2) self.assertTrue(len(mapList) == 10) for mapping in mapList: self.assertTrue(graph1.isMappingValid(graph2, mapping)) self.assertTrue(graph1.isMappingValid(graph2, mapping))