name: wai cross-architecture byte-equality # The `replicate` determinism contract, checked on real silicon. WAI claims its # integer-exact decode paths (rANS entropy coder, integer fixed-point synthesis) # produce BYTE-IDENTICAL output on every machine. This matrix proves it: five # OS/arch combinations decode the same fixtures and assert the same golden # bytes — rANS streams produced by CompressAI's upstream encoder, and an # int_synth output hash produced on the reference machine (macOS arm64). One # diverging byte anywhere fails the suite. # # Coverage is still-image AND temporal, classical AND learned: the rANS coder, # integer fixed-point synthesis, the JPEG-AI entropy stage, the inter-frame video # decoder (`wai.video.int_motion`), and the neural-keyframe variant # (`wai.video.int_hyper`) whose I-frame comes out of a learned conditional codec, # and the MLIC++-topology codec (`wai.neural.int_mlicpp`), whose entropy network runs # before every checkerboard pass and must give every platform the encoder's scale # bucket for every element. Video is the strictest leg — inter-frame decode is a # feedback loop, so one divergent half-pel rounding does not stay one byte, it # predicts the next frame and compounds for the rest of the clip. # # The conformance crate (`wai/byte-exact-conformance`) #[path]-includes the # pure-integer sources from wai-rs — no system codec libraries, no ONNX runtime # — so every leg runs in about a minute. on: pull_request: paths: - 'wai/byte-exact-conformance/**' - 'wai/wai-rs/src/neural/int_synth.rs' - 'wai/wai-rs/src/neural/jpegai_mans.rs' # Every source the crate #[path]-includes must be able to fire this # workflow, or a change can break cross-arch equality and merge green. - 'wai/wai-rs/src/int_synth.rs' - 'wai/wai-rs/src/int_entropy.rs' - 'wai/wai-rs/src/jpegai_mans.rs' - 'wai/wai-rs/src/rans.rs' - 'wai/wai-rs/src/int_video.rs' - 'wai/wai-rs/src/int_transform.rs' - 'wai/wai-rs/src/int_hyper_synth.rs' - 'wai/wai-rs/src/int_mlicpp.rs' # The fast kernels int_synth, int_transform and int_hyper_synth dispatch to # by default: the goldens here decode through them. - 'wai/wai-rs/src/int_kernels.rs' - 'wai/wai-rs/tests/vectors/int_video/**' - 'wai/wai-rs/tests/vectors/int_hyper/**' - 'wai/wai-rs/tests/vectors/int_mlicpp/**' - '.github/workflows/wai-byte-equality.yml' push: branches: - main paths: - 'wai/byte-exact-conformance/**' - 'wai/wai-rs/src/neural/int_synth.rs' - 'wai/wai-rs/src/neural/jpegai_mans.rs' # Every source the crate #[path]-includes must be able to fire this # workflow, or a change can break cross-arch equality and merge green. - 'wai/wai-rs/src/int_synth.rs' - 'wai/wai-rs/src/int_entropy.rs' - 'wai/wai-rs/src/jpegai_mans.rs' - 'wai/wai-rs/src/rans.rs' - 'wai/wai-rs/src/int_video.rs' - 'wai/wai-rs/src/int_transform.rs' - 'wai/wai-rs/src/int_hyper_synth.rs' - 'wai/wai-rs/src/int_mlicpp.rs' # The fast kernels int_synth, int_transform and int_hyper_synth dispatch to # by default: the goldens here decode through them. - 'wai/wai-rs/src/int_kernels.rs' - 'wai/wai-rs/tests/vectors/int_video/**' - 'wai/wai-rs/tests/vectors/int_hyper/**' - 'wai/wai-rs/tests/vectors/int_mlicpp/**' - '.github/workflows/wai-byte-equality.yml' jobs: byte-equality: name: ${{ matrix.label }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: # Self-hosted fleet labels, not GitHub-hosted images. macos-x86_64 is # dropped: no Intel-Mac runner exists in the fleet, and by the same # argument the cargo-classes matrix already makes, it adds no arch # coverage — x86_64 is held by linux-x86_64 and windows-x86_64, arm64 # by linux-aarch64 and the macos-arm64 reference. include: - { os: linux, label: linux-x86_64 } - { os: linux-arm64, label: linux-aarch64 } - { os: macos, label: macos-arm64 (reference) } - { os: windows, label: windows-x86_64 } steps: - name: Checkout uses: actions/checkout@v4 # unix: bootstrap rustup (docker image ships no Rust; macOS host has it but # launchd's PATH omits ~/.cargo/bin). Windows is a host executor with rustup # already present, and must use pwsh — its `bash` is the WSL stub. - name: Install Rust 1.98.0 (unix) if: matrix.os != 'windows' shell: bash run: | export PATH="$HOME/.cargo/bin:$PATH" command -v rustup >/dev/null 2>&1 || \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0 rustup toolchain install 1.98.0 --profile minimal rustup default 1.98.0 echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - name: Install Rust 1.98.0 (Windows) if: matrix.os == 'windows' shell: pwsh run: | rustup toolchain install 1.98.0 --profile minimal rustup default 1.98.0 - name: Decode fixtures, assert golden bytes working-directory: wai/byte-exact-conformance run: cargo test --release -- --nocapture