Esempio n. 1
0
    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)
Esempio n. 2
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))