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.

Files changed (47) hide show
  1. kicad_sch_api/collections/__init__.py +2 -2
  2. kicad_sch_api/collections/base.py +5 -7
  3. kicad_sch_api/collections/components.py +24 -12
  4. kicad_sch_api/collections/junctions.py +31 -43
  5. kicad_sch_api/collections/labels.py +19 -27
  6. kicad_sch_api/collections/wires.py +17 -18
  7. kicad_sch_api/core/components.py +5 -0
  8. kicad_sch_api/core/formatter.py +3 -1
  9. kicad_sch_api/core/labels.py +2 -2
  10. kicad_sch_api/core/managers/__init__.py +26 -0
  11. kicad_sch_api/core/managers/file_io.py +243 -0
  12. kicad_sch_api/core/managers/format_sync.py +501 -0
  13. kicad_sch_api/core/managers/graphics.py +579 -0
  14. kicad_sch_api/core/managers/metadata.py +268 -0
  15. kicad_sch_api/core/managers/sheet.py +454 -0
  16. kicad_sch_api/core/managers/text_elements.py +536 -0
  17. kicad_sch_api/core/managers/validation.py +474 -0
  18. kicad_sch_api/core/managers/wire.py +346 -0
  19. kicad_sch_api/core/nets.py +1 -1
  20. kicad_sch_api/core/no_connects.py +5 -3
  21. kicad_sch_api/core/parser.py +75 -41
  22. kicad_sch_api/core/schematic.py +779 -1083
  23. kicad_sch_api/core/texts.py +1 -1
  24. kicad_sch_api/core/types.py +1 -4
  25. kicad_sch_api/geometry/font_metrics.py +3 -1
  26. kicad_sch_api/geometry/symbol_bbox.py +40 -21
  27. kicad_sch_api/interfaces/__init__.py +1 -1
  28. kicad_sch_api/interfaces/parser.py +1 -1
  29. kicad_sch_api/interfaces/repository.py +1 -1
  30. kicad_sch_api/interfaces/resolver.py +1 -1
  31. kicad_sch_api/parsers/__init__.py +2 -2
  32. kicad_sch_api/parsers/base.py +7 -10
  33. kicad_sch_api/parsers/label_parser.py +7 -7
  34. kicad_sch_api/parsers/registry.py +4 -2
  35. kicad_sch_api/parsers/symbol_parser.py +5 -10
  36. kicad_sch_api/parsers/wire_parser.py +2 -2
  37. kicad_sch_api/symbols/__init__.py +1 -1
  38. kicad_sch_api/symbols/cache.py +9 -12
  39. kicad_sch_api/symbols/resolver.py +20 -26
  40. kicad_sch_api/symbols/validators.py +188 -137
  41. {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/METADATA +1 -1
  42. kicad_sch_api-0.4.0.dist-info/RECORD +67 -0
  43. kicad_sch_api-0.3.5.dist-info/RECORD +0 -58
  44. {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/WHEEL +0 -0
  45. {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/entry_points.txt +0 -0
  46. {kicad_sch_api-0.3.5.dist-info → kicad_sch_api-0.4.0.dist-info}/licenses/LICENSE +0 -0
  47. {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(ValidationIssue(
55
- category="validation",
56
- message=f"Validation rule '{rule_name}' failed: {e}",
57
- level="error",
58
- context={"symbol": symbol.lib_id, "rule": rule_name}
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(ValidationIssue(
103
- category="inheritance",
104
- message="Cannot validate inheritance without cache",
105
- level="warning",
106
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
117
- category="inheritance",
118
- message=f"Circular inheritance detected in chain starting from {symbol.lib_id}",
119
- level="error",
120
- context={"symbol": symbol.lib_id, "cycle_point": current_lib_id}
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(ValidationIssue(
129
- category="inheritance",
130
- message=f"Missing symbol in inheritance chain: {current_lib_id}",
131
- level="error",
132
- context={"symbol": symbol.lib_id, "missing": current_lib_id}
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(ValidationIssue(
149
- category="inheritance",
150
- message=f"Parent symbol not found: {current_lib_id}",
151
- level="error",
152
- context={"symbol": symbol.lib_id, "parent": current_lib_id}
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(ValidationIssue(
203
- category="lib_id",
204
- message=f"Invalid lib_id format: {symbol.lib_id}",
205
- level="error",
206
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
217
- category="required_fields",
218
- message="Symbol name is required",
219
- level="error",
220
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
225
- category="required_fields",
226
- message="Symbol library is required",
227
- level="error",
228
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
233
- category="required_fields",
234
- message="Symbol reference prefix is missing",
235
- level="warning",
236
- context={"symbol": symbol.lib_id}
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("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_")
265
+ invalid_chars = set(symbol.reference_prefix) - set(
266
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
267
+ )
248
268
  if invalid_chars:
249
- issues.append(ValidationIssue(
250
- category="reference_prefix",
251
- message=f"Reference prefix contains invalid characters: {invalid_chars}",
252
- level="warning",
253
- context={"symbol": symbol.lib_id, "prefix": symbol.reference_prefix}
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(ValidationIssue(
259
- category="reference_prefix",
260
- message="Generic IC prefix 'U' - consider adding description",
261
- level="info",
262
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
296
+ issues.append(
297
+ ValidationIssue(
273
298
  category="symbol",
274
299
  level="warning",
275
- message="Symbol has no pins defined",
276
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
311
+ issues.append(
312
+ ValidationIssue(
286
313
  category="symbol",
287
314
  level="error",
288
- message=f"Duplicate pin numbers found: {duplicates}",
289
- context={"symbol": symbol.lib_id, "duplicates": list(duplicates)}
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(ValidationIssue(
298
- category="symbol",
299
- level="warning",
300
- message=f"Pins at same position: {symbol.pins[i].number} and {symbol.pins[j].number}",
301
- context={"symbol": symbol.lib_id, "position": pos1}
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(ValidationIssue(
341
+ issues.append(
342
+ ValidationIssue(
312
343
  category="symbol",
313
344
  level="error",
314
- message=f"Invalid unit count: {symbol.units}",
315
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
323
- category="symbol",
324
- level="warning",
325
- message=f"Unit name defined for invalid unit number: {unit_num}",
326
- context={"symbol": symbol.lib_id, "unit": unit_num}
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(ValidationIssue(
339
- category="symbol",
340
- level="error",
341
- message="Empty extends directive",
342
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
348
- category="symbol",
349
- level="error",
350
- message="Symbol cannot extend itself",
351
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
364
- category="symbol",
365
- level="error",
366
- message="Pin missing number",
367
- context={"symbol": symbol.lib_id}
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(ValidationIssue(
373
- category="symbol",
374
- level="warning",
375
- message=f"Pin {pin.number} missing name",
376
- context={"symbol": symbol.lib_id, "pin": pin.number}
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, 'pin_type') or not pin.pin_type:
381
- issues.append(ValidationIssue(
382
- category="symbol",
383
- level="warning",
384
- message=f"Pin {pin.number} missing pin type",
385
- context={"symbol": symbol.lib_id, "pin": pin.number}
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(ValidationIssue(
439
+ issues.append(
440
+ ValidationIssue(
396
441
  category="symbol",
397
442
  level="info",
398
- message="Symbol has no graphic elements",
399
- context={"symbol": symbol.lib_id}
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, 'unit', 1)
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(ValidationIssue(
426
- category="symbol",
427
- level="warning",
428
- message=f"Unit {unit_num} has no pins",
429
- context={"symbol": symbol.lib_id, "unit": unit_num}
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": "error" if any(i.level.value == "error" for i in issues) else
450
- "warning" if any(i.level.value == "warning" for i in issues) else "info"
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.5
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,,