yscv-eval 0.1.8

Evaluation metrics (mAP, MOTA, HOTA) and dataset adapters
Documentation
use crate::EvalError;

pub(crate) fn safe_ratio(numerator: u64, denominator: u64) -> f32 {
    if denominator == 0 {
        0.0
    } else {
        numerator as f32 / denominator as f32
    }
}

pub(crate) fn harmonic_mean(a: f32, b: f32) -> f32 {
    let denom = a + b;
    if denom == 0.0 {
        0.0
    } else {
        2.0 * a * b / denom
    }
}

pub(crate) fn validate_iou_threshold(value: f32) -> Result<(), EvalError> {
    if !value.is_finite() || !(0.0..=1.0).contains(&value) {
        return Err(EvalError::InvalidIouThreshold { value });
    }
    Ok(())
}

pub(crate) fn validate_score_threshold(value: f32) -> Result<(), EvalError> {
    if !value.is_finite() || !(0.0..=1.0).contains(&value) {
        return Err(EvalError::InvalidScoreThreshold { value });
    }
    Ok(())
}