tf_idf_vectorizer/utils/
normalizer.rs

1use half::f16;
2
3pub trait DeNormalizer {
4    fn denormalize(&self, denormalize_num: f64) -> f64;
5}
6
7impl DeNormalizer for f64 {
8    #[inline]
9    fn denormalize(&self, denormalize_num: f64) -> f64 {
10        self * denormalize_num
11    }
12}
13
14impl DeNormalizer for f32 {
15    #[inline]
16    fn denormalize(&self, denormalize_num: f64) -> f64 {
17        (*self as f64) * denormalize_num
18    }
19}
20
21impl DeNormalizer for f16 {
22    #[inline]
23    fn denormalize(&self, denormalize_num: f64) -> f64 {
24        const F16_TO_F64: f64 = 1.0 / 65504.0; // f16 max value
25        (self.to_f64()) * F16_TO_F64 * denormalize_num
26    }
27}
28
29impl DeNormalizer for u8 {
30    #[inline]
31    fn denormalize(&self, denormalize_num: f64) -> f64 {
32        const DIV_MAX: f64 = 1.0 / (u8::MAX as f64);
33        (*self as f64) * DIV_MAX * denormalize_num
34    }
35}
36
37impl DeNormalizer for u16 {
38    #[inline]
39    fn denormalize(&self, denormalize_num: f64) -> f64 {
40        const DIV_MAX: f64 = 1.0 / (u16::MAX as f64);
41        (*self as f64) * DIV_MAX * denormalize_num
42    }
43}
44
45impl DeNormalizer for u32 {
46    #[inline]
47    fn denormalize(&self, denormalize_num: f64) -> f64 {
48        const DIV_MAX: f64 = 1.0 / (u32::MAX as f64);
49        (*self as f64) * DIV_MAX * denormalize_num
50    }
51}
52
53impl DeNormalizer for u64 {
54    #[inline]
55    fn denormalize(&self, denormalize_num: f64) -> f64 {
56        const DIV_MAX: f64 = 1.0 / (u64::MAX as f64);
57        (*self as f64) * DIV_MAX * denormalize_num
58    }
59}