@tscircuit/schematic-trace-solver 0.0.125 → 0.0.126
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 +45 -1
- package/dist/index.js +427 -35
- package/lib/solvers/NetLabelTraceCollisionSolver/NetLabelTraceCollisionSolver.ts +15 -0
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +69 -11
- package/lib/solvers/TraceElbowTransitionSimplificationSolver/TraceElbowTransitionSimplificationSolver.ts +216 -0
- package/lib/solvers/TraceElbowTransitionSimplificationSolver/generateElbowTransitionSimplificationCandidates.ts +186 -0
- package/lib/solvers/TraceElbowTransitionSimplificationSolver/types.ts +10 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +3 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +16 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/SingleOverlapSolver/SingleOverlapSolver.ts +56 -13
- package/package.json +1 -1
- package/site/bug-reports/bug-report-20260806T093501Z.page.tsx +4 -0
- package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +3 -3
- package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +6 -6
- package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +135 -0
- package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.json +505 -0
- package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.test.ts +66 -0
- package/tests/examples/__snapshots__/example33.snap.svg +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -441,6 +441,13 @@ declare class NetLabelPlacementSolver extends BaseSolver {
|
|
|
441
441
|
visualize(): GraphicsObject;
|
|
442
442
|
}
|
|
443
443
|
|
|
444
|
+
interface CompletedTraceReroute {
|
|
445
|
+
initialTrace: SolvedTracePath;
|
|
446
|
+
reroutedTracePath: Point[];
|
|
447
|
+
label: NetLabelPlacement;
|
|
448
|
+
detourCount: number;
|
|
449
|
+
}
|
|
450
|
+
|
|
444
451
|
interface LabelMergingSolverInput {
|
|
445
452
|
netLabelPlacements: NetLabelPlacement[];
|
|
446
453
|
inputProblem: InputProblem;
|
|
@@ -479,6 +486,7 @@ interface SingleOverlapSolverInput {
|
|
|
479
486
|
paddingBuffer: number;
|
|
480
487
|
detourCount: number;
|
|
481
488
|
tracesToAvoidOverlapping?: SolvedTracePath[];
|
|
489
|
+
netLabelPlacements?: NetLabelPlacement[];
|
|
482
490
|
}
|
|
483
491
|
/**
|
|
484
492
|
* This solver attempts to find a valid rerouting for a single trace that is
|
|
@@ -493,6 +501,8 @@ declare class SingleOverlapSolver extends BaseSolver {
|
|
|
493
501
|
obstacles: ReturnType<typeof getObstacleRects>;
|
|
494
502
|
label: NetLabelPlacement;
|
|
495
503
|
tracesToAvoidOverlapping: SolvedTracePath[];
|
|
504
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
505
|
+
detourCount: number;
|
|
496
506
|
_tried: number;
|
|
497
507
|
constructor(solverInput: SingleOverlapSolverInput);
|
|
498
508
|
_step(): void;
|
|
@@ -520,6 +530,7 @@ declare class OverlapAvoidanceStepSolver extends BaseSolver {
|
|
|
520
530
|
allTraces: SolvedTracePath[];
|
|
521
531
|
tracesToAvoidOverlapping: SolvedTracePath[];
|
|
522
532
|
modifiedTraces: SolvedTracePath[];
|
|
533
|
+
completedReroutes: CompletedTraceReroute[];
|
|
523
534
|
private readonly PADDING_BUFFER;
|
|
524
535
|
private detourCounts;
|
|
525
536
|
activeSubSolver: SingleOverlapSolver | null;
|
|
@@ -570,6 +581,7 @@ declare class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
|
570
581
|
_step(): void;
|
|
571
582
|
getOutput(): {
|
|
572
583
|
traces: SolvedTracePath[];
|
|
584
|
+
completedReroutes: CompletedTraceReroute[];
|
|
573
585
|
netLabelPlacements: NetLabelPlacement[];
|
|
574
586
|
};
|
|
575
587
|
visualize(): GraphicsObject;
|
|
@@ -958,6 +970,7 @@ declare class NetLabelTraceCollisionSolver extends BaseSolver {
|
|
|
958
970
|
netLabelPlacements: NetLabelPlacement[];
|
|
959
971
|
outputTraces: SolvedTracePath[];
|
|
960
972
|
outputNetLabelPlacements: NetLabelPlacement[];
|
|
973
|
+
completedReroutes: CompletedTraceReroute[];
|
|
961
974
|
activeSubSolver: SingleOverlapSolver | null;
|
|
962
975
|
private recentlyFailed;
|
|
963
976
|
private detourCounts;
|
|
@@ -972,6 +985,7 @@ declare class NetLabelTraceCollisionSolver extends BaseSolver {
|
|
|
972
985
|
private reanchorLabelsOnMovedTrace;
|
|
973
986
|
getOutput(): {
|
|
974
987
|
traces: SolvedTracePath[];
|
|
988
|
+
completedReroutes: CompletedTraceReroute[];
|
|
975
989
|
netLabelPlacements: NetLabelPlacement[];
|
|
976
990
|
};
|
|
977
991
|
private getOverlapKey;
|
|
@@ -1083,6 +1097,33 @@ declare class SameNetJunctionAlignmentSolver extends BaseSolver {
|
|
|
1083
1097
|
visualize(): GraphicsObject;
|
|
1084
1098
|
}
|
|
1085
1099
|
|
|
1100
|
+
interface TraceElbowTransitionSimplificationSolverInput {
|
|
1101
|
+
inputProblem: InputProblem;
|
|
1102
|
+
traces: SolvedTracePath[];
|
|
1103
|
+
completedReroutes: CompletedTraceReroute[];
|
|
1104
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
1105
|
+
paddingBuffer: number;
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Post-processes traces after trace/label overlap avoidance. It removes
|
|
1109
|
+
* redundant elbow transitions and, when needed, shifts a simplified elbow
|
|
1110
|
+
* around a rendered label. Every replacement is revalidated against labels,
|
|
1111
|
+
* components, other-net traces, and label anchors.
|
|
1112
|
+
*/
|
|
1113
|
+
declare class TraceElbowTransitionSimplificationSolver extends BaseSolver {
|
|
1114
|
+
private input;
|
|
1115
|
+
private outputTraces;
|
|
1116
|
+
private traceIdQueue;
|
|
1117
|
+
private obstacles;
|
|
1118
|
+
constructor(input: TraceElbowTransitionSimplificationSolverInput);
|
|
1119
|
+
_step(): void;
|
|
1120
|
+
getOutput(): {
|
|
1121
|
+
traces: SolvedTracePath[];
|
|
1122
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
1123
|
+
};
|
|
1124
|
+
visualize(): GraphicsObject;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1086
1127
|
/**
|
|
1087
1128
|
* Pipeline solver that runs a series of solvers to find the best schematic layout.
|
|
1088
1129
|
* Coordinates the entire layout process from chip partitioning through final packing.
|
|
@@ -1117,6 +1158,9 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
1117
1158
|
netLabelTraceCollisionSolver?: NetLabelTraceCollisionSolver;
|
|
1118
1159
|
traceCleanupSolver2?: TraceCleanupSolver;
|
|
1119
1160
|
netLabelNetLabelCollisionSolver?: NetLabelNetLabelCollisionSolver;
|
|
1161
|
+
traceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
|
|
1162
|
+
preAlignmentTraceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
|
|
1163
|
+
finalTraceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
|
|
1120
1164
|
sameNetJunctionAlignmentSolver?: SameNetJunctionAlignmentSolver;
|
|
1121
1165
|
startTimeOfPhase: Record<string, number>;
|
|
1122
1166
|
endTimeOfPhase: Record<string, number>;
|
|
@@ -1124,7 +1168,7 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
1124
1168
|
firstIterationOfPhase: Record<string, number>;
|
|
1125
1169
|
inputProblem: InputProblem;
|
|
1126
1170
|
hideRatsNet: boolean;
|
|
1127
|
-
pipelineDef: (PipelineStep<typeof MspConnectionPairSolver> | PipelineStep<typeof SchematicTraceLinesSolver> | PipelineStep<typeof LongDistancePairSolver> | PipelineStep<typeof UnroutedTraceRecoverySolver> | PipelineStep<typeof TraceOverlapShiftSolver> | PipelineStep<typeof NetLabelPlacementSolver> | PipelineStep<typeof TraceLabelOverlapAvoidanceSolver> | PipelineStep<typeof TraceCleanupSolver> | PipelineStep<typeof Example28Solver> | PipelineStep<typeof AvailableNetOrientationSolver> | PipelineStep<typeof RailNetLabelCornerPlacementSolver> | PipelineStep<typeof TraceAnchoredNetLabelOverlapSolver> | PipelineStep<typeof NetLabelTraceCollisionSolver> | PipelineStep<typeof NetLabelNetLabelCollisionSolver> | PipelineStep<typeof SameNetJunctionAlignmentSolver>)[];
|
|
1171
|
+
pipelineDef: (PipelineStep<typeof MspConnectionPairSolver> | PipelineStep<typeof SchematicTraceLinesSolver> | PipelineStep<typeof LongDistancePairSolver> | PipelineStep<typeof UnroutedTraceRecoverySolver> | PipelineStep<typeof TraceOverlapShiftSolver> | PipelineStep<typeof NetLabelPlacementSolver> | PipelineStep<typeof TraceLabelOverlapAvoidanceSolver> | PipelineStep<typeof TraceElbowTransitionSimplificationSolver> | PipelineStep<typeof TraceCleanupSolver> | PipelineStep<typeof Example28Solver> | PipelineStep<typeof AvailableNetOrientationSolver> | PipelineStep<typeof RailNetLabelCornerPlacementSolver> | PipelineStep<typeof TraceAnchoredNetLabelOverlapSolver> | PipelineStep<typeof NetLabelTraceCollisionSolver> | PipelineStep<typeof NetLabelNetLabelCollisionSolver> | PipelineStep<typeof SameNetJunctionAlignmentSolver>)[];
|
|
1128
1172
|
constructor(inputProblem: InputProblem, opts?: Options);
|
|
1129
1173
|
getConstructorParams(): ConstructorParameters<typeof SchematicTracePipelineSolver>;
|
|
1130
1174
|
currentPipelineStepIndex: number;
|