light_curve_feature/
float_trait.rs

1use crate::periodogram::FftwFloat;
2
3use conv::prelude::*;
4use lazy_static::lazy_static;
5use ndarray::{Array0, ScalarOperand};
6use num_traits::{FromPrimitive, float::Float as NumFloat, float::FloatConst};
7use schemars::JsonSchema;
8use serde::Serialize;
9use serde::de::DeserializeOwned;
10use std::cmp::PartialOrd;
11use std::fmt::{Debug, Display, LowerExp};
12use std::iter::Sum;
13use std::ops::{AddAssign, DivAssign, MulAssign};
14
15lazy_static! {
16    static ref ARRAY0_UNITY_F32: Array0<f32> = Array0::from_elem((), 1.0);
17}
18
19lazy_static! {
20    static ref ARRAY0_UNITY_F64: Array0<f64> = Array0::from_elem((), 1.0);
21}
22
23/// Floating number trait, it is implemented for [f32] and [f64] only
24pub trait Float:
25    'static
26    + Sized
27    + NumFloat
28    + FloatConst
29    + FromPrimitive
30    + PartialOrd
31    + Sum
32    + ValueFrom<u32>
33    + ValueFrom<usize>
34    + ValueFrom<f32>
35    + ValueInto<f64>
36    + ApproxFrom<usize>
37    + ApproxFrom<f64>
38    + ApproxInto<u32, RoundToNearest>
39    + ApproxInto<usize, RoundToNearest>
40    + ApproxInto<f32>
41    + ApproxInto<f64>
42    + Clone
43    + Copy
44    + Send
45    + Sync
46    + AddAssign
47    + MulAssign
48    + DivAssign
49    + ScalarOperand
50    + Display
51    + Debug
52    + LowerExp
53    + FftwFloat
54    + DeserializeOwned
55    + Serialize
56    + JsonSchema
57{
58    fn half() -> Self;
59    fn two() -> Self;
60    fn three() -> Self;
61    fn four() -> Self;
62    fn five() -> Self;
63    fn ten() -> Self;
64    fn hundred() -> Self;
65    fn array0_unity() -> &'static Array0<Self>;
66}
67
68impl Float for f32 {
69    #[inline]
70    fn half() -> Self {
71        0.5
72    }
73
74    #[inline]
75    fn two() -> Self {
76        2.0
77    }
78
79    #[inline]
80    fn three() -> Self {
81        3.0
82    }
83
84    #[inline]
85    fn four() -> Self {
86        4.0
87    }
88
89    #[inline]
90    fn five() -> Self {
91        5.0
92    }
93
94    #[inline]
95    fn ten() -> Self {
96        10.0
97    }
98
99    #[inline]
100    fn hundred() -> Self {
101        100.0
102    }
103
104    fn array0_unity() -> &'static Array0<Self> {
105        &ARRAY0_UNITY_F32
106    }
107}
108
109impl Float for f64 {
110    #[inline]
111    fn half() -> Self {
112        0.5
113    }
114
115    #[inline]
116    fn two() -> Self {
117        2.0
118    }
119
120    #[inline]
121    fn three() -> Self {
122        3.0
123    }
124
125    #[inline]
126    fn four() -> Self {
127        4.0
128    }
129
130    #[inline]
131    fn five() -> Self {
132        5.0
133    }
134
135    #[inline]
136    fn ten() -> Self {
137        10.0
138    }
139
140    #[inline]
141    fn hundred() -> Self {
142        100.0
143    }
144
145    fn array0_unity() -> &'static Array0<Self> {
146        &ARRAY0_UNITY_F64
147    }
148}