open-standards/wai/wai-quantum-service/Cargo.toml
Transaction Science 855822e2d7
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 1m26s
wai-quantum service / does this change touch it (pull_request) Successful in 31s
wai-quantum service / service · linux (pull_request) Successful in 49s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 4m2s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 9m51s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m16s
wai-quantum service / service · macos (pull_request) Successful in 47s
wai-quantum-service: the cutrank method, exact samples of a Clifford circuit measured in a product basis
A Clifford circuit followed, on each qubit, by one-qubit gates at any angles
(qasm::Program::product_measured splits it: each qubit's gates from its first
non-Clifford one on, multiplied into one matrix; a gate on several qubits
after that is refused). The planner takes the graph form, searches orders for
narrower cuts with a move budget of about a second, and admits the job by its
largest table (double precision when it fits, single otherwise) and by the
entries its passes touch. The run rebuilds the same order.

Answers: counts, exact samples; amplitudes, exact up to one phase shared by
the job's amplitudes, which the result's global_phase says (a tableau does not
fix a state's global phase). Expectation values are refused. auto tries it for
counts after the state vectors and before mps.

Tests: amplitudes equal the state vector's times one phase (6, 9 and 11
qubits, 24 amplitudes each); counts follow the exact distribution (40 000
shots) and repeat with their seed; auto samples a 40-qubit ring with chords by
cutrank; refusals name the gate. Mutants caught: the tail multiplied in the
wrong order, samples mapped to the wrong qubits. smoke.sh samples a 60-qubit
instance (max cut 10 bits).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 20:27:54 -04:00

27 lines
1.4 KiB
TOML

[package]
name = "wai-quantum-service"
version = "0.1.0"
edition = "2024"
rust-version = "1.97"
license = "Apache-2.0"
description = "The WAI quantum stack as a public job service: OpenQASM 3 circuits run by the strongest method each admits (bit-exact and exact state vectors, stabilizer tableaux, matrix product states, sparse Pauli dynamics), every result naming its method and its accuracy and sealed with the service's key; each job in its own process, inside a memory budget."
repository = "https://git.transaction.science/Transaction-Science/open-standards"
publish = false
[dependencies]
axum = "0.8"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "process", "time", "sync", "net", "io-util"] }
serde = { version = "1", features = ["derive"] }
# float_roundtrip: a number a client sends back reads as the double it was
# (the default reader rounds twice), so its receipt still verifies.
serde_json = { version = "1", features = ["float_roundtrip"] }
blake3 = "1"
getrandom = "0.4"
wai-quantum = { path = "../wai-quantum", default-features = false, features = ["quantum", "quantum_toolchain", "quantum_receipt", "quantum_sv", "quantum_tn", "quantum_tableau", "quantum_cutrank", "quantum_mpsim", "quantum_spd", "quantum_noisy", "quantum_sv_metal"] }
# proc_pid_rusage and waitid, for each job's energy (src/energy.rs).
[target.'cfg(target_os = "macos")'.dependencies]
libc = "0.2"
[profile.release]
lto = "thin"