feat(vihaco-circuit-isa): add standalone circuit ISA crate#169
Open
david-pl wants to merge 5 commits into
Open
feat(vihaco-circuit-isa): add standalone circuit ISA crate#169david-pl wants to merge 5 commits into
david-pl wants to merge 5 commits into
Conversation
Add the leaf `vihaco-circuit-isa` crate — the `CircuitInstruction` enum plus its `CircuitEffect`/`CircuitMessage` companions — as a pure workspace addition. Snapshotted from the tip of `david/42-circuit-component` (PR #168) so it carries the public `vihaco 0.1.1` dependencies rather than the crate's early local-path/`0.1.0` history. The crate is a leaf: nothing on this branch depends on it yet, so it cannot regress existing code. It is the base of the circuit-component split (see #168): merge order is core rotations -> Pauli trace/reset -> this crate -> circuit component -> composite -> CLI/TUI (#166). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new leaf Rust crate, vihaco-circuit-isa, defining a vihaco-oriented circuit instruction ISA (CircuitInstruction) plus message/effect companion types, and wires it into the workspace. This sets up a standalone ISA layer intended to be the base for follow-up PRs that build higher-level “circuit component” functionality on top.
Changes:
- Introduces
crates/vihaco-circuit-isawithCircuitInstruction,CircuitMessage,CircuitEffect, plus unit tests for parsing, display, and opcode/bytecode round-trips. - Adds the new crate to the workspace members list.
- Updates
Cargo.lockto include the new crate’s dependency graph (and bumps some existing locked versions).
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| crates/vihaco-circuit-isa/src/lib.rs | New ISA types + parsing/codec tests for the circuit instruction set. |
| crates/vihaco-circuit-isa/Cargo.toml | New crate manifest with external deps and cargo-machete metadata. |
| Cargo.toml | Registers crates/vihaco-circuit-isa as a workspace member. |
| Cargo.lock | Locks new dependencies and updates some existing locked versions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
This was referenced Jul 8, 2026
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of splitting #168 into small, focused PRs. Full stack (independent items may merge in any relative order; dependents wait for their base): 1. **single-qubit rotations (this PR)** → `main` 2. core tableau expectation/reset (`feat/tableau-expectation-reset`) → `main` 3. native `.pyi` type stubs (`feat/native-pyi-stubs`) → **this PR** (declares the native `r` added here) 4. vihaco-circuit-isa (#169) → `main` 5. circuit component (`david/42.2-circuit-component`) → #169 6. composite (`david/42.3-composite`) → #5 7. CLI + TUI (#166) → #6 Items 1, 2, and 4 are mutually independent off `main`. ## Summary Adds the `RotXY` trait to `ppvm-traits` and implements it for both backends (`ppvm-tableau`, `ppvm-pauli-sum`), plus the `r(...)` Python binding on the native PauliSum / tableau classes and the `RotationsMixin` / `TruncatingRotationsMixin` wrappers. `RotXY` is a single-qubit rotation about an arbitrary axis in the X/Y plane: ``` R(axis_angle, θ) = exp(-i θ/2 · (cos(axis_angle)·X + sin(axis_angle)·Y)) = RZ(axis_angle)·RX(θ)·RZ(−axis_angle) ``` Pure addition alongside the existing `RotationOne` (RX/RY/RZ) rotations; no new module wiring. Like `u3`, `r` is single-qubit (scalar `addr0`), not batched over `targets`. ## Provenance Snapshotted from the tip of #168 (not cherry-picked); the R gate is a prerequisite for the circuit-component backends there. ## Testing `cargo test -p ppvm-traits -p ppvm-tableau -p ppvm-pauli-sum` green (incl. `test_rx/ry/rz/r`). Python: `maturin develop` + `pytest test/test_basics.py test/generalized_tableau/test_basics.py` → 37 passed. prek hooks (fmt, check, clippy, machete, ruff, ty, license) all pass. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of splitting #168 into small, focused PRs. Full stack (independent items may merge in any relative order; dependents wait for their base): 1. single-qubit rotations (#170) → `main` 2. **core tableau expectation/reset (this PR)** → `main` 3. native `.pyi` type stubs (`feat/native-pyi-stubs`) → #170 4. vihaco-circuit-isa (#169) → `main` 5. circuit component (`david/42.2-circuit-component`) → #169 6. composite (`david/42.3-composite`) → #5 7. CLI + TUI (#166) → #6 Items 1, 2, and 4 are mutually independent off `main`. ## Summary Adds `expectation.rs` for `GeneralizedTableau`: - `expectation` — single-Pauli ⟨ψ|P|ψ⟩ for a `PauliWord`, conjugating P through the tableau and overlapping with the sparse coefficient vector. - `trace` — Σ over Paulis matching a `PauliPattern`. Supporting changes in `data.rs`: - `compute_decomposition_word` — multi-qubit conjugation used by `expectation`. - `reset_all` on both `Tableau` and `GeneralizedTableau` — reinitialise to |0…0⟩, clearing coefficients and loss state (refactors `new` via a shared `new_data` helper). - the rayon-nesting guard on the coefficient path (avoids nesting rayon inside shot-level parallelism; a no-op on the single-shot path). `lib.rs` gains `pub mod expectation`; `Cargo.toml` gains a `ppvm-pauli-word` dependency. Pure core addition, snapshotted from #168. ## Testing `cargo test -p ppvm-tableau` green (12 expectation tests + reset/noise). prek hooks all pass. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of the #168 split. **Stacked on #170** (base branch `feat/single-qubit-rotations`) because this stub file declares the native `r` binding that #170 adds. Merge #170 first, then this. Full stack: single-qubit rotations (#170) → **this** ; core tableau expectation/reset (`feat/tableau-expectation-reset`) → `main` ; vihaco-circuit-isa (#169) → `main` ; then circuit component → composite → CLI/TUI (#166). ## Summary Adds `ppvm_python_native.pyi` — the first type-stub file for the compiled `ppvm._core` module (none exists on `main`). It declares the macro-generated concrete classes (`PauliSumIndexMapFxHash{0..15}`, `PauliSumLossIndexMapFxHash{0..15}`, the `GeneralizedTableau{N}` family, `StimProgram`) via synthetic `_PauliSumBase` / `_PauliSumLossBase` / `_GeneralizedTableauBase` bases that hold the shared method signatures once. Pure additive typing surface; no runtime effect. Split out of #170 because the block covers the whole module — only `r` is new API; the rest describe pre-existing bindings. ## Provenance Snapshotted from the tip of #168. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jul 8, 2026
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.
Merge order
This is part of splitting #168 (
david/42-circuit-component) into small, focused PRs. Full stack, in merge order:mainmainmaindavid/42.2-circuit-component) → this branchdavid/42.3-composite) → the42.2branch42.3branchThis PR is independent of items 1–2 and can merge in any order relative to them. It is the base branch for the vihaco-specific follow-ups (items 4–5), which target this branch rather than
main.Summary
Adds the leaf
vihaco-circuit-isacrate — theCircuitInstructionenum plus itsCircuitEffect/CircuitMessagecompanions — as a pure workspace addition (one new crate directory + onemembersline).chumsky,eyre,smallvec, and the publicvihaco/vihaco-parser/vihaco-parser-coreat0.1.1.Provenance
Snapshotted from the tip of #168 rather than cherry-picked. The crate's early history pointed at a local-path
vihaco 0.1.0checkout and only later moved to the public0.1.1crates; taking the final snapshot carries the public deps and drops that churn.Testing
cargo build -p vihaco-circuit-isacompiles against publicvihaco 0.1.1. prek hooks (fmt, check, clippy, machete, license header) all pass.