@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.
Files changed (18) hide show
  1. package/dist/index.d.ts +45 -1
  2. package/dist/index.js +427 -35
  3. package/lib/solvers/NetLabelTraceCollisionSolver/NetLabelTraceCollisionSolver.ts +15 -0
  4. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +69 -11
  5. package/lib/solvers/TraceElbowTransitionSimplificationSolver/TraceElbowTransitionSimplificationSolver.ts +216 -0
  6. package/lib/solvers/TraceElbowTransitionSimplificationSolver/generateElbowTransitionSimplificationCandidates.ts +186 -0
  7. package/lib/solvers/TraceElbowTransitionSimplificationSolver/types.ts +10 -0
  8. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +3 -0
  9. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +16 -0
  10. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/SingleOverlapSolver/SingleOverlapSolver.ts +56 -13
  11. package/package.json +1 -1
  12. package/site/bug-reports/bug-report-20260806T093501Z.page.tsx +4 -0
  13. package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +3 -3
  14. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +6 -6
  15. package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +135 -0
  16. package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.json +505 -0
  17. package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.test.ts +66 -0
  18. 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;