open-standards/wai/wai-quantum-qpu/conformance/provider-v1.json
Transaction Science 67b52900b4
Some checks failed
wai-quantum editors / does this change touch it (push) Successful in 38s
WAI operation catalogue / does this change touch it (push) Successful in 52s
wai-quantum clippy / does this change touch it (push) Successful in 46s
wai-quantum contract / does this change touch it (push) Successful in 46s
wai-quantum pulse and dynamics / does this change touch it (push) Successful in 47s
wai-quantum for JavaScript / does this change touch it (push) Successful in 49s
wai-quantum OpenQASM reader / does this change touch it (push) Successful in 48s
wai-quantum other formats / does this change touch it (push) Successful in 50s
wai-quantum extension points / does this change touch it (push) Successful in 38s
wai-quantum error correction and mitigation / does this change touch it (push) Successful in 40s
wai-quantum for Python / does this change touch it (push) Successful in 41s
wai-quantum service / does this change touch it (push) Successful in 39s
wai-quantum service / service energy · linux packages (push) Failing after 34s
wai-quantum studio and desktop / does this change touch it (push) Successful in 41s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 41s
wai-quantum variational and algorithm library / does this change touch it (push) Successful in 42s
wai-quantum verdicts and repairs / does this change touch it (push) Successful in 42s
wai-sink-android native sink library / does this change touch it (push) Successful in 19s
wai-sink-swift native sink package / does this change touch it (push) Successful in 44s
WAI Studio / does this change touch it (push) Successful in 45s
wai-quantum command line / does this change touch it (push) Successful in 9m2s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 8m59s
wai-quantum resource estimation / does this change touch it (push) Successful in 9m0s
wai-audit collector and player integration / does this change touch it (push) Successful in 9m18s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 25s
WAI examples / WAI examples · does this change touch them (push) Successful in 25s
wai-quantum wasmQ / does this change touch it (push) Successful in 13s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 11s
wai-quantum editors / editors · linux (push) Successful in 3m52s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (push) Successful in 1m46s
wai-quantum clippy / clippy, warnings denied, every feature set · linux (push) Successful in 6m35s
wai-quantum OpenQASM reader / reader and corpus · linux (push) Successful in 2m37s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (push) Successful in 2m42s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (push) Successful in 3m43s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (push) Successful in 4m7s
wai-quantum contract / API compatibility · linux (push) Successful in 11m14s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (push) Successful in 2m57s
wai-quantum for JavaScript / javascript · linux (push) Successful in 10m33s
wai-quantum other formats / readers, writers and the set · linux (push) Successful in 8m43s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 17m31s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 4m32s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 2m20s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (push) Successful in 2m51s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (push) Successful in 5m19s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (push) Successful in 4m4s
wai-quantum for Python / python · linux (push) Successful in 8m23s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 18m12s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (push) Successful in 8m35s
wai-quantum studio and desktop / studio · browser (push) Successful in 7m41s
wai-quantum extension points / the registry and the example · linux (push) Successful in 11m7s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 12m12s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 11m13s
wai-quantum service / service · linux (push) Successful in 14m53s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 13s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 5m53s
wai-quantum resource estimation / estimation and calibration · linux, release (push) Successful in 7m21s
WAI Studio / Studio in WebKit · linux (push) Successful in 22m10s
wai-audit collector and player integration / collector · linux (push) Successful in 4m55s
wai-quantum wasmQ / the reference modules rebuild to their modules of record · linux (push) Successful in 1m26s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 4m59s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · linux (push) Successful in 5m40s
wai-quantum wasmQ / interpreter and vectors under wasm32-wasip2 (wasmtime) (push) Successful in 6m31s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 15m4s
wai-quantum command line / command line · linux (push) Successful in 39m2s
WAI examples / WAI examples · portable · linux (push) Failing after 29m19s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 46m17s
wai-quantum pulse and dynamics / the same bits · macos (push) Successful in 1m25s
wai-quantum editors / editors · macos (push) Successful in 2m59s
wai-quantum for Python / python · macos (push) Successful in 3m33s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (push) Successful in 3m17s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m17s
wai-quantum service / service · macos (push) Successful in 8m29s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (push) Successful in 3m28s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 11m6s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 8m1s
wai-quantum extension points / the registry and the example · linux-arm64 (push) Successful in 8m26s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 7m43s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 14m42s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 15m21s
wai-quantum command line / command line · macos (push) Successful in 2m29s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m6s
WAI examples / WAI examples · android-app · linux-arm64 (push) Successful in 11m41s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · macos (push) Successful in 2m5s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (push) Successful in 30m40s
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-quantum-qpu: native-turns on its service's published API, a fifth basis gpi gpi2 ms, noise seeds, shot records with their leakage, cancel and a bounded estimate
The native-turns client read only a backend's qubits, sent zz to noise models
whose devices run only an MS gate, sent no noise seed, rebuilt counts from
probabilities where the service gives shot records, and could neither cancel
nor estimate. Each is fixed and tested against a fake built from the
service's published OpenAPI document (version 0.4), corrected where a
read-only positive control of the service (2026-11-12) answered otherwise
(tests/fake_turns/): it refuses every member and value the API does not
allow, answers the paths as the service did, runs the gates by the service's
own printed matrices, and answers in each published result format and bit
order.

- The backend from GET /backends/{backend}, which the service answers for
  simulator and for qpu.-prefixed processors (bare names are not found, the
  published enum notwithstanding): status available or refused, degraded
  stated, the simulator's noise models bounding the one sent,
  characterization_id as the calibration, a processor's pairs from its
  characterization; the list only for a noise model's device.
- Placement: device_target from a processor's characterization through the
  engine's backend-characterization import; an ms backend now reads as gpims
  exactly there.
- Gates: zz only where the backend lists it, else ms; under a noise model the
  modelled device's gates and qubits (the list's entry, else the published
  models). A program in another gate set, or a noise model on a processor, is
  refused before anything is sent.
- Basis::GpiMs (gpims): gpi, gpi2 and ms(phi0, phi1, theta), the first phase
  the first qubit's, theta 0 to 1/4 turn; each cz ms(0, 0, 1/4) between gpi2(1/4)
  and gpi2(3/4), every program the prx rz xx program gate for gate. Proved by
  the engine's equivalence check (the cz, frames into ms's phases, the phase
  order, whole programs); seven native vectors pinned and proved, gpizz among
  them for the first time. In the open protocol within version 1: schema,
  reference --basis gpims, an ms-past-a-quarter-turn refusal vector.
- The published matrices pinned: gpi2(0) is Rx(pi/2) and gpi2(1/2) Rx(-pi/2),
  as the matrix says and the prose does not.
- noise.seed from the job's seed (1 when none), sealed as /noise/seed in the
  receipt's execution and held to the seed the service says it ran.
- Results from shot records, else the service's counts, else probabilities,
  qubit 0 first in v2 bitstrings and bit arrays; records and counts must agree.
  Leaked shots are counted as read and sealed in a new optional member,
  leakage (quantum-providers 8.1, 8.4, both verifiers).
- Cancel (PUT /jobs/{id}/status/cancel, canceled read as cancelled); GET
  /jobs/{id}/cost after a run.
- Estimate: a gate-priced job is the rate card's figure for exactly its gates
  and shots, its minimum included, rounded up to the cent, admitted by a cost
  ceiling only where the service's own estimate is no higher; compute-time
  prices (the service's own: credits by the compute-second), estimates above
  the card, amounts in no currency or another currency meet no ceiling. The
  simulator is free and not asked (the service estimates processors only).
- Spec 4, 5.1, 8.1, 8.3, 8.4, 10; receipt corpus: five new made receipts and
  twelve crafted ones; crafted-kind-turns-shots is now valid.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-11 21:09:57 -05:00

127 lines
26 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"protocol": "wai.quantum.provider/1",
"about": "Conformance vectors for the open provider protocol (wai/extensions/quantum-providers.md). `messages` are sent as they are, each answer checked against `expect`. `billing` are `describe` answers' billing (section 5.1), each with how a client reads it: `free`, `priced`, `unpriced` (not free, and no price set: a job with no estimate has an unknown cost), or `refused` (of none of the three forms: the description is not complete, and a client takes the cost to be unknown). `programs` are OpenQASM 3 programs the checker compiles exactly to the provider's device, submits with seed 1, and checks by their counts: `top` the outcome that must hold at least `at_least` of the shots, or `support` the outcomes that must together hold at least `at_least`, each at least `each_at_least`. The thresholds leave room for a real device's noise. `reference` pins the counts the reference provider gives for each program, in its default configuration (five qubits on a line, rz sx x cz, free, no readout error), at seed 1. `estimates` are `estimate` answers (section 5.2), each with how a client reads it: `free`; `priced` (an amount and its currency); `unpriced` (not free, and no price set for the job: its cost is unknown, it runs only on the person's confirmation, and its counts are stated where the job has them); or `refused` (of none of the three forms: the client takes the cost to be unknown and shows no figure of it). `results` are `result` answers (section 5.5) to a job of two bits that asked `asked` shots, each with how a client reads it: `kept`, its counts of `of` shots (its `accepted_shots` when it gives one, else every shot asked), or `refused` (counts that sum to neither, or an `accepted_shots` that is not a whole number of at least 1): nothing of it is sealed.",
"messages": [
{ "name": "describe answers", "send": { "protocol": "wai.quantum.provider/1", "op": "describe" }, "expect": { "ok": true } },
{ "name": "an unknown operation is unsupported", "send": { "protocol": "wai.quantum.provider/1", "op": "teleport" }, "expect": { "ok": false, "code": ["unsupported"] } },
{ "name": "another version of the protocol is unsupported_version", "send": { "protocol": "wai.quantum.provider/999", "op": "describe" }, "expect": { "ok": false, "code": ["unsupported_version"] } },
{ "name": "a message without its protocol is invalid", "send": { "op": "describe" }, "expect": { "ok": false, "code": ["invalid"] } },
{ "name": "the status of a job that does not exist is not_found", "send": { "protocol": "wai.quantum.provider/1", "op": "status", "job": "wai-conformance-no-such-job" }, "expect": { "ok": false, "code": ["not_found"] } },
{ "name": "the result of a job that does not exist is not_found", "send": { "protocol": "wai.quantum.provider/1", "op": "result", "job": "wai-conformance-no-such-job" }, "expect": { "ok": false, "code": ["not_found"] } },
{ "name": "cancelling a job that does not exist is not_found, or unsupported", "send": { "protocol": "wai.quantum.provider/1", "op": "cancel", "job": "wai-conformance-no-such-job" }, "expect": { "ok": false, "code": ["not_found", "unsupported"] } },
{ "name": "a program in another format is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "openqasm2", "basis": "rzsxxcz", "bits": 1, "gates": [], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid"] } },
{ "name": "an angle that is not m/2^k of a turn with m < 2^k is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "rzsxxcz", "bits": 1, "gates": [{ "gate": "rz", "qubits": [0], "turns": [[9, 3]] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "a classical bit that measures no qubit is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "rzsxxcz", "bits": 2, "gates": [], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "an xx past a quarter turn is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "prxrzxx", "bits": 1, "gates": [{ "gate": "xx", "qubits": [0, 1], "turns": [[3, 3]] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "a prx past half a turn in prxrzxx is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "prxrzxx", "bits": 1, "gates": [{ "gate": "prx", "qubits": [0], "turns": [[3, 2], [0, 0]] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "an ms past a quarter turn is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "gpims", "bits": 1, "gates": [{ "gate": "ms", "qubits": [0, 1], "turns": [[1, 3], [0, 0], [3, 3]] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "a move in a basis whose two-qubit gate is not cz is invalid", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "gpizz", "bits": 1, "gates": [{ "gate": "move", "qubits": [0, 1] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } },
{ "name": "a move that leaves a state where no move takes it out is refused", "send": { "protocol": "wai.quantum.provider/1", "op": "estimate", "program": { "format": "wai.native/1", "basis": "rzsxxcz", "bits": 1, "gates": [{ "gate": "move", "qubits": [0, 1] }], "measure": [{ "qubit": 0, "bit": 0 }] }, "shots": 10 }, "expect": { "ok": false, "code": ["invalid", "refused"] } }
],
"billing": [
{ "name": "free", "billing": { "free": true }, "reads_as": "free" },
{ "name": "free, with a free tier", "billing": { "free": true, "free_tier": "every job" }, "reads_as": "free" },
{ "name": "a price per shot", "billing": { "unit": "shot", "price": "0.0003", "currency": "USD" }, "reads_as": "priced" },
{ "name": "a price per job, saying it is not free, with a free tier", "billing": { "free": false, "unit": "job", "price": "1", "currency": "EUR", "free_tier": "ten jobs a month" }, "reads_as": "priced" },
{ "name": "not free, and no price set", "billing": { "free": false, "priced": false }, "reads_as": "unpriced" },
{ "name": "no price set, with a free tier", "billing": { "free": false, "priced": false, "free_tier": "100 shots a day" }, "reads_as": "unpriced" },
{ "name": "an empty billing says nothing", "billing": {}, "reads_as": "refused" },
{ "name": "not free, and nothing more", "billing": { "free": false }, "reads_as": "refused" },
{ "name": "no price set, without saying it is not free", "billing": { "priced": false }, "reads_as": "refused" },
{ "name": "no price set, and a price", "billing": { "free": false, "priced": false, "unit": "shot", "price": "0.01", "currency": "USD" }, "reads_as": "refused" },
{ "name": "a price beside priced, which only the form with no price has", "billing": { "free": false, "priced": true, "unit": "shot", "price": "0.01", "currency": "USD" }, "reads_as": "refused" },
{ "name": "priced true, and no price", "billing": { "free": false, "priced": true }, "reads_as": "refused" },
{ "name": "priced as a string", "billing": { "free": false, "priced": "false" }, "reads_as": "refused" },
{ "name": "free as a string", "billing": { "free": "false", "priced": false }, "reads_as": "refused" },
{ "name": "a price that is a number, not a decimal string", "billing": { "unit": "shot", "price": 0.01, "currency": "USD" }, "reads_as": "refused" },
{ "name": "a price with no currency", "billing": { "unit": "shot", "price": "0.01" }, "reads_as": "refused" },
{ "name": "billing null", "billing": null, "reads_as": "refused" },
{ "name": "billing as a string", "billing": "free", "reads_as": "refused" }
],
"estimates": [
{ "name": "free", "estimate": { "ok": true, "free": true }, "reads_as": "free" },
{ "name": "free, with its time and a note", "estimate": { "ok": true, "free": true, "seconds": 3, "note": "queued behind two jobs" }, "reads_as": "free" },
{ "name": "an amount per shot", "estimate": { "ok": true, "free": false, "amount": "0.3", "currency": "USD", "unit": "shot", "seconds": 4 }, "reads_as": "priced" },
{ "name": "the least a job billed by its time can come to", "estimate": { "ok": true, "free": false, "amount": "0.05", "currency": "USD", "unit": "minute", "at_least": true }, "reads_as": "priced" },
{ "name": "not free, and no price set", "estimate": { "ok": true, "free": false, "priced": false }, "reads_as": "unpriced" },
{ "name": "no price set, with its time and a note", "estimate": { "ok": true, "free": false, "priced": false, "seconds": 120, "note": "no price yet for this device" }, "reads_as": "unpriced" },
{ "name": "no price set for a landscape job, its counts stated", "estimate": { "ok": true, "free": false, "priced": false, "operations": 933, "bytes": 3408778 }, "reads_as": "unpriced" },
{ "name": "not free, and nothing more", "estimate": { "ok": true, "free": false }, "reads_as": "refused" },
{ "name": "no free", "estimate": { "ok": true }, "reads_as": "refused" },
{ "name": "free as a string", "estimate": { "ok": true, "free": "false", "priced": false }, "reads_as": "refused" },
{ "name": "an amount that is a number, not a decimal string", "estimate": { "ok": true, "free": false, "amount": 0.3, "currency": "USD" }, "reads_as": "refused" },
{ "name": "an amount with no currency", "estimate": { "ok": true, "free": false, "amount": "0.3" }, "reads_as": "refused" },
{ "name": "no price set, and an amount", "estimate": { "ok": true, "free": false, "priced": false, "amount": "1", "currency": "USD" }, "reads_as": "refused" },
{ "name": "no price set, and a unit", "estimate": { "ok": true, "free": false, "priced": false, "unit": "shot" }, "reads_as": "refused" },
{ "name": "no price set, and at least", "estimate": { "ok": true, "free": false, "priced": false, "at_least": true }, "reads_as": "refused" },
{ "name": "no price set, and free", "estimate": { "ok": true, "free": true, "priced": false }, "reads_as": "refused" },
{ "name": "priced true, beside an amount", "estimate": { "ok": true, "free": false, "priced": true, "amount": "1", "currency": "USD" }, "reads_as": "refused" },
{ "name": "priced as a string", "estimate": { "ok": true, "free": false, "priced": "false" }, "reads_as": "refused" },
{ "name": "priced null", "estimate": { "ok": true, "free": false, "priced": null }, "reads_as": "refused" }
],
"results": [
{ "name": "every shot asked, with no accepted_shots", "asked": 400, "result": { "ok": true, "counts": { "00": 197, "11": 203 }, "shots": 400 }, "reads_as": "kept", "of": 400 },
{ "name": "fewer kept than asked: a post-selected readout", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400, "accepted_shots": 373 }, "reads_as": "kept", "of": 373 },
{ "name": "more kept than asked: a device that ran more", "asked": 400, "result": { "ok": true, "counts": { "00": 210, "11": 202 }, "shots": 400, "accepted_shots": 412 }, "reads_as": "kept", "of": 412 },
{ "name": "accepted_shots the shots asked", "asked": 400, "result": { "ok": true, "counts": { "00": 197, "11": 203 }, "shots": 400, "accepted_shots": 400 }, "reads_as": "kept", "of": 400 },
{ "name": "one shot kept", "asked": 400, "result": { "ok": true, "counts": { "11": 1 }, "shots": 400, "accepted_shots": 1 }, "reads_as": "kept", "of": 1 },
{ "name": "fewer shots than asked, and no accepted_shots", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400 }, "reads_as": "refused" },
{ "name": "every shot asked, beside an accepted_shots of fewer", "asked": 400, "result": { "ok": true, "counts": { "00": 197, "11": 203 }, "shots": 400, "accepted_shots": 373 }, "reads_as": "refused" },
{ "name": "counts one short of their accepted_shots", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400, "accepted_shots": 374 }, "reads_as": "refused" },
{ "name": "accepted_shots 0, no shot kept", "asked": 400, "result": { "ok": true, "counts": {}, "shots": 400, "accepted_shots": 0 }, "reads_as": "refused" },
{ "name": "accepted_shots with a fraction", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400, "accepted_shots": 373.5 }, "reads_as": "refused" },
{ "name": "accepted_shots as a string", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400, "accepted_shots": "373" }, "reads_as": "refused" },
{ "name": "accepted_shots below zero", "asked": 400, "result": { "ok": true, "counts": { "00": 180, "11": 193 }, "shots": 400, "accepted_shots": -1 }, "reads_as": "refused" }
],
"programs": [
{ "name": "probe", "qasm": "OPENQASM 3.0;\nqubit[2] q;\nx q[0];\n", "shots": 200, "expect": { "top": "01", "at_least": 0.8 } },
{ "name": "named bits", "qasm": "OPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nx q[1];\nc[0] = measure q[1];\nc[1] = measure q[0];\n", "shots": 200, "expect": { "top": "01", "at_least": 0.8 } },
{ "name": "a phase only interference shows", "qasm": "OPENQASM 3.0;\nqubit[1] q;\nh q[0];\nt q[0];\nt q[0];\nt q[0];\nt q[0];\nh q[0];\n", "shots": 200, "expect": { "top": "1", "at_least": 0.8 } },
{ "name": "a phase kicked back by two quarter-turn controlled phases", "qasm": "OPENQASM 3.0;\nqubit[2] q;\nx q[0];\nh q[1];\ncp(pi/2) q[0], q[1];\ncp(pi/2) q[0], q[1];\nh q[1];\n", "shots": 200, "expect": { "top": "11", "at_least": 0.8 } },
{ "name": "a Bell pair", "qasm": "OPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n", "shots": 400, "expect": { "support": ["00", "11"], "at_least": 0.8, "each_at_least": 0.3 } },
{ "name": "a triangle of two-qubit gates, routed", "qasm": "OPENQASM 3.0;\nqubit[3] q;\nh q[0];\ncx q[0], q[1];\ncx q[1], q[2];\ncx q[0], q[2];\n", "shots": 400, "expect": { "support": ["000", "011"], "at_least": 0.8, "each_at_least": 0.3 } }
],
"landscape": {
"about": "Energy-landscape jobs (section 11), for a device whose `describe` offers them. `messages` are each sent as an `estimate`, each answer checked against `expect`, and a refusal's `line` where it names one; a device that does not list `run` gets each with its first operation in its place. A message that names its `version` is sent only to a device whose description lists that version of the landscape protocol; one that names none holds in every version, and a device that does not list the first gets it with its own version named in the request. A device is sent only the `jobs` of the versions it lists (a job's version is its request's `protocol`, the first where it names none), and a job of a version it does not list must not be taken: `unsupported`, or `refused` from a provider of the earlier text. `jobs` are each estimated, their `operations` and `bytes` held to `expect` (quantum-landscape section 2.0's count, the same on every host), then run when every estimate says free or the person allows the spend: their answers held to quantum-landscape section 5.4 and, from a member at parity `reference` or `bit-exact`, to `replay` (a run's replay digest) or `lines_blake3` (the BLAKE3 of a replay's lines), the reference's bits.",
"messages": [
{ "name": "a message with a program and a landscape job beside it is invalid", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "program": {"format": "wai.native/1", "basis": "rzsxxcz", "bits": 1, "gates": [], "measure": [{"qubit": 0, "bit": 0}]}, "shots": 10, "landscape": {"op": "run", "request": {"program": "vars 2\nagree 0 1\nminimize\n"}}}, "expect": {"ok": false, "code": ["invalid"]} },
{ "name": "a landscape job that is not an object is invalid", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": "run"}, "expect": {"ok": false, "code": ["invalid"]} },
{ "name": "an operation that runs nothing is invalid", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "examples", "request": {"program": "vars 1\nsolve\n"}}}, "expect": {"ok": false, "code": ["invalid"]} },
{ "name": "an operation the extension does not have is invalid", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "fly", "request": {"program": "vars 1\nsolve\n"}}}, "expect": {"ok": false, "code": ["invalid"]} },
{ "name": "a request that is not an object is invalid", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": "vars 1\nsolve\n"}}, "expect": {"ok": false, "code": ["invalid"]} },
{ "name": "a program the reader refuses is refused, naming its line", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 2\nagree 0 1\noppos 0 1\nsolve\n"}}}, "expect": {"ok": false, "code": ["refused"], "line": 3} },
{ "name": "a temperature written with an exponent is refused", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 1\nsolve\n", "temperature": "1e2"}}}, "expect": {"ok": false, "code": ["refused"]} },
{ "name": "a seed past 64 bits is refused", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 1\nsolve\n", "seed": "18446744073709551616"}}}, "expect": {"ok": false, "code": ["refused"]} },
{ "name": "a request naming another protocol is refused", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 1\nsolve\n", "protocol": "another/9"}}}, "expect": {"ok": false, "code": ["refused"]} },
{ "name": "a job past the operations a job may take is refused, at its run line", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 4096\nsolve restarts=100000 steps=1000000\n"}}}, "expect": {"ok": false, "code": ["refused"], "line": 2} },
{ "name": "a second-version constraint that names a variable twice is refused, naming its line", "version": "wai.quantum.landscape/2", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 3\nexactly 1 0 0 1\nsolve\n", "protocol": "wai.quantum.landscape/2"}}}, "expect": {"ok": false, "code": ["refused"], "line": 2} },
{ "name": "at most two of a group, which the second version does not write, is refused, naming its line", "version": "wai.quantum.landscape/2", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 3\natmost 2 0 1 2\nsolve\n", "protocol": "wai.quantum.landscape/2"}}}, "expect": {"ok": false, "code": ["refused"], "line": 2} },
{ "name": "a second-version statement in a job of the first version is refused, naming its line", "version": "wai.quantum.landscape/1", "send": {"protocol": "wai.quantum.provider/1", "op": "estimate", "landscape": {"op": "run", "request": {"program": "vars 3\nexactly 1 0 1 2\nsolve\n"}}}, "expect": {"ok": false, "code": ["refused"], "line": 2} }
],
"jobs": [
{ "name": "the talks, run at seed 7", "op": "run", "request": {"program": "#! title Twelve talks, two rooms\n#! about Twelve talks go into room A or room B, or are left out. Talks that share an audience must not be in the same room. Talks in a series belong in the same room. Every talk that runs takes a slot, so a talk with little reason to run stays out.\n#! item talk\n#! plus room A\n#! minus room B\n#! zero left out\n#! expect works\n#\n# Three states per variable: + is room A, - is room B, 0 is left out.\n# `agree I J` talks I and J form a series: the same room.\n# `oppose I J` talks I and J share an audience: different rooms.\n# `cost 1` each talk that runs costs 1.\nvars 12\ncost 1\nagree 0 1\nagree 0 2\nagree 0 3\nagree 1 2\nagree 1 3\nagree 2 3\nagree 4 5\nagree 4 6\nagree 4 7\nagree 5 6\nagree 5 7\nagree 6 7\noppose 0 4\noppose 1 5\noppose 2 6\noppose 3 7\noppose 8 0\noppose 8 1\nagree 9 4\nagree 9 5\noppose 10 11\nsolve restarts=8 steps=40\n", "seed": "7"}, "expect": {"operations": 6930573, "bytes": 3411851, "replay": "e92f3f68dd4df5290ac3fbd9dcbb5234d71e106355538a55059fdd55efaf03a6"} },
{ "name": "a chain, settled", "op": "run", "request": {"program": "vars 6\nagree 0 1\nagree 1 2\nagree 2 3\nagree 3 4\nagree 4 5\nfield 0 1\nminimize\n"}, "expect": {"operations": 6151, "bytes": 3408944, "replay": "689f955bb8435530f47fc3dd9a01431142c7f8a7c168fe2fa44e541ce2afa381"} },
{ "name": "a temperature given as text", "op": "run", "request": {"program": "vars 4\ncost 1\nagree 0 1\nagree 0 2\nagree 1 2\noppose 2 3\nagree 3 0\nsolve restarts=2 steps=9\n", "seed": "3", "temperature": "0.5"}, "expect": {"operations": 933, "bytes": 3408778, "replay": "ddb2beeedde77667248d581aa8f67baa8606785be276aa6d636270fc13400d8c"} },
{ "name": "the talks, replayed at eight seeds", "op": "replay", "request": {"program": "#! title Twelve talks, two rooms\n#! about Twelve talks go into room A or room B, or are left out. Talks that share an audience must not be in the same room. Talks in a series belong in the same room. Every talk that runs takes a slot, so a talk with little reason to run stays out.\n#! item talk\n#! plus room A\n#! minus room B\n#! zero left out\n#! expect works\n#\n# Three states per variable: + is room A, - is room B, 0 is left out.\n# `agree I J` talks I and J form a series: the same room.\n# `oppose I J` talks I and J share an audience: different rooms.\n# `cost 1` each talk that runs costs 1.\nvars 12\ncost 1\nagree 0 1\nagree 0 2\nagree 0 3\nagree 1 2\nagree 1 3\nagree 2 3\nagree 4 5\nagree 4 6\nagree 4 7\nagree 5 6\nagree 5 7\nagree 6 7\noppose 0 4\noppose 1 5\noppose 2 6\noppose 3 7\noppose 8 0\noppose 8 1\nagree 9 4\nagree 9 5\noppose 10 11\nsolve restarts=8 steps=40\n", "seed": "1", "seeds": 8}, "expect": {"operations": 7082445, "bytes": 3413899, "lines_blake3": "0f61c801b18264ecb427e3f7bd00c21705bc862e2e03281c8b518b12d6c2e8a4"} },
{ "name": "a sweep at two temperatures", "op": "sweep", "request": {"program": "vars 4\ncost 1\nagree 0 1\nagree 0 2\nagree 1 2\noppose 2 3\nagree 3 0\nsolve restarts=2 steps=9\n", "seeds": 2, "temperatures": [0, 1.5]}, "expect": {"operations": 2037, "bytes": 3408778} },
{ "name": "a comparison with the classical methods", "op": "compare", "request": {"program": "vars 4\ncost 1\nagree 0 1\nagree 0 2\nagree 1 2\noppose 2 3\nagree 3 0\nsolve restarts=2 steps=9\n", "seeds": 2}, "expect": {"operations": 5541, "bytes": 3408778} },
{ "name": "second version: the 3×3 assignment, run at seed 1, its joules unpriced", "op": "run", "request": {"program": "#! title Three workers, three jobs\n#! about A 3×3 grid: row r is a worker, column c a job, and + means worker r takes job c. Each row and each column holds exactly one +, every other cell -. The first version could not write this above 2×2; here each cell takes only + and -, and every state of lowest energy is one of the six assignments.\n#! expect works\n#! item cell\n#! plus chosen\n#! minus not chosen\n#! check exactly 1 0-1-2 3-4-5 6-7-8 0-3-6 1-4-7 2-5-8\n#\n# Variable 3·r + c is the cell of row r and column c: + chosen, - not.\nvars 9\nexactly 1 0 1 2\nexactly 1 3 4 5\nexactly 1 6 7 8\nexactly 1 0 3 6\nexactly 1 1 4 7\nexactly 1 2 5 8\nsolve restarts=8 steps=40\n", "protocol": "wai.quantum.landscape/2", "seed": "1"}, "expect": {"operations": 569304, "bytes": 3411065, "replay": "b2f31444d0854232ada08db77519719ce458838bea16e6ad05490f4eea1af149"} },
{ "name": "second version: costs of either sign, settled, its joules priced", "op": "run", "request": {"program": "vars 4\ncost -1\ncost 3 2\nagree 0 1\noppose 1 2\nfield 0 1\nminimize\n", "protocol": "wai.quantum.landscape/2"}, "expect": {"operations": 925, "bytes": 3408464, "replay": "16d0c8bca58edc397f45e2b1d33972345ab18ce3611a035ff9911de86d1bcaad"} },
{ "name": "second version: one of three, quenched at a temperature given as text", "op": "run", "request": {"program": "vars 3\nexactly 1 0 1 2\nfield 0 1\nsolve restarts=2 steps=9\n", "protocol": "wai.quantum.landscape/2", "seed": "3", "temperature": "0"}, "expect": {"operations": 306, "bytes": 3408467, "replay": "cdd253818bd561821a7083f8b680f21518da78ca8162b7f3c1cd3ea3b0deec33"} },
{ "name": "second version: the 3×3 assignment, replayed at four seeds", "op": "replay", "request": {"program": "#! title Three workers, three jobs\n#! about A 3×3 grid: row r is a worker, column c a job, and + means worker r takes job c. Each row and each column holds exactly one +, every other cell -. The first version could not write this above 2×2; here each cell takes only + and -, and every state of lowest energy is one of the six assignments.\n#! expect works\n#! item cell\n#! plus chosen\n#! minus not chosen\n#! check exactly 1 0-1-2 3-4-5 6-7-8 0-3-6 1-4-7 2-5-8\n#\n# Variable 3·r + c is the cell of row r and column c: + chosen, - not.\nvars 9\nexactly 1 0 1 2\nexactly 1 3 4 5\nexactly 1 6 7 8\nexactly 1 0 3 6\nexactly 1 1 4 7\nexactly 1 2 5 8\nsolve restarts=8 steps=40\n", "protocol": "wai.quantum.landscape/2", "seed": "1", "seeds": 4}, "expect": {"operations": 623601, "bytes": 3412089, "lines_blake3": "642d14fd577f01972dbbde12af4b481bad6ef90027ac8f5f179bcc1b5d3f06db"} },
{ "name": "second version: a sweep at two temperatures", "op": "sweep", "request": {"program": "vars 3\nexactly 1 0 1 2\nfield 0 1\nsolve restarts=2 steps=9\n", "protocol": "wai.quantum.landscape/2", "seeds": 2, "temperatures": [0, 1.5]}, "expect": {"operations": 1143, "bytes": 3408467} },
{ "name": "second version: a comparison with the classical methods", "op": "compare", "request": {"program": "vars 3\nexactly 1 0 1 2\nfield 0 1\nsolve restarts=2 steps=9\n", "protocol": "wai.quantum.landscape/2", "seeds": 2}, "expect": {"operations": 3357, "bytes": 3408467} }
]
},
"reference": {
"seed": 1,
"counts": {
"probe": { "01": 200 },
"named bits": { "01": 200 },
"a phase only interference shows": { "1": 200 },
"a phase kicked back by two quarter-turn controlled phases": { "11": 200 },
"a Bell pair": { "00": 193, "11": 207 },
"a triangle of two-qubit gates, routed": { "000": 193, "011": 207 }
}
}
}