1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
import networkx as nx
from .test_digraph import BaseDiGraphTester
from .test_digraph import TestDiGraph as _TestDiGraph
from .test_graph import BaseGraphTester
from .test_graph import TestGraph as _TestGraph
from .test_multidigraph import TestMultiDiGraph as _TestMultiDiGraph
from .test_multigraph import TestMultiGraph as _TestMultiGraph
def test_factories():
class mydict1(dict):
pass
class mydict2(dict):
pass
class mydict3(dict):
pass
class mydict4(dict):
pass
class mydict5(dict):
pass
for Graph in (nx.Graph, nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph):
# print("testing class: ", Graph.__name__)
class MyGraph(Graph):
node_dict_factory = mydict1
adjlist_outer_dict_factory = mydict2
adjlist_inner_dict_factory = mydict3
edge_key_dict_factory = mydict4
edge_attr_dict_factory = mydict5
G = MyGraph()
assert isinstance(G._node, mydict1)
assert isinstance(G._adj, mydict2)
G.add_node(1)
assert isinstance(G._adj[1], mydict3)
if G.is_directed():
assert isinstance(G._pred, mydict2)
assert isinstance(G._succ, mydict2)
assert isinstance(G._pred[1], mydict3)
G.add_edge(1, 2)
if G.is_multigraph():
assert isinstance(G._adj[1][2], mydict4)
assert isinstance(G._adj[1][2][0], mydict5)
else:
assert isinstance(G._adj[1][2], mydict5)
class TestSpecialGraph(_TestGraph):
def setup_method(self):
_TestGraph.setup_method(self)
self.Graph = nx.Graph
class TestThinGraph(BaseGraphTester):
def setup_method(self):
all_edge_dict = {"weight": 1}
class MyGraph(nx.Graph):
def edge_attr_dict_factory(self):
return all_edge_dict
self.Graph = MyGraph
# build dict-of-dict-of-dict K3
ed1, ed2, ed3 = (all_edge_dict, all_edge_dict, all_edge_dict)
self.k3adj = {0: {1: ed1, 2: ed2}, 1: {0: ed1, 2: ed3}, 2: {0: ed2, 1: ed3}}
self.k3edges = [(0, 1), (0, 2), (1, 2)]
self.k3nodes = [0, 1, 2]
self.K3 = self.Graph()
self.K3._adj = self.k3adj
self.K3._node = {}
self.K3._node[0] = {}
self.K3._node[1] = {}
self.K3._node[2] = {}
class TestSpecialDiGraph(_TestDiGraph):
def setup_method(self):
_TestDiGraph.setup_method(self)
self.Graph = nx.DiGraph
class TestThinDiGraph(BaseDiGraphTester):
def setup_method(self):
all_edge_dict = {"weight": 1}
class MyGraph(nx.DiGraph):
def edge_attr_dict_factory(self):
return all_edge_dict
self.Graph = MyGraph
# build dict-of-dict-of-dict K3
ed1, ed2, ed3 = (all_edge_dict, all_edge_dict, all_edge_dict)
ed4, ed5, ed6 = (all_edge_dict, all_edge_dict, all_edge_dict)
self.k3adj = {0: {1: ed1, 2: ed2}, 1: {0: ed3, 2: ed4}, 2: {0: ed5, 1: ed6}}
self.k3edges = [(0, 1), (0, 2), (1, 2)]
self.k3nodes = [0, 1, 2]
self.K3 = self.Graph()
self.K3._succ = self.k3adj
# K3._adj is synced with K3._succ
self.K3._pred = {0: {1: ed3, 2: ed5}, 1: {0: ed1, 2: ed6}, 2: {0: ed2, 1: ed4}}
self.K3._node = {}
self.K3._node[0] = {}
self.K3._node[1] = {}
self.K3._node[2] = {}
ed1, ed2 = (all_edge_dict, all_edge_dict)
self.P3 = self.Graph()
self.P3._succ = {0: {1: ed1}, 1: {2: ed2}, 2: {}}
# P3._adj is synced with P3._succ
self.P3._pred = {0: {}, 1: {0: ed1}, 2: {1: ed2}}
self.P3._node = {}
self.P3._node[0] = {}
self.P3._node[1] = {}
self.P3._node[2] = {}
class TestSpecialMultiGraph(_TestMultiGraph):
def setup_method(self):
_TestMultiGraph.setup_method(self)
self.Graph = nx.MultiGraph
class TestSpecialMultiDiGraph(_TestMultiDiGraph):
def setup_method(self):
_TestMultiDiGraph.setup_method(self)
self.Graph = nx.MultiDiGraph
|