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
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
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())
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},)]})
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
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)
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)