Commit Graph

22 Commits

Author SHA1 Message Date
Akhil Velagapudi 8170a10b1d Add "ground" copper role, don't use role in symmetric checks (#217)
* Don't use role in symmetric check

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add "ground" copper role

This is only for internal use as kicad only supports power.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Sync stdlib board_config.zen for documentation

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-07 18:32:34 -04:00
Akhil Velagapudi 6b65301cce Add spec to BoardConfg() and datasheet to Component() (#214)
* Add spec to BoardConfig

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add datasheet as Component param

Also, sets the built-in "Datasheet" field instead of adding a custom
"datasheet" field.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-05 18:07:38 -04:00
Akhil Velagapudi 67b164f34b Add builtin.add_electrical_check (#199)
* Add builtin.add_electrical_check

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add snapshot tests

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add checks arg to io()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* le final api

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Allow constructing PhysicalRange with PhysicalRange value

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Reduce API surface, only expose check_voltage_within

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:57:46 -04:00
Akhil Velagapudi 56c88f23de Make TestBench() check eval lazy (#198)
* Don't alloc to get suppress_errors field

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make TestBench() check eval lazy

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Simplify

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove evalmode

It's no longer needed as pcb build and pcb test do eval the same way
now. The only difference is post-eval.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update TestBench() spec

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add a rano parse unit test

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:43:29 -04:00
Akhil Velagapudi 1680e12d65 Add physical value ranges (#195)
* Dedup quantity str

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Switch to get_methods for builtin

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add PhysicalRange

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused ComponentFactoryValue

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document the physical range feature

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add ser/de and InputValue support for ranges

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Ensure min <= nominal <= max

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add min, nominal, max, unit attrs to physical range

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-01 16:57:01 -04:00
Akhil Velagapudi ac8434ff42 Board-level configuration (#188)
* Add `builtin.add_board_config`

Sets constraints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Enable json extension

Useful for debugging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* More compact config mapping

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add predefined sizes support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make all board config fields optional, add merging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add netclass support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add stackup support, sexpr library

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Patch stackup on `pcb layout`

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Sync board config by default

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix deep_merge

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document board config feature

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Flatten netclasses

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add base configurations

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused _is_new_board

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Move board_config.zen to examples/

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use pcb-sexpr

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Replace --dont-sync with --sync (default true)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:57:15 -04:00
Akhil Velagapudi dceb75b5f3 Generate warnings if Path() paths don't exist (#160)
* Add Path() to spec

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Raise warning if path does not exist

Related to DIO-375.

Even if the path doesn't exist during initial development, it should not
be checked into the registry in this state.

We can run registry CI with -Dwarnings to catch this.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Generate warnings if Path() paths don't exist

Even if allow_not_exists, warnings are useful (DIO-375).

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Release should fail if path missing

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-16 18:12:38 -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 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
Lenny Khazan 0ef3b5d91d Fix docs (#113)
* 1/n: debug docs

* add image

* boop

* beep

* blorp

* blam

* test
2025-08-24 15:41:21 -04:00
Abhinav Reddy 0f3aa77cb3 [DOCS] Fix Docs for Real this Time (#112)
* Add example documentation

* Fix path

* Add tips and notes

* Split tip and note

* Update example.mdx

* Allow layout

* Update example.mdx

* Delete docs/images/Zener_ACRCM.png

* Upload fixed Zener ACRCM and pin hint gif

* Add gif explaining pin hints

* Fix grammar

* Reorder pages

* Update naming

* Use mintlify callouts

* Fix type (CRC -> LRC)

* Reorganize docs into sections

* Make documentation Davide compliant

* Fix broken links

* Add header at the top

* Update docs.json format

* Revert docs.json update

* Change image links
2025-08-24 13:12:02 -04:00
Abhinav Reddy 74e55fce65 [DOCS] Fix Broken Links (#111)
* Add example documentation

* Fix path

* Add tips and notes

* Split tip and note

* Update example.mdx

* Allow layout

* Update example.mdx

* Delete docs/images/Zener_ACRCM.png

* Upload fixed Zener ACRCM and pin hint gif

* Add gif explaining pin hints

* Fix grammar

* Reorder pages

* Update naming

* Use mintlify callouts

* Fix type (CRC -> LRC)

* Reorganize docs into sections

* Make documentation Davide compliant

* Fix broken links
2025-08-24 12:09:50 -04:00
Abhinav Reddy 3515276773 [DOCS] Add Documentation of an Example (#106)
* Add example documentation

* Fix path

* Add tips and notes

* Split tip and note

* Update example.mdx

* Allow layout

* Update example.mdx

* Delete docs/images/Zener_ACRCM.png

* Upload fixed Zener ACRCM and pin hint gif

* Add gif explaining pin hints

* Fix grammar

* Reorder pages

* Update naming

* Use mintlify callouts

* Fix type (CRC -> LRC)

* Reorganize docs into sections

* Make documentation Davide compliant
2025-08-24 11:30:53 -04: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
Davide Asnaghi 9a96e2e5aa [DOCS] theme (#60)
* add diode theme

* add vscode links

* add vscode features

* advanced install
2025-08-05 16:50:40 -04:00
Lenny Khazan f702b18a75 Update docs (#53) 2025-07-30 13:02:08 -04:00
Lenny Khazan 9f65ebc80a More robust VSCode schematics viewer (#36)
* wip

* RemoteFetcher

* refactor load logic

* update bundle

* updates

* cleanup

* fixes

* skip on windows

* remove unused

* Add sidebar (non-functional for now)

* Misc fixes and speed

* fix for misaligned first-layout

* fix unnamed pins

* remove debugging

* Add edge labels

* net symbol support

* multiple net symbols

* fix eslint

* Pass symbol across module boundary

* Add new Symbol("library.kicad_sym:SYM") syntax

* update spec

* update snaps
2025-07-20 15:04:49 -04:00
Davide Asnaghi e7a71f1fdb [MODULE] resolve workspace loads (#19)
* use load resolving with modules

* local package resolution

* fix spec

* update snapshots

* remove unnecessary code

* move to snapshot tests

* revert eval errors

* canonical cache

* make tests work on windows

* refresh snap

* do not shadow alias

* fix: Add serial_test to prevent race conditions in module loading tests

- Add serial_test dependency to pcb-zen crate
- Mark tests that use package aliases with #[serial_test::serial]
- This prevents race conditions with the global ALIAS_CACHE when tests run in parallel
- Fixes test failures on Ubuntu where path canonicalization differs from macOS
2025-07-06 23:34:42 -07:00
Lenny Khazan ba3fa631f1 Simplify spec (#16) 2025-07-06 20:10:59 -04:00
Davide Asnaghi f1a972ee59 kicad test (#18)
* add test for kicad

* cache dir in snapshots
2025-07-05 18:06:02 -04:00
Lenny Khazan d6ff024281 Update symbol handling, support gitlab packages (#14)
* Add Symbol() primitive

* Add print output to snaps

* gitlab support

* Add gitlab support, handle unnamed pins

* Add @kicad-symbols alias

* cargo fmt

* fmt

* update snap
2025-07-05 00:10:45 -04:00
Lenny Khazan 77be2a75b7 update docs 2025-07-02 16:38:06 -04:00