tf_idf_vectorizer/utils/
normalizer.rs

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