light_curve_feature/
float_trait.rs1use 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
23pub 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}