From 7bb8547dee5829e7726cc2366ad27197eddd9f59 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 09:16:05 -0400 Subject: [PATCH 1/8] wai: the int_codec export generates its own signal from a seed tools/wai_int_audio_export.py no longer reads an audio file. It writes the training signal and the test signal (the clip a vector codes) itself, from a seed: 16 kHz mono s16, segments of tones, chirps, noise bursts and speech-like formant sweeps, sometimes two overlaid, with short gaps. The generator is integer arithmetic only (a SplitMix64 counter stream, a 32-bit phase accumulator, a Bhaskara I sine table, an exact 2^(k/64) table), so a seed gives the same samples on every machine. The codec trains on stream 0 of the seed and codes stream 1. Training is seeded from the same seed with deterministic algorithms and a fixed thread count. --signal-only writes one generated signal with the Python standard library alone. The model, payload and capability are unchanged; the vectors are regenerated in the commits that follow. Co-Authored-By: Claude Opus 5.5 --- wai/tools/wai_int_audio_export.py | 406 ++++++++++++++++++++++++------ 1 file changed, 327 insertions(+), 79 deletions(-) diff --git a/wai/tools/wai_int_audio_export.py b/wai/tools/wai_int_audio_export.py index 4ad513c0f..ef7085cbd 100644 --- a/wai/tools/wai_int_audio_export.py +++ b/wai/tools/wai_int_audio_export.py @@ -3,77 +3,302 @@ INTEGER-exact decoder — the audio analog of `int_hyper`, extending "conformance is a hash" to learned audio. -A neural audio codec (SoundStream/EnCodec-class) decodes through a FLOAT network, -so a ~1e-5 round-off makes the reconstructed waveform — and its hash — diverge -between machines: never receiptable. Here the synthesis is a stack of integer -1-D transposed convolutions + integer IGDN (per-out-channel int12 weights, -fixed-point activations, all i64), so the reconstructed PCM is byte-identical on -every machine (NeuralIntegerExact) — *sample-equivalence*, a portable PCM hash. +A neural audio codec decodes through a FLOAT network, so a ~1e-5 round-off makes the +reconstructed waveform — and its hash — diverge between machines: never receiptable. +Here the synthesis is a stack of integer 1-D transposed convolutions + integer IGDN +(per-out-channel int12 weights, fixed-point activations, all i64), so the +reconstructed PCM is byte-identical on every machine (NeuralIntegerExact) — +*sample-equivalence*, a portable PCM hash. + +**The signal is generated here; the tool reads no audio file.** Both the training +signal and the test signal (the clip the vector codes) are written by `signal()` +below from a seed: 16 kHz, mono, signed 16-bit, a sequence of segments, each a tone +(one to three partials with an attack and a release), a chirp (a linear frequency +sweep), a noise burst (white noise, low-passed by a moving average or high-passed by +a difference) or a speech-like formant sweep (a harmonic series on a gliding, +vibrato-modulated pitch, shaped by three formant resonances that move between two +vowel targets), sometimes two overlaid, with short gaps. The generator is integer +arithmetic only — a SplitMix64 counter stream, a 32-bit phase accumulator, a +4096-entry sine table built by Bhaskara I's rational approximation — so a seed gives +the same samples on every machine and every Python. The training signal is stream 0 +of the seed and the test signal stream 1: the codec is trained on one signal and +codes another of the same kind. Pipeline (mirrors wai_sota_int_synth_export, in 1-D): - 1. train g_a/g_s (Conv1d+GDN / ConvTranspose1d+IGDN) on a real clip (float; this - is the encoder, float is fine here — only the DECODE must be integer); - 2. quantize the latent per channel (factorized prior, data-fit CDF + rANS, the - byte-exact match of the Rust RansDecoder); - 3. PTQ g_s → integer (WAM1 binary), run an INTEGER reference decode (numpy, - mirroring the planned Rust i64 arithmetic) → int16 PCM → FNV-1a hash. + 1. generate the training and test signals from the seed; + 2. train g_a/g_s (Conv1d+GDN / ConvTranspose1d+IGDN) on the training signal (float; + this is the encoder, float is fine here — only the DECODE must be integer), with + torch seeded from the same seed, deterministic algorithms and a fixed thread + count, so a run on one host and torch build gives the same weights every time; + 3. quantize the test signal's latent per channel (factorized prior, data-fit CDF + + rANS, the byte-exact match of the Rust RansDecoder); + 4. PTQ g_s → integer (WAM1 binary), run an INTEGER reference decode (numpy, + mirroring the Rust i64 arithmetic) → int16 PCM → FNV-1a hash. - ffmpeg -i .aiff -ac 1 -ar 16000 -f s16le audio.s16 - python tools/wai_int_audio_export.py audio.s16 + python tools/wai_int_audio_export.py [--seed S] [--channels C] + [--samples N] [--steps K] [--train-seconds T] + python tools/wai_int_audio_export.py --signal-only [--seed S] [--stream 0|1] + [--samples N] + +`--signal-only` writes one generated signal as raw s16le and needs nothing beyond the +Python standard library. The committed vector (`wai-rs/tests/vectors/int_audio/`) and +the site's demo clip are both exports of this tool; their commands are in that +directory's README. """ -import sys, os, json, math, base64 -import numpy as np, torch, torch.nn as nn, torch.nn.functional as F, warnings -warnings.filterwarnings('ignore') -from compressai.ans import RansEncoder +import argparse +import base64 +import json +import math +import os +import struct +import sys AFRAC = 12; WBITS = 12; SHIFT = 24; GF = 16 # same fixed-point as int_hyper -SR = 16000; T = 2048; C = 32; K = 5; STR = 2; NLAY = 4 # codec shape (16x downsample) -STEPS = 3500; MAXS = 0 # train steps; MAXS>0 caps #samples (small committed vector) +SR = 16000; T = 2048; K = 5; STR = 2; NLAY = 4 # codec shape (16x downsample) +LR = 1.5e-3; RATE_W = 8e-6 +THREADS = 4 # fixed: CPU reductions depend on it + +# ---- the generated signal (integer arithmetic only) ---------------------------------- +M64 = (1 << 64) - 1 +GOLDEN = 0x9E3779B97F4A7C15 +TAB_BITS = 12 +TAB_N = 1 << TAB_BITS + + +def _mix64(x): + """SplitMix64's finalizer.""" + x &= M64 + x = ((x ^ (x >> 30)) * 0xBF58476D1CE4E5B9) & M64 + x = ((x ^ (x >> 27)) * 0x94D049BB133111EB) & M64 + return x ^ (x >> 31) + + +class Rng: + """A SplitMix64 stream, keyed by (seed, stream).""" + + def __init__(self, seed, stream): + self.s = _mix64(seed * GOLDEN + stream * 0xD1B54A32D192ED03) + + def next(self): + self.s = (self.s + GOLDEN) & M64 + return _mix64(self.s) + + def int(self, lo, hi): + """Uniform integer in [lo, hi].""" + return lo + self.next() % (hi - lo + 1) + + def s16(self): + """Uniform signed 16-bit value.""" + return (self.next() >> 48) - 32768 + + +def _sine_table(): + """sin(2π i / TAB_N) × 32767, by Bhaskara I's approximation, rounded half up: + sin(πp) ≈ 16 p (1 − p) / (5 − 4 p (1 − p)), p = u / half.""" + half = TAB_N // 2 + out = [] + for i in range(TAB_N): + u = i % half + a = u * (half - u) + den = 5 * half * half - 4 * a + v = (2 * 32767 * 16 * a + den) // (2 * den) + out.append(v if i < half else -v) + return out + + +SINE = _sine_table() + + +def _inc(f_q8): + """32-bit phase increment per sample for a frequency in Hz × 256.""" + return (f_q8 << 24) // SR + + +def _osc(phase): + return SINE[(phase & 0xFFFFFFFF) >> (32 - TAB_BITS)] + + +def _envelope(n, attack, release): + """Linear attack and release, Q15, length n.""" + attack, release = max(1, min(attack, n // 2)), max(1, min(release, n // 2)) + return [min(32767, (32767 * (i + 1)) // attack, (32767 * (n - i)) // release) for i in range(n)] + + +def _root64(x): + """2^(x/64) in Q16, floored: the largest y with y^64 ≤ 2^(x + 16·64). Exact.""" + lo, hi = 1 << 16, 1 << 17 + while lo < hi: + mid = (lo + hi + 1) // 2 + if mid ** 64 <= 1 << (x + 1024): + lo = mid + else: + hi = mid - 1 + return lo + + +ROOT64 = [_root64(x) for x in range(64)] + + +def _log_freq(r, lo, hi): + """A frequency in Hz × 256, log-uniform in [lo, hi] Hz: lo · 2^(k/64) for a random + k, drawn again while it is above hi.""" + octaves = 0 + while (lo << octaves) < hi: + octaves += 1 + while True: + o, j = divmod(r.int(0, 64 * octaves), 64) + f = ((lo << o) * ROOT64[j]) >> 8 + if f <= hi << 8: + return f + + +# Formant targets (F1, F2, F3) in Hz for five vowels. +VOWELS = [(730, 1090, 2440), (270, 2290, 3010), (300, 870, 2240), (530, 1840, 2480), (570, 840, 2410)] + + +def _tone(r, n): + out = [0] * n + for _ in range(r.int(1, 3)): + inc, amp, ph = _inc(_log_freq(r, 80, 3500)), r.int(4000, 16000), r.next() & 0xFFFFFFFF + for i in range(n): + out[i] += (amp * _osc(ph)) >> 15 + ph += inc + env = _envelope(n, r.int(SR // 500, SR // 30), r.int(SR // 50, SR // 6)) + return [(v * e) >> 15 for v, e in zip(out, env)] + + +def _chirp(r, n): + i0, i1 = _inc(_log_freq(r, 100, 6000)), _inc(_log_freq(r, 100, 6000)) + amp, ph, out = r.int(8000, 20000), r.next() & 0xFFFFFFFF, [] + for i in range(n): + out.append((amp * _osc(ph)) >> 15) + ph += i0 + (i1 - i0) * i // n + env = _envelope(n, r.int(SR // 500, SR // 50), r.int(SR // 100, SR // 20)) + return [(v * e) >> 15 for v, e in zip(out, env)] + + +def _noise(r, n): + w = [r.s16() for _ in range(n + 16)] + kind = r.int(0, 2) + if kind == 0: # white + x = w[:n] + elif kind == 1: # low-passed: moving average + L = [2, 3, 5, 8, 13][r.int(0, 4)] + x = [sum(w[i:i + L]) // L for i in range(n)] + else: # high-passed: first difference + x = [(w[i + 1] - w[i]) >> 1 for i in range(n)] + env = _envelope(n, r.int(SR // 1000, SR // 200), r.int(SR // 50, SR // 5)) + amp = r.int(4000, 14000) + return [(((v * amp) >> 15) * e) >> 15 for v, e in zip(x, env)] + + +def _formant(r, n): + """A harmonic series on a gliding pitch with vibrato, each harmonic weighted by + three resonances 1 / (1 + ((f − F)/B)^2) whose centres move between two vowels.""" + f0a = r.int(90, 240) << 8 + f0b = (f0a * r.int(80, 125)) // 100 + va, vb = VOWELS[r.int(0, 4)], VOWELS[r.int(0, 4)] + bw = (r.int(60, 110), r.int(90, 160), r.int(120, 220)) + vib_inc, vib_depth = _inc(r.int(4, 7) << 8), r.int(5, 25) # depth in ‰ + nh = max(1, (4800 << 8) // max(f0a, f0b)) + ph0, vph, out = r.next() & 0xFFFFFFFF, r.next() & 0xFFFFFFFF, [] + amps = [0] * nh + for i in range(n): + f0 = f0a + (f0b - f0a) * i // n + f0 += (f0 * vib_depth * _osc(vph)) // (1000 * 32767) + vph += vib_inc + if i % 32 == 0: # the weights at block rate + F = [va[j] + (vb[j] - va[j]) * i // n for j in range(3)] + for k in range(nh): + fk = ((k + 1) * f0) >> 8 + g = 0 + for j in range(3): + d = ((fk - F[j]) << 10) // bw[j] + g += (1 << 20) // (1024 + ((d * d) >> 10)) # Q10 resonance gain + amps[k] = (g * 1024) // (1024 + 256 * k) # spectral tilt + ph0 += _inc(f0) + acc = 0 + for k in range(nh): + acc += amps[k] * _osc((k + 1) * ph0) + out.append(acc >> 15) + env = _envelope(n, r.int(SR // 200, SR // 20), r.int(SR // 50, SR // 10)) + return [(v * e) >> 15 for v, e in zip(out, env)] + + +KINDS = [_tone, _chirp, _noise, _formant] + + +def signal(seed, stream, n): + """n samples of the generated signal (a list of ints in the int16 range).""" + r = Rng(seed, stream) + out = [] + while len(out) < n: + m = r.int(SR * 8 // 100, SR // 2) # a segment: 80–500 ms + seg = KINDS[r.int(0, 3)](r, m) + if r.int(0, 3) == 0: # sometimes a second, quieter kind + over = KINDS[r.int(0, 3)](r, m) + seg = [a + (b >> 2) for a, b in zip(seg, over)] + peak = max(1, max(abs(v) for v in seg)) + target = r.int(6000, 28000) + seg = [(v * target) // peak for v in seg] + out += seg + [0] * r.int(0, SR // 25) # a gap: 0–40 ms + return [max(-32768, min(32767, v)) for v in out[:n]] + + +def s16le(x): + return struct.pack(f'<{len(x)}h', *x) # ---- learned model (float; the encoder) ------------------------------------- -class GDN1d(nn.Module): - """1-D (inverse) generalized divisive normalization with a full C×C gamma. - Forward divides by sqrt(beta + gamma·x²); inverse multiplies — the exact form - crate::int_transform::igdn reproduces in integer (out = x·isqrt(norm)).""" - def __init__(self, ch, inverse): - super().__init__() - self.inverse = inverse - self.rg = nn.Parameter(torch.randn(ch, ch) * 0.01) # raw → softplus → γ≥0 - self.rb = nn.Parameter(torch.zeros(ch)) # raw → softplus → β≈1 +def build_codec(C): + import torch + import torch.nn as nn + import torch.nn.functional as F - def gb(self): - return F.softplus(self.rg), F.softplus(self.rb + 1.0) + class GDN1d(nn.Module): + """1-D (inverse) generalized divisive normalization with a full C×C gamma. + Forward divides by sqrt(beta + gamma·x²); inverse multiplies — the exact form + crate::int_transform::igdn reproduces in integer (out = x·isqrt(norm)).""" + def __init__(self, ch, inverse): + super().__init__() + self.inverse = inverse + self.rg = nn.Parameter(torch.randn(ch, ch) * 0.01) # raw → softplus → γ≥0 + self.rb = nn.Parameter(torch.zeros(ch)) # raw → softplus → β≈1 - def forward(self, x): # x [N,C,T] - g, b = self.gb() - norm = b[None, :, None] + torch.einsum('ij,njt->nit', g, x * x) - return x * torch.sqrt(norm) if self.inverse else x / torch.sqrt(norm) + def gb(self): + return F.softplus(self.rg), F.softplus(self.rb + 1.0) + def forward(self, x): # x [N,C,T] + g, b = self.gb() + norm = b[None, :, None] + torch.einsum('ij,njt->nit', g, x * x) + return x * torch.sqrt(norm) if self.inverse else x / torch.sqrt(norm) -class Codec(nn.Module): - def __init__(self): - super().__init__() - ga, gs = [], [] - for i in range(NLAY): - ga += [nn.Conv1d(1 if i == 0 else C, C, K, STR, K // 2), GDN1d(C, False)] - for i in range(NLAY): - last = i == NLAY - 1 - gs += [nn.ConvTranspose1d(C, 1 if last else C, K, STR, K // 2, output_padding=STR - 1)] - if not last: - gs += [GDN1d(C, True)] - self.g_a, self.g_s = nn.Sequential(*ga), nn.Sequential(*gs) + class Codec(nn.Module): + def __init__(self): + super().__init__() + ga, gs = [], [] + for i in range(NLAY): + ga += [nn.Conv1d(1 if i == 0 else C, C, K, STR, K // 2), GDN1d(C, False)] + for i in range(NLAY): + last = i == NLAY - 1 + gs += [nn.ConvTranspose1d(C, 1 if last else C, K, STR, K // 2, output_padding=STR - 1)] + if not last: + gs += [GDN1d(C, True)] + self.g_a, self.g_s = nn.Sequential(*ga), nn.Sequential(*gs) - def forward(self, x): - y = self.g_a(x) - y_hat = y + (torch.rand_like(y) - 0.5) # STE quantization noise - return self.g_s(y_hat), y + def forward(self, x): + y = self.g_a(x) + y_hat = y + (torch.rand_like(y) - 0.5) # STE quantization noise + return self.g_s(y_hat), y + + return Codec() # ---- integer reference decode (numpy; mirrors the Rust i64 arithmetic) ------- def conv_t_1d_int(xi, wi, mult, bias, stride, pad, opad): """Integer 1-D transposed conv + per-out-channel (mult>>SHIFT)+bias — byte-for- - byte what Rust int_audio::conv_t_1d will do. xi [cin,T]; wi [cin,cout,k].""" + byte what Rust int_audio::conv_t_1d does. xi [cin,T]; wi [cin,cout,k].""" + import numpy as np cin, cout, k = wi.shape; Tin = xi.shape[1] To = (Tin - 1) * stride + k + opad - 2 * pad Tp = To + 2 * pad @@ -88,6 +313,7 @@ def conv_t_1d_int(xi, wi, mult, bias, stride, pad, opad): def igdn_int_1d(x, gi, bi): """Integer IGDN, the EXACT arithmetic of crate::int_transform::igdn (per-term >>GF before the sum, isqrt at 2^AFRAC, (x·s)>>AFRAC). x [C,T] python-int.""" + import numpy as np Cc, Tt = x.shape x2 = x * x # 2^(2·AFRAC) norm = np.tile(np.array(bi, dtype=object)[:, None], (1, Tt)) # 2^(2·AFRAC) @@ -98,6 +324,7 @@ def igdn_int_1d(x, gi, bi): def run_g_s_int(xi, layers): + import numpy as np x = xi.astype(object) for L in layers: if L['type'] == 'convT': @@ -113,6 +340,7 @@ def run_g_s_int(xi, layers): def to_pcm_i16(x_fixed): """[1,T] @ 2^AFRAC (≈[-1,1]) → int16 PCM, round-half-up, clamp. Matches Rust.""" + import numpy as np v = x_fixed[0] num = v * 32767 + (1 << (AFRAC - 1)) pcm = num >> AFRAC # python>> floors (== i64 arith shift) @@ -121,12 +349,14 @@ def to_pcm_i16(x_fixed): # ---- PTQ + entropy helpers --------------------------------------------------- def q_weight_pc(w): # ConvTranspose1d [in,out,k] → per-OUT int12 + import numpy as np s = np.abs(w).max(axis=(0, 2), keepdims=True) / (2 ** (WBITS - 1) - 1) + 1e-12 wi = np.round(w / s).clip(-(2 ** (WBITS - 1)), 2 ** (WBITS - 1) - 1).astype(np.int64) return wi, s.reshape(-1) def fit_cdf(sym, lo, hi): + import numpy as np n = hi - lo + 1 hist = np.bincount(np.asarray(sym, np.int64) - lo, minlength=n).astype(np.float64) total = 1 << 16 @@ -146,33 +376,41 @@ def fnv1a(buf): return h -def main(src, outdir): - os.makedirs(outdir, exist_ok=True) - torch.manual_seed(0) - raw = np.fromfile(src, np.int16).astype(np.float32) / 32768.0 - if MAXS: - raw = raw[:MAXS] - n = (len(raw) // T) * T - raw = raw[:n] - frames = torch.from_numpy(raw.reshape(-1, 1, T)) # [Nf,1,T] +def main(outdir, seed, C, nsamp, steps, train_seconds): + import numpy as np + import torch + import torch.nn.functional as F + from compressai.ans import RansEncoder - m = Codec() - opt = torch.optim.Adam(m.parameters(), 1.5e-3) + assert nsamp % T == 0, f'--samples must be a multiple of {T}' + os.makedirs(outdir, exist_ok=True) + torch.manual_seed(seed) + torch.use_deterministic_algorithms(True) + torch.set_num_threads(THREADS) + + ntrain = (train_seconds * SR // T) * T + train = np.array(signal(seed, 0, ntrain), np.float32) / 32768.0 + test_i16 = signal(seed, 1, nsamp) + raw = np.array(test_i16, np.float32) / 32768.0 + frames = torch.from_numpy(train.reshape(-1, 1, T)) # [Nf,1,T] + + m = build_codec(C) + opt = torch.optim.Adam(m.parameters(), LR) # Keep the rate term tiny: the latent must stay O(1+) so integer rounding (the # quantizer) preserves it — too much rate pressure collapses it below the grid. - for step in range(STEPS): + for step in range(steps): xr, y = m(frames) - loss = F.mse_loss(xr, frames) + 8e-6 * y.abs().mean() + loss = F.mse_loss(xr, frames) + RATE_W * y.abs().mean() opt.zero_grad(); loss.backward(); opt.step() m.eval() with torch.no_grad(): xr_f, _ = m(frames) snr_f = 10 * np.log10((frames ** 2).sum() / ((xr_f - frames) ** 2).sum() + 1e-12) - print(f' (float recon SNR {float(snr_f):.1f} dB)') + print(f' (float recon SNR on the training signal {float(snr_f):.1f} dB)') - # full-signal latent → per-channel factorized symbols (s = round(y - median)) + # the test signal's latent → per-channel factorized symbols (s = round(y - median)) with torch.no_grad(): - xfull = torch.from_numpy(raw.reshape(1, 1, n)) + xfull = torch.from_numpy(raw.reshape(1, 1, nsamp)) y = m.g_a(xfull)[0].numpy() # [C, L] L = y.shape[1] median = np.round(np.median(y, axis=1)) # integer-grid median @@ -214,7 +452,6 @@ def main(src, outdir): bits = enc.encode_with_indexes(syms_flat, idx, cdfs, [len(cdfs[0])] * C, [lo] * C) # WAM1 binary model - import struct mb = bytearray(b'WAM1') mb += struct.pack(' integer-decode SNR {snr:.1f} dB, pcm_hash {pcm_hash}') + open(f'{outdir}/audio_source.s16', 'wb').write(s16le(test_i16)) + print(f'learned 1-D audio codec (seed {seed}): {len(pcm)} samples @ {SR}Hz, C={C} L={L}, ' + f'model {len(mb)}B, rANS {len(bits)}B -> integer-decode SNR {snr:.1f} dB, pcm_hash {pcm_hash}') if __name__ == '__main__': - # optional: C MAXS STEPS (e.g. tiny committed vector: 16 8192 2500) - if len(sys.argv) > 3: - C = int(sys.argv[3]) - if len(sys.argv) > 4: - MAXS = int(sys.argv[4]) - if len(sys.argv) > 5: - STEPS = int(sys.argv[5]) - main(sys.argv[1], sys.argv[2]) + ap = argparse.ArgumentParser(description='Train and export the integer learned audio codec on a ' + 'generated signal (no audio input).') + ap.add_argument('outdir', nargs='?', help='where audio_model.bin, audio_bitstream.json and audio.json go') + ap.add_argument('--seed', type=int, default=1) + ap.add_argument('--channels', type=int, default=32, help='latent channels C') + ap.add_argument('--samples', type=int, default=32768, help='test-signal (coded clip) length, a multiple of 2048') + ap.add_argument('--steps', type=int, default=3500, help='training steps') + ap.add_argument('--train-seconds', type=int, default=8, help='training-signal length in seconds') + ap.add_argument('--signal-only', metavar='OUT.s16', help='write one generated signal and exit') + ap.add_argument('--stream', type=int, default=1, help='with --signal-only: 0 training, 1 test') + a = ap.parse_args() + if a.signal_only: + n = a.samples if a.stream == 1 else (a.train_seconds * SR // T) * T + open(a.signal_only, 'wb').write(s16le(signal(a.seed, a.stream, n))) + sys.exit(0) + if not a.outdir: + ap.error('outdir is required unless --signal-only is given') + main(a.outdir, a.seed, a.channels, a.samples, a.steps, a.train_seconds) -- 2.54.0 (Apple Git-157) From a16ea1bd5a023ad9b8bc9fda64c03358fefc745f Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 09:16:05 -0400 Subject: [PATCH 2/8] wai: a check that no committed audio vector is a coding of a recording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tools/wai_audio_provenance_check.py (Python standard library) reads every committed audio vector to PCM — each audio base's stage 0 in the staged corpus, each staged-measurement source over one, each spatial-audio source, every audio file under wai/ — and computes its normalised cross-correlation at every lag against every recording in a reference set the host has (the host's system sound directory, --ref, WAI_AUDIO_REFERENCE_DIRS). Above the threshold (0.5) it fails. A learned-codec vector is covered through its decode, which must be a staged case's stage 0. With no reference set, or no converter to read it, the check prints why and is skipped. On this commit it fails: the int_codec stage 0 and the measurement source built on it match a reference recording (0.984 and 0.963). The vectors are replaced next. Co-Authored-By: Claude Opus 5.5 --- wai/tools/wai_audio_provenance_check.py | 482 ++++++++++++++++++++++++ 1 file changed, 482 insertions(+) create mode 100644 wai/tools/wai_audio_provenance_check.py diff --git a/wai/tools/wai_audio_provenance_check.py b/wai/tools/wai_audio_provenance_check.py new file mode 100644 index 000000000..b220f746d --- /dev/null +++ b/wai/tools/wai_audio_provenance_check.py @@ -0,0 +1,482 @@ +#!/usr/bin/env python3 +"""Fail if a committed audio vector is a coding of a recording in a reference set. + +Every audio vector in this tree must come from a seeded generator. This check finds +the ones that do not, by content: it decodes or reads each committed audio vector to +PCM and computes its normalised cross-correlation, at every lag, against every +recording in a reference set the host has. A vector that correlates above the +threshold (0.5 by default) with any reference fails the check. A generated signal +correlates with an unrelated recording at a few hundredths; a lossy coding of a +recording correlates with it near 1. + + python3 tools/wai_audio_provenance_check.py [--wai DIR] [--threshold T] + [--ref DIR]... [--pcm PATH:RATE[:CH]]... + +Run from `wai/` (or pass `--wai`). Python standard library only. + +**The reference set** is every audio file under each `--ref` directory, under each +directory in `WAI_AUDIO_REFERENCE_DIRS` (separated by the platform's path separator), +and under the host's system sound directory (`/System/Library/Sounds`) when it exists. +Each reference is converted to mono PCM at the analysis rate by the host's audio +converter (`afconvert`, else `ffmpeg`); raw `.s16` references are read as 16 kHz mono. +When the set is empty, or no converter can read any of it, the check prints why and +exits 0: it is skipped, not passed. + +**The committed audio vectors** are found by rule, not listed, so a new one is +covered when it lands: + +- each base of a staged-delivery case (`staged-conformance/cases/*/case.json`) that + decodes through a `wai.audio.*` capability: its stage 0 (`stage0.bin`, the decoded + PCM, i16 interleaved), at the sample rate its payload states (a `WIA1` header's + `sr`, a FLAC stream's STREAMINFO); +- each staged-measurement title over such a base + (`staged-measure-conformance/fixtures/*/title.json`): its source (`source.bin`), at + the base's rate scaled by the source's length over the base's; +- each spatial-audio source (`audio-conformance/vectors/*.sources.bin`), at the rate + its scene (`.wscn`) states; +- every file with an audio extension (`.wav`, `.aif`, `.aiff`, `.flac`, `.s16`, …) + anywhere under `wai/`; +- and every `--pcm PATH:RATE[:CH]` given (raw s16le, CH channels interleaved). + +A signal shorter than a quarter of a second at the analysis rate, or silent, is listed +and not judged: over so few samples a generated tone can match a recorded one by +chance (a 50 ms pair of triangle waves reaches 0.5 against a low recorded tone). + +A learned-codec vector (`wai-rs/tests/vectors/*/audio_model.bin` beside a +`sha256.json`) is covered through its decode: the check requires that the decoded +PCM's SHA-256 its sidecar states is the stage 0 of a staged-delivery case above, so +the PCM it scans is that vector's output. A codec vector with no such case fails. + +Exit status: 0 when every vector is under the threshold or the check is skipped; +1 when a vector correlates above it, or a codec vector's decode is not covered. +""" +import argparse +import cmath +import glob +import hashlib +import json +import math +import os +import re +import shutil +import struct +import subprocess +import sys +import tempfile +import wave + +ANALYSIS_RATE = 8000 # Hz: every signal is compared here, mono +SYSTEM_SOUNDS = '/System/Library/Sounds' +AUDIO_EXT = {'.wav', '.wave', '.aif', '.aiff', '.aifc', '.flac', '.mp3', '.ogg', '.opus', + '.m4a', '.caf', '.s16', '.pcm'} +SKIP_DIRS = {'.git', 'target', 'node_modules', 'jpeg-ai-ref', '__pycache__'} +MIN_SAMPLES = ANALYSIS_RATE // 4 # a quarter second: a shorter signal is listed, not judged + + +# ---- PCM helpers -------------------------------------------------------------------- +def i16le(b): + n = len(b) // 2 + return list(struct.unpack(f'<{n}h', b[:2 * n])) + + +def channels(pcm, ch): + return [pcm[c::ch] for c in range(ch)] + + +def lowpass_taps(cut, n=63): + """A Hann-windowed sinc low-pass, cut-off `cut` in cycles per input sample.""" + m = n // 2 + taps = [] + for k in range(n): + x = k - m + s = 2 * cut if x == 0 else math.sin(2 * math.pi * cut * x) / (math.pi * x) + taps.append(s * (0.5 - 0.5 * math.cos(2 * math.pi * k / (n - 1)))) + g = sum(taps) + return [t / g for t in taps] + + +def resample(x, rate): + """Resample `x` from `rate` to the analysis rate: low-pass, then linear interpolation.""" + if rate == ANALYSIS_RATE or not x: + return [float(v) for v in x] + if rate > ANALYSIS_RATE: + taps = lowpass_taps(0.45 * ANALYSIS_RATE / rate) + m = len(taps) // 2 + n = len(x) + y = [] + for i in range(n): + acc = 0.0 + lo, hi = max(0, i - m), min(n, i + m + 1) + for j in range(lo, hi): + acc += taps[j - i + m] * x[j] + y.append(acc) + else: + y = [float(v) for v in x] + step = rate / ANALYSIS_RATE + out, t = [], 0.0 + while t <= len(y) - 1: + i = int(t) + f = t - i + out.append(y[i] if f == 0 or i + 1 >= len(y) else y[i] * (1 - f) + y[i + 1] * f) + t += step + return out + + +# ---- correlation ---------------------------------------------------------------------- +_TW = {} + + +def fft(a, inverse=False): + """In-place iterative radix-2 FFT of a list of complex numbers (len a power of 2).""" + n = len(a) + j = 0 + for i in range(1, n): + bit = n >> 1 + while j & bit: + j ^= bit + bit >>= 1 + j |= bit + if i < j: + a[i], a[j] = a[j], a[i] + key = (n, inverse) + if key not in _TW: + sgn = 1 if inverse else -1 + _TW[key] = [cmath.exp(sgn * 2j * math.pi * k / n) for k in range(n // 2)] + tw = _TW[key] + size = 2 + while size <= n: + half = size // 2 + stride = n // size + for start in range(0, n, size): + for k in range(half): + u = a[start + k] + v = a[start + k + half] * tw[k * stride] + a[start + k] = u + v + a[start + k + half] = u - v + size *= 2 + if inverse: + for i in range(n): + a[i] /= n + return a + + +def spectrum(x, n): + return fft([complex(v) for v in x] + [0j] * (n - len(x))) + + +def prefix_sq(x): + p = [0.0] + for v in x: + p.append(p[-1] + v * v) + return p + + +def best_ncc(xa, fa, pa, xb, fb, pb, n): + """max over lags of |Σ a[i]·b[i+lag]| / sqrt(Σ a² · Σ b²), both sums over the + overlap, among lags whose overlap is at least half the shorter signal.""" + la, lb = len(xa), len(xb) + prod = [fa[k].conjugate() * fb[k] for k in range(n)] + c = fft(prod, inverse=True) # c[lag mod n] = Σ a[i] b[i+lag] + need = max(1, min(la, lb) // 2) + best, at = 0.0, 0 + for lag in range(-(la - 1), lb): + i0, i1 = max(0, -lag), min(la, lb - lag) # a's overlapping range + if i1 - i0 < need: + continue + ea = pa[i1] - pa[i0] + eb = pb[i1 + lag] - pb[i0 + lag] + if ea <= 0 or eb <= 0: + continue + r = abs(c[lag % n].real) / math.sqrt(ea * eb) + if r > best: + best, at = r, lag + return best, at + + +# ---- the reference set -------------------------------------------------------------- +def converter(): + if shutil.which('afconvert'): + return 'afconvert' + if shutil.which('ffmpeg'): + return 'ffmpeg' + return None + + +def read_wav(path): + """(samples per channel list, rate) for PCM 8/16/24/32-bit or float32 WAV; raises on + anything else.""" + with open(path, 'rb') as f: + b = f.read() + if b[:4] != b'RIFF' or b[8:12] != b'WAVE': + raise ValueError('not RIFF/WAVE') + pos, fmt, data = 12, None, None + while pos + 8 <= len(b): + cid, size = b[pos:pos + 4], struct.unpack('= 16: + fmt = struct.unpack(' 64 or rate < 1: + raise ValueError(f'{ch} channels at {rate} Hz') + if tag == 1 and bits == 16: + x = i16le(data) + elif tag == 1 and bits == 8: + x = [(v - 128) * 256 for v in data] + elif tag == 1 and bits == 24: + x = [int.from_bytes(data[i:i + 3], 'little', signed=True) >> 8 for i in range(0, len(data) - 2, 3)] + elif tag == 1 and bits == 32: + x = [v >> 16 for v in struct.unpack(f'<{len(data) // 4}i', data[:len(data) // 4 * 4])] + elif tag == 3 and bits == 32: + x = [v * 32767 for v in struct.unpack(f'<{len(data) // 4}f', data[:len(data) // 4 * 4])] + else: + raise ValueError(f'format tag {tag}, {bits} bits') + x = x[:len(x) // ch * ch] + return channels(x, ch), rate + + +def convert(conv, src, tmp): + """Mono s16 WAV at the analysis rate, via the host's converter.""" + out = os.path.join(tmp, hashlib.sha256(src.encode()).hexdigest()[:16] + '.wav') + if conv == 'afconvert': + cmd = ['afconvert', '-f', 'WAVE', '-d', f'LEI16@{ANALYSIS_RATE}', '-c', '1', src, out] + else: + cmd = ['ffmpeg', '-v', 'error', '-y', '-i', src, '-ac', '1', '-ar', str(ANALYSIS_RATE), + '-c:a', 'pcm_s16le', out] + subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) + chans, rate = read_wav(out) + return resample(chans[0], rate) + + +def references(dirs, conv, tmp): + refs, notes = [], [] + for d in dirs: + for root, _, files in os.walk(d): + for f in sorted(files): + p = os.path.join(root, f) + ext = os.path.splitext(f)[1].lower() + if ext not in AUDIO_EXT: + continue + try: + if ext == '.s16': + with open(p, 'rb') as fh: + x = resample(i16le(fh.read()), 16000) + elif conv: + x = convert(conv, p, tmp) + else: + chans, rate = read_wav(p) + x = resample(chans[0], rate) + except Exception as e: # noqa: BLE001 — an unreadable reference is reported + notes.append(f'reference unreadable, skipped: {p} ({e})') + continue + refs.append((p, x)) + return refs, notes + + +# ---- the committed audio vectors ---------------------------------------------------- +def envelope_payload(b): + """The payload of a WAI1 envelope: magic, u32 manifest length, manifest, then the + payload (a u32 length, or to the end).""" + if b[:4] != b'WAI1': + return None + mlen = struct.unpack('= 4: + plen = struct.unpack('= 12: + return struct.unpack('= 0 and len(p) >= i + 8 + 13: + si = p[i + 8:i + 8 + 34] # STREAMINFO body + return (si[10] << 12) | (si[11] << 4) | (si[12] >> 4) + return None + + +def staged_bases(wai): + """(case dir, base index) → (pcm, channels, rate, stage0 sha256) for audio bases.""" + out = {} + for cj in sorted(glob.glob(os.path.join(wai, 'staged-conformance/cases/*/case.json'))): + case = json.load(open(cj)) + d = os.path.dirname(cj) + for bi, base in enumerate(case.get('bases', [])): + if not str(base.get('decoded_via', '')).startswith('wai.audio.'): + continue + units = base.get('units') or [{}] + shape = units[0].get('shape') or [0, 1, 1] + ch = int(shape[2]) if len(shape) > 2 else 1 + with open(os.path.join(d, base['stage0']), 'rb') as f: + s0 = f.read() + with open(os.path.join(d, base['file']), 'rb') as f: + rate = payload_rate(envelope_payload(f.read())) + out[(os.path.relpath(d, wai), bi)] = (i16le(s0), ch, rate, hashlib.sha256(s0).hexdigest()) + return out + + +def vectors(wai, extra): + """[(name, [channel samples], rate)], notes, failures.""" + vs, notes, fails = [], [], [] + bases = staged_bases(wai) + for (case, bi), (pcm, ch, rate, _) in bases.items(): + name = f'{case}/stage0 (base {bi})' + if not rate: + fails.append(f'{name}: no sample rate in its payload') + continue + vs.append((name, channels(pcm, ch), rate)) + + for tj in sorted(glob.glob(os.path.join(wai, 'staged-measure-conformance/fixtures/*/title.json'))): + t = json.load(open(tj)) + for b in t.get('bases', []): + key = (b.get('case'), b.get('base', 0)) + if key not in bases: + continue + pcm, ch, rate, _ = bases[key] + src = os.path.join(os.path.dirname(tj), t['source']['file']) + with open(src, 'rb') as f: + x = i16le(f.read()) + if not rate: + continue + r = round(rate * len(x) / len(pcm)) + vs.append((os.path.relpath(src, wai), channels(x, ch), r)) + + for sb in sorted(glob.glob(os.path.join(wai, 'audio-conformance/vectors/*.sources.bin'))): + with open(sb, 'rb') as f: + b = f.read() + scene = sb[:-len('.sources.bin')] + '.wscn' + m = re.search(rb'"sample_rate":(\d+)', open(scene, 'rb').read()) if os.path.exists(scene) else None + rate = int(m.group(1)) if m else 48000 + n, pos = struct.unpack(' 2 else 1 + with open(p, 'rb') as f: + vs.append((p, channels(i16le(f.read()), ch), rate)) + + # A learned codec vector is covered by its decode, which must be a case's stage 0. + stage0 = {sha for (_, _, _, sha) in bases.values()} + for mb in sorted(glob.glob(os.path.join(wai, 'wai-rs/tests/vectors/*/audio_model.bin'))): + side = os.path.join(os.path.dirname(mb), 'sha256.json') + if not os.path.exists(side): + fails.append(f'{os.path.relpath(mb, wai)}: no sha256.json sidecar to tie its decode to a scanned PCM') + continue + sha = json.load(open(side)).get('audio', {}).get('sha256') + if sha not in stage0: + fails.append(f'{os.path.relpath(os.path.dirname(mb), wai)}: its decoded PCM (sha256 {sha}) is no ' + 'staged-delivery case\'s stage 0, so it is not scanned; add a case that decodes it') + else: + notes.append(f'{os.path.relpath(os.path.dirname(mb), wai)}: decode covered as a staged case\'s stage 0') + return vs, notes, fails + + +def main(): + ap = argparse.ArgumentParser(description=__doc__.split('\n')[0]) + ap.add_argument('--wai', default='.', help='the wai/ directory (default: .)') + ap.add_argument('--threshold', type=float, default=0.5) + ap.add_argument('--ref', action='append', default=[], help='a reference directory (repeatable)') + ap.add_argument('--pcm', action='append', default=[], help='PATH:RATE[:CH], raw s16le (repeatable)') + a = ap.parse_args() + wai = os.path.abspath(a.wai) + + dirs = list(a.ref) + env = os.environ.get('WAI_AUDIO_REFERENCE_DIRS', '') + dirs += [d for d in env.split(os.pathsep) if d] + if os.path.isdir(SYSTEM_SOUNDS): + dirs.append(SYSTEM_SOUNDS) + dirs = [d for d in dirs if os.path.isdir(d)] + if not dirs: + print(f'audio provenance: SKIPPED — no reference set on this host ({SYSTEM_SOUNDS} is absent and ' + 'no --ref or WAI_AUDIO_REFERENCE_DIRS directory was given)') + return 0 + conv = converter() + with tempfile.TemporaryDirectory() as tmp: + refs, rnotes = references(dirs, conv, tmp) + for n in rnotes: + print(f' note: {n}') + if not refs: + print(f'audio provenance: SKIPPED — the reference set ({", ".join(dirs)}) has no file this host can ' + f'read (converter: {conv or "none; install afconvert or ffmpeg"})') + return 0 + + vs, notes, fails = vectors(wai, a.pcm) + print(f'audio provenance: {len(vs)} committed audio signals against {len(refs)} references ' + f'({", ".join(dirs)}), at {ANALYSIS_RATE} Hz, threshold {a.threshold}') + for n in notes: + print(f' note: {n}') + + rs = [(path, x, prefix_sq(x)) for path, x in refs] + ref_spec = {} # (reference, n) → its spectrum + over = [] + for name, chans, rate in vs: + for ci, c in enumerate(chans): + x = resample(c, rate) + label = name + (f' ch{ci}' if len(chans) > 1 else '') + if len(x) < MIN_SAMPLES or not any(x): + print(f' {"-":>6} {label} ({len(x)} samples at {ANALYSIS_RATE} Hz' + f'{", silent" if not any(x) else ""}: too short or silent to judge)') + continue + px = prefix_sq(x) + best = (0.0, None, 0) + cache = {} + for path, y, py in rs: + n = 1 << (len(x) + len(y) - 1).bit_length() + if n not in cache: + cache[n] = spectrum(x, n) + if (path, n) not in ref_spec: + ref_spec[(path, n)] = spectrum(y, n) + r, lag = best_ncc(x, cache[n], px, y, ref_spec[(path, n)], py, n) + if r > best[0]: + best = (r, path, lag) + flag = 'FAIL' if best[0] > a.threshold else 'ok' + print(f' {best[0]:6.3f} {label} (rate {rate}; nearest {os.path.basename(best[1] or "-")} ' + f'at lag {best[2]}) {flag}') + if best[0] > a.threshold: + over.append(f'{label}: {best[0]:.3f} with {best[1]}') + for f in fails: + print(f' FAIL: {f}') + for o in over: + print(f' FAIL: {o}') + if over or fails: + print(f'audio provenance: FAILED — {len(over)} signal(s) above {a.threshold}, {len(fails)} uncovered') + return 1 + print('audio provenance: ok — no committed audio vector correlates with a reference above the threshold') + return 0 + + +if __name__ == '__main__': + sys.exit(main()) -- 2.54.0 (Apple Git-157) From 91e76cc275f479e39967d072fdf89732fcb33545 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 09:43:19 -0400 Subject: [PATCH 3/8] wai_int_payload_vectors: the WIA1 table fixtures read the table's place from the header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wia1_cdf_malformed and wia1_order_table_before_length change the last entry of the payload's first CDF table, and the second cuts the payload inside the second table. Both used fixed offsets for the old vector's shape (16 channels, tables of 14 entries). They now read n_ch (offset 12) and cdf_len (offset 28) from the payload itself: the first table starts at 32 + 8·n_ch, its last entry is at (cdf_len − 1)·4 from there. On the committed vector the offsets are the same, so the corpus is unchanged: this binary verifies the corpus of the previous commit byte for byte. On a payload whose tables have another length the fixtures keep their meaning, which the regenerated audio vector needs (its tables have 15 entries). Co-Authored-By: Claude Opus 5.5 --- wai/wai-rs/src/bin/wai_int_payload_vectors.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wai/wai-rs/src/bin/wai_int_payload_vectors.rs b/wai/wai-rs/src/bin/wai_int_payload_vectors.rs index 438162bfc..df9d4aa46 100644 --- a/wai/wai-rs/src/bin/wai_int_payload_vectors.rs +++ b/wai/wai-rs/src/bin/wai_int_payload_vectors.rs @@ -285,17 +285,21 @@ fn fixtures(t: &mut Tree) -> Vec { fx(t, "wih1_order_exhausted_before_value", HYP, Some(short_z), None, "stream_exhausted", "decode"); fx(t, "wih1_unread_word", HYP, edit(&ih, &|b| { let l = get_u32(b, ih_ly); set_u32(b, ih_ly, l + 4); b.extend_from_slice(&[0; 4]) }), None, "stream_noncanonical", "decode"); - // ── WIA1 ── (16 channels × 512, tables of 14) + // ── WIA1 ── (the header's n_ch at 12 and cdf_len at 28; the first table follows the + // n_ch medians, at 32 + 8·n_ch, and its last entry is the one that must be 65536) let au_n = at(&au, wire::parse_wia1(&au).expect("audio parses").rans) - 4; // offset of L + let au_t0 = 32 + 8 * get_u32(&au, 12) as usize; // the first table + let au_cl = u16::from_le_bytes([au[28], au[29]]) as usize; // cdf_len + let au_last = au_t0 + (au_cl - 1) * 4; // the first table's last entry fx(t, "wia1_json_form", AUD, None, Some(format!("{V}/int_audio/audio_bitstream.json")), "bad_magic", "parse"); fx(t, "wia1_under_splat", SPL, Some(au.clone()), None, "format_capability_mismatch", "parse"); fx(t, "wia1_afrac_zero", AUD, edit(&au, &|b| b[5] = 0), None, "field_range", "parse"); fx(t, "wia1_sr_zero", AUD, edit(&au, &|b| set_u32(b, 8, 0)), None, "field_range", "parse"); fx(t, "wia1_median_range", AUD, edit(&au, &|b| b[32..40].copy_from_slice(&((1i64 << 47) + 1).to_le_bytes())), None, "field_range", "parse"); - fx(t, "wia1_cdf_malformed", AUD, edit(&au, &|b| set_u32(b, 160 + 13 * 4, 65_535)), None, "cdf_malformed", "parse"); + fx(t, "wia1_cdf_malformed", AUD, edit(&au, &|b| set_u32(b, au_last, 65_535)), None, "cdf_malformed", "parse"); // §2's order: the tables are read one at a time, each present and then checked, so // a malformed first table is cdf_malformed though the payload ends inside the second. - fx(t, "wia1_order_table_before_length", AUD, edit(&au, &|b| { set_u32(b, 160 + 13 * 4, 65_535); b.truncate(160 + 14 * 4 + 10) }), None, "cdf_malformed", "parse"); + fx(t, "wia1_order_table_before_length", AUD, edit(&au, &|b| { set_u32(b, au_last, 65_535); b.truncate(au_t0 + au_cl * 4 + 10) }), None, "cdf_malformed", "parse"); fx(t, "wia1_too_large", AUD, edit(&au, &|b| { set_u32(b, 12, 65_536); set_u32(b, 16, 2_048) }), None, "too_large", "parse"); fx(t, "wia1_trailing", AUD, edit(&au, &|b| b.push(0)), None, "trailing", "parse"); fx(t, "wia1_afrac_model", AUD, edit(&au, &|b| b[5] = 11), None, "model_mismatch", "decode"); -- 2.54.0 (Apple Git-157) From 9d31aad60963de456e37b77bd9d038c4c03002f7 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 09:43:20 -0400 Subject: [PATCH 4/8] wai: int_codec model and vectors regenerated from the generated signal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wai.audio.int_codec vector (wai-rs/tests/vectors/int_audio/) is now an export of tools/wai_int_audio_export.py on its own generated signal: python tools/wai_int_audio_export.py --seed 1 --channels 16 \ --samples 8192 --steps 2500 Two runs with seed 1 gave byte-identical audio_model.bin, audio_bitstream.json, audio.json and decoded PCM. Every file that depends on the vector was regenerated through its own generator, from it: - int_audio/sha256.json — WAI_WRITE_SHA256_SIDECARS=1 cargo test --test int_kernels_vectors int_audio_clip (the Rust decode equals the Python integer reference's PCM first); - int_audio/audio_bitstream.wia1, int-payload-conformance/vectors.json and the thirteen wia1_* refusal fixtures — wai_int_payload_vectors gen; - staged-conformance/cases/audio_int_codec_1l/ (base.wai, L1.wai, stage0.bin, case.json) and index.json — wai_staged_vectors gen; - staged-measure-conformance/fixtures/audio/ (source, layers, references, expect.json, title.json), goldens.json and sim/results.json — wai_stage_measure gen-fixtures, then generate-goldens. quality.json is regenerated unchanged (it holds no audio). The format, the payload layout and the capability are unchanged; the model's shape is the same (16 channels, 512 latent samples, 8192 output samples at 16 kHz). Verified: the six affected Rust corpus verifiers (int-payload, staged, staged-measure, http, claims, pin), the Python verifiers int_payload_verify.py, staged_verify.py, measure_verify.py, sim_verify.py, http_verify.py and pin_verify.py, and the integer-kernel, int_audio, int_payload and stage_measure tests. The provenance check now passes: the stage 0 and the measurement source correlate at most 0.22 with any reference recording. Co-Authored-By: Claude Opus 5.5 --- .../refusals/wia1_afrac_model.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_afrac_zero.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_cdf_malformed.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_exhausted.bin | Bin 1068 -> 1132 bytes .../refusals/wia1_latent_too_long.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_median_range.bin | Bin 1444 -> 2648 bytes .../wia1_order_table_before_length.bin | Bin 226 -> 230 bytes .../refusals/wia1_sr_zero.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_t_out.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_too_large.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_trailing.bin | Bin 1445 -> 2649 bytes .../refusals/wia1_under_splat.bin | Bin 1444 -> 2648 bytes .../refusals/wia1_unread_word.bin | Bin 1448 -> 2652 bytes wai/int-payload-conformance/vectors.json | 2 +- .../cases/audio_int_codec_1l/L1.wai | Bin 19375 -> 28759 bytes .../cases/audio_int_codec_1l/base.wai | Bin 1794 -> 2998 bytes .../cases/audio_int_codec_1l/case.json | 16 +-- .../cases/audio_int_codec_1l/stage0.bin | Bin 16384 -> 16384 bytes wai/staged-conformance/index.json | 2 +- .../fixtures/audio/L01.wai | Bin 10351 -> 10351 bytes .../fixtures/audio/L02.wai | Bin 6859 -> 6859 bytes .../fixtures/audio/L03.wai | Bin 6831 -> 6831 bytes .../fixtures/audio/R0_00.wai | Bin 30351 -> 30351 bytes .../fixtures/audio/R1_00.wai | Bin 17343 -> 17343 bytes .../fixtures/audio/expect.json | 12 +- .../fixtures/audio/source.bin | Bin 32768 -> 32768 bytes .../fixtures/audio/title.json | 2 +- wai/staged-measure-conformance/goldens.json | 128 +++++++++--------- .../sim/results.json | 118 ++++++++-------- wai/wai-rs/tests/vectors/int_audio/audio.json | 2 +- .../vectors/int_audio/audio_bitstream.json | 2 +- .../vectors/int_audio/audio_bitstream.wia1 | Bin 1444 -> 2648 bytes .../tests/vectors/int_audio/audio_model.bin | Bin 12215 -> 12215 bytes .../tests/vectors/int_audio/sha256.json | 2 +- 34 files changed, 143 insertions(+), 143 deletions(-) diff --git a/wai/int-payload-conformance/refusals/wia1_afrac_model.bin b/wai/int-payload-conformance/refusals/wia1_afrac_model.bin index 3c5391d10ae84d2fd4e0d6b6d4ea144f7b9a434c..c040ce6e5adea2c6cbfe61f0f1f7cc7154acbbbe 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=fQDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv zpY%>=42!6rt{Z@vsOlQqS5RJ(y!3lgw1vWlL`n8J*Y34%7F5kkY7mS_uRHnXUhIX~ z&YP0iTB~l=#^3p`WSXd;Q#j$B>e2^SHZs}seJh{C6YZMtj6tja@YzMrtb7i=y8h03 z?WgaV=7NU|T!qi(9q@3T?`%hIU zp1ml!_Rx{_J|(7^rzSt%rF-x|frKi9w5R&pchd9T%g_7p``3l)&$T}txiwRFh-XYL zf2zIhnla;2k7CZ&*wu$D!+Exru?XwFKX{DqT-c9B_FpHG_9dRa=ezQaLs^%i<}bcO z$7Abm+>-ftZ8!VR9T#0U&a6EUy;5yqdU4>)i~SZZRLZY!y2DkG$ihj@qlv>`VXnatVAtYj@hrsjguK E03S1mmH+?% diff --git a/wai/int-payload-conformance/refusals/wia1_afrac_zero.bin b/wai/int-payload-conformance/refusals/wia1_afrac_zero.bin index d06bc299057cb7a35563124f08770574e20cf12c..cace903c19c186cd09b6341075000a4778a65538 100644 GIT binary patch delta 1887 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 diff --git a/wai/int-payload-conformance/refusals/wia1_exhausted.bin b/wai/int-payload-conformance/refusals/wia1_exhausted.bin index 758a5fa3234c811651733b7d3da467247989c98e..2275c4ce6de8a8372eab8cf9bf0251dbd992d28c 100644 GIT binary patch literal 1132 zcmchWyGjE=7=_QS>kSmOunlQ!6boNK5d;ym3+fZ3Od}S?#H^DvK7xXsPoRx2U}vL( zT}WYT5fF@t?vCFe=?u&&$Fh`bsb*#jDb+h!EtZp0#$yore`|1c@IL zi1yEH1K@0pfC!9&G0?Tnr}PQFKmt<0D}-bH&aLO9@FH*IeEmsi~-el-dgxW7xi&w1ks-NaAV z@ZVq>jUCoo^xFR1tbJ8uI8yqkx+GPYopM1sDoP!4b$BTq+|aX+_-OKn*TFq$=!tld zclNn|MUBW+^6vNFzGt%xpFCGS{AVG+yWN0?=kf*heP*AbzHSB^lXy1pT7z{diAuTF H-5TpR&@k>G literal 1068 zcmWIdbTnk-VPI&mV_*QDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv YpY%>=42!6rt~r2drRo~nS5RI802E=&w*UYD diff --git a/wai/int-payload-conformance/refusals/wia1_latent_too_long.bin b/wai/int-payload-conformance/refusals/wia1_latent_too_long.bin index a136487880092c86e681cb3654aa053096a3b387..f6699baf7f6bf73f276ca3062f79973815c56889 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=fQDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv zpY%>=42!6rt{Z@vsOlQqS5RJ(y!3lgw1vWlL`n8J*Y34%7F5kkY7mS_uRHnXUhIX~ z&YP0iTB~l=#^3p`WSXd;Q#j$B>e2^SHZs}seJh{C6YZMtj6tja@YzMrtb7i=y8h03 z?WgaV=7NU|T!qi(9q@3T?`%hIU zp1ml!_Rx{_J|(7^rzSt%rF-x|frKi9w5R&pchd9T%g_7p``3l)&$T}txiwRFh-XYL zf2zIhnla;2k7CZ&*wu$D!+Exru?XwFKX{DqT-c9B_FpHG_9dRa=ezQaLs^%i<}bcO z$7Abm+>-ftZ8!VR9T#0U&a6EUy;5yqdU4>)i~SZZRLZY!y2DkG$ihj@qlv>`VXnatVAtYj@hrsjguK E05AB6nE(I) diff --git a/wai/int-payload-conformance/refusals/wia1_median_range.bin b/wai/int-payload-conformance/refusals/wia1_median_range.bin index d932c5d597789c7aff0130e0f7be413714373c77..cd5c4159b14aa26cbd7dd1fe3ff8817175730bbc 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve=*W1Sd#vK!eZw@#MG-bETETM45~8YQ7_;mC}UvTH1jEhLG#t|fc2 zjAf)VrmR=X#3)W0A~G>DbAF$5?)}`)egFA>pXYs_=Y8HvscD6K>LN(W-f-nr;hzO| zgTLxOm{P6|-x31Ar*s{ZNYVh{SN@;C;(zRIafto#|E#gnE(8FHiU1@W2Y~z(0OCgg zZf#Nc7#SE002m3{!h{$K-B>9}4giu106$Y9$tVEAbpQkciU2LYOCLhM0EiYs6XVeM z4uy|aB16_9G63vgp|>5HUHz+b;J=wPF+?OpLuqdr0}yWuK%6%Kv7rF`fcF050RY#U z0N6DK$=Q(c5{0FvM24;)89|EEP^S{g3kBKXL3t&~rVtB7i{GSl8!3uFu0m&sf!yMX zpev@JKZU+u^0ovdBtu|^(yd1P4hJAYV`k6}nn3ODn8@5=&2wx5Lg0cvU;PSwYsBol zY!zEpnZ1N@eP{k{P_@Bh;db6l=ZO=G_MPe$<9kKS5G`WWYHPgU>jSM+1~*5{N>VrZ zV_Mfjn}ut;wi|umG8s(d@>&sMc55JFXB(Ox$o`;SR`2S?oWe zCHL%i>75|WoZ0i7hsAN+?;nGNPU~bOCdM3Bi zyn_&BKaBhW*7{5_RqXphls_e(?@BK9!8{B*^2J_^4^wa4dZq7m|SL@`f??Yb5gc?7s90_6~14r zn>2SZK~=SP-x1b7Gni{P_e6`kYY@uBi7wIHkEayk7_zJ2FG$4Enq+Wv|l$BhYD zvFBHLVU-zp=Fnzsxzq<=N&d^eh-0y6!PMGtO<5x5klH0SeBv5bBhS3O&UHDQA8@f; z?SbxfVtPcJXZ^miGUW1RdF6x~?3}YhYduZ?D^X$gT zE^m&jS5`%6w$W0mtOG6IWI4YoD=^BNDA?mVO*P2l zrL_gCqmXj1)5sKQ?yG97pfSLOS${OM17pomn1E zg=Onqhp!4PGt5$R`<5l$Re8u+KbUd!vp}2tA?uUxZq6@!RW|i}To&y+^cD+W{iV&Q zsiY5~J*+hcBN9OZxoI7s?(FiwibOvh;3xu5XZ+S*n895#Ri`dm52oV z>xQE#THH)O=^p)?6K$%EMeG-w1ww8$VH(E0oamoHYpC}+eTw66r#hvVMclZ+rRxrGS_11@x$H+?Zv_>kLzqMPJeQnMQpORQc`-Ldgv#EJT3 zi?-ZNctRa6k_q`RGE`x(QWUOSRg&u8qWL;73mvw!P;vtGxN~wmasCo4o404`52_Py AUjP6A literal 1444 zcmWIdbTnk-VPI&mV_*P8rxS;j*`6eds4K8!iPjj_Bq$?wQm+w%}Z(!j7YCL z`Q~2ih1kxUlG$3TZq>%$`LAS}sGw6g;hpNz2Uj*S+4FrXpTiUFn(&N4tN-xXMbE5! z4!yem&U)>q@0sR;hYVbW*?X@jGwIf8PjK$~{_?)MUfcS)52|O`tF}re{94}mPwvpJ zo&JA!&nZ)unP#AEsqLB-|1Q?-XiH3Bg;&1BpVK9ee@j$a+m;t}?2EVKOMO> zQ+J4GOfG+_z3rMY<5G`e&eqt~hb+T+wwAF7>%KpDjPG37k4E-iCzAFhp1$Y1@{L1T zm!jq`zC*`j>u%hV`FL$N`_CO0T{q6GJrKQ8ZDD$G;L)i?w=5mw%jHg4O{|w!e5_@9 zkR@Q#)4eICU*`F_ZAiLta66yaN)hYb44ZB-AGvH5I{S~j6Ia3?u(U#T@Yu|G|JkfB^!a{D})>SbzR!VE8q0uPOi$(-&6& delta 38 lcmaFH_=s_W3?tt}#f*stJp3R2g8>5+Ok5ztSTpgUDgY|W4yOPB diff --git a/wai/int-payload-conformance/refusals/wia1_sr_zero.bin b/wai/int-payload-conformance/refusals/wia1_sr_zero.bin index 84a51220d67fc34d390a8bf60dced7f5a79abe90..ccf2eb4cd0a0061bf64767d9e5cf524cac26c1c4 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=f$CqcYtB{j)9@!7xwUMNJY&%6KYVu4Gb^7%udctdUi;~L zrn%rD16N`8-Yd#Xx^>zUoV&iiysxg;wtnt|>RI-xt&$19mUsS>JG5)3|KHtn%9LfM z8E9K-yJp3|i#0pi5))YAl`rw8if1oM zu03>Qy-$g0=Bde#cj+EHP#~eoAnmFC_MP;+_ww^T{Qh;J`g841M{dp39pV|2%b#j* zyJpO|)T5ZQHFotO%W$5pWh}zF?++g1I~Vq&k^R?+qjX>*W<6YndKo3E1>>Z;I)c zd46sil5QN_&L_4~#CkWwrd!NME?b4p{v+>rsiXF)GyBp%zFY#|&)S_fbE<1t0RZ~_ BhuHuC diff --git a/wai/int-payload-conformance/refusals/wia1_t_out.bin b/wai/int-payload-conformance/refusals/wia1_t_out.bin index 4e839490218f76be8b5c4b0ec173b79b9cfc571b..9b1a27c6837d97a407d606b7bbd164689bc3cab5 100644 GIT binary patch delta 1887 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 Ir@Dp}04idLm;e9( diff --git a/wai/int-payload-conformance/refusals/wia1_too_large.bin b/wai/int-payload-conformance/refusals/wia1_too_large.bin index 7556093a48da364ff33c30603d981ced711355d9..d62ec87528708fba905ffc2d0a8d5dc6436f220c 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=f;M1%d>|ougAYK9fdJWBpsN^|fS4JGS%8=o zh}nR+2B_*c5dQ(5fcs_z$2-AL94^ghEsU;x$%0>eVSFAK)^~tm_YRmQeqj&KMoyrdBm+aeHqaak28PyyKz(-^7@A%)Ff{%I%8kYY zIDOJPoiQw;e!6Y|W~HiYY+pe+O7hb0NzoPx9}*?m=UltjzFAN;FR4K=BE9b9n|rYr zVmoh2W^1jwRU3cjzmjR9f==OtcdAPtT-nHE&-bl-4o|de!ZQY~{=;V%J+tyT^y>OM z>$RW0XPOHhGH?}U@4ceTq+6#w!MW@E%lqnjZR_VgsGeo7+A5jwYkB8CxkI~l`v2WM zr%YL9nt`^Zwrf`WyI8ZMEir)=UilJ#PM19XEm3K0TVBwyFXCeO&Xku|@{@9YSMNVn zp?LP9_763mpW>%IidN diff --git a/wai/int-payload-conformance/refusals/wia1_trailing.bin b/wai/int-payload-conformance/refusals/wia1_trailing.bin index 343085bba85843f5833d371c27a0696dfac6fd69..f234c25349dbe1f00f9ab50d76a0ee527b95df7b 100644 GIT binary patch delta 1888 zcmY*Uc|6qn8vcs0GcopLU$RYZoh;d=ibl#-1ndF_j%s;dEV!(k$59_S5*K>(u`1C=Kon> zFZiqegGrUDh)q5KJW}^zu@p4`e&ziM%>T#U7J=EH|IZpJ>=6YZSss9-lK>E&0swsk z;MOLIhn5l&0ze24Z=u5siE5;fA_D;48G!8!STY6xe+_`$UDB?e>>gbh`2ZkT3{Q;1 z<2xjto&o{37LWp92Lr$D@a*zmokRc4q>hG=Fb$`@WduN?EdU8#0K|s^@DtwqkNW^z zZw6ow6PB}J<8LH}iUI+?0&fT_&cdB)I4>MzhYRNwCz!x294&E!)MF?w0K4*?UN9t=@uv72AzwZ=uLN)jskX*r?))NTCh?go{gO(5ao@OH6qLN~%)lO!kuX1K zqapMBcgdYV^}N}O><6U@oF5+p`N!4>NOYVTDoM^kKw`Bc6u3z7R;wZ#amJHdqeXN>>>ze~~zPJ}>ux?7u_| zg}nkrD}EaK`mgrK#neN)VVQPTMgcJ>g0Ww}o_5rsnH&Q1Nzbvo!c-l;hrt@{*y677 zJZF2Om7%$fR**r4y|MH5Zcp*aZVw2?elBGKfAT>Cf9mDi;4NL9>T zh)Y&!#I9=-iqF3-NvXa()hD`V|KMn*U4r!mXQ{20_0yqGjiJ|}zs*-M+#iWqp(kea zdRrs!P`T45Y=2MV&JEt*b@yQ*M>Qpn6O!7z?uKK(eYz?kmC(`~C}Y5Ro7^d;sUYEU zuFK)scINBV0`_U?x;>)KEg6V| z!aex8OG(PgeFtn9|0L2^Z}Rq2i#G;etk_ew>``{{*jz1y^U^|t12HWp!ln=V3Z2z{ zl3k&HG%;u(!>*o9aLHzQvruvF&L+LG()Aj_gIWVh!;KLB@Z8$@&%10R%0}YgS^%d$ zQjCW!OG4RV4basf+bX&p9TfsRt4i_rB)Btjtu2fQw6xw$lc8oGGZy2ZwbX=d1 z7Vf&n4X-BR=))Tgl@cF(#Cb3KBTvNZ?M|(Z)K?^b3v zRqkuwfU+VJJRTpY$Yj+z8zb_&uHRc#fBtImB)(t%UWY*0f)moIyVd!kI{GYit`u92 zj%dC)%Gm26Vv?1`WzeENTWZn$iASXFHJ*@(R>w$pdk)oTT+%ruI)aXp?WMd=EU;r% zT-g{`t*(t!Z=!Vw0qAGNy?J1d^PV&0yre5TPk;bQ0 znJrb3ArD=nVu;ybp#8~DHT$Z012T|UMedu#rHRkmP%P*!K?Ez-HPSwW{RM~fzwv0@ z>}Q{$)xc+YL7dyp{7ai* zb6LNr=7`3a@Tzuthg#E{+tmu?KG77$t4v*xd+av$JjY literal 1445 zcmWIdbTnk-VPI&mV_*QDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv zpY%>=42!6rt{Z@vsOlQqS5RJ(y!3lgw1vWlL`n8J*Y34%7F5kkY7mS_uRHnXUhIX~ z&YP0iTB~l=#^3p`WSXd;Q#j$B>e2^SHZs}seJh{C6YZMtj6tja@YzMrtb7i=y8h03 z?WgaV=7NU|T!qi(9q@3T?`%hIU zp1ml!_Rx{_J|(7^rzSt%rF-x|frKi9w5R&pchd9T%g_7p``3l)&$T}txiwRFh-XYL zf2zIhnla;2k7CZ&*wu$D!+Exru?XwFKX{DqT-c9B_FpHG_9dRa=ezQaLs^%i<}bcO z$7Abm+>-ftZ8!VR9T#0U&a6EUy;5yqdU4>)i~SZZRLZY!y2DkG$ihj@qlv>`VXnatVAtYj@hrsjguK F0|2dQh?f8W diff --git a/wai/int-payload-conformance/refusals/wia1_under_splat.bin b/wai/int-payload-conformance/refusals/wia1_under_splat.bin index 05d5af267979cb7b144e22f71b9c1a7798a47f22..f50153003f1969a7fe0b768b2880064878268a36 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=fQDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv zpY%>=42!6rt{Z@vsOlQqS5RJ(y!3lgw1vWlL`n8J*Y34%7F5kkY7mS_uRHnXUhIX~ z&YP0iTB~l=#^3p`WSXd;Q#j$B>e2^SHZs}seJh{C6YZMtj6tja@YzMrtb7i=y8h03 z?WgaV=7NU|T!qi(9q@3T?`%hIU zp1ml!_Rx{_J|(7^rzSt%rF-x|frKi9w5R&pchd9T%g_7p``3l)&$T}txiwRFh-XYL zf2zIhnla;2k7CZ&*wu$D!+Exru?XwFKX{DqT-c9B_FpHG_9dRa=ezQaLs^%i<}bcO z$7Abm+>-ftZ8!VR9T#0U&a6EUy;5yqdU4>)i~SZZRLZY!y2DkG$ihj@qlv>`VXnatVAtYj@hrsjguK E03_0gmjD0& diff --git a/wai/int-payload-conformance/refusals/wia1_unread_word.bin b/wai/int-payload-conformance/refusals/wia1_unread_word.bin index 36cfb76393769060df30b626dd290070777987b1..4437969a46172337f63ee14c6219173f88840fee 100644 GIT binary patch delta 1891 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 Hs4N2jO>Bsp diff --git a/wai/int-payload-conformance/vectors.json b/wai/int-payload-conformance/vectors.json index a06965a83..118bfc9fc 100644 --- a/wai/int-payload-conformance/vectors.json +++ b/wai/int-payload-conformance/vectors.json @@ -59,7 +59,7 @@ "name": "audio", "capability": "wai.audio.int_codec", "payload": "wai-rs/tests/vectors/int_audio/audio_bitstream.wia1", - "payload_sha256": "b45e727525f06ac1ac5a5a7121886c85a7c33613451acbb482c20e37f3c79055", + "payload_sha256": "e4343c9468f6c7b652f911e24e273223ef14feaa7014df014f2d99e9f28e1b3b", "converted_from": { "json": "wai-rs/tests/vectors/int_audio/audio_bitstream.json", "sample_rate": "wai-rs/tests/vectors/int_audio/audio.json" diff --git a/wai/staged-conformance/cases/audio_int_codec_1l/L1.wai b/wai/staged-conformance/cases/audio_int_codec_1l/L1.wai index 7f0efde8749205d5a67e710e93679a7862b64e38..0588b83c57d5d90317d149c9fd3570a7ed01d1ac 100644 GIT binary patch literal 28759 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 katlguf+w1eThI9u8O0eRL7fdBvi literal 19375 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 delta 662 zcmdlc-o!WIpo67FlCgzRvZaxsp^=%HL85tzv891!nt^#rqJ=R~%rq@ICCS`0(bU8u zG0`A7&CDb*#n3#_z|z1lDaA51Z89TcB-0Ys$uW#_jC_+D8Pg_DVC3Wb@E;5qAYk%F zCP`K{AiHL=Jd-gK8^h!aOjeUGF=+nYjxsPX zpJ!lTy2HT0_>O_0;n!pXCNafEP9Rf~fuUX-sLg_bq4gk8*J%jX!~Mll7UD zvD*cQ-(1o&QRvi3&P}6W*yVeQ;$XlRe+J@;N-wt_jZ=wE7R9UG&V# z=g_O`@2uB;`krYnc*ww2n7#LkGLvqd_5|my?=SDG>$R<)`=EN3y=rT{WWulIo&V$x z?b_-8clVq!WtnLP+Lqd`S@G{;&5pLj1Xg(EOZ+)q^7ywzrL}E&LC3y`i{U#{US7#h z%K2Tr|5SzI*^82E4;@+WQ(~HVYVzYI0J zTQhZsc*f-Nr`p@D88a^RDCTU9U0r|3GMr~?8H=#)`-8{$&V~JGWdC&{X$d%i2* zIFxlMYX0IobUe21#x0qT*LJi2+;P!$q#Fmf^NFn#vEI$F=@#>m%T}SY|HwOD>ZrZy%)a!GFPFgg Ov+Q=K&7A5QRsaBOH4KLU diff --git a/wai/staged-conformance/cases/audio_int_codec_1l/case.json b/wai/staged-conformance/cases/audio_int_codec_1l/case.json index ce9fd47cf..d10181b28 100644 --- a/wai/staged-conformance/cases/audio_int_codec_1l/case.json +++ b/wai/staged-conformance/cases/audio_int_codec_1l/case.json @@ -5,7 +5,7 @@ "bases": [ { "file": "base.wai", - "object": "d45db2bc98dd38873553beb15fdb026a4e6b7fd7c8c7dbe4f4a0b6fcc0709a54", + "object": "751a7ca553e0dbf039f5bd98be79af34baf436e37afc1a1765fd9eedbfe20660", "decoded_via": "wai.audio.int_codec", "via_fallback": false, "attested": false, @@ -23,7 +23,7 @@ } ], "stage0": "stage0.bin", - "stage0_sha256": "b8ff83a442c112661ec7a41d6e51cb32559510a699a0e9bb37fa301f8952978a", + "stage0_sha256": "4b0344c87c67fc30b7d977ae2077fc310822199598e5d2f9f8fc06314b3a2875", "decode": { "kind": "int", "set": { @@ -35,8 +35,8 @@ "files": [ { "file": "L1.wai", - "object": "e462824f3bf3827ec4d8861e1c93f64fabf2bec20303013347eee7a271f968a2", - "bytes": 19375 + "object": "5541cb6893420d23696e929a00e3a7aa7b755d2d7ffcd6254944e8401b85a9fc", + "bytes": 28759 } ], "config": { @@ -67,7 +67,7 @@ [], [ { - "object": "e462824f3bf3827ec4d8861e1c93f64fabf2bec20303013347eee7a271f968a2", + "object": "5541cb6893420d23696e929a00e3a7aa7b755d2d7ffcd6254944e8401b85a9fc", "envelope": null, "detail": null, "held_for_base": false, @@ -84,7 +84,7 @@ "units": [ { "stage": 1, - "producer": "e462824f3bf3827ec4d8861e1c93f64fabf2bec20303013347eee7a271f968a2", + "producer": "5541cb6893420d23696e929a00e3a7aa7b755d2d7ffcd6254944e8401b85a9fc", "frozen": false, "tier": "decode-equivalence", "shape": [ @@ -92,10 +92,10 @@ 1, 1 ], - "stage_sha256": "b9ca33fc990f6a28c479c4a8193dca0bd9faa1d8dedf9cef9614513da4b1d0bd" + "stage_sha256": "f48dd33054661c4da9c14449579b54fd2bd0c52408829468a4ddc76a945ecc23" } ], - "clip_sha256": "ec7a4ad312d40a6ebdb33a5b55df02967415c3eb8f065c72e427d1a189b8810d", + "clip_sha256": "3a20087e9668f23d47584467849d2d4c1c5fc99bb099b02227759f8ab42bcf3c", "n_units": 1 } ] diff --git a/wai/staged-conformance/cases/audio_int_codec_1l/stage0.bin b/wai/staged-conformance/cases/audio_int_codec_1l/stage0.bin index f6acedd951e34cb138af74dc77dd94bdec97deef..3a7f6ec22e04e9335c536944592cec2406224ac6 100644 GIT binary patch literal 16384 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 Ki^2Kcxc?99V+~0F literal 16384 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 U4m~`BlA95Y!IQhp$8#S41&I4?=l}o! diff --git a/wai/staged-conformance/index.json b/wai/staged-conformance/index.json index a210b272e..10829dd2a 100644 --- a/wai/staged-conformance/index.json +++ b/wai/staged-conformance/index.json @@ -64,7 +64,7 @@ "name": "audio_int_codec_1l", "about": "a pinned wai.audio.int_codec base, then an identity layer", "clip_sha256": [ - "ec7a4ad312d40a6ebdb33a5b55df02967415c3eb8f065c72e427d1a189b8810d" + "3a20087e9668f23d47584467849d2d4c1c5fc99bb099b02227759f8ab42bcf3c" ] }, { diff --git a/wai/staged-measure-conformance/fixtures/audio/L01.wai b/wai/staged-measure-conformance/fixtures/audio/L01.wai index 73ae8da1c6670a3ce53f282f307f99bb52035bec..fd95be3c70aa8554516d558dcff47b1568b0d4f9 100644 GIT binary patch delta 10090 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 delta 10090 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 XSAZSOxLg$qTjo8BDvV}~aXKkpMJU&C delta 6669 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 delta 6633 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 diff --git a/wai/staged-measure-conformance/fixtures/audio/R1_00.wai b/wai/staged-measure-conformance/fixtures/audio/R1_00.wai index b52afac83f127f393fa5f0ca40dd401903d63fbf..b27501ea08b1c6e5923717c4d2b442b8f46262ed 100644 GIT binary patch delta 16445 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 delta 16445 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 diff --git a/wai/staged-measure-conformance/fixtures/audio/expect.json b/wai/staged-measure-conformance/fixtures/audio/expect.json index c27725d72..d65d1e85e 100644 --- a/wai/staged-measure-conformance/fixtures/audio/expect.json +++ b/wai/staged-measure-conformance/fixtures/audio/expect.json @@ -5,35 +5,35 @@ { "unit": 0, "layers": 1, - "out_sha256": "b8ff83a442c112661ec7a41d6e51cb32559510a699a0e9bb37fa301f8952978a" + "out_sha256": "4b0344c87c67fc30b7d977ae2077fc310822199598e5d2f9f8fc06314b3a2875" }, { "unit": 0, "layers": 2, - "out_sha256": "7cf4ee1daabc1f8779252bb3e02f16ba2ab2d8a65b374c8cbb1c3c3354121cdd" + "out_sha256": "f6d16fa64e91ca80f593b2f598680e4e95af1b0b982e88f7cf1187fadf7ede85" }, { "unit": 0, "layers": 3, - "out_sha256": "02c3e3540210f1e5fce2b9f75d38e74d9b877cf17f2233b7825a8a10b823c64c" + "out_sha256": "5f2b20307a79713c3c8975e3cfbc5a2fa9accc3bd651f570078dfd51a808def9" }, { "unit": 0, "layers": 4, - "out_sha256": "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a" + "out_sha256": "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095" } ], "references": [ { "label": "one layer, q 1", "out_sha256": [ - "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a" + "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095" ] }, { "label": "one layer, q 8", "out_sha256": [ - "9b34a3dcbc301e180a7a675b3304ed57ddee43858863e113a55455a926d614e8" + "676f2597f1e3106b56cfb6798771abb7dc6b06733ee9d1f95e5dcf627b67525b" ] } ] diff --git a/wai/staged-measure-conformance/fixtures/audio/source.bin b/wai/staged-measure-conformance/fixtures/audio/source.bin index e536cf12061ea6153d1b62f41b3ac894500787a9..a235262ecc027a089fb9e5ff1a93d7056f8bec7e 100644 GIT binary patch literal 32768 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/` | | … + let row = index.lines().find(|l| l.trim_start().starts_with(&format!("| `{d}/` |"))); + let cell = row.and_then(|r| r.split('|').nth(2)).map(str::trim).unwrap_or(""); + if cell.is_empty() { + missing.push(d.clone()); + } + } + assert!(missing.is_empty(), "tests/vectors/README.md states no provenance for: {missing:?}"); +} diff --git a/wai/wai-rs/tests/vectors/README.md b/wai/wai-rs/tests/vectors/README.md new file mode 100644 index 000000000..a64cf72b5 --- /dev/null +++ b/wai/wai-rs/tests/vectors/README.md @@ -0,0 +1,21 @@ +# Committed vectors + +The vectors the reference implementation's tests decode, and the conformance corpora +under `wai/*-conformance/` and the cross-architecture goldens are built on. A vector +changes only through its generator (CONTRIBUTING, *Vectors*). + +**Provenance.** Each directory's row names the generator that writes it and the +generator's input. `tests/corpus_provenance.rs` requires a row for every directory. + +| directory | provenance | +|---|---| +| `generate/` | Generated: `tools/wai_generate_model.py` writes the spectral model from an integer sine table and a word list. | +| `int_audio/` | Generated: `tools/wai_int_audio_export.py` trains the codec on a signal it generates from seed 1 and codes another signal from the same seed; it reads no audio file ([`int_audio/README.md`](int_audio/README.md)). | +| `int_hyper/` | Generated: `tools/wai_int_hyper_tiny_vector.py` draws the tiny conditional codec's integer weights from a seeded generator. No image. | +| `int_mlicpp/` | Generated: `tools/wai_int_mlicpp_export.py` (seed 20260929) codes an integer pattern of ramps, an xor texture and a disc with seeded weights; `tools/wai_int_mlicpp_set_form.py` writes its set-form twin. | +| `int_splat/` | Generated: `tools/wai_int_splat_export.py` trains on a seeded procedural cloud. | +| `int_video/` | `int_video.*` is generated by `tools/wai_int_video_encode.py` (a disc over a gradient), and `video_nk.*` by `tools/wai_int_video_keyframe_encode.py` (the `int_hyper` tiny keyframe, panned). `video_real.*` is **not** generated: `tools/wai_int_video_real_encode.py` pans over a third-party picture that was not made for this repository and has no recorded licence for redistribution. It is to be replaced by generated content. | +| `int_world/` | Generated: `tools/wai_int_world_export.py` trains on a seeded procedural world. | +| `int_world2/` | Generated: `tools/wai_int_world2_export.py` trains on seeded procedural backgrounds. | +| `jpegai/` | `test256.bin` is the output of the ISO/IEC 6048-1 reference encoder (BSD-3) for a 256×256 generated test image of gradients and blocks ([`jpegai/README.md`](jpegai/README.md)). | +| `staged_bounds/` | Constructed here for the bound tests: grey frames from a residual stream of zeros, and envelopes whose capability is refinement-only or companion-only ([`staged_bounds/README.md`](staged_bounds/README.md)). No image. | diff --git a/wai/world-conformance/README.md b/wai/world-conformance/README.md index 9902d5671..dac36485c 100644 --- a/wai/world-conformance/README.md +++ b/wai/world-conformance/README.md @@ -6,6 +6,8 @@ MUST produce the identical BLAKE3 state hash at every checkpoint, on every machine, under every permitted arrival order. Verification is hash equality — there is no tolerance parameter. +**Provenance.** Generated here: `wai_world_vectors gen` writes every world from scenes authored in code. No capture. + Vectors run the registered sim capabilities `wai.world.sim.kinematic0`, `wai.world.sim.ballistic0`, and `wai.world.sim.truss0` (the solver-backed registrant: position-based dynamics, 8 Gauss–Seidel -- 2.54.0 (Apple Git-157) From de0165bb34491b6cdae806444e6eca9fa523091f Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 10:09:21 -0400 Subject: [PATCH 8/8] =?UTF-8?q?wai:=20CHANGELOG=20=E2=80=94=20the=20int=5F?= =?UTF-8?q?codec=20model=20and=20vectors,=20trained=20and=20coded=20on=20a?= =?UTF-8?q?=20generated=20signal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- wai/CHANGELOG.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index 2335e2aa3..47cb3bd19 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -6,6 +6,35 @@ wire format may change and such changes are recorded here. ## v0.4.0 — current +### The int_codec model and vectors: trained and coded on a generated signal + +- The int_codec model and vectors are now trained and coded on a generated signal; + earlier revisions used a third-party recording. +- `tools/wai_int_audio_export.py` reads no audio file. It writes its training signal + and the clip it codes from a seed (16 kHz mono: tones, chirps, noise bursts and + speech-like formant sweeps), in integer arithmetic, so a seed gives the same samples + on every machine; `--signal-only` writes one with the Python standard library alone. + Training is seeded from the same seed with deterministic algorithms and a fixed + thread count: two runs gave byte-identical files. The seed and the command are in + [`wai-rs/tests/vectors/int_audio/README.md`](wai-rs/tests/vectors/int_audio/README.md). +- Regenerated through their generators: `wai-rs/tests/vectors/int_audio/` (the model, + both bitstream forms, `audio.json`, `sha256.json`); `int-payload-conformance`'s + `vectors.json` and its thirteen `wia1_*` refusal fixtures; the staged-delivery case + `audio_int_codec_1l` and `index.json`; the staged-measurement audio title, + `goldens.json` and `sim/results.json`. The `WIA1` format, the capability and the + model's shape are unchanged. `wai_int_payload_vectors` now reads the place of a + `WIA1`'s first table from the payload's header for the two fixtures that change it, so + they keep their meaning on tables of another length (on the earlier vector the + offsets are the same). +- `tools/wai_audio_provenance_check.py`, run by CI: every committed audio vector is read + to PCM and correlated, at every lag, with the reference recordings the CI host has; + above 0.5 it fails, and a host with none skips it and says so. +- Every corpus states its content's provenance: a `**Provenance.**` line in each + `*-conformance/README.md` (OER/2's settled corpus aside) and a row per directory in + `wai-rs/tests/vectors/README.md`, required by `tests/corpus_provenance.rs`. + CONTRIBUTING states the rule. Two vectors are flagged there as not generated and to + be replaced: `int_video`'s `video_real` and `neural-conformance`'s `photo`. + ### Staged tracks over MoQ: a track per layer, a receipts track per track, delivery timeouts per hop, chains that recover - **Re-read against the drafts.** [moq-streaming-format](extensions/moq-streaming-format.md) -- 2.54.0 (Apple Git-157)

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 TI|9di>g>Ph&#COl$jSZ(Hpd~I2zV+R2zW*;j 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 diff --git a/wai/staged-measure-conformance/fixtures/audio/title.json b/wai/staged-measure-conformance/fixtures/audio/title.json index 17f511284..ab72302fb 100644 --- a/wai/staged-measure-conformance/fixtures/audio/title.json +++ b/wai/staged-measure-conformance/fixtures/audio/title.json @@ -18,7 +18,7 @@ ], "source": { "file": "source.bin", - "sha256": "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a" + "sha256": "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095" }, "references": [ { diff --git a/wai/staged-measure-conformance/goldens.json b/wai/staged-measure-conformance/goldens.json index 0334219ec..e5d630f33 100644 --- a/wai/staged-measure-conformance/goldens.json +++ b/wai/staged-measure-conformance/goldens.json @@ -4,15 +4,15 @@ "fixtures": [ { "title": "audio", - "content_id": "dd64e04d02388d970bf07a6759ea97f073e2329abcb03acb910d5d0a25ac8462", + "content_id": "b07e34629aab67de9a625cc04b3662cbb730bcaf1312190f449078969da79676", "framing": "registered", "unit_class": "pcm16", "unit_us": 512000, "bases": [ { - "object": "d45db2bc98dd38873553beb15fdb026a4e6b7fd7c8c7dbe4f4a0b6fcc0709a54", + "object": "751a7ca553e0dbf039f5bd98be79af34baf436e37afc1a1765fd9eedbfe20660", "capability": "wai.audio.int_codec", - "pin": "98b382c92112660a7d3909f07da831125fcdb75a548aa0cf64ad17a0901bd9ef", + "pin": "132958122b251869ad6725d24a2bb96e2733daaf3e09ef65ebc7af6f46030855", "tier": "decode-equivalence", "first_unit": 0, "capture_us": null, @@ -23,7 +23,7 @@ "objects": [ { "file": "staged-conformance/cases/audio_int_codec_1l/base.wai", - "object": "d45db2bc98dd38873553beb15fdb026a4e6b7fd7c8c7dbe4f4a0b6fcc0709a54", + "object": "751a7ca553e0dbf039f5bd98be79af34baf436e37afc1a1765fd9eedbfe20660", "capability": "wai.audio.int_codec", "base": 0, "layer": 0, @@ -34,13 +34,13 @@ "counted": { "header": 12, "manifest": 338, - "payload": 1444, - "total": 1794 + "payload": 2648, + "total": 2998 } }, { "file": "staged-measure-conformance/fixtures/audio/L01.wai", - "object": "14c630b04c617542d3df5a40b398c2fa5c960d6020f84a961046ff5f7831dc69", + "object": "a57b31df6e0982f99d2dce2b71d1c840a054ac77044f3eda42e6239abb13b6ee", "capability": "wai.audio.int_refine", "base": 0, "layer": 1, @@ -57,7 +57,7 @@ }, { "file": "staged-measure-conformance/fixtures/audio/L02.wai", - "object": "4f935f7fade9bd09ba65d65fca37083e18b57c6251c4f1ded91d7bab2c1640b0", + "object": "149cf3636040d0aa2df34c5a0a841d7789320e7cad2801609c50a2bd13c4b50a", "capability": "wai.audio.int_refine", "base": 0, "layer": 2, @@ -74,7 +74,7 @@ }, { "file": "staged-measure-conformance/fixtures/audio/L03.wai", - "object": "ed29fe08a0e7aafba5c71016408cbab959ddcda07914ee0ca08cc58f2d7cf549", + "object": "042b901f77c6510cbc27bf8d1370762d26eac51b2cb705949f4ffdfee923bacf", "capability": "wai.audio.int_refine", "base": 0, "layer": 3, @@ -90,16 +90,16 @@ } } ], - "bfpf_min": 1794, + "bfpf_min": 2998, "prefixes": [ { "layers": 1, - "stage_counted": 1794, - "counted": 1794, + "stage_counted": 2998, + "counted": 2998, "per_base": [ { - "stage_counted": 1794, - "counted": 1794 + "stage_counted": 2998, + "counted": 2998 } ], "units": 1, @@ -109,59 +109,59 @@ { "layers": 2, "stage_counted": 10351, - "counted": 12145, + "counted": 13349, "per_base": [ { "stage_counted": 10351, - "counted": 12145 + "counted": 13349 } ], "units": 1, "vs_source": { "kind": "pcm16", "n_samples": 16384, - "sse": "5600413", - "ref_energy": "77076760253" + "sse": "5600292", + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, - "sse": "5600413", - "ref_energy": "77076760253" + "sse": "5600292", + "ref_energy": "2886011628499" } }, { "layers": 3, "stage_counted": 6859, - "counted": 19004, + "counted": 20208, "per_base": [ { "stage_counted": 6859, - "counted": 19004 + "counted": 20208 } ], "units": 1, "vs_source": { "kind": "pcm16", "n_samples": 16384, - "sse": "89997", - "ref_energy": "77076760253" + "sse": "89988", + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, - "sse": "89997", - "ref_energy": "77076760253" + "sse": "89988", + "ref_energy": "2886011628499" } }, { "layers": 4, "stage_counted": 6831, - "counted": 25835, + "counted": 27039, "per_base": [ { "stage_counted": 6831, - "counted": 25835 + "counted": 27039 } ], "units": 1, @@ -169,36 +169,36 @@ "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" } } ], "decoders": [ { "capability": "wai.audio.int_codec", - "pin": "98b382c92112660a7d3909f07da831125fcdb75a548aa0cf64ad17a0901bd9ef", - "object": "d45db2bc98dd38873553beb15fdb026a4e6b7fd7c8c7dbe4f4a0b6fcc0709a54" + "pin": "132958122b251869ad6725d24a2bb96e2733daaf3e09ef65ebc7af6f46030855", + "object": "751a7ca553e0dbf039f5bd98be79af34baf436e37afc1a1765fd9eedbfe20660" }, { "capability": "wai.audio.int_refine", "pin": null, - "object": "14c630b04c617542d3df5a40b398c2fa5c960d6020f84a961046ff5f7831dc69" + "object": "a57b31df6e0982f99d2dce2b71d1c840a054ac77044f3eda42e6239abb13b6ee" }, { "capability": "wai.audio.int_refine", "pin": null, - "object": "4f935f7fade9bd09ba65d65fca37083e18b57c6251c4f1ded91d7bab2c1640b0" + "object": "149cf3636040d0aa2df34c5a0a841d7789320e7cad2801609c50a2bd13c4b50a" }, { "capability": "wai.audio.int_refine", "pin": null, - "object": "ed29fe08a0e7aafba5c71016408cbab959ddcda07914ee0ca08cc58f2d7cf549" + "object": "042b901f77c6510cbc27bf8d1370762d26eac51b2cb705949f4ffdfee923bacf" } ], "presentations": [ @@ -211,7 +211,7 @@ 1, 1 ], - "out_sha256": "b8ff83a442c112661ec7a41d6e51cb32559510a699a0e9bb37fa301f8952978a", + "out_sha256": "4b0344c87c67fc30b7d977ae2077fc310822199598e5d2f9f8fc06314b3a2875", "vs_source": null, "vs_final": null }, @@ -224,18 +224,18 @@ 1, 1 ], - "out_sha256": "7cf4ee1daabc1f8779252bb3e02f16ba2ab2d8a65b374c8cbb1c3c3354121cdd", + "out_sha256": "f6d16fa64e91ca80f593b2f598680e4e95af1b0b982e88f7cf1187fadf7ede85", "vs_source": { "kind": "pcm16", "n_samples": 16384, - "sse": "5600413", - "ref_energy": "77076760253" + "sse": "5600292", + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, - "sse": "5600413", - "ref_energy": "77076760253" + "sse": "5600292", + "ref_energy": "2886011628499" } }, { @@ -247,18 +247,18 @@ 1, 1 ], - "out_sha256": "02c3e3540210f1e5fce2b9f75d38e74d9b877cf17f2233b7825a8a10b823c64c", + "out_sha256": "5f2b20307a79713c3c8975e3cfbc5a2fa9accc3bd651f570078dfd51a808def9", "vs_source": { "kind": "pcm16", "n_samples": 16384, - "sse": "89997", - "ref_energy": "77076760253" + "sse": "89988", + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, - "sse": "89997", - "ref_energy": "77076760253" + "sse": "89988", + "ref_energy": "2886011628499" } }, { @@ -270,69 +270,69 @@ 1, 1 ], - "out_sha256": "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a", + "out_sha256": "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095", "vs_source": { "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" }, "vs_final": { "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" } } ], - "output_root": "b2241df38a1249d823c0896c8570826b1ee9417718cd776fa8fff50ad6709d43", + "output_root": "a58dad8b2bb96f08080e1f6705ebff84d097e1e992d387fa8d76615518487a28", "leaf_count": 4, "overhead": [ { "label": "staged", - "counted": 25835, + "counted": 27039, "vs_source": { "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" }, "out_sha256": [ - "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a" + "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095" ] }, { "label": "one layer, q 1", - "counted": 32145, + "counted": 33349, "vs_source": { "kind": "pcm16", "n_samples": 16384, "sse": "0", - "ref_energy": "77076760253" + "ref_energy": "2886011628499" }, "out_sha256": [ - "8405e88c07e18cd93aecd578493cb3ff060c98be1790ebca0edeb0d1af1c512a" + "5acb4b0f4839b79f10506e5c2d17637b5895a94bc4b46694a4bcee49c192b095" ] }, { "label": "one layer, q 8", - "counted": 19137, + "counted": 20341, "vs_source": { "kind": "pcm16", "n_samples": 16384, - "sse": "89997", - "ref_energy": "77076760253" + "sse": "89989", + "ref_energy": "2886011628499" }, "out_sha256": [ - "9b34a3dcbc301e180a7a675b3304ed57ddee43858863e113a55455a926d614e8" + "676f2597f1e3106b56cfb6798771abb7dc6b06733ee9d1f95e5dcf627b67525b" ] } ], "dedup": { "objects": 8, "unique": 6, - "referenced_bytes": 77117, - "stored_bytes": 73529 + "referenced_bytes": 80729, + "stored_bytes": 74733 } }, { @@ -1815,8 +1815,8 @@ "dedup": { "objects": 46, "unique": 32, - "referenced_bytes": 129930, - "stored_bytes": 112383 + "referenced_bytes": 133542, + "stored_bytes": 113587 } } } diff --git a/wai/staged-measure-conformance/sim/results.json b/wai/staged-measure-conformance/sim/results.json index 0ea784788..486d84bc8 100644 --- a/wai/staged-measure-conformance/sim/results.json +++ b/wai/staged-measure-conformance/sim/results.json @@ -5606,25 +5606,25 @@ { "id": "base.wai", "sent_first_us": 20000, - "arrived_us": 40718, + "arrived_us": 41200, "state": "delivered" }, { "id": "L01.wai", - "sent_first_us": 20718, - "arrived_us": 44859, + "sent_first_us": 21200, + "arrived_us": 45341, "state": "delivered" }, { "id": "L02.wai", - "sent_first_us": 24859, - "arrived_us": 47603, + "sent_first_us": 25341, + "arrived_us": 48085, "state": "delivered" }, { "id": "L03.wai", - "sent_first_us": 27603, - "arrived_us": 50336, + "sent_first_us": 28085, + "arrived_us": 50818, "state": "delivered" } ], @@ -5632,34 +5632,34 @@ [ 0, 1, - 44718 + 45200 ], [ 0, 2, - 46859 + 47341 ], [ 0, 3, - 49603 + 50085 ], [ 0, 4, - 52336 + 52818 ] ], - "bfpf_sched": 11394, - "tfpf_us": 44718, + "bfpf_sched": 12598, + "tfpf_us": 45200, "tffs_us": [ - 44718, - 46859, - 49603, - 52336 + 45200, + 47341, + 50085, + 52818 ], - "offered": 25835, - "delivered": 25835, + "offered": 27039, + "delivered": 27039, "dropped": 0, "abandoned": 0, "never_sent_capped": 0, @@ -5681,12 +5681,12 @@ { "id": "base.wai", "sent_first_us": 20000, - "arrived_us": 44485, + "arrived_us": 47495, "state": "delivered" }, { "id": "L01.wai", - "sent_first_us": 24485, + "sent_first_us": 27495, "arrived_us": null, "state": "abandoned" }, @@ -5707,21 +5707,21 @@ [ 0, 1, - 48485 + 51495 ] ], - "bfpf_sched": 2994, - "tfpf_us": 48485, + "bfpf_sched": 4198, + "tfpf_us": 51495, "tffs_us": [ - 48485, + 51495, null, null, null ], - "offered": 25835, - "delivered": 1794, - "dropped": 13690, - "abandoned": 10351, + "offered": 27039, + "delivered": 2998, + "dropped": 14441, + "abandoned": 9600, "never_sent_capped": 0, "missed": 0, "stall_us": [ @@ -5741,13 +5741,13 @@ { "id": "base.wai", "sent_first_us": 20000, - "arrived_us": 44485, + "arrived_us": 47495, "state": "delivered" }, { "id": "L01.wai", - "sent_first_us": 24485, - "arrived_us": 70363, + "sent_first_us": 27495, + "arrived_us": 73373, "state": "delivered" }, { @@ -5767,24 +5767,24 @@ [ 0, 1, - 48485 + 51495 ], [ 0, 2, - 72363 + 75373 ] ], - "bfpf_sched": 1794, - "tfpf_us": 48485, + "bfpf_sched": 2998, + "tfpf_us": 51495, "tffs_us": [ - 48485, - 72363, + 51495, + 75373, null, null ], - "offered": 25835, - "delivered": 12145, + "offered": 27039, + "delivered": 13349, "dropped": 13690, "abandoned": 0, "never_sent_capped": 0, @@ -5806,25 +5806,25 @@ { "id": "base.wai", "sent_first_us": 20000, - "arrived_us": 40718, + "arrived_us": 41200, "state": "delivered" }, { "id": "L01.wai", - "sent_first_us": 20718, - "arrived_us": 44859, + "sent_first_us": 21200, + "arrived_us": 45341, "state": "delivered" }, { "id": "L02.wai", - "sent_first_us": 24859, - "arrived_us": 47603, + "sent_first_us": 25341, + "arrived_us": 48085, "state": "delivered" }, { "id": "L03.wai", - "sent_first_us": 27603, - "arrived_us": 50336, + "sent_first_us": 28085, + "arrived_us": 50818, "state": "delivered" } ], @@ -5832,34 +5832,34 @@ [ 0, 1, - 44718 + 45200 ], [ 0, 2, - 46859 + 47341 ], [ 0, 3, - 49603 + 50085 ], [ 0, 4, - 52336 + 52818 ] ], - "bfpf_sched": 11394, - "tfpf_us": 44718, + "bfpf_sched": 12598, + "tfpf_us": 45200, "tffs_us": [ - 44718, - 46859, - 49603, - 52336 + 45200, + 47341, + 50085, + 52818 ], - "offered": 25835, - "delivered": 25835, + "offered": 27039, + "delivered": 27039, "dropped": 0, "abandoned": 0, "never_sent_capped": 0, diff --git a/wai/wai-rs/tests/vectors/int_audio/audio.json b/wai/wai-rs/tests/vectors/int_audio/audio.json index 3b9d75582..43bbfb9d0 100644 --- a/wai/wai-rs/tests/vectors/int_audio/audio.json +++ b/wai/wai-rs/tests/vectors/int_audio/audio.json @@ -1 +1 @@ -{"pcm_fnv1a": "085b193909b3042a", "n_samples": 8192, "sample_rate": 16000} \ No newline at end of file +{"pcm_fnv1a": "e5ff66ad1b86117c", "n_samples": 8192, "sample_rate": 16000} \ No newline at end of file diff --git a/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.json b/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.json index 20bc71440..946a084ca 100644 --- a/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.json +++ b/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.json @@ -1 +1 @@ -{"n_ch": 16, "lat_len": 512, "t_out": 8192, "afrac": 12, "lo": -6, "cdfs": [[0, 1, 2, 3, 4, 5, 6, 65404, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 255, 1790, 4477, 8060, 11899, 15994, 50564, 52995, 56322, 60929, 64128, 65535, 65536], [0, 1, 2, 2433, 6528, 11135, 14590, 49541, 56579, 60290, 63873, 65408, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 41472, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65530, 65531, 65532, 65533, 65534, 65535, 65536]], "median_q": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4096, 0], "rans_b64": "etYG9QEAAAAZ0vuSWzgg8GEZB5zW3oezESVuYoARWGd+yezeXdBdidkZayqq2n1f3P8iNWEgLHGQ7iWl4NSxAj8O9necDFtFYOYAKo/DzaLmOkzC6tfuO63y92k3EcIwRRMHjdQjAi1+K5BDivfp3ycuhq+d4HuaPyWFGWD6p4n+HsK6uU/9u5x2IxyWMCs5K0VqX+5dNsWEXFF4Sm8Y/Mt04/sYeTs9d3CIvljRV7lk6dRvYmz7e7/KeCHN0RmtwsSvTHQ1acqT47otwcBwGCUAG0kn7e4bnu8fnvD7+tB78335QQspZbgXaJN35Su21jMBpUhzCYVdq8I5Vwy1dgQTLe/Bxg7OVviBB/rIYr5hy95NqexAdoohKfoOwsddftjaHPHWuwf5uNFFsZl9wFupJqFnc1HFlXLaOUFfdx7KOpF/HyHjKjXBBFCy5b1kNfSeTkawYtjBtw4WqRQ7uwCy2gPE0zpVm/wfQdKIfdVDB6X8TQoQ980+yzZCfoCo"} \ No newline at end of file +{"n_ch": 16, "lat_len": 512, "t_out": 8192, "afrac": 12, "lo": -6, "cdfs": [[0, 1, 2, 3, 4, 5, 6, 65529, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 7811, 64123, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65529, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 1924, 63355, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65529, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 2050, 5505, 19582, 45698, 58239, 63869, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 1028, 32772, 52224, 65405, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 4483, 18304, 35324, 53633, 62463, 65278, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 9474, 22271, 39171, 54144, 64893, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 2178, 3329, 19965, 47105, 61694, 64893, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 6, 65529, 65530, 65531, 65532, 65533, 65534, 65535, 65536], [0, 3967, 7934, 11133, 15996, 21626, 26233, 33015, 40309, 45939, 53762, 56577, 60544, 65535, 65536], [0, 1, 2, 3, 1922, 10880, 22653, 41986, 53631, 63229, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 11650, 35197, 63612, 65531, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 7681, 17663, 26237, 39546, 54784, 65405, 65532, 65533, 65534, 65535, 65536], [0, 1, 2, 3, 4, 5, 2436, 33282, 57213, 65531, 65532, 65533, 65534, 65535, 65536]], "median_q": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4096, 4096, -4096], "rans_b64": "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"} \ No newline at end of file diff --git a/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.wia1 b/wai/wai-rs/tests/vectors/int_audio/audio_bitstream.wia1 index 05d5af267979cb7b144e22f71b9c1a7798a47f22..f50153003f1969a7fe0b768b2880064878268a36 100644 GIT binary patch delta 1887 zcmY*Uc|6qn8ve?Ror$q0`;u*P>tx9;T}q=wlrYL9N=ibl#-1ndF_j%s;dEV!(lAMyit0sgZYlSH-3H~gw z8~j!O!Q=`x^&s0f0UN zaC?Ky$4Da(03ZnP76#0aX~v34vH%cV0N6^0C8GccRsq=AA@AtR?b3shHvqy#@WdEA zzD?%qD-vOAA!z`%vGCgt&o2GdIq=_18W;!#({S3`#sI|I0TAZ}Kx{AoKjFRqxDUXM zCIEJ^U^yE${zhi1DiYx<2u85tEZnJr^TI*4d2n6{qAAS6(c;(1-9`#Ru&clsW?;9t zV)%+l_)n(om$)Mi3yCn8CU>hsKac=~t4|Nw!xQM;9phQs%sGyYUl4Mq&s(oj&suC| zPNteIqs0D(aeZgLJgCy(K7S`a+Ijrs7l%$Yi?O{zW@0TOHL5GTz?%cD6goFo#7aUZ z`QwO_0c%@_U`Duk>C4BaWq%$q+0JCtT~LV1AT=LjTvqKX>K&7hfD+eSn79M7k{0`I zHD#auF0~z?kvnsd^PnV-`{QGP;K(Wwg^4jo=Za{G{VM-7#J#MfI_oh0#&xN19|H)N zJ5SpEWR}87y|74m7~SzpFIK!L>}l|^7edK-b^CFVhD(<=(^N;wUc`@_&&}B<_b*W+ z5w8HT@}EXNek*-3QMJ%cNQS+&v40erXyV(auM=@#I-AI9>^_oPkgO~4FkGb{S=cd| z<8H0DGPSlain6GXH}+@Fv?qCIwfhHQv-9)%LuGZJM< zf>UmAI6kmH-M*GXbj@O)VWVT*T}*rAWNI~o2DJN?hw351!P(XGpLaOM)b;p*Rex@6 zxHunInt-;$$-^Zul~4fqy|=|%X9FN=4IWJV#AmSxgP5K_51LX>WHT(6A@6HrH)&}nsba+&2qlBfF;fF;~-3@h_VfIe5!`it{ zNf~W{${9Z#5r)gX?T5bO8R#d$KI4(oj!Rf>ft1Zq8%jf<@Ssh+R{nF#-_xpNXlS2z zu8{A*8JUgI=CLWe{w=8pbLe0IS?YHZ_AWsXDWrT=n*m2eca~!QB8|Bz5D&f`Ec5Y!f z9g(AZ6S*X?B$=h>^({!asqj!UJ_zHeXZ|(?L)NF>MbFKDS2Fc@R37C$^cIU;`lZdN zskBc_YgltsWJM>fL%re6ohrpL??@{1Ri_7mZ7uvTB({-xOB5fU;NV4d6B&F4DMBIm z*9}M0G`U$mQayUn<83O9#q1aBg#vC($P|KmHPM$uZFu5&_B6-WUS(1@8(O=>rRf$P z87022zN;gj>n5C>ED>6P=`dqWaaSMC@BP?RdU4ro*h;1_VTMVwN^H~=m!!u!O8qR7 zG|g7RM&M~Sy+dv+p$TC$GFhuL=vo|ve7@w?P%-t^T>{zG01nr4z`Ny%wQEVX()nPTHfj}tzV zBixdj@R%}OEFJV=WT?_$u{cbrx-{LlMdP)9wtnch`O=fQDgAv!@i7#MKr`vp`tlJx<-&+rczfVG0aFqCItsMcd(r~<}+ z%TZt$p9hBZ9bnkK1Ez^z*u%4t6DTLiz)-IZG{=I0q4gk8-(3cVrq>J%jX!~MqwxSv zpY%>=42!6rt{Z@vsOlQqS5RJ(y!3lgw1vWlL`n8J*Y34%7F5kkY7mS_uRHnXUhIX~ z&YP0iTB~l=#^3p`WSXd;Q#j$B>e2^SHZs}seJh{C6YZMtj6tja@YzMrtb7i=y8h03 z?WgaV=7NU|T!qi(9q@3T?`%hIU zp1ml!_Rx{_J|(7^rzSt%rF-x|frKi9w5R&pchd9T%g_7p``3l)&$T}txiwRFh-XYL zf2zIhnla;2k7CZ&*wu$D!+Exru?XwFKX{DqT-c9B_FpHG_9dRa=ezQaLs^%i<}bcO z$7Abm+>-ftZ8!VR9T#0U&a6EUy;5yqdU4>)i~SZZRLZY!y2DkG$ihj@qlv>`VXnatVAtYj@hrsjguK E03_0gmjD0& diff --git a/wai/wai-rs/tests/vectors/int_audio/audio_model.bin b/wai/wai-rs/tests/vectors/int_audio/audio_model.bin index d202073c35e680fbc98b1e40bf5f9b72f443ec68..7585817c786e15b3f162bb3c1c9986603a67af14 100644 GIT binary patch literal 12215 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 literal 12215 zcmZ{Kb+}c<_x_sL`w-HC5*KMf8fg%uyFoxgNbL;brI%TVw{AO<|_!I`_g|Gh=L9nyPK9#3vxn}Rffm8CnfrFg-vL~^XMjL(wPnFMwls5%i9%Jrn>fBDq)_p+O{LF%&MA9K?yOO*Dxi`6Pq{M%`~F< zZmhk;uRGuKZBf}-+!Lkv1k;1xm!Gg@POHylEmhy2FMp(4(Qc6*zV?Unmu!{3YOc}* zx}a*Z_Uu*gjasb#q1!A^*w7LEO&jGY*Hq1P3+x#?#?3K>Y={O*aw!epV$*O-`t_8YP-$t zX2_}{xjjg6?ml~LuekN}faO$&`4zQS-C~DLOIe2ZXIbg8%HlGzoL)_H!k(}%!o%!P zP{5^d(siPw>K8rSd}{ZziFC>gr%mi{^~|MUq0we*B$X_prkR%f2iM5`W*6BhyuMe{ zxkz98xtq^7=;2}s`;=hO*YqInu{3ruujrMQ@30NBGfm_bL|avpuGkGME6--jyQaLSYEB2mDR$1i77O@= z=mh>DopQI_VfL@9ZabLwTwYsIv}YsSFtda=kk`$6^M`8^6jTeSt>4ZXJ6OHcEByNY zeYZ=`r@g#|erylgENY;;g-m=HEh6%Ji|8hO1&h7Hmu?1|O)u@baDwXOK9dJ|RD5J6 z^R#@r&c=UrZTy|;0sEL;HqU99$fS3(NiLt86KQM5>7*{Z+2QX}jlHZvt;j_)+EejL9~Q)xL@(SD9aU1Yp>l9i^MyoD|5ZtEPri)`Zy#YWRx#q&L3d3S*q z)Y<&@qPpp8T!gvZ!7$d*c6Gn7-_4J9lK#prpr+mm=;i0d$wgk6h`eGO@s|7%OX)N2 zBCB0%*3i4_v1n9Xb#M94g9Bm~p13&Ojtbe%>alDdR-t#Jw_F~-x6aA7hk0brpj&u4 zC>||u>+%1oeeR}=50di?>b&R|VbRC-Z!=flW6TT}d;L(}5~;n~ek)qzrh0d1kYLeE zCX3o+geuAU(8)*%y)`Hf5AEHA&g9Dd{W7*7?D7wD?p z?JeZ#%@mW7ts`mQm&a8DF_!nBVctXDfCXxUtL~MPN%3__$?E7C@-tqZjbsnxTJvT2 ziG54XG^2Dz{+l_;9)%OxI{VuF#40PNsTsCj4?@$ zZPP(_qPP8JuBev=Pg5_}neDW3u7kUbC@b45p77d+ndJ>?%8xjwQ@AH?8RnkpHGHIL z;a17MViirKi~72~#!3j|4vWR+3w>Dsp=z;b?jC)q>)<<7+dZHQuDJcfw6yO<=F;47 z8GmTbxn?{se@wrzvoxROHqBHYlaI6La<;$}5iUr|9@^>hgc+*}*dlVb-NJg(DN5}g znYqEwB8^|%ery_0br%;YPdC`Y;B$7*B(p!Wzwp1b$80l`D5X5bTx2S3;LCX$ncZz? z4PpGY?%HeI~lec=11bh22pPb!s-2y)t*av+Q%3ORh3Y#0Zuh|3G(nD*DuQ@fX_k zvb%1?TeBtnfLSN2>W{p7hR{uf$NZox0gms-|mgHsg!^Jv8kLHVcW&RK4wP*0&Nj&Fg zOlw}<)#mAl+19L@O-fr$eY$8rv468>erx(5_>gY%NxW#}nM-fKk-xcRw90Nb2UsaK z*V|$Uvo$*0#0K&{A~i8e&sMQ5l!g~Gk3}QagROT%sXTR1%lQNMqsb;myN=xHE|{~L zysTKrGMG|c_waxxY*lX-N%zV}{S_Rp)8=0o~CXuST;~wz5mgM(A~}pIy(= zQ7t{l`7S>nuQQqfe5Agtl7wCL_xh~qMHlRPSCtpg>+}uQhLTWa8mgb`rTlhKl1iH@ z^cM9%4)55UbO~SSjQTD+s5E0#mFk7F`D^#c7S`v(y}GqtPaEBMvrM-Wf4OpWT}JG1 ze%>@U%S;)OQWy6o>nCcUIA%V=951!qsX6VU-)SQ|CsMOI<`gw?_w+qJDm_JI1@v8t;}L%*t5_7AozY=iGgbGt;f<>&NbwNBo)|FMFsjQasA zmrG{987?PLQkH~Qa$WRA)0IZMh4vTrjx3@(gqQJeIoZ9(ii^jt2yY?|Y2(W1mEmu^ zyDlVdvhuXfwWGFFla-*2ra%9h78r{pk}Hq4;gJ?#-`!B5}XQ+PM<;KFtaH3!-k@^w#;e&lgGzc=qrx0yCO0)!{xIdk! z$tG8`!`DiTu_WZ~eo0ht08#0$h%z4}s`daeL#N{~*qBO`%x821KE@!I-yo)S znkWxo3C;OAeoOThl@ zIhYgpy96DM_DwvCdzKUBL|)2*Uje=oVm&z?Iom^&d@Q4rk1@aCeflw@tp8yAM~F;r zM*o3V8g{nrBYFwHZ-HO`4ADR1i1xwGSj4v;zR$sK8&Dt5*>dD$73QQQ%4^8-r{EGiv`wjhVP|Y{Af6;nxXtD9t-p~(jCeo{o5JjW_M?RR0bAvq;@H^vL}zZ>TPn=;!~7&b!%pd>WgnQmAy{ zw`{pO9b}Fyk~3XuW=sq9$YkI%^$*%bzS5cORJSm?I9M8Pryk~!>?yMPNmK{*vs^#J?iwV8k0h84X=$9pO2>LBeBgyt`QGC6|R5i;kBa zydT6&>(eXmXSao3gf5beU5I=u2dhbPh&rmC(r>1p+06c;MfziZAJwJzbsck5*XN_d zUT#lNC+N>Qxtn~3&t+$SwwVxlo6cfIb6AZM@qV&!h)NOZ&eFJw!0N}{N0B3H0bj;4 z+e?W4f?w17lCJ7qK|a048|bw*mDN0P!Ua@MUiA9`i+OyYDB%6YHqlPQycTAo8_w6u zV>&%s$adQuL1~^r&oLG0qW97cw4?1I_r89MYIyVHyO_V(;vZfc7`lLW!AhAsa>||c zmb%oy|0$wI=b@3_V6_74#Eq(g{V!~12dSuQCPUUaoGSB(I>87pSMW$&uqEv0!Dji4 z+PE6*sb9wbTmK!@Q2ES&pazTDoP0d%B(fXdzA_`iLF|Lz2UCYS20!bPbX`4Acf<%& zms)w1<=c9Qe@HdZ1I4#uEgy*4`_S(jer($Nef1R8NB+v@(^MI?FZ?;Gy2|1DM}`7r z?ht2nE+D;cMS7N(rx#^(5qxpttui6j^m?D z)TOd}RUz5c9u0oB)7?e3S=S4hJ53$Jd%Qj?=GA4H-3^zXPq5aV;e~@wZ5;dBr3UK% zlGV2#O6Gb59oQ;=wm&XR;>A&(=oNY142eX&WNMUm-VUJD+{zp_pD6A96dn?P+thS{ zHuARA#w%x2c|+MKHh>QCT+x=|yuQpoVaIuzAdba{?es}@+$>|y*fuNOBRR*fgVp87 zY^=+r{&Q6^7cSDz8^HG(CT}qcfeCC7{l+GfRakS;*rv7fg%j=F#OM^Sh}W2kDdUYggZ-rSUuqTSawDDm6%~uqUF|^*_L9x8;3(PsT?_=|c3U z{Y7756<9fX#d7N0K|!|OA0bmvXUbq*WQf}nb_Q-wPvvMrxYd4Z*4u}8cbBN_RMK)& znfEd!^kFK2w|264?Zwl#ZXUz)1uQt97cuGF=Uyqf$KBG$#5$AJ7F8!B1*nc)9Uc@l zYyleRQg|KRabVa}XM)4XE*Kc*umJZP_DW=jAi|tHl@ zlMjnN)cbfwf2iH(o{JCs?Yu23CR>ZXdY`(gesDWI&!!7%vKwY{*e2M+=d#**lWuS7 z`1Qh!q{8ifX;##qWAC`eZk;_vx2YMoVrxi|&EXZEk(YEYU90efx0hbZ46HWglIN+3 z?IhkZRdt21kNZuhWCzWDrQA_BKu(~_ek&EnCWqJjSvs>fnEt1>n5DXkxWH=*Yt!2_ zb}pS`5nWr2!H(axXj+$noeh7by8N43Bm?zJ^Fpc~Z zww=hr9Pbl7J(smmabyDs9S`Ojsc#(caQ8|i8OldC9G z(4I2tPxx7p)DBSp>J;7;S1XKqg}uji8!som@#czh;&=L(KMQGHY4@|)39-o%{uU!2b{k) z+30{jknIaO5abbk)>mqYedeyad1{yU#7v+8d>0F&J6&>i)D~sh9%Wn==n0dBt)=_MSIgy-U=Z78 zw#b)qn)}L2X;^fyy%dzA%&dfdX)5wh%)i(jN$)k%#jsm+hjj^m;L4Vd?6z(F1!2E1 zb66^9t8$7nCNo*H!2a%ribAGIP}|EHz9+9>zcin}5NnF&(fmPypgo_+U-P%sa#^Bwk?867HyH1hnCYe;Ye{jk4*M_6?4DsKE!59dPSu&J zscrf?jTf(NG}K-{SD61yyX;7oTPy+E9b|9wdhD?HT}~9=vA$jlT7liR2jMs|KlnFH z!>-~P>MwtC-#Q6~Q z(?BM_0)@Ur92`D&L3bL;Oz7rV1~dlSy-pE*2wr9A4>%5_kMRsb96P~F3HuYk?~Zu$ z!$(u-C4tRbsK-HfJ?e!}e;;G{3bOcy(OI-x0x>7>zC$eefz}d`<5kFduvH(tn~-e) zejV`ILaq|*4+3u{Vr~e!8@|gy_Fc3aApQg&za!qg7*_;+QRr2eo|ubadx@IC)-cFq zA4fC}^?1m{!OsuSpMiF_1SAa-k-c!Gs>yo*z?3xL>~A*RfTX$$!OVElcd^Tj>v?jY|= z4gnRzZYji({StN;9$}99!q-eZPtS-(9fnVgqdw-m>-&tZw`KG#;;DrkKgC=G&|Lug zgAmgw{Jy(j3a z2>KMyMsN6<0vrFqUr*GNL1sVX7h^68!=^U|J4DFSX5?-v`c~ojt}`C8h@mt5Ohpdj zF}B`EfNCLE^J}762Z)9s_Oy`y67m0pe0&d|IS}U%*iD%CT%h|0qaQj3eYKFs?Z`+wdK7JPkR8&9Bkl8sqvLyArdeVyEmVb`lWZRlFDP zz}I2;_zwQ7!`@De={9r{c6C;vZ!+jH#IYCka;Tqz+-k&75V1@L?_9%%3|XV4Wtt|^ z`-y1!?Hq|{`o)pNO~0Be6Wc}JZ}vtmWy(Y}-&QB;7y3LAop(}+sD9y@MsMU!crD)0 zBjpqAkL!~t-!v}K-v1Y!Kebtcvi@ax4rd=#!>($%Um&`O`rn9qkQ8>--kuSWC3I5i%6}4_scDo& zfAP3;(IUDuJ7X79OLFWAZ;JI$4V5`OXZ~X=O-ojuH+AcRYI?U8!5NlSJU8#@wq|fp zK%1}w9~~VQO)ty(|FUc3n^C+kd&mCl-<751X%P(v%G$1Sa8;xU-&Zeb7?4wbwMjkU zC*364ESBo-E(1NrPWYure^Ww6WZ>sjYrQIVt=&mw{cQ3Roq><1sv-j`=62H#Ifxy% zV{wAsOkej~ic2iJ|C~n2JnUaDmwp-?mD|NvLlg?{G?bl_X@Sn zE^^@ntMA>X`f%upq4E*0$)3wp za;$4%CwghTj(iwDMrUy5vd8a_=eCLWx$^xNqN+G47KpmysJIbq30jM?5#iE!<=8y- zwS5=s_LAXX`8Q3INn9~gCGyhu?Q^k=?@@i2RNv90u$(teguE}WYhPh4+Cz-Adn2#H zS<$4-^Xs$KrZ!gn&!Vl(XfaLi*Q?DHk<%>0Iq4%=-fK@!?K!)ezt3{H)L8#Ucr*PE zE2sX_E20OfH=E9Hs=02LKhup9tL0kRiEkGV*5C|irJ2TjqWzwm`6ekQ{706v3_Gx;OW_!gVfZsgbWF}YopQknfUIJf`R zTxHe8Bi@4N(`&J^PGV+>>8uw}XJ}iPTR|uJEU4xE5iS!I)NJ{qDxqeZt-(T>jz87E zne9Lq<7^S$9sikMh#We5Ff&?!t&t_dhW2-HP-X(g-oZ98>rLQ=#k27nJM0K<3Eg)LXQKzj3ff2+Z3o@d{o$`>v(!sIoUx#T_(_#8@ig1s1&aPs%~vkc z2S_bNcq6ZH+Pe~b=q2Md`6!v&lu-L9XK(@*j!`?>O28RvbQtf=4^r|Z zUNsxFljX3maxf0JL~>&%Pw{NDh#zKun^CxxvY$`JO!QRI=;CM!S5AE*Cx<0i0WaRm z&1;EjtfE(nN(Q4Mbya!)Lt-*LWs!ruc|ix6#g+~$sr)Rnr0^x><5z=^ST+6J)mOc| z0bzMD*(?%G*t1}QD}{f=$GBrL!d|qOc{_YX=gC+2&iv~wps)QL@``6YPuAgiWjZf2 z`<1l)&?IvQ+&puVck!R`7d8tkWRHq$z--E9WB>Cqil3=;FcvpFPNcYCKS?oUbeB3+2>3FnR^y6@`Tj00!PqHGBJ9dsO?0;>K@Ud#DxWy-m z2Eo*54PKZUMRwtKS9Mw#+>T}z@j!WZ+(ent)#J6X|8!Jk4g0!l!AD^R+KT&MarT`0 z#!2rE|HHe_7kZ^}FCh!h?w_#*nNTfwCAHT~!mYL>yr4PbJ=3f39%mEFardMj<;UH< zF1$+Qw4KXx2Gdm8;5<8N8~EA8A1=gAqe8kN{i456r(G8Qw;62rMjP1wg46yU|9to; z`e}3npXA<-4tIzBJy}w^=PO+fo&0KDYJPL91Cj(uU#H> zD<~kpH*MK=w_Fv%&RjY=jN2|pM8dKZpiU;zbY3EjkF~4CXvr9D9;5%)|2WoO7PDhx z^z9h`|IXO2#Q4c#{K+wjQ?@t1Wifg^hMwbMG#W$KNn-87F?#;Zau#gvo8QP7 zeG=;*5|i&6<3EqJvBrP%dxOrCV6}b|EB|&t1fzk7-o}bO3s&*hfRJ{e>_c>`(ccyI zNsviE076bJsVI8VHZ_6z8423ko6f9v)DErWLf=qn9kIC>}%F}(yr zoR4_Vz}F1a@8aC^6Cj=z(0v#3uTbxXdL^KyZ&9y-dcyhTKah_g##)GJH|+n4xD(F2 z6Hw4ijAc9e(?T{Ea+(LZ`5)>tK>vj9H>ei`ihPOrXaQbw=nR3ao1m9LEqDniEC*x_ z;!g(tJ=ji#_&EBf?#9l-d5je@^T1mHl%9YZ^I{wVW19irt5BvRrc{`-2>M!{0WybO z3wt$z*5i^g+JU@v!nlqtA-V*)gdLIJpmPW^GxlPK2Dut?42TnB?D{UF+R%?j4t|H9 zd5FIod>;UBA^M9U#!sRDDaKwO$m9V>W3iX6toUIsV9O}KGe+j-g4d(6>@Vh&X%wd zLErDtDGIyi(3c?l8oIMF_F<^UgSQ`ftb+c|h<_n;cA&on$_2=@hRnf)_X|1Ag!mH9 z=f^>2GU#B$wg&wPNc#`aeXunju_ruBUoOOZ3csHtmTw`SkT(sPuQ86&C>tQt7yUh; z+Y9X>u$3?m=OLR7{GTw!qLAqUoeeFTy!l*2FV%WO&vi~j)7=XuqVklt6H)eoV~PB= zEOB$M(~Q_z`@4z#BReIYrMLJy@htvO#zYkVZlwlq?0)4E>Gh6@=>OxMiTZEQd4hz8 z!eb?&eVdNR**v7y-lt|jXv0I^QhFF%Iy@iUL}}F}+zV|N-ove} zUUrsQqeht3G$UHXHnKmG@v4U3iaxkQ{<~Q(w}lV%XVlPT4DQN|-teFrT?-D|IxKJG zs5eutW7UHCX02a^o|;h46I*0Yw~Wv9UP({-UQOK6^@I7gjLpnb* Date: Wed, 7 Oct 2026 09:44:13 -0400 Subject: [PATCH 5/8] ci: no committed audio vector is a coding of a reference recording The cargo-class job's unix legs run tools/wai_audio_provenance_check.py. On the macOS leg the reference set is the host's system sound directory and the check runs; the linux legs have none and print that the check is skipped. A change to the tool fires the workflow. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-conformance.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/wai-conformance.yml b/.github/workflows/wai-conformance.yml index e45d98694..b6bc98d61 100644 --- a/.github/workflows/wai-conformance.yml +++ b/.github/workflows/wai-conformance.yml @@ -63,6 +63,8 @@ on: - 'wai/extensions/moq-streaming-format.md' - 'wai/extensions/jwp-receipts.md' - 'wai/wai-web/**' + # The audio provenance check below reads the corpora above with this tool. + - 'wai/tools/wai_audio_provenance_check.py' - '.github/workflows/wai-conformance.yml' pull_request: paths: @@ -94,6 +96,8 @@ on: - 'wai/extensions/moq-streaming-format.md' - 'wai/extensions/jwp-receipts.md' - 'wai/wai-web/**' + # The audio provenance check below reads the corpora above with this tool. + - 'wai/tools/wai_audio_provenance_check.py' - '.github/workflows/wai-conformance.yml' # No global `shell:` default. The Windows runner is a host executor whose @@ -379,6 +383,24 @@ jobs: shell: bash working-directory: wai run: python3 pin-conformance/pin_verify.py pin-conformance + # Every committed audio vector must come from a seeded generator. This check reads + # each one to PCM (each audio base's stage 0 in the staged corpus, each measured + # source over one, each spatial-audio source, every audio file under wai/) and + # fails if any correlates above 0.5, at any lag, with a recording in the reference + # set the host has: its system sound directory, or the directories named in + # WAI_AUDIO_REFERENCE_DIRS. A generated signal stays near 0.2; a lossy coding of a + # recording is near 1. A host with no reference set, or no converter to read it, + # prints why and skips: the linux legs skip, the macOS leg checks. + - name: No committed audio vector is a coding of a reference recording (unix) + if: matrix.os != 'windows' + shell: bash + working-directory: wai + run: | + if command -v python3 >/dev/null 2>&1; then + python3 tools/wai_audio_provenance_check.py + else + echo "audio provenance: SKIPPED — no python3 on this host" + fi # OER's second implementation is portable C, not Rust. Rebuild it from source and # require its output to match the pinned corpus byte for byte: the kernel is # deterministic, and wai_oer_vectors above has already verified the pinned copy, -- 2.54.0 (Apple Git-157) From a8bf1c560c7d0a60dc5ed5da58cb8a2add1829d3 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 10:09:20 -0400 Subject: [PATCH 6/8] wai: the int_codec vector's README, and the statements about what it was trained on wai-rs/tests/vectors/int_audio/README.md states the vector's provenance (a signal the export tool generates; no audio input), the seed (1), the command, the tool versions, and that two runs gave byte-identical files. research/decode-throughput.md keeps its text (a dated record) and gains a dated correction: the int_audio vector it timed was trained on, and coded, a third-party recording, and has been replaced by one trained and coded on a generated signal of the same shape. wai_decode_bench's doc comment now lists int_audio among the vectors trained on generated content. Co-Authored-By: Claude Opus 5.5 --- wai/research/decode-throughput.md | 9 +++++ wai/wai-rs/src/bin/wai_decode_bench.rs | 4 +- wai/wai-rs/tests/vectors/int_audio/README.md | 39 ++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 wai/wai-rs/tests/vectors/int_audio/README.md diff --git a/wai/research/decode-throughput.md b/wai/research/decode-throughput.md index a7d206adc..2b4552bb8 100644 --- a/wai/research/decode-throughput.md +++ b/wai/research/decode-throughput.md @@ -345,6 +345,15 @@ What was checked (the claim rests on these, not on the argument alone): *width*, not on trained values, with one exception that is visible below: activation magnitude selects the IGDN arithmetic path. + > **Correction (2026-10-07).** The int_audio vector timed here was trained on, + > and coded, a third-party recording, not content made for the repository. It + > has been replaced: the int_audio model and vector are now trained and coded on + > a signal `tools/wai_int_audio_export.py` generates from a seed. The model has + > the same shape (16 channels, 512 latent samples, 8192 output samples); the + > row's figures are for the earlier vector, and the current one's time can + > differ through its activations (the exception above) and the length of its + > rANS stream. + ## 4. Results ### Whole decoders diff --git a/wai/wai-rs/src/bin/wai_decode_bench.rs b/wai/wai-rs/src/bin/wai_decode_bench.rs index d065f0249..dea393cad 100644 --- a/wai/wai-rs/src/bin/wai_decode_bench.rs +++ b/wai/wai-rs/src/bin/wai_decode_bench.rs @@ -23,8 +23,8 @@ //! not all trained models: //! //! - **trained:** int_synth photo, int_world, int_splat and int_audio (their export -//! tools train the float model, then quantize it; int_world and int_splat train -//! on procedurally generated content); +//! tools train the float model, then quantize it; int_world, int_splat and +//! int_audio train on generated content); //! - **random weights:** the int_hyper tiny conditional codec //! (`tools/wai_int_hyper_tiny_vector.py` draws its integer weights from a seeded //! generator); diff --git a/wai/wai-rs/tests/vectors/int_audio/README.md b/wai/wai-rs/tests/vectors/int_audio/README.md new file mode 100644 index 000000000..dd587826e --- /dev/null +++ b/wai/wai-rs/tests/vectors/int_audio/README.md @@ -0,0 +1,39 @@ +# `wai.audio.int_codec` — the committed vector + +**Provenance.** Generated here. The signal the codec is trained on, and the clip the +vector codes, are written by `tools/wai_int_audio_export.py` itself from a seed: 16 kHz, +mono, signed 16-bit, a sequence of tones, chirps, noise bursts and speech-like formant +sweeps. The tool reads no audio file. Apache-2.0, like the rest of the repository. + +- `audio_model.bin` — the integer synthesis (`WAM1`): 16 latent channels, four + transposed convolutions with integer IGDN between them. +- `audio_bitstream.json` — the export's JSON form: the latent (16 × 512), its + per-channel tables and its rANS stream. `audio_bitstream.wia1` is the same bitstream + as a `WIA1` payload, converted by `wai_int_payload_vectors gen`. +- `audio.json` — the decoded PCM's FNV-1a, its sample count (8192) and its rate. +- `sha256.json` — the decoded PCM's SHA-256 (SPEC §7 *Digests*), written by + `WAI_WRITE_SHA256_SIDECARS=1 cargo test --test int_kernels_vectors int_audio_clip` + after the decode has reproduced `audio.json`'s FNV-1a. + +**How it was made.** From `wai/`, with torch 2.14.1, numpy 1.26.4 and CompressAI 1.2.8 +on an arm64 host: + + python tools/wai_int_audio_export.py --seed 1 --channels 16 --samples 8192 --steps 2500 + +then `audio_model.bin`, `audio_bitstream.json` and `audio.json` copied from ``. +The seed is **1**: stream 0 of the seed is the training signal (8 s), stream 1 the coded +clip. Training is seeded from the same seed, with deterministic algorithms and four +threads. Two runs gave byte-identical files. A different host or torch build may train +to different weights; the committed files are what conformance checks, and their +decode is integer and the same everywhere. + +The signal alone needs only the Python standard library: + + python3 tools/wai_int_audio_export.py --signal-only clip.s16 --seed 1 --stream 1 --samples 8192 + +The site's demo clip is an export of the same tool with the same seed and the +command's defaults (32 channels, 32768 samples, 3500 steps). + +**Checked.** `tools/wai_audio_provenance_check.py` correlates the decoded clip (the +staged-delivery case `audio_int_codec_1l`'s stage 0) against the reference recordings +the CI host has, and fails above 0.5. -- 2.54.0 (Apple Git-157) From 3fac029a7180a0c1f4e9334c609942b1f3c54137 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Wed, 7 Oct 2026 10:09:21 -0400 Subject: [PATCH 7/8] wai: every corpus states the provenance of its content Each *-conformance/README.md now has a line that begins **Provenance.**: the generator that writes the corpus and its input, and for an input not generated here its source and licence. OER/2's corpus is settled and left as it is. byte-exact-conformance and quantum-ops-conformance get a README. wai-rs/tests/vectors/README.md gives a row per vector directory. Where the staged-delivery, staged-measurement and telemetry READMEs called their content "synthetic", that sentence is now their provenance line. Two vectors are recorded as not generated, from the provenance audit: int_video's video_real (a pan over a third-party picture) and neural-conformance's photo (a third-party picture, with a decoder trained on unrecorded images). Their lines say so and that they are to be replaced; the photo bullet no longer names the picture's source product. tests/corpus_provenance.rs requires the line in every corpus and a row for every vector directory; CI runs it with the carriage tests. CONTRIBUTING states the rule: corpus content is generated here, or recorded with a licence that permits redistribution, and a word like "synthetic" is not a provenance line. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-conformance.yml | 5 +- wai/CONTRIBUTING.md | 15 +++++ wai/audio-conformance/README.md | 2 + wai/avatar-conformance/README.md | 2 + wai/byte-exact-conformance/README.md | 14 +++++ wai/cache-conformance/README.md | 2 + wai/claim-conformance/README.md | 2 + wai/feed-conformance/README.md | 2 + wai/film-conformance/README.md | 2 + wai/haptic-conformance/README.md | 2 + wai/http-conformance/README.md | 2 + wai/int-payload-conformance/README.md | 2 + wai/jwp-conformance/README.md | 2 + wai/neural-conformance/README.md | 12 ++-- wai/pack-conformance/README.md | 2 + wai/pin-conformance/README.md | 2 + wai/quantum-conformance/README.md | 2 + wai/quantum-ops-conformance/README.md | 15 +++++ wai/score-conformance/README.md | 2 + wai/signer-conformance/README.md | 2 + wai/staged-conformance/README.md | 8 +-- wai/staged-measure-conformance/README.md | 6 +- wai/telemetry-conformance/README.md | 4 +- wai/volumetric-conformance/README.md | 2 + wai/wai-rs/tests/corpus_provenance.rs | 73 ++++++++++++++++++++++++ wai/wai-rs/tests/vectors/README.md | 21 +++++++ wai/world-conformance/README.md | 2 + 27 files changed, 191 insertions(+), 16 deletions(-) create mode 100644 wai/byte-exact-conformance/README.md create mode 100644 wai/quantum-ops-conformance/README.md create mode 100644 wai/wai-rs/tests/corpus_provenance.rs create mode 100644 wai/wai-rs/tests/vectors/README.md diff --git a/.github/workflows/wai-conformance.yml b/.github/workflows/wai-conformance.yml index 19926216c..53943ac4b 100644 --- a/.github/workflows/wai-conformance.yml +++ b/.github/workflows/wai-conformance.yml @@ -272,9 +272,10 @@ jobs: # tests/manifest_builders.rs: the manifest types are #[non_exhaustive], and the # builders write the JSON a struct literal wrote; members the types keep only # as `extra` (and `security`) survive a round trip. - - name: Carriage conformance and the wai CLI (wrap, registry export) + # corpus_provenance: every corpus README states where its content comes from. + - name: Carriage conformance, the wai CLI (wrap, registry export) and corpus provenance working-directory: wai/wai-rs - run: cargo test --no-default-features --test carriage --test manifest_builders --test cli_wrap_intent --test cli_registry + run: cargo test --no-default-features --test carriage --test manifest_builders --test cli_wrap_intent --test cli_registry --test corpus_provenance # tests/cli_http.rs runs `wai http publish`, `codecs`, `origin` and `bench` as a user # does: objects named by their content hash with their head proofs, a sequence's union # and floor, the origin's headers, ranges and If-Range on loopback, and a fetch by diff --git a/wai/CONTRIBUTING.md b/wai/CONTRIBUTING.md index 082bf5dda..f1c2fd26f 100644 --- a/wai/CONTRIBUTING.md +++ b/wai/CONTRIBUTING.md @@ -70,6 +70,21 @@ generator (the `wai_*_vectors gen` binaries and the export tools in [`tools/`](tools/)), never by hand. A test whose comment says its hex must never be edited to make it pass means exactly that. +### Corpus content: where it comes from + +Corpus content is generated in this repository, by a generator from a seed or a +formula, or it is an input whose source and licence are recorded and whose licence +permits redistribution. An image, a recording or footage that was not made here and +has no such licence is not committed, as content or as training data. + +Every corpus states its provenance: each `*-conformance/README.md` in a line that +begins `**Provenance.**`, and `wai-rs/tests/vectors/README.md` in a row for each +vector directory. The line names the generator and its input, and for an input not +generated here, its source and licence. A word such as "synthetic" is not a +provenance line. `wai-rs/tests/corpus_provenance.rs` requires the line in every +corpus, and `tools/wai_audio_provenance_check.py`, which CI runs, fails when a +committed audio vector correlates with a reference recording the host has. + ### Independent implementations Conformance is defined by the committed corpora (`*-conformance/`) and the diff --git a/wai/audio-conformance/README.md b/wai/audio-conformance/README.md index 3c1edd607..c044b755b 100644 --- a/wai/audio-conformance/README.md +++ b/wai/audio-conformance/README.md @@ -6,6 +6,8 @@ layout, a conforming sink MUST produce the identical canonical PCM, hence the identical BLAKE3 — on every machine, no tolerance parameter. The audio counterpart of replay-equivalence. +**Provenance.** Generated here: `wai_audio_vectors gen` writes every scene and its sources, square-wave tones built in code. No recording. + All vectors mix to the mandatory `stereo` floor under the `wai.det.fixed64` numeric profile, `wai.audio.pan.sqrt_constpower` pan, `wai.audio.dist.inverse_clamped` distance. Sources are deterministic diff --git a/wai/avatar-conformance/README.md b/wai/avatar-conformance/README.md index 2ebd87634..24dcfc4bf 100644 --- a/wai/avatar-conformance/README.md +++ b/wai/avatar-conformance/README.md @@ -10,6 +10,8 @@ quaternion + scale, all `wai.det.fixed64`); the forward-kinematics composition into world space and the skinning of a `wai.mesh.glb` are the sink's presentation, never in the hash. +**Provenance.** Generated here: `wai_avatar_vectors gen` writes every vector from rigs and motion authored in code. No capture. + The container is the worlds `WWLD`; the sim is `wai.world.sim.skeletal0` (the identity step — a pose changes only when a signed op sets a joint). Mutations: `CREATE` / `DELETE` / `SET_ROTATION` / `SET_TRANSLATION` / diff --git a/wai/byte-exact-conformance/README.md b/wai/byte-exact-conformance/README.md new file mode 100644 index 000000000..318fb11ff --- /dev/null +++ b/wai/byte-exact-conformance/README.md @@ -0,0 +1,14 @@ +# byte-exact-conformance — cross-architecture byte equality + +A crate that compiles WAI's pure-integer decode paths (the rANS entropy coder and the +integer fixed-point syntheses, `#[path]`-included from `wai-rs`) without the system +codec libraries, so the byte-equality matrices (`.github/workflows/wai-byte-equality.yml`, +and *cross-arch byte-equality* in `wai-conformance.yml`) run them on every OS and +architecture. `cargo test --release` here decodes the committed vectors and the +staged-delivery corpus to the goldens in `src/*_golden.rs`, generated once on a +reference machine, and must match them on every machine. + +**Provenance.** The goldens are digests of decodes of the vectors under +[`../wai-rs/tests/vectors/`](../wai-rs/tests/vectors/) and of the staged-delivery +corpus; that directory's README states each vector's provenance. Among them, the +`int_video` half-pel clip (`video_real`) is not generated content (see there). diff --git a/wai/cache-conformance/README.md b/wai/cache-conformance/README.md index 80fcb83d9..b541f6013 100644 --- a/wai/cache-conformance/README.md +++ b/wai/cache-conformance/README.md @@ -5,6 +5,8 @@ an HTTP cache that fronts an origin serving the objects of [`http-conformance/`](../http-conformance/), and reports, per cache label and version, whether the configuration meets each rule. +**Provenance.** Written here: the tests, the driver and the controls are the code in this directory, and the objects a run fetches are `http-conformance`'s (see its provenance). No media of its own. + | file | what | |---|---| | `tests.json` | the tests: id, rule, level (MUST or informative) and what each checks | diff --git a/wai/claim-conformance/README.md b/wai/claim-conformance/README.md index dbb2b8c0d..50f744ede 100644 --- a/wai/claim-conformance/README.md +++ b/wai/claim-conformance/README.md @@ -6,6 +6,8 @@ Conformance for [typed receipt classes and the soft binding class](../extensions `operating-point`, `stage`, `delivery-gap` and `reconstruct-session`, and recovery through a soft binding under the ancestor rule. +**Provenance.** Generated here by `wai_claim_vectors`, from fixed seeds and fixed values (below). No media. + Each vector declares **one outcome**: `accept` — with the claim's `link_hash`, which pins the canonical form, or for a recovery the ancestor it attests — or `reject` at a named §3.1 step with a named reason. A verifier that rejects for another reason, or at diff --git a/wai/feed-conformance/README.md b/wai/feed-conformance/README.md index 688ec4323..c46926c28 100644 --- a/wai/feed-conformance/README.md +++ b/wai/feed-conformance/README.md @@ -9,6 +9,8 @@ non-physics world whose sim (`wai.world.sim.feed0`) is the identity step; convergence comes entirely from applying typed-field updates in the canonical total order. +**Provenance.** Generated here: `wai_feed_vectors gen` writes every vector from feeds authored in code. No recorded data. + The container is the worlds `WWLD`; the node is a record of self-describing typed cells (`Int` i64, `Fixed` Q32.32, `Text` UTF-8). Mutations: `CREATE` / `DELETE` / `SET_CELL` (LWW) and `ADD_INT` / diff --git a/wai/film-conformance/README.md b/wai/film-conformance/README.md index b855eded7..995c84d07 100644 --- a/wai/film-conformance/README.md +++ b/wai/film-conformance/README.md @@ -7,6 +7,8 @@ tick || the interpolated camera pose)` — hence the identical per-frame hashes and the identical Merkle root over them, on every machine, no tolerance parameter. +**Provenance.** Generated here: `wai_film_vectors gen` writes every vector from shots authored in code. No footage. + A film composes two things already proven elsewhere: the embedded world's **replay-equivalence** (every sink agrees on the state hash at every tick — the `world-conformance/` corpus) and the `wai.det.fixed64` camera track diff --git a/wai/haptic-conformance/README.md b/wai/haptic-conformance/README.md index aac06cb4f..47d788d74 100644 --- a/wai/haptic-conformance/README.md +++ b/wai/haptic-conformance/README.md @@ -7,6 +7,8 @@ the identical canonical `u8` buffer (per-channel interleaved machine, no tolerance parameter. The touch counterpart of replay/mixdown-equivalence, with the tick replaced by the haptic sample. +**Provenance.** Generated here: `wai_haptic_vectors gen` writes every vector from envelopes authored in code. No recording. + All vectors reconstruct in the `wai.det.fixed64` floor (Fx linear interpolation of the keyframed envelope → u8). Signals are self-contained (no external sources), so each vector is just a `.whap` diff --git a/wai/http-conformance/README.md b/wai/http-conformance/README.md index 31a54dda6..8af0498b9 100644 --- a/wai/http-conformance/README.md +++ b/wai/http-conformance/README.md @@ -16,6 +16,8 @@ reference adaptation policies. Two implementations check every case and must agr `../claim-conformance/_blake3.py` (BLAKE3 from its specification) and `../registry/capabilities.json` (the published registry export). +**Provenance.** Generated here by `wai_http_vectors`, from a staged-delivery case and from the frozen sources `src/SOURCES.json` lists, each encoded once by an encoder of its format: pictures of the `int_mlicpp` vector's generated 64×64 pattern, AV1 colour-bar test patterns, and a clip of a square moving over a gradient. The test patterns and the clip are generated content whose generators are not in this tree. None is a recording or a photograph. + ## Files | path | what | diff --git a/wai/int-payload-conformance/README.md b/wai/int-payload-conformance/README.md index 868405d07..70879ef72 100644 --- a/wai/int-payload-conformance/README.md +++ b/wai/int-payload-conformance/README.md @@ -6,6 +6,8 @@ Vectors for the payload formats SPEC §5 pins to the WAI-native integer codecs for `wai.neural.int_hyper`, `WIA1` for `wai.audio.int_codec` and `WIS1` for `wai.splat.int_codec`. +**Provenance.** Generated here: `wai_int_payload_vectors gen` converts the vectors under `../wai-rs/tests/vectors/` and changes them for the refusal fixtures; `tests/vectors/README.md` states each vector's provenance. One payload indexed here is not generated content: `video_real` (`int_video`) codes a third-party image (see there). + **Code-equivalence.** A conforming sink decodes every payload to the output digests its vector states, and refuses every fixture with the code it states, from the extension's closed list (§8). diff --git a/wai/jwp-conformance/README.md b/wai/jwp-conformance/README.md index 18ab55fe3..beccf7365 100644 --- a/wai/jwp-conformance/README.md +++ b/wai/jwp-conformance/README.md @@ -11,6 +11,8 @@ read as signed only where a signed statement restates it; one chain for each key track; and an object whose receipt is checked without its envelope reported as `inclusion-verified`, never as delivered. +**Provenance.** Generated here by `wai_jwp_vectors`, from fixed seeds (below). No media. + ## Files | file | what it is | diff --git a/wai/neural-conformance/README.md b/wai/neural-conformance/README.md index a25bd85eb..30e53fa32 100644 --- a/wai/neural-conformance/README.md +++ b/wai/neural-conformance/README.md @@ -7,6 +7,8 @@ because its synthesis is pure `i64` arithmetic (integer transposed convolutions + arithmetic-shift requantize + integer ReLU), not float ONNX. Two sinks honoring the spec produce the same bytes on every architecture. +**Provenance.** `gradient`, `bloom` and `facade` are generated here by `wai_int_synth_vectors` from a fixed SplitMix64 sequence. `photo` is not: it codes a third-party picture that was not made for this repository and has no recorded licence for redistribution, and its decoder was trained on images that are not recorded. It is to be replaced by generated content. + The float decoders (`bmshj2018`, `mbt2018_mean`, `elic`, `mlicpp`, …) are deliberately **not** here: their ONNX synthesis is float, so two conforming sinks on different hardware may differ in the low bits — a byte-equality @@ -44,9 +46,9 @@ is reproducible without a float RNG: - `facade` — 16×16 latent, 3 ch → ×2 → ×2 → refine = 72×72 RGB, three layers, two ReLUs (a deeper integer stack). -And one **real trained model on a real photograph**: -- `photo` — a 128×128 macOS *Sonoma* landscape, encoded to a 6,156-byte int8 - latent (96×8×8) + a four-layer integer decoder **trained on real images** +And one **real trained model**, on a third-party picture (see *Provenance*, above): +- `photo` — a 128×128 third-party picture, encoded to a 6,156-byte int8 + latent (96×8×8) + a four-layer integer decoder trained on images the corpus does not record (`tools/wai_int_synth_real.py`: float-train + post-training quantization with per-layer activation-scale calibration). Reconstruction ≈ 21.6 dB at ~3 bpp. This is the honest scope of int_synth: a pure integer transposed-conv decoder @@ -54,8 +56,8 @@ And one **real trained model on a real photograph**: that the decode is bit-identical on every machine**. At `gen` time the Rust decoder is cross-checked against the tool's python integer-forward (`ref_rgb.bin`) to max|Δ|=0, and the frozen `rgb_hash` then enforces the same - bytes on every platform in CI — a real trained model, a real photo, decoded - identically everywhere. + bytes on every platform in CI — a real trained model, decoded identically + everywhere. ## Running diff --git a/wai/pack-conformance/README.md b/wai/pack-conformance/README.md index 9a656fe94..97ff92333 100644 --- a/wai/pack-conformance/README.md +++ b/wai/pack-conformance/README.md @@ -4,6 +4,8 @@ Vectors for [`extensions/packaging.md`](../extensions/packaging.md): the policy, digest and what it may ask a packager to emit (§3), how a source is cut into pieces (§4), and the integer video payloads a packager writes (§5.5). +**Provenance.** Generated here: the `wai-pack` fixture generator (`wai-pack/src/fixture.rs`, `wai-pack/src/conformance.rs`) writes every frame from integer functions of the frame and pixel index, and a package's floor is an AV1 coding of those frames. No footage. + - `policy/` — policies a packager accepts (every rung one it may emit, §3.6), and `expected.json`: each policy's effective canonical JSON and digest (`eq-defaults-a.toml` also with `royalty_free_only` forced on, the one way an diff --git a/wai/pin-conformance/README.md b/wai/pin-conformance/README.md index 8eb9a9b09..edd0fd855 100644 --- a/wai/pin-conformance/README.md +++ b/wai/pin-conformance/README.md @@ -2,6 +2,8 @@ Vectors for the parameter-set pin (SPEC.md §3.1, §4, §7, §7.1). +**Provenance.** Generated here by `wai_pin_vectors`; the parameter-set files under `sets/` are stand-in bytes written for the corpus. No media. + **Reason-equivalence.** A conforming verifier reports exactly the declared outcome for every case: diff --git a/wai/quantum-conformance/README.md b/wai/quantum-conformance/README.md index 93b732246..715cd7308 100644 --- a/wai/quantum-conformance/README.md +++ b/wai/quantum-conformance/README.md @@ -4,6 +4,8 @@ Statevector-equivalence for the `wai.quantum.circuit` extension: given the same `WQC` circuit, a conforming sink MUST reconstruct the identical fixed-point statevector — **hash equality, no tolerance**. +**Provenance.** Generated here by `wai_quantum_vectors` from circuits authored in code. No media. + `vectors/*.wqc` plus `expected_hashes.json` are the pinned corpus. They are the one reference all three surfaces are checked against, rather than being checked against each other. diff --git a/wai/quantum-ops-conformance/README.md b/wai/quantum-ops-conformance/README.md new file mode 100644 index 000000000..9662fdfa2 --- /dev/null +++ b/wai/quantum-ops-conformance/README.md @@ -0,0 +1,15 @@ +# quantum-ops-conformance — calibration and job receipts + +The corpus of the quantum-ops extension: `wai.quantum.calibration` and `wai.quantum.job` +receipts, portable JSON signed with Ed25519 over a BLAKE3 Merkle root. Each vector is a +`vectors/.json` receipt and the `artifacts/` bytes it content-addresses; +`expected_hashes.json` pins every `receipt_hash`. A third party parses the JSON, +recomputes the Merkle root, enforces the grant's joule ceiling, verifies the signature, +checks each content hash against the artifact bytes and, for a job, the calibration +cross-link. + +**Provenance.** Generated here by `wai_quantum_ops_vectors gen`, from pinned demonstration +signing keys and fixed content. No media. + + cd ../wai-rs + cargo run --no-default-features --features quantum_ops --bin wai_quantum_ops_vectors -- verify ../quantum-ops-conformance diff --git a/wai/score-conformance/README.md b/wai/score-conformance/README.md index 1963b5764..b880f66c0 100644 --- a/wai/score-conformance/README.md +++ b/wai/score-conformance/README.md @@ -8,6 +8,8 @@ parameter. The music counterpart of spatial audio's mixdown-equivalence, with the recorded sound objects replaced by note events. +**Provenance.** Generated here: `wai_score_vectors gen` writes every score from notes authored in code. No recording. + The reference synth is trig-free: a phase accumulator drives a piecewise-linear oscillator (saw / square / triangle / pulse) shaped by a linear ADSR envelope, all in the `wai.det.fixed64` floor. Pitch is diff --git a/wai/signer-conformance/README.md b/wai/signer-conformance/README.md index 4628dfa67..f1a2c9acc 100644 --- a/wai/signer-conformance/README.md +++ b/wai/signer-conformance/README.md @@ -5,6 +5,8 @@ Conformance for [key discovery, signing authority and module authorisation](../e verifier reports beside a receipt's or claim's verdict, and the checks a sink runs before it runs a decoder or reconstruct module. +**Provenance.** Generated here by `wai_signer_vectors`, from published one-byte seeds (below). No media. + Each vector declares **one verdict**, set from the text in the generator and never copied from a verifier. A verifier that reaches another verdict — another level, step, reason, head or anchor path — does not conform. diff --git a/wai/staged-conformance/README.md b/wai/staged-conformance/README.md index d49a0ea55..89c4b5386 100644 --- a/wai/staged-conformance/README.md +++ b/wai/staged-conformance/README.md @@ -96,10 +96,10 @@ receipt for it, so that step 5 requires `delivered-verified` of its layers. the f64 form's rounding near a half. - `index.json` — the cases and their final clip hashes. -**The content is synthetic**: pictures, frames and PCM computed by integer functions in -the generator. The bases of the integer codecs are the committed vectors under -[`../wai-rs/tests/vectors/`](../wai-rs/tests/vectors/), decoded against their -parameter sets with their pins; the `wai.video.int_motion` bases are coded by the +**Provenance.** Generated here: pictures, frames and PCM computed by integer functions +in the generator. The bases of the integer codecs are the committed vectors under +[`../wai-rs/tests/vectors/`](../wai-rs/tests/vectors/), each generated too (that +directory's README states how), decoded against their parameter sets with their pins; the `wai.video.int_motion` bases are coded by the library's keyframe-0 reference encoder (`int_payload::encode_wiv1_zero_motion`, which `wai stage base` also runs: zero motion, one block per frame), and the PNG and FLAC bases are written by small writers in the generator (stored deflate with diff --git a/wai/staged-measure-conformance/README.md b/wai/staged-measure-conformance/README.md index fc4b47df9..fec8525f4 100644 --- a/wai/staged-measure-conformance/README.md +++ b/wai/staged-measure-conformance/README.md @@ -60,9 +60,9 @@ identity (Appendix D). Across the corpus: the record-wide deduplication totals ( with a short timeout (`fifo-timeout-short`), and `fifo` decode on one worker, whose stall passes the bound of the same plan with `base-first` decode (`strict-window`). -**The content is synthetic.** Each base is a committed vector under -[`../wai-rs/tests/vectors/`](../wai-rs/tests/vectors/), as the staged-delivery corpus -wraps it: a `wai.neural.int_hyper` picture, a `wai.video.int_hyper` clip, a +**Provenance.** Generated here. Each base is a committed vector under +[`../wai-rs/tests/vectors/`](../wai-rs/tests/vectors/), generated too (that directory's +README states how), as the staged-delivery corpus wraps it: a `wai.neural.int_hyper` picture, a `wai.video.int_hyper` clip, a `wai.audio.int_codec` clip and a `wai.splat.int_codec` attribute tensor, each pinned to its parameter set. Each source is the base's output with fine detail added by integer functions of position, channel and a seed (for audio, two triangle waves), raised to the diff --git a/wai/telemetry-conformance/README.md b/wai/telemetry-conformance/README.md index fcd8c8e23..6c09c2cfa 100644 --- a/wai/telemetry-conformance/README.md +++ b/wai/telemetry-conformance/README.md @@ -45,5 +45,5 @@ their metrics. Every value here is a string or an integer, the same on every mac readers and requires the members; and validates every report, and the Event-mode reports together, requiring no error. -The content is synthetic: session ids, content hashes and timestamps are fixed values -chosen for the corpus. +**Provenance.** Generated here: session ids, content hashes and timestamps are fixed +values chosen for the corpus. No recorded traffic. diff --git a/wai/volumetric-conformance/README.md b/wai/volumetric-conformance/README.md index 8c2d53641..6fe467aa0 100644 --- a/wai/volumetric-conformance/README.md +++ b/wai/volumetric-conformance/README.md @@ -7,6 +7,8 @@ frame, hence the identical BLAKE3 — on every machine, no tolerance parameter. The temporal counterpart of the static splat, with the single cloud replaced by per-Gaussian keyframed tracks. +**Provenance.** Generated here: `wai_splat4d_vectors gen` writes every vector from clouds and tracks authored in code. No capture. + Each Gaussian carries a track of keyframes (`frame`, position, scale, rotation quaternion, color, opacity, all `wai.det.fixed64`); the sink interpolates linearly in the `Fx` floor at any frame. The frame hash is diff --git a/wai/wai-rs/tests/corpus_provenance.rs b/wai/wai-rs/tests/corpus_provenance.rs new file mode 100644 index 000000000..34d5e0782 --- /dev/null +++ b/wai/wai-rs/tests/corpus_provenance.rs @@ -0,0 +1,73 @@ +//! Every corpus states where its content comes from (CONTRIBUTING, *Corpus content*). +//! +//! Each `wai/*-conformance/` directory has a `README.md` with a line that begins +//! `**Provenance.**`, and `tests/vectors/README.md` has a row for every directory under +//! `tests/vectors/` whose provenance cell is not empty. A provenance line names the +//! generator that writes the content and the generator's input; an input not generated +//! in this repository is named with its source and its licence. The test holds the +//! line's presence, not its truth: that is a reviewer's, and for audio also +//! `tools/wai_audio_provenance_check.py`'s. + +use std::path::PathBuf; + +fn wai() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("..") +} + +/// The line a README states its provenance in, if it has one with text after the label. +fn provenance_line(readme: &str) -> Option<&str> { + readme + .lines() + .map(str::trim_start) + .find(|l| l.starts_with("**Provenance.**") && l.len() > "**Provenance.**".len() + 1) +} + +#[test] +fn every_conformance_corpus_states_its_provenance() { + // OER/2 is settled: no change edits its documents or its corpus. + let settled = ["oer-conformance"]; + let mut dirs: Vec = std::fs::read_dir(wai()) + .unwrap() + .flatten() + .filter(|e| e.path().is_dir()) + .map(|e| e.file_name().to_string_lossy().into_owned()) + .filter(|n| n.ends_with("-conformance")) + .collect(); + dirs.sort(); + assert!(dirs.len() > 10, "found {} corpora", dirs.len()); + let mut missing = Vec::new(); + for d in &dirs { + if settled.contains(&d.as_str()) { + continue; + } + match std::fs::read_to_string(wai().join(d).join("README.md")) { + Ok(text) if provenance_line(&text).is_some() => {} + Ok(_) => missing.push(format!("{d}/README.md has no `**Provenance.**` line")), + Err(_) => missing.push(format!("{d} has no README.md")), + } + } + assert!(missing.is_empty(), "corpora without a provenance line:\n {}", missing.join("\n ")); +} + +#[test] +fn every_vector_directory_states_its_provenance() { + let root = wai().join("wai-rs/tests/vectors"); + let index = std::fs::read_to_string(root.join("README.md")).expect("tests/vectors/README.md"); + let mut dirs: Vec = std::fs::read_dir(&root) + .unwrap() + .flatten() + .filter(|e| e.path().is_dir()) + .map(|e| e.file_name().to_string_lossy().into_owned()) + .collect(); + dirs.sort(); + let mut missing = Vec::new(); + for d in &dirs { + // A row: | `