Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
8c5cdba
feat(dist): scaffold powerio-dist workspace crate
samtalki Jun 10, 2026
bb5e75f
test(dist): vendor distribution fixtures and oracle harness
samtalki Jun 10, 2026
33a2f2c
feat(dist): dss lexer, RPN calculator, and raw object layer
samtalki Jun 10, 2026
5f22e6f
feat(dist): canonical model and dss reader with defaults provenance
samtalki Jun 10, 2026
8bdbf98
feat(dist): BMOPF reader and writer with schema validation tests
samtalki Jun 10, 2026
7bc00a1
chore: drop a stray scratch file
samtalki Jun 10, 2026
dad307e
feat(dist): PMD ENGINEERING JSON reader and writer with oracle fixtures
samtalki Jun 10, 2026
68af36d
feat(dist): dss writer, format dispatcher, and the 3x3 conversion har…
samtalki Jun 10, 2026
bce0c0e
fix(dist): engine faithful regeneration for loads, transformers, sources
samtalki Jun 10, 2026
eba6f1f
fix(dist): keep the reconstructed source impedance idempotent
samtalki Jun 10, 2026
04c2730
feat(dist): switch impedance passthrough, ENGINEERING loudness, physi…
samtalki Jun 10, 2026
742ccf4
fix(dist): review pass over the writer and harness
samtalki Jun 10, 2026
973f53d
docs(dist): refresh the conversion matrix for the loudness counts
samtalki Jun 10, 2026
5d63613
feat(dist): expose the distribution surface through the C ABI, CLI, a…
samtalki Jun 10, 2026
b39a176
docs(dist): crate docs with the float formatting policy, README and l…
samtalki Jun 10, 2026
db1b941
fix(dist): engine semantics, fidelity, and API corrections from the c…
samtalki Jun 10, 2026
8df8586
fix(dist): close the second review round on engine semantics and writ…
samtalki Jun 10, 2026
96c6552
fix(dist): bound option abbreviations at the engine's resolution poin…
samtalki Jun 10, 2026
0eda576
docs(fixtures): per directory license files for the vendored distribu…
samtalki Jun 11, 2026
51cf82a
Merge main: v0.1.0, gridfm read path, hub convert_str; align the dist…
samtalki Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ tests/data/**/*.m linguist-vendored

# Julia appears here only as a validation harness, not as the package language.
benchmarks/**/*.jl linguist-vendored
powerio-dist/tools/pmd/*.jl linguist-vendored

# Vendored distribution fixtures (BMOPF schema + example networks from
# frederikgeth/bmopf-report, OpenDSS test feeders): keep them out of the
# language stats and collapsed in diffs.
tests/data/dist/** linguist-vendored

# Vendored case fixtures are byte-exact round-trip references: the `parse → write`
# tests (e.g. powerio/tests/roundtrip.rs) compare the writer output to the file
Expand Down
41 changes: 37 additions & 4 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ jobs:
# Deny the workspace pedantic lints on the non-extension crates. The PyO3
# ext crates are linted in the Python workflow with their feature enabled.
- name: Clippy
run: cargo clippy --all-targets -p powerio -p powerio-matrix -p powerio-cli -p powerio-capi -- -D warnings
# Bare `cargo test` only covers powerio + powerio-matrix (the default-members); name
# the C ABI crate explicitly so its end-to-end ABI tests run in CI too.
run: cargo clippy --all-targets -p powerio -p powerio-matrix -p powerio-cli -p powerio-capi -p powerio-dist -- -D warnings
# Bare `cargo test` only covers the default-members; name the C ABI crate
# explicitly so its end-to-end ABI tests run in CI too.
- name: Run tests
run: cargo test -p powerio -p powerio-matrix -p powerio-cli -p powerio-capi --verbose
run: cargo test -p powerio -p powerio-matrix -p powerio-cli -p powerio-capi -p powerio-dist --verbose
# The gridfm Parquet export is behind a cargo feature; exercise it (and its
# clippy) explicitly so coverage doesn't depend on CLI feature unification.
- name: Clippy + tests (gridfm feature)
Expand Down Expand Up @@ -127,3 +127,36 @@ jobs:
run: |
cargo test -p powerio-capi --features arrow --verbose
cargo clippy -p powerio-capi --all-targets --features arrow -- -D warnings

c-abi-dist:
name: C ABI (dist feature)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Build powerio-capi --features dist
run: cargo build -p powerio-capi --release --features dist
# The cfg-gated pio_dist_* entry points still appear in the source symbol
# grep, so they must be declared in the header (inside #ifdef PIO_DIST);
# parity holds.
- name: Header symbol parity
run: |
grep -oE 'extern "C" fn pio_[a-z_]+' powerio-capi/src/lib.rs \
| grep -oE 'pio_[a-z_]+' | sort -u > rs_syms
grep -oE 'pio_[a-z_]+ *\(' powerio-capi/include/powerio.h \
| grep -oE 'pio_[a-z_]+' | sort -u > h_syms
diff rs_syms h_syms
# Compile the smoke test with -DPIO_DIST so it exercises the distribution
# entry points against the dist-featured library.
- name: Compile and run the C smoke test (dist)
run: |
cc -DPIO_DIST -I powerio-capi/include powerio-capi/examples/smoke.c \
-L target/release -lpowerio_capi -o pio_smoke_dist
LD_LIBRARY_PATH=target/release ./pio_smoke_dist tests/data/case9.m
- name: Tests + clippy (dist feature)
run: |
cargo test -p powerio-capi --features dist --verbose
cargo clippy -p powerio-capi --all-targets --features dist -- -D warnings
10 changes: 7 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,22 @@
.DS_Store
.claude/

# Python bindings (maturin / PyO3)
# Python bindings (maturin / PyO3). dist/ and build/ are anchored to the
# repo root: tests/data/dist holds fixtures, not build output.
*.so
*.pyd
dist/
build/
/dist/
/build/
wheelhouse/
*.egg-info/
__pycache__/
.pytest_cache/
.venv/
tests/data/large/

# Scratch Julia project for the PMD oracle; its Manifest pins local paths.
powerio-dist/tools/pmd/Manifest.toml

# Machine-readable bench output (render_tables.py reads it; numbers are per-machine)
benchmarks/results/

Expand Down
Loading
Loading