@tscircuit/capacity-autorouter 0.0.310 → 0.0.311

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
@@ -3,10 +3,11 @@ import { ConnectivityMap } from 'circuit-json-to-connectivity-map';
3
3
  import * as graphics_debug from 'graphics-debug';
4
4
  import { GraphicsObject, Rect, Circle, Line, Point as Point$5 } from 'graphics-debug';
5
5
  import { BaseSolver as BaseSolver$1 } from '@tscircuit/solver-utils';
6
- import { ViaTile, ViaGraphSolver, ViaByNet, JumperGraphSolver, JRegion, JPort, Region, RegionPort, HyperGraphSolver, HyperGraph, Connection, Candidate as Candidate$3, RegionPortAssignment, SolvedRoute } from '@tscircuit/hypergraph';
6
+ import { ViaTile, ViaGraphSolver, ViaByNet, JumperGraphSolver, JRegion, JPort, Region, RegionPortAssignment, RegionPort, Connection, SolvedRoute, Candidate as Candidate$3, HyperGraph, HyperGraphSolver } from '@tscircuit/hypergraph';
7
7
  import { Point3, Polygon } from '@tscircuit/math-utils';
8
8
  import { CurvyTraceSolver } from '@tscircuit/curvy-trace-solver';
9
9
  import { ConnectivityMap as ConnectivityMap$1 } from 'connectivity-map';
10
+ import { NodeWithPortPoints as NodeWithPortPoints$1 } from '@tscircuit/high-density-a01';
10
11
 
11
12
  interface CacheProvider {
12
13
  isSyncCache: boolean;
@@ -4397,104 +4398,6 @@ declare class AssignableAutoroutingPipeline3 extends BaseSolver {
4397
4398
  getOutputSimpleRouteJson(): SimpleRouteJson;
4398
4399
  }
4399
4400
 
4400
- type HgRegion = Region & {
4401
- d: InputNodeWithPortPoints;
4402
- };
4403
- type HgPort = RegionPort & {
4404
- d: InputPortPoint;
4405
- };
4406
-
4407
- type RegionId = CapacityMeshNodeId;
4408
- type RegionMemoryPfMap = Map<RegionId, number>;
4409
- type RegionRipCountMap = Map<RegionId, number>;
4410
- interface HgPortPointPathingSolverParams {
4411
- inputGraph: HyperGraph;
4412
- inputConnections: Connection[];
4413
- connectionsWithResults: ConnectionPathResult[];
4414
- inputNodes: InputNodeWithPortPoints[];
4415
- portPointMap: Map<string, InputPortPoint>;
4416
- regionMemoryPfMap: RegionMemoryPfMap;
4417
- rippingEnabled: boolean;
4418
- forceCenterFirst: boolean;
4419
- weights: {
4420
- GREEDY_MULTIPLIER: number;
4421
- RIP_COST: number;
4422
- PORT_USAGE_PENALTY: number;
4423
- REGION_TRANSITION_PENALTY: number;
4424
- MEMORY_PF_FACTOR: number;
4425
- CENTER_OFFSET_DIST_PENALTY_FACTOR: number;
4426
- STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR: number;
4427
- RIP_REGION_PF_THRESHOLD_START: number;
4428
- MAX_REGION_RIPS: number;
4429
- RANDOM_RIP_FRACTION: number;
4430
- MAX_RIPS: number;
4431
- MIN_ALLOWED_BOARD_SCORE: number;
4432
- };
4433
- layerCount: number;
4434
- }
4435
- declare class HgPortPointPathingSolver extends HyperGraphSolver<HgRegion, HgPort> {
4436
- inputNodes: InputNodeWithPortPoints[];
4437
- regionNodeMap: Map<RegionId, InputNodeWithPortPoints>;
4438
- regionById: Map<RegionId, HgRegion>;
4439
- portPointMap: Map<string, InputPortPoint>;
4440
- connectionsWithResults: ConnectionPathResult[];
4441
- assignedPortPoints: Map<string, {
4442
- connectionName: string;
4443
- rootConnectionName?: string;
4444
- }>;
4445
- nodeAssignedPortPoints: Map<CapacityMeshNodeId, PortPoint[]>;
4446
- assignmentsBuilt: boolean;
4447
- portUsagePenalty: number;
4448
- regionTransitionPenalty: number;
4449
- ripRegionPfThresholdStart: number;
4450
- maxRegionRips: number;
4451
- memoryPfFactor: number;
4452
- centerOffsetDistPenaltyFactor: number;
4453
- forceCenterFirst: boolean;
4454
- straightLineDeviationPenaltyFactor: number;
4455
- connectionResultByName: Map<string, ConnectionPathResult>;
4456
- regionRipCountMap: RegionRipCountMap;
4457
- regionMemoryPfMap: RegionMemoryPfMap;
4458
- totalRipCount: number;
4459
- randomRipFraction: number;
4460
- maxRips: number;
4461
- MIN_ALLOWED_BOARD_SCORE: number;
4462
- layerCount: number;
4463
- constructor({ inputGraph, inputConnections, connectionsWithResults, inputNodes, portPointMap, regionMemoryPfMap, rippingEnabled, weights, forceCenterFirst, layerCount, }: HgPortPointPathingSolverParams);
4464
- private clampPf;
4465
- private pfToFailureCost;
4466
- private recordRegionMemoryPf;
4467
- estimateCostToEnd(port: HgPort): number;
4468
- computeH(candidate: Candidate$3<HgRegion, HgPort>): number;
4469
- private getStraightLineDeviationPenalty;
4470
- computeIncreasedRegionCostIfPortsAreUsed(region: HgRegion, port1: HgPort, port2: HgPort): number;
4471
- getPortUsagePenalty(port: HgPort): number;
4472
- getRipsRequiredForPortUsage(region: HgRegion, port1: HgPort, port2: HgPort): RegionPortAssignment[];
4473
- private isPortAvailableForCurrentNet;
4474
- private getCenterFirstEnteringRegionCandidates;
4475
- selectCandidatesForEnteringRegion(candidates: Candidate$3<HgRegion, HgPort>[]): Candidate$3<HgRegion, HgPort>[];
4476
- routeSolvedHook(solvedRoute: SolvedRoute): void;
4477
- _step(): void;
4478
- private enforceBoardScoreGuardrail;
4479
- private buildAssignmentsIfSolved;
4480
- private getRegionRippingPfThreshold;
4481
- private getPortPointsFromRegionAssignments;
4482
- private getPortPointsFromNewlySolvedRouteInRegion;
4483
- private computeRegionPf;
4484
- private computeRegionPfFromAssignments;
4485
- private getDerivedCapacityMeshNode;
4486
- private getCrossingRoutesByRegionForRoute;
4487
- private getRoutesInRegionForRipping;
4488
- private getTraversedRegionIds;
4489
- private processRandomRips;
4490
- private processRippingForRoute;
4491
- computeRoutesToRip(newlySolvedRoute: SolvedRoute): Set<SolvedRoute>;
4492
- getNodesWithPortPoints(): NodeWithPortPoints[];
4493
- computeBoardScore(): number;
4494
- computeNodePf(node: InputNodeWithPortPoints): number;
4495
- visualize(): GraphicsObject;
4496
- }
4497
-
4498
4401
  type ExploredPortPoint = {
4499
4402
  port: SegmentPortPoint;
4500
4403
  depth: number;
@@ -4554,6 +4457,146 @@ declare class MultiTargetNecessaryCrampedPortPointSolver extends BaseSolver$1 {
4554
4457
  visualize(): GraphicsObject;
4555
4458
  }
4556
4459
 
4460
+ type RawPort = {
4461
+ portId: string;
4462
+ x: number;
4463
+ y: number;
4464
+ z: number;
4465
+ distToCentermostPortOnZ: number;
4466
+ regions: RegionHg[];
4467
+ };
4468
+ type RegionPortHg = Omit<RegionPort, "d" | "port"> & {
4469
+ d: RawPort;
4470
+ };
4471
+ type RegionHg = Omit<Region, "d" | "assignments" | "ports"> & {
4472
+ d: CapacityMeshNode;
4473
+ assignments?: RegionPortAssignmentHg[];
4474
+ ports: RegionPortHg[];
4475
+ };
4476
+ type HyperGraphHg = Omit<HyperGraph, "ports" | "regions"> & {
4477
+ ports: RegionPortHg[];
4478
+ regions: RegionHg[];
4479
+ };
4480
+ type ConnectionHg = Omit<Connection, "startRegion" | "endRegion"> & {
4481
+ startRegion: RegionHg;
4482
+ endRegion: RegionHg;
4483
+ simpleRouteConnection?: SimpleRouteConnection;
4484
+ };
4485
+ type CandidateHg = Omit<Candidate$3, "port" | "parent" | "lastPort" | "lastRegion" | "nextRegion"> & {
4486
+ port: RegionPortHg;
4487
+ parent?: CandidateHg;
4488
+ lastPort?: RegionPortHg;
4489
+ lastRegion?: RegionHg;
4490
+ nextRegion?: RegionHg;
4491
+ ripRequired: boolean;
4492
+ };
4493
+ type SolvedRoutesHg = Omit<SolvedRoute, "path" | "connection"> & {
4494
+ path: CandidateHg[];
4495
+ connection: ConnectionHg;
4496
+ };
4497
+ type RegionPortAssignmentHg = Omit<RegionPortAssignment, "regionPort1" | "regionPort2" | "region" | "connection" | "solvedRoute"> & {
4498
+ regionPort1: RegionPortHg;
4499
+ regionPort2: RegionPortHg;
4500
+ region: RegionHg;
4501
+ connection: ConnectionHg;
4502
+ solvedRoute: SolvedRoutesHg;
4503
+ };
4504
+ type RegionId = CapacityMeshNodeId;
4505
+ type RegionMemoryPfMap = Map<RegionId, number>;
4506
+ interface HgPortPointPathingSolverParams {
4507
+ graph: HyperGraphHg;
4508
+ connections: ConnectionHg[];
4509
+ colorMap?: Record<string, string>;
4510
+ layerCount: number;
4511
+ effort: number;
4512
+ flags: {
4513
+ FORCE_CENTER_FIRST: boolean;
4514
+ RIPPING_ENABLED: boolean;
4515
+ };
4516
+ weights: {
4517
+ /** Seed used for deterministic shuffling in rip-selection ordering. */
4518
+ SHUFFLE_SEED: number;
4519
+ /** Multiplier for center-offset penalty in heuristic h (larger = prefer centermost ports). */
4520
+ CENTER_OFFSET_DIST_PENALTY_FACTOR: number;
4521
+ /** Center-offset amount ignored before penalty starts in heuristic h. */
4522
+ CENTER_OFFSET_FOCUS_SHIFT: number;
4523
+ /** A* greediness factor: f = g + GREEDY_MULTIPLIER * h. */
4524
+ GREEDY_MULTIPLIER: number;
4525
+ /** Scales exact Pf-delta step cost in g (higher = stronger congestion avoidance). */
4526
+ NODE_PF_FACTOR: number;
4527
+ /** Flat added cost when transition changes layer (z differs). */
4528
+ LAYER_CHANGE_COST: number;
4529
+ /** Cost associated with ripping a region due to Pf threshold. */
4530
+ RIPPING_PF_COST: number;
4531
+ /** Maximum cap applied to Pf-derived costs to avoid explosive scores. */
4532
+ NODE_PF_MAX_PENALTY: number;
4533
+ /** Scales memory-Pf contribution in heuristic h (bias away from historically bad regions). */
4534
+ MEMORY_PF_FACTOR: number;
4535
+ /** Base geometric transition multiplier used by auxiliary step penalties. */
4536
+ BASE_CANDIDATE_COST: number;
4537
+ /** Soft board-score guard for candidate filtering; more negative allows riskier paths. */
4538
+ MIN_ALLOWED_BOARD_SCORE: number;
4539
+ /** Per-connection candidate queue cap (0 means use default queue size). */
4540
+ MAX_ITERATIONS_PER_PATH: number;
4541
+ /** Distance threshold where heuristic is suppressed to encourage initial exploration. */
4542
+ RANDOM_WALK_DISTANCE: number;
4543
+ /** Fallback ripping threshold if START/END thresholds are not used. */
4544
+ RIPPING_PF_THRESHOLD: number;
4545
+ /** Initial region Pf threshold for ripping decisions. */
4546
+ START_RIPPING_PF_THRESHOLD: number;
4547
+ /** Final region Pf threshold as region rip-count approaches its cap. */
4548
+ END_RIPPING_PF_THRESHOLD: number;
4549
+ /** Global limit for total rip operations in one solve run. */
4550
+ MAX_RIPS: number;
4551
+ /** Fraction of extra random rips added when ripping is triggered. */
4552
+ RANDOM_RIP_FRACTION: number;
4553
+ /** Multiplier for straight-line deviation penalty in heuristic h. */
4554
+ STRAIGHT_LINE_DEVIATION_PENALTY_FACTOR: number;
4555
+ };
4556
+ opts?: {
4557
+ regionMemoryPfMap?: RegionMemoryPfMap;
4558
+ };
4559
+ }
4560
+
4561
+ /** Solves port-point routing over an HG hypergraph using heuristics and optional ripping. */
4562
+ declare class HgPortPointPathingSolver extends HyperGraphSolver<RegionHg, RegionPortHg> {
4563
+ private params;
4564
+ private regionMemoryPfMap;
4565
+ private baseRegionFailureCostMap;
4566
+ private regionRipCountMap;
4567
+ private totalRipCount;
4568
+ constructor(params: HgPortPointPathingSolverParams);
4569
+ estimateCostToEnd(port: RegionPortHg): number;
4570
+ computeH(candidate: CandidateHg): number;
4571
+ computeIncreasedRegionCostIfPortsAreUsed(region: RegionHg, port1: RegionPortHg, port2: RegionPortHg): number;
4572
+ computeG(candidate: CandidateHg): number;
4573
+ getPortUsagePenalty(port: RegionPortHg): number;
4574
+ getRipsRequiredForPortUsage(region: RegionHg, port1: RegionPortHg, port2: RegionPortHg): RegionPortAssignment[];
4575
+ selectCandidatesForEnteringRegion(candidates: CandidateHg[]): CandidateHg[];
4576
+ routeSolvedHook(solvedRoute: SolvedRoutesHg): void;
4577
+ computeRoutesToRip(newlySolvedRoute: SolvedRoutesHg): Set<SolvedRoutesHg>;
4578
+ private computeDeviation;
4579
+ private computeDistanceTraveled;
4580
+ private computeMemoryPfPenalty;
4581
+ private computeEndRegionCloseCost;
4582
+ private getCenterFirstEnteringRegionCandidates;
4583
+ private isPortAvailableForCurrentNet;
4584
+ private computeRegionPfFromAssignments;
4585
+ private clampPf;
4586
+ private get NODE_MAX_PF();
4587
+ private pfToFailureCost;
4588
+ private getBaseRegionFailureCost;
4589
+ private getRegionAssignedPortPoints;
4590
+ private computeRegionPfWithAdditionalSegment;
4591
+ private getRegionRippingPfThreshold;
4592
+ private computeRegionPf;
4593
+ getOutput(): {
4594
+ nodesWithPortPoints: NodeWithPortPoints$1[];
4595
+ inputNodeWithPortPoints: InputNodeWithPortPoints[];
4596
+ };
4597
+ visualize(): GraphicsObject;
4598
+ }
4599
+
4557
4600
  interface CapacityMeshSolverOptions$1 {
4558
4601
  capacityDepth?: number;
4559
4602
  targetMinCapacity?: number;
@@ -4597,7 +4640,6 @@ declare class AutoroutingPipelineSolver3_HgPortPointPathing extends BaseSolver {
4597
4640
  srjWithPointPairs?: SimpleRouteJson;
4598
4641
  capacityNodes: CapacityMeshNode[] | null;
4599
4642
  capacityEdges: CapacityMeshEdge[] | null;
4600
- inputNodeWithPortPoints: InputNodeWithPortPoints[];
4601
4643
  cacheProvider: CacheProvider | null;
4602
4644
  pipelineDef: (PipelineStep$1<typeof NetToPointPairsSolver2_OffBoardConnection> | PipelineStep$1<typeof RectDiffPipeline> | PipelineStep$1<typeof CapacityMeshEdgeSolver2_NodeTreeOptimization> | PipelineStep$1<typeof AvailableSegmentPointSolver> | PipelineStep$1<typeof MultiTargetNecessaryCrampedPortPointSolver> | PipelineStep$1<typeof HgPortPointPathingSolver> | PipelineStep$1<typeof UniformPortDistributionSolver> | PipelineStep$1<typeof HighDensitySolver> | PipelineStep$1<typeof MultipleHighDensityRouteStitchSolver> | PipelineStep$1<typeof TraceSimplificationSolver> | PipelineStep$1<typeof TraceWidthSolver>)[];
4603
4645
  constructor(srj: SimpleRouteJson, opts?: CapacityMeshSolverOptions$1);