Skip to main content

Describe your quantum workload. We recommend where to run it.

Project description

Qlro

Show us your quantum circuit. We'll tell you where to run it.

from qiskit import QuantumCircuit
import qlro

qc = QuantumCircuit(4)
qc.h(0); qc.cx(0, 1); qc.cx(1, 2); qc.cx(2, 3)
qc.measure_all()

result = qlro.recommend(qc, category="chemistry")
result.primary      # → 'H2-2'
result.primary_fit  # → 0.8140

Qlro is a quantum device recommendation engine. Give it a circuit and a workload type, and it ranks every available quantum device by how well that device fits your specific workload — based on real benchmark data from Metriq (Unitary Foundation), not vendor marketing.

Install

pip install qlro

Ships with a snapshot of the Metriq benchmark dataset. No API keys, no accounts, no internet required.

How it works

  1. You have a quantum circuit (Qiskit QuantumCircuit or OpenQASM string).
  2. You tell Qlro what kind of workload it is: chemistry, simulation, optimization, or ml.
  3. Qlro scores every quantum device across four capability axes:
    • Γ (Connectivity) — verified entanglement coverage across the chip
    • Φ (Coherence) — information survival over circuit depth
    • F (Fidelity) — per-operation accuracy
    • T (Throughput) — effective operations per second
  4. You get a ranked list with scores, uncertainty bands, and the Metriq commit hash so everything is auditable.

The scoring framework is called WCPP (Workload-Conditioned Physical Projection). Every number comes from physics, not heuristics. See the full specification for the math, axioms, and proofs.

What Qlro does NOT do

  • Does not run your circuit. You run it yourself on IBM Quantum, AWS Braket, Quantinuum, etc.
  • Does not build or optimize circuits. That's Classiq, Qiskit transpiler, etc.
  • Does not measure hardware. That's Metriq / Unitary Foundation. We consume their data.
  • Does not hide uncertainty. Every score shows what's measured vs. estimated vs. assumed.

Jupyter integration

Qlro auto-renders as an inline HTML table in Jupyter notebooks. For quick interactive use:

%load_ext qlro.jupyter
%qlro my_circuit chemistry

See examples/vqe_h2_with_qlro.ipynb for a complete walkthrough.

Try the interactive simulator

Don't understand the problem Qlro solves? Play the simulator — a 5-minute browser game where you play as a quantum engineer under a paper deadline, with and without Qlro.

Update benchmark data

python scripts/sync_metriq.py

Pulls the latest from the metriq-data repository. Every recommendation is anchored to a specific Metriq commit for reproducibility.

Development

git clone https://github.com/linsletoh/qlro.git
cd qlro
pip install -e ".[dev,server]"
pytest  # 107 tests

Architecture

src/qlro/
├── scoring/          ← WCPP reference implementation
│   ├── physics.py    ← benchmark → physical value transforms
│   ├── axes.py       ← capability axis aggregation
│   ├── composition.py← workload-conditioned geometric mean
│   └── wcpp.py       ← qlro_fit() entry point
├── public_api.py     ← recommend(), log_outcome()
├── jupyter.py        ← %qlro magic for notebooks
├── runner/           ← Qiskit Aer experiment runner
├── comparison/       ← normalization pipeline
├── recommendation/   ← scoring + explanation engine
└── api.py            ← FastAPI web application

Key documents

Citation

If you use Qlro or WCPP in research, please cite the Zenodo preprint:

@misc{oh2026wcpp,
  author    = {Oh, Yeonwoo},
  title     = {{Workload-Conditioned Physical Projection: A Vendor-Neutral Framework for Quantum Device Selection}},
  year      = {2026},
  publisher = {Zenodo},
  version   = {0.6},
  doi       = {10.5281/zenodo.19678508},
  url       = {https://doi.org/10.5281/zenodo.19678508}
}

Latest version DOI: 10.5281/zenodo.19678508 (v0.8, adds cross-vendor hardware validation on IBM/IQM/IonQ and the one-shot adaptive calibration protocol; combined $r = 0.96$, $R^2 = 0.92$ across 15 circuit-device pairs spanning superconducting and trapped-ion architectures).

Concept DOI (always resolves to the latest version): 10.5281/zenodo.19601378.

Previous versions: v0.7 at 10.5281/zenodo.19650211, v0.6 at 10.5281/zenodo.19622226 (archived).

License

Apache 2.0

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

qlro-0.5.0.tar.gz (105.1 kB view details)

Uploaded Source

Built Distribution

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

qlro-0.5.0-py3-none-any.whl (93.6 kB view details)

Uploaded Python 3

File details

Details for the file qlro-0.5.0.tar.gz.

File metadata

  • Download URL: qlro-0.5.0.tar.gz
  • Upload date:
  • Size: 105.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for qlro-0.5.0.tar.gz
Algorithm Hash digest
SHA256 15cb110276abb110d7069b55119d12324d9c551fc8b969efa4e552c615ca8047
MD5 99770109192f24a03b8ac77599725194
BLAKE2b-256 365a00332ba8b12d97196b73318dd5f7bdf2590994472dc0858172f66a848722

See more details on using hashes here.

File details

Details for the file qlro-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: qlro-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 93.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for qlro-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52a21675c22d3d290e65fd6cb4d096a1d1ff0920894bfc161ab3a8e1787a284a
MD5 7935bc340f461e5218513671aad671bc
BLAKE2b-256 6a59c453c61541ed74062716d2daf8e869f03b39b26c36c4deac333f852a223d

See more details on using hashes here.

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