@tscircuit/schematic-trace-solver 0.0.124 → 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 (29) hide show
  1. package/dist/index.d.ts +46 -1
  2. package/dist/index.js +461 -37
  3. package/lib/solvers/AvailableNetOrientationSolver/geometry.ts +5 -1
  4. package/lib/solvers/NetLabelTraceCollisionSolver/NetLabelTraceCollisionSolver.ts +15 -0
  5. package/lib/solvers/RailNetLabelCornerPlacementSolver/RailNetLabelCornerPlacementSolver.ts +49 -6
  6. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +69 -11
  7. package/lib/solvers/TraceElbowTransitionSimplificationSolver/TraceElbowTransitionSimplificationSolver.ts +216 -0
  8. package/lib/solvers/TraceElbowTransitionSimplificationSolver/generateElbowTransitionSimplificationCandidates.ts +186 -0
  9. package/lib/solvers/TraceElbowTransitionSimplificationSolver/types.ts +10 -0
  10. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +3 -0
  11. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +16 -0
  12. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/SingleOverlapSolver/SingleOverlapSolver.ts +56 -13
  13. package/package.json +1 -1
  14. package/site/bug-reports/bug-report-20260805T061316Z.page.tsx +4 -0
  15. package/site/bug-reports/bug-report-20260806T061548Z.page.tsx +4 -0
  16. package/site/bug-reports/bug-report-20260806T093501Z.page.tsx +4 -0
  17. package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +3 -3
  18. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +6 -6
  19. package/tests/bug-reports/bug-report-20260805T061316Z/__snapshots__/bug-report-20260805T061316Z.snap.svg +212 -0
  20. package/tests/bug-reports/bug-report-20260805T061316Z/bug-report-20260805T061316Z.json +889 -0
  21. package/tests/bug-reports/bug-report-20260805T061316Z/bug-report-20260805T061316Z.test.ts +12 -0
  22. package/tests/bug-reports/bug-report-20260806T061548Z/__snapshots__/bug-report-20260806T061548Z.snap.svg +212 -0
  23. package/tests/bug-reports/bug-report-20260806T061548Z/bug-report-20260806T061548Z.json +960 -0
  24. package/tests/bug-reports/bug-report-20260806T061548Z/bug-report-20260806T061548Z.test.ts +32 -0
  25. package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +135 -0
  26. package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.json +505 -0
  27. package/tests/bug-reports/bug-report-20260806T093501Z/bug-report-20260806T093501Z.test.ts +66 -0
  28. package/tests/examples/__snapshots__/example01.snap.svg +18 -18
  29. 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;
@@ -875,6 +887,7 @@ declare class RailNetLabelCornerPlacementSolver extends BaseSolver {
875
887
  private intersectsAnyOtherNetLabel;
876
888
  private getCornerCandidatesForLabel;
877
889
  private isConfiguredRailLabel;
890
+ private isLabelCrossedByOtherNetTrace;
878
891
  private pointsEqual;
879
892
  private getVerticalSegmentPointIndices;
880
893
  private isPinAlignedCorner;
@@ -957,6 +970,7 @@ declare class NetLabelTraceCollisionSolver extends BaseSolver {
957
970
  netLabelPlacements: NetLabelPlacement[];
958
971
  outputTraces: SolvedTracePath[];
959
972
  outputNetLabelPlacements: NetLabelPlacement[];
973
+ completedReroutes: CompletedTraceReroute[];
960
974
  activeSubSolver: SingleOverlapSolver | null;
961
975
  private recentlyFailed;
962
976
  private detourCounts;
@@ -971,6 +985,7 @@ declare class NetLabelTraceCollisionSolver extends BaseSolver {
971
985
  private reanchorLabelsOnMovedTrace;
972
986
  getOutput(): {
973
987
  traces: SolvedTracePath[];
988
+ completedReroutes: CompletedTraceReroute[];
974
989
  netLabelPlacements: NetLabelPlacement[];
975
990
  };
976
991
  private getOverlapKey;
@@ -1082,6 +1097,33 @@ declare class SameNetJunctionAlignmentSolver extends BaseSolver {
1082
1097
  visualize(): GraphicsObject;
1083
1098
  }
1084
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
+
1085
1127
  /**
1086
1128
  * Pipeline solver that runs a series of solvers to find the best schematic layout.
1087
1129
  * Coordinates the entire layout process from chip partitioning through final packing.
@@ -1116,6 +1158,9 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
1116
1158
  netLabelTraceCollisionSolver?: NetLabelTraceCollisionSolver;
1117
1159
  traceCleanupSolver2?: TraceCleanupSolver;
1118
1160
  netLabelNetLabelCollisionSolver?: NetLabelNetLabelCollisionSolver;
1161
+ traceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
1162
+ preAlignmentTraceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
1163
+ finalTraceElbowTransitionSimplificationSolver?: TraceElbowTransitionSimplificationSolver;
1119
1164
  sameNetJunctionAlignmentSolver?: SameNetJunctionAlignmentSolver;
1120
1165
  startTimeOfPhase: Record<string, number>;
1121
1166
  endTimeOfPhase: Record<string, number>;
@@ -1123,7 +1168,7 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
1123
1168
  firstIterationOfPhase: Record<string, number>;
1124
1169
  inputProblem: InputProblem;
1125
1170
  hideRatsNet: boolean;
1126
- 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>)[];
1127
1172
  constructor(inputProblem: InputProblem, opts?: Options);
1128
1173
  getConstructorParams(): ConstructorParameters<typeof SchematicTracePipelineSolver>;
1129
1174
  currentPipelineStepIndex: number;