Skip to main content

Quantum state-vector simulator for Apple Silicon

Project description

macquerel

A quantum state-vector simulator targeting Apple Silicon's unified-memory architecture.

Features

  • CPU backend — pure NumPy reference implementation using the tensordot reshape trick
  • MLX backend — Apple Silicon GPU acceleration via MLX, with graceful fallback on other platforms
  • Gate fusion compiler — greedy left-to-right fusion of adjacent gates (up to 4 qubits) into composite unitaries
  • Gate classification — automatically classifies gates as diagonal, permutation, or dense for optimized dispatch
  • Full gate library — I, H, X, Y, Z, S, T, Rx, Ry, Rz, P, CNOT, CZ, SWAP, CP

Installation

Requires Python 3.11+.

uv sync

To enable the MLX backend on Apple Silicon:

uv sync --extra mlx

Usage

from macquerel import Circuit, Simulator

# Bell state
circuit = Circuit(2)
circuit.h(0).cx(0, 1).measure_all()

sim = Simulator()               # defaults to CPU backend
counts = sim.run(circuit, shots=1000)
print(counts)  # Counter({'00': ~500, '11': ~500})
# Statevector (no measurement)
circuit = Circuit(2)
circuit.h(0).cx(0, 1)

sv = sim.statevector(circuit)
print(sv)  # [0.707+0j, 0+0j, 0+0j, 0.707+0j]
# Apple Silicon GPU backend
sim = Simulator(backend="mlx")

Available gates

Method Gate
.h(q) Hadamard
.x(q) / .y(q) / .z(q) Pauli X/Y/Z
.s(q) / .t(q) S / T phase
.rx(q, θ) / .ry(q, θ) / .rz(q, θ) Rotation gates
.p(q, λ) Phase gate
.cx(ctrl, tgt) CNOT
.cz(ctrl, tgt) Controlled-Z
.swap(q0, q1) SWAP
.cp(ctrl, tgt, λ) Controlled-Phase
.measure(qubits) / .measure_all() Measurement

Builders return self for chaining.

Architecture

macquerel/
├── gates.py         # Gate matrices + classify()
├── circuit.py       # Circuit / Gate / MeasureOp dataclasses
├── compiler.py      # Gate fusion (fuse_gates)
├── simulator.py     # Simulator — statevector() and run()
└── backends/
    ├── cpu.py       # NumPy backend
    └── mlx_backend.py  # MLX backend (Apple Silicon)

Running tests

uv run pytest

MLX backend tests are automatically skipped when MLX is not installed.

Benchmarks

Quick smoke run (completes in a few seconds):

uv run python tests/benchmarks/bench_backends.py --qubits 10 14 --reps 1

Full benchmarks (may take several minutes at 24+ qubits):

# CPU vs MLX backend — random circuits, various qubit counts
uv run python tests/benchmarks/bench_backends.py

# Single-gate throughput (GB/s)
uv run python benchmarks/bench_single_gate.py

# QFT, random, QAOA circuits + fusion-width sweep
uv run python benchmarks/bench_circuits.py

All scripts print results live as each configuration completes. Pass --json FILE to save results for later comparison.

Requirements

  • Python ≥ 3.11
  • numpy ≥ 1.24
  • mlx ≥ 0.3.0 (optional, Apple Silicon only)

Project details


Download files

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

Source Distribution

macquerel-0.1.1.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

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

macquerel-0.1.1-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file macquerel-0.1.1.tar.gz.

File metadata

  • Download URL: macquerel-0.1.1.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for macquerel-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9a9b665bce2848fe0cf688bae7f9ca73b1b9d2c20e36809f0f7fbdce1a3bdc27
MD5 23f9122f753c27d14a1f099d5e1bdff4
BLAKE2b-256 2c84c7fcc94242207f0943ad1777fd37c78e908b0c844448334ce03f76477ba1

See more details on using hashes here.

Provenance

The following attestation bundles were made for macquerel-0.1.1.tar.gz:

Publisher: release.yml on guenp/macquerel

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

File details

Details for the file macquerel-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: macquerel-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for macquerel-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9468770d7aefa5013957323d5be8359feefda5a908665405eaee8705aecb5baf
MD5 118b6bbb0fca92f8b8130973a1ccd853
BLAKE2b-256 546efa0f29b4b33b8a2e565ecc2964342de78543127b9c475646977da8f3f671

See more details on using hashes here.

Provenance

The following attestation bundles were made for macquerel-0.1.1-py3-none-any.whl:

Publisher: release.yml on guenp/macquerel

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

Supported by

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