@tscircuit/schematic-trace-solver 0.0.7 → 0.0.9

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 (19) hide show
  1. package/dist/index.d.ts +5 -5
  2. package/dist/index.js +488 -344
  3. package/lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver.ts +29 -0
  4. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/SingleNetLabelPlacementSolver.ts +199 -465
  5. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/SingleNetLabelPlacementSolver_visualize.ts +89 -0
  6. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/anchors.ts +11 -0
  7. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/collisions.ts +45 -0
  8. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/geometry.ts +48 -0
  9. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/host.ts +64 -0
  10. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/solvePortOnlyPin.ts +177 -0
  11. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceLinesSolver.ts +24 -3
  12. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver/SchematicTraceSingleLineSolver.ts +38 -3
  13. package/package.json +1 -1
  14. package/site/SchematicTraceLinesSolver/SchematicTraceLinesSolver01.page.tsx +122 -0
  15. package/site/components/GenericSolverDebugger.tsx +16 -0
  16. package/site/examples/example01-basic.page.tsx +2 -2
  17. package/site/examples/example04-single-symbol.page.tsx +46 -0
  18. package/tests/solvers/SchematicTraceSingleLineSolver/SchematicTraceSingleLineSolver_repro01.json +88 -0
  19. package/tests/solvers/SchematicTraceSingleLineSolver/SchematicTraceSingleLineSolver_repro01.test.ts +16 -0
@@ -60,6 +60,8 @@ export class NetLabelPlacementSolver extends BaseSolver {
60
60
  declare activeSubSolver: SingleNetLabelPlacementSolver | null
61
61
 
62
62
  netLabelPlacements: Array<NetLabelPlacement> = []
63
+ currentGroup: OverlappingSameNetTraceGroup | null = null
64
+ triedAnyOrientationFallbackForCurrentGroup = false
63
65
 
64
66
  constructor(params: {
65
67
  inputProblem: InputProblem
@@ -209,10 +211,34 @@ export class NetLabelPlacementSolver extends BaseSolver {
209
211
  if (this.activeSubSolver?.solved) {
210
212
  this.netLabelPlacements.push(this.activeSubSolver.netLabelPlacement!)
211
213
  this.activeSubSolver = null
214
+ this.currentGroup = null
215
+ this.triedAnyOrientationFallbackForCurrentGroup = false
212
216
  return
213
217
  }
214
218
 
215
219
  if (this.activeSubSolver?.failed) {
220
+ // Retry once with all orientations as a fallback before failing
221
+ const fullOrients: FacingDirection[] = ["x+", "x-", "y+", "y-"]
222
+ const currOrients = this.activeSubSolver.availableOrientations
223
+ const isAlreadyFull =
224
+ currOrients.length === 4 &&
225
+ fullOrients.every((o) => currOrients.includes(o))
226
+
227
+ if (
228
+ !this.triedAnyOrientationFallbackForCurrentGroup &&
229
+ !isAlreadyFull &&
230
+ this.currentGroup
231
+ ) {
232
+ this.triedAnyOrientationFallbackForCurrentGroup = true
233
+ this.activeSubSolver = new SingleNetLabelPlacementSolver({
234
+ inputProblem: this.inputProblem,
235
+ inputTraceMap: this.inputTraceMap,
236
+ overlappingSameNetTraceGroup: this.currentGroup,
237
+ availableOrientations: fullOrients,
238
+ })
239
+ return
240
+ }
241
+
216
242
  this.failed = true
217
243
  this.error = this.activeSubSolver.error
218
244
  return
@@ -235,6 +261,9 @@ export class NetLabelPlacementSolver extends BaseSolver {
235
261
  nextOverlappingSameNetTraceGroup.netId ??
236
262
  nextOverlappingSameNetTraceGroup.globalConnNetId
237
263
 
264
+ this.currentGroup = nextOverlappingSameNetTraceGroup
265
+ this.triedAnyOrientationFallbackForCurrentGroup = false
266
+
238
267
  this.activeSubSolver = new SingleNetLabelPlacementSolver({
239
268
  inputProblem: this.inputProblem,
240
269
  inputTraceMap: this.inputTraceMap,