@@ -69,18 +69,8 @@ def _add_elements_to_topology(
6969 _add_elements_to_topology (node_labels , topology_a .add_node , topology_b .add_node )
7070 _add_elements_to_topology (edge_labels , topology_a .add_edge , topology_b .add_edge )
7171 _add_elements_to_topology (signal_labels , topology_a .add_signal , topology_b .add_signal )
72+ Split ._assign_routes_to_topologies (topology , topology_a , topology_b , edge_labels , signal_labels )
7273
73- # Assign routes
74- for route in topology .routes .values ():
75- start_signal_label = signal_labels [route .start_signal ]
76- end_signal_label = signal_labels [route .end_signal ]
77- if start_signal_label != end_signal_label :
78- # Route goes over split edges, remove this route
79- continue
80- if start_signal_label == Label .A_Topology :
81- topology_a .add_route (route )
82- elif start_signal_label == Label .B_Topology :
83- topology_b .add_route (route )
8474
8575 Split ._validate_for_data_loss (topology , topology_a , topology_b , split_edges )
8676
@@ -178,6 +168,18 @@ def _get_new_geo_node_same_type(_old_geo_node: GeoNode, x: float, y: float) -> G
178168 edge_b .signals .append (signal )
179169 signal .edge = edge_b
180170
171+ for route in topology .routes .values ():
172+ if edge in route .edges :
173+ route .edges .remove (edge )
174+ if route .start_signal .edge not in route .edges or route .end_signal .edge not in route .edges :
175+ if route .start_signal .edge not in route .edges :
176+ route .edges .add (route .start_signal .edge )
177+ if route .end_signal .edge not in route .edges :
178+ route .edges .add (route .end_signal .edge )
179+ else :
180+ route .edges .add (edge_a )
181+ route .edges .add (edge_b )
182+
181183 new_end_nodes [edge ] = (end_node_a , end_node_b )
182184
183185 return new_end_nodes
@@ -232,6 +234,27 @@ def _dfs(_start_node: Node, _label):
232234
233235 return node_labels , edge_labels , signal_labels
234236
237+ @staticmethod
238+ def _assign_routes_to_topologies (topology : Topology , topology_a : Topology , topology_b : Topology , edge_labels : Dict [Edge , Label ], signal_labels : Dict [Signal , Label ]):
239+ for route in topology .routes .values ():
240+ start_signal_label = signal_labels [route .start_signal ]
241+ end_signal_label = signal_labels [route .end_signal ]
242+ if start_signal_label != end_signal_label :
243+ # Route start and end in different areas, remove route
244+ continue
245+ all_edges_in_same_topology = True
246+ for edge in route .edges :
247+ if edge_labels [edge ] != start_signal_label :
248+ # Route goes over different area, remove route
249+ all_edges_in_same_topology = False
250+ if not all_edges_in_same_topology :
251+ continue
252+ if start_signal_label == Label .A_Topology :
253+ topology_a .add_route (route )
254+ else :
255+ topology_b .add_route (route )
256+
257+
235258 @staticmethod
236259 def _assign_missing_elements_to_label (
237260 topology : Topology ,
0 commit comments