qsim-sdk
Official Python client for ZKSF (Zero Kelvin Simulation Foundry): a cloud service that executes quantum circuits on classical simulators, GPU accelerators, or real quantum processors, and attaches a documented accuracy statement to every approximate result.
- Website: https://zksf.org
- Console: https://app.zksf.org
- Documentation: https://zksf.org/docs
- API root:
https://api.zksf.org
1. Motivation
Classical simulation of quantum circuits is exact only in a narrow regime. Exact
statevector methods terminate near 30 to 32 qubits because state size grows as
2^n. Beyond that, every practical method is approximate: tensor networks truncate
the bond dimension, Pauli propagation truncates operator weight, and real hardware
substitutes device noise for the ideal distribution.
An approximate result without an error statement is not a measurement, it is an
assertion. The purpose of this service, and of the certification protocols documented
in docs/CERTIFICATION.md, is to return a quantity alongside
each result that states how far it may be from the truth, and to make that quantity
independently checkable by a third party.
2. Scope of this repository
This repository contains the client library only. It is a thin HTTP wrapper of roughly 120 lines: authentication, circuit serialisation to OpenQASM 2, four endpoint calls, and a polling loop.
| In this repository | Not in this repository |
|---|---|
HTTP client (qsim_sdk/) |
Simulation engines |
| Packaging metadata | The routing policy implementation |
| Usage examples | Certification computation |
| Protocol documentation | Service infrastructure |
The simulation engines, the router, and the certification computation execute server-side and are not open source. The client is published so that users can read exactly what is transmitted before supplying an API token.
3. Installation
pip install qsim-sdk
Requires Python 3.10 or newer. Dependencies are httpx and qiskit.
To submit circuits written in Cirq, PennyLane, pyQuil, or Amazon Braket, install the optional transpiler extra, which routes them through qBraid into Qiskit:
pip install "qsim-sdk[multiframework]"
Obtain an API token from the console at https://app.zksf.org (sign in, then "Copy API token").
4. Quick start
The notebook above runs in the browser with nothing installed. Its first half needs no account and spends nothing: it reads four real, already-completed certified runs from the public API, covering exact simulation, an approximate run with a measured bound, a 192-qubit Pauli propagation result, and a Bell state executed on IonQ Forte-1 hardware. The second half runs new jobs against your own token.
Six algorithm tutorials follow the same pattern, one per notebook: build the circuit, then
read the certificate for the run that produced the published result. See
examples/ for all seven, or jump straight in:
GHZ and Bell states ·
Grover ·
QAOA MaxCut ·
VQE H2 ·
Bernstein-Vazirani ·
Teleportation
import qsim_sdk
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(1, 2)
qc.measure_all()
client = qsim_sdk.Client(token="YOUR_TOKEN")
job = client.run(qc, shots=1000)
print(job["result"]["counts"]) # outcome histogram
print(job["result"]["error_info"]) # accuracy statement for this run
Further examples are in examples/.
5. API surface
| Method | Purpose | Cost |
|---|---|---|
estimate(circuit, shots, engine=None) |
Predicted engine, runtime, and price, or the reason the circuit is infeasible | Free |
submit(circuit, shots, engine=None, ...) |
Enqueue a job, returns a job id | Billed on completion |
job(job_id) |
Poll a job record | Free |
run(circuit, shots, engine=None, ...) |
submit followed by polling until terminal state |
Billed on completion |
Client(base_url="https://api.zksf.org", token=None). The base URL is overridable for
self-hosted or staging deployments.
5.1 Cost control
estimate() is free, instant, and returns the engine that would be selected, the
predicted wall-clock seconds, the predicted cost in USD, and the reason for that
selection. Calling it before run() is the recommended pattern for any circuit whose
cost is not already known.
5.2 Failure semantics
The client raises rather than returning a result that cannot be trusted:
| Exception | Condition |
|---|---|
qsim_sdk.JobRejected |
The circuit is intractable or infeasible under the request. The message states why, and what change would make it feasible |
qsim_sdk.JobFailed |
An engine error or a hardware-provider error |
TimeoutError |
The job did not reach a terminal state within timeout seconds |
Rejection is deliberate. A circuit that would return an inconclusive answer is refused with a diagnostic rather than executed and reported with a meaningless error bar.
5.3 Non-blocking submission
Hardware jobs may wait in a provider queue for minutes to hours. run() polls until
the result attaches. For long-running hardware work, separate the two phases:
job_id = client.submit(qc, shots=1000, engine="qpu.rigetti")
job = client.job(job_id) # poll at your convenience
6. Engines
A rule-based router selects the cheapest engine adequate for the submitted circuit.
No language model or learned policy participates in engine selection or in simulation.
Selection can be overridden with the engine argument.
| Class | Engine | Method | Regime and constraints |
|---|---|---|---|
| CPU | exact.cpu |
Aer statevector | Exact. Hard ceiling at 30 qubits, set by RAM |
| CPU | clifford |
Stim | Exact for Clifford and stabilizer circuits, scales to thousands of qubits. Rejects non-Clifford gates |
| CPU | mps.quimb.cpu |
Tensor network (quimb) | Matrix product state, past 100 qubits. Accuracy depends on circuit entanglement. The only engine offering measured single-run bounds |
| CPU | mps.aer.cpu |
Tensor network (Aer) | An independent MPS implementation, retained for cross-checking against the quimb engine |
| CPU | pauli.cpu |
Pauli propagation | Expectation values rather than sampled counts. Supported gates: h, cx, cz, swap, rx, ry, rz, rzz, rxx, ryy, x, y, z, s, t, and their inverses |
| CPU | noisy.cpu |
Density matrix or statevector with a noise model | Device-noise preview, superconducting model by default, optional zero-noise error mitigation. Same 30-qubit ceiling. Not certifiable, see section 7 |
| GPU | exact.gpu |
Aer CUDA statevector | Exact. Ceiling is deployment-configured via QSIM_GPU_MAX_QUBITS |
| QPU | qpu.rigetti |
Real hardware | Rigetti Cepheus superconducting processor. Billed at provider cost |
| QPU | qpu.ionq |
Real hardware | IonQ Forte-1 trapped-ion processor. Billed at provider cost |
Two MPS implementations are maintained deliberately. Agreement between independent implementations of the same approximation is evidence that neither carries an implementation-specific error, which is a different question from whether the approximation itself is tight.
Refer to https://zksf.org/docs for current qubit ceilings, which are deployment configuration rather than properties of the methods.
7. Certification
Two protocols are defined. Both are described in full, with worked figures, in
docs/CERTIFICATION.md.
| Protocol | Applies to | Reports |
|---|---|---|
| ZCC-v0.1 | Simulated results | An error bound on the returned distribution |
| ZHF-v0.1 | Quantum-hardware results | Measured fidelity against the exact ideal distribution |
ZCC-v0.1 covers exact.cpu, exact.gpu, clifford, mps.quimb.cpu, mps.aer.cpu,
and pauli.cpu. It does not cover noisy.cpu, for the reason given in section 8.
Every job may be exported as a signed certificate carrying a stable identifier. The certificate is retrievable without authentication, so a reader who was not party to the original run can check it:
GET https://api.zksf.org/certify/<cert_id> # HTML verification page
GET https://api.zksf.org/certify/<cert_id>/pdf # PDF
8. Limitations
Stated explicitly, because a certification claim is only as credible as its declared boundaries:
- A ZCC-v0.1 bound quantifies the error introduced by the approximation used in that specific run. It does not bound error arising from an incorrectly specified circuit, nor from finite sampling, which is reported separately as shot noise.
- Rigorous single-run bounds are available on the quimb MPS engine. Other engines report a convergence-based accuracy statement, which is diagnostic rather than a proof.
- Noise-preview runs are not certifiable. The
noisy.cpuengine simulates a device noise model, so its output deliberately approximates a noisy machine rather than the ideal distribution. There is no ideal reference for a bound to be taken against, and no certificate is issued for these runs. - A ZHF-v0.1 fidelity is a measurement of one hardware run against a reference distribution. It characterises that execution on that device at that time. It does not predict the fidelity of a subsequent run.
- Direct verification requires an obtainable reference distribution, which constrains the circuit sizes for which ZHF-v0.1 can be evaluated in its direct mode.
- Protocol versions are pinned in the identifier (
v0.1). Version numbers below 1.0 indicate that the specifications are not yet frozen.
9. Citation
If this service or its certification protocols contribute to published work, please
cite the protocol note. Machine-readable metadata is in CITATION.cff.
10. Contributing and security
- Contribution guidance:
CONTRIBUTING.md - Vulnerability disclosure:
SECURITY.md. Please do not open a public issue for a security report.
11. License
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qsim_sdk-0.3.0.tar.gz.
File metadata
- Download URL: qsim_sdk-0.3.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4adbe6233416b2d628456249db2596eb184e91450242003976dfe0fe6eaca08
|
|
| MD5 |
447e7c54618626427f6066e853f170e4
|
|
| BLAKE2b-256 |
ce43dcb2e26ec46af743a62a101ad17a1246bd12d2106c0756ff180667a19032
|
Provenance
The following attestation bundles were made for qsim_sdk-0.3.0.tar.gz:
Publisher:
publish.yml on official-dvl/zksf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qsim_sdk-0.3.0.tar.gz -
Subject digest:
a4adbe6233416b2d628456249db2596eb184e91450242003976dfe0fe6eaca08 - Sigstore transparency entry: 2475089495
- Sigstore integration time:
-
Permalink:
official-dvl/zksf@667156c26e4aa89e2d52e949bf8f7f0597e25fe0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/official-dvl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@667156c26e4aa89e2d52e949bf8f7f0597e25fe0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file qsim_sdk-0.3.0-py3-none-any.whl.
File metadata
- Download URL: qsim_sdk-0.3.0-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6db4eb09b9dc7353252f6ce4ac09f47e4fa782770a61de058373a0f404514d42
|
|
| MD5 |
821b43e8e895336753c04cbeb23ed736
|
|
| BLAKE2b-256 |
7ac3452c4c294a183663118cc6cd7ca443dcf341d328389528317e7fecd4f603
|
Provenance
The following attestation bundles were made for qsim_sdk-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on official-dvl/zksf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qsim_sdk-0.3.0-py3-none-any.whl -
Subject digest:
6db4eb09b9dc7353252f6ce4ac09f47e4fa782770a61de058373a0f404514d42 - Sigstore transparency entry: 2475089505
- Sigstore integration time:
-
Permalink:
official-dvl/zksf@667156c26e4aa89e2d52e949bf8f7f0597e25fe0 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/official-dvl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@667156c26e4aa89e2d52e949bf8f7f0597e25fe0 -
Trigger Event:
release
-
Statement type: