open-standards/wai/tools/wai_sota_vectors.sh
Transaction Science fb103ac5ae wai: one registry table, candidate capabilities, public-text checks
Every registered string now lives in one table (codecs/registry.rs) with
its kind, status, media class, registering SPEC section, edition and
registration date. `wai registry export` writes registry/capabilities.json,
its JSON Schema, the generated table in REGISTRY.md and vocab v2; --check
fails on drift. vocab v1 stays stable.

A candidate capability (a registered string whose payload format no
revision has pinned) must not be emitted. The C packers, the browser
writers and `wai wrap` refuse one, and `codecs::is_dispatchable` is the
single dispatch and selection predicate (SPEC §4): candidates,
companion-only capabilities, records and derivations are not
dispatchable, and an unregistered string is decoded only where the sink
advertises it.

The codec glossary is linked to the registry through a reviewed table and
held to its schema by a library test; `org` becomes `body`, from a closed
allowlist. The SPEC gains §5 sections on kinds and candidates, a §8
edition rule, corrected citations and rewritten appendices. The
quantum-ops vectors are regenerated with neutral device ids.

CI declares the feature-gated test targets with required-features, checks
the registry export, builds wai-web for wasm32, and runs two public-text
checks (comparative prose, and private name patterns) with a self-test.
The specification, extensions, research notes, READMEs, glossary and
source comments are rewritten to name no company or product and to make
no comparisons.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 22:38:09 -04:00

71 lines
3.7 KiB
Shell
Executable file

#!/usr/bin/env bash
# Regenerate the int_hyper integer-codec vectors (the pretrained mbt2018_mean,
# exported to integers) that the Rust tests read from WAI_SOTA_INT_DIR
# (tests/int_hyper_synth.rs, tests/int_video_sota_keyframe.rs).
#
# tools/wai_sota_vectors.sh [out-dir] # default /tmp/sota_int
#
# Needs the pinned Python stack (tools/requirements-sota-int.txt) on PATH as
# `python` (or set PYTHON), and cargo. The pretrained mbt2018_mean checkpoint is
# downloaded into the torch.hub cache on first use and checked against its pinned
# SHA-256 (CKPT_SHA256 in wai_sota_int_synth_export.py) before it is loaded.
#
# The chain, each step consuming the one before:
# 1. the pinned public-domain source photograph → source.png
# 2. the integer export of mbt2018_mean → model, bitstream, hashes
# 3. the Rust integer decode of that bitstream → frame0.rgb (the keyframe)
# 4. the P-frame encoder panning that keyframe → video bitstream, hashes
# Every step must succeed and every file the tests read must exist at the end, or
# this exits non-zero: a partial directory would let a test skip instead of fail.
#
# The output is not portable, and part of it is not repeatable run to run on
# every machine. Step 2 runs the float model (torch, CPU) to encode the
# photograph, on the pinned stack, which each platform installs as its own build.
# - Between an arm64 macOS machine and an x86_64 Linux runner,
# int_synth_sota_input.json (the synthesis-only latent, which the float
# encoder and hyper-decoder compute) differed, and with it the rgb_hash in
# int_synth_sota.json. Each side wrote the same latent in all of its runs.
# - Two runs on that one runner wrote different cond.json and
# int_synth_sota.json, most likely in psnr_float, the float decode's PSNR
# (the runner's files were not kept, so the field is inferred). Repeated runs
# on the Mac wrote identical files. Only the quality test reads psnr_float,
# against thresholds (the 1 dB bar and a 30 dB floor).
# - source.png differed between the Mac and the runner in its compressed bytes.
# Step 1 writes it with the PNG encoder from the pinned pixels, before any
# model runs, and its pixels (source.rgb) were identical, so this is the
# encoder's output, not float computation.
# The other files matched in these comparisons, which does not make them
# portable. So check a decode against the vectors of the same run, and do not
# pin a hash from these files for another run, on this machine or another: it
# can differ with both decoders correct. The decode's cross-architecture check
# uses the committed tiny vector (wai-rs/tests/vectors/int_hyper/), whose hashes
# are pinned.
set -euo pipefail
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
wai="$(dirname "$here")"
out="${1:-/tmp/sota_int}"
py="${PYTHON:-python}"
mkdir -p "$out"
out="$(cd "$out" && pwd)"
"$py" "$here/wai_sota_source_image.py" "$out/source.png"
"$py" "$here/wai_sota_int_synth_export.py" "$out/source.png" "$out"
(cd "$wai/wai-rs" && cargo run --release --no-default-features --features neural_int \
--example int_hyper_decode_frame -- "$out" "$out/frame0.rgb")
"$py" "$here/wai_int_video_sota_keyframe_encode.py" "$out"
missing=0
for f in source.rgb \
int_synth_sota.json int_synth_sota_model.json int_synth_sota_model.bin int_synth_sota_input.json \
int_hs.json int_hs_model.json int_hs_model.bin int_hs_input.json \
cond.json cond_entropy.json cond_bitstream.json \
frame0.rgb video_sota.json video_sota_bitstream.json; do
if [ ! -s "$out/$f" ]; then
echo "error: $out/$f was not produced" >&2
missing=1
fi
done
[ "$missing" -eq 0 ] || exit 1
echo "int_hyper vectors complete in $out"