@tscircuit/capacity-autorouter 0.0.49 → 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -125,7 +125,7 @@ declare class CapacityMeshEdgeSolver extends BaseSolver {
125
125
  }
126
126
 
127
127
  type BucketCoordinate$1 = `${number}x${number}`;
128
- declare class ObstacleTree {
128
+ declare class ObstacleSpatialHashIndex {
129
129
  obstacles: Obstacle[];
130
130
  buckets: Map<BucketCoordinate$1, [Obstacle, number][]>;
131
131
  CELL_SIZE: number;
@@ -181,7 +181,7 @@ declare class CapacityMeshNodeSolver extends BaseSolver {
181
181
  MAX_DEPTH: number;
182
182
  targets: Target[];
183
183
  targetTree: TargetTree;
184
- obstacleTree: ObstacleTree;
184
+ obstacleTree: ObstacleSpatialHashIndex;
185
185
  constructor(srj: SimpleRouteJson, opts?: CapacityMeshNodeSolverOptions$1);
186
186
  computeTargets(): Target[];
187
187
  _nextNodeCounter: number;
@@ -385,7 +385,7 @@ type NodeWithPortPoints = {
385
385
  *
386
386
  * z must be an integer
387
387
  */
388
- type HighDensityIntraNodeRoute = {
388
+ type HighDensityIntraNodeRoute$1 = {
389
389
  connectionName: string;
390
390
  traceThickness: number;
391
391
  viaDiameter: number;
@@ -399,7 +399,7 @@ type HighDensityIntraNodeRoute = {
399
399
  y: number;
400
400
  }>;
401
401
  };
402
- type HighDensityRoute = HighDensityIntraNodeRoute;
402
+ type HighDensityRoute$1 = HighDensityIntraNodeRoute$1;
403
403
 
404
404
  interface SegmentWithAssignedPoints extends NodePortSegment {
405
405
  assignedPoints?: {
@@ -511,7 +511,7 @@ type FutureConnection = {
511
511
  }[];
512
512
  };
513
513
  declare class SingleHighDensityRouteSolver extends BaseSolver {
514
- obstacleRoutes: HighDensityIntraNodeRoute[];
514
+ obstacleRoutes: HighDensityIntraNodeRoute$1[];
515
515
  bounds: {
516
516
  minX: number;
517
517
  maxX: number;
@@ -550,7 +550,7 @@ declare class SingleHighDensityRouteSolver extends BaseSolver {
550
550
  exploredNodes: Set<string>;
551
551
  candidates: SingleRouteCandidatePriorityQueue;
552
552
  connectionName: string;
553
- solvedPath: HighDensityIntraNodeRoute | null;
553
+ solvedPath: HighDensityIntraNodeRoute$1 | null;
554
554
  futureConnections: FutureConnection[];
555
555
  hyperParameters: Partial<HighDensityHyperParameters>;
556
556
  connMap?: ConnectivityMap;
@@ -559,9 +559,13 @@ declare class SingleHighDensityRouteSolver extends BaseSolver {
559
559
  debug_nodesTooCloseToObstacle: Set<string>;
560
560
  debug_nodePathToParentIntersectsObstacle: Set<string>;
561
561
  debugEnabled: boolean;
562
+ initialNodeGridOffset: {
563
+ x: number;
564
+ y: number;
565
+ };
562
566
  constructor(opts: {
563
567
  connectionName: string;
564
- obstacleRoutes: HighDensityIntraNodeRoute[];
568
+ obstacleRoutes: HighDensityIntraNodeRoute$1[];
565
569
  minDistBetweenEnteringPoints: number;
566
570
  bounds: {
567
571
  minX: number;
@@ -620,7 +624,7 @@ declare class IntraNodeRouteSolver extends BaseSolver {
620
624
  }[];
621
625
  }[];
622
626
  totalConnections: number;
623
- solvedRoutes: HighDensityIntraNodeRoute[];
627
+ solvedRoutes: HighDensityIntraNodeRoute$1[];
624
628
  failedSubSolvers: SingleHighDensityRouteSolver[];
625
629
  hyperParameters: Partial<HighDensityHyperParameters>;
626
630
  minDistBetweenEnteringPoints: number;
@@ -675,14 +679,14 @@ declare class HyperParameterSupervisorSolver<T extends BaseSolver> extends BaseS
675
679
  visualize(): GraphicsObject;
676
680
  }
677
681
 
678
- type Point$1 = {
682
+ type Point$2 = {
679
683
  x: number;
680
684
  y: number;
681
685
  z?: number;
682
686
  };
683
687
  type Route = {
684
- startPort: Point$1;
685
- endPort: Point$1;
688
+ startPort: Point$2;
689
+ endPort: Point$2;
686
690
  connectionName: string;
687
691
  };
688
692
  declare class TwoCrossingRoutesHighDensitySolver extends BaseSolver {
@@ -693,10 +697,10 @@ declare class TwoCrossingRoutesHighDensitySolver extends BaseSolver {
693
697
  obstacleMargin: number;
694
698
  layerCount: number;
695
699
  debugViaPositions: {
696
- via1: Point$1;
697
- via2: Point$1;
700
+ via1: Point$2;
701
+ via2: Point$2;
698
702
  }[];
699
- solvedRoutes: HighDensityIntraNodeRoute[];
703
+ solvedRoutes: HighDensityIntraNodeRoute$1[];
700
704
  bounds: {
701
705
  minX: number;
702
706
  maxX: number;
@@ -748,12 +752,12 @@ declare class TwoCrossingRoutesHighDensitySolver extends BaseSolver {
748
752
  /**
749
753
  * Get the solved routes
750
754
  */
751
- getSolvedRoutes(): HighDensityIntraNodeRoute[];
755
+ getSolvedRoutes(): HighDensityIntraNodeRoute$1[];
752
756
  }
753
757
 
754
758
  declare class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<IntraNodeRouteSolver | TwoCrossingRoutesHighDensitySolver> {
755
759
  constructorParams: ConstructorParameters<typeof IntraNodeRouteSolver>[0];
756
- solvedRoutes: HighDensityIntraNodeRoute[];
760
+ solvedRoutes: HighDensityIntraNodeRoute$1[];
757
761
  nodeWithPortPoints: NodeWithPortPoints;
758
762
  constructor(opts: ConstructorParameters<typeof IntraNodeRouteSolver>[0]);
759
763
  getCombinationDefs(): string[][];
@@ -811,7 +815,7 @@ declare class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
811
815
 
812
816
  declare class HighDensitySolver extends BaseSolver {
813
817
  unsolvedNodePortPoints: NodeWithPortPoints[];
814
- routes: HighDensityIntraNodeRoute[];
818
+ routes: HighDensityIntraNodeRoute$1[];
815
819
  colorMap: Record<string, string>;
816
820
  readonly defaultViaDiameter = 0.6;
817
821
  readonly defaultTraceThickness = 0.15;
@@ -1008,8 +1012,8 @@ declare class NetToPointPairsSolver extends BaseSolver {
1008
1012
  }
1009
1013
 
1010
1014
  declare class SingleHighDensityRouteStitchSolver extends BaseSolver {
1011
- mergedHdRoute: HighDensityIntraNodeRoute;
1012
- remainingHdRoutes: HighDensityIntraNodeRoute[];
1015
+ mergedHdRoute: HighDensityIntraNodeRoute$1;
1016
+ remainingHdRoutes: HighDensityIntraNodeRoute$1[];
1013
1017
  start: {
1014
1018
  x: number;
1015
1019
  y: number;
@@ -1022,7 +1026,7 @@ declare class SingleHighDensityRouteStitchSolver extends BaseSolver {
1022
1026
  };
1023
1027
  constructor(opts: {
1024
1028
  connectionName?: string;
1025
- hdRoutes: HighDensityIntraNodeRoute[];
1029
+ hdRoutes: HighDensityIntraNodeRoute$1[];
1026
1030
  start: {
1027
1031
  x: number;
1028
1032
  y: number;
@@ -1040,7 +1044,7 @@ declare class SingleHighDensityRouteStitchSolver extends BaseSolver {
1040
1044
 
1041
1045
  type UnsolvedRoute = {
1042
1046
  connectionName: string;
1043
- hdRoutes: HighDensityIntraNodeRoute[];
1047
+ hdRoutes: HighDensityIntraNodeRoute$1[];
1044
1048
  start: {
1045
1049
  x: number;
1046
1050
  y: number;
@@ -1055,10 +1059,10 @@ type UnsolvedRoute = {
1055
1059
  declare class MultipleHighDensityRouteStitchSolver extends BaseSolver {
1056
1060
  unsolvedRoutes: UnsolvedRoute[];
1057
1061
  activeSolver: SingleHighDensityRouteStitchSolver | null;
1058
- mergedHdRoutes: HighDensityIntraNodeRoute[];
1062
+ mergedHdRoutes: HighDensityIntraNodeRoute$1[];
1059
1063
  constructor(opts: {
1060
1064
  connections: SimpleRouteConnection[];
1061
- hdRoutes: HighDensityIntraNodeRoute[];
1065
+ hdRoutes: HighDensityIntraNodeRoute$1[];
1062
1066
  layerCount: number;
1063
1067
  });
1064
1068
  _step(): void;
@@ -1225,6 +1229,7 @@ declare class UnravelSectionSolver extends BaseSolver {
1225
1229
  colorMap: Record<string, string>;
1226
1230
  tunedNodeCapacityMap: Map<CapacityMeshNodeId, number>;
1227
1231
  MAX_CANDIDATES: number;
1232
+ iterationsSinceImprovement: number;
1228
1233
  selectedCandidateIndex: number | "best" | "original" | null;
1229
1234
  queuedOrExploredCandidatePointModificationHashes: Set<string>;
1230
1235
  constructor(params: {
@@ -1371,51 +1376,51 @@ declare class SingleLayerNodeMergerSolver extends BaseSolver {
1371
1376
  visualize(): GraphicsObject;
1372
1377
  }
1373
1378
 
1374
- interface Point {
1379
+ interface Point$1 {
1375
1380
  x: number;
1376
1381
  y: number;
1377
1382
  z: number;
1378
1383
  }
1379
1384
  declare class SingleSimplifiedPathSolver extends BaseSolver {
1380
- newRoute: HighDensityIntraNodeRoute["route"];
1381
- newVias: HighDensityIntraNodeRoute["vias"];
1385
+ newRoute: HighDensityIntraNodeRoute$1["route"];
1386
+ newVias: HighDensityIntraNodeRoute$1["vias"];
1382
1387
  headIndex: number;
1383
1388
  tailIndex: number;
1384
- inputRoute: HighDensityIntraNodeRoute;
1385
- otherHdRoutes: HighDensityIntraNodeRoute[];
1389
+ inputRoute: HighDensityIntraNodeRoute$1;
1390
+ otherHdRoutes: HighDensityIntraNodeRoute$1[];
1386
1391
  obstacles: Obstacle[];
1387
1392
  connMap: ConnectivityMap;
1388
1393
  colorMap: Record<string, string>;
1389
1394
  constructor(params: {
1390
- inputRoute: HighDensityIntraNodeRoute;
1391
- otherHdRoutes: HighDensityIntraNodeRoute[];
1395
+ inputRoute: HighDensityIntraNodeRoute$1;
1396
+ otherHdRoutes: HighDensityIntraNodeRoute$1[];
1392
1397
  obstacles: Obstacle[];
1393
1398
  connMap: ConnectivityMap;
1394
1399
  colorMap: Record<string, string>;
1395
1400
  });
1396
1401
  getConstructorParams(): {
1397
- inputRoute: HighDensityIntraNodeRoute;
1398
- otherHdRoutes: HighDensityIntraNodeRoute[];
1402
+ inputRoute: HighDensityIntraNodeRoute$1;
1403
+ otherHdRoutes: HighDensityIntraNodeRoute$1[];
1399
1404
  obstacles: Obstacle[];
1400
1405
  connMap: Record<string, string[]>;
1401
1406
  colorMap: Record<string, string>;
1402
1407
  };
1403
- get simplifiedRoute(): HighDensityIntraNodeRoute;
1404
- isValidPath(pointsInRoute: Point[]): boolean;
1408
+ get simplifiedRoute(): HighDensityIntraNodeRoute$1;
1409
+ isValidPath(pointsInRoute: Point$1[]): boolean;
1405
1410
  _step(): void;
1406
1411
  getVisualsForNewRouteAndObstacles(): Required<GraphicsObject>;
1407
1412
  }
1408
1413
 
1409
1414
  declare class MultiSimplifiedPathSolver extends BaseSolver {
1410
- simplifiedHdRoutes: HighDensityIntraNodeRoute[];
1415
+ simplifiedHdRoutes: HighDensityIntraNodeRoute$1[];
1411
1416
  currentUnsimplifiedHdRouteIndex: number;
1412
1417
  activeSubSolver: SingleSimplifiedPathSolver | null;
1413
- unsimplifiedHdRoutes: HighDensityIntraNodeRoute[];
1418
+ unsimplifiedHdRoutes: HighDensityIntraNodeRoute$1[];
1414
1419
  obstacles: Obstacle[];
1415
1420
  connMap: ConnectivityMap;
1416
1421
  colorMap: Record<string, string>;
1417
1422
  constructor(params: {
1418
- unsimplifiedHdRoutes: HighDensityIntraNodeRoute[];
1423
+ unsimplifiedHdRoutes: HighDensityIntraNodeRoute$1[];
1419
1424
  obstacles: Obstacle[];
1420
1425
  connMap?: ConnectivityMap;
1421
1426
  colorMap?: Record<string, string>;
@@ -1428,6 +1433,111 @@ declare class CapacityMeshEdgeSolver2_NodeTreeOptimization extends CapacityMeshE
1428
1433
  step(): void;
1429
1434
  }
1430
1435
 
1436
+ interface Point {
1437
+ x: number;
1438
+ y: number;
1439
+ z: number;
1440
+ }
1441
+ type Point2D = {
1442
+ x: number;
1443
+ y: number;
1444
+ };
1445
+ type HighDensityIntraNodeRoute = {
1446
+ connectionName: string;
1447
+ traceThickness: number;
1448
+ viaDiameter: number;
1449
+ route: Array<{
1450
+ x: number;
1451
+ y: number;
1452
+ z: number;
1453
+ }>;
1454
+ vias: Array<{
1455
+ x: number;
1456
+ y: number;
1457
+ }>;
1458
+ };
1459
+ type HighDensityRoute = HighDensityIntraNodeRoute;
1460
+ declare class HighDensityRouteSpatialIndex {
1461
+ private segmentBuckets;
1462
+ private viaBuckets;
1463
+ private routes;
1464
+ private CELL_SIZE;
1465
+ constructor(routes: HighDensityRoute[], cellSize?: number);
1466
+ /**
1467
+ * Finds routes that potentially conflict with a given line segment within a margin.
1468
+ * Checks both segments and vias.
1469
+ * @param segmentStart Start point of the query segment.
1470
+ * @param segmentEnd End point of the query segment.
1471
+ * @param margin The minimum required clearance distance from the query segment's centerline.
1472
+ * @returns An array of conflicting routes and their minimum distance to the segment.
1473
+ */
1474
+ getConflictingRoutesForSegment(segmentStart: Point, // Keep Point for original Z data if needed elsewhere
1475
+ segmentEnd: Point, margin: number): Array<{
1476
+ conflictingRoute: HighDensityRoute;
1477
+ distance: number;
1478
+ }>;
1479
+ /**
1480
+ * Finds routes that pass near a given point within a margin.
1481
+ * Checks both segments and vias.
1482
+ * @param point The query point {x, y}. Z is ignored.
1483
+ * @param margin The minimum required clearance distance from the query point.
1484
+ * @returns An array of conflicting routes and their minimum distance to the point.
1485
+ */
1486
+ getConflictingRoutesNearPoint(point: Point2D, margin: number): Array<{
1487
+ conflictingRoute: HighDensityRoute;
1488
+ distance: number;
1489
+ }>;
1490
+ }
1491
+
1492
+ interface RouteSection {
1493
+ startIndex: number;
1494
+ endIndex: number;
1495
+ z: number;
1496
+ points: HighDensityRoute["route"];
1497
+ }
1498
+ declare class SingleRouteUselessViaRemovalSolver extends BaseSolver {
1499
+ obstacleSHI: ObstacleSpatialHashIndex;
1500
+ hdRouteSHI: HighDensityRouteSpatialIndex;
1501
+ unsimplifiedRoute: HighDensityRoute;
1502
+ routeSections: Array<RouteSection>;
1503
+ currentSectionIndex: number;
1504
+ TRACE_THICKNESS: number;
1505
+ OBSTACLE_MARGIN: number;
1506
+ constructor(params: {
1507
+ obstacleSHI: ObstacleSpatialHashIndex;
1508
+ hdRouteSHI: HighDensityRouteSpatialIndex;
1509
+ unsimplifiedRoute: HighDensityRoute;
1510
+ });
1511
+ breakRouteIntoSections(route: HighDensityRoute): never[] | this["routeSections"];
1512
+ _step(): void;
1513
+ canSectionMoveToLayer({ currentSection, targetZ, }: {
1514
+ currentSection: RouteSection;
1515
+ targetZ: number;
1516
+ }): boolean;
1517
+ getOptimizedHdRoute(): HighDensityRoute;
1518
+ visualize(): GraphicsObject;
1519
+ }
1520
+
1521
+ interface UselessViaRemovalSolverInput {
1522
+ unsimplifiedHdRoutes: HighDensityRoute$1[];
1523
+ obstacles: Obstacle[];
1524
+ colorMap: Record<string, string>;
1525
+ layerCount: number;
1526
+ }
1527
+ declare class UselessViaRemovalSolver extends BaseSolver {
1528
+ private input;
1529
+ unsimplifiedHdRoutes: HighDensityRoute$1[];
1530
+ optimizedHdRoutes: HighDensityRoute$1[];
1531
+ unprocessedRoutes: HighDensityRoute$1[];
1532
+ activeSubSolver?: SingleRouteUselessViaRemovalSolver | null | undefined;
1533
+ obstacleSHI: ObstacleSpatialHashIndex | null;
1534
+ hdRouteSHI: HighDensityRouteSpatialIndex | null;
1535
+ constructor(input: UselessViaRemovalSolverInput);
1536
+ _step(): void;
1537
+ getOptimizedHdRoutes(): HighDensityRoute$1[] | null;
1538
+ visualize(): GraphicsObject;
1539
+ }
1540
+
1431
1541
  interface CapacityMeshSolverOptions {
1432
1542
  capacityDepth?: number;
1433
1543
  targetMinCapacity?: number;
@@ -1455,6 +1565,7 @@ declare class AutoroutingPipelineSolver extends BaseSolver {
1455
1565
  highDensityStitchSolver?: MultipleHighDensityRouteStitchSolver;
1456
1566
  singleLayerNodeMerger?: SingleLayerNodeMergerSolver;
1457
1567
  strawSolver?: StrawSolver;
1568
+ uselessViaRemovalSolver?: UselessViaRemovalSolver;
1458
1569
  multiSimplifiedPathSolver?: MultiSimplifiedPathSolver;
1459
1570
  startTimeOfPhase: Record<string, number>;
1460
1571
  endTimeOfPhase: Record<string, number>;
@@ -1463,7 +1574,7 @@ declare class AutoroutingPipelineSolver extends BaseSolver {
1463
1574
  connMap: ConnectivityMap;
1464
1575
  srjWithPointPairs?: SimpleRouteJson;
1465
1576
  capacityNodes: CapacityMeshNode[] | null;
1466
- pipelineDef: (PipelineStep<typeof NetToPointPairsSolver> | PipelineStep<typeof CapacityMeshNodeSolver2_NodeUnderObstacle> | PipelineStep<typeof SingleLayerNodeMergerSolver> | PipelineStep<typeof StrawSolver> | PipelineStep<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep<typeof CapacityPathingSolver5> | PipelineStep<typeof CapacityEdgeToPortSegmentSolver> | PipelineStep<typeof CapacitySegmentToPointSolver> | PipelineStep<typeof UnravelMultiSectionSolver> | PipelineStep<typeof HighDensitySolver> | PipelineStep<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep<typeof MultiSimplifiedPathSolver>)[];
1577
+ pipelineDef: (PipelineStep<typeof NetToPointPairsSolver> | PipelineStep<typeof CapacityMeshNodeSolver2_NodeUnderObstacle> | PipelineStep<typeof SingleLayerNodeMergerSolver> | PipelineStep<typeof StrawSolver> | PipelineStep<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep<typeof CapacityPathingSolver5> | PipelineStep<typeof CapacityEdgeToPortSegmentSolver> | PipelineStep<typeof CapacitySegmentToPointSolver> | PipelineStep<typeof UnravelMultiSectionSolver> | PipelineStep<typeof HighDensitySolver> | PipelineStep<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep<typeof UselessViaRemovalSolver> | PipelineStep<typeof MultiSimplifiedPathSolver>)[];
1467
1578
  constructor(srj: SimpleRouteJson, opts?: CapacityMeshSolverOptions);
1468
1579
  currentPipelineStepIndex: number;
1469
1580
  _step(): void;
@@ -1486,7 +1597,7 @@ declare class AutoroutingPipelineSolver extends BaseSolver {
1486
1597
  * @returns The original connection name (e.g. "connection1")
1487
1598
  */
1488
1599
  private getOriginalConnectionName;
1489
- _getOutputHdRoutes(): HighDensityRoute[];
1600
+ _getOutputHdRoutes(): HighDensityRoute$1[];
1490
1601
  /**
1491
1602
  * Returns the SimpleRouteJson with routes converted to SimplifiedPcbTraces
1492
1603
  */