Пример #1
0
    def test_create_directed_graph_from_lists(self):
        """ Create a directed graph from lists of vertices and edges """
        vertices = [('v0', {'city': 'Paris'}),
                    (1, {'continent': 'Europe', 'city': 'London'}),
                    ((2, 2),),
                    ('v3',),
                    ('v4',)]
        edges = [(('v0', 1), {'weight': 3}),
                 (('v0', (2, 2)), {'weight': 4}),
                 ((1, 'v3'),),
                 ((1, 'v0'), {'weight': 5})]
        g = DirectedGraph.from_lists(vertices, edges)

        v0 = g.get_vertex('v0')
        v1 = g.get_vertex(1)
        v2 = g.get_vertex((2, 2))
        v3 = g.get_vertex('v3')
        v4 = g.get_vertex('v4')
        e01 = g.get_edge(('v0', 1))
        e02 = g.get_edge(('v0', (2, 2)))
        e13 = g.get_edge((1, 'v3'))
        e10 = g.get_edge((1, 'v0'))
        self.assertEqual(g.num_vertices, 5)
        self.assertEqual(g.num_edges, 4)
        self.assertEqual(set(v0.outs), set([v1, v2]))
        self.assertEqual(set(v1.outs), set([v0, v3]))
        self.assertEqual(set(v2.outs), set())
        self.assertEqual(set(v3.outs), set())
        self.assertEqual(set(v4.outs), set())
        self.assertEqual(set(v0.ins), set([v1]))
        self.assertEqual(set(v1.ins), set([v0]))
        self.assertEqual(set(v2.ins), set([v0]))
        self.assertEqual(set(v3.ins), set([v1]))
        self.assertEqual(set(v4.ins), set())
        self.assertEqual(v0.get('city'), 'Paris')
        self.assertEqual(v1.get('continent'), 'Europe')
        self.assertEqual(v1.get('city'), 'London')
        self.assertIsNone(v2.get('city'))
        self.assertEqual(e01.get('weight'), 3)
        self.assertEqual(e02.get('weight'), 4)
        self.assertIsNone(e13.get('weight'))
        self.assertEqual(e10.get('weight'), 5)

        duplicate_vertices = [('v0_dupe',), ('v0_dupe',)]
        with self.assertRaises(ValueError):
            _ = DirectedGraph.from_lists(duplicate_vertices, [])

        vertices_dupe_edge = [('v0_dupe_edge',), ('v1_dupe_edge',)]
        duplicate_edges = [(('v0_dupe_edge', 'v1_dupe_edge'),),
                           (('v0_dupe_edge', 'v1_dupe_edge'),)]
        with self.assertRaises(ValueError):
            _ = DirectedGraph.from_lists(vertices_dupe_edge, duplicate_edges)
Пример #2
0
    def test_directed_graph_clone(self):
        """ Clone a directed graph """
        vertices = [('v0', {'city': 'Paris'}),
                    ('v1', {'continent': 'Europe', 'city': 'London'}),
                    ('v2',),
                    ('v3',),
                    ('v4',)]
        edges = [(('v0', 'v0'), {'weight': 1}),
                 (('v0', 'v1'), {'weight': 3}),
                 (('v0', 'v2'), {'weight': 4}),
                 (('v1', 'v3'),)]
        g = DirectedGraph.from_lists(vertices, edges)

        g_prime = g.clone()

        v0 = g.get_vertex('v0')
        v0_prime = g_prime.get_vertex('v0')
        e01 = g.get_edge(('v0', 'v1'))
        e01_prime = g_prime.get_edge(('v0', 'v1'))
        self.assertEqual(g_prime.num_vertices, g.num_vertices)
        self.assertEqual(g_prime.num_edges, g.num_edges)
        self.assertNotEqual(v0, v0_prime)
        self.assertNotEqual(e01, e01_prime)
        self.assertEqual(v0.attrs, v0_prime.attrs)

        g.add_vertex('v5', {'city': 'Jamestown'})

        self.assertTrue(g.has_vertex('v5'))
        self.assertFalse(g_prime.has_vertex('v5'))

        g.remove_vertex('v0')

        self.assertFalse(g.has_vertex('v0'))
        self.assertTrue(g_prime.has_vertex('v0'))
        self.assertFalse(g.has_edge(('v0', 'v1')))
        self.assertTrue(g_prime.has_edge(('v0', 'v1')))

        e01.set('weight', 5)

        self.assertEqual(e01.get('weight'), 5)
        self.assertEqual(e01_prime.get('weight'), 3)