comparison env/lib/python3.9/site-packages/networkx/algorithms/tree/tests/test_recognition.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 import pytest
2 import networkx as nx
3
4
5 class TestTreeRecognition:
6
7 graph = nx.Graph
8 multigraph = nx.MultiGraph
9
10 @classmethod
11 def setup_class(cls):
12
13 cls.T1 = cls.graph()
14
15 cls.T2 = cls.graph()
16 cls.T2.add_node(1)
17
18 cls.T3 = cls.graph()
19 cls.T3.add_nodes_from(range(5))
20 edges = [(i, i + 1) for i in range(4)]
21 cls.T3.add_edges_from(edges)
22
23 cls.T5 = cls.multigraph()
24 cls.T5.add_nodes_from(range(5))
25 edges = [(i, i + 1) for i in range(4)]
26 cls.T5.add_edges_from(edges)
27
28 cls.T6 = cls.graph()
29 cls.T6.add_nodes_from([6, 7])
30 cls.T6.add_edge(6, 7)
31
32 cls.F1 = nx.compose(cls.T6, cls.T3)
33
34 cls.N4 = cls.graph()
35 cls.N4.add_node(1)
36 cls.N4.add_edge(1, 1)
37
38 cls.N5 = cls.graph()
39 cls.N5.add_nodes_from(range(5))
40
41 cls.N6 = cls.graph()
42 cls.N6.add_nodes_from(range(3))
43 cls.N6.add_edges_from([(0, 1), (1, 2), (2, 0)])
44
45 cls.NF1 = nx.compose(cls.T6, cls.N6)
46
47 def test_null_tree(self):
48 with pytest.raises(nx.NetworkXPointlessConcept):
49 nx.is_tree(self.graph())
50
51 def test_null_tree2(self):
52 with pytest.raises(nx.NetworkXPointlessConcept):
53 nx.is_tree(self.multigraph())
54
55 def test_null_forest(self):
56 with pytest.raises(nx.NetworkXPointlessConcept):
57 nx.is_forest(self.graph())
58
59 def test_null_forest2(self):
60 with pytest.raises(nx.NetworkXPointlessConcept):
61 nx.is_forest(self.multigraph())
62
63 def test_is_tree(self):
64 assert nx.is_tree(self.T2)
65 assert nx.is_tree(self.T3)
66 assert nx.is_tree(self.T5)
67
68 def test_is_not_tree(self):
69 assert not nx.is_tree(self.N4)
70 assert not nx.is_tree(self.N5)
71 assert not nx.is_tree(self.N6)
72
73 def test_is_forest(self):
74 assert nx.is_forest(self.T2)
75 assert nx.is_forest(self.T3)
76 assert nx.is_forest(self.T5)
77 assert nx.is_forest(self.F1)
78 assert nx.is_forest(self.N5)
79
80 def test_is_not_forest(self):
81 assert not nx.is_forest(self.N4)
82 assert not nx.is_forest(self.N6)
83 assert not nx.is_forest(self.NF1)
84
85
86 class TestDirectedTreeRecognition(TestTreeRecognition):
87 graph = nx.DiGraph
88 multigraph = nx.MultiDiGraph
89
90
91 def test_disconnected_graph():
92 # https://github.com/networkx/networkx/issues/1144
93 G = nx.Graph()
94 G.add_edges_from([(0, 1), (1, 2), (2, 0), (3, 4)])
95 assert not nx.is_tree(G)
96
97 G = nx.DiGraph()
98 G.add_edges_from([(0, 1), (1, 2), (2, 0), (3, 4)])
99 assert not nx.is_tree(G)
100
101
102 def test_dag_nontree():
103 G = nx.DiGraph()
104 G.add_edges_from([(0, 1), (0, 2), (1, 2)])
105 assert not nx.is_tree(G)
106 assert nx.is_directed_acyclic_graph(G)
107
108
109 def test_multicycle():
110 G = nx.MultiDiGraph()
111 G.add_edges_from([(0, 1), (0, 1)])
112 assert not nx.is_tree(G)
113 assert nx.is_directed_acyclic_graph(G)
114
115
116 def test_emptybranch():
117 G = nx.DiGraph()
118 G.add_nodes_from(range(10))
119 assert nx.is_branching(G)
120 assert not nx.is_arborescence(G)
121
122
123 def test_path():
124 G = nx.DiGraph()
125 nx.add_path(G, range(5))
126 assert nx.is_branching(G)
127 assert nx.is_arborescence(G)
128
129
130 def test_notbranching1():
131 # Acyclic violation.
132 G = nx.MultiDiGraph()
133 G.add_nodes_from(range(10))
134 G.add_edges_from([(0, 1), (1, 0)])
135 assert not nx.is_branching(G)
136 assert not nx.is_arborescence(G)
137
138
139 def test_notbranching2():
140 # In-degree violation.
141 G = nx.MultiDiGraph()
142 G.add_nodes_from(range(10))
143 G.add_edges_from([(0, 1), (0, 2), (3, 2)])
144 assert not nx.is_branching(G)
145 assert not nx.is_arborescence(G)
146
147
148 def test_notarborescence1():
149 # Not an arborescence due to not spanning.
150 G = nx.MultiDiGraph()
151 G.add_nodes_from(range(10))
152 G.add_edges_from([(0, 1), (0, 2), (1, 3), (5, 6)])
153 assert nx.is_branching(G)
154 assert not nx.is_arborescence(G)
155
156
157 def test_notarborescence2():
158 # Not an arborescence due to in-degree violation.
159 G = nx.MultiDiGraph()
160 nx.add_path(G, range(5))
161 G.add_edge(6, 4)
162 assert not nx.is_branching(G)
163 assert not nx.is_arborescence(G)