kicad-sch-api 0.3.5__py3-none-any.whl → 0.4.0__py3-none-any.whl
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.
Potentially problematic release.
This version of kicad-sch-api might be problematic. Click here for more details.
- kicad_sch_api/collections/__init__.py +2 -2
- kicad_sch_api/collections/base.py +5 -7
- kicad_sch_api/collections/components.py +24 -12
- kicad_sch_api/collections/junctions.py +31 -43
- kicad_sch_api/collections/labels.py +19 -27
- kicad_sch_api/collections/wires.py +17 -18
- kicad_sch_api/core/components.py +5 -0
- kicad_sch_api/core/formatter.py +3 -1
- kicad_sch_api/core/labels.py +2 -2
- kicad_sch_api/core/managers/__init__.py +26 -0
- kicad_sch_api/core/managers/file_io.py +243 -0
- kicad_sch_api/core/managers/format_sync.py +501 -0
- kicad_sch_api/core/managers/graphics.py +579 -0
- kicad_sch_api/core/managers/metadata.py +268 -0
- kicad_sch_api/core/managers/sheet.py +454 -0
- kicad_sch_api/core/managers/text_elements.py +536 -0
- kicad_sch_api/core/managers/validation.py +474 -0
- kicad_sch_api/core/managers/wire.py +346 -0
- kicad_sch_api/core/nets.py +1 -1
- kicad_sch_api/core/no_connects.py +5 -3
- kicad_sch_api/core/parser.py +75 -41
- kicad_sch_api/core/schematic.py +779 -1083
- kicad_sch_api/core/texts.py +1 -1
- kicad_sch_api/core/types.py +1 -4
- kicad_sch_api/geometry/font_metrics.py +3 -1
- kicad_sch_api/geometry/symbol_bbox.py +40 -21
- kicad_sch_api/interfaces/__init__.py +1 -1
- kicad_sch_api/interfaces/parser.py +1 -1
- kicad_sch_api/interfaces/repository.py +1 -1
- kicad_sch_api/interfaces/resolver.py +1 -1
- kicad_sch_api/parsers/__init__.py +2 -2
- kicad_sch_api/parsers/base.py +7 -10
- kicad_sch_api/parsers/label_parser.py +7 -7
- kicad_sch_api/parsers/registry.py +4 -2
- kicad_sch_api/parsers/symbol_parser.py +5 -10
- kicad_sch_api/parsers/wire_parser.py +2 -2
- kicad_sch_api/symbols/__init__.py +1 -1
- kicad_sch_api/symbols/cache.py +9 -12
- kicad_sch_api/symbols/resolver.py +20 -26
- kicad_sch_api/symbols/validators.py +188 -137
- {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/METADATA +1 -1
- kicad_sch_api-0.4.0.dist-info/RECORD +67 -0
- kicad_sch_api-0.3.5.dist-info/RECORD +0 -58
- {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/WHEEL +0 -0
- {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/entry_points.txt +0 -0
- {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -51,12 +51,14 @@ class SymbolValidator:
|
|
|
51
51
|
rule_issues = rule_func(symbol)
|
|
52
52
|
issues.extend(rule_issues)
|
|
53
53
|
except Exception as e:
|
|
54
|
-
issues.append(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
issues.append(
|
|
55
|
+
ValidationIssue(
|
|
56
|
+
category="validation",
|
|
57
|
+
message=f"Validation rule '{rule_name}' failed: {e}",
|
|
58
|
+
level="error",
|
|
59
|
+
context={"symbol": symbol.lib_id, "rule": rule_name},
|
|
60
|
+
)
|
|
61
|
+
)
|
|
60
62
|
|
|
61
63
|
return issues
|
|
62
64
|
|
|
@@ -99,12 +101,14 @@ class SymbolValidator:
|
|
|
99
101
|
return issues
|
|
100
102
|
|
|
101
103
|
if not self._cache:
|
|
102
|
-
issues.append(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
issues.append(
|
|
105
|
+
ValidationIssue(
|
|
106
|
+
category="inheritance",
|
|
107
|
+
message="Cannot validate inheritance without cache",
|
|
108
|
+
level="warning",
|
|
109
|
+
context={"symbol": symbol.lib_id},
|
|
110
|
+
)
|
|
111
|
+
)
|
|
108
112
|
return issues
|
|
109
113
|
|
|
110
114
|
# Check for inheritance chain issues
|
|
@@ -113,24 +117,28 @@ class SymbolValidator:
|
|
|
113
117
|
|
|
114
118
|
while current_lib_id:
|
|
115
119
|
if current_lib_id in visited:
|
|
116
|
-
issues.append(
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
issues.append(
|
|
121
|
+
ValidationIssue(
|
|
122
|
+
category="inheritance",
|
|
123
|
+
message=f"Circular inheritance detected in chain starting from {symbol.lib_id}",
|
|
124
|
+
level="error",
|
|
125
|
+
context={"symbol": symbol.lib_id, "cycle_point": current_lib_id},
|
|
126
|
+
)
|
|
127
|
+
)
|
|
122
128
|
break
|
|
123
129
|
|
|
124
130
|
visited.add(current_lib_id)
|
|
125
131
|
current_symbol = self._cache.get_symbol(current_lib_id)
|
|
126
132
|
|
|
127
133
|
if not current_symbol:
|
|
128
|
-
issues.append(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
issues.append(
|
|
135
|
+
ValidationIssue(
|
|
136
|
+
category="inheritance",
|
|
137
|
+
message=f"Missing symbol in inheritance chain: {current_lib_id}",
|
|
138
|
+
level="error",
|
|
139
|
+
context={"symbol": symbol.lib_id, "missing": current_lib_id},
|
|
140
|
+
)
|
|
141
|
+
)
|
|
134
142
|
break
|
|
135
143
|
|
|
136
144
|
if not current_symbol.extends:
|
|
@@ -145,12 +153,14 @@ class SymbolValidator:
|
|
|
145
153
|
|
|
146
154
|
# Check if parent exists
|
|
147
155
|
if not self._cache.has_symbol(current_lib_id):
|
|
148
|
-
issues.append(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
issues.append(
|
|
157
|
+
ValidationIssue(
|
|
158
|
+
category="inheritance",
|
|
159
|
+
message=f"Parent symbol not found: {current_lib_id}",
|
|
160
|
+
level="error",
|
|
161
|
+
context={"symbol": symbol.lib_id, "parent": current_lib_id},
|
|
162
|
+
)
|
|
163
|
+
)
|
|
154
164
|
break
|
|
155
165
|
|
|
156
166
|
return issues
|
|
@@ -199,12 +209,14 @@ class SymbolValidator:
|
|
|
199
209
|
issues = []
|
|
200
210
|
|
|
201
211
|
if not self.validate_lib_id(symbol.lib_id):
|
|
202
|
-
issues.append(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
212
|
+
issues.append(
|
|
213
|
+
ValidationIssue(
|
|
214
|
+
category="lib_id",
|
|
215
|
+
message=f"Invalid lib_id format: {symbol.lib_id}",
|
|
216
|
+
level="error",
|
|
217
|
+
context={"symbol": symbol.lib_id},
|
|
218
|
+
)
|
|
219
|
+
)
|
|
208
220
|
|
|
209
221
|
return issues
|
|
210
222
|
|
|
@@ -213,28 +225,34 @@ class SymbolValidator:
|
|
|
213
225
|
issues = []
|
|
214
226
|
|
|
215
227
|
if not symbol.name:
|
|
216
|
-
issues.append(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
228
|
+
issues.append(
|
|
229
|
+
ValidationIssue(
|
|
230
|
+
category="required_fields",
|
|
231
|
+
message="Symbol name is required",
|
|
232
|
+
level="error",
|
|
233
|
+
context={"symbol": symbol.lib_id},
|
|
234
|
+
)
|
|
235
|
+
)
|
|
222
236
|
|
|
223
237
|
if not symbol.library:
|
|
224
|
-
issues.append(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
238
|
+
issues.append(
|
|
239
|
+
ValidationIssue(
|
|
240
|
+
category="required_fields",
|
|
241
|
+
message="Symbol library is required",
|
|
242
|
+
level="error",
|
|
243
|
+
context={"symbol": symbol.lib_id},
|
|
244
|
+
)
|
|
245
|
+
)
|
|
230
246
|
|
|
231
247
|
if not symbol.reference_prefix:
|
|
232
|
-
issues.append(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
248
|
+
issues.append(
|
|
249
|
+
ValidationIssue(
|
|
250
|
+
category="required_fields",
|
|
251
|
+
message="Symbol reference prefix is missing",
|
|
252
|
+
level="warning",
|
|
253
|
+
context={"symbol": symbol.lib_id},
|
|
254
|
+
)
|
|
255
|
+
)
|
|
238
256
|
|
|
239
257
|
return issues
|
|
240
258
|
|
|
@@ -244,23 +262,29 @@ class SymbolValidator:
|
|
|
244
262
|
|
|
245
263
|
if symbol.reference_prefix:
|
|
246
264
|
# Check for invalid characters
|
|
247
|
-
invalid_chars = set(symbol.reference_prefix) - set(
|
|
265
|
+
invalid_chars = set(symbol.reference_prefix) - set(
|
|
266
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
|
|
267
|
+
)
|
|
248
268
|
if invalid_chars:
|
|
249
|
-
issues.append(
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
269
|
+
issues.append(
|
|
270
|
+
ValidationIssue(
|
|
271
|
+
category="reference_prefix",
|
|
272
|
+
message=f"Reference prefix contains invalid characters: {invalid_chars}",
|
|
273
|
+
level="warning",
|
|
274
|
+
context={"symbol": symbol.lib_id, "prefix": symbol.reference_prefix},
|
|
275
|
+
)
|
|
276
|
+
)
|
|
255
277
|
|
|
256
278
|
# Check for common patterns
|
|
257
279
|
if symbol.reference_prefix.lower() in ["u", "ic"] and not symbol.description:
|
|
258
|
-
issues.append(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
280
|
+
issues.append(
|
|
281
|
+
ValidationIssue(
|
|
282
|
+
category="reference_prefix",
|
|
283
|
+
message="Generic IC prefix 'U' - consider adding description",
|
|
284
|
+
level="info",
|
|
285
|
+
context={"symbol": symbol.lib_id},
|
|
286
|
+
)
|
|
287
|
+
)
|
|
264
288
|
|
|
265
289
|
return issues
|
|
266
290
|
|
|
@@ -269,12 +293,14 @@ class SymbolValidator:
|
|
|
269
293
|
issues = []
|
|
270
294
|
|
|
271
295
|
if not symbol.pins:
|
|
272
|
-
issues.append(
|
|
296
|
+
issues.append(
|
|
297
|
+
ValidationIssue(
|
|
273
298
|
category="symbol",
|
|
274
299
|
level="warning",
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
300
|
+
message="Symbol has no pins defined",
|
|
301
|
+
context={"symbol": symbol.lib_id},
|
|
302
|
+
)
|
|
303
|
+
)
|
|
278
304
|
return issues
|
|
279
305
|
|
|
280
306
|
# Check for duplicate pin numbers
|
|
@@ -282,24 +308,28 @@ class SymbolValidator:
|
|
|
282
308
|
duplicates = set([num for num in pin_numbers if pin_numbers.count(num) > 1])
|
|
283
309
|
|
|
284
310
|
if duplicates:
|
|
285
|
-
issues.append(
|
|
311
|
+
issues.append(
|
|
312
|
+
ValidationIssue(
|
|
286
313
|
category="symbol",
|
|
287
314
|
level="error",
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
315
|
+
message=f"Duplicate pin numbers found: {duplicates}",
|
|
316
|
+
context={"symbol": symbol.lib_id, "duplicates": list(duplicates)},
|
|
317
|
+
)
|
|
318
|
+
)
|
|
291
319
|
|
|
292
320
|
# Check for pins with same position
|
|
293
321
|
pin_positions = [(pin.position.x, pin.position.y) for pin in symbol.pins]
|
|
294
322
|
for i, pos1 in enumerate(pin_positions):
|
|
295
|
-
for j, pos2 in enumerate(pin_positions[i+1:], i+1):
|
|
323
|
+
for j, pos2 in enumerate(pin_positions[i + 1 :], i + 1):
|
|
296
324
|
if pos1 == pos2:
|
|
297
|
-
issues.append(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
325
|
+
issues.append(
|
|
326
|
+
ValidationIssue(
|
|
327
|
+
category="symbol",
|
|
328
|
+
level="warning",
|
|
329
|
+
message=f"Pins at same position: {symbol.pins[i].number} and {symbol.pins[j].number}",
|
|
330
|
+
context={"symbol": symbol.lib_id, "position": pos1},
|
|
331
|
+
)
|
|
332
|
+
)
|
|
303
333
|
|
|
304
334
|
return issues
|
|
305
335
|
|
|
@@ -308,23 +338,27 @@ class SymbolValidator:
|
|
|
308
338
|
issues = []
|
|
309
339
|
|
|
310
340
|
if symbol.units < 1:
|
|
311
|
-
issues.append(
|
|
341
|
+
issues.append(
|
|
342
|
+
ValidationIssue(
|
|
312
343
|
category="symbol",
|
|
313
344
|
level="error",
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
345
|
+
message=f"Invalid unit count: {symbol.units}",
|
|
346
|
+
context={"symbol": symbol.lib_id},
|
|
347
|
+
)
|
|
348
|
+
)
|
|
317
349
|
|
|
318
350
|
# Check unit names consistency
|
|
319
351
|
if symbol.unit_names:
|
|
320
352
|
for unit_num in symbol.unit_names:
|
|
321
353
|
if unit_num < 1 or unit_num > symbol.units:
|
|
322
|
-
issues.append(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
354
|
+
issues.append(
|
|
355
|
+
ValidationIssue(
|
|
356
|
+
category="symbol",
|
|
357
|
+
level="warning",
|
|
358
|
+
message=f"Unit name defined for invalid unit number: {unit_num}",
|
|
359
|
+
context={"symbol": symbol.lib_id, "unit": unit_num},
|
|
360
|
+
)
|
|
361
|
+
)
|
|
328
362
|
|
|
329
363
|
return issues
|
|
330
364
|
|
|
@@ -335,21 +369,25 @@ class SymbolValidator:
|
|
|
335
369
|
if symbol.extends is not None:
|
|
336
370
|
# Check extends format
|
|
337
371
|
if not symbol.extends.strip():
|
|
338
|
-
issues.append(
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
372
|
+
issues.append(
|
|
373
|
+
ValidationIssue(
|
|
374
|
+
category="symbol",
|
|
375
|
+
level="error",
|
|
376
|
+
message="Empty extends directive",
|
|
377
|
+
context={"symbol": symbol.lib_id},
|
|
378
|
+
)
|
|
379
|
+
)
|
|
344
380
|
|
|
345
381
|
# Check for self-reference
|
|
346
382
|
if symbol.extends == symbol.name:
|
|
347
|
-
issues.append(
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
383
|
+
issues.append(
|
|
384
|
+
ValidationIssue(
|
|
385
|
+
category="symbol",
|
|
386
|
+
level="error",
|
|
387
|
+
message="Symbol cannot extend itself",
|
|
388
|
+
context={"symbol": symbol.lib_id},
|
|
389
|
+
)
|
|
390
|
+
)
|
|
353
391
|
|
|
354
392
|
return issues
|
|
355
393
|
|
|
@@ -360,30 +398,36 @@ class SymbolValidator:
|
|
|
360
398
|
for pin in symbol.pins:
|
|
361
399
|
# Validate pin number
|
|
362
400
|
if not pin.number:
|
|
363
|
-
issues.append(
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
401
|
+
issues.append(
|
|
402
|
+
ValidationIssue(
|
|
403
|
+
category="symbol",
|
|
404
|
+
level="error",
|
|
405
|
+
message="Pin missing number",
|
|
406
|
+
context={"symbol": symbol.lib_id},
|
|
407
|
+
)
|
|
408
|
+
)
|
|
369
409
|
|
|
370
410
|
# Validate pin name
|
|
371
411
|
if not pin.name:
|
|
372
|
-
issues.append(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
412
|
+
issues.append(
|
|
413
|
+
ValidationIssue(
|
|
414
|
+
category="symbol",
|
|
415
|
+
level="warning",
|
|
416
|
+
message=f"Pin {pin.number} missing name",
|
|
417
|
+
context={"symbol": symbol.lib_id, "pin": pin.number},
|
|
418
|
+
)
|
|
419
|
+
)
|
|
378
420
|
|
|
379
421
|
# Validate pin type
|
|
380
|
-
if not hasattr(pin,
|
|
381
|
-
issues.append(
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
422
|
+
if not hasattr(pin, "pin_type") or not pin.pin_type:
|
|
423
|
+
issues.append(
|
|
424
|
+
ValidationIssue(
|
|
425
|
+
category="symbol",
|
|
426
|
+
level="warning",
|
|
427
|
+
message=f"Pin {pin.number} missing pin type",
|
|
428
|
+
context={"symbol": symbol.lib_id, "pin": pin.number},
|
|
429
|
+
)
|
|
430
|
+
)
|
|
387
431
|
|
|
388
432
|
return issues
|
|
389
433
|
|
|
@@ -392,12 +436,14 @@ class SymbolValidator:
|
|
|
392
436
|
issues = []
|
|
393
437
|
|
|
394
438
|
if not symbol.graphic_elements:
|
|
395
|
-
issues.append(
|
|
439
|
+
issues.append(
|
|
440
|
+
ValidationIssue(
|
|
396
441
|
category="symbol",
|
|
397
442
|
level="info",
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
443
|
+
message="Symbol has no graphic elements",
|
|
444
|
+
context={"symbol": symbol.lib_id},
|
|
445
|
+
)
|
|
446
|
+
)
|
|
401
447
|
|
|
402
448
|
# Could add more graphic validation here
|
|
403
449
|
# - Check for overlapping elements
|
|
@@ -414,7 +460,7 @@ class SymbolValidator:
|
|
|
414
460
|
if symbol.units > 1:
|
|
415
461
|
unit_pins = {}
|
|
416
462
|
for pin in symbol.pins:
|
|
417
|
-
unit = getattr(pin,
|
|
463
|
+
unit = getattr(pin, "unit", 1)
|
|
418
464
|
if unit not in unit_pins:
|
|
419
465
|
unit_pins[unit] = []
|
|
420
466
|
unit_pins[unit].append(pin)
|
|
@@ -422,12 +468,14 @@ class SymbolValidator:
|
|
|
422
468
|
# Check for empty units
|
|
423
469
|
for unit_num in range(1, symbol.units + 1):
|
|
424
470
|
if unit_num not in unit_pins:
|
|
425
|
-
issues.append(
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
471
|
+
issues.append(
|
|
472
|
+
ValidationIssue(
|
|
473
|
+
category="symbol",
|
|
474
|
+
level="warning",
|
|
475
|
+
message=f"Unit {unit_num} has no pins",
|
|
476
|
+
context={"symbol": symbol.lib_id, "unit": unit_num},
|
|
477
|
+
)
|
|
478
|
+
)
|
|
431
479
|
|
|
432
480
|
return issues
|
|
433
481
|
|
|
@@ -446,8 +494,11 @@ class SymbolValidator:
|
|
|
446
494
|
"error_count": len([i for i in issues if i.level.value == "error"]),
|
|
447
495
|
"warning_count": len([i for i in issues if i.level.value == "warning"]),
|
|
448
496
|
"info_count": len([i for i in issues if i.level.value == "info"]),
|
|
449
|
-
"severity":
|
|
450
|
-
|
|
497
|
+
"severity": (
|
|
498
|
+
"error"
|
|
499
|
+
if any(i.level.value == "error" for i in issues)
|
|
500
|
+
else "warning" if any(i.level.value == "warning" for i in issues) else "info"
|
|
501
|
+
),
|
|
451
502
|
}
|
|
452
503
|
|
|
453
|
-
return summary
|
|
504
|
+
return summary
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kicad-sch-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Professional KiCAD schematic manipulation library with exact format preservation
|
|
5
5
|
Author-email: Circuit-Synth <shane@circuit-synth.com>
|
|
6
6
|
Maintainer-email: Circuit-Synth <shane@circuit-synth.com>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
kicad_sch_api/__init__.py,sha256=87qLx-VMQTBHDVq_CiXW-6wyKtvLFc3AsKQaoLKsIbs,2919
|
|
2
|
+
kicad_sch_api/cli.py,sha256=ZzmwzfHEvPgGfCiQBU4G2LBAyRtMNiBRoY21pivJSYc,7621
|
|
3
|
+
kicad_sch_api/py.typed,sha256=e4ldqxwpY7pNDG1olbvj4HSKr8sZ9vxgA_2ek8xXn-Q,70
|
|
4
|
+
kicad_sch_api/collections/__init__.py,sha256=I3DSWk0XmGE8J1fcTtiYOETaWrY-fFJPlz3UGUK2qXY,627
|
|
5
|
+
kicad_sch_api/collections/base.py,sha256=7p-WVLg-2_uBS7z7mzwkOpCMwlR_VJZGr2iW_Hd1K3Q,8386
|
|
6
|
+
kicad_sch_api/collections/components.py,sha256=ofH3P38Ube3uxVvk_28gJwJPsdL6KA37rgxWNig6BGM,14023
|
|
7
|
+
kicad_sch_api/collections/junctions.py,sha256=4bjuUKm-tCWSJJTtuPwgjYh0Xglg2SEG8IOAvhULgtg,11728
|
|
8
|
+
kicad_sch_api/collections/labels.py,sha256=zg6_xe4ifwIbc8M1E5MDGTh8Ps57oBeqbS9MclrvxKU,12266
|
|
9
|
+
kicad_sch_api/collections/wires.py,sha256=o2Y_KIwOmFMytdOc2MjgnoUrK4Woj7wR9ROj4uRTuY0,12394
|
|
10
|
+
kicad_sch_api/core/__init__.py,sha256=ur_KeYBlGKl-e1hLpLdxAhGV2A-PCCGkcqd0r6KSeBA,566
|
|
11
|
+
kicad_sch_api/core/component_bounds.py,sha256=BFYJYULyzs5it2hN7bHTimyS9Vet4dxsMklRStob-F4,17509
|
|
12
|
+
kicad_sch_api/core/components.py,sha256=ilwZfrWUXQjtT3yB3yxT-H0X64izU3aXP6TdPZdki2k,25393
|
|
13
|
+
kicad_sch_api/core/config.py,sha256=itw0j3DeIEHaFVf8p3mfAS1SP6jclBwvMv7NPdkThE4,4309
|
|
14
|
+
kicad_sch_api/core/formatter.py,sha256=RGN1Y1Ne5uBhKU4XRINVBb0ph6pm5Khycdv352r3cDw,22207
|
|
15
|
+
kicad_sch_api/core/geometry.py,sha256=27SgN0padLbQuTi8MV6UUCp6Pyaiv8V9gmYDOhfwny8,2947
|
|
16
|
+
kicad_sch_api/core/ic_manager.py,sha256=Kg0HIOMU-TGXiIkrnwcHFQ1Kfv_3rW2U1cwBKJsKopc,7219
|
|
17
|
+
kicad_sch_api/core/junctions.py,sha256=Ay6BsWX_DLs-wB0eMA2CytKKq0N8Ja41ZubJWpAqNgM,6122
|
|
18
|
+
kicad_sch_api/core/labels.py,sha256=hkqZVd7wudl1-uil9jHt4k3vy1ZSX5JAyTFXktGauLo,11094
|
|
19
|
+
kicad_sch_api/core/manhattan_routing.py,sha256=t_T2u0zsQB-a8dTijFmY-qFq-oDt2qDebYyXzD_pBWI,15989
|
|
20
|
+
kicad_sch_api/core/nets.py,sha256=9bO8A1dzSuJ8aZ26-PHbUiWi9KYx6LqoXQHEKTCR7VA,9588
|
|
21
|
+
kicad_sch_api/core/no_connects.py,sha256=LM__SeeK-0YPOLjkh1RXlBbaKnqehhbox7A8F6cUq0o,9426
|
|
22
|
+
kicad_sch_api/core/parser.py,sha256=K3Dh5J3YswlXNakbR0FVcTPpuW4VK6Yg2e1a-yxH0xI,96227
|
|
23
|
+
kicad_sch_api/core/pin_utils.py,sha256=XGEow3HzBTyT8a0B_ZC8foMvwzYaENSaqTUwDW1rz24,5417
|
|
24
|
+
kicad_sch_api/core/schematic.py,sha256=OXOlC7GDfYFc1FlYHIUnHHp19DbzhRWBnNJjlma2NAk,56063
|
|
25
|
+
kicad_sch_api/core/simple_manhattan.py,sha256=CvIHvwmfABPF-COzhblYxEgRoR_R_eD-lmBFHHjDuMI,7241
|
|
26
|
+
kicad_sch_api/core/texts.py,sha256=el_9pr9VN-8v7miSG0HvOVsGEsMrkXNKpzJIRNxZmQ0,10727
|
|
27
|
+
kicad_sch_api/core/types.py,sha256=tieyn5-L_hW6EnKR-bLVB_jtXV6NCNb0SbdYE2srW4s,14140
|
|
28
|
+
kicad_sch_api/core/wire_routing.py,sha256=G-C7S-ntQxwuu1z3OaaYlkURXwKE4r4xmhbbi6cvvaI,12830
|
|
29
|
+
kicad_sch_api/core/wires.py,sha256=608t9oH4UzppdGgNgUd-ABK6T-ahyETZwhO_-CuKFO8,8319
|
|
30
|
+
kicad_sch_api/core/managers/__init__.py,sha256=Ec9H9RSBFt2MeJIhnZFUN9sa2ql0BSrO8FNOa1XsXeU,731
|
|
31
|
+
kicad_sch_api/core/managers/file_io.py,sha256=dHHoi0BhIdpWmrpMQ0tdZJpbNd7dseytnY3UO-p5xWY,7605
|
|
32
|
+
kicad_sch_api/core/managers/format_sync.py,sha256=ar0FfhwXrU2l5ATV0aW5KtVRfIM2iM1WoyGvXQh-ShY,16963
|
|
33
|
+
kicad_sch_api/core/managers/graphics.py,sha256=-jd-JL1TOuDntNEQcSeJ56Ccrkuudmj1dJkRtLUtRog,18370
|
|
34
|
+
kicad_sch_api/core/managers/metadata.py,sha256=Mjv-YjdaWRq-XlDZNlqgcWTyE1v8H7yLUXGWc9f9g7Q,8058
|
|
35
|
+
kicad_sch_api/core/managers/sheet.py,sha256=jnnEBon0QmMh22-Ls7ZP5A_4FxM7bCyaJOF9AzZT1Kg,14816
|
|
36
|
+
kicad_sch_api/core/managers/text_elements.py,sha256=utZIg488x9NLQID6ALbOcI0ZM2PfvgADVJ1jcbGP9jk,17319
|
|
37
|
+
kicad_sch_api/core/managers/validation.py,sha256=Rz6e1m14Qxw1Izbqm7fAGySFOimfx9m5BWdnuomueg8,15792
|
|
38
|
+
kicad_sch_api/core/managers/wire.py,sha256=Uvrqnacl0SjEfLmBwHVoyq0KXTM5lz7TRPdIffmKaG4,11596
|
|
39
|
+
kicad_sch_api/discovery/__init__.py,sha256=qSuCsnC-hVtaLYE8fwd-Gea6JKwEVGPQ-hSNDNJYsIU,329
|
|
40
|
+
kicad_sch_api/discovery/search_index.py,sha256=KgQT8ipT9OU6ktUwhDZ37Mao0Cba0fJOsxUk9m8ZKbY,15856
|
|
41
|
+
kicad_sch_api/geometry/__init__.py,sha256=hTBXkn8mZZCjzDIrtPv67QsnCYB77L67JjthQgEIX7o,716
|
|
42
|
+
kicad_sch_api/geometry/font_metrics.py,sha256=3f5_9ifxtDUigLDiafglO2pCgPE7JFDKqa-0uhLPkoQ,839
|
|
43
|
+
kicad_sch_api/geometry/symbol_bbox.py,sha256=3zd9-M9ehue5_-Gpdm_Yht4W49CbE0YRsAhAzfqJGEg,24161
|
|
44
|
+
kicad_sch_api/interfaces/__init__.py,sha256=ukuLgCT16e0sPLmrGb4HB_3DhGU1YriDEkeRgEBsQIA,435
|
|
45
|
+
kicad_sch_api/interfaces/parser.py,sha256=J-b0czz1q_O81HlvIp3dHx53cm8UGSgQTd4xe5tBszk,2008
|
|
46
|
+
kicad_sch_api/interfaces/repository.py,sha256=wFnWUCut6wPV9yDDE9k6zkhhijRnflbLteeXYtcU-gM,1763
|
|
47
|
+
kicad_sch_api/interfaces/resolver.py,sha256=2_3et6VVnyZZ8VI5i-Q4C-4bBXKTAgYAEFxAFuOWEGw,2936
|
|
48
|
+
kicad_sch_api/library/__init__.py,sha256=NG9UTdcpn25Bl9tPsYs9ED7bvpaVPVdtLMbnxkQkOnU,250
|
|
49
|
+
kicad_sch_api/library/cache.py,sha256=7na88grl465WHwUOGuOzYrrWwjsMBXhXVtxhnaJ9GBY,33208
|
|
50
|
+
kicad_sch_api/parsers/__init__.py,sha256=4TFc2duJMy6iRuk2dYbW4b7s-9H525iAsGU674_2a-E,357
|
|
51
|
+
kicad_sch_api/parsers/base.py,sha256=vsKGxZkdzTNqrdbRPx11D4b3ebDm3LW65v2Xf4Q06_c,4569
|
|
52
|
+
kicad_sch_api/parsers/label_parser.py,sha256=E9A2FY_BBZtFRxoT7g0Pg09J0J87nHAlMuTK4selsGQ,8692
|
|
53
|
+
kicad_sch_api/parsers/registry.py,sha256=LoPvWIiGYysvTRtFfd8kWCXE0i535hoKYpdKs49Ygjs,5098
|
|
54
|
+
kicad_sch_api/parsers/symbol_parser.py,sha256=RpTPMMOfNVHjJbXOrlJyTFWeVBH64Fq-dndG1F9Y_70,8411
|
|
55
|
+
kicad_sch_api/parsers/wire_parser.py,sha256=xHSG-baXS0ncnv3TLjLnd9poXB4rhBdHmz6q99RadX8,3420
|
|
56
|
+
kicad_sch_api/symbols/__init__.py,sha256=NfakJ5-8AQxq5vi8nZVuaUtDpWHfwHm5AD4rC-p9BZI,501
|
|
57
|
+
kicad_sch_api/symbols/cache.py,sha256=pKFjmuyId-9gGPAue-1Rzy4MRsecoC4TMn0hn2n0Yqk,16204
|
|
58
|
+
kicad_sch_api/symbols/resolver.py,sha256=w0jqepp9RwWqlwQHX28FpTn1aSz8iOf7kcJUOBMHwqE,12074
|
|
59
|
+
kicad_sch_api/symbols/validators.py,sha256=5Ryt4rLHxDF3ALViaNLRrI3pYvOreVT51gpvhECTZms,17216
|
|
60
|
+
kicad_sch_api/utils/__init__.py,sha256=1V_yGgI7jro6MUc4Pviux_WIeJ1wmiYFID186SZwWLQ,277
|
|
61
|
+
kicad_sch_api/utils/validation.py,sha256=XlWGRZJb3cOPYpU9sLQQgC_NASwbi6W-LCN7PzUmaPY,15626
|
|
62
|
+
kicad_sch_api-0.4.0.dist-info/licenses/LICENSE,sha256=Em65Nvte1G9MHc0rHqtYuGkCPcshD588itTa358J6gs,1070
|
|
63
|
+
kicad_sch_api-0.4.0.dist-info/METADATA,sha256=my1z7F-NiRJw7Kh1c99d5bh0-ohJ8CuDNTfbxylPxwI,17183
|
|
64
|
+
kicad_sch_api-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
65
|
+
kicad_sch_api-0.4.0.dist-info/entry_points.txt,sha256=VWKsFi2Jv7G_tmio3cNVhhIBfv_OZFaKa-T_ED84lc8,57
|
|
66
|
+
kicad_sch_api-0.4.0.dist-info/top_level.txt,sha256=n0ex4gOJ1b_fARowcGqRzyOGZcHRhc5LZa6_vVgGxcI,14
|
|
67
|
+
kicad_sch_api-0.4.0.dist-info/RECORD,,
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
kicad_sch_api/__init__.py,sha256=87qLx-VMQTBHDVq_CiXW-6wyKtvLFc3AsKQaoLKsIbs,2919
|
|
2
|
-
kicad_sch_api/cli.py,sha256=ZzmwzfHEvPgGfCiQBU4G2LBAyRtMNiBRoY21pivJSYc,7621
|
|
3
|
-
kicad_sch_api/py.typed,sha256=e4ldqxwpY7pNDG1olbvj4HSKr8sZ9vxgA_2ek8xXn-Q,70
|
|
4
|
-
kicad_sch_api/collections/__init__.py,sha256=VqVucNyFa6E86TX6z0EmJirjFU2scinMdOlIIzHzljc,626
|
|
5
|
-
kicad_sch_api/collections/base.py,sha256=b1U7gIFOP0YEajUXc499aOoCBGm6UUsWUUj3-DiI0gs,8417
|
|
6
|
-
kicad_sch_api/collections/components.py,sha256=7SKTVWnWvzqDkFtLemYd7iC1MaKjB7dpqmPjtNQVIxQ,13888
|
|
7
|
-
kicad_sch_api/collections/junctions.py,sha256=pSNWNDe4TZ8C1t0jC0BcMP3kzx15g4LaHBJwSrETsgU,11770
|
|
8
|
-
kicad_sch_api/collections/labels.py,sha256=dGmlSOHON5YA0C1CfjT-mMutg10FGB4j5eyikA3LGT4,12314
|
|
9
|
-
kicad_sch_api/collections/wires.py,sha256=OkCxvkljrq3AdjQD9iRpIsMqx3-RRPhnlOvoZaaFpd8,12375
|
|
10
|
-
kicad_sch_api/core/__init__.py,sha256=ur_KeYBlGKl-e1hLpLdxAhGV2A-PCCGkcqd0r6KSeBA,566
|
|
11
|
-
kicad_sch_api/core/component_bounds.py,sha256=BFYJYULyzs5it2hN7bHTimyS9Vet4dxsMklRStob-F4,17509
|
|
12
|
-
kicad_sch_api/core/components.py,sha256=tXRL18GObl2u94wl5jP-1ID56s_UD9F1gQ_iRIyZ_Kw,25290
|
|
13
|
-
kicad_sch_api/core/config.py,sha256=itw0j3DeIEHaFVf8p3mfAS1SP6jclBwvMv7NPdkThE4,4309
|
|
14
|
-
kicad_sch_api/core/formatter.py,sha256=zzZi0f06C1YWUy5l0WFS9G4KRTEzmAY3rFK3XGocvCo,22185
|
|
15
|
-
kicad_sch_api/core/geometry.py,sha256=27SgN0padLbQuTi8MV6UUCp6Pyaiv8V9gmYDOhfwny8,2947
|
|
16
|
-
kicad_sch_api/core/ic_manager.py,sha256=Kg0HIOMU-TGXiIkrnwcHFQ1Kfv_3rW2U1cwBKJsKopc,7219
|
|
17
|
-
kicad_sch_api/core/junctions.py,sha256=Ay6BsWX_DLs-wB0eMA2CytKKq0N8Ja41ZubJWpAqNgM,6122
|
|
18
|
-
kicad_sch_api/core/labels.py,sha256=jOg2NSCkD7CvOwOubezzCDFMM7NM4kXoxBkcSZQrUio,11093
|
|
19
|
-
kicad_sch_api/core/manhattan_routing.py,sha256=t_T2u0zsQB-a8dTijFmY-qFq-oDt2qDebYyXzD_pBWI,15989
|
|
20
|
-
kicad_sch_api/core/nets.py,sha256=0kaYvRylAwP7XDuhTsONA-QuLu141C3Q9Cyu0plds94,9587
|
|
21
|
-
kicad_sch_api/core/no_connects.py,sha256=kyvIkLuN4bizqacKb_a80kQvQ3HOpdCDcxIxby15dQE,9411
|
|
22
|
-
kicad_sch_api/core/parser.py,sha256=UY_GNX1yHd3xgTVqZ9TZe1u94q4YZBo-NibsSH8Jy44,94983
|
|
23
|
-
kicad_sch_api/core/pin_utils.py,sha256=XGEow3HzBTyT8a0B_ZC8foMvwzYaENSaqTUwDW1rz24,5417
|
|
24
|
-
kicad_sch_api/core/schematic.py,sha256=Y1EnWifc_xjI9bHsHW3gwgQWwOrhRCXkIRKSomTBfA4,67496
|
|
25
|
-
kicad_sch_api/core/simple_manhattan.py,sha256=CvIHvwmfABPF-COzhblYxEgRoR_R_eD-lmBFHHjDuMI,7241
|
|
26
|
-
kicad_sch_api/core/texts.py,sha256=NUKoqldVI771w6aTCCNssuqyOLFGFSsRduD8iewBFQA,10726
|
|
27
|
-
kicad_sch_api/core/types.py,sha256=DfXbIdw76nZZCQlat30wNzmec7oBUWnjHoWHjmo32Qc,14174
|
|
28
|
-
kicad_sch_api/core/wire_routing.py,sha256=G-C7S-ntQxwuu1z3OaaYlkURXwKE4r4xmhbbi6cvvaI,12830
|
|
29
|
-
kicad_sch_api/core/wires.py,sha256=608t9oH4UzppdGgNgUd-ABK6T-ahyETZwhO_-CuKFO8,8319
|
|
30
|
-
kicad_sch_api/discovery/__init__.py,sha256=qSuCsnC-hVtaLYE8fwd-Gea6JKwEVGPQ-hSNDNJYsIU,329
|
|
31
|
-
kicad_sch_api/discovery/search_index.py,sha256=KgQT8ipT9OU6ktUwhDZ37Mao0Cba0fJOsxUk9m8ZKbY,15856
|
|
32
|
-
kicad_sch_api/geometry/__init__.py,sha256=hTBXkn8mZZCjzDIrtPv67QsnCYB77L67JjthQgEIX7o,716
|
|
33
|
-
kicad_sch_api/geometry/font_metrics.py,sha256=qqnfBuRqiLQDnGkk64rKzdyvuSNU0uBfdp0TKEgzXds,831
|
|
34
|
-
kicad_sch_api/geometry/symbol_bbox.py,sha256=ewd1HmGNae68zlxYnF2JMCvvjf53p1f6mXlpl0ixQq4,23902
|
|
35
|
-
kicad_sch_api/interfaces/__init__.py,sha256=X85PQ2-ic4796xuTSUxnZP8iiliVzGTM2nCAylicTMw,434
|
|
36
|
-
kicad_sch_api/interfaces/parser.py,sha256=y06cJsJ_OB2SgYZeqaix77j1m_pND3N0bBQVTvIl7gI,2007
|
|
37
|
-
kicad_sch_api/interfaces/repository.py,sha256=qN-jCymSFIgGgWTBWrFGSrLNVXuFRr1mPXvpNmLrXH0,1762
|
|
38
|
-
kicad_sch_api/interfaces/resolver.py,sha256=St1mCvRem661Bt1H_gPiWQxIaD1edkFEoNfn41Txmoo,2935
|
|
39
|
-
kicad_sch_api/library/__init__.py,sha256=NG9UTdcpn25Bl9tPsYs9ED7bvpaVPVdtLMbnxkQkOnU,250
|
|
40
|
-
kicad_sch_api/library/cache.py,sha256=7na88grl465WHwUOGuOzYrrWwjsMBXhXVtxhnaJ9GBY,33208
|
|
41
|
-
kicad_sch_api/parsers/__init__.py,sha256=8GwbDcj1iJnGjcqXEwqqbRbIBr163_SqdntY6CP1K-g,356
|
|
42
|
-
kicad_sch_api/parsers/base.py,sha256=P4MPkowJibbrGWoZ2fvpgx5ZS9vQ4FsiJqXTBRx3WX0,4633
|
|
43
|
-
kicad_sch_api/parsers/label_parser.py,sha256=K9xxh_ZHvVFf4C51KvdSwR-WtmNsS0PSCQ6zrkbUpXg,8685
|
|
44
|
-
kicad_sch_api/parsers/registry.py,sha256=J1i5WQY-AS5jGxYKvcTNW01c368VV4VeGCmh-6ye89w,5067
|
|
45
|
-
kicad_sch_api/parsers/symbol_parser.py,sha256=FWGSYYKWBInXv9v8EsqFbuapfs-K4jf6PQFvbWkK9eU,8465
|
|
46
|
-
kicad_sch_api/parsers/wire_parser.py,sha256=AEVc8Z-qghTGKSY1CFGEnjXeBX7dDVENQxvLsBFzxqI,3418
|
|
47
|
-
kicad_sch_api/symbols/__init__.py,sha256=VXZeUUHajFtXexFw6ZrLPxL231JN4Z9ZOchYZSHkrH0,500
|
|
48
|
-
kicad_sch_api/symbols/cache.py,sha256=UOy8r02eWtBtbovcYNs-cWUYKhkaAzQHPmOLm_0tcBw,16221
|
|
49
|
-
kicad_sch_api/symbols/resolver.py,sha256=CsvCzEzXa869IzJoD0k_BsRj_bAATJo4O4WO48IyuYs,12090
|
|
50
|
-
kicad_sch_api/symbols/validators.py,sha256=Uu5VueSexLDPElx1nen7KuOs250tXEwYedHid7a5WsM,15836
|
|
51
|
-
kicad_sch_api/utils/__init__.py,sha256=1V_yGgI7jro6MUc4Pviux_WIeJ1wmiYFID186SZwWLQ,277
|
|
52
|
-
kicad_sch_api/utils/validation.py,sha256=XlWGRZJb3cOPYpU9sLQQgC_NASwbi6W-LCN7PzUmaPY,15626
|
|
53
|
-
kicad_sch_api-0.3.5.dist-info/licenses/LICENSE,sha256=Em65Nvte1G9MHc0rHqtYuGkCPcshD588itTa358J6gs,1070
|
|
54
|
-
kicad_sch_api-0.3.5.dist-info/METADATA,sha256=uxxdX5QZHo_K2VohvK4cWFDO8G0hEV03uRoo8Wt2hd8,17183
|
|
55
|
-
kicad_sch_api-0.3.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
56
|
-
kicad_sch_api-0.3.5.dist-info/entry_points.txt,sha256=VWKsFi2Jv7G_tmio3cNVhhIBfv_OZFaKa-T_ED84lc8,57
|
|
57
|
-
kicad_sch_api-0.3.5.dist-info/top_level.txt,sha256=n0ex4gOJ1b_fARowcGqRzyOGZcHRhc5LZa6_vVgGxcI,14
|
|
58
|
-
kicad_sch_api-0.3.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|