Skip to main content

PennyLane plugin for the Maestro quantum simulator by Qoro Quantum

Project description

pennylane-maestro

PyPI version Tests License: GPL v3

A PennyLane plugin for the Maestro quantum simulator by Qoro Quantum.

Drop-in replacement for default.qubit — one line change, same code, faster results.

# Before
dev = qp.device("default.qubit", wires=20)

# After — up to 20× faster
dev = qp.device("maestro.qubit", wires=20)

Why Maestro?

  • Iterate Faster — Up to 20× faster statevector simulations for VQE/QAOA loops.
  • Scale Up — Simulate 1000+ qubits using Maestro's optimized MPS backend.
  • Sample from MPS — The only PennyLane MPS backend that supports shot-based sampling.
  • GPU Ready64× faster than PennyLane GPU on MPS workloads via cuQuantum.

Installation

pip install pennylane-maestro

That's it. This installs pennylane (≥0.38) and qoro-maestro (≥0.2.8) automatically.

Quick Start

import pennylane as qp
import numpy as np

dev = qp.device("maestro.qubit", wires=2)

@qp.qnode(dev)
def circuit(theta):
    qp.RX(theta, wires=0)
    qp.CNOT(wires=[0, 1])
    return qp.expval(qp.PauliZ(1))

print(circuit(np.pi / 4))

Performance

Benchmarked on PennyLane 0.44.1. Run examples/benchmark_lightning_vs_maestro.py to reproduce.

Statevector

Qubits default.qubit lightning.qubit maestro.qubit vs dq vs lq
20 977 ms 115 ms 45 ms 22× 2.6×
22 4.31 s 543 ms 184 ms 23× 3.0×
24 10.5 s 2.36 s 820 ms 13× 2.9×
26 DNF 10.1 s 3.56 s 2.8×

MPS — Scaling to 1000+ Qubits

Qubits default.qubit default.tensor (quimb) maestro.qubit (MPS) vs quimb
100 OOM 90 ms 11 ms
500 OOM 689 ms 90 ms 7.7×
1000 OOM 1.96 s 207 ms 9.5×

MPS Shot Sampling

🔥 Only Maestro supports this. Neither default.tensor nor Qiskit Aer MPS offer shot-based sampling through PennyLane.

Qubits maestro.qubit (MPS) Unique Samples
100 259 ms 10,000
500 1.22 s 10,000
1000 2.43 s 10,000

Backends

All backends are selected via keyword arguments — no code changes needed:

# CPU Statevector (default)
dev = qp.device("maestro.qubit", wires=20)

# MPS for 100+ qubits
dev = qp.device("maestro.qubit", wires=100,
                simulation_type="MatrixProductState",
                max_bond_dimension=256)

# Stabilizer for Clifford circuits
dev = qp.device("maestro.qubit", wires=1000,
                simulation_type="Stabilizer")

# Finite shots
dev = qp.device("maestro.qubit", wires=10, shots=10_000)

# GPU (requires separate license — see below)
dev = qp.device("maestro.qubit", wires=28, simulator_type="Gpu")
All available options
simulator_type Description
"QCSim" Qoro's optimized CPU simulator (default)
"Gpu" CUDA-accelerated GPU simulator
"CompositeQCSim" p-block simulation
simulation_type Description
"Statevector" Full statevector (default)
"MatrixProductState" MPS / tensor-train for large qubit counts
"Stabilizer" Clifford-only stabilizer
"TensorNetwork" General tensor network
"PauliPropagator" Pauli propagation
"ExtendedStabilizer" Extended stabilizer

Examples

Hamiltonian VQE

Hamiltonians are evaluated natively via Maestro's batched estimate() — all Pauli terms in a single C++ call:

import pennylane as qp
import numpy as np

n_qubits = 20
H = qp.Hamiltonian(
    [0.5] * (n_qubits - 1) + [0.3] * n_qubits,
    [qp.PauliZ(i) @ qp.PauliZ(i+1) for i in range(n_qubits - 1)] +
    [qp.PauliX(i) for i in range(n_qubits)]
)

dev = qp.device("maestro.qubit", wires=n_qubits)

@qp.qnode(dev, diff_method="parameter-shift")
def vqe_circuit(params):
    for i in range(n_qubits):
        qp.RY(params[i], wires=i)
    for i in range(n_qubits - 1):
        qp.CNOT(wires=[i, i + 1])
    return qp.expval(H)

params = np.random.random(n_qubits)
energy = vqe_circuit(params)
gradient = qp.grad(vqe_circuit)(params)

100-Qubit Ising Quench with MPS Shot Sampling

See examples/ising_phase_transition.py for a full demo that simulates a 100-qubit transverse-field Ising model and uses Maestro's exclusive MPS shot sampling to extract magnetization distributions and spatial correlations. Runs in ~30 seconds.

Supported Operations

PennyLane automatically decomposes any unsupported gate (e.g. Rot) into Maestro's native gate set. No manual intervention needed.


🚀 GPU Acceleration

For large-scale workloads, Maestro supports CUDA-accelerated simulation (statevector, MPS, tensor network) via NVIDIA cuQuantum.

dev = qp.device("maestro.qubit", wires=28, simulator_type="Gpu")

GPU Benchmark — Fermi-Hubbard MPS (48 qubits, χ=256)

Simulator Relative Runtime
Maestro GPU
Maestro CPU
Qibo GPU 7.5×
Qiskit CPU 14×
PennyLane GPU 64×

Larger instances failed to run on some platforms, limiting comparison.

Request GPU access & free trial at maestro.qoroquantum.net


Citation

If you use pennylane-maestro in your research, please cite:

@misc{pennylane_maestro,
  author       = {{Qoro Quantum}},
  title        = {PennyLane-Maestro: High-Performance C++ Backend for PennyLane},
  year         = {2026},
  publisher    = {GitHub},
  howpublished = {\url{https://github.com/QoroQuantum/pennylane-maestro}}
}

Authors & License

Maintained by Qoro Quantum (team@qoroquantum.de).

Licensed under GPL-3.0. See the LICENSE file for details.

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

pennylane_maestro-0.2.0.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

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

pennylane_maestro-0.2.0-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

Details for the file pennylane_maestro-0.2.0.tar.gz.

File metadata

  • Download URL: pennylane_maestro-0.2.0.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pennylane_maestro-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d171fcc0b42c0a466f988acf4585fe72711155ab42b2a01c4cfc6199e6d4614b
MD5 e3f5a187af2edd0880740761c8852766
BLAKE2b-256 e39f2ef7fa8c8555034d2ba4bccc814a230461cfb716ddb8e676a5b0efcaf0fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pennylane_maestro-0.2.0.tar.gz:

Publisher: publish.yml on QoroQuantum/pennylane-maestro

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

File details

Details for the file pennylane_maestro-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pennylane_maestro-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 03951ac701bbabb1cefbb21663382bd331a0cb5e5c57f340782e629c83151ee4
MD5 9b1b2bc9b5bc4dc58dcafc5b42fbba82
BLAKE2b-256 d2c8fbabc23e67cceedf36143c6d62c595b4bae7c18e04dba81148d6e6fd63db

See more details on using hashes here.

Provenance

The following attestation bundles were made for pennylane_maestro-0.2.0-py3-none-any.whl:

Publisher: publish.yml on QoroQuantum/pennylane-maestro

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