Skip to content

Hardware

Three backends, one number — and what still doesn't work

Every figure on this page is the project's own. The caveats below are kept as visible as the headline numbers on purpose: a result that hides its own limits is not more trustworthy for it.

Headline numbers

max cross-backend spread
3.54×10⁻⁶ eV max cross-backend spread Qiskit, Braket and Cirq vs. the internal NumPy state vector, LiH ADAPT-VQE
measurement circuits
29 measurement circuits 118 Pauli terms of LiH, grouped by qubit-wise commutation
QPU providers reachable
4 QPU providers reachable IBM Quantum through Qiskit Runtime; IonQ, IQM and Rigetti through Amazon Braket
H₂ curve on ibm_fez vs exact
≤ 0.44 eV H₂ curve on ibm_fez vs exact 7 bond lengths, 2 qubits, Qiskit Runtime Estimator at resilience level 2 (readout mitigation, twirling, ZNE)

The same Hamiltonian, three SDKs

ADAPT-VQE on LiH — 8 fermionic excitation operators, 208 CNOTs — built from one shared gate stream (X, H, S, S†, CNOT, Rz) and translated per SDK. No exceptions, no cherry-picking: every backend against the same FCI reference.

Backend Ground-state energy Error
NumPy (state vector) −187.438634 eV 3.65×10⁻⁶ eV vs. FCI
Qiskit −187.438636 eV 1.71×10⁻⁶ eV vs. FCI
Amazon Braket −187.438635 eV 2.97×10⁻⁶ eV vs. FCI
Cirq −187.438636 eV 2.22×10⁻⁶ eV vs. FCI

"NumPy (state vector)" is the internal reference implementation, not an SDK — the row this table checks the other three against.

What doesn't work yet

Read these before the table above, not after.

Error mitigation is the provider's, not Mandacaru's

On IBM hardware the Qiskit Runtime Estimator's resilience levels (readout mitigation, twirling, zero-noise extrapolation) are used as-is; Mandacaru has no mitigation module of its own — it is a roadmap target, not yet written. Pin good physical qubits with physical_qubits=[...]: a qubit whose readout has drifted since calibration ruins the energy while its recorded error still looks fine.

The grid is not translation-invariant, and the forces say so

A molecule translated rigidly across a frozen real-space grid changes energy — the egg-box effect, 18 meV on H₂ at h = 0.25 Å and falling with the spacing. The analytic force differentiates that discretized energy faithfully rather than hiding it, so it is real and it is in the numbers. Converge h before reading a small force as chemistry.

Relaxation follows the model, and some models have no minimum

H₂ and LiH relax cleanly. Water does not — not because the gradient is wrong, but because its energy surface in this model runs monotonically downhill as the O–H bonds stretch: −461.20 eV at 0.97 Å against −472.37 eV at 2.40 Å. The optimizer is walking correctly down a surface with no bound minimum. Check the scan before trusting a relaxation on a new system.

Gradient screening on hardware is still classical

On a real QPU every variational energy is measured natively, but ADAPT-VQE's operator-gradient screening step still executes on the classical state vector behind it. Fixed-ansatz VQE is the fully hardware-native method today.

Checked independently

The caveats above are about what is missing. What exists is checked against results that have nothing to do with a single lucky run:

  • Cross-backend state vectors agree to machine precision — the same anti-Hermitian generator factorizes exactly into Pauli rotations, no Trotter error
  • H₂ and LiH ground-state energies checked against published FCI references
  • Analytic forces checked against central differences of the same energy on the same grid — 8.6×10⁻⁵ eV/Å on H₂ in PAW-DZP, 4.6×10⁻³ eV/Å on frozen-core LiH in FAO, and 1.2×10⁻⁴ relative on water
  • A resumed run reproducing the uninterrupted one — the same operator sequence and an energy within 10⁻⁸ eV, after a simulated crash
  • A 1358-test pytest suite covering integrals, mappings, drivers and backend-provider equivalence
  • A dedicated Amazon Braket compatibility report — gate set, shots constraint, QWC grouping, QPU cost
  • The IBM Quantum path exercised end to end on Qiskit Runtime fake backends — transpiled to the processor, energies from the Estimator primitive
  • An H₂ dissociation curve measured on ibm_fez (2 qubits, parity mapping with two-qubit reduction) within 0.44 eV of the exact energies at every bond length, and above them, as a variational measurement must be

Reaching real hardware

Real QPU access goes two ways. IBM Quantum through Qiskit Runtime: save your account once, optimize on the local state vector, then measure the optimized states in one Estimator job with QiskitProvider(device="ibm_kingston,ibm_fez,ibm_marrakesh", shots=4096) — device="fake_kingston" rehearses the same path on your laptop. Amazon Braket: an AWS account, IAM permissions for Braket, and device=<Braket device or ARN>, shots=<n>. The install guide below covers the Python side; the how-to guide under docs/guide/aws_braket covers both services.

See the install guide
Roadmap

What's next

A real error-mitigation backend, hardware-native gradient screening for ADAPT-VQE — today the variational energies reach the QPU but the operator screening stays classical — and a GPU-accelerated integral backend alongside the existing C/OpenMP one.

Keep reading

Seven families of localized orbitals generated from scratch — FAO to def2-QZVPPD — the frozen core, and the C-accelerated integral engine underneath.

ADAPT-VQE, VQE, excited states and periodic systems — every solver sharing one driver, and a dry run before any of them.

The same algorithm compiled and executed on Qiskit, Amazon Braket and Cirq — one keyword, one unitary, machine-precision agreement.

Try it on your own structure

Install it, or read the manual first.