Skip to main content

monoprop

because your operators deserve to propagate at escape velocity

Documentation Test monoprop codecov

monoprop is a high-performance C++ library with Python bindings for Majorana and Pauli propagation — a backend for classically simulating and variationally optimising quantum circuits. Rather than storing the full quantum state, it expands an operator in the Majorana basis and propagates it through a circuit, truncating terms that contribute little. It scales to large systems by partitioning the operator across cores and across nodes with MPI.

[!WARNING] This package is under active development. This project follows Semantic Versioning. While in 0.x.y, breaking changes may occur in minor releases. Pin your version if you depend on it. If you have feedback, please open an issue.

Benchmarks

Check out the comparison of monoprop against other open-source Pauli propagation engines in [benches/third_party]! Runtime Benchmark Memory Benchmark

📖 Full documentation: https://docs.algorithmiq.fi/monoprop

Installation

pip install monoprop      # or: uv add monoprop

The prebuilt PyPI wheels are single-process (built without MPI). For multi-rank runs, or to build the C++ library and executables, build from source (see below).

Quick example

Back-propagate a Majorana observable through a one-gate circuit:

from monoprop import MajoranaPropagator, ExpGate, Circuit, MajoranaOperator

# Observable m_0 m_1 m_2 m_4, evolved under one Majorana rotation exp(-i θ/2 · M_γ),
# generated by M_γ = i*m_4 m_5.
observable = MajoranaOperator({(0, 1, 2, 4): 1.0}, num_modes=8)
gate = ExpGate(MajoranaOperator({(4, 5): 1j}, num_modes=8))  # Hermitian generator: weight-2 => imaginary coeff
circuit = Circuit(gates=[gate], parameters=[0.5])  # one angle value per gate

mp = MajoranaPropagator.from_circuit(circuit, observable, cutoff=16)
print(mp.evolved_operator())  # the gate splits the monomial into two terms

Qubit (Pauli) operators are simulated with PauliPropagator. Here we back-propagate Z ⊗ Z through one exp(-i θ/2 · X_0) rotation:

from monoprop import PauliPropagator, ExpGate, Circuit, PauliOperator, Pauli

observable = PauliOperator({"ZZ": 1.0}, num_qubits=2)  # num_qubits lives on the observable
gate = ExpGate(PauliOperator({Pauli("X", 0): 1.0}, num_qubits=2))  # exp(-i θ/2 · X_0)
circuit = Circuit(gates=[gate], parameters=[0.5])  # one angle value per gate

mp = PauliPropagator.from_circuit(circuit, observable, cutoff=16)  # construct + evolve
print(mp.evolved_operator())  # the gate splits Z ⊗ Z into two terms

See the getting-started guide for fermionic operators and more.

Building from source

A from-source build gives you the editable Python bindings and the standalone C++ library and executables. MPI is off by default in every build path; enable it explicitly.

Python bindings (via uv):

uv sync --all-extras -v
# with MPI:
uv sync --all-extras -v --config-settings=cmake.define.monoprop_ENABLE_MPI=ON

C++ library and executables (via CMake presets — the same ones CI configures with):

cmake --preset release-gcc        # release-gcc-mpi to enable MPI
cmake --build --preset release-gcc

Full instructions — prerequisites, MPI options, and running the example executable — are in the building guide.

Running the tests

uv run python -m pytest -m "not mpi"   # Python tests (serial)
just test-py-mpi                       # Python tests under MPI
ctest --preset release-gcc             # C++ unit tests (release-gcc-mpi for MPI)
just test-cpp-wide                     # C++ unit tests with a 64-bit TermIndex

See the building guide for the with/without-MPI details and the rank matrix.

Development environment

The repository ships a DevContainer that installs every dependency (including the MPI toolchain and pre-commit hooks) and configures the editor. To use it you need:

  1. A working Docker installation (Docker Desktop on macOS/Windows, Docker Engine on Linux).
  2. Visual Studio Code with the Dev Containers extension.

Clone the repository and open the folder in VS Code; it will build the container and run the setup automatically (this takes a few minutes the first time):

git clone https://github.com/Algorithmiq/monoprop.git

Without a DevContainer, install the prerequisites from the building guide by hand.

Contributing

Please read CONTRIBUTING.md before opening a pull request. All contributions require accepting the Individual CLA through CLA Assistant. If you are contributing on behalf of your employer, contact cla@algorithmiq.fi to arrange a Corporate CLA.

Documentation

The documentation is built with Fumadocs and hosted at https://docs.algorithmiq.fi/monoprop. The Python API reference is generated from docstrings (griffe) and the tutorials are executed from the notebooks in docs/notebooks/. Building the documentation locally requires npm, the Node.js package manager. Once that is available, you can run:

just build-docs   # output: docs/out/
just serve-docs   # live-reloading dev server

Keeping documentation up to date

Any PR that changes behavior, public APIs, build/test commands, or repository paths must update the relevant docs in the same change:

  1. AGENTS.md for agent/developer workflow instructions.
  2. README.md for top-level usage and contributor guidance.
  3. docs/ pages for user-facing and in-depth technical documentation.

Citation

If you use monoprop in your research, please cite:

@ARTICLE{Miller2025-aj,
  title         = "{Simulation of Fermionic circuits using Majorana Propagation}",
  author        = "Miller, Aaron and Holmes, Zoë and Salehi, Özlem and
                   Chakraborty, Rahul and Nykänen, Anton and Zimborás, Zoltán
                   and Glos, Adam and García-Pérez, Guillermo",
  journal       = "arXiv [quant-ph]",
  year          =  2025,
  eprint        = "2503.18939",
  archivePrefix = "arXiv",
  primaryClass  = "quant-ph",
  url           = "https://arxiv.org/abs/2503.18939"
}

License

monoprop is released under the Apache License 2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monoprop-0.8.0.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

monoprop-0.8.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

monoprop-0.8.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

monoprop-0.8.0-cp312-abi3-macosx_15_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12+macOS 15.0+ ARM64

monoprop-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

monoprop-0.8.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

monoprop-0.8.0-cp311-cp311-macosx_15_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

File details

Details for the file monoprop-0.8.0.tar.gz.

File metadata

  • Download URL: monoprop-0.8.0.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for monoprop-0.8.0.tar.gz
Algorithm Hash digest
SHA256 498eecc75bc887f2c2b5af283434432b3b97d181cf073b8fd82d3cf559758cad
MD5 34c51cb043687edc8327e13dc32a133c
BLAKE2b-256 394ee93c786aa0482114220edcbcbdfcfc1838d087f5fab9e6f9eff23d47358e

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0.tar.gz:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a5b318040c4ebacb45290f21f70e8855004421b5a0594ad2109d43e8e5d9093
MD5 7d16b57be04c5645244907db2f837102
BLAKE2b-256 a563c727a6bcedd3315fdc0d68521e81a59178540a1bb0cecc2bba0d0f6186a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b8834628b23011c4fa3c7d36faa4e435d18585e80ca65a7024387de99f08f465
MD5 e33950fe472445f8d6d0348eeae34fb8
BLAKE2b-256 31fa3a0d31b2f567009b8e8a41a1e1878d6768dc3f953d8f6ceba45b7a6aad13

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp312-abi3-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp312-abi3-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d3ec87cc042ec52222136e15f84db64b6f09ef1a253c932cc800bba9ee4fad37
MD5 961d2aab85d89d374fe7d18f05b17e0e
BLAKE2b-256 d61b5b87e205c4afc01fd15c3b89f4501c5a3727449570984a1711516dd718e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp312-abi3-macosx_15_0_arm64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 802f8045907fe205904f88f33fb8e3820452f90eb1cb01403fe172e62b3b1542
MD5 04fc41779461305ffdd33842e44b24ae
BLAKE2b-256 8c5b4e02cb0462b5b8d76a4c2ece8b3dc6a2564d0aa476af22fab5c91c76dae3

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5233df090111542baedacfdc308d7cffc48fd5da35ce74c7b5a36ad687a23faa
MD5 1f2c84f17d6c91a81081c4da4feebd82
BLAKE2b-256 41b6ac719c24eec106df045e89168898c7f4a8847b2dbf2c260d0c9b9679d6e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoprop-0.8.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for monoprop-0.8.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 e2102a00f368b6b8ac3b55d928f83110526f6d078d053e58d330b623e6309c45
MD5 c8c0509fd000ecbbbb0a76cae417b439
BLAKE2b-256 f9403af018f06083ae704fee5a386aa371288b0fdd87489f4ccdfba51046d904

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoprop-0.8.0-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: deploy.yml on Algorithmiq/monoprop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.8.0 This release

7 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page