//! The measurement of extensions/opus-dred.md §6, on the draft's own test vectors //! ([DRED-Test-Vectors], draft-ietf-mlcodec-opus-dred-07 §7.1): every record of every DRED bit //! file decoded through the integer profile and through the floating-point network, each //! compared with the reference features the draft ships, and with each other, by the draft's //! feature comparison (§4.1) and by the figures §6 adds. And every packet of every packet file //! that carries DRED, its DRED found and decoded both ways. //! //! `WAI_DRED_WEIGHTS` names the weights file and `WAI_DRED_VECTORS` the unpacked test vectors //! (`live-conformance/dred/fetch.sh vectors`). Without them the test fails rather than //! pass without measuring. It prints every figure, and holds the integer profile to the draft's //! thresholds against the reference features and §6's figures to the extension's table. use std::path::PathBuf; use wai::dred_exact::float_ref::FloatModel; use wai::dred_exact::measure::{self, Stats}; use wai::dred_exact::{packet, payload, weights, Model}; fn env(k: &str) -> String { std::env::var(k).unwrap_or_else(|_| panic!("{k} must be set: bash wai/live-conformance/dred/fetch.sh vectors")) } fn fmt(s: &Stats) -> String { format!( "frames {} total {:.4} max {:.4} pitch {:.5} | max|d| {:.4} pitch max|d| {:.4} | band LSD mean {:.4} dB max {:.4} dB", s.frames, s.draft.total, s.draft.max, s.draft.pitch, s.max_abs, s.max_abs_pitch, s.lsd_mean_db, s.lsd_max_db ) } #[test] fn the_profile_against_the_floating_point_network() { let wbytes = std::fs::read(env("WAI_DRED_WEIGHTS")).unwrap(); let layers = weights::pinned(&wbytes).unwrap(); let model = Model::from_layers(&layers).unwrap(); let float = FloatModel::new(&layers); let int8 = FloatModel::int8_reference(&layers, &weights::parse(&wbytes).unwrap()); let dir = PathBuf::from(env("WAI_DRED_VECTORS")).join("dred_testvectors"); let (mut all_int, mut all_flt, mut all_ref, mut all_q8) = (Vec::new(), Vec::new(), Vec::new(), Vec::new()); for v in 1..=8 { let bits = std::fs::read(dir.join(format!("vector{v}_dred.bit"))).unwrap(); let reference = measure::read_features(&std::fs::read(dir.join(format!("vector{v}_dred_dec.f32"))).unwrap()).unwrap(); let (mut int_rows, mut flt_rows, mut q8_rows) = (Vec::new(), Vec::new(), Vec::new()); for r in measure::read_dred_bits(&bits).unwrap() { let p = measure::record_payload(&r).unwrap(); let n = r.chunks / 2; int_rows.extend(measure::oldest_first(&measure::rows_f64(&model.decode(&p, n).unwrap()))); flt_rows.extend(measure::oldest_first(&float.decode(&p, n))); q8_rows.extend(measure::oldest_first(&int8.decode(&p, n))); } assert_eq!(int_rows.len(), reference.len(), "vector {v}"); let ir = measure::stats(&reference, &int_rows); println!("dred-measure vector{v} integer vs reference: {}", fmt(&ir)); println!("dred-measure vector{v} float vs reference: {}", fmt(&measure::stats(&reference, &flt_rows))); println!("dred-measure vector{v} integer vs float: {}", fmt(&measure::stats(&flt_rows, &int_rows))); println!("dred-measure vector{v} 8-bit vs reference: {}", fmt(&measure::stats(&reference, &q8_rows))); assert!(ir.draft.passes(), "vector {v}: the integer profile passes the draft's feature test against its reference features"); // Informative: the reference implementation's own outputs on this machine, when // `WAI_DRED_REFOUT` names a directory of them (`v_float.f32` from a build with its // float weights, `v_default.f32` from its default build), compared with both decodes. if let Ok(d) = std::env::var("WAI_DRED_REFOUT") { for build in ["float", "default"] { if let Some(r) = std::fs::read(PathBuf::from(&d).join(format!("v{v}_{build}.f32"))).ok().and_then(|b| measure::read_features(&b)) { println!("dred-measure vector{v} reference {build} build vs test vector: {}", fmt(&measure::stats(&reference, &r))); println!("dred-measure vector{v} integer vs reference {build} build: {}", fmt(&measure::stats(&r, &int_rows))); println!("dred-measure vector{v} float vs reference {build} build: {}", fmt(&measure::stats(&r, &flt_rows))); } } } all_q8.extend(q8_rows); all_int.extend(int_rows); all_flt.extend(flt_rows); all_ref.extend(reference); } let (ir, fr, iff) = (measure::stats(&all_ref, &all_int), measure::stats(&all_ref, &all_flt), measure::stats(&all_flt, &all_int)); println!("dred-measure all integer vs reference: {}", fmt(&ir)); println!("dred-measure all float vs reference: {}", fmt(&fr)); println!("dred-measure all integer vs float: {}", fmt(&iff)); let q8 = measure::stats(&all_ref, &all_q8); println!("dred-measure all 8-bit vs reference: {}", fmt(&q8)); // The packet files: every packet that carries DRED, its DRED decoded both ways. let (mut pk_int, mut pk_flt, mut with_dred, mut packets) = (Vec::new(), Vec::new(), 0usize, 0usize); for v in 1..=8 { let b = std::fs::read(dir.join(format!("vector{v}_opus.bit"))).unwrap(); for p in measure::read_packets(&b).unwrap().into_iter().flatten() { packets += 1; let Some((bytes, _)) = packet::find_dred(&p).unwrap() else { continue }; let pl = payload::parse(bytes, None).unwrap(); with_dred += 1; pk_int.extend(measure::rows_f64(&model.decode(&pl, usize::MAX).unwrap())); pk_flt.extend(float.decode(&pl, usize::MAX)); } } let pk = measure::stats(&pk_flt, &pk_int); println!("dred-measure packets: {packets} received, {with_dred} carry DRED; integer vs float: {}", fmt(&pk)); assert!(with_dred > 0); // The extension's §6 table states these figures, to the digits it prints. let text = std::fs::read_to_string(PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../extensions/opus-dred.md")).unwrap(); for (label, s) in [("integer, reference", &ir), ("float, reference", &fr), ("8-bit emulation, reference", &q8), ("integer, float", &iff), ("integer, float (packets)", &pk)] { let row = format!("| {label} | {} | {:.4} | {:.4} | {:.5} | {:.4} | {:.4} | {:.4} |", s.frames, s.draft.total, s.draft.max, s.draft.pitch, s.max_abs, s.lsd_mean_db, s.lsd_max_db); println!("{row}"); assert!(text.contains(&row), "extensions/opus-dred.md §6 states: {row}"); } }