tf_idf_vectorizer/utils/
normalizer.rs1use 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}