@tscircuit/schematic-trace-solver 0.0.47 → 0.0.49

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 (164) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +51 -1
  3. package/dist/index.js +750 -49
  4. package/lib/solvers/Example28Solver/Example28Solver.ts +182 -0
  5. package/lib/solvers/Example28Solver/geometry.ts +246 -0
  6. package/lib/solvers/Example28Solver/labelMovement.ts +82 -0
  7. package/lib/solvers/Example28Solver/reroute.ts +368 -0
  8. package/lib/solvers/Example28Solver/types.ts +47 -0
  9. package/lib/solvers/Example28Solver/visualize.ts +96 -0
  10. package/lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver.ts +2 -0
  11. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/SingleNetLabelPlacementSolver_visualize.ts +12 -0
  12. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +16 -0
  13. package/package.json +1 -1
  14. package/site/SchematicTraceSingleLineSolver2/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.page.tsx +2 -0
  15. package/site/TraceCleanupSolver/TraceCleanupSolver.page.tsx +23 -0
  16. package/site/TraceLabelOverlapAvoidanceSolver/MergedNetLabelObstacles.page.tsx +18 -0
  17. package/site/TraceLabelOverlapAvoidanceSolver/OverlapAvoidanceStepSolver.page.tsx +24 -0
  18. package/site/TraceLabelOverlapAvoidanceSolver/SingleOverlapSolver.page.tsx +10 -0
  19. package/site/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.page.tsx +146 -0
  20. package/site/TraceLabelOverlapAvoidanceSolver/renderComparisonView01.page.tsx +32 -0
  21. package/site/TraceLabelOverlapAvoidanceSolver/renderComparisonView02.page.tsx +32 -0
  22. package/site/TraceLabelOverlapAvoidanceSolver/renderComparisonView03.page.tsx +35 -0
  23. package/site/examples/example01.page.tsx +6 -0
  24. package/site/examples/example02.page.tsx +4 -180
  25. package/site/examples/example03.page.tsx +3 -212
  26. package/site/examples/example04.page.tsx +6 -0
  27. package/site/examples/example05.page.tsx +3 -179
  28. package/site/examples/example06.page.tsx +3 -57
  29. package/site/examples/example07.page.tsx +3 -132
  30. package/site/examples/example08.page.tsx +3 -91
  31. package/site/examples/example09.page.tsx +3 -414
  32. package/site/examples/example10.page.tsx +3 -75
  33. package/site/examples/example11.page.tsx +3 -116
  34. package/site/examples/example12.page.tsx +3 -94
  35. package/site/examples/example13.page.tsx +3 -216
  36. package/site/examples/example14.page.tsx +3 -207
  37. package/site/examples/example15.page.tsx +6 -0
  38. package/site/examples/example16.page.tsx +6 -0
  39. package/site/examples/example17.page.tsx +6 -0
  40. package/site/examples/example18.page.tsx +3 -178
  41. package/site/examples/example19.page.tsx +3 -166
  42. package/site/examples/example20.page.tsx +3 -100
  43. package/site/examples/example21.page.tsx +3 -174
  44. package/site/examples/example22.page.tsx +3 -105
  45. package/site/examples/example23.page.tsx +3 -134
  46. package/site/examples/example24.page.tsx +3 -125
  47. package/site/examples/example25.page.tsx +2 -0
  48. package/site/examples/example26.page.tsx +2 -0
  49. package/site/examples/example27.page.tsx +2 -0
  50. package/site/examples/example28.page.tsx +6 -0
  51. package/site/examples/example29.page.tsx +6 -0
  52. package/site/examples/example30.page.tsx +6 -0
  53. package/site/examples/example31.page.tsx +4 -0
  54. package/tests/assets/example01.json +109 -0
  55. package/tests/assets/example02.json +178 -0
  56. package/tests/assets/example03.json +210 -0
  57. package/tests/assets/example04.json +41 -0
  58. package/tests/assets/example05.json +175 -0
  59. package/tests/assets/example06.json +55 -0
  60. package/tests/assets/example07.json +130 -0
  61. package/tests/assets/example08.json +89 -0
  62. package/tests/assets/example09.json +412 -0
  63. package/tests/assets/example10.json +73 -0
  64. package/tests/assets/example11.json +114 -0
  65. package/tests/assets/example12.json +92 -0
  66. package/tests/assets/example13.json +214 -0
  67. package/tests/assets/example14.json +205 -0
  68. package/tests/assets/example15.json +618 -0
  69. package/tests/assets/example16.json +102 -0
  70. package/tests/assets/example17.json +160 -0
  71. package/tests/assets/example18.json +176 -0
  72. package/tests/assets/example19.json +164 -0
  73. package/tests/assets/example20.json +98 -0
  74. package/tests/assets/example21.json +172 -0
  75. package/tests/assets/example22.json +103 -0
  76. package/tests/assets/example23.json +132 -0
  77. package/tests/assets/example24.json +123 -0
  78. package/tests/assets/example25.json +146 -33
  79. package/tests/assets/example26.json +51 -1134
  80. package/tests/assets/example27.json +151 -91
  81. package/tests/assets/example28.json +56 -0
  82. package/tests/assets/example29.json +1206 -0
  83. package/tests/assets/example30.json +168 -0
  84. package/tests/assets/example31.json +46 -0
  85. package/tests/examples/__snapshots__/example01.snap.svg +12 -6
  86. package/tests/examples/__snapshots__/example02.snap.svg +16 -8
  87. package/tests/examples/__snapshots__/example03.snap.svg +36 -18
  88. package/tests/examples/__snapshots__/example04.snap.svg +8 -4
  89. package/tests/examples/__snapshots__/example05.snap.svg +4 -2
  90. package/tests/examples/__snapshots__/example06.snap.svg +4 -2
  91. package/tests/examples/__snapshots__/example07.snap.svg +20 -10
  92. package/tests/examples/__snapshots__/example08.snap.svg +16 -8
  93. package/tests/examples/__snapshots__/example09.snap.svg +80 -40
  94. package/tests/examples/__snapshots__/example10.snap.svg +16 -8
  95. package/tests/examples/__snapshots__/example11.snap.svg +24 -12
  96. package/tests/examples/__snapshots__/example12.snap.svg +16 -8
  97. package/tests/examples/__snapshots__/example13.snap.svg +32 -16
  98. package/tests/examples/__snapshots__/example14.snap.svg +115 -48
  99. package/tests/examples/__snapshots__/example15.snap.svg +36 -18
  100. package/tests/examples/__snapshots__/example16.snap.svg +16 -8
  101. package/tests/examples/__snapshots__/example17.snap.svg +16 -8
  102. package/tests/examples/__snapshots__/example18.snap.svg +20 -10
  103. package/tests/examples/__snapshots__/example19.snap.svg +16 -8
  104. package/tests/examples/__snapshots__/example20.snap.svg +43 -135
  105. package/tests/examples/__snapshots__/example21.snap.svg +34 -18
  106. package/tests/examples/__snapshots__/example22.snap.svg +37 -23
  107. package/tests/examples/__snapshots__/example23.snap.svg +62 -26
  108. package/tests/examples/__snapshots__/example24.snap.svg +50 -28
  109. package/tests/examples/__snapshots__/example25.snap.svg +175 -49
  110. package/tests/examples/__snapshots__/example26.snap.svg +16 -8
  111. package/tests/examples/__snapshots__/example27.snap.svg +24 -12
  112. package/tests/examples/__snapshots__/example28.snap.svg +29 -189
  113. package/tests/examples/__snapshots__/example29.snap.svg +184 -92
  114. package/tests/examples/__snapshots__/example30.snap.svg +48 -24
  115. package/tests/examples/__snapshots__/example31.snap.svg +88 -0
  116. package/tests/examples/example01.test.ts +2 -2
  117. package/tests/examples/example02.test.ts +2 -2
  118. package/tests/examples/example03.test.ts +2 -2
  119. package/tests/examples/example04.test.ts +2 -2
  120. package/tests/examples/example05.test.ts +2 -2
  121. package/tests/examples/example06.test.ts +2 -2
  122. package/tests/examples/example07.test.ts +2 -2
  123. package/tests/examples/example08.test.ts +2 -2
  124. package/tests/examples/example09.test.ts +2 -2
  125. package/tests/examples/example10.test.ts +2 -2
  126. package/tests/examples/{example11.test.tsx → example11.test.ts} +2 -2
  127. package/tests/examples/{example12.test.tsx → example12.test.ts} +2 -2
  128. package/tests/examples/{example13.test.tsx → example13.test.ts} +2 -2
  129. package/tests/examples/example14.test.ts +12 -0
  130. package/tests/examples/example15.test.ts +12 -0
  131. package/tests/examples/example16.test.ts +12 -0
  132. package/tests/examples/example17.test.ts +12 -0
  133. package/tests/examples/example18.test.ts +12 -0
  134. package/tests/examples/example19.test.ts +12 -0
  135. package/tests/examples/example20.test.ts +12 -0
  136. package/tests/examples/example21.test.ts +12 -0
  137. package/tests/examples/example22.test.ts +12 -0
  138. package/tests/examples/example23.test.ts +12 -0
  139. package/tests/examples/example24.test.ts +12 -0
  140. package/tests/examples/example25.test.ts +12 -0
  141. package/tests/examples/example26.test.ts +12 -0
  142. package/tests/examples/example27.test.ts +3 -232
  143. package/tests/examples/example28.test.ts +1 -2
  144. package/tests/examples/example29.test.ts +1 -2
  145. package/tests/examples/example30.test.ts +2 -2
  146. package/tests/examples/example31.test.ts +12 -0
  147. package/site/examples/example01-basic.page.tsx +0 -105
  148. package/site/examples/example04-single-symbol.page.tsx +0 -46
  149. package/site/examples/example15-rp2040-caps.page.tsx +0 -623
  150. package/site/examples/example16-core-repro51.page.tsx +0 -107
  151. package/site/examples/example17-straight-line-trace.page.tsx +0 -165
  152. package/tests/examples/example14.test.tsx +0 -11
  153. package/tests/examples/example15.test.tsx +0 -629
  154. package/tests/examples/example16.test.tsx +0 -113
  155. package/tests/examples/example17.test.tsx +0 -171
  156. package/tests/examples/example18.test.tsx +0 -187
  157. package/tests/examples/example19.test.tsx +0 -175
  158. package/tests/examples/example20.test.tsx +0 -190
  159. package/tests/examples/example21.test.tsx +0 -183
  160. package/tests/examples/example22.test.tsx +0 -109
  161. package/tests/examples/example23.test.tsx +0 -109
  162. package/tests/examples/example24.test.tsx +0 -114
  163. package/tests/examples/example25.test.tsx +0 -143
  164. package/tests/examples/example26.test.tsx +0 -134
@@ -1,239 +1,10 @@
1
1
  import { test, expect } from "bun:test"
2
- import type { InputProblem } from "lib/index"
3
2
  import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "../assets/example27.json"
4
4
  import "tests/fixtures/matcher"
5
5
 
6
- const inputProblem: InputProblem = {
7
- chips: [
8
- {
9
- chipId: "schematic_component_0",
10
- center: {
11
- x: 0,
12
- y: 0,
13
- },
14
- width: 1.8,
15
- height: 2,
16
- pins: [
17
- {
18
- pinId: "U1.1",
19
- x: -0.2,
20
- y: 1.4,
21
- },
22
- {
23
- pinId: "U1.2",
24
- x: -1.3,
25
- y: 0.09999999999999998,
26
- },
27
- {
28
- pinId: "U1.3",
29
- x: -1.3,
30
- y: -0.10000000000000009,
31
- },
32
- {
33
- pinId: "U1.4",
34
- x: -1.3,
35
- y: -0.30000000000000004,
36
- },
37
- {
38
- pinId: "U1.5",
39
- x: -1.3,
40
- y: -0.5,
41
- },
42
- {
43
- pinId: "U1.7",
44
- x: 0,
45
- y: -1.4,
46
- },
47
- {
48
- pinId: "U1.8",
49
- x: -1.3,
50
- y: 0.5,
51
- },
52
- {
53
- pinId: "U1.10",
54
- x: 1.3,
55
- y: -0.5,
56
- },
57
- {
58
- pinId: "U1.11",
59
- x: 1.3,
60
- y: -0.3,
61
- },
62
- {
63
- pinId: "U1.12",
64
- x: 1.3,
65
- y: -0.09999999999999998,
66
- },
67
- {
68
- pinId: "U1.13",
69
- x: 1.3,
70
- y: 0.10000000000000009,
71
- },
72
- {
73
- pinId: "U1.14",
74
- x: 0.2,
75
- y: 1.4,
76
- },
77
- ],
78
- },
79
- {
80
- chipId: "schematic_component_1",
81
- center: {
82
- x: -4,
83
- y: -0.3,
84
- },
85
- width: 0.4,
86
- height: 1.6,
87
- pins: [
88
- {
89
- pinId: "JP1.1",
90
- x: -3.4,
91
- y: -0.8999999999999999,
92
- },
93
- {
94
- pinId: "JP1.2",
95
- x: -3.4,
96
- y: -0.7,
97
- },
98
- {
99
- pinId: "JP1.3",
100
- x: -3.4,
101
- y: -0.49999999999999994,
102
- },
103
- {
104
- pinId: "JP1.4",
105
- x: -3.4,
106
- y: -0.2999999999999999,
107
- },
108
- {
109
- pinId: "JP1.5",
110
- x: -3.4,
111
- y: -0.09999999999999992,
112
- },
113
- {
114
- pinId: "JP1.6",
115
- x: -3.4,
116
- y: 0.10000000000000003,
117
- },
118
- {
119
- pinId: "JP1.7",
120
- x: -3.4,
121
- y: 0.3,
122
- },
123
- ],
124
- },
125
- {
126
- chipId: "schematic_component_2",
127
- center: {
128
- x: 4,
129
- y: -0.3,
130
- },
131
- width: 0.4,
132
- height: 1.6,
133
- pins: [
134
- {
135
- pinId: "JP2.1",
136
- x: 3.4,
137
- y: -0.8999999999999999,
138
- },
139
- {
140
- pinId: "JP2.2",
141
- x: 3.4,
142
- y: -0.7,
143
- },
144
- {
145
- pinId: "JP2.3",
146
- x: 3.4,
147
- y: -0.5,
148
- },
149
- {
150
- pinId: "JP2.4",
151
- x: 3.4,
152
- y: -0.3000000000000001,
153
- },
154
- {
155
- pinId: "JP2.5",
156
- x: 3.4,
157
- y: -0.10000000000000003,
158
- },
159
- {
160
- pinId: "JP2.6",
161
- x: 3.4,
162
- y: 0.09999999999999998,
163
- },
164
- {
165
- pinId: "JP2.7",
166
- x: 3.4,
167
- y: 0.3,
168
- },
169
- ],
170
- },
171
- ],
172
- directConnections: [
173
- {
174
- pinIds: ["JP1.1", "U1.7"],
175
- netId: "pinheader.JP1 > port.pin1 to .U1 > .pin7",
176
- },
177
- {
178
- pinIds: ["JP1.3", "U1.5"],
179
- netId: "pinheader.JP1 > port.pin3 to .U1 > .pin5",
180
- },
181
- {
182
- pinIds: ["JP1.4", "U1.4"],
183
- netId: "pinheader.JP1 > port.pin4 to .U1 > .pin4",
184
- },
185
- {
186
- pinIds: ["JP1.5", "U1.3"],
187
- netId: "pinheader.JP1 > port.pin5 to .U1 > .pin3",
188
- },
189
- {
190
- pinIds: ["JP1.6", "U1.2"],
191
- netId: "pinheader.JP1 > port.pin6 to .U1 > .pin2",
192
- },
193
- {
194
- pinIds: ["JP2.3", "U1.10"],
195
- netId: "pinheader.JP2 > port.pin3 to .U1 > .pin10",
196
- },
197
- {
198
- pinIds: ["JP2.4", "U1.11"],
199
- netId: "pinheader.JP2 > port.pin4 to .U1 > .pin11",
200
- },
201
- {
202
- pinIds: ["JP2.5", "U1.12"],
203
- netId: "pinheader.JP2 > port.pin5 to .U1 > .pin12",
204
- },
205
- {
206
- pinIds: ["JP2.6", "U1.13"],
207
- netId: "pinheader.JP2 > port.pin6 to .U1 > .pin13",
208
- },
209
- ],
210
- netConnections: [
211
- {
212
- netId: "V3_3",
213
- pinIds: ["U1.1", "JP1.2"],
214
- netLabelWidth: 0.4,
215
- },
216
- {
217
- netId: "GND",
218
- pinIds: ["U1.7", "JP1.1", "JP2.1"],
219
- netLabelWidth: 0.3,
220
- },
221
- {
222
- netId: "V5",
223
- pinIds: ["U1.14", "JP2.2"],
224
- netLabelWidth: 0.2,
225
- },
226
- ],
227
- availableNetLabelOrientations: {
228
- V3_3: ["y+"],
229
- V5: ["y+"],
230
- GND: ["y-"],
231
- },
232
- maxMspPairDistance: 5,
233
- }
234
-
235
- test("example01", () => {
236
- const solver = new SchematicTracePipelineSolver(inputProblem)
6
+ test("example27", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
237
8
 
238
9
  solver.solve()
239
10
 
@@ -1,8 +1,7 @@
1
1
  import { test, expect } from "bun:test"
2
- import type { InputProblem } from "lib/index"
3
2
  import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "../assets/example28.json"
4
4
  import "tests/fixtures/matcher"
5
- import inputProblem from "../../tests/assets/example25.json"
6
5
 
7
6
  test("example28", () => {
8
7
  const solver = new SchematicTracePipelineSolver(inputProblem as any)
@@ -1,8 +1,7 @@
1
1
  import { test, expect } from "bun:test"
2
- import type { InputProblem } from "lib/index"
3
2
  import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "../assets/example29.json"
4
4
  import "tests/fixtures/matcher"
5
- import inputProblem from "../assets/example26.json"
6
5
 
7
6
  test("example29", () => {
8
7
  const solver = new SchematicTracePipelineSolver(inputProblem as any)
@@ -1,9 +1,9 @@
1
1
  import { test, expect } from "bun:test"
2
2
  import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "../assets/example30.json"
3
4
  import "tests/fixtures/matcher"
4
- import inputProblem from "../assets/example27.json"
5
5
 
6
- test("example29", () => {
6
+ test("example30", () => {
7
7
  const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
8
 
9
9
  solver.solve()
@@ -0,0 +1,12 @@
1
+ import { test, expect } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "../assets/example31.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("example31 -> VCC net labels should be at a corner whenever feasible", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
12
+ })
@@ -1,105 +0,0 @@
1
- import type { InputProblem } from "lib/types/InputProblem"
2
- import { PipelineDebugger } from "site/components/PipelineDebugger"
3
-
4
- export const inputProblem: InputProblem = {
5
- chips: [
6
- {
7
- chipId: "U1",
8
- center: { x: 0, y: 0 },
9
- width: 1.6,
10
- height: 0.6,
11
- pins: [
12
- {
13
- pinId: "U1.1",
14
- x: -0.8,
15
- y: 0.2,
16
- },
17
- {
18
- pinId: "U1.2",
19
- x: -0.8,
20
- y: 0,
21
- },
22
- {
23
- pinId: "U1.3",
24
- x: -0.8,
25
- y: -0.2,
26
- },
27
- {
28
- pinId: "U1.4",
29
- x: 0.8,
30
- y: -0.2,
31
- },
32
- {
33
- pinId: "U1.5",
34
- x: 0.8,
35
- y: 0,
36
- },
37
- {
38
- pinId: "U1.6",
39
- x: 0.8,
40
- y: 0.2,
41
- },
42
- ],
43
- },
44
- {
45
- chipId: "C1",
46
- center: { x: -2, y: 0 },
47
- width: 0.5,
48
- height: 1,
49
- pins: [
50
- {
51
- pinId: "C1.1",
52
- x: -2,
53
- y: 0.5,
54
- },
55
- {
56
- pinId: "C1.2",
57
- x: -2,
58
- y: -0.5,
59
- },
60
- ],
61
- },
62
- {
63
- chipId: "C2",
64
- center: { x: -4, y: 0 },
65
- width: 0.5,
66
- height: 1,
67
- pins: [
68
- {
69
- pinId: "C2.1",
70
- x: -4,
71
- y: 0.5,
72
- },
73
- {
74
- pinId: "C2.2",
75
- x: -4,
76
- y: -0.5,
77
- },
78
- ],
79
- },
80
- ],
81
- directConnections: [
82
- {
83
- pinIds: ["U1.1", "C1.1"],
84
- netId: "VCC",
85
- },
86
- {
87
- pinIds: ["U1.2", "C2.1"],
88
- netId: "EN",
89
- },
90
- ],
91
- netConnections: [
92
- {
93
- pinIds: ["U1.3", "C2.2", "C1.2"],
94
- netId: "GND",
95
- },
96
- ],
97
- availableNetLabelOrientations: {
98
- VCC: ["y+"],
99
- EN: ["x+", "x-"],
100
- GND: ["y-"],
101
- },
102
- maxMspPairDistance: 5,
103
- }
104
-
105
- export default () => <PipelineDebugger inputProblem={inputProblem} />
@@ -1,46 +0,0 @@
1
- import { PipelineDebugger } from "../components/PipelineDebugger"
2
- import type { InputProblem } from "lib/types/InputProblem"
3
-
4
- export const inputProblem: InputProblem = {
5
- chips: [
6
- {
7
- chipId: "schematic_component_0",
8
- center: {
9
- x: 0,
10
- y: 0,
11
- },
12
- width: 0.8935117710000002,
13
- height: 1.1601665819999987,
14
- pins: [
15
- {
16
- pinId: "Q1.1",
17
- x: 0.30397715550000004,
18
- y: 0.5519248499999994,
19
- },
20
- {
21
- pinId: "Q1.2",
22
- x: 0.31067575550000137,
23
- y: -0.5519248499999994,
24
- },
25
- {
26
- pinId: "Q1.3",
27
- x: -0.41859744450000014,
28
- y: -0.10250625000000019,
29
- },
30
- ],
31
- },
32
- ],
33
- directConnections: [],
34
- netConnections: [
35
- {
36
- netId: "V3_3",
37
- pinIds: ["Q1.1", "Q1.2"],
38
- },
39
- ],
40
- availableNetLabelOrientations: {
41
- V3_3: ["y+"],
42
- },
43
- maxMspPairDistance: 2,
44
- }
45
-
46
- export default () => <PipelineDebugger inputProblem={inputProblem} />