#[path = "../../support/workspace_root.rs"]
#[allow(dead_code)]
mod workspace_root;
#[path = "../../support/models_lock_manifest.rs"]
#[allow(dead_code)]
mod models_lock_manifest;
#[allow(unused_imports)]
pub use workspace_root::{checkout_parent, models_root, workspace_root};
use std::path::{Path, PathBuf};
#[allow(dead_code)]
pub const HF_REPO: &str = "FinDIT-Studio/redimnetkit-coreml";
#[allow(dead_code)]
pub const HF_REVISION: &str = "80c2d0a40b0bacc738db2d8607470515afd9d405";
#[allow(dead_code)]
pub const SOURCE_ASSET: &str = "b5-vox2-ft_lm.pt";
#[allow(dead_code)]
pub const SOURCE_ASSET_SHA256: &str =
"8b0c11bbf5a3a8bb39e5c072c4192d0b694d8c447cf126d4cd3c7346a04b39c8";
#[allow(dead_code)]
pub const SOURCE_CODE_REVISION: &str = "ce039a624cb99fe127702ceb94c6080090e5032f";
#[allow(dead_code)]
pub const BUNDLE_NAME: &str = "redimnet_b5.mlmodelc";
#[allow(dead_code)]
pub const VENDOR_DIR: &str = "redimnet";
#[allow(dead_code)]
pub fn artifact_sha256() -> Vec<(String, String)> {
models_lock_manifest::bundle_manifest(
&workspace_root::workspace_root(),
VENDOR_DIR,
HF_REVISION,
BUNDLE_NAME,
)
}
#[allow(dead_code)]
pub fn models_dir() -> PathBuf {
std::env::var_os("IDENTITY_TEST_MODELS").map_or_else(
|| workspace_root::models_root().join("redimnet"),
PathBuf::from,
)
}
#[allow(dead_code)]
pub fn model_path() -> PathBuf {
models_dir().join(BUNDLE_NAME)
}
#[allow(dead_code)]
pub fn sha256_hex(bytes: &[u8]) -> String {
use core::fmt::Write;
use sha2::{Digest, Sha256};
Sha256::digest(bytes)
.iter()
.fold(String::new(), |mut acc, b| {
let _ = write!(acc, "{b:02x}");
acc
})
}
#[allow(dead_code)]
pub fn sha256_file(path: &Path) -> String {
let bytes = std::fs::read(path).unwrap_or_else(|e| panic!("read {path:?}: {e}"));
sha256_hex(&bytes)
}
#[allow(dead_code)]
pub fn collect_files_rel(dir: &Path, prefix: &str, out: &mut Vec<String>) {
let entries = std::fs::read_dir(dir).unwrap_or_else(|e| panic!("read_dir {dir:?}: {e}"));
for entry in entries {
let entry = entry.unwrap_or_else(|e| panic!("dir entry under {dir:?}: {e}"));
let name = entry.file_name().to_string_lossy().into_owned();
if name.starts_with("._") || name == ".DS_Store" {
continue;
}
let rel = if prefix.is_empty() {
name
} else {
format!("{prefix}/{name}")
};
let file_type = entry
.file_type()
.unwrap_or_else(|e| panic!("file_type {:?}: {e}", entry.path()));
if file_type.is_dir() {
collect_files_rel(&entry.path(), &rel, out);
} else {
out.push(rel);
}
}
}
#[allow(dead_code)]
pub fn assert_exact_sha_manifest(dir: &Path, cases: &[(String, String)]) {
use std::collections::BTreeSet;
let mut found = Vec::new();
collect_files_rel(dir, "", &mut found);
let on_disk: BTreeSet<String> = found.into_iter().collect();
let pinned: BTreeSet<String> = cases.iter().map(|(rel, _)| rel.clone()).collect();
if on_disk != pinned {
let missing: Vec<&String> = pinned.difference(&on_disk).collect();
let extra: Vec<&String> = on_disk.difference(&pinned).collect();
panic!(
"artifact manifest mismatch under {dir:?}:\n \
missing (pinned but not on disk): {missing:?}\n \
extra (on disk but not pinned): {extra:?}"
);
}
for (relative, expected) in cases {
assert_eq!(
&sha256_file(&dir.join(relative)),
expected,
"sha256 drift on artifact {relative} under {dir:?}"
);
}
}
#[allow(dead_code)]
pub fn synthetic_window(seed_hz: f64) -> Vec<f32> {
let sr = f64::from(coremlit::audio::identity::SAMPLE_RATE_HZ);
(0..coremlit::audio::identity::WINDOW_SAMPLES)
.map(|i| {
let t = i as f64 / sr;
let env = 0.55 + 0.35 * (core::f64::consts::TAU * 0.9 * t).sin();
let v = 0.6 * (core::f64::consts::TAU * seed_hz * t).sin()
+ 0.3 * (core::f64::consts::TAU * seed_hz * 2.5 * t).sin();
(env * v * 0.5) as f32
})
.collect()
}
#[allow(dead_code)]
pub fn cosine(a: &[f32], b: &[f32]) -> f64 {
let dot: f64 = a
.iter()
.zip(b.iter())
.map(|(x, y)| f64::from(*x) * f64::from(*y))
.sum();
let na = a
.iter()
.map(|x| f64::from(*x) * f64::from(*x))
.sum::<f64>()
.sqrt();
let nb = b
.iter()
.map(|x| f64::from(*x) * f64::from(*x))
.sum::<f64>()
.sqrt();
dot / (na * nb)
}