light_curve_feature/
feature.rs1use crate::data::TimeSeries;
2use crate::evaluator::*;
3use crate::extractor::FeatureExtractor;
4use crate::features::*;
5use crate::float_trait::Float;
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 Chi2Pvar,
31 Cusum,
32 Duration,
33 Eta,
34 EtaE,
35 ExcessVariance,
36 InterPercentileRange,
37 Kurtosis,
38 LaflerKinmanStringLength,
39 LinearFit,
40 LinearTrend,
41 LinexpFit,
42 MagnitudePercentageRatio,
43 MaximumSlope,
44 MaximumTimeInterval,
45 MinimumTimeInterval,
46 Mean,
47 MeanVariance,
48 Median,
49 MedianAbsoluteDeviation,
50 MedianBufferRangePercentage(MedianBufferRangePercentage<T>),
51 ObservationCount,
52 OtsuSplit,
53 PercentAmplitude,
54 PercentDifferenceMagnitudePercentile,
55 Periodogram(Periodogram<T, Self>),
56 _PeriodogramPeaks(PeriodogramPeaks),
57 ReducedChi2,
58 Roms,
59 Skew,
60 StandardDeviation,
61 StetsonK,
62 TimeMean,
63 TimeStandardDeviation,
64 Transformed(Transformed<T, Self, Transformer<T>>),
65 VillarFit,
66 WeightedMean,
67}
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72
73 #[test]
74 fn test_feature_partial_eq() {
75 let amplitude1: Feature<f64> = Amplitude::default().into();
77 let amplitude2: Feature<f64> = Amplitude::default().into();
78 assert_eq!(amplitude1, amplitude2);
79
80 let mean1: Feature<f64> = Mean::default().into();
81 let mean2: Feature<f64> = Mean::default().into();
82 assert_eq!(mean1, mean2);
83
84 assert_ne!(amplitude1, mean1);
86
87 let beyond1: Feature<f64> = BeyondNStd::default().into();
89 let beyond2: Feature<f64> = BeyondNStd::default().into();
90 assert_eq!(beyond1, beyond2);
91
92 let beyond3: Feature<f64> = BeyondNStd::new(2.0).into();
93 assert_ne!(beyond1, beyond3);
94 }
95}