1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#[macro_export]
macro_rules! lazy_info {
(
$name: ident,
size: $size: expr,
min_ts_length: $len: expr,
t_required: $t: expr,
m_required: $m: expr,
w_required: $w: expr,
sorting_required: $sort: expr,
) => {
lazy_static! {
static ref $name: EvaluatorInfo = EvaluatorInfo {
size: $size,
min_ts_length: $len,
t_required: $t,
m_required: $m,
w_required: $w,
sorting_required: $sort,
};
}
};
}
#[macro_export]
macro_rules! feat_extr{
( $( $x: expr ),* $(,)? ) => {
FeatureExtractor::new(
vec![$(
Box::new($x),
)*]
)
}
}
#[macro_export]
macro_rules! transformer_eval {
() => {
fn eval(&self, ts: &mut TimeSeries<T>) -> Result<Vec<T>, EvaluatorError> {
let tmw = self.transform_ts(ts)?;
let mut new_ts = TimeSeries::new(&tmw.t, &tmw.m, tmw.w.as_ref().map(|w| &w[..]));
self.feature_extractor.eval(&mut new_ts)
}
fn eval_or_fill(&self, ts: &mut TimeSeries<T>, fill_value: T) -> Vec<T> {
let tmw = match self.transform_ts(ts) {
Ok(x) => x,
Err(_) => return vec![fill_value; self.size_hint()],
};
let mut new_ts = TimeSeries::new(&tmw.t, &tmw.m, tmw.w.as_ref().map(|w| &w[..]));
self.feature_extractor.eval_or_fill(&mut new_ts, fill_value)
}
fn get_info(&self) -> &EvaluatorInfo {
&self.info
}
fn get_names(&self) -> Vec<&str> {
self.feature_names
.iter()
.map(|name| name.as_str())
.collect()
}
fn get_descriptions(&self) -> Vec<&str> {
self.feature_descriptions
.iter()
.map(|desc| desc.as_str())
.collect()
}
};
}