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.
- kicad_sch_api/__init__.py +68 -3
- kicad_sch_api/cli/__init__.py +45 -0
- kicad_sch_api/cli/base.py +302 -0
- kicad_sch_api/cli/bom.py +164 -0
- kicad_sch_api/cli/erc.py +229 -0
- kicad_sch_api/cli/export_docs.py +289 -0
- kicad_sch_api/cli/kicad_to_python.py +169 -0
- kicad_sch_api/cli/netlist.py +94 -0
- kicad_sch_api/cli/types.py +43 -0
- kicad_sch_api/collections/__init__.py +36 -0
- kicad_sch_api/collections/base.py +604 -0
- kicad_sch_api/collections/components.py +1623 -0
- kicad_sch_api/collections/junctions.py +206 -0
- kicad_sch_api/collections/labels.py +508 -0
- kicad_sch_api/collections/wires.py +292 -0
- kicad_sch_api/core/__init__.py +37 -2
- kicad_sch_api/core/collections/__init__.py +5 -0
- kicad_sch_api/core/collections/base.py +248 -0
- kicad_sch_api/core/component_bounds.py +34 -7
- kicad_sch_api/core/components.py +213 -52
- kicad_sch_api/core/config.py +110 -15
- kicad_sch_api/core/connectivity.py +692 -0
- kicad_sch_api/core/exceptions.py +175 -0
- kicad_sch_api/core/factories/__init__.py +5 -0
- kicad_sch_api/core/factories/element_factory.py +278 -0
- kicad_sch_api/core/formatter.py +60 -9
- kicad_sch_api/core/geometry.py +94 -5
- kicad_sch_api/core/junctions.py +26 -75
- kicad_sch_api/core/labels.py +324 -0
- kicad_sch_api/core/managers/__init__.py +30 -0
- kicad_sch_api/core/managers/base.py +76 -0
- kicad_sch_api/core/managers/file_io.py +246 -0
- kicad_sch_api/core/managers/format_sync.py +502 -0
- kicad_sch_api/core/managers/graphics.py +580 -0
- kicad_sch_api/core/managers/hierarchy.py +661 -0
- kicad_sch_api/core/managers/metadata.py +271 -0
- kicad_sch_api/core/managers/sheet.py +492 -0
- kicad_sch_api/core/managers/text_elements.py +537 -0
- kicad_sch_api/core/managers/validation.py +476 -0
- kicad_sch_api/core/managers/wire.py +410 -0
- kicad_sch_api/core/nets.py +305 -0
- kicad_sch_api/core/no_connects.py +252 -0
- kicad_sch_api/core/parser.py +194 -970
- kicad_sch_api/core/parsing_utils.py +63 -0
- kicad_sch_api/core/pin_utils.py +103 -9
- kicad_sch_api/core/schematic.py +1328 -1079
- kicad_sch_api/core/texts.py +316 -0
- kicad_sch_api/core/types.py +159 -23
- kicad_sch_api/core/wires.py +27 -75
- kicad_sch_api/exporters/__init__.py +10 -0
- kicad_sch_api/exporters/python_generator.py +610 -0
- kicad_sch_api/exporters/templates/default.py.jinja2 +65 -0
- kicad_sch_api/geometry/__init__.py +38 -0
- kicad_sch_api/geometry/font_metrics.py +22 -0
- kicad_sch_api/geometry/routing.py +211 -0
- kicad_sch_api/geometry/symbol_bbox.py +608 -0
- kicad_sch_api/interfaces/__init__.py +17 -0
- kicad_sch_api/interfaces/parser.py +76 -0
- kicad_sch_api/interfaces/repository.py +70 -0
- kicad_sch_api/interfaces/resolver.py +117 -0
- kicad_sch_api/parsers/__init__.py +14 -0
- kicad_sch_api/parsers/base.py +145 -0
- kicad_sch_api/parsers/elements/__init__.py +22 -0
- kicad_sch_api/parsers/elements/graphics_parser.py +564 -0
- kicad_sch_api/parsers/elements/label_parser.py +216 -0
- kicad_sch_api/parsers/elements/library_parser.py +165 -0
- kicad_sch_api/parsers/elements/metadata_parser.py +58 -0
- kicad_sch_api/parsers/elements/sheet_parser.py +352 -0
- kicad_sch_api/parsers/elements/symbol_parser.py +485 -0
- kicad_sch_api/parsers/elements/text_parser.py +250 -0
- kicad_sch_api/parsers/elements/wire_parser.py +242 -0
- kicad_sch_api/parsers/registry.py +155 -0
- kicad_sch_api/parsers/utils.py +80 -0
- kicad_sch_api/symbols/__init__.py +18 -0
- kicad_sch_api/symbols/cache.py +467 -0
- kicad_sch_api/symbols/resolver.py +361 -0
- kicad_sch_api/symbols/validators.py +504 -0
- kicad_sch_api/utils/logging.py +555 -0
- kicad_sch_api/utils/logging_decorators.py +587 -0
- kicad_sch_api/utils/validation.py +16 -22
- kicad_sch_api/validation/__init__.py +25 -0
- kicad_sch_api/validation/erc.py +171 -0
- kicad_sch_api/validation/erc_models.py +203 -0
- kicad_sch_api/validation/pin_matrix.py +243 -0
- kicad_sch_api/validation/validators.py +391 -0
- kicad_sch_api/wrappers/__init__.py +14 -0
- kicad_sch_api/wrappers/base.py +89 -0
- kicad_sch_api/wrappers/wire.py +198 -0
- kicad_sch_api-0.5.1.dist-info/METADATA +540 -0
- kicad_sch_api-0.5.1.dist-info/RECORD +114 -0
- kicad_sch_api-0.5.1.dist-info/entry_points.txt +4 -0
- {kicad_sch_api-0.3.0.dist-info → kicad_sch_api-0.5.1.dist-info}/top_level.txt +1 -0
- mcp_server/__init__.py +34 -0
- mcp_server/example_logging_integration.py +506 -0
- mcp_server/models.py +252 -0
- mcp_server/server.py +357 -0
- mcp_server/tools/__init__.py +32 -0
- mcp_server/tools/component_tools.py +516 -0
- mcp_server/tools/connectivity_tools.py +532 -0
- mcp_server/tools/consolidated_tools.py +1216 -0
- mcp_server/tools/pin_discovery.py +333 -0
- mcp_server/utils/__init__.py +38 -0
- mcp_server/utils/logging.py +127 -0
- mcp_server/utils.py +36 -0
- kicad_sch_api/core/manhattan_routing.py +0 -430
- kicad_sch_api/core/simple_manhattan.py +0 -228
- kicad_sch_api/core/wire_routing.py +0 -380
- kicad_sch_api-0.3.0.dist-info/METADATA +0 -483
- kicad_sch_api-0.3.0.dist-info/RECORD +0 -31
- kicad_sch_api-0.3.0.dist-info/entry_points.txt +0 -2
- {kicad_sch_api-0.3.0.dist-info → kicad_sch_api-0.5.1.dist-info}/WHEEL +0 -0
- {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
|
+
]
|