@tscircuit/capacity-autorouter 0.0.228 → 0.0.229

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
@@ -32,7 +32,7 @@ interface SimpleRouteJson {
32
32
  nominalTraceWidth?: number;
33
33
  minViaDiameter?: number;
34
34
  defaultObstacleMargin?: number;
35
- obstacles: Obstacle[];
35
+ obstacles: Obstacle$1[];
36
36
  connections: Array<SimpleRouteConnection>;
37
37
  bounds: {
38
38
  minX: number;
@@ -45,8 +45,9 @@ interface SimpleRouteJson {
45
45
  y: number;
46
46
  }>;
47
47
  traces?: SimplifiedPcbTraces;
48
+ allowJumpers?: boolean;
48
49
  }
49
- interface Obstacle {
50
+ interface Obstacle$1 {
50
51
  obstacleId?: string;
51
52
  type: "rect";
52
53
  layers: string[];
@@ -247,6 +248,7 @@ type HighDensityIntraNodeRoute$1 = {
247
248
  x: number;
248
249
  y: number;
249
250
  }>;
251
+ jumpers?: Jumper[];
250
252
  };
251
253
  type HighDensityRoute$1 = HighDensityIntraNodeRoute$1;
252
254
  /**
@@ -896,10 +898,10 @@ declare class HighDensitySolver extends BaseSolver {
896
898
  declare class CapacityNodeTargetMerger extends BaseSolver {
897
899
  nodes: CapacityMeshNode[];
898
900
  connMap: ConnectivityMap;
899
- unprocessedObstacles: Obstacle[];
901
+ unprocessedObstacles: Obstacle$1[];
900
902
  newNodes: CapacityMeshNode[];
901
903
  removedNodeIds: Set<string>;
902
- constructor(nodes: CapacityMeshNode[], obstacles: Obstacle[], connMap: ConnectivityMap);
904
+ constructor(nodes: CapacityMeshNode[], obstacles: Obstacle$1[], connMap: ConnectivityMap);
903
905
  _step(): void;
904
906
  visualize(): GraphicsObject;
905
907
  }
@@ -1176,7 +1178,7 @@ declare class TraceSimplificationSolver extends BaseSolver {
1176
1178
  */
1177
1179
  constructor(simplificationConfig: {
1178
1180
  hdRoutes: HighDensityRoute$1[];
1179
- obstacles: Obstacle[];
1181
+ obstacles: Obstacle$1[];
1180
1182
  connMap: ConnectivityMap;
1181
1183
  colorMap: Record<string, string>;
1182
1184
  outline?: Array<{
@@ -1328,6 +1330,8 @@ interface PortPointPathingHyperParameters {
1328
1330
  RIPPING_PF_THRESHOLD?: number;
1329
1331
  MAX_RIPS?: number;
1330
1332
  RANDOM_RIP_FRACTION?: number;
1333
+ /** When enabled, use jumper-based pf calculation for same-layer crossings on single layer nodes */
1334
+ JUMPER_PF_FN_ENABLED?: boolean;
1331
1335
  }
1332
1336
  /**
1333
1337
  * An input port point without connectionName assigned yet.
@@ -1419,6 +1423,17 @@ interface ConnectionPathResult {
1419
1423
  * - prevents node cycles in a candidate chain (keeps Pf math correct without needing per-node multi-visit tracking)
1420
1424
  */
1421
1425
  declare class PortPointPathingSolver extends BaseSolver {
1426
+ input: {
1427
+ simpleRouteJson: SimpleRouteJson;
1428
+ capacityMeshNodes: CapacityMeshNode[];
1429
+ inputNodes: InputNodeWithPortPoints[];
1430
+ colorMap?: Record<string, string>;
1431
+ nodeMemoryPfMap?: Map<CapacityMeshNodeId, number>;
1432
+ hyperParameters?: Partial<PortPointPathingHyperParameters>;
1433
+ precomputedInitialParams?: PrecomputedInitialParams;
1434
+ /** Pre-routed connections that should not be re-routed but should appear in results */
1435
+ fixedRoutes?: ConnectionPathResult[];
1436
+ };
1422
1437
  hyperParameters: Partial<PortPointPathingHyperParameters>;
1423
1438
  simpleRouteJson: SimpleRouteJson;
1424
1439
  inputNodes: InputNodeWithPortPoints[];
@@ -1470,6 +1485,9 @@ declare class PortPointPathingSolver extends BaseSolver {
1470
1485
  get RIPPING_PF_THRESHOLD(): number;
1471
1486
  get MAX_RIPS(): number;
1472
1487
  get RANDOM_RIP_FRACTION(): number;
1488
+ get JUMPER_PF_FN_ENABLED(): boolean;
1489
+ /** Number of jumpers that can fit per mm² of node area */
1490
+ jumpersPerMmSquared: number;
1473
1491
  /** Tracks which connections have been test-ripped for each node to avoid retesting */
1474
1492
  testedRipConnections: Map<CapacityMeshNodeId, Set<string>>;
1475
1493
  /** Tracks total number of connections that have been ripped/requeued */
@@ -1499,7 +1517,7 @@ declare class PortPointPathingSolver extends BaseSolver {
1499
1517
  offBoardNodes: InputNodeWithPortPoints[];
1500
1518
  /** Cache of base node cost (cost of node in current committed state) */
1501
1519
  private baseNodeCostCache;
1502
- constructor({ simpleRouteJson, inputNodes, capacityMeshNodes, colorMap, nodeMemoryPfMap, hyperParameters, precomputedInitialParams, fixedRoutes, }: {
1520
+ constructor(input: {
1503
1521
  simpleRouteJson: SimpleRouteJson;
1504
1522
  capacityMeshNodes: CapacityMeshNode[];
1505
1523
  inputNodes: InputNodeWithPortPoints[];
@@ -1510,6 +1528,17 @@ declare class PortPointPathingSolver extends BaseSolver {
1510
1528
  /** Pre-routed connections that should not be re-routed but should appear in results */
1511
1529
  fixedRoutes?: ConnectionPathResult[];
1512
1530
  });
1531
+ getConstructorParams(): {
1532
+ simpleRouteJson: SimpleRouteJson;
1533
+ capacityMeshNodes: CapacityMeshNode[];
1534
+ inputNodes: InputNodeWithPortPoints[];
1535
+ colorMap?: Record<string, string>;
1536
+ nodeMemoryPfMap?: Map<CapacityMeshNodeId, number>;
1537
+ hyperParameters?: Partial<PortPointPathingHyperParameters>;
1538
+ precomputedInitialParams?: PrecomputedInitialParams;
1539
+ /** Pre-routed connections that should not be re-routed but should appear in results */
1540
+ fixedRoutes?: ConnectionPathResult[];
1541
+ };
1513
1542
  private clearCostCaches;
1514
1543
  private clampPf;
1515
1544
  /** Convert Pf into an additive "failure cost" */
@@ -1967,7 +1996,7 @@ interface CapacityMeshSolverOptions$3 {
1967
1996
  cacheProvider?: CacheProvider | null;
1968
1997
  effort?: number;
1969
1998
  }
1970
- type PipelineStep$3<T extends new (...args: any[]) => BaseSolver> = {
1999
+ type PipelineStep$4<T extends new (...args: any[]) => BaseSolver> = {
1971
2000
  solverName: string;
1972
2001
  solverClass: T;
1973
2002
  getConstructorParams: (instance: AutoroutingPipelineSolver2_PortPointPathing) => ConstructorParameters<T>;
@@ -2002,7 +2031,7 @@ declare class AutoroutingPipelineSolver2_PortPointPathing extends BaseSolver {
2002
2031
  capacityNodes: CapacityMeshNode[] | null;
2003
2032
  capacityEdges: CapacityMeshEdge[] | null;
2004
2033
  cacheProvider: CacheProvider | null;
2005
- pipelineDef: (PipelineStep$3<typeof NetToPointPairsSolver2_OffBoardConnection> | PipelineStep$3<typeof RectDiffPipeline> | PipelineStep$3<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$3<typeof AvailableSegmentPointSolver> | PipelineStep$3<typeof HyperPortPointPathingSolver> | PipelineStep$3<typeof MultiSectionPortPointOptimizer> | PipelineStep$3<typeof HighDensitySolver> | PipelineStep$3<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep$3<typeof TraceSimplificationSolver>)[];
2034
+ pipelineDef: (PipelineStep$4<typeof NetToPointPairsSolver2_OffBoardConnection> | PipelineStep$4<typeof RectDiffPipeline> | PipelineStep$4<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$4<typeof AvailableSegmentPointSolver> | PipelineStep$4<typeof HyperPortPointPathingSolver> | PipelineStep$4<typeof MultiSectionPortPointOptimizer> | PipelineStep$4<typeof HighDensitySolver> | PipelineStep$4<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep$4<typeof TraceSimplificationSolver>)[];
2006
2035
  constructor(srj: SimpleRouteJson, opts?: CapacityMeshSolverOptions$3);
2007
2036
  getConstructorParams(): readonly [SimpleRouteJson, CapacityMeshSolverOptions$3];
2008
2037
  currentPipelineStepIndex: number;
@@ -2825,7 +2854,7 @@ interface CapacityMeshSolverOptions$2 {
2825
2854
  targetMinCapacity?: number;
2826
2855
  cacheProvider?: CacheProvider | null;
2827
2856
  }
2828
- type PipelineStep$2<T extends new (...args: any[]) => BaseSolver> = {
2857
+ type PipelineStep$3<T extends new (...args: any[]) => BaseSolver> = {
2829
2858
  solverName: string;
2830
2859
  solverClass: T;
2831
2860
  getConstructorParams: (instance: AutoroutingPipeline1_OriginalUnravel) => ConstructorParameters<T>;
@@ -2862,7 +2891,7 @@ declare class AutoroutingPipeline1_OriginalUnravel extends BaseSolver {
2862
2891
  capacityNodes: CapacityMeshNode[] | null;
2863
2892
  capacityEdges: CapacityMeshEdge[] | null;
2864
2893
  cacheProvider: CacheProvider | null;
2865
- pipelineDef: (PipelineStep$2<typeof NetToPointPairsSolver2_OffBoardConnection> | PipelineStep$2<typeof RectDiffPipeline> | PipelineStep$2<typeof StrawSolver> | PipelineStep$2<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$2<typeof DeadEndSolver> | PipelineStep$2<typeof CapacityPathingGreedySolver> | PipelineStep$2<typeof CapacityPathingMultiSectionSolver> | PipelineStep$2<typeof CapacityEdgeToPortSegmentSolver> | PipelineStep$2<typeof CapacitySegmentToPointSolver> | PipelineStep$2<typeof UnravelMultiSectionSolver> | PipelineStep$2<typeof HighDensitySolver> | PipelineStep$2<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep$2<typeof TraceSimplificationSolver>)[];
2894
+ pipelineDef: (PipelineStep$3<typeof NetToPointPairsSolver2_OffBoardConnection> | PipelineStep$3<typeof RectDiffPipeline> | PipelineStep$3<typeof StrawSolver> | PipelineStep$3<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$3<typeof DeadEndSolver> | PipelineStep$3<typeof CapacityPathingGreedySolver> | PipelineStep$3<typeof CapacityPathingMultiSectionSolver> | PipelineStep$3<typeof CapacityEdgeToPortSegmentSolver> | PipelineStep$3<typeof CapacitySegmentToPointSolver> | PipelineStep$3<typeof UnravelMultiSectionSolver> | PipelineStep$3<typeof HighDensitySolver> | PipelineStep$3<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep$3<typeof TraceSimplificationSolver>)[];
2866
2895
  constructor(srj: SimpleRouteJson, opts?: CapacityMeshSolverOptions$2);
2867
2896
  getConstructorParams(): readonly [SimpleRouteJson, CapacityMeshSolverOptions$2];
2868
2897
  currentPipelineStepIndex: number;
@@ -3378,11 +3407,243 @@ declare class IntraNodeSolverWithJumpers extends BaseSolver {
3378
3407
  visualize(): GraphicsObject;
3379
3408
  }
3380
3409
 
3410
+ type BucketCoordinate$1 = `${number}x${number}`;
3411
+ declare class CapacityNodeTree {
3412
+ nodes: CapacityMeshNode[];
3413
+ buckets: Map<BucketCoordinate$1, CapacityMeshNode[]>;
3414
+ CELL_SIZE: number;
3415
+ constructor(nodes: CapacityMeshNode[]);
3416
+ getBucketKey(x: number, y: number): BucketCoordinate$1;
3417
+ getNodesInArea(centerX: number, centerY: number, width: number, height: number): CapacityMeshNode[];
3418
+ }
3419
+
3420
+ /**
3421
+ * This solver looks at every obstacle with off board connections (one per step),
3422
+ * then sets _offBoardConnectedCapacityMeshNodeIds on each capacity node that is
3423
+ * mutually connected via off board connections
3424
+ */
3425
+ declare class RelateNodesToOffBoardConnectionsSolver extends BaseSolver {
3426
+ input: {
3427
+ capacityMeshNodes: CapacityMeshNode[];
3428
+ srj: SimpleRouteJson;
3429
+ };
3430
+ unprocessedObstacles: Obstacle$1[];
3431
+ nodeTree: CapacityNodeTree;
3432
+ offBoardConnMap: ConnectivityMap$1;
3433
+ nodesInNet: Map<OffBoardConnectionId, CapacityMeshNode[]>;
3434
+ lastProcessedObstacle?: Obstacle$1;
3435
+ constructor(input: {
3436
+ capacityMeshNodes: CapacityMeshNode[];
3437
+ srj: SimpleRouteJson;
3438
+ });
3439
+ _step(): void;
3440
+ getOutput(): {
3441
+ capacityNodes: CapacityMeshNode[];
3442
+ };
3443
+ visualize(): GraphicsObject;
3444
+ }
3445
+
3446
+ type JumperFootprint = "0603" | "1206";
3447
+
3448
+ interface Obstacle {
3449
+ type: "rect";
3450
+ obstacleId: string;
3451
+ layers: string[];
3452
+ center: {
3453
+ x: number;
3454
+ y: number;
3455
+ };
3456
+ width: number;
3457
+ height: number;
3458
+ connectedTo: string[];
3459
+ offBoardConnectsTo?: string[];
3460
+ }
3461
+ interface PrepatternJumper {
3462
+ jumperId: string;
3463
+ start: {
3464
+ x: number;
3465
+ y: number;
3466
+ };
3467
+ end: {
3468
+ x: number;
3469
+ y: number;
3470
+ };
3471
+ footprint: JumperFootprint;
3472
+ offBoardConnectionId: string;
3473
+ }
3474
+ interface PatternResult {
3475
+ jumperPadObstacles: Obstacle[];
3476
+ prepatternJumpers: PrepatternJumper[];
3477
+ }
3478
+
3479
+ interface RemoveUnnecessaryJumpersSolverParams {
3480
+ /**
3481
+ * Input nodes from the PortPointPathingSolver
3482
+ */
3483
+ inputNodes: InputNodeWithPortPoints[];
3484
+ /**
3485
+ * Set of jumper off-board connection IDs that were actually used by routes
3486
+ */
3487
+ usedJumperOffBoardObstacleIds: Set<string>;
3488
+ /**
3489
+ * Connectivity map for off-board obstacles (used to check if a jumper net was used)
3490
+ */
3491
+ offBoardConnMap?: ConnectivityMap | null;
3492
+ }
3493
+ /**
3494
+ * RemoveUnnecessaryJumpersSolver removes jumpers that aren't needed because
3495
+ * there are no traces between the pads. It converts unused jumper nodes back
3496
+ * to regular nodes so the high density solver can route through them normally.
3497
+ *
3498
+ * This solver runs after PortPointPathingSolver and before HighDensitySolver.
3499
+ */
3500
+ declare class RemoveUnnecessaryJumpersSolver extends BaseSolver {
3501
+ inputNodes: InputNodeWithPortPoints[];
3502
+ usedJumperOffBoardObstacleIds: Set<string>;
3503
+ offBoardConnMap: ConnectivityMap | null;
3504
+ /**
3505
+ * Output nodes with unused jumper nodes converted to regular nodes
3506
+ */
3507
+ outputNodes: InputNodeWithPortPoints[];
3508
+ /**
3509
+ * Set of off-board connection IDs that were removed
3510
+ */
3511
+ removedOffBoardConnectionIds: Set<string>;
3512
+ constructor(params: RemoveUnnecessaryJumpersSolverParams);
3513
+ /**
3514
+ * Check if a jumper off-board connection ID was used
3515
+ */
3516
+ private isJumperUsed;
3517
+ _step(): void;
3518
+ getOutput(): InputNodeWithPortPoints[];
3519
+ visualize(): GraphicsObject;
3520
+ }
3521
+
3522
+ type PatternType = "alternating_grid" | "staggered_grid";
3523
+ interface JumperPrepatternSolverHyperParameters {
3524
+ /** Orientation of jumpers - "horizontal" or "vertical" */
3525
+ FIRST_ORIENTATION?: "horizontal" | "vertical";
3526
+ /** Jumper footprint size - defaults to "0603" */
3527
+ JUMPER_FOOTPRINT?: JumperFootprint;
3528
+ /** Pattern type for jumper placement - defaults to "alternating_grid" */
3529
+ PATTERN_TYPE?: PatternType;
3530
+ }
3531
+ interface JumperPrepatternSolverParams {
3532
+ nodeWithPortPoints: NodeWithPortPoints;
3533
+ colorMap?: Record<string, string>;
3534
+ traceWidth?: number;
3535
+ jumperFootprint?: JumperFootprint;
3536
+ hyperParameters?: JumperPrepatternSolverHyperParameters;
3537
+ connMap?: ConnectivityMap;
3538
+ }
3539
+ type PipelineStep$2<T extends new (...args: any[]) => BaseSolver> = {
3540
+ solverName: string;
3541
+ solverClass: T;
3542
+ getConstructorParams: (instance: JumperPrepatternSolver) => ConstructorParameters<T>;
3543
+ onSolved?: (instance: JumperPrepatternSolver) => void;
3544
+ };
3545
+ declare class JumperPrepatternSolver extends BaseSolver {
3546
+ nodeWithPortPoints: NodeWithPortPoints;
3547
+ colorMap: Record<string, string>;
3548
+ traceWidth: number;
3549
+ jumperFootprint: JumperFootprint;
3550
+ hyperParameters: JumperPrepatternSolverHyperParameters;
3551
+ connMap: ConnectivityMap;
3552
+ prepatternJumpers: PrepatternJumper[];
3553
+ patternResult: PatternResult | null;
3554
+ capacityNodes: CapacityMeshNode[];
3555
+ capacityEdges: CapacityMeshEdge[];
3556
+ inputNodes: InputNodeWithPortPoints[];
3557
+ connections: SimpleRouteConnection[];
3558
+ srjWithPointPairs: SimpleRouteJson;
3559
+ nodeSolver?: RectDiffPipeline;
3560
+ relateNodesToOffBoardConnections?: RelateNodesToOffBoardConnectionsSolver;
3561
+ edgeSolver?: CapacityMeshEdgeSolver2_NodeTreeOptimization;
3562
+ availableSegmentPointSolver?: AvailableSegmentPointSolver;
3563
+ portPointPathingSolver?: HyperPortPointPathingSolver;
3564
+ multiSectionPortPointOptimizer?: MultiSectionPortPointOptimizer;
3565
+ removeUnnecessaryJumpersSolver?: RemoveUnnecessaryJumpersSolver;
3566
+ highDensitySolver?: SimpleHighDensitySolver;
3567
+ highDensityStitchSolver?: MultipleHighDensityRouteStitchSolver;
3568
+ activeSubSolver?: BaseSolver | null;
3569
+ currentPipelineStepIndex: number;
3570
+ startTimeOfPhase: Record<string, number>;
3571
+ endTimeOfPhase: Record<string, number>;
3572
+ timeSpentOnPhase: Record<string, number>;
3573
+ solvedRoutes: HighDensityIntraNodeRouteWithJumpers[];
3574
+ usedJumperOffBoardObstacleIds: Set<string>;
3575
+ allUsedJumperOffBoardIds: Set<string>;
3576
+ offBoardConnMap: ConnectivityMap | null;
3577
+ pipelineDef: (PipelineStep$2<typeof RectDiffPipeline> | PipelineStep$2<typeof RelateNodesToOffBoardConnectionsSolver> | PipelineStep$2<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$2<typeof AvailableSegmentPointSolver> | PipelineStep$2<typeof HyperPortPointPathingSolver> | PipelineStep$2<typeof RemoveUnnecessaryJumpersSolver> | PipelineStep$2<typeof SimpleHighDensitySolver> | PipelineStep$2<typeof MultipleHighDensityRouteStitchSolver>)[];
3578
+ constructor(params: JumperPrepatternSolverParams);
3579
+ getCurrentStageName(): string;
3580
+ _step(): void;
3581
+ getCurrentPhase(): string;
3582
+ _createSimpleRouteJson(): SimpleRouteJson;
3583
+ _createJumperPadObstacles(): SimpleRouteJson["obstacles"];
3584
+ _addPortPointObstacles(obstacles: SimpleRouteJson["obstacles"]): void;
3585
+ _combineResults(): void;
3586
+ /**
3587
+ * Get all used jumpers converted to the Jumper type format
3588
+ */
3589
+ _getUsedJumpers(): Jumper[];
3590
+ getOutput(): HighDensityIntraNodeRouteWithJumpers[];
3591
+ /**
3592
+ * Draw the two pads of a jumper
3593
+ */
3594
+ private _drawJumperPads;
3595
+ visualize(): GraphicsObject;
3596
+ }
3597
+
3598
+ type JumperSolver = IntraNodeSolverWithJumpers | JumperPrepatternSolver;
3599
+ declare class HyperIntraNodeSolverWithJumpers extends HyperParameterSupervisorSolver<JumperSolver> {
3600
+ constructorParams: ConstructorParameters<typeof IntraNodeSolverWithJumpers>[0];
3601
+ solvedRoutes: HighDensityIntraNodeRouteWithJumpers[];
3602
+ nodeWithPortPoints: NodeWithPortPoints;
3603
+ connMap?: ConnectivityMap;
3604
+ constructor(opts: ConstructorParameters<typeof IntraNodeSolverWithJumpers>[0]);
3605
+ getConstructorParams(): {
3606
+ nodeWithPortPoints: NodeWithPortPoints;
3607
+ colorMap?: Record<string, string>;
3608
+ hyperParameters?: Partial<HighDensityHyperParameters>;
3609
+ connMap?: ConnectivityMap;
3610
+ traceWidth?: number;
3611
+ };
3612
+ getHyperParameterDefs(): ({
3613
+ name: string;
3614
+ possibleValues: {
3615
+ SHUFFLE_SEED: number;
3616
+ }[];
3617
+ } | {
3618
+ name: string;
3619
+ possibleValues: Array<{
3620
+ USE_JUMPER_PREPATTERN: true;
3621
+ } & JumperPrepatternSolverHyperParameters>;
3622
+ } | {
3623
+ name: string;
3624
+ possibleValues: {
3625
+ USE_JUMPER_PREPATTERN: boolean;
3626
+ FIRST_ORIENTATION: string;
3627
+ PATTERN_TYPE: string;
3628
+ }[];
3629
+ })[];
3630
+ getCombinationDefs(): string[][];
3631
+ _step(): void;
3632
+ computeG(solver: JumperSolver): number;
3633
+ computeH(solver: JumperSolver): number;
3634
+ generateSolver(hyperParameters: Partial<HighDensityHyperParameters> & {
3635
+ USE_JUMPER_PREPATTERN?: boolean;
3636
+ FIRST_ORIENTATION?: "horizontal" | "vertical";
3637
+ PATTERN_TYPE?: "alternating_grid" | "staggered_grid";
3638
+ }): JumperSolver;
3639
+ onSolve(solver: SupervisedSolver<JumperSolver>): void;
3640
+ visualize(): GraphicsObject;
3641
+ }
3642
+
3381
3643
  interface NodeAnalysis {
3382
3644
  node: NodeWithPortPoints;
3383
3645
  hasCrossings: boolean;
3384
3646
  numSameLayerCrossings: number;
3385
- isSingleLayer: boolean;
3386
3647
  }
3387
3648
  /**
3388
3649
  * HighDensitySolver intelligently selects the appropriate solver for each node:
@@ -3394,9 +3655,7 @@ interface NodeAnalysis {
3394
3655
  declare class JumperHighDensitySolver extends BaseSolver {
3395
3656
  allNodes: NodeWithPortPoints[];
3396
3657
  nodeAnalyses: NodeAnalysis[];
3397
- routes: (HighDensityIntraNodeRoute$1 & {
3398
- jumpers?: HighDensityIntraNodeRouteWithJumpers["jumpers"];
3399
- })[];
3658
+ routes: HighDensityIntraNodeRoute$1[];
3400
3659
  colorMap: Record<string, string>;
3401
3660
  traceWidth: number;
3402
3661
  viaDiameter: number;
@@ -3405,7 +3664,7 @@ declare class JumperHighDensitySolver extends BaseSolver {
3405
3664
  nodesWithoutCrossings: NodeWithPortPoints[];
3406
3665
  nodesWithCrossings: NodeWithPortPoints[];
3407
3666
  simpleHighDensitySolver?: SimpleHighDensitySolver;
3408
- jumperSolvers: IntraNodeSolverWithJumpers[];
3667
+ jumperSolvers: HyperIntraNodeSolverWithJumpers[];
3409
3668
  currentJumperSolverIndex: number;
3410
3669
  phase: "analyzing" | "simple" | "jumpers" | "done";
3411
3670
  constructor({ nodePortPoints, colorMap, traceWidth, viaDiameter, connMap, hyperParameters, }: {
@@ -3445,15 +3704,15 @@ declare class JumperHighDensitySolver extends BaseSolver {
3445
3704
  declare class ObstacleSpatialHashIndex {
3446
3705
  private idx;
3447
3706
  private storage;
3448
- constructor(implementation?: "native" | "rbush" | "flatbush", obstacles?: Obstacle[]);
3449
- insert(o: Obstacle): void;
3707
+ constructor(implementation?: "native" | "rbush" | "flatbush", obstacles?: Obstacle$1[]);
3708
+ insert(o: Obstacle$1): void;
3450
3709
  search(bbox: {
3451
3710
  minX: number;
3452
3711
  minY: number;
3453
3712
  maxX: number;
3454
3713
  maxY: number;
3455
- }): Obstacle[];
3456
- searchArea(centerX: number, centerY: number, width: number, height: number): Obstacle[];
3714
+ }): Obstacle$1[];
3715
+ searchArea(centerX: number, centerY: number, width: number, height: number): Obstacle$1[];
3457
3716
  }
3458
3717
 
3459
3718
  interface Point$1 {
@@ -3479,6 +3738,7 @@ type HighDensityIntraNodeRoute = {
3479
3738
  x: number;
3480
3739
  y: number;
3481
3740
  }>;
3741
+ jumpers?: Jumper[];
3482
3742
  };
3483
3743
  type HighDensityRoute = HighDensityIntraNodeRoute;
3484
3744
  declare class HighDensityRouteSpatialIndex {
@@ -3530,7 +3790,7 @@ interface Point3D$1 extends Point2D$1 {
3530
3790
  }
3531
3791
  interface TraceKeepoutSolverInput {
3532
3792
  hdRoutes: HighDensityRoute$1[];
3533
- obstacles: Obstacle[];
3793
+ obstacles: Obstacle$1[];
3534
3794
  connMap: ConnectivityMap;
3535
3795
  colorMap: Record<string, string>;
3536
3796
  keepoutRadiusSchedule?: number[];
@@ -3612,7 +3872,7 @@ interface Point3D extends Point2D {
3612
3872
  }
3613
3873
  interface TraceWidthSolverInput {
3614
3874
  hdRoutes: HighDensityRoute$1[];
3615
- obstacles?: Obstacle[];
3875
+ obstacles?: Obstacle$1[];
3616
3876
  connMap?: ConnectivityMap;
3617
3877
  colorMap?: Record<string, string>;
3618
3878
  nominalTraceWidth?: number;
@@ -3649,10 +3909,10 @@ declare class TraceWidthSolver extends BaseSolver {
3649
3909
  currentWalkMinClearance: number;
3650
3910
  bestMinClearance: number;
3651
3911
  bestWidth: number;
3652
- lastCollidingObstacles: Obstacle[];
3912
+ lastCollidingObstacles: Obstacle$1[];
3653
3913
  lastCollidingRoutes: HighDensityRoute$1[];
3654
3914
  lastClearance: number;
3655
- obstacles: Obstacle[];
3915
+ obstacles: Obstacle$1[];
3656
3916
  obstacleSHI?: ObstacleSpatialHashIndex;
3657
3917
  hdRouteSHI: HighDensityRouteSpatialIndex;
3658
3918
  connMap?: ConnectivityMap;
@@ -3738,7 +3998,7 @@ declare class PortPointOffboardPathFragmentSolver extends BaseSolver {
3738
3998
  currentObstacleIndex: number;
3739
3999
  /** Obstacles that have offBoardConnectsTo defined */
3740
4000
  offboardObstacles: Array<{
3741
- obstacle: Obstacle;
4001
+ obstacle: Obstacle$1;
3742
4002
  index: number;
3743
4003
  }>;
3744
4004
  /** Port points created at obstacle centers */
@@ -3755,7 +4015,7 @@ declare class PortPointOffboardPathFragmentSolver extends BaseSolver {
3755
4015
  currentFragmentIndex: number;
3756
4016
  /** Last processed obstacle (for visualization) */
3757
4017
  lastProcessedObstacle: {
3758
- obstacle: Obstacle;
4018
+ obstacle: Obstacle$1;
3759
4019
  index: number;
3760
4020
  } | null;
3761
4021
  /** Last created port point (for visualization) */
@@ -3777,42 +4037,6 @@ declare class PortPointOffboardPathFragmentSolver extends BaseSolver {
3777
4037
  visualize(): GraphicsObject;
3778
4038
  }
3779
4039
 
3780
- type BucketCoordinate$1 = `${number}x${number}`;
3781
- declare class CapacityNodeTree {
3782
- nodes: CapacityMeshNode[];
3783
- buckets: Map<BucketCoordinate$1, CapacityMeshNode[]>;
3784
- CELL_SIZE: number;
3785
- constructor(nodes: CapacityMeshNode[]);
3786
- getBucketKey(x: number, y: number): BucketCoordinate$1;
3787
- getNodesInArea(centerX: number, centerY: number, width: number, height: number): CapacityMeshNode[];
3788
- }
3789
-
3790
- /**
3791
- * This solver looks at every obstacle with off board connections (one per step),
3792
- * then sets _offBoardConnectedCapacityMeshNodeIds on each capacity node that is
3793
- * mutually connected via off board connections
3794
- */
3795
- declare class RelateNodesToOffBoardConnectionsSolver extends BaseSolver {
3796
- input: {
3797
- capacityMeshNodes: CapacityMeshNode[];
3798
- srj: SimpleRouteJson;
3799
- };
3800
- unprocessedObstacles: Obstacle[];
3801
- nodeTree: CapacityNodeTree;
3802
- offBoardConnMap: ConnectivityMap$1;
3803
- nodesInNet: Map<OffBoardConnectionId, CapacityMeshNode[]>;
3804
- lastProcessedObstacle?: Obstacle;
3805
- constructor(input: {
3806
- capacityMeshNodes: CapacityMeshNode[];
3807
- srj: SimpleRouteJson;
3808
- });
3809
- _step(): void;
3810
- getOutput(): {
3811
- capacityNodes: CapacityMeshNode[];
3812
- };
3813
- visualize(): GraphicsObject;
3814
- }
3815
-
3816
4040
  interface CapacityMeshSolverOptions$1 {
3817
4041
  capacityDepth?: number;
3818
4042
  targetMinCapacity?: number;
@@ -4057,7 +4281,7 @@ declare class CapacityMeshNodeSolver extends BaseSolver {
4057
4281
  opts: CapacityMeshNodeSolverOptions$2;
4058
4282
  unfinishedNodes: CapacityMeshNode[];
4059
4283
  finishedNodes: CapacityMeshNode[];
4060
- nodeToXYOverlappingObstaclesMap: Map<CapacityMeshNodeId, Obstacle[]>;
4284
+ nodeToXYOverlappingObstaclesMap: Map<CapacityMeshNodeId, Obstacle$1[]>;
4061
4285
  layerCount: number;
4062
4286
  protected outlinePolygon?: Polygon;
4063
4287
  MAX_DEPTH: number;
@@ -4084,8 +4308,8 @@ declare class CapacityMeshNodeSolver extends BaseSolver {
4084
4308
  getNextNodeId(): string;
4085
4309
  getCapacityFromDepth(depth: number): number;
4086
4310
  getTargetIfNodeContainsTarget(node: CapacityMeshNode): Target | null;
4087
- getXYOverlappingObstacles(node: CapacityMeshNode): Obstacle[];
4088
- getXYZOverlappingObstacles(node: CapacityMeshNode): Obstacle[];
4311
+ getXYOverlappingObstacles(node: CapacityMeshNode): Obstacle$1[];
4312
+ getXYZOverlappingObstacles(node: CapacityMeshNode): Obstacle$1[];
4089
4313
  /**
4090
4314
  * Checks if the given mesh node overlaps with any obstacle.
4091
4315
  * We treat both obstacles and nodes as axis‐aligned rectangles.
@@ -4225,8 +4449,8 @@ declare class SingleLayerNodeMergerSolver_OnlyMergeTargets extends BaseSolver {
4225
4449
  */
4226
4450
  declare class AssignableViaNodeMergerSolver extends BaseSolver {
4227
4451
  newNodes: CapacityMeshNode[];
4228
- obstacleToNodesMap: Map<Obstacle, CapacityMeshNode[]>;
4229
- obstaclesToProcess: Obstacle[];
4452
+ obstacleToNodesMap: Map<Obstacle$1, CapacityMeshNode[]>;
4453
+ obstaclesToProcess: Obstacle$1[];
4230
4454
  mergedNodeIds: Set<CapacityMeshNodeId>;
4231
4455
  constructor(nodes: CapacityMeshNode[]);
4232
4456
  _step(): void;
@@ -4245,7 +4469,7 @@ declare class SingleSimplifiedPathSolver extends BaseSolver {
4245
4469
  tailIndex: number;
4246
4470
  inputRoute: HighDensityIntraNodeRoute$1;
4247
4471
  otherHdRoutes: HighDensityIntraNodeRoute$1[];
4248
- obstacles: Obstacle[];
4472
+ obstacles: Obstacle$1[];
4249
4473
  connMap: ConnectivityMap;
4250
4474
  colorMap: Record<string, string>;
4251
4475
  outline?: Array<{
@@ -4255,7 +4479,7 @@ declare class SingleSimplifiedPathSolver extends BaseSolver {
4255
4479
  constructor(params: {
4256
4480
  inputRoute: HighDensityIntraNodeRoute$1;
4257
4481
  otherHdRoutes: HighDensityIntraNodeRoute$1[];
4258
- obstacles: Obstacle[];
4482
+ obstacles: Obstacle$1[];
4259
4483
  connMap: ConnectivityMap;
4260
4484
  colorMap: Record<string, string>;
4261
4485
  outline?: Array<{
@@ -4266,7 +4490,7 @@ declare class SingleSimplifiedPathSolver extends BaseSolver {
4266
4490
  getConstructorParams(): {
4267
4491
  inputRoute: HighDensityIntraNodeRoute$1;
4268
4492
  otherHdRoutes: HighDensityIntraNodeRoute$1[];
4269
- obstacles: Obstacle[];
4493
+ obstacles: Obstacle$1[];
4270
4494
  connMap: Record<string, string[]>;
4271
4495
  colorMap: Record<string, string>;
4272
4496
  outline: {
@@ -4285,7 +4509,7 @@ declare class MultiSimplifiedPathSolver extends BaseSolver {
4285
4509
  currentUnsimplifiedHdRouteIndex: number;
4286
4510
  activeSubSolver: SingleSimplifiedPathSolver | null;
4287
4511
  unsimplifiedHdRoutes: HighDensityIntraNodeRoute$1[];
4288
- obstacles: Obstacle[];
4512
+ obstacles: Obstacle$1[];
4289
4513
  connMap: ConnectivityMap;
4290
4514
  colorMap: Record<string, string>;
4291
4515
  outline?: Array<{
@@ -4295,7 +4519,7 @@ declare class MultiSimplifiedPathSolver extends BaseSolver {
4295
4519
  defaultViaDiameter: number;
4296
4520
  constructor(params: {
4297
4521
  unsimplifiedHdRoutes: HighDensityIntraNodeRoute$1[];
4298
- obstacles: Obstacle[];
4522
+ obstacles: Obstacle$1[];
4299
4523
  connMap?: ConnectivityMap;
4300
4524
  colorMap?: Record<string, string>;
4301
4525
  outline?: Array<{
@@ -4350,7 +4574,7 @@ declare class SingleRouteUselessViaRemovalSolver extends BaseSolver {
4350
4574
 
4351
4575
  interface UselessViaRemovalSolverInput {
4352
4576
  unsimplifiedHdRoutes: HighDensityRoute$1[];
4353
- obstacles: Obstacle[];
4577
+ obstacles: Obstacle$1[];
4354
4578
  colorMap: Record<string, string>;
4355
4579
  layerCount: number;
4356
4580
  }