yscv-recognize 0.1.8

Face/object recognition with cosine matching and VP-Tree ANN
Documentation
use yscv_tensor::Tensor;

use super::RecognizeError;

pub(crate) fn validate_threshold(threshold: f32) -> Result<(), RecognizeError> {
    if !threshold.is_finite() || !(-1.0..=1.0).contains(&threshold) {
        return Err(RecognizeError::InvalidThreshold { value: threshold });
    }
    Ok(())
}

pub(crate) fn validate_embedding(embedding: &Tensor) -> Result<(), RecognizeError> {
    if embedding.rank() != 1 {
        return Err(RecognizeError::InvalidEmbeddingShape {
            got: embedding.shape().to_vec(),
        });
    }
    validate_embedding_slice(embedding.data())
}

pub(crate) fn validate_embedding_slice(embedding: &[f32]) -> Result<(), RecognizeError> {
    if embedding.is_empty() {
        return Err(RecognizeError::EmptyEmbedding);
    }
    for (index, value) in embedding.iter().enumerate() {
        if !value.is_finite() {
            return Err(RecognizeError::NonFiniteEmbeddingValue { index });
        }
    }
    Ok(())
}