6
6
from test_multigraph import TestMultiGraph
9
8
class TestMultiDiGraph(TestMultiGraph):
11
10
self.Graph=networkx.MultiDiGraph
13
self.k3adj={0: {1: [1], 2: [1]},
16
12
self.k3edges=[(0, 1), (0, 2), (1, 2)]
17
13
self.k3nodes=[0, 1, 2]
18
14
self.K3=self.Graph()
19
self.K3.adj=self.k3adj
20
self.K3.pred=copy.deepcopy(self.k3adj)
21
self.K3.succ=self.k3adj
24
def test_data_input(self):
25
G=self.Graph(data={1:[2],2:[1]}, name="test")
26
assert_equal(G.name,"test")
27
assert_equal(sorted(G.adj.items()),[(1, {2: [1]}), (2, {1: [1]})])
28
assert_equal(sorted(G.succ.items()),[(1, {2: [1]}), (2, {1: [1]})])
29
assert_equal(sorted(G.pred.items()),[(1, {2: [1]}), (2, {1: [1]})])
15
self.K3.adj={0:{},1:{},2:{}}
16
self.K3.succ=self.K3.adj
17
self.K3.pred={0:{},1:{},2:{}}
18
for u in self.k3nodes:
19
for v in self.k3nodes:
24
self.K3.adj=self.K3.succ
25
self.K3.edge=self.K3.adj
33
# def test_data_input(self):
34
# G=self.Graph(data={1:[2],2:[1]}, name="test")
35
# assert_equal(G.name,"test")
36
# assert_equal(sorted(G.adj.items()),[(1, {2: [1]}), (2, {1: [1]})])
37
# assert_equal(sorted(G.succ.items()),[(1, {2: [1]}), (2, {1: [1]})])
38
# assert_equal(sorted(G.pred.items()),[(1, {2: [1]}), (2, {1: [1]})])
32
41
def test_add_edge(self):
35
assert_equal(G.adj,{0: {1: [1]}, 1: {}})
36
assert_equal(G.succ,{0: {1: [1]}, 1: {}})
37
assert_equal(G.pred,{0: {}, 1: {0:[1]}})
44
assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
45
assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
46
assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})
40
assert_equal(G.adj,{0: {1: [1]}, 1: {}})
41
assert_equal(G.succ,{0: {1: [1]}, 1: {}})
42
assert_equal(G.pred,{0: {}, 1: {0:[1]}})
49
assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
50
assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
51
assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})
46
55
def test_add_edges_from(self):
48
G.add_edges_from([(0,1)])
49
assert_equal(G.adj,{0: {1: [1]}, 1: {}})
50
assert_equal(G.succ,{0: {1: [1]}, 1: {}})
51
assert_equal(G.pred,{0: {}, 1: {0:[1]}})
57
G.add_edges_from([(0,1),(0,1,{'weight':3})])
58
assert_equal(G.adj,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
59
assert_equal(G.succ,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
60
assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3}}}})
62
G.add_edges_from([(0,1),(0,1,{'weight':3})],weight=2)
63
assert_equal(G.succ,{0: {1: {0:{},
68
assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3},
72
assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,)]) # too few in tuple
73
assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,1,2,3,4)]) # too many in tuple
74
assert_raises(TypeError, G.add_edges_from,[0]) # not a tuple
54
77
def test_remove_edge(self):
57
assert_equal(G.succ,{0:{2:[1]},1:{0:[1],2:[1]},2:{0:[1],1:[1]}})
58
assert_equal(G.pred,{0:{1:[1], 2:[1]}, 1:{2:[1]}, 2:{0:[1],1:[1]}})
59
assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
80
assert_equal(G.succ,{0:{2:{0:{}}},
81
1:{0:{0:{}},2:{0:{}}},
82
2:{0:{0:{}},1:{0:{}}}})
83
assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
85
2:{0:{0:{}},1:{0:{}}}})
86
assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
88
def test_remove_multiedge(self):
90
G.add_edge(0,1,key='parallel edge')
91
G.remove_edge(0,1,key='parallel edge')
92
assert_equal(G.adj,{0: {1: {0:{}}, 2: {0:{}}},
93
1: {0: {0:{}}, 2: {0:{}}},
94
2: {0: {0:{}}, 1: {0:{}}}})
96
assert_equal(G.succ,{0: {1: {0:{}}, 2: {0:{}}},
97
1: {0: {0:{}}, 2: {0:{}}},
98
2: {0: {0:{}}, 1: {0:{}}}})
100
assert_equal(G.pred,{0:{1: {0:{}},2:{0:{}}},
101
1:{0:{0:{}},2:{0:{}}},
102
2:{0:{0:{}},1:{0:{}}}})
104
assert_equal(G.succ,{0:{2:{0:{}}},
105
1:{0:{0:{}},2:{0:{}}},
106
2:{0:{0:{}},1:{0:{}}}})
107
assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
109
2:{0:{0:{}},1:{0:{}}}})
110
assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
62
112
def test_remove_edges_from(self):
64
114
G.remove_edges_from([(0,1)])
65
assert_equal(G.succ,{0:{2:[1]},1:{0:[1],2:[1]},2:{0:[1],1:[1]}})
66
assert_equal(G.pred,{0:{1:[1], 2:[1]}, 1:{2:[1]}, 2:{0:[1],1:[1]}})
115
assert_equal(G.succ,{0:{2:{0:{}}},
116
1:{0:{0:{}},2:{0:{}}},
117
2:{0:{0:{}},1:{0:{}}}})
118
assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
120
2:{0:{0:{}},1:{0:{}}}})
67
121
G.remove_edges_from([(0,0)]) # silent fail
70
124
def test_edges(self):
72
127
assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
73
128
assert_equal(sorted(G.edges(0)),[(0,1),(0,2)])
129
assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
131
def test_edges_data(self):
133
assert_equal(sorted(G.edges(data=True)),
134
[(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),(2,0,{}),(2,1,{})])
135
assert_equal(sorted(G.edges(0,data=True)),[(0,1,{}),(0,2,{})])
74
136
assert_raises((KeyError,networkx.NetworkXError), G.neighbors,-1)
77
139
def test_edges_iter(self):
79
assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
141
assert_equal(sorted(G.edges_iter()),
142
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
80
143
assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
81
assert_raises((KeyError,networkx.NetworkXError), G.neighbors_iter,-1)
83
assert_equal(sorted(G.edges(data=True)),[(0,1,1),(0,1,2),(0,2,1),(1,0,1),(1,2,1),(2,0,1),(2,1,1)])
89
assert_equal(G.succ,H.succ)
90
assert_equal(G.pred,H.pred)
92
def test_to_directed(self):
94
H=networkx.MultiDiGraph(G)
95
assert_equal(G.pred,H.pred)
96
assert_equal(G.succ,H.succ)
98
assert_equal(G.pred,H.pred)
99
assert_equal(G.succ,H.succ)
145
assert_equal(sorted(G.edges_iter()),
146
[(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
150
def test_out_edges(self):
152
assert_equal(sorted(G.out_edges()),
153
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
154
assert_equal(sorted(G.out_edges(0)),[(0,1),(0,2)])
155
assert_raises((KeyError,networkx.NetworkXError), G.out_edges,-1)
158
def test_out_edges_iter(self):
160
assert_equal(sorted(G.out_edges_iter()),
161
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
162
assert_equal(sorted(G.out_edges_iter(0)),[(0,1),(0,2)])
164
assert_equal(sorted(G.out_edges_iter()),
165
[(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
167
def test_in_edges(self):
169
assert_equal(sorted(G.in_edges()),
170
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
171
assert_equal(sorted(G.in_edges(0)),[(1,0),(2,0)])
172
assert_raises((KeyError,networkx.NetworkXError), G.in_edges,-1)
174
assert_equal(sorted(G.in_edges()),
175
[(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
179
def test_in_edges_iter(self):
181
assert_equal(sorted(G.in_edges_iter()),
182
[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
183
assert_equal(sorted(G.in_edges_iter(0)),[(1,0),(2,0)])
185
assert_equal(sorted(G.in_edges_iter()),
186
[(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
188
def is_shallow(self,H,G):
190
assert_equal(G.graph['foo'],H.graph['foo'])
191
G.graph['foo'].append(1)
192
assert_equal(G.graph['foo'],H.graph['foo'])
194
assert_equal(G.node[0]['foo'],H.node[0]['foo'])
195
G.node[0]['foo'].append(1)
196
assert_equal(G.node[0]['foo'],H.node[0]['foo'])
198
assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
199
G[1][2][0]['foo'].append(1)
200
assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
202
def is_deep(self,H,G):
204
assert_equal(G.graph['foo'],H.graph['foo'])
205
G.graph['foo'].append(1)
206
assert_not_equal(G.graph['foo'],H.graph['foo'])
208
assert_equal(G.node[0]['foo'],H.node[0]['foo'])
209
G.node[0]['foo'].append(1)
210
assert_not_equal(G.node[0]['foo'],H.node[0]['foo'])
212
assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
213
G[1][2][0]['foo'].append(1)
214
assert_not_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
101
216
def test_to_undirected(self):
217
# MultiDiGraph -> MultiGraph changes number of edges so it is
218
# not a copy operation... use is_shallow, not is_shallow_copy
220
self.add_attributes(G)
103
221
H=networkx.MultiGraph(G)
104
assert_equal(G.adj,H.adj)
106
226
def test_has_successor(self):