qubestack-pennylane
QuREKA backend plugin for PennyLane.
Run PennyLane circuits on IonQ hardware, the QPerfect Mimiq emulator,
IQM superconducting QPUs, or the AWS Braket Mock QA fleet through the
QuREKA platform. The plugin ships four PennyLane devices
that delegate execution to the same QuREKA gateway used by qubestack-cudaq;
the gateway then forwards jobs to the actual provider.
QXDEV-2579 · The Rigetti target (rigetti.ankaa-3) has been retired platform-wide
and qureka.rigetti is no longer registered.
PennyLane circuit
│
├──► qureka.ionq ──► POST /api/quantum-jobs ──► IonQ Cloud v0.4
│ (qpu.forte-1 · ionq-mock.*)
│
├──► qureka.mimiq ──► POST /api/quantum-jobs ──► QPerfect Mimiq
│ QuREKA gateway (sdt.qubesim* · mimiq-mock.*)
│ (qubestack-job-engine)
│
├──► qureka.iqm ──► POST /api/quantum-jobs ──► AWS Braket
│ (IQM Garnet / Emerald)
│
└──► qureka.braket ──► POST /api/quantum-jobs ──► AWS Braket Mock QA fleet
(braket-mock.*)
Supported Backends
IonQ (qureka.ionq)
| Backend ID | IonQ QPU |
|---|---|
ionq.forte-1 |
IonQ Forte |
ionq.aria-1 |
IonQ Aria 1 |
ionq.aria-2 |
IonQ Aria 2 |
ionq.forte-enterprise-1 |
IonQ Forte Enterprise |
ionq.simulator |
IonQ cloud simulator |
ionq-mock.qpu · ionq-mock.dry-fail · ionq-mock.expired · ionq-mock.preflight-fail · ionq-mock.run-fail · ionq-mock.submit-fail · ionq-mock.unknown |
IonQ Mock QA fleet (QXDEV-2586 · registered in resource-engine on dev/staging) |
Mimiq (qureka.mimiq)
| Backend ID | Provider |
|---|---|
sdt.qubesim-mimiq |
QPerfect Mimiq emulator (canonical) |
sdt.qubesim* |
Any future Mimiq profile (gateway routes by prefix) |
mimiq-mock.emul · mimiq-mock.run-fail · mimiq-mock.stopped · mimiq-mock.submit-fail |
MIMIQ Mock QA fleet (QXDEV-2586) |
IQM (qureka.iqm)
| Backend ID | IQM QPU (via AWS Braket) |
|---|---|
iqm.garnet |
IQM Garnet (arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet) |
iqm.emerald |
IQM Emerald (arn:aws:braket:eu-north-1::device/qpu/iqm/Emerald) |
Braket Mock (qureka.braket)
| Backend ID | Purpose (QXDEV-2586) |
|---|---|
braket-mock.qpu |
Nominal AWS Braket-routed QPU scenario |
braket-mock.cancelling |
Simulates cancellation flow |
braket-mock.run-fail |
Simulates run-time failure |
braket-mock.shot-shortage |
Simulates partial shot delivery |
braket-mock.submit-fail |
Simulates submit-side rejection |
braket-mock.unknown |
Simulates unknown/terminal-unknown state |
These match the device maps in qubestack-cudaq and the routing in
qubestack-job-engine. Server-side routing happens by deviceCode prefix:
ionq.* / ionq-mock.* → IonQ Cloud v0.4 (real or mock),
sdt.qubesim* / mimiq-mock.* → Mimiq (real or mock),
iqm.* → AWS Braket, braket-mock.* → AWS Braket Mock.
Installation
pip install qubestack-pennylane
Requires Python 3.12 (matches qubestack-cudaq's runtime baseline). The
plugin pins pennylane>=0.44,<0.45; tested against the current PyPI stable
PennyLane 0.44.1.
Quick Start
import pennylane as qml
# IonQ hardware
dev = qml.device(
"qureka.ionq",
wires=2,
backend="ionq.forte-1", # see Supported Backends
api_key="<QUREKA_API_KEY>", # or set QUREKA_API_KEY env var
shots=1000,
)
# Mimiq emulator (drop-in alternative)
dev = qml.device(
"qureka.mimiq",
wires=2,
backend="sdt.qubesim-mimiq",
api_key="<QUREKA_API_KEY>",
shots=1000,
)
# IQM superconducting QPU (via AWS Braket)
dev = qml.device(
"qureka.iqm",
wires=2,
backend="iqm.garnet", # or "iqm.emerald"
api_key="<QUREKA_API_KEY>",
shots=1000,
)
# AWS Braket Mock QA fleet (QXDEV-2586)
dev = qml.device(
"qureka.braket",
wires=2,
backend="braket-mock.qpu",
api_key="<QUREKA_API_KEY>",
shots=1000,
)
@qml.qnode(dev)
def bell():
qml.Hadamard(wires=0)
qml.CNOT(wires=[0, 1])
return qml.counts(wires=[0, 1])
print(bell())
# {'00': ~500, '11': ~500}
Configuration
| Parameter | Required | Description |
|---|---|---|
wires |
Yes | Number of qubits (or list of wire labels). |
shots |
Yes | Sampling shot count. All three devices are sample-based. |
backend |
Yes | Provider device code (tables above). |
api_key |
Yes (or QUREKA_API_KEY) |
QuREKA API key. |
url |
No | QuREKA gateway base URL. Default: QUREKA_TARGET_URL env var, then https://openapi.qureka.io. |
job_name |
No | Optional human-readable label. |
poll_interval |
No | Seconds between status polls (default 5.0). |
timeout |
No | Total seconds to wait for completion (default 600). |
endian |
No | Bit-ordering of gateway counts. Defaults: qureka.ionq="little" (raw IonQ integer keys), qureka.mimiq/qureka.iqm/qureka.braket="big" (bitstrings with qubit 0 leftmost). |
Supported Operations
The common qis gateset that the QuREKA gateway can forward to all four
providers (IonQ / Mimiq / IQM / AWS Braket Mock):
Hadamard, PauliX/Y/Z, S, T, SX, Identity, CNOT, CZ, SWAP,
RX, RY, RZ, PhaseShift, IsingXX, IsingYY, IsingZZ, plus the
adjoints of S, T, SX, RX, RY, RZ, IsingXX/YY/ZZ.
Higher-level operations (e.g. QFT, Toeplitz) must be decomposed first
via qml.transforms.decompose or qml.transforms.unitary_to_rot before
submission.
Development
git clone <repo>
cd qubestack-pennylane
# Python 3.12 is required.
python3.12 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip setuptools wheel
pip install -e . pytest responses
pytest -v
Architecture
- docs/ionq-integration.md — end-to-end IonQ flow
and side-by-side comparison with
qubestack-cudaq. - docs/mimiq-integration.md — Mimiq emulator integration: routing, JWT-based gateway interaction, big-endian protobuf result wrapper.
- docs/iqm-integration.md — IQM QPU integration via the gateway's AWS Braket route (Garnet / Emerald), whitelist validation, big-endian Braket measurement bitstrings.
- docs/testing-guide.md — how to run the full test suite and what each one verifies.
- docs/implementation-summary.md — high-level summary of what was built.
License
Apache License 2.0
Metadata
Release files for qubestack-pennylane 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| qubestack_pennylane-1.4.0.tar.gz | 65.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qubestack_pennylane-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 112.3 kB
Release files / qubestack_pennylane-1.4.0.tar.gz
| Download URL | qubestack_pennylane-1.4.0.tar.gz |
|---|---|
| Size | 65.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf49ce6b3581b9e769cb3d71a4f3845447ee2d43d96b38251f2c59c3636fe948
|
|
BLAKE2b-256 checksum How to use checksums |
75e1665be5a3516852e99642ee0da376ae298ded8f7b196934d4581fa0693e87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / qubestack_pennylane-1.4.0-py3-none-any.whl
| Download URL | qubestack_pennylane-1.4.0-py3-none-any.whl |
|---|---|
| Size | 46.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a8a82720369719723f17ade1495d8f8907a339446f8a869b264908cc91cff0b7
|
|
BLAKE2b-256 checksum How to use checksums |
05fb218a5b8641ad9d57ea0a934939cfcd6ab7a8f9dfcc82bfe31fbcc451619f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Security for qubestack-pennylane 1.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.