lnmp_quant/
metrics.rs

1use serde::{Deserialize, Serialize};
2
3/// Metrics and debug information for quantization operations
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5pub struct QuantMetrics {
6    /// Original minimum value in the embedding
7    pub original_min: f32,
8
9    /// Original maximum value in the embedding
10    pub original_max: f32,
11
12    /// Approximate information loss ratio (0.0 = no loss, 1.0 = complete loss)
13    /// Calculated based on quantization error
14    pub loss_ratio: f32,
15}
16
17impl QuantMetrics {
18    /// Creates new quantization metrics
19    pub fn new(original_min: f32, original_max: f32, loss_ratio: f32) -> Self {
20        Self {
21            original_min,
22            original_max,
23            loss_ratio,
24        }
25    }
26
27    /// Returns the dynamic range of the original data
28    pub fn dynamic_range(&self) -> f32 {
29        self.original_max - self.original_min
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_metrics_creation() {
39        let metrics = QuantMetrics::new(-1.0, 1.0, 0.05);
40
41        assert_eq!(metrics.original_min, -1.0);
42        assert_eq!(metrics.original_max, 1.0);
43        assert_eq!(metrics.loss_ratio, 0.05);
44        assert_eq!(metrics.dynamic_range(), 2.0);
45    }
46}