propaq¶
Fast Heisenberg-picture propagation for quantum circuit simulation.¶
import numpy as np
from qiskit import QuantumCircuit
from qiskit.circuit.library import XXPlusYYGate, RZGate, SwapGate
from qiskit.quantum_info import SparsePauliOp
from propaq.circuits import MajoranaCircuit
from propaq.datatypes import MajoranaTermSum
from propaq.noise import UniformNoiseModel
from propaq.propagators import MajoranaPropagator
from propaq.truncation import WeightTruncator, CoefficientTruncator, TermBudget
qc = QuantumCircuit(4)
qc.append(XXPlusYYGate(np.pi / 4, 0.0), [0, 1])
qc.append(RZGate(np.pi / 3), [2])
qc.append(SwapGate(), [2, 3])
observable = SparsePauliOp.from_list([("XIII", 1.0), ("IXII", 1.0)])
prop = MajoranaPropagator(
noise=UniformNoiseModel(damping=0.001),
truncation=[
WeightTruncator(weight=10),
CoefficientTruncator(coefficient=1e-5),
TermBudget(min_terms=1_000_000),
],
)
result = prop.expectation_value(
MajoranaTermSum.from_sparse_pauli_op(observable),
MajoranaCircuit.from_qiskit(qc, n_modes=2 * qc.num_qubits),
initial_state=0,
)
print(result.expectation_value)
What propaq does¶
-
Pauli and Majorana propagation
Back-propagate an observable through a circuit in the Heisenberg picture, in either the Pauli or the Majorana basis. Implement custom bases by subclassing propaq's Python abstract classes.
-
Composable truncation
Weight, coefficient and term-budget truncators can be composed for flexible control over accuracy and memory usage.
-
Surrogate propagation
Compile a parameterized circuit into a symbolic model once, then evaluate expectation values for any parameter assignment at significantly lower cost, designed for variational algorithms.
-
Native plugin ABI
Write custom noise models and truncation policies in C, Rust or AOT-compiled Julia and load them as shared libraries, allowing for low-overhead customization of the propagation engine.
-
Extrapolation
Zero-noise and zero-cutoff extrapolators recover an estimate of the noiseless, untruncated expectation value from a sweep of runs.
-
I/O, Storage & Logging
Save and load propagated observables, lazy iteration of terms from disk, and logging of truncation statistics and key performance metrics.
Install¶
Requires Python 3.10 or newer. Pre-built wheels are published for Linux x86-64, macOS and Windows. See Installation for more information.
References¶
propaq implements the algorithms described in:
Pauli propagation
M. S. Rudolph, T. Jones, Y. Teng, A. Angrisani, and Z. Holmes, "Pauli Propagation: A Computational Framework for Simulating Quantum Systems," May 27, 2025. arXiv:2505.21606
Majorana propagation
A. Miller et al., "Simulation of Fermionic circuits using Majorana Propagation," Dec. 16, 2025. arXiv:2503.18939