Skip to content

Symmetry-merged evolution: Trotter merging + momentum-sector CTPP - #182

Open
AlexSchuckert wants to merge 19 commits into
split/2-ctpp-corefrom
split/3-symmetric-evolution
Open

Symmetry-merged evolution: Trotter merging + momentum-sector CTPP#182
AlexSchuckert wants to merge 19 commits into
split/2-ctpp-corefrom
split/3-symmetric-evolution

Conversation

@AlexSchuckert

Copy link
Copy Markdown
Collaborator

PR 3 of 4 splitting #178 (stacked on #181). Full history: branch continuous-time-pauli-propagation.

The two consumers of the translation-symmetry primitive from PR 1:

  • Trotter path: PauliSum.symmetry_merge (k = 0) and PauliSum.momentum_merge (k ≠ 0, complex operator carried as a real pair; character-weighted fold rescaled by |G| to the summing projector, so merging after every gate layer is idempotent). TranslationGroup, canonicalize_basis_arr{,_complex}, and check_momentum_sector_arr exposed via ppvm._core. All inputs validated at the FFI boundary (ValueError, not panics).
  • CTPP path: pc_step_orbit_rep — per-step adaptive evolution entirely in orbit-representative form (complex coefficients, phase-aware action, same cached-CSC expm engine and PcStepConfig truncation policy as the real-space step). The live basis is ~|G|× smaller than full-basis evolution, and the reduction persists through every step; observables come out per momentum mode.

Tests: momentum-merge correctness incl. k-resolved Trotter convergence vs exact diagonalization; orbit-rep evolution vs full-basis-then-project (exact match); real/complex equivalence at k = 0. Regression gates rerun on this exact tree: L=5 momentum sanity bit-identical to the recorded reference; the τ_add real-space cell reproduces median 5.19e-3 / peak basis 77,820 exactly.

🤖 Generated with Claude Code

AlexSchuckert and others added 2 commits July 16, 2026 13:14
…daptive Lindbladian evolution

Direct Heisenberg-picture evolution O ← exp(dt·L*)O on an adaptively
truncated Pauli-string basis: exact in dt within the working basis, no
Trotter splitting. LindbladSpec precompiles Hermitian-Pauli (fast
diagonal) and general complex Pauli-sum jumps (σ±, amplitude damping,
precomputed L†L); pc_step does two-hop leakage enrichment + predictor/
corrector matrix-free exponential via quspin-expm (MIT), with the
truncation policy in one PcStepConfig (max_basis rank cap, admit_basis
displacement bound, drop_tol prune, tau_add admission filter).

Python: ppvm.Lindbladian with numpy hot path + string convenience API,
mimalloc global allocator (~50% peak-RSS cut on adaptive paths), two
jupytext demos, tests against dense-Liouvillian / closed-form / eig
references.

Split 2/4 of the CTPP work; the momentum-sector (orbit-rep) evolution
follows in split 3. Full history: branch continuous-time-pauli-propagation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two consumers of the translation-symmetry primitive:

Trotter path: PauliSum.symmetry_merge (k=0) and PauliSum.momentum_merge
(k≠0 carried as a real pair, character-weighted fold, |G|-rescaled to
the summing projector so merging after every step is idempotent), with
TranslationGroup and canonicalize_basis_arr{,_complex} /
check_momentum_sector_arr exposed to Python. Inputs validated at the
boundary (ValueError, not panics).

CTPP path: pc_step_orbit_rep — per-step evolution entirely in
orbit-representative form (complex coefficients, phase-aware action,
cached-CSC expm; basis ~|G|× smaller than full-basis evolution,
persisting through every step), with the same PcStepConfig truncation
policy incl. displacement admission.

Split 3/4 of the CTPP work; full history on branch
continuous-time-pauli-propagation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 16, 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-182/

Built to branch gh-pages at 2026-07-16 15:17 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

AlexSchuckert and others added 17 commits July 16, 2026 13:31
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	crates/ppvm-python-native/src/lindblad.rs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ord) — cargo machete

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bitvec implements BitStore for u64 only on 64-bit targets, so the
[u64; 2] word storage broke the wasm32 workspace build. The chunk type
is now target-gated: two u64 chunks on 64-bit targets (bit-identical to
before), four u32 chunks elsewhere — 128 qubits either way. The
chunk loops (anti_commutes / pauli_mul) were already width-agnostic.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	crates/ppvm-lindblad/src/lib.rs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant