@tscircuit/schematic-trace-solver 0.0.41 → 0.0.43
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 -8
- package/dist/index.js +1067 -748
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +48 -16
- package/lib/solvers/TraceCleanupSolver/TraceCleanupSolver.ts +133 -0
- package/lib/solvers/TraceCleanupSolver/balanceZShapes.ts +200 -0
- package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → TraceCleanupSolver}/hasCollisions.ts +1 -1
- package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → TraceCleanupSolver}/hasCollisionsWithLabels.ts +1 -1
- package/lib/solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts +76 -0
- package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → TraceCleanupSolver}/simplifyPath.ts +1 -1
- package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → TraceCleanupSolver}/turnMinimization.ts +0 -2
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +74 -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/tryFourPointDetour.ts +104 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/trySnipAndReconnect.ts +24 -154
- package/package.json +1 -1
- package/site/examples/example26.page.tsx +4 -0
- 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/assets/example26.json +1206 -0
- package/tests/examples/__snapshots__/example02.snap.svg +1 -1
- package/tests/examples/__snapshots__/example09.snap.svg +34 -34
- package/tests/examples/__snapshots__/example11.snap.svg +13 -13
- package/tests/examples/__snapshots__/example12.snap.svg +3 -3
- package/tests/examples/__snapshots__/example13.snap.svg +12 -12
- package/tests/examples/__snapshots__/example16.snap.svg +4 -4
- package/tests/examples/__snapshots__/example19.snap.svg +9 -9
- package/tests/examples/__snapshots__/example28.snap.svg +3 -3
- package/tests/examples/__snapshots__/example29.snap.svg +1208 -0
- package/tests/examples/example29.test.ts +13 -0
- package/tests/solvers/TraceCleanupSolver/TraceCleanupSolver.test.ts +19 -0
- package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +119 -0
- 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/__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/lib/solvers/TraceLabelOverlapAvoidanceSolver/balanceLShapes.ts +0 -207
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/minimizeTurnsWithFilteredLabels.ts +0 -66
- /package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → TraceCleanupSolver}/countTurns.ts +0 -0
- /package/lib/solvers/{TraceLabelOverlapAvoidanceSolver → 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,100 @@ 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 SingleOverlapSolverInput {
|
|
410
|
+
trace: SolvedTracePath;
|
|
411
|
+
label: NetLabelPlacement;
|
|
412
|
+
problem: InputProblem;
|
|
413
|
+
paddingBuffer: number;
|
|
414
|
+
detourCount: number;
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* This solver attempts to find a valid rerouting for a single trace that is
|
|
418
|
+
* overlapping with a net label. It tries various candidate paths until it
|
|
419
|
+
* finds one that does not introduce new collisions.
|
|
420
|
+
*/
|
|
421
|
+
declare class SingleOverlapSolver extends BaseSolver {
|
|
422
|
+
queuedCandidatePaths: Point[][];
|
|
423
|
+
solvedTracePath: Point[] | null;
|
|
424
|
+
initialTrace: SolvedTracePath;
|
|
425
|
+
problem: InputProblem;
|
|
426
|
+
obstacles: ReturnType<typeof getObstacleRects>;
|
|
427
|
+
label: NetLabelPlacement;
|
|
428
|
+
constructor(solverInput: SingleOverlapSolverInput);
|
|
429
|
+
_step(): void;
|
|
430
|
+
visualize(): GraphicsObject;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
interface OverlapCollectionSolverInput {
|
|
434
|
+
inputProblem: InputProblem;
|
|
435
|
+
traces: SolvedTracePath[];
|
|
436
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
437
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* This is an internal solver that manages the step-by-step process of avoiding
|
|
441
|
+
* multiple overlaps. It follows the pattern of SchematicTraceLinesSolver.
|
|
442
|
+
*/
|
|
443
|
+
declare class OverlapAvoidanceStepSolver extends BaseSolver {
|
|
444
|
+
inputProblem: InputProblem;
|
|
445
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
446
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
447
|
+
allTraces: SolvedTracePath[];
|
|
448
|
+
modifiedTraces: SolvedTracePath[];
|
|
396
449
|
private detourCountByLabel;
|
|
397
450
|
private readonly PADDING_BUFFER;
|
|
451
|
+
activeSubSolver: SingleOverlapSolver | null;
|
|
452
|
+
private overlapQueue;
|
|
453
|
+
private recentlyFailed;
|
|
454
|
+
constructor(solverInput: OverlapCollectionSolverInput);
|
|
455
|
+
_step(): void;
|
|
456
|
+
getOutput(): {
|
|
457
|
+
allTraces: SolvedTracePath[];
|
|
458
|
+
modifiedTraces: SolvedTracePath[];
|
|
459
|
+
};
|
|
460
|
+
visualize(): GraphicsObject;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
interface TraceLabelOverlapAvoidanceSolverInput {
|
|
464
|
+
inputProblem: InputProblem;
|
|
465
|
+
traces: SolvedTracePath[];
|
|
466
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* This solver is a pipeline that runs a series of sub-solvers to resolve
|
|
470
|
+
* trace-label overlaps and clean up the resulting traces.
|
|
471
|
+
*/
|
|
472
|
+
declare class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
473
|
+
inputProblem: InputProblem;
|
|
474
|
+
traces: SolvedTracePath[];
|
|
475
|
+
netLabelPlacements: NetLabelPlacement[];
|
|
476
|
+
labelMergingSolver?: MergedNetLabelObstacleSolver;
|
|
477
|
+
overlapAvoidanceSolver?: OverlapAvoidanceStepSolver;
|
|
478
|
+
pipelineStepIndex: number;
|
|
398
479
|
constructor(solverInput: TraceLabelOverlapAvoidanceSolverInput);
|
|
399
480
|
_step(): void;
|
|
400
481
|
getOutput(): {
|
|
@@ -433,6 +514,33 @@ declare class LongDistancePairSolver extends BaseSolver {
|
|
|
433
514
|
};
|
|
434
515
|
}
|
|
435
516
|
|
|
517
|
+
interface TraceCleanupSolverInput {
|
|
518
|
+
inputProblem: InputProblem;
|
|
519
|
+
allTraces: SolvedTracePath[];
|
|
520
|
+
targetTraceIds: Set<string>;
|
|
521
|
+
allLabelPlacements: NetLabelPlacement[];
|
|
522
|
+
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
523
|
+
paddingBuffer: number;
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Cleans up traces by minimizing turns and balancing L-shapes to improve
|
|
527
|
+
* the overall aesthetics and readability of the schematic.
|
|
528
|
+
*/
|
|
529
|
+
declare class TraceCleanupSolver extends BaseSolver {
|
|
530
|
+
private input;
|
|
531
|
+
private outputTraces;
|
|
532
|
+
private traceIdQueue;
|
|
533
|
+
private tracesMap;
|
|
534
|
+
private pipelineStep;
|
|
535
|
+
private activeTraceId;
|
|
536
|
+
constructor(solverInput: TraceCleanupSolverInput);
|
|
537
|
+
_step(): void;
|
|
538
|
+
getOutput(): {
|
|
539
|
+
traces: SolvedTracePath[];
|
|
540
|
+
};
|
|
541
|
+
visualize(): GraphicsObject;
|
|
542
|
+
}
|
|
543
|
+
|
|
436
544
|
/**
|
|
437
545
|
* Pipeline solver that runs a series of solvers to find the best schematic layout.
|
|
438
546
|
* Coordinates the entire layout process from chip partitioning through final packing.
|
|
@@ -455,13 +563,15 @@ declare class SchematicTracePipelineSolver extends BaseSolver {
|
|
|
455
563
|
longDistancePairSolver?: LongDistancePairSolver;
|
|
456
564
|
traceOverlapShiftSolver?: TraceOverlapShiftSolver;
|
|
457
565
|
netLabelPlacementSolver?: NetLabelPlacementSolver;
|
|
566
|
+
labelMergingSolver?: MergedNetLabelObstacleSolver;
|
|
458
567
|
traceLabelOverlapAvoidanceSolver?: TraceLabelOverlapAvoidanceSolver;
|
|
568
|
+
traceCleanupSolver?: TraceCleanupSolver;
|
|
459
569
|
startTimeOfPhase: Record<string, number>;
|
|
460
570
|
endTimeOfPhase: Record<string, number>;
|
|
461
571
|
timeSpentOnPhase: Record<string, number>;
|
|
462
572
|
firstIterationOfPhase: Record<string, number>;
|
|
463
573
|
inputProblem: InputProblem;
|
|
464
|
-
pipelineDef: (PipelineStep<typeof MspConnectionPairSolver> | PipelineStep<typeof SchematicTraceLinesSolver> | PipelineStep<typeof LongDistancePairSolver> | PipelineStep<typeof TraceOverlapShiftSolver> | PipelineStep<typeof NetLabelPlacementSolver> | PipelineStep<typeof TraceLabelOverlapAvoidanceSolver>)[];
|
|
574
|
+
pipelineDef: (PipelineStep<typeof MspConnectionPairSolver> | PipelineStep<typeof SchematicTraceLinesSolver> | PipelineStep<typeof LongDistancePairSolver> | PipelineStep<typeof TraceOverlapShiftSolver> | PipelineStep<typeof NetLabelPlacementSolver> | PipelineStep<typeof TraceLabelOverlapAvoidanceSolver> | PipelineStep<typeof TraceCleanupSolver>)[];
|
|
465
575
|
constructor(inputProblem: InputProblem);
|
|
466
576
|
getConstructorParams(): ConstructorParameters<typeof SchematicTracePipelineSolver>[0];
|
|
467
577
|
currentPipelineStepIndex: number;
|