comparison planemo/lib/python3.7/site-packages/networkx/tests/test_convert.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
comparison
equal deleted inserted replaced
0:d30785e31577 1:56ad4e20f292
1 #!/usr/bin/env python
2 import pytest
3
4 import networkx as nx
5 from networkx.testing import assert_nodes_equal, assert_edges_equal, assert_graphs_equal
6 from networkx.convert import (to_networkx_graph,
7 to_dict_of_dicts,
8 from_dict_of_dicts,
9 to_dict_of_lists,
10 from_dict_of_lists)
11 from networkx.generators.classic import barbell_graph, cycle_graph
12
13
14 class TestConvert():
15 def edgelists_equal(self, e1, e2):
16 return sorted(sorted(e) for e in e1) == sorted(sorted(e) for e in e2)
17
18 def test_simple_graphs(self):
19 for dest, source in [(to_dict_of_dicts, from_dict_of_dicts),
20 (to_dict_of_lists, from_dict_of_lists)]:
21 G = barbell_graph(10, 3)
22 G.graph = {}
23 dod = dest(G)
24
25 # Dict of [dicts, lists]
26 GG = source(dod)
27 assert_graphs_equal(G, GG)
28 GW = to_networkx_graph(dod)
29 assert_graphs_equal(G, GW)
30 GI = nx.Graph(dod)
31 assert_graphs_equal(G, GI)
32
33 # With nodelist keyword
34 P4 = nx.path_graph(4)
35 P3 = nx.path_graph(3)
36 P4.graph = {}
37 P3.graph = {}
38 dod = dest(P4, nodelist=[0, 1, 2])
39 Gdod = nx.Graph(dod)
40 assert_graphs_equal(Gdod, P3)
41
42 def test_exceptions(self):
43 # NX graph
44 class G(object):
45 adj = None
46
47 pytest.raises(nx.NetworkXError, to_networkx_graph, G)
48
49 # pygraphviz agraph
50 class G(object):
51 is_strict = None
52
53 pytest.raises(nx.NetworkXError, to_networkx_graph, G)
54
55 # Dict of [dicts, lists]
56 G = {"a": 0}
57 pytest.raises(TypeError, to_networkx_graph, G)
58
59 # list or generator of edges
60 class G(object):
61 next = None
62
63 pytest.raises(nx.NetworkXError, to_networkx_graph, G)
64
65 # no match
66 pytest.raises(nx.NetworkXError, to_networkx_graph, "a")
67
68 def test_digraphs(self):
69 for dest, source in [(to_dict_of_dicts, from_dict_of_dicts),
70 (to_dict_of_lists, from_dict_of_lists)]:
71 G = cycle_graph(10)
72
73 # Dict of [dicts, lists]
74 dod = dest(G)
75 GG = source(dod)
76 assert_nodes_equal(sorted(G.nodes()), sorted(GG.nodes()))
77 assert_edges_equal(sorted(G.edges()), sorted(GG.edges()))
78 GW = to_networkx_graph(dod)
79 assert_nodes_equal(sorted(G.nodes()), sorted(GW.nodes()))
80 assert_edges_equal(sorted(G.edges()), sorted(GW.edges()))
81 GI = nx.Graph(dod)
82 assert_nodes_equal(sorted(G.nodes()), sorted(GI.nodes()))
83 assert_edges_equal(sorted(G.edges()), sorted(GI.edges()))
84
85 G = cycle_graph(10, create_using=nx.DiGraph)
86 dod = dest(G)
87 GG = source(dod, create_using=nx.DiGraph)
88 assert sorted(G.nodes()) == sorted(GG.nodes())
89 assert sorted(G.edges()) == sorted(GG.edges())
90 GW = to_networkx_graph(dod, create_using=nx.DiGraph)
91 assert sorted(G.nodes()) == sorted(GW.nodes())
92 assert sorted(G.edges()) == sorted(GW.edges())
93 GI = nx.DiGraph(dod)
94 assert sorted(G.nodes()) == sorted(GI.nodes())
95 assert sorted(G.edges()) == sorted(GI.edges())
96
97 def test_graph(self):
98 g = nx.cycle_graph(10)
99 G = nx.Graph()
100 G.add_nodes_from(g)
101 G.add_weighted_edges_from((u, v, u) for u, v in g.edges())
102
103 # Dict of dicts
104 dod = to_dict_of_dicts(G)
105 GG = from_dict_of_dicts(dod, create_using=nx.Graph)
106 assert_nodes_equal(sorted(G.nodes()), sorted(GG.nodes()))
107 assert_edges_equal(sorted(G.edges()), sorted(GG.edges()))
108 GW = to_networkx_graph(dod, create_using=nx.Graph)
109 assert_nodes_equal(sorted(G.nodes()), sorted(GW.nodes()))
110 assert_edges_equal(sorted(G.edges()), sorted(GW.edges()))
111 GI = nx.Graph(dod)
112 assert sorted(G.nodes()) == sorted(GI.nodes())
113 assert sorted(G.edges()) == sorted(GI.edges())
114
115 # Dict of lists
116 dol = to_dict_of_lists(G)
117 GG = from_dict_of_lists(dol, create_using=nx.Graph)
118 # dict of lists throws away edge data so set it to none
119 enone = [(u, v, {}) for (u, v, d) in G.edges(data=True)]
120 assert_nodes_equal(sorted(G.nodes()), sorted(GG.nodes()))
121 assert_edges_equal(enone, sorted(GG.edges(data=True)))
122 GW = to_networkx_graph(dol, create_using=nx.Graph)
123 assert_nodes_equal(sorted(G.nodes()), sorted(GW.nodes()))
124 assert_edges_equal(enone, sorted(GW.edges(data=True)))
125 GI = nx.Graph(dol)
126 assert_nodes_equal(sorted(G.nodes()), sorted(GI.nodes()))
127 assert_edges_equal(enone, sorted(GI.edges(data=True)))
128
129 def test_with_multiedges_self_loops(self):
130 G = cycle_graph(10)
131 XG = nx.Graph()
132 XG.add_nodes_from(G)
133 XG.add_weighted_edges_from((u, v, u) for u, v in G.edges())
134 XGM = nx.MultiGraph()
135 XGM.add_nodes_from(G)
136 XGM.add_weighted_edges_from((u, v, u) for u, v in G.edges())
137 XGM.add_edge(0, 1, weight=2) # multiedge
138 XGS = nx.Graph()
139 XGS.add_nodes_from(G)
140 XGS.add_weighted_edges_from((u, v, u) for u, v in G.edges())
141 XGS.add_edge(0, 0, weight=100) # self loop
142
143 # Dict of dicts
144 # with self loops, OK
145 dod = to_dict_of_dicts(XGS)
146 GG = from_dict_of_dicts(dod, create_using=nx.Graph)
147 assert_nodes_equal(XGS.nodes(), GG.nodes())
148 assert_edges_equal(XGS.edges(), GG.edges())
149 GW = to_networkx_graph(dod, create_using=nx.Graph)
150 assert_nodes_equal(XGS.nodes(), GW.nodes())
151 assert_edges_equal(XGS.edges(), GW.edges())
152 GI = nx.Graph(dod)
153 assert_nodes_equal(XGS.nodes(), GI.nodes())
154 assert_edges_equal(XGS.edges(), GI.edges())
155
156 # Dict of lists
157 # with self loops, OK
158 dol = to_dict_of_lists(XGS)
159 GG = from_dict_of_lists(dol, create_using=nx.Graph)
160 # dict of lists throws away edge data so set it to none
161 enone = [(u, v, {}) for (u, v, d) in XGS.edges(data=True)]
162 assert_nodes_equal(sorted(XGS.nodes()), sorted(GG.nodes()))
163 assert_edges_equal(enone, sorted(GG.edges(data=True)))
164 GW = to_networkx_graph(dol, create_using=nx.Graph)
165 assert_nodes_equal(sorted(XGS.nodes()), sorted(GW.nodes()))
166 assert_edges_equal(enone, sorted(GW.edges(data=True)))
167 GI = nx.Graph(dol)
168 assert_nodes_equal(sorted(XGS.nodes()), sorted(GI.nodes()))
169 assert_edges_equal(enone, sorted(GI.edges(data=True)))
170
171 # Dict of dicts
172 # with multiedges, OK
173 dod = to_dict_of_dicts(XGM)
174 GG = from_dict_of_dicts(dod, create_using=nx.MultiGraph,
175 multigraph_input=True)
176 assert_nodes_equal(sorted(XGM.nodes()), sorted(GG.nodes()))
177 assert_edges_equal(sorted(XGM.edges()), sorted(GG.edges()))
178 GW = to_networkx_graph(dod, create_using=nx.MultiGraph, multigraph_input=True)
179 assert_nodes_equal(sorted(XGM.nodes()), sorted(GW.nodes()))
180 assert_edges_equal(sorted(XGM.edges()), sorted(GW.edges()))
181 GI = nx.MultiGraph(dod) # convert can't tell whether to duplicate edges!
182 assert_nodes_equal(sorted(XGM.nodes()), sorted(GI.nodes()))
183 #assert_not_equal(sorted(XGM.edges()), sorted(GI.edges()))
184 assert not sorted(XGM.edges()) == sorted(GI.edges())
185 GE = from_dict_of_dicts(dod, create_using=nx.MultiGraph,
186 multigraph_input=False)
187 assert_nodes_equal(sorted(XGM.nodes()), sorted(GE.nodes()))
188 assert sorted(XGM.edges()) != sorted(GE.edges())
189 GI = nx.MultiGraph(XGM)
190 assert_nodes_equal(sorted(XGM.nodes()), sorted(GI.nodes()))
191 assert_edges_equal(sorted(XGM.edges()), sorted(GI.edges()))
192 GM = nx.MultiGraph(G)
193 assert_nodes_equal(sorted(GM.nodes()), sorted(G.nodes()))
194 assert_edges_equal(sorted(GM.edges()), sorted(G.edges()))
195
196 # Dict of lists
197 # with multiedges, OK, but better write as DiGraph else you'll
198 # get double edges
199 dol = to_dict_of_lists(G)
200 GG = from_dict_of_lists(dol, create_using=nx.MultiGraph)
201 assert_nodes_equal(sorted(G.nodes()), sorted(GG.nodes()))
202 assert_edges_equal(sorted(G.edges()), sorted(GG.edges()))
203 GW = to_networkx_graph(dol, create_using=nx.MultiGraph)
204 assert_nodes_equal(sorted(G.nodes()), sorted(GW.nodes()))
205 assert_edges_equal(sorted(G.edges()), sorted(GW.edges()))
206 GI = nx.MultiGraph(dol)
207 assert_nodes_equal(sorted(G.nodes()), sorted(GI.nodes()))
208 assert_edges_equal(sorted(G.edges()), sorted(GI.edges()))
209
210 def test_edgelists(self):
211 P = nx.path_graph(4)
212 e = [(0, 1), (1, 2), (2, 3)]
213 G = nx.Graph(e)
214 assert_nodes_equal(sorted(G.nodes()), sorted(P.nodes()))
215 assert_edges_equal(sorted(G.edges()), sorted(P.edges()))
216 assert_edges_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
217
218 e = [(0, 1, {}), (1, 2, {}), (2, 3, {})]
219 G = nx.Graph(e)
220 assert_nodes_equal(sorted(G.nodes()), sorted(P.nodes()))
221 assert_edges_equal(sorted(G.edges()), sorted(P.edges()))
222 assert_edges_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
223
224 e = ((n, n + 1) for n in range(3))
225 G = nx.Graph(e)
226 assert_nodes_equal(sorted(G.nodes()), sorted(P.nodes()))
227 assert_edges_equal(sorted(G.edges()), sorted(P.edges()))
228 assert_edges_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
229
230 def test_directed_to_undirected(self):
231 edges1 = [(0, 1), (1, 2), (2, 0)]
232 edges2 = [(0, 1), (1, 2), (0, 2)]
233 assert self.edgelists_equal(nx.Graph(nx.DiGraph(edges1)).edges(), edges1)
234 assert self.edgelists_equal(nx.Graph(nx.DiGraph(edges2)).edges(), edges1)
235 assert self.edgelists_equal(nx.MultiGraph(nx.DiGraph(edges1)).edges(), edges1)
236 assert self.edgelists_equal(nx.MultiGraph(nx.DiGraph(edges2)).edges(), edges1)
237
238 assert self.edgelists_equal(nx.MultiGraph(nx.MultiDiGraph(edges1)).edges(),
239 edges1)
240 assert self.edgelists_equal(nx.MultiGraph(nx.MultiDiGraph(edges2)).edges(),
241 edges1)
242
243 assert self.edgelists_equal(nx.Graph(nx.MultiDiGraph(edges1)).edges(), edges1)
244 assert self.edgelists_equal(nx.Graph(nx.MultiDiGraph(edges2)).edges(), edges1)
245
246 def test_attribute_dict_integrity(self):
247 # we must not replace dict-like graph data structures with dicts
248 G = nx.OrderedGraph()
249 G.add_nodes_from("abc")
250 H = to_networkx_graph(G, create_using=nx.OrderedGraph)
251 assert list(H.nodes) == list(G.nodes)
252 H = nx.OrderedDiGraph(G)
253 assert list(H.nodes) == list(G.nodes)
254
255 def test_to_edgelist(self):
256 G = nx.Graph([(1, 1)])
257 elist = nx.to_edgelist(G, nodelist=list(G))
258 assert_edges_equal(G.edges(data=True), elist)
259
260 def test_custom_node_attr_dict_safekeeping(self):
261 class custom_dict(dict):
262 pass
263
264 class Custom(nx.Graph):
265 node_attr_dict_factory = custom_dict
266
267 g = nx.Graph()
268 g.add_node(1, weight=1)
269
270 h = Custom(g)
271 assert isinstance(g._node[1], dict)
272 assert isinstance(h._node[1], custom_dict)
273
274 # this raise exception
275 # h._node.update((n, dd.copy()) for n, dd in g.nodes.items())
276 # assert isinstance(h._node[1], custom_dict)