//! `wai.video.int_hyper` on the full pretrained model — a real 256×256 clip whose //! I-frame is the byte-exact `int_hyper` decode of the pretrained mbt2018_mean //! (exported to integers), panned into P-frames by integer motion compensation. //! Reads the int_hyper vector + the panned-clip bitstream from `WAI_SOTA_INT_DIR` //! (default `/tmp/sota_int`), regenerated by `tools/wai_sota_vectors.sh` (the //! model is too large to commit). CI (`wai-sota-vectors.yml`) regenerates them and //! runs this with `WAI_REQUIRE_SOTA_VECTORS=1`, so an absent vector fails there; //! locally it skips loudly. A `WAI_SOTA_INT_DIR` naming a directory that does not //! exist, or one missing a file this test reads, fails either way. The committed //! 16×16 `int_video_keyframe` test is the never-skip companion. #![cfg(all(feature = "neural_int", feature = "video_int"))] #[path = "support/require_vectors.rs"] mod require_vectors; use require_vectors::{env_dir, load_all}; use wai::int_hyper_synth::{decode_conditional_checked, CondBitstream, CondEntropy, IntModel}; use wai::int_video::{decode_pframes, fnv1a}; fn hex16(s: &str) -> [u8; 8] { let mut o = [0u8; 8]; for (i, b) in o.iter_mut().enumerate() { *b = u8::from_str_radix(&s[i * 2..i * 2 + 2], 16).unwrap(); } o } #[test] fn sota_int_hyper_keyframe_clip_decodes_byte_for_byte() { const TEST: &str = "int_video_sota_keyframe::sota_int_hyper_keyframe_clip_decodes_byte_for_byte"; const PRODUCE: &str = "tools/wai_sota_vectors.sh (then WAI_SOTA_INT_DIR=, default /tmp/sota_int)"; let d = env_dir(TEST, "WAI_SOTA_INT_DIR", "/tmp/sota_int", PRODUCE); let Some([g, hh, e, b, vb, conf]) = load_all( TEST, &d, [ "int_synth_sota_model.json", "int_hs_model.json", "cond_entropy.json", "cond_bitstream.json", "video_sota_bitstream.json", "video_sota.json", ], PRODUCE, ) else { return; }; // frame 0: the int_hyper learned I-frame (byte-exact 256×256 photo). let g_s = IntModel::from_json(&g); let h_s = IntModel::from_json(&hh); let ent = CondEntropy::from_value(&e); let bs = CondBitstream::from_value(&b); let (frame0, h, w) = decode_conditional_checked(&g_s, &h_s, &ent, &bs.stream()).expect("int_hyper I-frame"); // frames 1..N: integer motion-compensated P-frames panning the keyframe. let clip = decode_pframes(&frame0, h, w, &vb).expect("p-frames"); let want = conf["frame_hashes"].as_array().unwrap(); assert_eq!(clip.frames.len(), want.len()); assert_eq!(format!("{:016x}", fnv1a(&frame0)), want[0].as_str().unwrap(), "I-frame = int_hyper decode"); let mut all = Vec::new(); for (i, frame) in clip.frames.iter().enumerate() { let got = format!("{:016x}", fnv1a(frame)); assert_eq!(got, want[i].as_str().unwrap(), "frame {i} byte-for-byte"); all.extend_from_slice(&hex16(&got)); } assert_eq!(format!("{:016x}", fnv1a(&all)), conf["clip_hash"].as_str().unwrap(), "clip hash"); println!("int_hyper-keyframe video (pretrained model): {} frames {h}x{w}, I-frame={} (learned), clip {}", clip.frames.len(), &want[0].as_str().unwrap()[..8], conf["clip_hash"].as_str().unwrap()); }