open-standards/wai/wai-quantum/Cargo.toml
Transaction Science d06afe78dd wai-quantum circuit2: a strict I-JSON reader, the rules stated in full, an accept corpus
A second review of the I-JSON fix upheld two defects.

- The Rust reader left the number-range rule to serde_json. Built without
  float_roundtrip, its fast path is not correctly rounded, so near the largest
  double the reader and the referee disagreed both ways, and in WQC2 on the
  class; and whether wai-rs features that enable float_roundtrip were linked
  changed the verdict.
- The spec claimed I-JSON, but neither reader refused noncharacters.

wai-quantum now reads a contract or measurement section with a strict reader of
its own (src/ijson.rs) that decides every rule from the text: UTF-8; one JSON
value with JSON whitespace; no member name twice, compared after unescaping; no
surrogate or noncharacter, raw or escaped; no number of magnitude
2^1024 − 2^970 or more, decided by std's correctly rounding parse; at most 127
levels. A number keeps its literal, and an unsigned integer is one written with
no sign, fraction or exponent. The serde dependency added for the visitor is
gone. The referee decides the range rule on the literal's digits, integers
only, and names the rule it refuses by.

quantum-sim §2 states the rules in full, says that only the class is normative
when a section breaks several, and that a reader reads integers exactly. §8
adds the noncharacter to the newly refused payloads and notes the numbers just
below the limit that some earlier builds refused.

`accept_corpus()` holds payloads at the edges of the rules that a reader must
accept, each with its circuit and measurement; the corpus gains `accept/` and
`accept.json`. `gen`, `verify`, the referee and the browser check read it. The
reject corpus gains the boundary cases (the integer 2^1024 − 2^970, a literal
just above it, the WQC2 n_qubits forms on both sides of the class order),
noncharacters, a lone low surrogate, a BOM, NaN and a raw control character,
and the referee and the crate check each JSON case's rule. The wasm32-wasip2
leg runs the reader's tests.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 17:46:02 -04:00

219 lines
9.1 KiB
TOML

[package]
name = "wai-quantum"
version = "0.4.0"
edition = "2024"
rust-version = "1.97"
license = "Apache-2.0"
description = "A deterministic quantum stack in pure Rust: byte-exact circuit simulation (statevector / stabilizer / tensor-network MPS / sparse-Pauli backends), sparse Pauli dynamics at utility scale (arbitrary angles, 1024 qubits), belief-propagation tensor networks on the hardware graph, error mitigation, qLDPC decoding, noise learning, circuit-equivalence proofs, a phasor interference-ML layer, information-theoretic limits, noisy channels and state tomography, and signed energy-accounted receipts. No QPU, no cloud, no system libraries — identical results native, in the browser, and as a WASI component at the edge."
repository = "https://git.transaction.science/Transaction-Science/open-standards"
homepage = "https://wai.transaction.science/quantum-ide"
documentation = "https://docs.rs/wai-quantum"
keywords = ["quantum", "simulation", "wasm", "deterministic", "qec"]
categories = ["science", "simulation", "wasm", "mathematics"]
readme = "README.md"
# docs.rs builds with DEFAULT features only, which would document 3 of 21
# modules and hide the entire operational + ML layers. Document everything.
[package.metadata.docs.rs]
all-features = true
[dependencies]
# Hashes for circuit / statevector / receipt identity. Required: the base
# `quantum` feature binds every reconstruction to a BLAKE3 hash.
blake3 = "1"
# Canonical receipt JSON (sorted keys, byte-stable round-trip).
serde_json = { version = "1", features = ["preserve_order"] }
# Receipt signatures. Optional — only the sealing features need it.
ed25519-dalek = { version = "2", optional = true }
[features]
default = ["quantum", "quantum_toolchain", "quantum_receipt"]
# Internal: signature support, pulled in by every sealing feature.
# (Mirrors the `world` feature in the parent `wai` crate.)
_signing = ["dep:ed25519-dalek"]
# --- core simulation -------------------------------------------------------
quantum = []
quantum_toolchain = ["quantum"]
quantum_mps = ["quantum"]
quantum_stabilizer = ["quantum"]
quantum_pauli = ["quantum"]
# Sparse Pauli dynamics at utility scale: arbitrary-angle Pauli rotations on up
# to 1024 qubits, reproducible bit for bit, with a rigorous truncation bound.
# Independent of the dyadic core; `from_dyadic` appears when `quantum` is on.
quantum_spd = []
# Signed, energy-accounted receipts for it, re-checkable bit for bit anywhere.
quantum_spd_receipt = ["quantum_spd", "_signing"]
# Tensor-network states on the hardware graph: simple-update evolution, belief-
# propagation environments; exact on trees, an independent check on loopy graphs.
quantum_bptn = ["quantum_spd"]
# Fault-tolerant resource estimation: logical layout, code distance, exhaustive
# T-factory search and the space-time frontier, reproducible bit for bit.
quantum_resource = []
# Signed, energy-accounted receipts for it, re-checkable bit for bit anywhere.
quantum_resource_receipt = ["quantum_resource", "_signing"]
# Noisy Clifford circuits at QEC scale: bit-packed Pauli-frame sampling, detector
# error models by backward sensitivity, and exact minimum-weight matching.
quantum_frame = []
# Tensor-network contraction: hyper-optimised contraction trees, slicing, and
# amplitudes of circuits far past the state vector, reproducible bit for bit.
quantum_tn = []
# Gaussian boson sampling, exactly: hafnians, torontonians, lossy Gaussian states,
# pattern probabilities, exact samples and the marginals any sampler must match.
quantum_gbs = []
# The dense state vector at any angle: gate fusion, diagonal fast paths, threads,
# the same bits everywhere.
quantum_sv = []
# Architecture-level estimation: yoked storage, magic-state cultivation, CCZ
# factories and reaction-limited time, assembled into whole-machine estimates.
quantum_arch = []
# qLDPC memory at circuit level: bivariate-bicycle codes, their depth-8 syndrome
# cycle, and BP-OSD decoding of the circuit's error model.
quantum_ldpc = ["quantum_frame"]
# Quantum-inspired optimisation: simulated bifurcation (ballistic, discrete,
# heated), simulated annealing and an exact referee, on Ising and Max-Cut.
quantum_qio = []
# Union-find decoding in near-linear time over the matching graph.
quantum_uf = ["quantum_frame"]
# Noisy circuits: quantum trajectories on the state vector, an exact density-
# matrix referee, and cross-entropy fidelity against the digital error model.
quantum_noisy = ["quantum_sv"]
# Ground states of spin chains by two-site DMRG, held to exact diagonalisation
# and to the free-fermion solution of the transverse-field Ising chain.
quantum_dmrg = []
# Time evolution of spin chains by the time-dependent variational principle,
# held to exact evolution and to the free-fermion solution of a quench.
quantum_tdvp = ["quantum_dmrg"]
# Molecules by DMRG: FCIDUMP integrals, the second-quantised Hamiltonian as an
# exact MPO, and full configuration interaction as the referee.
quantum_chem = ["quantum_dmrg"]
# Neural quantum states: a restricted Boltzmann machine trained by variational
# Monte Carlo with stochastic reconfiguration, held to exact diagonalisation
# and DMRG on chains and square lattices.
quantum_nqs = ["quantum_dmrg"]
# Mixed states and the observables that distinguish quantum theory from a classical
# account: density matrices, the partial trace, exact Pauli expectations, CHSH.
quantum_info = ["quantum"]
# Qubits AND qutrits: the Weyl-Heisenberg group, the Fourier gate over Z_d, and
# the controlled sum. Exact for d = 2 and 3; other dimensions are refused.
quantum_qudit = ["quantum"]
# Quantum communication and security: BB84 key distribution with an
# intercept-resend eavesdropper, and the no-cloning theorem priced.
quantum_comm = ["quantum"]
# What quantum theory says about encoding and transport: von Neumann entropy, the
# Schumacher limit, and the Holevo bound that refuses classical compression.
quantum_source = ["quantum", "quantum_info"]
# Transport itself: Kraus channels, and tomography to see what arrived.
quantum_channel = ["quantum", "quantum_info", "quantum_source"]
# QIR (LLVM-based quantum IR) export — the compiler-facing sibling of OpenQASM.
quantum_qir = ["quantum", "quantum_toolchain"]
# --- receipts & operations -------------------------------------------------
quantum_receipt = ["quantum", "_signing"]
quantum_ops = ["_signing"]
quantum_cal = ["quantum_ops"]
quantum_mitigate = ["quantum_ops"]
quantum_qec = ["quantum_ops"]
quantum_control = ["quantum_cal"]
quantum_noise = ["quantum_cal"]
quantum_compile = ["quantum_ops"]
quantum_atom = ["quantum_ops"]
quantum_qbom = ["quantum_ops"]
# The fabric: members, parity against the CPU reference, certification,
# placement by joules, and a signed receipt naming where a result ran. With the
# fixed-point core in 32-bit lanes, the kernel an integer-only fabric runs.
quantum_fabric = ["quantum", "quantum_ops"]
# --- interference / ML layer ----------------------------------------------
quantum_vml = []
quantum_phasor = []
quantum_qfhrr = ["quantum_vml"]
quantum_kernel = []
quantum_qdata = []
quantum_phasor_meter = ["_signing"]
# Everything.
full = [
"quantum", "quantum_toolchain", "quantum_mps", "quantum_stabilizer", "quantum_pauli", "quantum_spd", "quantum_spd_receipt", "quantum_bptn", "quantum_resource", "quantum_resource_receipt", "quantum_frame", "quantum_tn", "quantum_gbs", "quantum_sv", "quantum_arch", "quantum_ldpc", "quantum_qio", "quantum_uf", "quantum_noisy", "quantum_dmrg", "quantum_tdvp", "quantum_chem", "quantum_nqs", "quantum_qir", "quantum_info", "quantum_qudit", "quantum_comm", "quantum_source", "quantum_channel",
"quantum_receipt", "quantum_ops", "quantum_cal", "quantum_mitigate", "quantum_qec",
"quantum_control", "quantum_noise", "quantum_compile", "quantum_atom", "quantum_qbom", "quantum_fabric",
"quantum_vml", "quantum_phasor", "quantum_qfhrr", "quantum_kernel", "quantum_qdata",
"quantum_phasor_meter",
]
[[example]]
name = "qio_gset"
required-features = ["quantum_qio"]
[[example]]
name = "tdvp_quench"
required-features = ["quantum_tdvp"]
[[example]]
name = "nqs_ground"
required-features = ["quantum_nqs"]
[[example]]
name = "chem_dmrg"
required-features = ["quantum_chem"]
[[example]]
name = "dmrg_chain"
required-features = ["quantum_dmrg"]
[[example]]
name = "uf_bench"
required-features = ["quantum_uf"]
[[example]]
name = "ldpc_memory"
required-features = ["quantum_ldpc"]
[[example]]
name = "arch_factoring"
required-features = ["quantum_arch"]
[[example]]
name = "sv_run"
required-features = ["quantum_sv"]
[[example]]
name = "gbs_check"
required-features = ["quantum_gbs"]
[[example]]
name = "tn_path"
required-features = ["quantum_tn"]
[[example]]
name = "qec_threshold"
required-features = ["quantum_frame"]
[[example]]
name = "qec_frame"
required-features = ["quantum_frame"]
[[example]]
name = "utility"
required-features = ["quantum_spd"]
[[example]]
name = "utility_mz"
required-features = ["quantum_spd"]
[[example]]
name = "utility_bptn"
required-features = ["quantum_bptn"]
[[example]]
name = "bell"
required-features = ["quantum", "quantum_toolchain"]
[[example]]
name = "threshold"
required-features = ["quantum_qec"]
[[example]]
name = "receipt"
required-features = ["quantum_toolchain", "quantum_receipt"]