Skip to content

Split out paulisum crate - #115

Closed
david-pl wants to merge 9 commits into
mainfrom
david/43-split-crates
Closed

david-pl wants to merge 9 commits into
mainfrom
david/43-split-crates

Conversation

@david-pl

Copy link
Copy Markdown
Collaborator

Closes #43.

  • Adds a new ppvm-paulisum crate, that contains the runtime for PauliSum and LossyPauliSum (I think keeping them in one crate is fine).
  • Left ppvm-runtime name since it still contains the runtime of PauliWord and PhasedPauliWord + trait definitions, which are used by both PauliSum and GeneralizedTableau.

@david-pl
david-pl requested review from Roger-luo and Copilot June 12, 2026 08:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-paulisum crate (sum implementation, strategies, feature-gated configs, benches/tests).
  • Removes PauliSum + strategies from ppvm-runtime and updates docs/examples/tests to import from ppvm-paulisum.
  • Updates tableau/stim codepaths to use ppvm-runtime::config::fxhash::ByteF64 instead of the (moved) indexmap config 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 impl has an invalid W:, bound (syntax error). W doesn't need a bound for with_capacity/len/clear, so remove the W:, line to restore compilation (especially since ppvm-paulisum enables the ahash feature by default).
    crates/ppvm-paulisum/tests/preserve.rs:14
  • PauliSum is imported twice (via ppvm_paulisum::prelude::* and ppvm_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 thread crates/ppvm-runtime/src/map/hashmap.rs
Comment thread crates/ppvm-runtime/src/map/hashmap.rs
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};
@github-actions

github-actions Bot commented Jun 12, 2026 •

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-06-22 04:54 UTC

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>
@Roger-luo

Copy link
Copy Markdown
Collaborator

this is now superceded

@Roger-luo Roger-luo closed this Jun 22, 2026
@david-pl
david-pl deleted the david/43-split-crates branch July 20, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split up ppvm-runtime and ppvm-tableau

3 participants