| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m7s
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Successful in 1m35s
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Successful in 3m2s
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Successful in 3m40s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 5m13s
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 5m43s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 3m49s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 3m44s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 5m46s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 6s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 3m51s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m45s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m50s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 5s
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI energy receipts / does this change touch it (pull_request) Successful in 5s
wai-quantum command line / does this change touch it (pull_request) Successful in 5s
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 4s
wai-quantum dataflow member / does this change touch it (pull_request) Successful in 4s
wai-quantum signal processor / does this change touch it (pull_request) Successful in 5s
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 6s
wai-quantum HIP member / does this change touch it (pull_request) Successful in 5s
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Successful in 29s
wai-quantum Metal member / does this change touch it (pull_request) Successful in 5s
wai-quantum npu-cores member / does this change touch it (pull_request) Successful in 5s
wai-quantum neural-processor member / does this change touch it (pull_request) Successful in 5s
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Successful in 20s
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 5s
wai-quantum-qpu / does this change touch it (pull_request) Successful in 5s
wai-quantum service / does this change touch it (pull_request) Successful in 5s
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 7s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 5s
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 4s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Successful in 29s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m53s
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 4s
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 4s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 5s
wai-web wasm32 / does this change touch it (pull_request) Successful in 4s
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Successful in 26s
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Successful in 1m12s
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Successful in 13s
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Successful in 8s
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Successful in 10s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 7m37s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m25s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 29s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 32m37s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 11m15s
wai-quantum command line / command line · linux (pull_request) Successful in 1m16s
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Successful in 26s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 20m29s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Successful in 3m59s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Successful in 3m38s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m40s
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Successful in 29s
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Successful in 29s
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Successful in 22s
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Successful in 25s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Successful in 23s
wai-quantum service / service · linux (pull_request) Successful in 46s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Successful in 20s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m38s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 12m45s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 19s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 41s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Successful in 15m32s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Successful in 30s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Successful in 8m47s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Successful in 18s
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Successful in 34s
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Successful in 31s
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Successful in 16s
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Successful in 16s
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Successful in 18s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m11s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m31s
wai-quantum command line / command line · macos (pull_request) Successful in 30s
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Successful in 14s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m32s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Successful in 1m10s
wai-quantum Metal member / member · Metal (macos) (pull_request) Successful in 28s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m39s
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Successful in 5m46s
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Successful in 19s
wai-quantum service / service · macos (pull_request) Successful in 39s
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Successful in 10s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m15s
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Successful in 16s
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Successful in 13s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m33s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 26s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m26s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m22s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m39s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m3s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 23s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 26s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 14m51s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 42m2s
The reader refused loops, so a family of circuits (a GHZ state on n qubits,
the QFT, an adder) had to be written out once per size. It now reads
generators, the first piece of the specification-and-evaluator workbench,
whose proposers evolve exactly such programs and whose evaluator checks
them across n.
- qasm::parse_with and qasm::parse_lines_with read a program at given
integer inputs; qasm::inputs lists the inputs it declares. `input int`,
`input uint`, `const int|uint`, and `for` over [a:b], [a:step:b] (both ends
included) and {a, b, c}, nested, are unrolled on reading. Indices and sizes
take integer arithmetic with C's truncating division, `%`, `**`,
comparisons and `&& || !`. An `if` on integers alone is decided on reading;
one on bits stays classical control. Unrolled gates keep the lines of
their loop's body.
- qasm::instantiate writes the circuit at given inputs out as plain
OpenQASM, which reads back as the same program, gate for gate.
- Bounded: at most 20 million tokens, checked integer arithmetic, and a
name an integer would shadow (a register, a gate's parameter or qubit, a
word of the language) is refused with its line. A loop variable may still
share a gate's name, such as the identity `i`, since an integer is only
substituted where it is not starting a statement.
- The lexer reads `% < > <= >= && ||`.
- The CLI takes `--input NAME=VALUE` on every command, and `instance`
prints a generator written out.
A program with no input, const or for reads exactly as before: the
unrolling pass returns its tokens untouched.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
||
| .. | ||
| release | ||
| src | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| smoke.sh | ||
wai-quantum
The command line of the WAI quantum stack. It runs OpenQASM programs on this machine, planned and run by the same engine as the quantum job service (wai_quantum::engine), so a job gives the same result here as there. It also sends programs to the service, checks and draws them, verifies receipts, and serves its tools to agents over MCP.
Installing it
| Where | How |
|---|---|
| Any platform with Rust | cargo install wai-quantum-cli (installs the wai-quantum binary) |
| macOS or Linux, with Homebrew | brew tap transaction-science/tap https://git.transaction.science/Transaction-Science/homebrew-tap then brew install wai-quantum |
| Windows, with Scoop | scoop bucket add transaction-science https://git.transaction.science/Transaction-Science/scoop-bucket then scoop install wai-quantum |
| Anywhere | a prebuilt archive from the releases tagged wai-quantum-cli-v… |
The prebuilt archives are:
- macOS for Apple silicon and for Intel, with the GPU state vector;
- Linux for x86_64 and arm64, linked statically, so any distribution runs them;
- Windows for x86_64.
Each archive has a .sha256 file beside it (shasum -a 256 -c). A tag wai-quantum-cli-v<version> builds them on the project's own runners (release/, .github/workflows/wai-quantum-cli-release.yml), and writes the Homebrew formula and the Scoop manifest for them.
Running a program
wai-quantum run bell.qasm --shots 1000
wai-quantum run prog.qasm -o "Z0 Z1" -o "0.5 X2" -a 000 -a 111
wai-quantum run prog.qasm --noise depolarizing_2q=0.01 --noise readout=0.02
wai-quantum run prog.qasm --method mps --option max_bond=128
cat prog.qasm | wai-quantum run --json > job.json
A program is OpenQASM 3, or the OpenQASM 2 forms in common use. The reader accepts:
- registers, and a gate applied to a whole register;
- the standard gates;
ctrlandnegctrlmodifiers;- gate definitions;
- measurement and
resetanywhere, andifon measured bits; - generators: integer
inputs,consts andforloops, so one program describes a family of circuits.
It refuses while, inv and pow, giving the line of each.
A generator takes its inputs with --input, which every command accepts, and instance writes the circuit out:
cat > ghz.qasm <<'QASM'
OPENQASM 3.0;
input uint n;
qubit[n] q;
h q[0];
for uint i in [0:n-2] { cx q[i], q[i + 1]; }
QASM
wai-quantum run ghz.qasm --input n=40 --shots 100
wai-quantum instance ghz.qasm --input n=3
--method auto (the default) picks the strongest method the program admits:
| Method | Takes |
|---|---|
| exact | dyadic angles; the state vector, the same bits on every machine |
| statevector | any angle |
| stabilizer | Clifford circuits, to tens of thousands of qubits |
| mps | matrix product states |
| pauli | Pauli dynamics, for expectation values |
| tensor_network | amplitudes |
| cutrank | a Clifford circuit with a layer of rotations |
| density_matrix, trajectories | noise |
wai-quantum methods lists each method's reach in a job's memory here (--memory-gb, default 16).
Each result names:
- its method, and why that method was chosen;
- its accuracy class;
- the counts, expectation values or amplitudes asked for;
- its receipt.
Receipts
Every result is signed over the request and the result in their canonical JSON. The service signs with its key; this tool signs with this user's key:
--key FILE, or$WAI_QUANTUM_KEY, names a file holding the key;- otherwise the key is
$XDG_CONFIG_HOME/wai/quantum-key, or~/.config/wai/quantum-key. It is made from the system's random source on first use and is readable by its owner only.
wai-quantum key prints the key's did:key. --demo-key signs with the published demo key. Its receipts show only that a result is unaltered, not who signed it.
wai-quantum run prog.qasm --json > job.json
wai-quantum verify job.json # VALID, and the signer's did:key
wai-quantum submit prog.qasm --json > svc.json
wai-quantum verify svc.json # the same check on the service's receipt
A receipt shows that this key signed this request and this result, and anyone can rerun the request to compare. It does not say who holds the key.
Checking and drawing
wai-quantum lint prog.qasm # ok, with its shape, or the line of the first problem
wai-quantum plan prog.qasm # the method and why, the memory and work, without running
wai-quantum draw prog.qasm --width 80
q0: ─────H─────●──M0──────
│
q1: ───────────⊕──●───M1──
│
q2: ──Rz(π/4)─────⊕───M2──
Critique, equivalence and improvement
wai-quantum critique prog.qasm # its measures, a modelled fidelity, and its smells with their lines
wai-quantum equivalent a.qasm b.qasm # the same circuit? exit 0 the same, 1 different, 2 unchecked
wai-quantum improve prog.qasm > better.qasm # its smells fixed; what changed, and the check, on standard error
wai-quantum shortcuts prog.qasm # each exact classical route to simulating it, and its cost here
The critique's figures are computed, not estimated: gates by kind, two-qubit gates, depth and two-qubit depth, the T count, and whether the program is a Clifford circuit. Its fidelity is a model at reference error rates, and says so. Its smells are gates that cancel, rotations that merge or do nothing, idle qubits, and qubits acted on but never measured.
equivalent compares two programs up to a global phase. Clifford circuits are compared by their tableaus at any size, and others on every basis state up to 8 qubits. Between 8 and 22 qubits it compares them on random product states, which is evidence, not proof. Beyond that it answers unchecked, with the reason. improve rewrites only statements alone on their lines, and prints a rewrite only when the check does not find it different.
shortcuts lists every exact classical route the engine knows for simulating the program, each with its memory and operations, and names the cheapest. The routes:
- the stabilizer tableau, for Clifford circuits;
- the cut-rank sum, for a Clifford circuit followed by one layer of one-qubit gates;
- an exact matrix product state, at a bond bounded across each cut by the operator Schmidt ranks of the gates that cross it;
- the light cone of a one-qubit expectation value;
- a tensor-network contraction, with
--thorough, which also searches longer for a cut-rank order; - the state vector.
A cheap route proves a design classically easy. None being cheap proves nothing about hardness: other methods, approximate ones above all, may cost far less.
The service
wai-quantum submit sends a job to https://wai.transaction.science/quantum-jobs, or to --service URL (also read from $WAI_QUANTUM_SERVICE). It waits for a long job to finish, then prints the result just as run does.
For agents
wai-quantum mcp is a Model Context Protocol server on standard input and output. Its tools are:
run_quantum_circuitplan_quantum_circuitlint_qasmcritique_qasmcheck_equivalentimprove_qasmclassical_shortcutsdraw_circuitverify_quantum_resultlist_methods
Runs happen on this machine and are signed with this user's key; nothing is sent anywhere. In an MCP client's configuration:
{ "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } }
The research tools
wai-quantum lab … holds the research tools:
- algorithms from the catalogue, OpenQASM and QIR export, and receipts over them;
- error correction at circuit level;
- qLDPC memory;
- fault-tolerant resource estimates and architectures;
- DMRG, TDVP and molecules;
- neural quantum states;
- Gaussian boson sampling;
- optimisation;
- the compute fabric;
- information and transport.
wai-quantum lab help lists them. wai-quantum verify also checks the receipts they sign.
Builds
- Default:
submit, over HTTPS. --features metal: the single-precision state vector on the GPU (--method statevector_single), on macOS.--no-default-features --target wasm32-wasip2: a WASI component withoutsubmit. It gives the same output under any WASI runtime.
wai-quantum completions zsh (or bash, fish, elvish, PowerShell) prints shell completion.