From 3b80e6477089567543d8eeda7f2b62fbb82e76cf Mon Sep 17 00:00:00 2001
From: Thomas Kramer <code@tkramer.ch>
Date: Thu, 23 Feb 2023 08:54:16 +0100
Subject: [PATCH] separate function for setting terminal costs

---
 lclayout/router.py | 57 +++++++++++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/lclayout/router.py b/lclayout/router.py
index de990f0..c43aa67 100644
--- a/lclayout/router.py
+++ b/lclayout/router.py
@@ -463,30 +463,7 @@ class DefaultRouter():
                 assert False, 'Routing graph is not connected.'
 
         # Set via weights based on terminal costs.
-        regions_by_layer = {
-            # Convert Shapes objects into db.Region for fast 'inside' checks.
-            layer: db.Region(s) for layer, s in shapes.items()
-        }
-        for net, ts in terminals_by_net:
-            for terminal_node in ts:
-                layer, (x, y) = terminal_node
-                possible_via_layers = (data['layer'] for _, _, data in via_layers.edges(layer, data=True))
-
-                for via_layer in possible_via_layers:
-                    via_cost = compute_terminal_cost(
-                        via_layer,
-                        layer,
-                        (x, y),
-                        regions_by_layer[layer],
-                        tech
-                    )
-
-                    other_node = via_layer, (x, y) # Node on the other side of the via.
-
-                    if terminal_node in graph and other_node in graph:
-                        # Scale the via cost
-                        graph[terminal_node][other_node]['weight'] *= via_cost + 1
-
+        _set_terminal_costs(graph, shapes, terminals_by_net, tech)
 
         self._routing_graph = graph
 
@@ -640,6 +617,38 @@ class DefaultRouter():
 
             # Merge the polygons on all layers.
             # _merge_all_layers(shapes)
+
+def _set_terminal_costs(
+    graph: nx.Graph,
+    shapes: Dict[str, db.Shape],
+    terminals_by_net: Dict[str, List]
+):
+    """
+    Set via weights based on terminal costs.
+    """
+    regions_by_layer = {
+        # Convert Shapes objects into db.Region for fast 'inside' checks.
+        layer: db.Region(s) for layer, s in shapes.items()
+    }
+    for net, ts in terminals_by_net:
+        for terminal_node in ts:
+            layer, (x, y) = terminal_node
+            possible_via_layers = (data['layer'] for _, _, data in via_layers.edges(layer, data=True))
+
+            for via_layer in possible_via_layers:
+                via_cost = compute_terminal_cost(
+                    via_layer,
+                    layer,
+                    (x, y),
+                    regions_by_layer[layer],
+                    tech
+                )
+
+                other_node = via_layer, (x, y) # Node on the other side of the via.
+
+                if terminal_node in graph and other_node in graph:
+                    # Scale the via cost
+                    graph[terminal_node][other_node]['weight'] *= via_cost + 1
             
 def _report_track_usage(xs: List[int], ys: List[int], routing_trees: Dict[Any, nx.Graph]):
     """
-- 
GitLab