3
from nose import SkipTest
4
from nose.tools import assert_raises, assert_true, assert_false, assert_equal
10
def test_union_attributes():
14
g.add_edge(0, 1, size=5)
19
h.graph['attr'] = 'attr'
22
gh = nx.union(g, h, rename=('g', 'h'))
23
assert_equal( set(gh.nodes()) , set(['h0', 'h1', 'g0', 'g1']) )
26
assert_equal( gh.node[n], eval(graph).node[int(node)] )
28
assert_equal(gh.graph['attr'],'attr')
29
assert_equal(gh.graph['name'],'g') # g graph attributes take precendent
31
def test_intersection():
34
G.add_nodes_from([1,2,3,4])
37
H.add_nodes_from([1,2,3,4])
40
I=nx.intersection(G,H)
41
assert_equal( set(I.nodes()) , set([1,2,3,4]) )
42
assert_equal( sorted(I.edges()) , [(2,3)] )
45
def test_intersection_attributes():
49
g.add_edge(0, 1, size=5)
54
h.graph['attr'] = 'attr'
57
gh = nx.intersection(g, h)
58
assert_equal( set(gh.nodes()) , set(g.nodes()) )
59
assert_equal( set(gh.nodes()) , set(h.nodes()) )
60
assert_equal( sorted(gh.edges()) , sorted(g.edges()) )
63
assert_raises(nx.NetworkXError, nx.intersection, g, h)
67
def test_intersection_multigraph_attributes():
69
g.add_edge(0, 1, key=0)
70
g.add_edge(0, 1, key=1)
71
g.add_edge(0, 1, key=2)
73
h.add_edge(0, 1, key=0)
74
h.add_edge(0, 1, key=3)
75
gh = nx.intersection(g, h)
76
assert_equal( set(gh.nodes()) , set(g.nodes()) )
77
assert_equal( set(gh.nodes()) , set(h.nodes()) )
78
assert_equal( sorted(gh.edges()) , [(0,1)] )
79
assert_equal( sorted(gh.edges(keys=True)) , [(0,1,0)] )
82
def test_difference():
85
G.add_nodes_from([1,2,3,4])
88
H.add_nodes_from([1,2,3,4])
92
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
93
assert_equal( sorted(D.edges()) , [(1,2)] )
95
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
96
assert_equal( sorted(D.edges()) , [(3,4)] )
97
D=nx.symmetric_difference(G,H)
98
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
99
assert_equal( sorted(D.edges()) , [(1,2),(3,4)] )
102
def test_difference_attributes():
106
g.add_edge(0, 1, size=5)
107
g.graph['name'] = 'g'
110
h.graph['name'] = 'h'
111
h.graph['attr'] = 'attr'
114
gh = nx.difference(g, h)
115
assert_equal( set(gh.nodes()) , set(g.nodes()) )
116
assert_equal( set(gh.nodes()) , set(h.nodes()) )
117
assert_equal( sorted(gh.edges()) , [])
120
assert_raises(nx.NetworkXError, nx.intersection, g, h)
122
def test_difference_multigraph_attributes():
124
g.add_edge(0, 1, key=0)
125
g.add_edge(0, 1, key=1)
126
g.add_edge(0, 1, key=2)
128
h.add_edge(0, 1, key=0)
129
h.add_edge(0, 1, key=3)
130
gh = nx.difference(g, h)
131
assert_equal( set(gh.nodes()) , set(g.nodes()) )
132
assert_equal( set(gh.nodes()) , set(h.nodes()) )
133
assert_equal( sorted(gh.edges()) , [(0,1)] )
134
assert_equal( sorted(gh.edges(keys=True)) , [(0,1,3)] )
137
def test_symmetric_difference_multigraph():
139
g.add_edge(0, 1, key=0)
140
g.add_edge(0, 1, key=1)
141
g.add_edge(0, 1, key=2)
143
h.add_edge(0, 1, key=0)
144
h.add_edge(0, 1, key=3)
145
gh = nx.symmetric_difference(g, h)
146
assert_equal( set(gh.nodes()) , set(g.nodes()) )
147
assert_equal( set(gh.nodes()) , set(h.nodes()) )
148
assert_equal( sorted(gh.edges()) , 3*[(0,1)] )
149
assert_equal( sorted(sorted(e) for e in gh.edges(keys=True)),
150
[[0,1,1],[0,1,2],[0,1,3]] )
152
def test_union_and_compose():
166
G=union(G1,G2,create_using=R)
168
assert_true(G.edges()==H.edges())
169
assert_false(G.has_edge('A',1))
170
assert_raises(nx.NetworkXError, nx.union, K3, P3)
171
H1=union(H,G1,rename=('H','G1'))
172
assert_equal(sorted(H1.nodes()),
173
['G1A', 'G1B', 'G1C', 'G1D',
174
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
176
H2=union(H,G2,rename=("H",""))
177
assert_equal(sorted(H2.nodes()),
179
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
181
assert_false(H1.has_edge('NB','NA'))
184
assert_equal(G.edges(),H.edges())
186
G2=union(G2,G2,rename=('','copy'))
187
assert_equal(sorted(G2.nodes()),
188
['1', '2', '3', '4', 'copy1', 'copy2', 'copy3', 'copy4'])
190
assert_equal(G2.neighbors('copy4'),[])
191
assert_equal(sorted(G2.neighbors('copy1')),['copy2', 'copy3', 'copy4'])
192
assert_equal(len(G),8)
193
assert_equal(number_of_edges(G),6)
195
E=disjoint_union(G,G)
196
assert_equal(len(E),16)
197
assert_equal(number_of_edges(E),12)
199
E=disjoint_union(G1,G2)
200
assert_equal(sorted(E.nodes()),[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
203
def test_union_multigraph():
205
G.add_edge(1,2,key=0)
206
G.add_edge(1,2,key=1)
208
H.add_edge(3,4,key=0)
209
H.add_edge(3,4,key=1)
211
assert_equal( set(GH) , set(G)|set(H))
212
assert_equal( set(GH.edges(keys=True)) ,
213
set(G.edges(keys=True))|set(H.edges(keys=True)))
215
def test_disjoint_union_multigraph():
217
G.add_edge(0,1,key=0)
218
G.add_edge(0,1,key=1)
220
H.add_edge(2,3,key=0)
221
H.add_edge(2,3,key=1)
222
GH=nx.disjoint_union(G,H)
223
assert_equal( set(GH) , set(G)|set(H))
224
assert_equal( set(GH.edges(keys=True)) ,
225
set(G.edges(keys=True))|set(H.edges(keys=True)))
228
def test_complement():
230
empty1=empty_graph(1)
231
empty10=empty_graph(10)
234
K10=complete_graph(10)
239
#complement of the complete graph is empty
242
assert_true(is_isomorphic(G,empty_graph(3)))
244
assert_true(is_isomorphic(G,empty_graph(5)))
245
# for any G, G=complement(complement(G))
246
P3cc=complement(complement(P3))
247
assert_true(is_isomorphic(P3,P3cc))
248
nullcc=complement(complement(null))
249
assert_true(is_isomorphic(null,nullcc))
251
bcc=complement(complement(b))
252
assert_true(is_isomorphic(b,bcc))
254
def test_complement_2():
260
assert_equal(sorted(G1C.edges()),
261
[('B', 'A'), ('B', 'C'),
262
('B', 'D'), ('C', 'A'), ('C', 'B'),
263
('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C')])
266
def test_cartesian_product():
268
empty1=empty_graph(1)
269
empty10=empty_graph(10)
272
K10=complete_graph(10)
278
G=cartesian_product(null,null)
279
assert_true(is_isomorphic(G,null))
280
# null_graph X anything = null_graph and v.v.
281
G=cartesian_product(null,empty10)
282
assert_true(is_isomorphic(G,null))
283
G=cartesian_product(null,K3)
284
assert_true(is_isomorphic(G,null))
285
G=cartesian_product(null,K10)
286
assert_true(is_isomorphic(G,null))
287
G=cartesian_product(null,P3)
288
assert_true(is_isomorphic(G,null))
289
G=cartesian_product(null,P10)
290
assert_true(is_isomorphic(G,null))
291
G=cartesian_product(empty10,null)
292
assert_true(is_isomorphic(G,null))
293
G=cartesian_product(K3,null)
294
assert_true(is_isomorphic(G,null))
295
G=cartesian_product(K10,null)
296
assert_true(is_isomorphic(G,null))
297
G=cartesian_product(P3,null)
298
assert_true(is_isomorphic(G,null))
299
G=cartesian_product(P10,null)
300
assert_true(is_isomorphic(G,null))
302
# order(GXH)=order(G)*order(H)
303
G=cartesian_product(P5,K3)
304
assert_equal(number_of_nodes(G),5*3)
305
assert_equal(number_of_edges(G),
306
number_of_edges(P5)*number_of_nodes(K3)+
307
number_of_edges(K3)*number_of_nodes(P5))
308
G=cartesian_product(K3,K5)
309
assert_equal(number_of_nodes(G),3*5)
310
assert_equal(number_of_edges(G),
311
number_of_edges(K5)*number_of_nodes(K3)+
312
number_of_edges(K3)*number_of_nodes(K5))
314
# test some classic product graphs
315
# cube = 2-path X 2-path
316
G=cartesian_product(P2,P2)
317
G=cartesian_product(P2,G)
318
assert_true(is_isomorphic(G,cubical_graph()))
321
G=cartesian_product(P3,P3)
322
assert_true(is_isomorphic(G,grid_2d_graph(3,3)))
325
def test_cartesian_product_multigraph():
327
G.add_edge(1,2,key=0)
328
G.add_edge(1,2,key=1)
330
H.add_edge(3,4,key=0)
331
H.add_edge(3,4,key=1)
332
GH=nx.cartesian_product(G,H)
333
assert_equal( set(GH) , set([(1, 3), (2, 3), (2, 4), (1, 4)]))
334
assert_equal( set(GH.edges(keys=True)) ,
335
set([((1, 3), (2, 3), 0), ((1, 3), (2, 3), 1),
336
((1, 3), (1, 4), 0), ((1, 3), (1, 4), 1),
337
((2, 3), (2, 4), 0), ((2, 3), (2, 4), 1),
338
((2, 4), (1, 4), 0), ((2, 4), (1, 4), 1)]))
340
def test_compose_multigraph():
342
G.add_edge(1,2,key=0)
343
G.add_edge(1,2,key=1)
345
H.add_edge(3,4,key=0)
346
H.add_edge(3,4,key=1)
348
assert_equal( set(GH) , set(G)|set(H))
349
assert_equal( set(GH.edges(keys=True)) ,
350
set(G.edges(keys=True))|set(H.edges(keys=True)))
351
H.add_edge(1,2,key=2)
353
assert_equal( set(GH) , set(G)|set(H))
354
assert_equal( set(GH.edges(keys=True)) ,
355
set(G.edges(keys=True))|set(H.edges(keys=True)))