@tscircuit/schematic-trace-solver 0.0.44 → 0.0.46

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 (39) hide show
  1. package/.github/workflows/bun-formatcheck.yml +1 -1
  2. package/.github/workflows/bun-pver-release.yml +1 -1
  3. package/.github/workflows/bun-test.yml +1 -1
  4. package/.github/workflows/bun-typecheck.yml +1 -1
  5. package/dist/index.d.ts +43 -8
  6. package/dist/index.js +1109 -185
  7. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +0 -1
  8. package/lib/solvers/TraceCleanupSolver/TraceCleanupSolver.ts +83 -36
  9. package/lib/solvers/TraceCleanupSolver/hasCollisions.ts +16 -4
  10. package/lib/solvers/TraceCleanupSolver/is4PointRectangle.ts +17 -0
  11. package/lib/solvers/TraceCleanupSolver/isSegmentAnEndpointSegment.ts +36 -0
  12. package/lib/solvers/TraceCleanupSolver/mergeGraphicsObjects.ts +28 -0
  13. package/lib/solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts +18 -1
  14. package/lib/solvers/TraceCleanupSolver/recognizeStairStepPattern.ts +56 -0
  15. package/lib/solvers/TraceCleanupSolver/sub-solver/UntangleTraceSubsolver.ts +370 -0
  16. package/lib/solvers/TraceCleanupSolver/sub-solver/findAllLShapedTurns.ts +48 -0
  17. package/lib/solvers/TraceCleanupSolver/sub-solver/findIntersectionsWithObstacles.ts +36 -0
  18. package/lib/solvers/TraceCleanupSolver/sub-solver/generateLShapeRerouteCandidates.ts +107 -0
  19. package/lib/solvers/TraceCleanupSolver/sub-solver/generateRectangleCandidates.ts +55 -0
  20. package/lib/solvers/TraceCleanupSolver/sub-solver/getTraceObstacles.ts +25 -0
  21. package/lib/solvers/TraceCleanupSolver/sub-solver/isPathColliding.ts +58 -0
  22. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCandidates.ts +33 -0
  23. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCollision.ts +20 -0
  24. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeIntersectionPoints.ts +26 -0
  25. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeLSapes.ts +33 -0
  26. package/lib/solvers/TraceCleanupSolver/turnMinimization.ts +50 -56
  27. package/lib/solvers/TraceCleanupSolver/visualizeTightRectangle.ts +24 -0
  28. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +17 -3
  29. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/detectTraceLabelOverlap.ts +26 -11
  30. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/LabelMergingSolver.ts +95 -75
  31. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/filterLabelsAtTraceEdges.ts +74 -0
  32. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/groupLabelsByChipAndOrientation.ts +45 -0
  33. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/mergeLabelGroup.ts +71 -0
  34. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +150 -27
  35. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/isPointInsideLabel.ts +23 -0
  36. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/visualizeDecomposition.ts +54 -0
  37. package/package.json +1 -1
  38. package/tests/examples/__snapshots__/example29.snap.svg +6 -6
  39. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +8 -8
@@ -17,7 +17,7 @@ jobs:
17
17
  - name: Setup bun
18
18
  uses: oven-sh/setup-bun@v2
19
19
  with:
20
- bun-version: latest
20
+ bun-version: 1.3.1
21
21
 
22
22
  - name: Install dependencies
23
23
  run: bun install
@@ -17,7 +17,7 @@ jobs:
17
17
  - name: Setup bun
18
18
  uses: oven-sh/setup-bun@v2
19
19
  with:
20
- bun-version: latest
20
+ bun-version: 1.3.1
21
21
  - uses: actions/setup-node@v3
22
22
  with:
23
23
  node-version: 20
@@ -19,7 +19,7 @@ jobs:
19
19
  - name: Setup bun
20
20
  uses: oven-sh/setup-bun@v2
21
21
  with:
22
- bun-version: latest
22
+ bun-version: 1.3.1
23
23
 
24
24
  - name: Install dependencies
25
25
  run: bun install
@@ -17,7 +17,7 @@ jobs:
17
17
  - name: Setup bun
18
18
  uses: oven-sh/setup-bun@v2
19
19
  with:
20
- bun-version: latest
20
+ bun-version: 1.3.1
21
21
 
22
22
  - name: Install dependencies
23
23
  run: bun i
package/dist/index.d.ts CHANGED
@@ -396,13 +396,20 @@ interface LabelMergingSolverOutput {
396
396
  }
397
397
  /**
398
398
  * Merges multiple net labels into a single, larger label if they are on the
399
- * same side of the same chip, reducing schematic clutter.
399
+ * same side of the same chip and physically adjacent.
400
400
  */
401
401
  declare class MergedNetLabelObstacleSolver extends BaseSolver {
402
402
  private input;
403
403
  private output;
404
404
  private inputProblem;
405
405
  private traces;
406
+ private pipelineStep;
407
+ private filteredLabels;
408
+ private labelGroups;
409
+ private groupKeysToProcess;
410
+ private finalPlacements;
411
+ private mergedLabelNetIdMap;
412
+ private activeMergingGroupKey;
406
413
  constructor(solverInput: LabelMergingSolverInput);
407
414
  _step(): void;
408
415
  getOutput(): LabelMergingSolverOutput;
@@ -436,7 +443,8 @@ declare class SingleOverlapSolver extends BaseSolver {
436
443
  interface OverlapCollectionSolverInput {
437
444
  inputProblem: InputProblem;
438
445
  traces: SolvedTracePath[];
439
- netLabelPlacements: NetLabelPlacement[];
446
+ initialNetLabelPlacements: NetLabelPlacement[];
447
+ mergedNetLabelPlacements: NetLabelPlacement[];
440
448
  mergedLabelNetIdMap: Record<string, Set<string>>;
441
449
  }
442
450
  /**
@@ -445,7 +453,8 @@ interface OverlapCollectionSolverInput {
445
453
  */
446
454
  declare class OverlapAvoidanceStepSolver extends BaseSolver {
447
455
  inputProblem: InputProblem;
448
- netLabelPlacements: NetLabelPlacement[];
456
+ initialNetLabelPlacements: NetLabelPlacement[];
457
+ mergedNetLabelPlacements: NetLabelPlacement[];
449
458
  mergedLabelNetIdMap: Record<string, Set<string>>;
450
459
  allTraces: SolvedTracePath[];
451
460
  modifiedTraces: SolvedTracePath[];
@@ -454,6 +463,8 @@ declare class OverlapAvoidanceStepSolver extends BaseSolver {
454
463
  activeSubSolver: SingleOverlapSolver | null;
455
464
  private overlapQueue;
456
465
  private recentlyFailed;
466
+ private currentlyProcessingOverlap;
467
+ private decomposedChildLabels;
457
468
  constructor(solverInput: OverlapCollectionSolverInput);
458
469
  _step(): void;
459
470
  getOutput(): {
@@ -469,8 +480,21 @@ interface TraceLabelOverlapAvoidanceSolverInput {
469
480
  netLabelPlacements: NetLabelPlacement[];
470
481
  }
471
482
  /**
472
- * This solver is a pipeline that runs a series of sub-solvers to resolve
473
- * trace-label overlaps and clean up the resulting traces.
483
+ * A pipeline solver responsible for resolving overlaps between schematic traces and net labels.
484
+ *
485
+ * This solver orchestrates a sequence of sub-solvers to achieve its goal:
486
+ * 1. **MergedNetLabelObstacleSolver**: This solver first merges labels that are
487
+ * close to each other to form larger "obstacle" groups. This simplifies the
488
+ * problem by reducing the number of individual obstacles the traces need to avoid.
489
+ * 2. **OverlapAvoidanceStepSolver**: This solver then takes the output of the merging
490
+ * step and iteratively attempts to reroute traces to avoid the merged label obstacles.
491
+ * It handles one overlap at a time, making it a step-by-step process.
492
+ *
493
+ * The final output is a set of modified traces that have been rerouted to avoid
494
+ * labels, and the set of merged labels that were used as obstacles.
495
+ *
496
+ * @param {TraceLabelOverlapAvoidanceSolverInput} solverInput - The input for the solver,
497
+ * containing the initial traces, label placements, and the input problem definition.
474
498
  */
475
499
  declare class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
476
500
  inputProblem: InputProblem;
@@ -517,17 +541,23 @@ declare class LongDistancePairSolver extends BaseSolver {
517
541
  };
518
542
  }
519
543
 
544
+ /**
545
+ * Defines the input structure for the TraceCleanupSolver.
546
+ */
520
547
  interface TraceCleanupSolverInput {
521
548
  inputProblem: InputProblem;
522
549
  allTraces: SolvedTracePath[];
523
- targetTraceIds: Set<string>;
524
550
  allLabelPlacements: NetLabelPlacement[];
525
551
  mergedLabelNetIdMap: Record<string, Set<string>>;
526
552
  paddingBuffer: number;
527
553
  }
528
554
  /**
529
- * Cleans up traces by minimizing turns and balancing L-shapes to improve
530
- * the overall aesthetics and readability of the schematic.
555
+ * The TraceCleanupSolver is responsible for improving the aesthetics and readability of schematic traces.
556
+ * It operates in a multi-step pipeline:
557
+ * 1. **Untangling Traces**: It first attempts to untangle any overlapping or highly convoluted traces using a sub-solver.
558
+ * 2. **Minimizing Turns**: After untangling, it iterates through each trace to minimize the number of turns, simplifying their paths.
559
+ * 3. **Balancing L-Shapes**: Finally, it balances L-shaped trace segments to create more visually appealing and consistent layouts.
560
+ * The solver processes traces one by one, applying these cleanup steps sequentially to refine the overall trace layout.
531
561
  */
532
562
  declare class TraceCleanupSolver extends BaseSolver {
533
563
  private input;
@@ -536,8 +566,13 @@ declare class TraceCleanupSolver extends BaseSolver {
536
566
  private tracesMap;
537
567
  private pipelineStep;
538
568
  private activeTraceId;
569
+ activeSubSolver: BaseSolver | null;
539
570
  constructor(solverInput: TraceCleanupSolverInput);
540
571
  _step(): void;
572
+ private _runUntangleTracesStep;
573
+ private _runMinimizeTurnsStep;
574
+ private _runBalanceLShapesStep;
575
+ private _processTrace;
541
576
  getOutput(): {
542
577
  traces: SolvedTracePath[];
543
578
  };