@tscircuit/schematic-trace-solver 0.0.173 → 0.0.175

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 (43) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +200 -74
  3. package/lib/solvers/AvailableNetOrientationSolver/AvailableNetOrientationSolver.ts +12 -1
  4. package/lib/solvers/InlineNetLabelSolver/InlineNetLabelSolver.ts +16 -1
  5. package/lib/solvers/InlineNetLabelSolver/restoreReroutesAroundSupersededLabels.ts +174 -0
  6. package/lib/solvers/NetLabelToTraceSolver/NetLabelToTraceSolver.ts +2 -30
  7. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +9 -0
  8. package/lib/utils/doesPathCoincideWithTraces.ts +17 -4
  9. package/lib/utils/pathIntersectsRenderedLabel.ts +33 -0
  10. package/package.json +1 -1
  11. package/site/bug-reports/bug-report-20260831T133233Z.page.tsx +4 -0
  12. package/site/bug-reports/bug-report-20260901T055358Z.page.tsx +4 -0
  13. package/site/bug-reports/bug-report-20260901T064117Z.page.tsx +4 -0
  14. package/site/bug-reports/bug-report-20260901T134241Z.page.tsx +4 -0
  15. package/tests/bug-reports/bug-report-20260721T221026Z/__snapshots__/bug-report-20260721T221026Z.snap.svg +18 -18
  16. package/tests/bug-reports/bug-report-20260831T133233Z/__snapshots__/bug-report-20260831T133233Z.snap.svg +85 -0
  17. package/tests/bug-reports/bug-report-20260831T133233Z/bug-report-20260831T133233Z.json +172 -0
  18. package/tests/bug-reports/bug-report-20260831T133233Z/bug-report-20260831T133233Z.test.ts +25 -0
  19. package/tests/bug-reports/bug-report-20260901T055358Z/__snapshots__/bug-report-20260901T055358Z.snap.svg +676 -0
  20. package/tests/bug-reports/bug-report-20260901T055358Z/bug-report-20260901T055358Z.json +2467 -0
  21. package/tests/bug-reports/bug-report-20260901T055358Z/bug-report-20260901T055358Z.test.ts +59 -0
  22. package/tests/bug-reports/bug-report-20260901T064117Z/__snapshots__/bug-report-20260901T064117Z.snap.svg +134 -0
  23. package/tests/bug-reports/bug-report-20260901T064117Z/bug-report-20260901T064117Z.json +215 -0
  24. package/tests/bug-reports/bug-report-20260901T064117Z/bug-report-20260901T064117Z.test.ts +12 -0
  25. package/tests/bug-reports/bug-report-20260901T134241Z/__snapshots__/bug-report-20260901T134241Z.snap.svg +115 -0
  26. package/tests/bug-reports/bug-report-20260901T134241Z/bug-report-20260901T134241Z.json +359 -0
  27. package/tests/bug-reports/bug-report-20260901T134241Z/bug-report-20260901T134241Z.test.ts +12 -0
  28. package/tests/repros/__snapshots__/repro-bq40z60-current-sense.snap.svg +94 -0
  29. package/tests/repros/__snapshots__/repro-pmp11282-isolated-dcdc.snap.svg +10 -10
  30. package/tests/repros/__snapshots__/repro-ti-power-output-section.snap.svg +87 -87
  31. package/tests/repros/__snapshots__/repro-tida-01389-hbridge.snap.svg +47 -153
  32. package/tests/repros/__snapshots__/repro-tida010076-page02.snap.svg +1625 -1625
  33. package/tests/repros/__snapshots__/repro-trellis-core-gnd-net-label-overlap.snap.svg +134 -0
  34. package/tests/repros/__snapshots__/repro-wireless-mouse-charger-section.snap.svg +164 -0
  35. package/tests/repros/assets/repro-bq40z60-current-sense.input.json +158 -0
  36. package/tests/repros/assets/repro-tida-01389-hbridge.input.json +67 -657
  37. package/tests/repros/assets/repro-trellis-core-gnd-net-label-overlap.input.json +178 -0
  38. package/tests/repros/assets/repro-wireless-mouse-charger-section.input.json +591 -0
  39. package/tests/repros/repro-bq40z60-current-sense.test.ts +18 -0
  40. package/tests/repros/repro-tida-01389-hbridge.test.ts +27 -6
  41. package/tests/repros/repro-trellis-core-gnd-net-label-overlap.test.ts +73 -0
  42. package/tests/repros/repro-wireless-mouse-charger-section.test.ts +16 -0
  43. package/tests/solvers/InlineNetLabelSolver/restore-reroutes-around-superseded-labels.test.ts +186 -0
@@ -0,0 +1,59 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "./bug-report-20260901T055358Z.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("bug-report-20260901T055358Z", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ const groundLabelConnectorId = "available-net-orientation-19-GND"
12
+ const preAlignmentOutput =
13
+ solver.preAlignmentNetLabelTraceCollisionSolver!.getOutput()
14
+ const groundLabelConnector = preAlignmentOutput.traces.find(
15
+ (trace) => trace.mspPairId === groundLabelConnectorId,
16
+ )
17
+ const cc2Label = preAlignmentOutput.netLabelPlacements.find(
18
+ (label) => label.netId === "CC2",
19
+ )
20
+ const groundReroute = preAlignmentOutput.completedReroutes.find(
21
+ (reroute) => reroute.initialTrace.mspPairId === groundLabelConnectorId,
22
+ )
23
+
24
+ // The anchored CC2 fallback temporarily forces a detour. Once inline
25
+ // conversion succeeds and supersedes that fallback, its exact reroute is
26
+ // safely unwound instead of changing CC2's orientation.
27
+ expect(cc2Label?.orientation).toBe("y+")
28
+ expect(groundReroute).toBeDefined()
29
+ expect(groundLabelConnector).toBeDefined()
30
+ expect(groundLabelConnector!.tracePath.length).toBeGreaterThan(2)
31
+
32
+ const inlineOutput = solver.inlineNetLabelSolver!.getOutput()
33
+ const restoredGroundLabelConnector = inlineOutput.traces.find(
34
+ (trace) => trace.mspPairId === groundLabelConnectorId,
35
+ )
36
+ expect(
37
+ inlineOutput.netLabelPlacements.some((label) => label.netId === "CC2"),
38
+ ).toBe(false)
39
+ expect(
40
+ inlineOutput.inlineNetLabelPlacements.some(
41
+ (label) => label.netId === "CC2",
42
+ ),
43
+ ).toBe(true)
44
+ expect(restoredGroundLabelConnector?.tracePath).toEqual(
45
+ groundReroute!.initialTrace.tracePath,
46
+ )
47
+ expect(
48
+ solver.inlineNetLabelSolver!.stats.restoredSupersededLabelRerouteCount,
49
+ ).toBe(1)
50
+
51
+ const finalGroundLabelConnector = solver
52
+ .netLabelToTraceSolver!.getOutput()
53
+ .traces.find((trace) => trace.mspPairId === groundLabelConnectorId)
54
+ expect(finalGroundLabelConnector?.tracePath).toEqual(
55
+ restoredGroundLabelConnector?.tracePath,
56
+ )
57
+
58
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
59
+ })
@@ -0,0 +1,134 @@
1
+ <svg width="1200" height="2016" viewBox="0 0 1200 2016" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on top and Circuit JSON schematic on the bottom">
2
+ <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="1.9,-0.5 8,5.38" data-type="line" data-label="" points="222.1917808219178,424.5445205479452 514.6575342465753,142.6267123287671" fill="none" stroke="hsl(211, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.3 7.25,-0.6200000000000001" data-type="line" data-label="" points="222.1917808219178,414.95547945205476 478.69863013698625,430.29794520547944" fill="none" stroke="hsl(88, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 1.9,0.30000000000000004" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 222.1917808219178,386.18835616438355" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 1.9,0.5" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 222.1917808219178,376.5993150684931" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 9,-1.38" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,-0.09999999999999998 8,4.62" data-type="line" data-label="" points="222.1917808219178,405.36643835616434 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 1.9,0.5" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 222.1917808219178,376.5993150684931" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 9,-1.38" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.30000000000000004 8,4.62" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 7.25,-1.38" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 478.69863013698625,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 9,-1.38" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 8,4.62" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.25,-1.38 9,-1.38" data-type="line" data-label="" points="478.69863013698625,466.736301369863 562.6027397260274,466.736301369863" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="7.25,-1.38 8,4.62" data-type="line" data-label="" points="478.69863013698625,466.736301369863 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="9,-1.38 8,4.62" data-type="line" data-label="" points="562.6027397260274,466.736301369863 514.6575342465753,179.06506849315065" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.10000000000000009 9,-0.6200000000000001" data-type="line" data-label="" points="222.1917808219178,395.777397260274 562.6027397260274,430.29794520547944" fill="none" stroke="hsl(88, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.9,0.5 2.421,0.5 2.421,0.30000000000000004 1.9,0.30000000000000004" data-type="line" data-label="" points="222.1917808219178,376.5993150684931 247.17123287671234,376.5993150684931 247.17123287671234,386.18835616438355 222.1917808219178,386.18835616438355" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="7.25,-1.38 7.25,-1.58 9,-1.58 9,-1.38" data-type="line" data-label="" points="478.69863013698625,466.736301369863 478.69863013698625,476.3253424657534 562.6027397260274,476.3253424657534 562.6027397260274,466.736301369863" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.30000000000000004 2.421,0.3000000000000001 2.421,-0.09999999999999992 1.9,-0.09999999999999998" data-type="line" data-label="" points="222.1917808219178,386.18835616438355 247.17123287671234,386.18835616438355 247.17123287671234,405.36643835616434 222.1917808219178,405.36643835616434" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="8,5.38 8,5.481 7.5489999999999995,5.481" data-type="line" data-label="" points="514.6575342465753,142.6267123287671 514.6575342465753,137.78424657534242 493.0342465753424,137.78424657534242" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.9,0.10000000000000009 3.2309999999999994,0.10000000000000009 3.2309999999999994,0.15100000000000008" data-type="line" data-label="" points="222.1917808219178,395.777397260274 286.0068493150685,395.777397260274 286.0068493150685,393.3321917808219" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40" y="304.68150684931504" width="182.1917808219178" height="191.78082191780823" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="7.3825" data-y="-1" x="457.12328767123296" y="430.29794520547944" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="9.1325" data-y="-1" x="541.027397260274" y="430.29794520547944" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="8.1325" data-y="5" x="493.08219178082203" y="142.6267123287671" width="55.85616438356158" height="36.43835616438355" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="T113-S3" data-x="-1.08" data-y="-2.13" x="59.17808219178082" y="498.3801369863014" width="40.27397260273972" height="8.630136986301352" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="U3" data-x="-1.38" data-y="2.1149999999999998" x="56.30136986301369" y="293.17465753424653" width="17.26027397260276" height="11.986301369863043" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: P1V8
4
+ globalConnNetId: connectivity_net0" data-x="2.2009999999999996" data-y="-0.5" x="222.23972602739724" y="419.75" width="28.76712328767121" height="9.589041095890366" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: P1V8
5
+ globalConnNetId: connectivity_net0" data-x="7.249" data-y="5.481" x="464.2671232876712" y="132.98972602739724" width="28.76712328767121" height="9.589041095890366" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA2
6
+ globalConnNetId: connectivity_net1" data-x="2.1109999999999998" data-y="-0.3" x="222.23972602739727" y="410.1609589041095" width="20.13698630136986" height="9.589041095890423" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA2
7
+ globalConnNetId: connectivity_net1" data-x="7.25" data-y="-0.40900000000000014" x="441.3013698630137" y="410.1130136986301" width="74.79452054794513" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
8
+ globalConnNetId: connectivity_net2" data-x="2.421" data-y="-0.30999999999999994" x="235.66438356164386" y="405.3664383561644" width="23.013698630136957" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
9
+ globalConnNetId: connectivity_net2" data-x="7.25" data-y="-1.79" x="467.1917808219178" y="476.32534246575335" width="23.0136986301369" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: GND
10
+ globalConnNetId: connectivity_net2" data-x="8" data-y="4.409" x="503.1506849315068" y="179.1130136986301" width="23.013698630137014" height="20.13698630136986" fill="#00000066" stroke="#000000" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA1
11
+ globalConnNetId: connectivity_net3" data-x="3.2309999999999994" data-y="0.3610000000000001" x="248.60958904109592" y="373.19520547945206" width="74.79452054794518" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><rect data-type="rect" data-label="netId: Net_U3F_VRA1
12
+ globalConnNetId: connectivity_net3" data-x="9" data-y="-0.40900000000000014" x="525.2054794520548" y="410.1130136986301" width="74.79452054794513" height="20.13698630136986" fill="#ef444466" stroke="#ef4444" stroke-width="0.020857142857142855"/></g><g><circle data-type="point" data-label="AVCC
13
+ x+" data-x="1.9" data-y="-0.5" cx="222.1917808219178" cy="424.5445205479452" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VRA2
14
+ x+" data-x="1.9" data-y="-0.3" cx="222.1917808219178" cy="414.95547945205476" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="AGND
15
+ x+" data-x="1.9" data-y="-0.09999999999999998" cx="222.1917808219178" cy="405.36643835616434" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="VRA1
16
+ x+" data-x="1.9" data-y="0.10000000000000009" cx="222.1917808219178" cy="395.777397260274" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="FMINR
17
+ x+" data-x="1.9" data-y="0.30000000000000004" cx="222.1917808219178" cy="386.18835616438355" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="FMINL
18
+ x+" data-x="1.9" data-y="0.5" cx="222.1917808219178" cy="376.5993150684931" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
19
+ y+" data-x="7.25" data-y="-0.6200000000000001" cx="478.69863013698625" cy="430.29794520547944" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
20
+ y-" data-x="7.25" data-y="-1.38" cx="478.69863013698625" cy="466.736301369863" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
21
+ y+" data-x="9" data-y="-0.6200000000000001" cx="562.6027397260274" cy="430.29794520547944" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
22
+ y-" data-x="9" data-y="-1.38" cx="562.6027397260274" cy="466.736301369863" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="1
23
+ y+" data-x="8" data-y="5.38" cx="514.6575342465753" cy="142.6267123287671" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="2
24
+ y-" data-x="8" data-y="4.62" cx="514.6575342465753" cy="179.06506849315065" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
25
+ orientation: x+" data-x="1.9" data-y="-0.5" cx="222.1917808219178" cy="424.5445205479452" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
26
+ orientation: x-" data-x="7.5489999999999995" data-y="5.481" cx="493.0342465753424" cy="137.78424657534242" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
27
+ orientation: x+" data-x="1.9" data-y="-0.3" cx="222.1917808219178" cy="414.95547945205476" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
28
+ orientation: y+" data-x="7.25" data-y="-0.6200000000000001" cx="478.69863013698625" cy="430.29794520547944" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
29
+ orientation: y-" data-x="2.421" data-y="-0.09999999999999992" cx="247.17123287671234" cy="405.36643835616434" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
30
+ orientation: y-" data-x="7.25" data-y="-1.58" cx="478.69863013698625" cy="476.3253424657534" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
31
+ orientation: y-" data-x="8" data-y="4.62" cx="514.6575342465753" cy="179.06506849315065" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
32
+ orientation: y+" data-x="3.2309999999999994" data-y="0.15100000000000008" cx="286.0068493150685" cy="393.3321917808219" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
33
+ orientation: y+" data-x="9" data-y="-0.6200000000000001" cx="562.6027397260274" cy="430.29794520547944" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
34
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
35
+ const svg = e.currentTarget;
36
+ const rect = svg.getBoundingClientRect();
37
+ const x = e.clientX - rect.left;
38
+ const y = e.clientY - rect.top;
39
+ const crosshair = svg.getElementById('crosshair');
40
+ const h = svg.getElementById('crosshair-h');
41
+ const v = svg.getElementById('crosshair-v');
42
+ const coords = svg.getElementById('coordinates');
43
+
44
+ crosshair.style.display = 'block';
45
+ h.setAttribute('x1', '0');
46
+ h.setAttribute('x2', '640');
47
+ h.setAttribute('y1', y);
48
+ h.setAttribute('y2', y);
49
+ v.setAttribute('x1', x);
50
+ v.setAttribute('x2', x);
51
+ v.setAttribute('y1', '0');
52
+ v.setAttribute('y2', '640');
53
+
54
+ // Calculate real coordinates using inverse transformation
55
+ const matrix = {"a":47.945205479452056,"c":0,"e":131.0958904109589,"b":0,"d":-47.945205479452056,"f":400.57191780821915};
56
+ // Manually invert and apply the affine transform
57
+ // Since we only use translate and scale, we can directly compute:
58
+ // x' = (x - tx) / sx
59
+ // y' = (y - ty) / sy
60
+ const sx = matrix.a;
61
+ const sy = matrix.d;
62
+ const tx = matrix.e;
63
+ const ty = matrix.f;
64
+ const realPoint = {
65
+ x: (x - tx) / sx,
66
+ y: (y - ty) / sy // Flip y back since we used negative scale
67
+ }
68
+
69
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
70
+ coords.setAttribute('x', (x + 5).toString());
71
+ coords.setAttribute('y', (y - 5).toString());
72
+ });
73
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
74
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
75
+ });
76
+ ]]></script>
77
+ </g>
78
+ <g transform="translate(0, 1216)">
79
+ <style>
80
+ .boundary { fill: rgb(245, 241, 237); }
81
+ .schematic-boundary { fill: none; stroke: #fff; }
82
+ .component { fill: none; stroke: rgb(132, 0, 0); }
83
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
84
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
85
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
86
+ .pin-number { fill: rgb(169, 0, 0); }
87
+ .port-label { fill: rgb(0, 100, 100); }
88
+ .component-name { fill: rgb(0, 100, 100); }
89
+
90
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 408.88535393706 507.30598795590004 L 456.2436086808524 507.30598795590004 L 456.2436086808524 525.48574025678 L 408.88535393706 525.48574025678" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 507.30598795590004 L 456.2436086808524 507.30598795590004 L 456.2436086808524 525.48574025678 L 408.88535393706 525.48574025678" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 895.1937279855999 678.1956595841721 L 895.1937279855999 696.375411885052 L 1054.2665606183 696.375411885052 L 1054.2665606183 678.1956595841721" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 895.1937279855999 678.1956595841721 L 895.1937279855999 696.375411885052 L 1054.2665606183 696.375411885052 L 1054.2665606183 678.1956595841721" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 408.88535393706 525.48574025678 L 456.2436086808524 525.48574025678 L 456.2436086808524 561.84524485854 L 408.88535393706 561.84524485854" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 525.48574025678 L 456.2436086808524 525.48574025678 L 456.2436086808524 561.84524485854 L 408.88535393706 561.84524485854" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 963.3677991139 63.72003181442807 L 963.3677991139 54.53925690248366 L 922.3724576754155 54.53925690248366" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 963.3677991139 63.72003181442807 L 963.3677991139 54.53925690248366 L 922.3724576754155 54.53925690248366" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 408.88535393706 543.6654925576601 L 529.8716054994163 543.6654925576601 L 529.8716054994163 539.0296557209356" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="14.543801840704px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 408.88535393706 543.6654925576601 L 529.8716054994163 543.6654925576601 L 529.8716054994163 539.0296557209356" stroke="rgb(0, 150, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><circle cx="456.2436086808524" cy="525.48574025678" r="2.726962845132" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/><circle cx="408.88535393706" cy="525.48574025678" r="2.726962845132" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="99.8295648221" y="370.95784569930004" width="272.6962845132" height="363.5950460176" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="99.8295648221" y="370.95784569930004" width="272.6962845132" height="363.5950460176" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="598.2047494603" x2="407.067378706972" y2="598.2047494603" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="408.88535393706" cy="598.2047494603" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="407.067378706972" y="596.386774230212" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="596.386774230212" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="598.2047494603" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">AVCC</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="580.0249971594201" x2="407.067378706972" y2="580.0249971594201" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="408.88535393706" cy="580.0249971594201" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="407.067378706972" y="578.2070219293321" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="578.2070219293321" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="580.0249971594201" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">VRA2</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="561.84524485854" x2="408.88535393706" y2="561.84524485854" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="407.067378706972" y="560.027269628452" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="560.027269628452" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="561.84524485854" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">AGND</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="543.6654925576601" x2="408.88535393706" y2="543.6654925576601" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><rect x="407.067378706972" y="541.8475173275721" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="541.8475173275721" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="543.6654925576601" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">VRA1</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="525.48574025678" x2="408.88535393706" y2="525.48574025678" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><rect x="407.067378706972" y="523.667765026692" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="523.667765026692" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="525.48574025678" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">FMINR</text><line class="component-pin sch-component-pin sch-port-line" x1="372.5258493353" y1="507.30598795590004" x2="408.88535393706" y2="507.30598795590004" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><rect x="407.067378706972" y="505.48801272581204" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="390.70560163617995" y="505.48801272581204" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform=""></text><text class="pin-number sch-pin-label" x="363.43597318486" y="507.30598795590004" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="13.63481422566px" transform="">FMINL</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component chip sch-component-body" x="854.28928530862" y="639.10919213728" width="105.89705715262596" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="854.28928530862" y="639.10919213728" width="105.89705715262596" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="895.1937279855999" y1="639.10919213728" x2="895.1937279855999" y2="610.930576070916" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="895.1937279855999" cy="609.112600840828" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="893.3757527555119" y="607.29462561074" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="893.375752755512" y="624.1108964890541" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 893.375752755512 624.1108964890541)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="895.1937279855999" y1="648.19906828772" x2="895.1937279855999" y2="678.1956595841721" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><rect x="893.3757527555119" y="676.3776843540841" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="893.375752755512" y="663.197363935946" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 893.375752755512 663.197363935946)">2</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component chip sch-component-body" x="1013.3621179413201" y="639.10919213728" width="105.89705715262585" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="1013.3621179413201" y="639.10919213728" width="105.89705715262585" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="1054.2665606183" y1="639.10919213728" x2="1054.2665606183" y2="610.930576070916" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_2_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="1054.2665606183" cy="609.112600840828" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="1052.448585388212" y="607.29462561074" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.448585388212" y="624.1108964890541" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 1052.448585388212 624.1108964890541)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="1054.2665606183" y1="648.19906828772" x2="1054.2665606183" y2="678.1956595841721" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_2_1__stack1"><rect x="1052.448585388212" y="676.3776843540841" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.448585388212" y="663.197363935946" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 1052.448585388212 663.197363935946)">2</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_3__stack1"><rect class="component chip sch-component-body" x="922.4633564369201" y="93.71662311088005" width="105.89705715262585" height="9.089876150439977" stroke-width="1.817975230088px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="922.4633564369201" y="93.71662311088005" width="105.89705715262585" height="9.089876150439977" fill="transparent"/><line class="component-pin sch-component-pin sch-port-line" x1="963.3677991139" y1="93.71662311088005" x2="963.3677991139" y2="63.72003181442807" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_3_0__stack1"><rect x="961.549823883812" y="61.902056584340066" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="961.549823883812" y="78.71832746265403" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 961.549823883812 78.71832746265403)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="963.3677991139" y1="102.80649926132003" x2="963.3677991139" y2="130.98511532768407" stroke-width="1.817975230088px"/><g class="sch-port" data-schematic-port-id="source_port_3_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="963.3677991139" cy="132.803090557772" r="1.817975230088" stroke-width="1.817975230088px"/><rect x="961.549823883812" y="130.985115327684" width="3.635950460176" height="3.635950460176" opacity="0"/></g><text class="pin-number sch-pin-number" x="961.549823883812" y="117.80479490954605" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="13.63481422566px" transform="rotate(-90 961.549823883812 117.80479490954605)">2</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="408.88535393706" cy="598.2047494603" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="408.88535393706" cy="580.0249971594201" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="408.88535393706" cy="561.84524485854" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="408.88535393706" cy="543.6654925576601" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="408.88535393706" cy="525.48574025678" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="408.88535393706" cy="507.30598795590004" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="895.1937279855999" cy="609.112600840828" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="895.1937279855999" cy="678.1956595841721" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="1054.2665606183" cy="609.112600840828" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="1054.2665606183" cy="678.1956595841721" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_0__stack1"><circle cx="963.3677991139" cy="63.72003181442807" r="3.635950460176" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_3_1__stack1"><circle cx="963.3677991139" cy="132.803090557772" r="3.635950460176" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
91
+ M 408.88535393706,598.2047494603
92
+ L 413.7938870582976,589.1148733098601
93
+ L 466.32125137297356,589.1148733098601
94
+ L 466.32125137297356,607.29462561074
95
+ L 413.7938870582976,607.29462561074
96
+ Z
97
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="417.066242472456" y="598.2047494603" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XXXX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
98
+ M 922.3724576754155,54.53925690248366
99
+ L 917.4639245541779,63.629133052923656
100
+ L 864.936560239502,63.62913305292365
101
+ L 864.936560239502,45.44938075204365
102
+ L 917.4639245541779,45.44938075204366
103
+ Z
104
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="914.1915691400195" y="54.53925690248366" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XXXX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
105
+ M 408.88535393706,580.0249971594201
106
+ L 413.7938870582976,570.9351210089801
107
+ L 444.9661023368732,570.9351210089801
108
+ L 444.9661023368732,589.1148733098601
109
+ L 413.7938870582976,589.1148733098601
110
+ Z
111
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="417.066242472456" y="580.0249971594201" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
112
+ M 895.1937279855999,609.112600840828
113
+ L 886.10385183516,604.2040677195904
114
+ L 886.10385183516,573.0318524410148
115
+ L 904.2836041360399,573.0318524410148
116
+ L 904.2836041360399,604.2040677195904
117
+ Z
118
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="895.1937279855999" y="600.931712305432" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 895.1937279855999 600.931712305432)">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="445.3357573003244" y="561.84524485854" width="21.815702761055945" height="16.36177707079196" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="M 445.3357573003244 578.207021929332 L 467.15146006138036 578.207021929332" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="M 456.2436086808524 578.207021929332 L 456.2436086808524 561.84524485854" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="456.2436086808524" y="582.751960004552" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" x="884.285876605072" y="696.375411885052" width="21.815702761055945" height="16.36177707079196" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" d="M 884.285876605072 712.737188955844 L 906.1015793661279 712.737188955844" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" d="M 895.1937279855999 712.737188955844 L 895.1937279855999 696.375411885052" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" x="895.1937279855999" y="717.282127031064" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><rect class="component-overlay sch-component-overlay sch-net-label-overlay" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" x="952.459947733372" y="132.80309055777198" width="21.815702761055945" height="16.361777070792016" fill="transparent"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" d="M 952.459947733372 149.164867628564 L 974.275650494428 149.164867628564" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><path class="sch-net-label-symbol-path" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" d="M 963.3677991139 149.164867628564 L 963.3677991139 132.80309055777198" stroke="rgb(132, 0, 0)" fill="none" stroke-width="1.817975230088px" stroke-linecap="round"/><text class="sch-net-label-symbol-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" x="963.3677991139" y="153.70980570378399" fill="rgb(15, 15, 15)" font-family="sans-serif" text-anchor="middle" dominant-baseline="hanging" font-size="16.361777070791998px">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_7__stack1" d="
119
+ M 529.8716054994163,539.0296557209356
120
+ L 520.7817293489763,534.121122599698
121
+ L 520.7817293489763,502.9489073211224
122
+ L 538.9614816498563,502.9489073211224
123
+ L 538.9614816498563,534.121122599698
124
+ Z
125
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_7__stack1" x="529.8716054994163" y="530.8487671855396" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 529.8716054994163 530.8487671855396)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_8__stack1" d="
126
+ M 1054.2665606183,609.112600840828
127
+ L 1045.17668446786,604.2040677195904
128
+ L 1045.17668446786,573.0318524410148
129
+ L 1063.35643676874,573.0318524410148
130
+ L 1063.35643676874,604.2040677195904
131
+ Z
132
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.817975230088px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_8__stack1" x="1054.2665606183" y="600.931712305432" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="16.361777070791998px" transform="rotate(-90 1054.2665606183 600.931712305432)">XX</text><text class="sch-text" x="138.007044653948" y="746.369730712472" fill="#7e22ce" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="16.361777070791973px" transform="rotate(0, 138.007044653948, 746.369730712472)">T113-S3</text><text class="sch-text" x="110.73741620262801" y="360.50448812629406" fill="#7e22ce" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="16.361777070791998px" transform="rotate(0, 110.73741620262801, 360.50448812629406)">U3</text><rect class="schematic-box sch-box" x="99.8295648221" y="738.188842177076" width="76.35495966369598" height="16.36177707079196" stroke-width="1.817975230088px" stroke="rgb(132, 0, 0)" fill="transparent" stroke-dasharray="14.543801840704 7.271900920352"/><rect class="schematic-box sch-box" x="94.37563913183598" y="349.1421429382441" width="32.72355414158402" height="22.724690376099943" stroke-width="1.817975230088px" stroke="rgb(132, 0, 0)" fill="transparent" stroke-dasharray="14.543801840704 7.271900920352"/>
133
+ </g>
134
+ </svg>
@@ -0,0 +1,215 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": 0,
7
+ "y": 0
8
+ },
9
+ "width": 3.8,
10
+ "height": 4,
11
+ "pins": [
12
+ {
13
+ "pinId": "schematic_port_0",
14
+ "displayName": "AVCC",
15
+ "x": 1.9,
16
+ "y": -0.5
17
+ },
18
+ {
19
+ "pinId": "schematic_port_1",
20
+ "displayName": "VRA2",
21
+ "x": 1.9,
22
+ "y": -0.3
23
+ },
24
+ {
25
+ "pinId": "schematic_port_2",
26
+ "displayName": "AGND",
27
+ "x": 1.9,
28
+ "y": -0.09999999999999998
29
+ },
30
+ {
31
+ "pinId": "schematic_port_3",
32
+ "displayName": "VRA1",
33
+ "x": 1.9,
34
+ "y": 0.10000000000000009
35
+ },
36
+ {
37
+ "pinId": "schematic_port_4",
38
+ "displayName": "FMINR",
39
+ "x": 1.9,
40
+ "y": 0.30000000000000004
41
+ },
42
+ {
43
+ "pinId": "schematic_port_5",
44
+ "displayName": "FMINL",
45
+ "x": 1.9,
46
+ "y": 0.5
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ "chipId": "schematic_component_1",
52
+ "center": {
53
+ "x": 7.3825,
54
+ "y": -1
55
+ },
56
+ "width": 1.165,
57
+ "height": 0.7599999999999998,
58
+ "pins": [
59
+ {
60
+ "pinId": "schematic_port_6",
61
+ "displayName": "1",
62
+ "x": 7.25,
63
+ "y": -0.6200000000000001,
64
+ "_facingDirection": "y+"
65
+ },
66
+ {
67
+ "pinId": "schematic_port_7",
68
+ "displayName": "2",
69
+ "x": 7.25,
70
+ "y": -1.38,
71
+ "_facingDirection": "y-"
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ "chipId": "schematic_component_2",
77
+ "center": {
78
+ "x": 9.1325,
79
+ "y": -1
80
+ },
81
+ "width": 1.1649999999999991,
82
+ "height": 0.7599999999999998,
83
+ "pins": [
84
+ {
85
+ "pinId": "schematic_port_8",
86
+ "displayName": "1",
87
+ "x": 9,
88
+ "y": -0.6200000000000001,
89
+ "_facingDirection": "y+"
90
+ },
91
+ {
92
+ "pinId": "schematic_port_9",
93
+ "displayName": "2",
94
+ "x": 9,
95
+ "y": -1.38,
96
+ "_facingDirection": "y-"
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "chipId": "schematic_component_3",
102
+ "center": {
103
+ "x": 8.1325,
104
+ "y": 5
105
+ },
106
+ "width": 1.165,
107
+ "height": 0.7599999999999998,
108
+ "pins": [
109
+ {
110
+ "pinId": "schematic_port_10",
111
+ "displayName": "1",
112
+ "x": 8,
113
+ "y": 5.38,
114
+ "_facingDirection": "y+"
115
+ },
116
+ {
117
+ "pinId": "schematic_port_11",
118
+ "displayName": "2",
119
+ "x": 8,
120
+ "y": 4.62,
121
+ "_facingDirection": "y-"
122
+ }
123
+ ]
124
+ }
125
+ ],
126
+ "directConnections": [],
127
+ "netConnections": [
128
+ {
129
+ "netId": "P1V8",
130
+ "isGround": false,
131
+ "netLabelWidth": 0.6,
132
+ "anchoredNetLabelWidth": 0.6,
133
+ "allowInlineNetLabel": true,
134
+ "inlineNetLabelHeight": 0.12,
135
+ "inlineNetLabelWidth": 0.4,
136
+ "pinIds": [
137
+ "schematic_port_0",
138
+ "schematic_port_10"
139
+ ]
140
+ },
141
+ {
142
+ "netId": "Net_U3F_VRA2",
143
+ "isGround": false,
144
+ "netLabelWidth": 0.42,
145
+ "netLabelHeight": 1.56,
146
+ "pinIds": [
147
+ "schematic_port_1",
148
+ "schematic_port_6"
149
+ ]
150
+ },
151
+ {
152
+ "netId": "GND",
153
+ "isGround": true,
154
+ "netLabelWidth": 0.42,
155
+ "netLabelHeight": 0.48,
156
+ "pinIds": [
157
+ "schematic_port_2",
158
+ "schematic_port_4",
159
+ "schematic_port_5",
160
+ "schematic_port_7",
161
+ "schematic_port_9",
162
+ "schematic_port_11"
163
+ ]
164
+ },
165
+ {
166
+ "netId": "Net_U3F_VRA1",
167
+ "isGround": false,
168
+ "netLabelWidth": 0.42,
169
+ "netLabelHeight": 1.56,
170
+ "pinIds": [
171
+ "schematic_port_3",
172
+ "schematic_port_8"
173
+ ]
174
+ }
175
+ ],
176
+ "textBoxes": [
177
+ {
178
+ "chipId": "schematic_component_0",
179
+ "center": {
180
+ "x": -1.08,
181
+ "y": -2.13
182
+ },
183
+ "width": 0.84,
184
+ "height": 0.17999999999999972,
185
+ "text": "T113-S3"
186
+ },
187
+ {
188
+ "chipId": "schematic_component_0",
189
+ "center": {
190
+ "x": -1.38,
191
+ "y": 2.1149999999999998
192
+ },
193
+ "width": 0.3600000000000001,
194
+ "height": 0.24999999999999978,
195
+ "text": "U3"
196
+ }
197
+ ],
198
+ "availableNetLabelOrientations": {
199
+ "Net_U3F_VRA2": [
200
+ "y+"
201
+ ],
202
+ "GND": [
203
+ "y-"
204
+ ],
205
+ "Net_U3F_VRA1": [
206
+ "y+"
207
+ ],
208
+ "P1V8": [
209
+ "x-",
210
+ "x+"
211
+ ]
212
+ },
213
+ "maxMspPairDistance": 0.8,
214
+ "_hideRatsNet": false
215
+ }
@@ -0,0 +1,12 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "./bug-report-20260901T064117Z.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("bug-report-20260901T064117Z", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
12
+ })