Akhil Velagapudi
d9bfb02551
Unified caching for load(), Module() ( #180 )
...
* Simplify eval error wrapping
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Simply Module() span resolution
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Unified caching for load(), Module()
This simplifies the code and improves the performance substantially.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 23:19:39 -04:00
Akhil Velagapudi
8e9c355a3f
Disallow dots in names ( #150 )
...
* Disallow dots in names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Bump stdlib
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Simplify is_instance_position
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update snapshot
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-15 18:06:28 -04:00
Akhil Velagapudi
d5a2bc10e0
Revert #144 , use moved() ( #153 )
...
* Revert "Revert net naming changes (#144 )"
This reverts commit 51e5066276 .
* Don't change net name prefix case
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Register moved() directives for new net names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Dedup get_component_prefix
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't change case of net names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update netlist tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Skip warnings for auto-generated directives
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-14 22:14:19 -04:00
Akhil Velagapudi
bb0898dbef
Add moved() directive ( #152 )
...
* Add pcb:sch comments to test board
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add moved() directive
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Include moved paths in Schematic
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Repair footprints, groups in layout
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update docs
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Compute remapper data *before* processing positions
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add warnings if old path exists or new path doesn't
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add snapshot tests for moved()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-14 21:15:37 -04:00
Akhil Velagapudi
0ca2f604ba
Replace buildifier with ruff fmt ( #146 )
...
buildifier doesn't support f-strings, which we use in a bunch of places.
We also run fmt after `pcb upgrade`, and it's a bit annoying that it
fails due to a buildifier error.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-08 23:22:10 -04:00
Akhil Velagapudi
0c2c87c338
[DIO-352] Add TestBench() support ( #129 )
...
* Add TestBench
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add checks
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add net -> ports dict
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add port -> pin dict
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Provide component properties to check fns
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update spec, fix spans on check failures
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use check(), error() to fail checks instead of return value
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add ModuleView to group check fn args
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add component_values field, expose more typed values
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fully switch to ComponentValues in check fn
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use ModuleValue directly
Delete ModuleView
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add at() support for module which can return sub-module or component
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Rename testbench.rs -> test_bench.rs
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Move bench_test_cases to test-workspaces/bench
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Print "checks passed" log to eprintln
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Make .nets and .components functions
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add schematic to graph conversion, path finding
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add external net support to path finding
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't use bool ret for matchers
Use error(), check()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add path.matches()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add samples
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Moar samples
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update spec.mdx
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Consolidate seq matchers test code
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add suppress_errors
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add lm5163q1 example
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add test_cases, inputs arg to check fns
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update bmi270 example to use path.matches()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use more path.matches()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add span for path.matches()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add pcb test
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Print stuff only to stderr
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Output test results in TAP or json
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* "testbench" -> "test_bench"
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add table output format for pcb test
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Tolerate non-callable inputs to "checks"
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add tuple checks support for renaming check fns
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add snapshot tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Make max_depth optional
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-04 22:30:30 -04:00
Akhil Velagapudi
44c73baf2d
[DIO-319] Add board config to pcb.toml, pcb info ( #92 )
...
* Add board config to pcb.toml, pcb info
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Choose first board (when sorted) as fallback default
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add secondary heuristics pass to detect boards without pcb.toml
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update snapshots
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't allow malformed pcb.toml
Empty pcb.toml is fine.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't copy .pcb/cache into test fixture
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Replace test-workspace with snapshot tests of pcb info
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-21 15:20:16 -07:00
Akhil Velagapudi
9a1930c2c5
pcb cli-level testing (#96 )
...
* Add sandbox
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add dir snapshotting
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add branch support, snapshot_dir
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add snapshot testing of stdout/stderr
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Only use local files for workspace root detection
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add bom, release tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add pcb vendor snapshot test
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Sanitize linux tmp dir paths
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Ignore some tests on Windows
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Reuse dep fetching code from pcb-zen
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix download race condition
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Bump lock file
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Specify default branch
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Suppress 3d export logs to stdout
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-21 13:52:38 -07:00
Akhil Velagapudi
1ee83c6e7e
Initial implementation of interface subclasses + auto-promotion ( #89 )
...
* Add serialize(), deserialize() builtins for debugging
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add field(), __post_init__ to interface()
Also, add better print() behavior.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add interface/net promotion
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Remove Cargo.toml patch
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix example
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix test workspace
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add interface arg type checking
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update spec.mdx
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Allow `using(Net)`
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-20 09:27:39 -07:00
Akhil Velagapudi
f54aa468cc
Add hierarchical package alias resolution ( #91 )
...
Deeper directories taking priority.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-20 08:50:47 -07:00
Akhil Velagapudi
b9d101e129
Fix package resolution in pcb vendor/release ( #80 )
...
* Add [packages] to vendor/release test case
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix package resolution in pcb vendor/release
The TrackingLoadResolver middleware couldn't properly resolve packages.
To fix, eliminate the middleware entirely and enhance CoreLoadResolver
to handle all the necessary tracking. This is likely to reduce future
bugs as well.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use public kicad package
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-18 14:32:31 -07:00
Akhil Velagapudi
23442e6577
Only detect workspace root if pcb.toml has [workspace] ( #75 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-15 15:28:37 -07:00
Akhil Velagapudi
b97d9f053b
[DIO-302] Generate 3d models for release ( #73 )
...
* Generate 3d models for release
Release file structure:
/a614869/3d
├── model.step
├── model.svg
└── model.wrl
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Ignore spurious kicad-cli errors
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-15 12:47:52 -07:00
Akhil Velagapudi
1636bc18f7
[DIO-300] Add pcb release command ( #69 )
...
* Add pcb release command
Intentially spartan in terms of flags/arguments. All that's needed is
the path to the .zen file.
To test:
cargo run -- release crates/pcb/test-workspace/boards/TestBoard.zen
Implemented:
- Workspace root detection (even without pcb.toml)
- Git-based versioning (e.g. tag > commit hash > dirty commit hash)
- Zen source files copied into release dir (release-dir/src)
- Dependencies are vendored into release dir (release-dir/src/vendor)
- Unmatched bom is generated into release dir (release-dir/bom)
- KiCad layout dir is copied into release dir (release-dir/layout)
- Metadata file is generated into release dir (release-dir/metadata.json)
- Generated artifacts are stored in .pcb/ dir (for now) and not uploaded
TODO:
- Upload the release bundle to API server
- Add a --dry-run to generate release bundle but not upload (similar to
cargo)
- Use the vendor/ dir for dependency resolution for deterministic builds
- Add pcb vendor subcommand, --offline flag for build/layout
- Add more release artifacts (e.g. gerbers, odb, etc.)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix windows compat
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add support, test-coverage for workspace-relative loads
Assume that pcb.toml is needed for workspace-relative loads
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use workspace root .pcb dir for staging releases
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-08-14 18:46:43 -07:00