Re-landed from PR #668 (branch wai/quantum-planner-contract, merged with main
495651ddd at 37350335b) as one commit on main, under the land-it model. Five
review rounds; round 5's findings (two high: workers that died as PID 1) were
fixed on the branch, and its CI reds were traced and fixed before landing.
A job may carry a contract (deadline, energy ceiling, cost, accuracy); the
planner chooses a route that meets it or refuses with every route's reason,
and its reasoning is sealed in the receipt. Under #676's reading child the
contract job is planned in the child from the per-method timings the parent
sends, bounded as a job naming its chosen method plus its reasoning, kept
across a restart. Both verifiers (Rust and receipt_verify.py) check the
planner statement beside wasmQ's; the receipts corpus is regenerated with
both kinds (268 crafted receipts, 14 plants caught). The views page carries
its engine raw-deflated and stays under its 1 MiB limit (669,484 bytes).
Passed before the push (Framework, linux; M3, macOS): every repository
check, receipts conformance, breaking, corpora, catalogue, the qpu clients,
energy (wai-rs, wai-quantum full, serve), the CLI tests and clippy, writer,
smoke, cross-simulator corpus, job receipts, wasmQ tests and vectors, the
engine with and without receipts under -D warnings, the docs pages, and the
service suite with clippy.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
1 line
5.6 KiB
JSON
1 line
5.6 KiB
JSON
{"status":"done","method":"statevector","why":"dense double-precision state vector of 2 qubits; the cheapest of the 1 of 13 routes that meet the contract","estimate":{"memory_bytes":268437922,"work":8},"request":{"qasm":"OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nrx(0.3) q[0];\ncx q[0], q[1];\nc = measure q;\n","shots":100,"seed":2,"contract":{"exactness":"bounded","deadline_seconds":60.0}},"result":{"method":"statevector","qubits":2,"gates":2,"accuracy":{"class":"exact","fusion":3},"counts":{"00":99,"11":1},"distinct_outcomes":2,"omitted_shots":0,"elapsed_ms":0,"engine":{"name":"wai-quantum","version":"0.8.1"},"schema":"wai.quantum.job-result/1","planner":{"format":"wai.quantum.planner/1","wanted":"bounded","wanted_from":"contract","named":null,"question":"counts","auto":"method:statevector","host":{"job_bytes":17179869184,"providers":[]},"routes":[{"route":"method:exact","kind":"local","method":"exact","class":"bit-exact","host_dependent":false,"auto_rank":20,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"exact needs dyadic angles: the angle 0.3 is not a dyadic multiple of 2π (2πm/2^k, k ≤ 32) [Q500]"}},{"route":"method:statevector","kind":"local","method":"statevector","class":"exact","host_dependent":false,"auto_rank":30,"price":{"money":{"free":true},"time":{"seconds":8e-9,"basis":"nominal"},"memory_bytes":268437922,"work":8,"energy":{"joules":null,"why":"this host estimates no job's energy before it runs"},"leaves_out":[]},"outcome":"chosen"},{"route":"method:statevector_single","kind":"local","method":"statevector_single","class":"single","host_dependent":true,"auto_rank":40,"price":null,"outcome":"rejected","rejected":{"code":"class","why":"its class is single, and the job wants bounded"}},{"route":"method:stabilizer","kind":"local","method":"stabilizer","class":"exact","host_dependent":false,"auto_rank":10,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"stabilizer needs a Clifford circuit: Rx(0.3) is not a Clifford gate"}},{"route":"method:pauli","kind":"local","method":"pauli","class":"bounded","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"pauli answers expectation values only"}},{"route":"method:mps","kind":"local","method":"mps","class":"heuristic","host_dependent":false,"auto_rank":60,"price":{"money":{"free":true},"time":{"seconds":0.005603328,"basis":"nominal"},"memory_bytes":270532608,"work":3735552,"energy":{"joules":null,"why":"this host estimates no job's energy before it runs"},"leaves_out":[]},"outcome":"rejected","rejected":{"code":"class","why":"its class is heuristic, and exact only when nothing is truncated, which it cannot know before it runs; the job wants bounded"}},{"route":"method:stabilizer_rank","kind":"local","method":"stabilizer_rank","class":"exact","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"stabilizer_rank answers amplitudes and expectation values"}},{"route":"method:tensor_network","kind":"local","method":"tensor_network","class":"exact","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"tensor_network answers amplitudes only"}},{"route":"method:cutrank","kind":"local","method":"cutrank","class":"exact","host_dependent":false,"auto_rank":50,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"Cx on qubits [0, 1] comes after a gate on qubit 0 that is not Clifford; cutrank takes a Clifford circuit, then one layer of one-qubit gates"}},{"route":"method:cutrank_single","kind":"local","method":"cutrank_single","class":"single","host_dependent":true,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"class","why":"its class is single, and the job wants bounded"}},{"route":"method:density_matrix","kind":"local","method":"density_matrix","class":"exact","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"density_matrix is for noisy circuits (give \"noise\")"}},{"route":"method:trajectories","kind":"local","method":"trajectories","class":"estimate","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"class","why":"its class is estimate, and the job wants bounded"}},{"route":"method:pulse","kind":"local","method":"pulse","class":"bounded","host_dependent":false,"auto_rank":null,"price":null,"outcome":"rejected","rejected":{"code":"cannot","why":"pulse reads its own program, and runs only when a job names it"}}],"choice":"method:statevector","why":"the cheapest of the 1 of 13 routes that meet the contract","stable":{"scope":"digest: what each route that depends on nothing of the host costs, the same for this request and job memory on every host of one engine; choice: whether the route chosen is one of those whatever the host","routes":["method:exact","method:statevector","method:stabilizer","method:pauli","method:mps","method:stabilizer_rank","method:tensor_network","method:cutrank","method:density_matrix","method:trajectories","method:pulse"],"digest":"7f32458b3eb3e371e44723491a3a020ebeb70d954a7d13936c61dcda9b1b19dc","choice":true},"kept":{"deadline":{"seconds":60.0,"elapsed_ms":0,"kept":true}}},"energy":{"unmetered":"the command line does not meter a run's energy"},"receipt":{"alg":"ed25519","canon":"rfc8785","key":"197f6b23e16c8532c6abc838facd5ea789be0c76b2920334039bfa8b3d368d61","digest":"a9ae845acd35e18289c0345762d2d2a0cf4c37a63e0b97305f86f6d8c70343c3","signature":"d8e40b438737df12bb78666c6353d966b201a9bc773d6343d160998c4653cd3280e9be72440f52f1e642345523aa9ec103cf8d1af6683d6431dc069a91933a02"}}}
|