1
from nose.tools import *
6
def test_union_attributes():
10
g.add_edge(0, 1, size=5)
15
h.graph['attr'] = 'attr'
18
gh = nx.union(g, h, rename=('g', 'h'))
19
assert_equal( set(gh.nodes()) , set(['h0', 'h1', 'g0', 'g1']) )
22
assert_equal( gh.node[n], eval(graph).node[int(node)] )
24
assert_equal(gh.graph['attr'],'attr')
25
assert_equal(gh.graph['name'],'h') # h graph attributes take precendent
27
def test_intersection():
30
G.add_nodes_from([1,2,3,4])
33
H.add_nodes_from([1,2,3,4])
36
I=nx.intersection(G,H)
37
assert_equal( set(I.nodes()) , set([1,2,3,4]) )
38
assert_equal( sorted(I.edges()) , [(2,3)] )
41
def test_intersection_attributes():
45
g.add_edge(0, 1, size=5)
50
h.graph['attr'] = 'attr'
53
gh = nx.intersection(g, h)
54
assert_equal( set(gh.nodes()) , set(g.nodes()) )
55
assert_equal( set(gh.nodes()) , set(h.nodes()) )
56
assert_equal( sorted(gh.edges()) , sorted(g.edges()) )
59
assert_raises(nx.NetworkXError, nx.intersection, g, h)
63
def test_intersection_multigraph_attributes():
65
g.add_edge(0, 1, key=0)
66
g.add_edge(0, 1, key=1)
67
g.add_edge(0, 1, key=2)
69
h.add_edge(0, 1, key=0)
70
h.add_edge(0, 1, key=3)
71
gh = nx.intersection(g, h)
72
assert_equal( set(gh.nodes()) , set(g.nodes()) )
73
assert_equal( set(gh.nodes()) , set(h.nodes()) )
74
assert_equal( sorted(gh.edges()) , [(0,1)] )
75
assert_equal( sorted(gh.edges(keys=True)) , [(0,1,0)] )
78
def test_difference():
81
G.add_nodes_from([1,2,3,4])
84
H.add_nodes_from([1,2,3,4])
88
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
89
assert_equal( sorted(D.edges()) , [(1,2)] )
91
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
92
assert_equal( sorted(D.edges()) , [(3,4)] )
93
D=nx.symmetric_difference(G,H)
94
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
95
assert_equal( sorted(D.edges()) , [(1,2),(3,4)] )
98
def test_difference2():
101
G.add_nodes_from([1,2,3,4])
102
H.add_nodes_from([1,2,3,4])
107
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
108
assert_equal( sorted(D.edges()) , [(2,3)] )
110
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
111
assert_equal( sorted(D.edges()) , [] )
114
assert_equal( set(D.nodes()) , set([1,2,3,4]) )
115
assert_equal( sorted(D.edges()) , [(3,4)] )
118
def test_difference_attributes():
122
g.add_edge(0, 1, size=5)
123
g.graph['name'] = 'g'
126
h.graph['name'] = 'h'
127
h.graph['attr'] = 'attr'
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()) , [])
136
assert_raises(nx.NetworkXError, nx.intersection, g, h)
138
def test_difference_multigraph_attributes():
140
g.add_edge(0, 1, key=0)
141
g.add_edge(0, 1, key=1)
142
g.add_edge(0, 1, key=2)
144
h.add_edge(0, 1, key=0)
145
h.add_edge(0, 1, key=3)
146
gh = nx.difference(g, h)
147
assert_equal( set(gh.nodes()) , set(g.nodes()) )
148
assert_equal( set(gh.nodes()) , set(h.nodes()) )
149
assert_equal( sorted(gh.edges()) , [(0,1),(0,1)] )
150
assert_equal( sorted(gh.edges(keys=True)) , [(0,1,1),(0,1,2)] )
153
@raises(nx.NetworkXError)
154
def test_difference_raise():
157
GH = nx.difference(G, H)
159
def test_symmetric_difference_multigraph():
161
g.add_edge(0, 1, key=0)
162
g.add_edge(0, 1, key=1)
163
g.add_edge(0, 1, key=2)
165
h.add_edge(0, 1, key=0)
166
h.add_edge(0, 1, key=3)
167
gh = nx.symmetric_difference(g, h)
168
assert_equal( set(gh.nodes()) , set(g.nodes()) )
169
assert_equal( set(gh.nodes()) , set(h.nodes()) )
170
assert_equal( sorted(gh.edges()) , 3*[(0,1)] )
171
assert_equal( sorted(sorted(e) for e in gh.edges(keys=True)),
172
[[0,1,1],[0,1,2],[0,1,3]] )
174
@raises(nx.NetworkXError)
175
def test_symmetric_difference_raise():
178
GH = nx.symmetric_difference(G, H)
180
def test_union_and_compose():
195
assert_true(G.edges()==H.edges())
196
assert_false(G.has_edge('A',1))
197
assert_raises(nx.NetworkXError, nx.union, K3, P3)
198
H1=union(H,G1,rename=('H','G1'))
199
assert_equal(sorted(H1.nodes()),
200
['G1A', 'G1B', 'G1C', 'G1D',
201
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
203
H2=union(H,G2,rename=("H",""))
204
assert_equal(sorted(H2.nodes()),
206
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
208
assert_false(H1.has_edge('NB','NA'))
211
assert_equal(G.edges(),H.edges())
213
G2=union(G2,G2,rename=('','copy'))
214
assert_equal(sorted(G2.nodes()),
215
['1', '2', '3', '4', 'copy1', 'copy2', 'copy3', 'copy4'])
217
assert_equal(G2.neighbors('copy4'),[])
218
assert_equal(sorted(G2.neighbors('copy1')),['copy2', 'copy3', 'copy4'])
219
assert_equal(len(G),8)
220
assert_equal(number_of_edges(G),6)
222
E=disjoint_union(G,G)
223
assert_equal(len(E),16)
224
assert_equal(number_of_edges(E),12)
226
E=disjoint_union(G1,G2)
227
assert_equal(sorted(E.nodes()),[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
230
def test_union_multigraph():
232
G.add_edge(1,2,key=0)
233
G.add_edge(1,2,key=1)
235
H.add_edge(3,4,key=0)
236
H.add_edge(3,4,key=1)
238
assert_equal( set(GH) , set(G)|set(H))
239
assert_equal( set(GH.edges(keys=True)) ,
240
set(G.edges(keys=True))|set(H.edges(keys=True)))
242
def test_disjoint_union_multigraph():
244
G.add_edge(0,1,key=0)
245
G.add_edge(0,1,key=1)
247
H.add_edge(2,3,key=0)
248
H.add_edge(2,3,key=1)
249
GH=nx.disjoint_union(G,H)
250
assert_equal( set(GH) , set(G)|set(H))
251
assert_equal( set(GH.edges(keys=True)) ,
252
set(G.edges(keys=True))|set(H.edges(keys=True)))
255
def test_compose_multigraph():
257
G.add_edge(1,2,key=0)
258
G.add_edge(1,2,key=1)
260
H.add_edge(3,4,key=0)
261
H.add_edge(3,4,key=1)
263
assert_equal( set(GH) , set(G)|set(H))
264
assert_equal( set(GH.edges(keys=True)) ,
265
set(G.edges(keys=True))|set(H.edges(keys=True)))
266
H.add_edge(1,2,key=2)
268
assert_equal( set(GH) , set(G)|set(H))
269
assert_equal( set(GH.edges(keys=True)) ,
270
set(G.edges(keys=True))|set(H.edges(keys=True)))