Fix core geometry snapping, A* target lookahead, and test configurations
This commit is contained in:
parent
24ca402f67
commit
d438c5b7c7
88 changed files with 1463 additions and 476 deletions
64
docs/plans/implementation_plan.md
Normal file
64
docs/plans/implementation_plan.md
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
# Implementation Plan
|
||||
|
||||
This plan outlines the step-by-step implementation of the `inire` auto-router. For detailed test cases, refer to [Testing Plan](./testing_plan.md).
|
||||
|
||||
## Phase 1: Core Geometry & Move Generation
|
||||
**Goal:** Implement Ports, Polygons, and Component Library with high geometric fidelity.
|
||||
1. **Project Setup:** Initialize `inire/` structure and `pytest` configuration. Include `hypothesis` for property-based testing.
|
||||
2. **`geometry.primitives`:**
|
||||
* `Port` with **1nm** snapping.
|
||||
* Basic 2D transformations (rotate, translate).
|
||||
* **Property-Based Tests:** Verify transform invariants (e.g., $90^\circ$ rotation cycles).
|
||||
3. **`geometry.components`:**
|
||||
* `Straight`, `Bend90`, `SBend`.
|
||||
* **Search Grid Snapping:** Implement 1µm snapping for expanded ports.
|
||||
* **Small S-Bends ($O < 2R$):** Logic for parametric generation.
|
||||
* **Edge Cases:** Handle $O=2R$ and $L < 1\mu m$.
|
||||
4. **Tests:**
|
||||
* Verify geometric correctness (refer to Testing Plan Section 1).
|
||||
* Unit tests for `Port` snapping and component transformations.
|
||||
|
||||
## Phase 2: Collision Engine & Cost
|
||||
**Goal:** Build the R-Tree wrapper and the analytic cost function.
|
||||
1. **`geometry.collision`:** Implement `CollisionEngine`.
|
||||
* **Pre-dilation:** Obstacles/Paths dilated by $Clearance/2$.
|
||||
* **Safety Zone:** Ignore collisions within **2nm** of start/end ports.
|
||||
2. **`router.danger_map`:**
|
||||
* Implement **1µm** pre-computed proximity grid.
|
||||
* Optimize for design sizes up to **20x20mm** (< 2GB memory).
|
||||
3. **`router.cost`:** Implement `CostEvaluator`.
|
||||
* Bend cost: $10 \times (\text{Manhattan distance between ports})$.
|
||||
* Integrate R-Tree for strict checks and Danger Map for heuristic.
|
||||
4. **Tests:**
|
||||
* Verify collision detection with simple overlapping shapes (Testing Plan Section 2.1).
|
||||
* Verify Danger Map accuracy and memory footprint (Testing Plan Section 2.2).
|
||||
* **Post-Route Validator:** Implement the independent `validate_path` utility.
|
||||
|
||||
## Phase 3: Single-Net A* Search
|
||||
**Goal:** Route a single net from A to B with 1nm precision.
|
||||
1. **`router.astar`:** Implement the priority queue loop.
|
||||
* State representation: `(x_µm, y_µm, theta)`.
|
||||
* Move expansion loop with 1µm grid.
|
||||
* **Natural S-Bends:** Ensure search can find $O \ge 2R$ shifts by combining moves.
|
||||
* **Look-ahead Snapping:** Actively bridge to the 1nm target when in the capture radius (10µm).
|
||||
2. **Heuristic:** Manhattan distance $h(n)$ + orientation penalty + Danger Map lookup.
|
||||
3. **Tests:**
|
||||
* Solve simple maze problems and verify path optimality (Testing Plan Section 3).
|
||||
* Verify snap-to-target precision at 1nm resolution.
|
||||
* **Determinism:** Verify same seed = same path.
|
||||
|
||||
## Phase 4: Multi-Net PathFinder
|
||||
**Goal:** Implement the "Negotiated Congestion" loop for multiple nets.
|
||||
1. **`router.pathfinder`:**
|
||||
* Sequential routing -> Identify congestion -> Inflate cost -> Reroute.
|
||||
* **R-Tree Congestion:** Store dilated path geometries.
|
||||
2. **Explicit Results:** Return `RoutingResult` objects with `is_valid` and `collisions` metadata.
|
||||
3. **Tests:**
|
||||
* Full multi-net benchmarks (Testing Plan Section 4).
|
||||
* Verify rerouting behavior in crowded environments.
|
||||
|
||||
## Phase 5: Visualization, Benchmarking & Fuzzing
|
||||
1. **`utils.visualization`:** Plot paths using `matplotlib`. Highlight collisions in red.
|
||||
2. **Benchmarks:** Stress test with 50+ nets. Verify performance and node limits (Testing Plan Section 5).
|
||||
3. **Fuzzing:** Run A* on randomized layouts to ensure stability.
|
||||
4. **Final Validation:** Ensure all `is_valid=True` results pass the independent `validate_path` check.
|
||||
Loading…
Add table
Add a link
Reference in a new issue