Example #1
0
    def test_directed_graph_is_weakly_connected(self):
        """ Get whether a path exists for every pair of vertices in a directed
            graph when treating its edges as undirected """
        g_connected = DirectedGraph.from_dict({'v0': [('v1',), ('v2',)],
                                               'v1': [],
                                               'v2': []})
        g_disconnected = DirectedGraph.from_dict({'v0': [('v1',)],
                                                  'v1': [],
                                                  'v2': []})

        self.assertTrue(g_connected.is_weakly_connected)
        self.assertFalse(g_disconnected.is_weakly_connected)
        with self.assertRaises(AttributeError):
            g_connected.is_weakly_connected = False
        with self.assertRaises(AttributeError):
            g_disconnected.is_weakly_connected = True
Example #2
0
    def test_directed_graph_is_strongly_connected(self):
        """ Get whether a path exists in both directions for every pair of
            vertices in a directed graph """
        g_connected = DirectedGraph.from_dict({'v0': [('v1',)],
                                               'v1': [('v2',)],
                                               'v2': [('v0',)]})
        g_disconnected = DirectedGraph.from_dict({'v0': [('v1',), ('v2',)],
                                                  'v1': [],
                                                  'v2': []})

        self.assertTrue(g_connected.is_strongly_connected)
        self.assertFalse(g_disconnected.is_strongly_connected)
        with self.assertRaises(AttributeError):
            g_connected.is_strongly_connected = False
        with self.assertRaises(AttributeError):
            g_disconnected.is_strongly_connected = True
Example #3
0
    def test_create_directed_graph_from_transpose(self):
        """ Create a directed graph by reversing the edges of an input graph """
        graph_dict = {'v0': [('v1',), ('v2',)],
                      'v1': [('v0',), ('v3',)],
                      'v2': [],
                      'v3': [],
                      'v4': []}
        tg = DirectedGraph.from_dict(graph_dict)
        g = DirectedGraph.from_transpose(tg)

        v0 = g.get_vertex('v0')
        v1 = g.get_vertex('v1')
        v2 = g.get_vertex('v2')
        v3 = g.get_vertex('v3')
        v4 = g.get_vertex('v4')
        self.assertEqual(g.num_vertices, 5)
        self.assertEqual(g.num_edges, 4)
        self.assertEqual(set(v0.outs), set([v1]))
        self.assertEqual(set(v1.outs), set([v0]))
        self.assertEqual(set(v2.outs), set([v0]))
        self.assertEqual(set(v3.outs), set([v1]))
        self.assertEqual(set(v4.outs), set())
        self.assertEqual(set(v0.ins), set([v1, v2]))
        self.assertEqual(set(v1.ins), set([v0, v3]))
        self.assertEqual(set(v2.ins), set())
        self.assertEqual(set(v3.ins), set())
        self.assertEqual(set(v4.ins), set())
Example #4
0
    def test_create_directed_graph_from_dict(self):
        """ Create a directed graph from an adjacency dictionary """
        graph_dict = {'v0': [(1,), (1,), ((2, 2), {'weight': 5})],
                      1: [('v0',), ('v3',)],
                      (2, 2): [],
                      'v3': [],
                      'v4': []}
        vertex_attrs = {'v0': {'city': 'Paris'},
                        1: {'continent': 'Europe', 'city': 'London'},
                        'v5': {'city': 'Jamestown'}}
        g = DirectedGraph.from_dict(graph_dict, vertex_attrs=vertex_attrs)

        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')
        v5 = g.get_vertex('v5')
        e01 = g.get_edge(('v0', 1))
        e02 = g.get_edge(('v0', (2, 2)))
        self.assertEqual(g.num_vertices, 6)
        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.assertEqual(v5.get('city'), 'Jamestown')
        self.assertIsNone(v2.get('city'))
        self.assertIsNone(e01.get('weight'))
        self.assertEqual(e02.get('weight'), 5)
        with self.assertRaises(ValueError):
            _ = DirectedGraph.from_dict({'v0': [({'weight': 5},)],
                                         'v1': [({'weight': 3},)]})
Example #5
0
    def test_directed_graph_num_vertices_and_num_edges(self):
        """ Get the number of a directed graph's vertices and edges """
        g = DirectedGraph.from_dict({'v0': [('v1',)],
                                     'v1': []})

        self.assertEqual(g.num_vertices, 2)
        self.assertEqual(g.num_edges, 1)
        with self.assertRaises(AttributeError):
            g.num_vertices = 0
        with self.assertRaises(AttributeError):
            g.num_edges = 0
Example #6
0
    def test_create_undirected_graph_from_directed_graph(self):
        """ Create an undirected graph from a directed graph """
        graph_dict = {'v0': [('v0',), ('v1',), ('v2',)],
                      'v1': [('v0',), ('v3',)],
                      'v2': [],
                      'v3': [('v1',)],
                      'v4': []}
        dg = DirectedGraph.from_dict(graph_dict)
        g = UndirectedGraph.from_directed_graph(dg)

        self.assertEqual(g.num_vertices, 5)
        self.assertEqual(g.num_edges, 4)
Example #7
0
    def test_directed_graph_average_outs_and_average_ins(self):
        """ Get the average out degree and in degree of all vertices in a
            directed graph """
        g = DirectedGraph.from_dict({'v0': [('v1',)],
                                     'v1': [],
                                     'v2': []})
        empty_g = DirectedGraph()

        self.assertEqual(g.average_outs, 1.0 / 3.0)
        self.assertEqual(g.average_ins, 1.0 / 3.0)
        with self.assertRaises(AttributeError):
            g.average_outs = 0
        with self.assertRaises(AttributeError):
            g.average_ins = 0
        self.assertEqual(empty_g.average_outs, 0)
        self.assertEqual(empty_g.average_ins, 0)