@tscircuit/schematic-trace-solver 0.0.41 → 0.0.42
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 +118 -7
- package/dist/index.js +760 -432
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +30 -17
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +94 -192
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/rerouteCollidingTrace.ts +13 -24
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/LabelMergingSolver.ts +205 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +144 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/SingleOverlapSolver/SingleOverlapSolver.ts +117 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/TraceCleanupSolver/TraceCleanupSolver.ts +132 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{balanceLShapes.ts → sub-solvers/TraceCleanupSolver/balanceLShapes.ts} +12 -10
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{hasCollisions.ts → sub-solvers/TraceCleanupSolver/hasCollisions.ts} +1 -1
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{hasCollisionsWithLabels.ts → sub-solvers/TraceCleanupSolver/hasCollisionsWithLabels.ts} +1 -1
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{minimizeTurnsWithFilteredLabels.ts → sub-solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts} +6 -6
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{simplifyPath.ts → sub-solvers/TraceCleanupSolver/simplifyPath.ts} +1 -1
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{turnMinimization.ts → sub-solvers/TraceCleanupSolver/turnMinimization.ts} +0 -2
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/tryFourPointDetour.ts +104 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/trySnipAndReconnect.ts +24 -154
- package/package.json +1 -1
- package/tests/assets/1.input.json +379 -0
- package/tests/assets/2.input.json +330 -0
- package/tests/assets/3.input.json +388 -0
- package/tests/assets/MergedNetLabelObstacles.test.input.json +154 -0
- package/tests/assets/OverlapAvoidanceStepSolver.test.input.json +682 -0
- package/tests/assets/SingleOverlapSolver.test.input.json +170 -0
- package/tests/assets/TraceCleanupSolver.test.input.json +216 -0
- package/tests/assets/TraceLabelOverlapAvoidanceSolver.test.input.json +424 -0
- package/tests/examples/__snapshots__/example25.snap.svg +3 -3
- package/tests/examples/__snapshots__/example26.snap.svg +3 -3
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.test.ts +18 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +243 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView01.snap.svg +223 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView02.snap.svg +205 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView03.snap.svg +184 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView01.test.ts +29 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView02.test.ts +27 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView03.test.ts +39 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/MergedNetLabelObstacles.test.ts +14 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/OverlapAvoidanceStepSolver.test.ts +20 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/SingleOverlapSolver.test.ts +10 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/TraceCleanupSolver.test.ts +19 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +140 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +216 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +125 -0
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/TraceCleanupSolver.snap.svg +119 -0
- /package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{countTurns.ts → sub-solvers/TraceCleanupSolver/countTurns.ts} +0 -0
- /package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{tryConnectPoints.ts → sub-solvers/TraceCleanupSolver/tryConnectPoints.ts} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -129,6 +129,7 @@ type ChipWithBounds = {
|
|
|
129
129
|
maxX: number;
|
|
130
130
|
maxY: number;
|
|
131
131
|
};
|
|
132
|
+
declare const getObstacleRects: (problem: InputProblem) => ChipWithBounds[];
|
|
132
133
|
|
|
133
134
|
declare class SchematicTraceSingleLineSolver2 extends BaseSolver {
|
|
134
135
|
pins: MspConnectionPair["pins"];
|
|
@@ -381,20 +382,128 @@ declare class NetLabelPlacementSolver extends BaseSolver {
|
|
|
381
382
|
visualize(): GraphicsObject;
|
|
382
383
|
}
|
|
383
384
|
|
|
384
|
-
interface
|
|
385
|
+
interface LabelMergingSolverInput {
|
|
386
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
385
387
|
inputProblem: InputProblem;
|
|
386
388
|
traces: SolvedTracePath[];
|
|
389
|
+
}
|
|
390
|
+
interface LabelMergingSolverOutput {
|
|
387
391
|
netLabelPlacements: NetLabelPlacement[];
|
|
392
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
388
393
|
}
|
|
389
|
-
|
|
390
|
-
|
|
394
|
+
/**
|
|
395
|
+
* Merges multiple net labels into a single, larger label if they are on the
|
|
396
|
+
* same side of the same chip, reducing schematic clutter.
|
|
397
|
+
*/
|
|
398
|
+
declare class MergedNetLabelObstacleSolver extends BaseSolver {
|
|
399
|
+
private input;
|
|
400
|
+
private output;
|
|
401
|
+
private inputProblem;
|
|
391
402
|
private traces;
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
403
|
+
constructor(solverInput: LabelMergingSolverInput);
|
|
404
|
+
_step(): void;
|
|
405
|
+
getOutput(): LabelMergingSolverOutput;
|
|
406
|
+
visualize(): GraphicsObject;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
interface TraceCleanupSolverInput {
|
|
410
|
+
inputProblem: InputProblem;
|
|
411
|
+
allTraces: SolvedTracePath[];
|
|
412
|
+
targetTraceIds: Set<string>;
|
|
413
|
+
allLabelPlacements: NetLabelPlacement[];
|
|
414
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
415
|
+
paddingBuffer: number;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Cleans up traces by minimizing turns and balancing L-shapes to improve
|
|
419
|
+
* the overall aesthetics and readability of the schematic.
|
|
420
|
+
*/
|
|
421
|
+
declare class TraceCleanupSolver extends BaseSolver {
|
|
422
|
+
private input;
|
|
423
|
+
private outputTraces;
|
|
424
|
+
private pipelineStepIndex;
|
|
425
|
+
private tracesToProcess;
|
|
426
|
+
private minimizedTraces;
|
|
427
|
+
private balancedTraces;
|
|
428
|
+
constructor(solverInput: TraceCleanupSolverInput);
|
|
429
|
+
_step(): void;
|
|
430
|
+
getOutput(): {
|
|
431
|
+
traces: SolvedTracePath[];
|
|
432
|
+
};
|
|
433
|
+
visualize(): GraphicsObject;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
interface SingleOverlapSolverInput {
|
|
437
|
+
trace: SolvedTracePath;
|
|
438
|
+
label: NetLabelPlacement;
|
|
439
|
+
problem: InputProblem;
|
|
440
|
+
paddingBuffer: number;
|
|
441
|
+
detourCount: number;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* This solver attempts to find a valid rerouting for a single trace that is
|
|
445
|
+
* overlapping with a net label. It tries various candidate paths until it
|
|
446
|
+
* finds one that does not introduce new collisions.
|
|
447
|
+
*/
|
|
448
|
+
declare class SingleOverlapSolver extends BaseSolver {
|
|
449
|
+
queuedCandidatePaths: Point[][];
|
|
450
|
+
solvedTracePath: Point[] | null;
|
|
451
|
+
initialTrace: SolvedTracePath;
|
|
452
|
+
problem: InputProblem;
|
|
453
|
+
obstacles: ReturnType<typeof getObstacleRects>;
|
|
454
|
+
label: NetLabelPlacement;
|
|
455
|
+
constructor(solverInput: SingleOverlapSolverInput);
|
|
456
|
+
_step(): void;
|
|
457
|
+
visualize(): GraphicsObject;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
interface OverlapCollectionSolverInput {
|
|
461
|
+
inputProblem: InputProblem;
|
|
462
|
+
traces: SolvedTracePath[];
|
|
463
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
464
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* This is an internal solver that manages the step-by-step process of avoiding
|
|
468
|
+
* multiple overlaps. It follows the pattern of SchematicTraceLinesSolver.
|
|
469
|
+
*/
|
|
470
|
+
declare class OverlapAvoidanceStepSolver extends BaseSolver {
|
|
471
|
+
inputProblem: InputProblem;
|
|
472
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
473
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
474
|
+
allTraces: SolvedTracePath[];
|
|
475
|
+
modifiedTraces: SolvedTracePath[];
|
|
396
476
|
private detourCountByLabel;
|
|
397
477
|
private readonly PADDING_BUFFER;
|
|
478
|
+
activeSubSolver: SingleOverlapSolver | null;
|
|
479
|
+
private overlapQueue;
|
|
480
|
+
private recentlyFailed;
|
|
481
|
+
constructor(solverInput: OverlapCollectionSolverInput);
|
|
482
|
+
_step(): void;
|
|
483
|
+
getOutput(): {
|
|
484
|
+
allTraces: SolvedTracePath[];
|
|
485
|
+
modifiedTraces: SolvedTracePath[];
|
|
486
|
+
};
|
|
487
|
+
visualize(): GraphicsObject;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
interface TraceLabelOverlapAvoidanceSolverInput {
|
|
491
|
+
inputProblem: InputProblem;
|
|
492
|
+
traces: SolvedTracePath[];
|
|
493
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* This solver is a pipeline that runs a series of sub-solvers to resolve
|
|
497
|
+
* trace-label overlaps and clean up the resulting traces.
|
|
498
|
+
*/
|
|
499
|
+
declare class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
500
|
+
inputProblem: InputProblem;
|
|
501
|
+
traces: SolvedTracePath[];
|
|
502
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
503
|
+
labelMergingSolver?: MergedNetLabelObstacleSolver;
|
|
504
|
+
overlapAvoidanceSolver?: OverlapAvoidanceStepSolver;
|
|
505
|
+
traceCleanupSolver?: TraceCleanupSolver;
|
|
506
|
+
pipelineStepIndex: number;
|
|
398
507
|
constructor(solverInput: TraceLabelOverlapAvoidanceSolverInput);
|
|
399
508
|
_step(): void;
|
|
400
509
|
getOutput(): {
|
|
@@ -455,7 +564,9 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
455
564
|
longDistancePairSolver?: LongDistancePairSolver;
|
|
456
565
|
traceOverlapShiftSolver?: TraceOverlapShiftSolver;
|
|
457
566
|
netLabelPlacementSolver?: NetLabelPlacementSolver;
|
|
567
|
+
labelMergingSolver?: MergedNetLabelObstacleSolver;
|
|
458
568
|
traceLabelOverlapAvoidanceSolver?: TraceLabelOverlapAvoidanceSolver;
|
|
569
|
+
traceCleanupSolver?: TraceCleanupSolver;
|
|
459
570
|
startTimeOfPhase: Record<string, number>;
|
|
460
571
|
endTimeOfPhase: Record<string, number>;
|
|
461
572
|
timeSpentOnPhase: Record<string, number>;
|