Skip to content

feat(vihaco-circuit-isa): add standalone circuit ISA crate#169

Open
david-pl wants to merge 5 commits into
mainfrom
david/42.1-vihaco-isa
Open

feat(vihaco-circuit-isa): add standalone circuit ISA crate#169
david-pl wants to merge 5 commits into
mainfrom
david/42.1-vihaco-isa

Conversation

@david-pl

@david-pl david-pl commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Merge order

This is part of splitting #168 (david/42-circuit-component) into small, focused PRs. Full stack, in merge order:

  1. core: single-qubit rotationsmain
  2. core: Pauli trace + resetmain
  3. vihaco-circuit-isa (this PR, feat(vihaco-circuit-isa): add standalone circuit ISA crate #169)main
  4. circuit component (david/42.2-circuit-component) → this branch
  5. composite (david/42.3-composite) → the 42.2 branch
  6. CLI + TUI (Add a composable ratatui TUI to ppvm-cli #166) → the 42.3 branch

This 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-isa crate — the CircuitInstruction enum plus its CircuitEffect / CircuitMessage companions — as a pure workspace addition (one new crate directory + one members line).

  • Leaf crate: nothing else in the workspace depends on it yet, so it cannot regress existing code.
  • External deps only: chumsky, eyre, smallvec, and the public vihaco / vihaco-parser / vihaco-parser-core at 0.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.0 checkout and only later moved to the public 0.1.1 crates; taking the final snapshot carries the public deps and drops that churn.

Testing

cargo build -p vihaco-circuit-isa compiles against public vihaco 0.1.1. prek hooks (fmt, check, clippy, machete, license header) all pass.

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>
Copilot AI review requested due to automatic review settings July 8, 2026 08:06

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

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-isa with CircuitInstruction, CircuitMessage, CircuitEffect, plus unit tests for parsing, display, and opcode/bytecode round-trips.
  • Adds the new crate to the workspace members list.
  • Updates Cargo.lock to 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.

Comment thread crates/vihaco-circuit-isa/Cargo.toml
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 8, 2026 08:12

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

Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.

Comment thread crates/vihaco-circuit-isa/src/lib.rs
Comment thread crates/vihaco-circuit-isa/Cargo.toml
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://QuEraComputing.github.io/ppvm/pr-preview/pr-169/

Built to branch gh-pages at 2026-07-08 11:52 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

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>
Copilot AI review requested due to automatic review settings July 8, 2026 10:05
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>

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

Copilot reviewed 3 out of 4 changed files in this pull request and generated 4 comments.

Comment thread crates/vihaco-circuit-isa/src/lib.rs
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Copilot AI review requested due to automatic review settings July 8, 2026 11:17

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

Copilot reviewed 3 out of 4 changed files in this pull request and generated 4 comments.

Comment thread crates/vihaco-circuit-isa/Cargo.toml
Comment thread crates/vihaco-circuit-isa/Cargo.toml
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Comment thread crates/vihaco-circuit-isa/src/lib.rs
Copilot AI review requested due to automatic review settings July 8, 2026 11:48

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

Copilot reviewed 3 out of 4 changed files in this pull request and generated 1 comment.

Comment thread crates/vihaco-circuit-isa/Cargo.toml
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.

2 participants