vyre 0.4.0

GPU compute intermediate representation with a standard operation library
Documentation
use crate::ops::string_similarity::validation::{to_u32, validate_pair, SimilarityError};

// CPU reference kernel for `string_similarity.hamming`.


/// Compute Hamming distance over equal-length byte strings.
///
/// # Errors
///
/// Returns `Fix: ...` when inputs exceed caps or have unequal lengths.
pub fn hamming(a: &[u8], b: &[u8]) -> Result<u32, SimilarityError> {
    validate_pair(a, b)?;
    if a.len() != b.len() {
        return Err(format!(
            "Fix: hamming distance requires equal-length inputs, got len(a)={} len(b)={}",
            a.len(),
            b.len()
        ));
    }
    let distance = a.iter().zip(b).filter(|(left, right)| left != right).count();
    to_u32(distance, "hamming distance")
}

// Backend-specific lowering marker.

// WGSL lowering source for `string_similarity.hamming`.

/// Parallel Hamming distance kernel used by GPU parity tests and intrinsic dispatch.
pub const WGSL: &str = concat!(
    include_str!("../wgsl/common_params.wgsl"),
    "\n",
    include_str!("wgsl/hamming.wgsl"),
);