rust_metrics 0.1.4

Incremental evaluation metrics for classification and text generation pipelines.
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Reduction {
    Sum,
    #[default]
    Mean,
    Max,
    Min,
}

#[derive(Debug, Clone, Copy, Default)]
pub struct MetricAggregator {
    reduction: Reduction,
    total: usize,
    sum: f64,
    min: Option<f64>,
    max: Option<f64>,
}

impl MetricAggregator {
    pub fn new(reduction: Reduction) -> Self {
        Self {
            reduction,
            total: 0,
            sum: 0.0,
            min: None,
            max: None,
        }
    }

    pub fn update(&mut self, value: f64) {
        self.total += 1;
        self.sum += value;
        self.min = Some(self.min.map_or(value, |m| m.min(value)));
        self.max = Some(self.max.map_or(value, |m| m.max(value)));
    }
    pub fn reset(&mut self) {
        self.total = 0;
        self.sum = 0.0;
        self.min = None;
        self.max = None;
    }

    pub fn compute(&self) -> Option<f64> {
        if self.total == 0 {
            return None;
        }
        match self.reduction {
            Reduction::Sum => Some(self.sum),
            Reduction::Mean => Some(self.sum / self.total as f64),
            Reduction::Min => self.min,
            Reduction::Max => self.max,
        }
    }
}