Skip to content

propaq

Fast Heisenberg-picture propagation for quantum circuit simulation.

Get started Browse examples API reference

CI PyPI Python versions License: MIT


Back-propagate an observable through a fermionic circuit
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

pip install propaq
pip install "propaq[cirq,openfermion,hybrid]"
git clone https://github.com/hkbelagali/propaq
cd propaq
pip install -e ".[dev]"

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