light_curve_feature/features/
time_mean.rs1use crate::evaluator::*;
2
3macro_const! {
4 const DOC: &'static str = r"
5Mean time
6
7$$
8\langle t \rangle \equiv \frac1{N} \sum_i {t_i}.
9$$
10
11Note: highly cadence-dependent feature.
12
13- Depends on: **time**
14- Minimum number of observations: **1**
15- Number of features: **1**
16";
17}
18
19#[doc = DOC!()]
20#[derive(Clone, Default, Debug, Deserialize, Serialize, JsonSchema)]
21pub struct TimeMean {}
22
23impl TimeMean {
24 pub fn new() -> Self {
25 Self {}
26 }
27
28 pub const fn doc() -> &'static str {
29 DOC
30 }
31}
32
33lazy_info!(
34 TIME_MEAN_INFO,
35 TimeMean,
36 size: 1,
37 min_ts_length: 1,
38 t_required: true,
39 m_required: false,
40 w_required: false,
41 sorting_required: false,
42);
43impl FeatureNamesDescriptionsTrait for TimeMean {
44 fn get_names(&self) -> Vec<&str> {
45 vec!["time_mean"]
46 }
47
48 fn get_descriptions(&self) -> Vec<&str> {
49 vec!["mean of time moments"]
50 }
51}
52impl<T> FeatureEvaluator<T> for TimeMean
53where
54 T: Float,
55{
56 fn eval(&self, ts: &mut TimeSeries<T>) -> Result<Vec<T>, EvaluatorError> {
57 self.check_ts_length(ts)?;
58 Ok(vec![ts.t.get_mean()])
59 }
60}
61
62#[cfg(test)]
63#[allow(clippy::unreadable_literal)]
64#[allow(clippy::excessive_precision)]
65mod tests {
66 use super::*;
67 use crate::tests::*;
68
69 check_feature!(TimeMean);
70
71 feature_test!(
72 time_mean,
73 [TimeMean::new()],
74 [14.0],
75 [1.0_f32, 1.0, 1.0, 1.0, 5.0, 6.0, 6.0, 6.0, 99.0],
76 );
77}