light_curve_feature/
feature.rs1use crate::evaluator::*;
2use crate::extractor::FeatureExtractor;
3use crate::features::*;
4use crate::float_trait::Float;
5use crate::time_series::TimeSeries;
6use crate::transformers::Transformer;
7
8use enum_dispatch::enum_dispatch;
9use std::fmt::Debug;
10
11#[enum_dispatch(FeatureEvaluator<T>, FeatureNamesDescriptionsTrait, EvaluatorInfoTrait)]
15#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema, PartialEq)]
16#[serde(bound = "T: Float")]
17#[non_exhaustive]
18pub enum Feature<T>
19where
20 T: Float,
21{
22 FeatureExtractor(FeatureExtractor<T, Self>),
24 Amplitude,
26 AndersonDarlingNormal,
27 Bins(Bins<T, Self>),
28 BazinFit,
29 BeyondNStd(BeyondNStd<T>),
30 Cusum,
31 Duration,
32 Eta,
33 EtaE,
34 ExcessVariance,
35 InterPercentileRange,
36 Kurtosis,
37 LinearFit,
38 LinearTrend,
39 LinexpFit,
40 MagnitudePercentageRatio,
41 MaximumSlope,
42 MaximumTimeInterval,
43 MinimumTimeInterval,
44 Mean,
45 MeanVariance,
46 Median,
47 MedianAbsoluteDeviation,
48 MedianBufferRangePercentage(MedianBufferRangePercentage<T>),
49 ObservationCount,
50 OtsuSplit,
51 PercentAmplitude,
52 PercentDifferenceMagnitudePercentile,
53 Periodogram(Periodogram<T, Self>),
54 _PeriodogramPeaks,
55 ReducedChi2,
56 Roms,
57 Skew,
58 StandardDeviation,
59 StetsonK,
60 TimeMean,
61 TimeStandardDeviation,
62 Transformed(Transformed<T, Self, Transformer<T>>),
63 VillarFit,
64 WeightedMean,
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_feature_partial_eq() {
73 let amplitude1: Feature<f64> = Amplitude::default().into();
75 let amplitude2: Feature<f64> = Amplitude::default().into();
76 assert_eq!(amplitude1, amplitude2);
77
78 let mean1: Feature<f64> = Mean::default().into();
79 let mean2: Feature<f64> = Mean::default().into();
80 assert_eq!(mean1, mean2);
81
82 assert_ne!(amplitude1, mean1);
84
85 let beyond1: Feature<f64> = BeyondNStd::default().into();
87 let beyond2: Feature<f64> = BeyondNStd::default().into();
88 assert_eq!(beyond1, beyond2);
89
90 let beyond3: Feature<f64> = BeyondNStd::new(2.0).into();
91 assert_ne!(beyond1, beyond3);
92 }
93}