wai-quantum: a gate under many controls stays one operation on the state vector, the bit-exact method states what its lowering did, and the error-correction reader takes C_XYZ, E and PAULI_CHANNEL_1 #675
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 9m23s
The same counts as before them: 1743 pass on macOS arm64, 1738 on Linux
x86_64, none failing; the self-test catches its 23 faults on each.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- A named method that needs standard gates reads them, so a program they
cannot hold is refused as the reader refuses it: on its line, with Q208
or Q210 and no J011. Both refusals past 16 controls say how a job holds
the gate, and no longer say the bit-exact method does so by default.
- A verdict with no intent reads the program as it ran, so a gate past 16
controls runs over MCP, as the docs say; an intent is checked in
standard gates, and a job with one is refused there, on its line.
- lint's dynamic_steps counts standard steps, beside gates.
- options.controls is read: another value, or "whole" on a job that runs
standard gates, is refused (J003), and the schema, methods list, API
description, README and both MCP servers name it.
- accuracy.global_phase is stated against method statevector's state, not
the language's, whose U and gphase differ from it; below_table and
moved_angles say they count phase gates, at 1e-14 of a turn.
- operations is an engine member.
- Gates held whole may take 2,000,000 qubits in all (Q210), which holds
nothing the standard form holds.
- A metered plan says `metered`, its work what the meter allows, and such a
job does not set the method's measured rate.
- The refusal, service and QEC pages and the corpus say what changed; the
tests are named in CI; the conformance set holds the new text forms; the
service snapshot and the agent docs are regenerated.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Two seams with no behaviour come with them: a test's budget for an mps
run, and a plan's `metered`, false everywhere so far.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- The Clifford check of a program holding a gate whole counts its standard
gates first (Program::standard_within, the count `lowered` already used)
and refuses past 16 controls (Q208) and past MAX_OPS (Q210) before
writing any. `ctrl(41) @ z` on 42 qubits, `ctrl(39) @ t`, a Grover
iteration on 42 qubits, `ctrl(24) @ p(0)` and a loop of `ctrl(16) @ p(0)`
hung the planner (each method, `auto` and a dry run) with memory growing;
they are refused at once.
- A method's plan makes only the circuit it reads: the bit-exact circuit
for `exact`, the Clifford gates for `stabilizer`.
- The whole gate's standard gates are read exactly in that check: a phase
under many controls smaller than the reader's tolerance
(`ctrl(16) @ p(1e-7)`) is not taken for none.
- The mps meter counts each move of the orthogonality center and each
one-qubit gate, and holds the budget at each two-site update, inside a gate
that crosses the chain. The plan walks the same steps at the bond asked
for (WorkBound, over Program::local_steps, the walk local_matrices
writes), so it still bounds the meter.
- PAULI_CHANNEL_1 takes every channel independent flips can give, rates
above 1/2 and parities of zero among them.
- The frame reader refuses qubit 4294967295, the carrier's index, and a
correlated error whose carrier has no index left (4294967294 named), at
their lines; C_XYZ and C_ZYX refuse arguments.
- The pinned mps job's digest moves with its plan's work, which now counts
its one-qubit gates (975d7a6a… before); the CLI's llms-full.txt is
regenerated (its feature table already said `exact` holds a gate whole
only when asked).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Each fails on c16cb2086: a whole gate too large for standard gates hangs
the Clifford check; a tiny phase under many controls reads as Clifford; the
mps meter charges no move of the center, and holds the budget only per gate;
Pauli channels with exact independent rates above 1/2 are refused; the
carrier's index is accepted in text; C_XYZ takes arguments.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The comparison rerun on this branch's engine (commit d4282f680; each file
names its trees):
- macOS arm64 (M3 Ultra): 1743 pass, 0 fail; 11 known, 10 refused as
listed, 12 not run, 12 recorded.
- Linux x86_64 (Ryzen AI Max+ 395): 1738 pass, 0 fail; 11 known, 10
refused as listed, 14 not run, 12 recorded.
- The colour code, a correlated error and a general Pauli channel match the
other engine mechanism by mechanism, and their rates; a Pauli channel with
no independent form is refused, as listed. The bit-exact method meets its
bound against OpenQASM's state with the phase its result states, on every
circuit. The 30-qubit QFT at max_bond 256 runs, exact.
Timings on both hosts, and before-after-macos-arm64.json: the same harness
on the corpus branch's build, then this branch's, on the M3 Ultra.
The page says what the results now state, and the hand-written Pauli
channel's reason is corrected: the other engine does give its model (only
the reason text changed after the runs, so the tools and corpus trees they name differ
from this commit's by that description).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- The job request's `options` says what `controls` does now: whole on the
state vector by default, standard on the bit-exact method unless "whole".
- docs/local-mcp.json and docs/llms-full.txt regenerated from the binary
(WAI_QUANTUM_BLESS=1); the command line's tests and smoke.sh pass.
- Clippy's findings in this branch's new code fixed; the crate's older
findings are left as they are (clippy is not a gate on it).
- The changelog says that a bit-exact result now carries its accuracy
members, so its JSON and receipt hold them.
Checked on Linux aarch64: the engine's tests with every feature (library
and integration, 14 targets), its debug test build, every feature subset
the workflows check under -D warnings, and the command line's tests and
smoke checks; the library tests on x86_64 too.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
compare.py is the corpus branch's, with this branch's changes made again on
it: the bit-exact method held to OpenQASM's state with the global phase its
result states; error-correction circuits with C_XYZ, E and PAULI_CHANNEL_1
compared, a model the other engine cannot give held by its sampler; a wide
entry that names its engines and bond. The expected refusals follow the
reader: the colour code, E and the Pauli channel are no longer refused, and a
channel with no independent form must be. A timed row runs the bit-exact
method asked to hold a gate whole.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Review of the first pass:
- The bit-exact method's bits are the rounding of each gate it applies, so a
gate held whole gives other bits than its standard gates. A job on exact now
runs standard gates by default, and gives the hash it always gave; it holds
such a gate whole only when asked, "options": {"controls": "whole"}.
catalog::runs_whole takes the request, and the planner's bit-exact circuit
is the one the method runs.
- A result's and lint's `gates` count standard gates however the method ran
them, as they always have, so a receipt's provenance is unchanged;
`operations` (new, optional) says what a method holding gates whole ran.
The schemas say so.
- The comparison's driver follows the job path: whole on the state vector,
standard on exact unless asked.
- The tests hold the default bit-exact hash to the one before the change.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The state a first pass left uncommitted, recorded as it was so that the review
and its fixes read as changes against it:
- qasm::read_whole keeps a gate whose standard form doubles with its
controls as one op; Program::lowered writes it in standard gates, one
lowering (qasm/controls.rs) behind both forms.
- StateVector::run_ops applies such a gate as one; the bit-exact simulator
walks only the indices its controls leave on.
- The bit-exact method reports the global phase its lowering drops and the
angles below its table; a named mps job runs metered on the bond it
reaches; the error-correction reader takes C_XYZ, E and PAULI_CHANNEL_1.
Not yet built or tested as a whole; later commits review it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>