#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HlLayerType { Attention, Linear }
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl001Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_partition(layer_types: &[HlLayerType], num_hidden_layers: u64) -> Hl001Verdict {
if num_hidden_layers == 0 { return Hl001Verdict::Fail; }
if layer_types.len() as u64 != num_hidden_layers { return Hl001Verdict::Fail; }
Hl001Verdict::Pass
}
pub const AC_HL_002_TOLERANCE: f32 = 1.0e-3;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl002Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_associativity(left_grouping: &[f32], right_grouping: &[f32]) -> Hl002Verdict {
if left_grouping.is_empty() || right_grouping.is_empty() { return Hl002Verdict::Fail; }
if left_grouping.len() != right_grouping.len() { return Hl002Verdict::Fail; }
for (&a, &b) in left_grouping.iter().zip(right_grouping.iter()) {
if !a.is_finite() || !b.is_finite() { return Hl002Verdict::Fail; }
if (a - b).abs() > AC_HL_002_TOLERANCE { return Hl002Verdict::Fail; }
}
Hl002Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl003Verdict { Pass, Fail }
#[must_use]
pub const fn verdict_from_head_grouping(n_v: u64, n_k: u64) -> Hl003Verdict {
if n_k == 0 || n_v == 0 { return Hl003Verdict::Fail; }
if n_v < n_k { return Hl003Verdict::Fail; }
if !n_v.is_multiple_of(n_k) { return Hl003Verdict::Fail; }
Hl003Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl004Verdict { Pass, Fail }
#[must_use]
pub const fn verdict_from_o_proj_shape(o_out_dim: u64, hidden_dim: u64) -> Hl004Verdict {
if hidden_dim == 0 || o_out_dim == 0 { return Hl004Verdict::Fail; }
if o_out_dim == hidden_dim { Hl004Verdict::Pass } else { Hl004Verdict::Fail }
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl005Verdict { Pass, Fail }
#[must_use]
pub const fn verdict_from_conv1d_causal(
input_len: u64,
output_len: u64,
kernel_size: u64,
padding: u64,
) -> Hl005Verdict {
if input_len == 0 || kernel_size == 0 { return Hl005Verdict::Fail; }
if padding + 1 != kernel_size { return Hl005Verdict::Fail; }
if output_len != input_len { return Hl005Verdict::Fail; }
Hl005Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hl006Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_simd_parity(scalar: &[f32], simd: &[f32]) -> Hl006Verdict {
if scalar.is_empty() || simd.is_empty() { return Hl006Verdict::Fail; }
if scalar.len() != simd.len() { return Hl006Verdict::Fail; }
for (&s, &v) in scalar.iter().zip(simd.iter()) {
if !s.is_finite() || !v.is_finite() { return Hl006Verdict::Fail; }
if s.to_bits() != v.to_bits() { return Hl006Verdict::Fail; }
}
Hl006Verdict::Pass
}
#[cfg(test)]
mod tests {
use super::*;
#[test] fn hl001_pass_full_attention() {
let lt = vec![HlLayerType::Attention; 32];
assert_eq!(verdict_from_partition(<, 32), Hl001Verdict::Pass);
}
#[test] fn hl001_pass_hybrid_alternating() {
let mut lt = Vec::with_capacity(32);
for i in 0..32 {
lt.push(if i % 4 == 0 { HlLayerType::Attention } else { HlLayerType::Linear });
}
assert_eq!(verdict_from_partition(<, 32), Hl001Verdict::Pass);
}
#[test] fn hl001_fail_length_mismatch() {
let lt = vec![HlLayerType::Linear; 30];
assert_eq!(verdict_from_partition(<, 32), Hl001Verdict::Fail);
}
#[test] fn hl001_fail_zero_layers() {
assert_eq!(verdict_from_partition(&[], 0), Hl001Verdict::Fail);
}
#[test] fn hl002_pass_identical_groupings() {
let a = vec![1.0_f32, 2.0, 3.0, 4.0];
let b = vec![1.0_f32, 2.0, 3.0, 4.0];
assert_eq!(verdict_from_associativity(&a, &b), Hl002Verdict::Pass);
}
#[test] fn hl002_pass_within_tolerance() {
let a = vec![1.0_f32, 2.0, 3.0];
let b = vec![1.0_f32 + 1e-5, 2.0 - 1e-5, 3.0]; assert_eq!(verdict_from_associativity(&a, &b), Hl002Verdict::Pass);
}
#[test] fn hl002_fail_above_tolerance() {
let a = vec![1.0_f32, 2.0, 3.0];
let b = vec![1.0_f32, 2.0 + 0.5, 3.0]; assert_eq!(verdict_from_associativity(&a, &b), Hl002Verdict::Fail);
}
#[test] fn hl002_fail_length_mismatch() {
let a = vec![1.0_f32, 2.0];
let b = vec![1.0_f32, 2.0, 3.0];
assert_eq!(verdict_from_associativity(&a, &b), Hl002Verdict::Fail);
}
#[test] fn hl002_fail_nan() {
let a = vec![1.0_f32, f32::NAN];
let b = vec![1.0_f32, 2.0];
assert_eq!(verdict_from_associativity(&a, &b), Hl002Verdict::Fail);
}
#[test] fn hl003_pass_qwen35_canonical() {
assert_eq!(verdict_from_head_grouping(4, 4), Hl003Verdict::Pass);
}
#[test] fn hl003_pass_2to1() {
assert_eq!(verdict_from_head_grouping(8, 4), Hl003Verdict::Pass);
}
#[test] fn hl003_pass_8to1() {
assert_eq!(verdict_from_head_grouping(32, 4), Hl003Verdict::Pass);
}
#[test] fn hl003_fail_indivisible() {
assert_eq!(verdict_from_head_grouping(6, 4), Hl003Verdict::Fail);
}
#[test] fn hl003_fail_n_v_below_n_k() {
assert_eq!(verdict_from_head_grouping(2, 4), Hl003Verdict::Fail);
}
#[test] fn hl003_fail_zero() {
assert_eq!(verdict_from_head_grouping(0, 4), Hl003Verdict::Fail);
assert_eq!(verdict_from_head_grouping(4, 0), Hl003Verdict::Fail);
}
#[test] fn hl004_pass_match() {
assert_eq!(verdict_from_o_proj_shape(4096, 4096), Hl004Verdict::Pass);
}
#[test] fn hl004_fail_drift() {
assert_eq!(verdict_from_o_proj_shape(3584, 4096), Hl004Verdict::Fail);
}
#[test] fn hl004_fail_zero() {
assert_eq!(verdict_from_o_proj_shape(0, 4096), Hl004Verdict::Fail);
}
#[test] fn hl005_pass_kernel_4() {
assert_eq!(verdict_from_conv1d_causal(128, 128, 4, 3), Hl005Verdict::Pass);
}
#[test] fn hl005_pass_kernel_1() {
assert_eq!(verdict_from_conv1d_causal(64, 64, 1, 0), Hl005Verdict::Pass);
}
#[test] fn hl005_fail_wrong_padding() {
assert_eq!(verdict_from_conv1d_causal(128, 128, 4, 2), Hl005Verdict::Fail);
}
#[test] fn hl005_fail_length_drift() {
assert_eq!(verdict_from_conv1d_causal(128, 127, 4, 3), Hl005Verdict::Fail);
}
#[test] fn hl005_fail_zero_input() {
assert_eq!(verdict_from_conv1d_causal(0, 0, 4, 3), Hl005Verdict::Fail);
}
#[test] fn hl006_pass_identical() {
let a = vec![1.0_f32; 64];
assert_eq!(verdict_from_simd_parity(&a, &a), Hl006Verdict::Pass);
}
#[test] fn hl006_fail_one_ulp_off() {
let a = vec![1.0_f32];
let b = vec![f32::from_bits(1.0_f32.to_bits() + 1)];
assert_eq!(verdict_from_simd_parity(&a, &b), Hl006Verdict::Fail);
}
#[test] fn hl006_fail_length_mismatch() {
let a = vec![1.0_f32];
let b = vec![1.0_f32, 2.0];
assert_eq!(verdict_from_simd_parity(&a, &b), Hl006Verdict::Fail);
}
#[test] fn hl006_fail_nan() {
let a = vec![f32::NAN];
let b = vec![f32::NAN];
assert_eq!(verdict_from_simd_parity(&a, &b), Hl006Verdict::Fail);
}
#[test] fn provenance_constants() {
assert!((AC_HL_002_TOLERANCE - 1.0e-3).abs() < 1e-9);
}
}