inire/docs/plans/package_structure.md

3.2 KiB

Python Package Structure

This document outlines the directory structure and module organization for the inire auto-router package.

1. Directory Layout

inire/
├── __init__.py             # Exposes the main `Router` class and key types
├── geometry/               # Core geometric primitives and operations
│   ├── __init__.py
│   ├── primitives.py       # Point, Port, Polygon, Arc classes
│   ├── collision.py        # R-Tree wrapper and intersection logic
│   └── components.py       # Move generators (Straight, Bend90, SBend)
├── router/                 # Search algorithms and pathfinding
│   ├── __init__.py
│   ├── astar.py            # Hybrid State-Lattice A* implementation
│   ├── graph.py            # Node, Edge, and Graph data structures
│   ├── cost.py             # Cost functions (length, bend, proximity)
│   ├── danger_map.py       # Pre-computed grid for heuristic proximity costs
│   └── pathfinder.py       # Multi-net "Negotiated Congestion" manager
├── utils/                  # Utility functions
│   ├── __init__.py
│   └── visualization.py    # Plotting tools for debug/heatmaps (matplotlib/klayout)
└── tests/                  # Unit and integration tests
    ├── __init__.py
    ├── conftest.py         # Pytest fixtures (common shapes, PDK cells)
    ├── test_primitives.py  # Tests for Port and coordinate transforms
    ├── test_components.py  # Tests for Straight, Bend90, SBend generation
    ├── test_collision.py   # Tests for R-Tree and dilation logic
    ├── test_cost.py        # Tests for Danger Map and cost evaluation
    ├── test_astar.py       # Tests for single-net routing (mazes, snapping)
    └── test_pathfinder.py  # Multi-net "Negotiated Congestion" benchmarks

2. Module Responsibilities

inire.geometry

  • primitives.py: Defines the Port named tuple (x, y, theta) and helper functions for coordinate transforms.
  • collision.py: Wraps the rtree or shapely library. Handles the "Analytic Correctness" checks (exact polygon distance).
  • components.py: Logic to generate "Moves" from a start port. E.g., SBend.generate(start_port, offset, radius) returns a list of polygons and the end port. Handles O > 2R logic.

inire.router

  • astar.py: The heavy lifter. Maintains the OpenSet (priority queue) and ClosedSet. Implements the "Snap-to-Target" logic.
  • cost.py: compute f(n) = g(n) + h(n). encapsulates the "Danger Map" and Path R-Tree lookups.
  • danger_map.py: Manages the pre-computed proximity grid used for O(1) heuristic calculations.
  • pathfinder.py: Orchestrates the multi-net loop. Tracks the Path R-Tree for negotiated congestion and triggers reroutes.

inire.tests

  • Structure: Tests are co-located within the package for ease of access.
  • Fixtures: conftest.py will provide standard PDK cells (e.g., a 10\mu m radius bend) to avoid repetition in test cases.

3. Dependencies

  • numpy: Vector math.
  • shapely: Polygon geometry and intersection.
  • rtree: Spatial indexing.
  • networkx (Optional): Not used for core search to ensure performance.