1111 Topology ,
1212 Wgs84GeoNode ,
1313)
14- from yaramo .operations import Split
14+ from yaramo .operations import Label , Split
1515
1616
1717def test_simple_split ():
@@ -179,7 +179,7 @@ def test_invalid_split_not_enough_edges():
179179 topology_a , topology_b = Split .split (topology , split_edges = {edge_4 : 5.0 })
180180
181181
182- def test_invalid_split_more_than_two_partitions ():
182+ def test_split_in_three_partitions ():
183183 topology = Topology ()
184184 node_1 = Node (geo_node = Wgs84GeoNode (0 , 10 ))
185185 node_2 = Node (geo_node = Wgs84GeoNode (0 , 0 ))
@@ -193,14 +193,91 @@ def test_invalid_split_more_than_two_partitions():
193193 edge_2 = Edge (node_2 , node_3 )
194194 edge_3 = Edge (node_3 , node_4 )
195195 edge_4 = Edge (node_4 , node_5 )
196- edge_5 = Edge (node_4 , node_6 )
196+ edge_5 = Edge (node_6 , node_4 )
197197 edge_6 = Edge (node_6 , node_7 )
198198 edge_7 = Edge (node_6 , node_8 )
199199 topology .add_nodes ([node_1 , node_2 , node_3 , node_4 , node_5 , node_6 , node_7 , node_8 ])
200200 topology .add_edges ([edge_1 , edge_2 , edge_3 , edge_4 , edge_5 , edge_6 , edge_7 ])
201201
202- with pytest .raises (ValueError ):
203- topology_a , topology_b = Split .split (topology , split_edges = {edge_3 : 5.0 , edge_5 : 5.0 })
202+ topology_a , topology_b = Split .split (topology , split_edges = {edge_3 : 5.0 , edge_5 : 5.0 })
203+ assert set ([node_1 , node_2 , node_3 , node_6 , node_7 , node_8 ]).issubset (topology_a .nodes .values ())
204+ assert set ([node_4 , node_5 ]).issubset (topology_b .nodes .values ())
205+ assert set ([edge_1 , edge_2 , edge_6 , edge_7 ]).issubset (topology_a .edges .values ())
206+ assert set ([edge_4 ]).issubset (topology_b .edges .values ())
207+
208+
209+ def test_split_in_more_than_three_partitions ():
210+ topology = Topology ()
211+ node_1 = Node (geo_node = Wgs84GeoNode (0 , 10 ))
212+ node_2 = Node (geo_node = Wgs84GeoNode (0 , 0 ))
213+ node_3 = Node (geo_node = Wgs84GeoNode (10 , 0 )) # Point
214+ node_4 = Node (geo_node = Wgs84GeoNode (20 , 0 )) # Point
215+ node_5 = Node (geo_node = Wgs84GeoNode (30 , 0 )) # Point
216+ node_6 = Node (geo_node = Wgs84GeoNode (40 , 10 )) # Point
217+ node_7 = Node (geo_node = Wgs84GeoNode (50 , 10 ))
218+ node_8 = Node (geo_node = Wgs84GeoNode (50 , 20 ))
219+ node_9 = Node (geo_node = Wgs84GeoNode (50 , 5 ))
220+ node_A = Node (geo_node = Wgs84GeoNode (50 , 0 ))
221+ edge_1 = Edge (node_1 , node_3 )
222+ edge_2 = Edge (node_2 , node_3 )
223+ edge_3 = Edge (node_3 , node_4 )
224+ edge_4 = Edge (node_4 , node_5 )
225+ edge_5 = Edge (node_6 , node_4 )
226+ edge_6 = Edge (node_6 , node_7 )
227+ edge_7 = Edge (node_6 , node_8 )
228+ edge_8 = Edge (node_5 , node_9 )
229+ edge_9 = Edge (node_5 , node_A )
230+ topology .add_nodes (
231+ [node_1 , node_2 , node_3 , node_4 , node_5 , node_6 , node_7 , node_8 , node_9 , node_A ]
232+ )
233+ topology .add_edges ([edge_1 , edge_2 , edge_3 , edge_4 , edge_5 , edge_6 , edge_7 , edge_8 , edge_9 ])
234+
235+ topology_a , topology_b = Split .split (
236+ topology , split_edges = {edge_3 : 5.0 , edge_5 : 5.0 , edge_4 : 5.0 }
237+ )
238+ assert set ([node_1 , node_2 , node_3 , node_5 , node_6 , node_7 , node_8 , node_9 , node_A ]).issubset (
239+ topology_a .nodes .values ()
240+ )
241+ assert set ([node_4 ]).issubset (topology_b .nodes .values ())
242+ assert set ([edge_1 , edge_2 , edge_6 , edge_7 , edge_8 , edge_9 ]).issubset (topology_a .edges .values ())
243+ # No predefined edges are left in topology B due to split edges
244+
245+
246+ def test_add_non_connected_elements_to_a_partition ():
247+ topology = Topology ()
248+ node_1 = Node (geo_node = Wgs84GeoNode (0 , 0 ))
249+ node_2 = Node (geo_node = Wgs84GeoNode (0 , 10 ))
250+ node_3 = Node (geo_node = Wgs84GeoNode (10 , 0 )) # Point
251+ node_4 = Node (geo_node = Wgs84GeoNode (20 , 0 )) # Point
252+ node_5 = Node (geo_node = Wgs84GeoNode (30 , 0 ))
253+ node_6 = Node (geo_node = Wgs84GeoNode (30 , 10 ))
254+ node_b1 = Node (geo_node = Wgs84GeoNode (100 , 0 ))
255+ node_b2 = Node (geo_node = Wgs84GeoNode (110 , 0 )) # Point
256+ node_b3 = Node (geo_node = Wgs84GeoNode (120 , 0 ))
257+ node_b4 = Node (geo_node = Wgs84GeoNode (120 , 10 ))
258+ edge_1 = Edge (node_1 , node_3 )
259+ edge_2 = Edge (node_2 , node_3 )
260+ edge_3 = Edge (node_3 , node_4 )
261+ edge_4 = Edge (node_4 , node_5 )
262+ edge_5 = Edge (node_4 , node_6 )
263+ edge_b1 = Edge (node_b1 , node_b2 )
264+ edge_b2 = Edge (node_b2 , node_b3 )
265+ edge_b3 = Edge (node_b2 , node_b4 )
266+ topology .add_nodes (
267+ [node_1 , node_2 , node_3 , node_4 , node_5 , node_6 , node_b1 , node_b2 , node_b3 , node_b4 ]
268+ )
269+ topology .add_edges ([edge_1 , edge_2 , edge_3 , edge_4 , edge_5 , edge_b1 , edge_b2 , edge_b3 ])
270+
271+ topology_a , topology_b = Split .split (
272+ topology , split_edges = {edge_3 : 5.0 }, add_missing_elements_to_topology = Label .A_Topology
273+ )
274+
275+ assert set ([node_1 , node_2 , node_3 , node_b1 , node_b2 , node_b3 , node_b4 ]).issubset (
276+ topology_a .nodes .values ()
277+ )
278+ assert set ([node_4 , node_5 , node_6 ]).issubset (topology_b .nodes .values ())
279+ assert set ([edge_1 , edge_2 , edge_b1 , edge_b2 , edge_b3 ]).issubset (topology_a .edges .values ())
280+ assert set ([edge_4 , edge_5 ]).issubset (topology_b .edges .values ())
204281
205282
206283def test_elements_on_split_edges ():
0 commit comments