Skip to content

Commit a564ff2

Browse files
Split: Fix handling of routes
1 parent 643a292 commit a564ff2

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

yaramo/operations/split.py

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)