kicad-sch-api 0.3.0__py3-none-any.whl → 0.5.1__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.
Files changed (112) hide show
  1. kicad_sch_api/__init__.py +68 -3
  2. kicad_sch_api/cli/__init__.py +45 -0
  3. kicad_sch_api/cli/base.py +302 -0
  4. kicad_sch_api/cli/bom.py +164 -0
  5. kicad_sch_api/cli/erc.py +229 -0
  6. kicad_sch_api/cli/export_docs.py +289 -0
  7. kicad_sch_api/cli/kicad_to_python.py +169 -0
  8. kicad_sch_api/cli/netlist.py +94 -0
  9. kicad_sch_api/cli/types.py +43 -0
  10. kicad_sch_api/collections/__init__.py +36 -0
  11. kicad_sch_api/collections/base.py +604 -0
  12. kicad_sch_api/collections/components.py +1623 -0
  13. kicad_sch_api/collections/junctions.py +206 -0
  14. kicad_sch_api/collections/labels.py +508 -0
  15. kicad_sch_api/collections/wires.py +292 -0
  16. kicad_sch_api/core/__init__.py +37 -2
  17. kicad_sch_api/core/collections/__init__.py +5 -0
  18. kicad_sch_api/core/collections/base.py +248 -0
  19. kicad_sch_api/core/component_bounds.py +34 -7
  20. kicad_sch_api/core/components.py +213 -52
  21. kicad_sch_api/core/config.py +110 -15
  22. kicad_sch_api/core/connectivity.py +692 -0
  23. kicad_sch_api/core/exceptions.py +175 -0
  24. kicad_sch_api/core/factories/__init__.py +5 -0
  25. kicad_sch_api/core/factories/element_factory.py +278 -0
  26. kicad_sch_api/core/formatter.py +60 -9
  27. kicad_sch_api/core/geometry.py +94 -5
  28. kicad_sch_api/core/junctions.py +26 -75
  29. kicad_sch_api/core/labels.py +324 -0
  30. kicad_sch_api/core/managers/__init__.py +30 -0
  31. kicad_sch_api/core/managers/base.py +76 -0
  32. kicad_sch_api/core/managers/file_io.py +246 -0
  33. kicad_sch_api/core/managers/format_sync.py +502 -0
  34. kicad_sch_api/core/managers/graphics.py +580 -0
  35. kicad_sch_api/core/managers/hierarchy.py +661 -0
  36. kicad_sch_api/core/managers/metadata.py +271 -0
  37. kicad_sch_api/core/managers/sheet.py +492 -0
  38. kicad_sch_api/core/managers/text_elements.py +537 -0
  39. kicad_sch_api/core/managers/validation.py +476 -0
  40. kicad_sch_api/core/managers/wire.py +410 -0
  41. kicad_sch_api/core/nets.py +305 -0
  42. kicad_sch_api/core/no_connects.py +252 -0
  43. kicad_sch_api/core/parser.py +194 -970
  44. kicad_sch_api/core/parsing_utils.py +63 -0
  45. kicad_sch_api/core/pin_utils.py +103 -9
  46. kicad_sch_api/core/schematic.py +1328 -1079
  47. kicad_sch_api/core/texts.py +316 -0
  48. kicad_sch_api/core/types.py +159 -23
  49. kicad_sch_api/core/wires.py +27 -75
  50. kicad_sch_api/exporters/__init__.py +10 -0
  51. kicad_sch_api/exporters/python_generator.py +610 -0
  52. kicad_sch_api/exporters/templates/default.py.jinja2 +65 -0
  53. kicad_sch_api/geometry/__init__.py +38 -0
  54. kicad_sch_api/geometry/font_metrics.py +22 -0
  55. kicad_sch_api/geometry/routing.py +211 -0
  56. kicad_sch_api/geometry/symbol_bbox.py +608 -0
  57. kicad_sch_api/interfaces/__init__.py +17 -0
  58. kicad_sch_api/interfaces/parser.py +76 -0
  59. kicad_sch_api/interfaces/repository.py +70 -0
  60. kicad_sch_api/interfaces/resolver.py +117 -0
  61. kicad_sch_api/parsers/__init__.py +14 -0
  62. kicad_sch_api/parsers/base.py +145 -0
  63. kicad_sch_api/parsers/elements/__init__.py +22 -0
  64. kicad_sch_api/parsers/elements/graphics_parser.py +564 -0
  65. kicad_sch_api/parsers/elements/label_parser.py +216 -0
  66. kicad_sch_api/parsers/elements/library_parser.py +165 -0
  67. kicad_sch_api/parsers/elements/metadata_parser.py +58 -0
  68. kicad_sch_api/parsers/elements/sheet_parser.py +352 -0
  69. kicad_sch_api/parsers/elements/symbol_parser.py +485 -0
  70. kicad_sch_api/parsers/elements/text_parser.py +250 -0
  71. kicad_sch_api/parsers/elements/wire_parser.py +242 -0
  72. kicad_sch_api/parsers/registry.py +155 -0
  73. kicad_sch_api/parsers/utils.py +80 -0
  74. kicad_sch_api/symbols/__init__.py +18 -0
  75. kicad_sch_api/symbols/cache.py +467 -0
  76. kicad_sch_api/symbols/resolver.py +361 -0
  77. kicad_sch_api/symbols/validators.py +504 -0
  78. kicad_sch_api/utils/logging.py +555 -0
  79. kicad_sch_api/utils/logging_decorators.py +587 -0
  80. kicad_sch_api/utils/validation.py +16 -22
  81. kicad_sch_api/validation/__init__.py +25 -0
  82. kicad_sch_api/validation/erc.py +171 -0
  83. kicad_sch_api/validation/erc_models.py +203 -0
  84. kicad_sch_api/validation/pin_matrix.py +243 -0
  85. kicad_sch_api/validation/validators.py +391 -0
  86. kicad_sch_api/wrappers/__init__.py +14 -0
  87. kicad_sch_api/wrappers/base.py +89 -0
  88. kicad_sch_api/wrappers/wire.py +198 -0
  89. kicad_sch_api-0.5.1.dist-info/METADATA +540 -0
  90. kicad_sch_api-0.5.1.dist-info/RECORD +114 -0
  91. kicad_sch_api-0.5.1.dist-info/entry_points.txt +4 -0
  92. {kicad_sch_api-0.3.0.dist-info → kicad_sch_api-0.5.1.dist-info}/top_level.txt +1 -0
  93. mcp_server/__init__.py +34 -0
  94. mcp_server/example_logging_integration.py +506 -0
  95. mcp_server/models.py +252 -0
  96. mcp_server/server.py +357 -0
  97. mcp_server/tools/__init__.py +32 -0
  98. mcp_server/tools/component_tools.py +516 -0
  99. mcp_server/tools/connectivity_tools.py +532 -0
  100. mcp_server/tools/consolidated_tools.py +1216 -0
  101. mcp_server/tools/pin_discovery.py +333 -0
  102. mcp_server/utils/__init__.py +38 -0
  103. mcp_server/utils/logging.py +127 -0
  104. mcp_server/utils.py +36 -0
  105. kicad_sch_api/core/manhattan_routing.py +0 -430
  106. kicad_sch_api/core/simple_manhattan.py +0 -228
  107. kicad_sch_api/core/wire_routing.py +0 -380
  108. kicad_sch_api-0.3.0.dist-info/METADATA +0 -483
  109. kicad_sch_api-0.3.0.dist-info/RECORD +0 -31
  110. kicad_sch_api-0.3.0.dist-info/entry_points.txt +0 -2
  111. {kicad_sch_api-0.3.0.dist-info → kicad_sch_api-0.5.1.dist-info}/WHEEL +0 -0
  112. {kicad_sch_api-0.3.0.dist-info → kicad_sch_api-0.5.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,94 @@
1
+ """Netlist export functionality using kicad-cli."""
2
+
3
+ from pathlib import Path
4
+ from typing import Optional
5
+
6
+ from kicad_sch_api.cli.base import KiCadExecutor
7
+ from kicad_sch_api.cli.types import NetlistFormat
8
+
9
+
10
+ def export_netlist(
11
+ schematic_path: Path,
12
+ output_path: Optional[Path] = None,
13
+ format: NetlistFormat = "kicadsexpr",
14
+ executor: Optional[KiCadExecutor] = None,
15
+ ) -> Path:
16
+ """
17
+ Export netlist from schematic using kicad-cli.
18
+
19
+ Supports 8 different netlist formats for PCB layout and simulation.
20
+
21
+ Args:
22
+ schematic_path: Path to .kicad_sch file
23
+ output_path: Output netlist path (auto-generated if None)
24
+ format: Netlist format (see NetlistFormat for options)
25
+ executor: Custom KiCadExecutor instance (creates default if None)
26
+
27
+ Returns:
28
+ Path to generated netlist file
29
+
30
+ Raises:
31
+ RuntimeError: If kicad-cli not found or netlist generation fails
32
+ FileNotFoundError: If schematic file doesn't exist
33
+
34
+ Example:
35
+ >>> from pathlib import Path
36
+ >>> netlist = export_netlist(
37
+ ... Path('circuit.kicad_sch'),
38
+ ... format='spice'
39
+ ... )
40
+ >>> print(f"Netlist: {netlist}")
41
+
42
+ Supported formats:
43
+ - kicadsexpr: KiCad S-expression netlist (default)
44
+ - kicadxml: KiCad XML netlist
45
+ - cadstar: Cadstar format
46
+ - orcadpcb2: OrCAD PCB2 format
47
+ - spice: SPICE netlist
48
+ - spicemodel: SPICE with models
49
+ - pads: PADS format
50
+ - allegro: Allegro format
51
+ """
52
+ schematic_path = Path(schematic_path)
53
+
54
+ if not schematic_path.exists():
55
+ raise FileNotFoundError(f"Schematic not found: {schematic_path}")
56
+
57
+ # Auto-generate output path if not provided
58
+ if output_path is None:
59
+ ext = _get_extension_for_format(format)
60
+ output_path = schematic_path.with_suffix(ext)
61
+ else:
62
+ output_path = Path(output_path)
63
+
64
+ # Create executor if not provided
65
+ if executor is None:
66
+ executor = KiCadExecutor()
67
+
68
+ # Build command
69
+ args = [
70
+ "sch", "export", "netlist",
71
+ "--format", format,
72
+ "--output", str(output_path),
73
+ str(schematic_path),
74
+ ]
75
+
76
+ # Execute command
77
+ executor.run(args, cwd=schematic_path.parent)
78
+
79
+ return output_path
80
+
81
+
82
+ def _get_extension_for_format(format: NetlistFormat) -> str:
83
+ """Get file extension for netlist format."""
84
+ extensions = {
85
+ "kicadsexpr": ".net",
86
+ "kicadxml": ".xml",
87
+ "cadstar": ".frp",
88
+ "orcadpcb2": ".net",
89
+ "spice": ".cir",
90
+ "spicemodel": ".cir",
91
+ "pads": ".asc",
92
+ "allegro": ".alg",
93
+ }
94
+ return extensions.get(format, ".net")
@@ -0,0 +1,43 @@
1
+ """Type definitions for KiCad CLI operations."""
2
+
3
+ from typing import Literal
4
+
5
+ # Netlist export formats
6
+ NetlistFormat = Literal[
7
+ "kicadsexpr", # KiCad S-expression netlist (default)
8
+ "kicadxml", # KiCad XML netlist
9
+ "cadstar", # Cadstar format
10
+ "orcadpcb2", # OrCAD PCB2 format
11
+ "spice", # SPICE netlist
12
+ "spicemodel", # SPICE with models
13
+ "pads", # PADS format
14
+ "allegro", # Allegro format
15
+ ]
16
+
17
+ # ERC (Electrical Rule Check) formats
18
+ ErcFormat = Literal[
19
+ "json", # JSON format (machine-readable)
20
+ "report", # Human-readable text report
21
+ ]
22
+
23
+ # ERC severity levels
24
+ ErcSeverity = Literal[
25
+ "all", # Report all violations
26
+ "error", # Error level only
27
+ "warning", # Warning level only
28
+ "exclusions", # Excluded violations only
29
+ ]
30
+
31
+ # Units for measurements
32
+ Units = Literal[
33
+ "mm", # Millimeters (default)
34
+ "in", # Inches
35
+ "mils", # Mils (1/1000 inch)
36
+ ]
37
+
38
+ # Execution modes
39
+ ExecutionMode = Literal[
40
+ "auto", # Auto-detect (try local, fall back to Docker)
41
+ "local", # Force local kicad-cli
42
+ "docker", # Force Docker mode
43
+ ]
@@ -0,0 +1,36 @@
1
+ """
2
+ Modern collection architecture for KiCAD schematic elements.
3
+
4
+ This module provides a unified collection framework with:
5
+ - Centralized index management via IndexRegistry
6
+ - Lazy index rebuilding for performance
7
+ - Configurable validation levels
8
+ - Auto-tracking property dictionaries
9
+ - Batch mode for bulk operations
10
+ """
11
+
12
+ from .base import (
13
+ BaseCollection,
14
+ IndexSpec,
15
+ IndexRegistry,
16
+ PropertyDict,
17
+ ValidationLevel,
18
+ )
19
+ from .components import Component, ComponentCollection
20
+ from .junctions import JunctionCollection
21
+ from .labels import LabelCollection, LabelElement
22
+ from .wires import WireCollection
23
+
24
+ __all__ = [
25
+ "BaseCollection",
26
+ "IndexSpec",
27
+ "IndexRegistry",
28
+ "PropertyDict",
29
+ "ValidationLevel",
30
+ "Component",
31
+ "ComponentCollection",
32
+ "JunctionCollection",
33
+ "LabelCollection",
34
+ "LabelElement",
35
+ "WireCollection",
36
+ ]