Repository navigation
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR splits PauliSum/LossyPauliSum runtime + truncation strategies out of ppvm-runtime into a new ppvm-paulisum crate, and updates downstream crates, examples, and docs to depend on the new crate while keeping ppvm-runtime focused on shared primitives/traits.
Changes:
- Introduces new
ppvm-paulisumcrate (sum implementation, strategies, feature-gated configs, benches/tests). - Removes
PauliSum+ strategies fromppvm-runtimeand updates docs/examples/tests to import fromppvm-paulisum. - Updates tableau/stim codepaths to use
ppvm-runtime::config::fxhash::ByteF64instead of the (moved)indexmapconfig bundles.
Reviewed changes
Copilot reviewed 54 out of 62 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| .gitignore | Ignores /debug output directory. |
| Cargo.lock | Adds ppvm-paulisum package and updates dependency graph. |
| Cargo.toml | Adds ppvm-paulisum dependency and workspace member. |
| crates/ppvm-paulisum/Cargo.toml | New crate manifest with features/benches. |
| crates/ppvm-paulisum/benches/gate.rs | Bench imports updated to ppvm-paulisum. |
| crates/ppvm-paulisum/benches/micro.rs | Bench imports updated to ppvm-paulisum. |
| crates/ppvm-paulisum/benches/random-circuit.rs | Bench imports updated to ppvm-paulisum. |
| crates/ppvm-paulisum/benches/trotter-scaling.rs | Bench imports updated to ppvm-paulisum. |
| crates/ppvm-paulisum/benches/trotter.rs | Bench imports updated to ppvm-paulisum. |
| crates/ppvm-paulisum/src/config/dashmap.rs | New feature-gated DashMap config bundle. |
| crates/ppvm-paulisum/src/config/gxhash.rs | New feature-gated gxhash config bundle. |
| crates/ppvm-paulisum/src/config/indexmap.rs | New feature-gated IndexMap config bundle. |
| crates/ppvm-paulisum/src/config/mod.rs | Re-exports runtime configs + defines feature-gated ones. |
| crates/ppvm-paulisum/src/lib.rs | New crate root + prelude. |
| crates/ppvm-paulisum/src/strategy.rs | Strategy types moved into ppvm-paulisum. |
| crates/ppvm-paulisum/src/sum/approx.rs | PauliSum approx impl moved/rewired. |
| crates/ppvm-paulisum/src/sum/clifford.rs | Clifford impls for PauliSum moved/rewired. |
| crates/ppvm-paulisum/src/sum/data.rs | Core PauliSum implementation moved/rewired. |
| crates/ppvm-paulisum/src/sum/display.rs | Debug/Display impls moved/rewired. |
| crates/ppvm-paulisum/src/sum/mod.rs | New sum module wiring/re-exports. |
| crates/ppvm-paulisum/src/sum/noise.rs | Noise-channel impls moved/rewired. |
| crates/ppvm-paulisum/src/sum/ops.rs | Operator impls + macro re-export moved/rewired. |
| crates/ppvm-paulisum/src/sum/proj.rs | Projection impls moved/rewired. |
| crates/ppvm-paulisum/src/sum/rot1.rs | Rotation helper moved/rewired. |
| crates/ppvm-paulisum/src/sum/rot2.rs | Rotation helper moved/rewired. |
| crates/ppvm-paulisum/src/sum/trace.rs | Trace/overlap logic moved/rewired. |
| crates/ppvm-paulisum/src/sum/snapshots/ppvm_paulisum__sum__data__tests__pauli_sum_creation.snap | New snapshots for PauliSum string rendering. |
| crates/ppvm-paulisum/src/sum/snapshots/ppvm_paulisum__sum__data__tests__pauli_sum_creation-2.snap | New snapshots for PauliSum string rendering. |
| crates/ppvm-paulisum/src/sum/snapshots/ppvm_paulisum__sum__data__tests__pauli_sum_creation-3.snap | New snapshots for PauliSum string rendering. |
| crates/ppvm-paulisum/src/sum/snapshots/ppvm_paulisum__sum__data__tests__pauli_sum_creation-4.snap | New snapshots for PauliSum string rendering. |
| crates/ppvm-paulisum/src/sum/snapshots/ppvm_paulisum__sum__data__tests__pauli_sum_creation-5.snap | New snapshots for PauliSum string rendering. |
| crates/ppvm-paulisum/tests/cnot.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-paulisum/tests/ghz.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-paulisum/tests/loss.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-paulisum/tests/noise.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-paulisum/tests/preserve.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-paulisum/tests/strategy.rs | Tests now import ppvm-paulisum. |
| crates/ppvm-python-native/Cargo.toml | Adds dependency on ppvm-paulisum. |
| crates/ppvm-python-native/src/interface.rs | Python bindings now use ppvm-paulisum PauliSum + strategies. |
| crates/ppvm-runtime/Cargo.toml | Removes PauliSum/strategy-related deps/features; default features now empty. |
| crates/ppvm-runtime/src/config/mod.rs | Docs updated; removes feature-gated config bundles from runtime. |
| crates/ppvm-runtime/src/lib.rs | Removes sum/strategy modules + prelude exports; updates crate docs. |
| crates/ppvm-runtime/src/map/dashmap.rs | Import cleanup after split. |
| crates/ppvm-runtime/src/map/hashmap.rs | Refactors trait impl macros and feature modules. |
| crates/ppvm-runtime/src/traits/clifford.rs | Removes PauliSum-based example from runtime trait docs. |
| crates/ppvm-stim/tests/executor.rs | Updates config types to runtime fxhash::ByteF64. |
| crates/ppvm-stim/tests/run.rs | Updates config types to runtime fxhash::ByteF64. |
| crates/ppvm-stim/tests/stim_corpus.rs | Updates config types to runtime fxhash::ByteF64. |
| crates/ppvm-sym/Cargo.toml | Adds dependency on ppvm-paulisum (no default features). |
| crates/ppvm-sym/src/mul.rs | Switches macro import to ppvm-paulisum prelude. |
| crates/ppvm-tableau/tests/measure.rs | Updates config types to runtime fxhash::ByteF64. |
| crates/ppvm-tableau/tests/tableau.rs | Updates config types to runtime fxhash::ByteF64. |
| examples/msd.rs | Updates config types to runtime fxhash::ByteF64. |
| examples/symbolic.rs | Imports PauliSum from ppvm-paulisum. |
| examples/tfim.rs | Imports PauliSum from ppvm-paulisum. |
| examples/trotter.rs | Imports PauliSum from ppvm-paulisum. |
| skills/ppvm-usage/SKILL.md | Documentation updated to reference ppvm-paulisum. |
| skills/ppvm-usage/examples/rust/Cargo.toml | Adds dependency on ppvm-paulisum. |
| skills/ppvm-usage/examples/rust/src/bin/paulisum.rs | Skill example now imports ppvm-paulisum. |
| skills/ppvm-usage/examples/rust/src/bin/stim_sample.rs | Updates config types to runtime fxhash::ByteF64. |
| skills/ppvm-usage/examples/rust/src/bin/sym.rs | Skill example now imports ppvm-paulisum. |
| skills/ppvm-usage/examples/rust/src/bin/tableau.rs | Updates config types to runtime fxhash::ByteF64. |
Comments suppressed due to low confidence (2)
crates/ppvm-runtime/src/map/hashmap.rs:318
- This
implhas an invalidW:,bound (syntax error).Wdoesn't need a bound forwith_capacity/len/clear, so remove theW:,line to restore compilation (especially sinceppvm-paulisumenables theahashfeature by default).
crates/ppvm-paulisum/tests/preserve.rs:14 PauliSumis imported twice (viappvm_paulisum::prelude::*andppvm_paulisum::sum::PauliSum), which causes E0252 and breaks compilation. Drop the redundant explicit import.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+23
to
+28
| pub use crate::config; | ||
| pub use crate::config::Config; | ||
| pub use crate::strategy::{ | ||
| CoefficientThreshold, CombinedStrategy, MaxLossWeight, MaxPauliWeight, | ||
| }; | ||
| pub use crate::sum::{PauliSum, impl_op_mul_assign_coefficient}; |
|
Roger-luo
added a commit
that referenced
this pull request
Jun 22, 2026
…pauli-sum (#133) ## Summary Splits the `ppvm-runtime` monolith into three focused crates with an **acyclic** dependency graph, superseding #115 (which only carved off a single `ppvm-paulisum` crate). ``` ppvm-pauli-sum ──► ppvm-pauli-word ──► ppvm-traits └──────────────────────────────►┘ ``` - **`ppvm-traits`** — the trait system (gate / measurement / noise / storage / coefficient / hash / `ACMap` / `Strategy` / `Trace`), the `Config` trait, the single-qubit `Pauli` alphabet, and the `ACMap`/`Trace` impls for `HashMap`/`DashMap`/`IndexMap`/`AHashMap`. - **`ppvm-pauli-word`** — `PauliWord`, `PhasedPauliWord`, `LossyPauliWord`, `PauliPattern`. - **`ppvm-pauli-sum`** — the `PauliSum` / `LossyPauliSum` propagation engine, truncation strategies, and the concrete `Config` bundles (`fxhash`, `fx64hash`, `indexmap`, `gxhash`, `dashmap`). `ppvm-runtime` is **deleted**; all downstream crates (`ppvm-tableau`, `ppvm-stim`, `ppvm-sym`, `ppvm-tableau-sum`, `ppvm-python-native`), the root examples, the `ppvm-usage` skill examples, and the docs site are migrated to the new crates. File moves are done with `git mv`, so history is preserved. ## The one interesting code change `ppvm-traits` must own the `ACMap`/`Trace` impls for the foreign `HashMap` / `DashMap` types (orphan rule), but `map/dashmap.rs` had a *concrete* `Trace<PauliPattern> for DashMap` impl — and `PauliPattern` lives in `ppvm-pauli-word`, which would make `ppvm-traits` depend on its own dependent (a cycle). The fix unifies the two `DashMap` `Trace` impls (a generic `Trace<W>` and the concrete `Trace<PauliPattern>`) into a single generic impl, mirroring the existing `HashMap` one. Both trace directions already exist (`PauliPattern: Trace<W>` and `W: Trace<PauliPattern>`), so the generic form is semantically identical and removes the `PauliPattern` reference, leaving `ppvm-traits` a clean dependency leaf. All other apparent `traits → sum` / `config → sum` / `traits → phase` couplings were rustdoc intra-doc links, which are repointed or converted to plain text. ## Verification - `cargo build --workspace --all-targets` ✓ - `cargo test --workspace` ✓ (all suites; the `ppvm-python-native` *Rust* unit tests are exercised via maturin/pytest, not standalone `cargo test`, because the cdylib can't link the Python framework at runtime) - `cargo doc --workspace --no-deps` ✓ (no new broken intra-doc links) - Python: **153 tests pass** (native module rebuilt via maturin against the new crates) - Docs: `extract:rust` regenerates `rust-api.json` from the new crate list (108 items) and `astro build` succeeds. Closes #43. Supersedes #115. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Collaborator
|
this is now superceded |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #43.
ppvm-paulisumcrate, that contains the runtime forPauliSumandLossyPauliSum(I think keeping them in one crate is fine).ppvm-runtimename since it still contains the runtime ofPauliWordandPhasedPauliWord+ trait definitions, which are used by bothPauliSumandGeneralizedTableau.