Q-Verdict Free Client
The free client is the open-source layer of Q-Verdict, licensed under Apache 2.0. It runs entirely offline, requires no account, and sends no data off your machine. It accepts circuits from Qiskit, Cirq, TKET, Amazon Braket, and OpenQASM and returns a verdict: noise, bug, or inconclusive.
Installation
Early access: PyPI release pendingThe free client will be available on PyPI. Early access participants can install from the provided distribution file:
pip install q-verdict
Python 3.9 or later is required. The client has no mandatory runtime dependencies beyond your existing framework installation. Install only the adapters you need:
# Qiskit pip install q-verdict qiskit # Cirq pip install q-verdict cirq # TKET pip install q-verdict pytket # Amazon Braket pip install q-verdict amazon-braket-sdk # OpenQASM (no additional dependency required) pip install q-verdict
Quickstart
Pass any supported circuit to QVerdict().analyze().
The client runs its classification locally and returns a result object.
from qverdict import QVerdict from qiskit.circuit.library import QFT circuit = QFT(4) result = QVerdict().analyze(circuit, shots=2048) print(result.verdict) # "noise" | "bug" | "inconclusive" print(result.reason) # "Readout error on qubit 1, asymmetric calibration drift." (illustrative example) print(result.confidence) # 0.87 (illustrative; actual confidence varies by circuit and shot budget) print(result.evidence) # {"error_type": "readout", "qubit": 1, "rate": 0.043, ...} (illustrative example)
The shots argument controls how many simulated samples
the classifier uses internally. Higher shot counts give the classifier
more signal and reduce inconclusive verdicts on borderline cases.
The default is 1024.
Interpreting results
Noise
The circuit logic is correct. The bad result is consistent with hardware-level error patterns: readout calibration drift, coherent gate error, cross-talk, or decoherence accumulation. The circuit would produce the correct answer on a noiseless device.
Next step: apply error mitigation (zero-noise extrapolation, probabilistic error cancellation), increase shot count, or recalibrate the target qubit(s) before rerunning.
Bug
The circuit contains a logical error that would produce an incorrect result even on a perfect, noiseless device. The error is in the circuit construction, not the hardware. Common causes: incorrect qubit ordering, missing or duplicated gates, phase errors, or discrepancies introduced by a transpiler pass.
Next step: inspect the circuit. Error mitigation will not help; the circuit needs to be corrected first.
Inconclusive
The evidence is insufficient to distinguish hardware error from a
circuit bug at this shot count or noise level.
result.evidence contains the classifier's working data
and identifies what additional information would resolve the
classification.
Next step: increase shots and rerun,
or submit to the licensed engine for structural verdict analysis,
which does not depend on shot count.
Framework adapters
Qiskit
Pass any qiskit.QuantumCircuit directly.
from qverdict import QVerdict from qiskit import QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() result = QVerdict().analyze(qc)
Cirq
Pass any cirq.Circuit directly.
from qverdict import QVerdict import cirq q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit([cirq.H(q0), cirq.CNOT(q0, q1), cirq.measure(q0, q1)]) result = QVerdict().analyze(circuit)
TKET
Pass any pytket.Circuit directly.
from qverdict import QVerdict from pytket import Circuit circuit = Circuit(2) circuit.H(0).CX(0, 1).measure_all() result = QVerdict().analyze(circuit)
Amazon Braket
Pass any braket.circuits.Circuit directly.
from qverdict import QVerdict from braket.circuits import Circuit circuit = Circuit().h(0).cnot(0, 1) result = QVerdict().analyze(circuit)
No AWS account or network connection is required. The adapter operates on the circuit object locally.
OpenQASM
Pass an OpenQASM 3.0 source string. The adapter parses the program and reconstructs the circuit graph before analysis. No intermediate transpilation is performed.
from qverdict import QVerdict qasm = """ OPENQASM 3.0; qubit[2] q; bit[2] c; h q[0]; cx q[0], q[1]; c = measure q; """ result = QVerdict().analyze(qasm)
Result object
QVerdict().analyze() returns a VerdictResult
instance with the following properties.
| Property | Type | Description |
|---|---|---|
| verdict | str |
"noise", "bug", or
"inconclusive". The primary classification.
|
| reason | str | Plain-language explanation of the verdict. Names the specific error type and affected qubit(s) where identifiable. |
| confidence | float | Classifier confidence in the verdict, from 0.0 to 1.0. Values below 0.6 typically correspond to an inconclusive verdict. Use this to decide whether to increase shot count. |
| evidence | dict | Structured diagnostic data: error type, affected qubits, measured rates, and the features that drove the classification. Contents vary by verdict type. |
Configuration
Options can be passed at instantiation or per call. Per-call arguments take precedence.
# set defaults at instantiation qv = QVerdict(shots=4096, verbose=False) # override per call result = qv.analyze(circuit, shots=8192)
| Option | Type | Description |
|---|---|---|
| shots | int |
Number of simulated samples for classification. Default:
1024. Increase to reduce inconclusive verdicts
on borderline circuits. Diminishing returns above
8192 for most circuits.
|
| verbose | bool |
If True, prints classifier working steps to
stdout. Useful for debugging unexpected verdicts. Default:
False.
|
Limitations
The free client classifies based on statistical signatures. It does not have access to the circuit's full derivation chain or structural properties.
- Verdict quality depends on shot count. Low shot counts produce more inconclusive results, particularly when noise and bug signatures overlap.
- The client cannot distinguish between multiple simultaneous error sources in a single circuit. It identifies the dominant source.
- Photonic and continuous-variable circuits require the licensed engine. The free client will return an error if a photonic circuit is passed.
- Structural verdict (catches what a histogram misses, no reference run needed) requires the licensed engine.
If you are consistently seeing inconclusive verdicts or need structural verdict analysis, the licensed engine addresses both. Apply for enterprise licensing →