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