Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-compute/src/rolling/moment.rs
6939 views
1
use super::RollingFnParams;
2
use crate::moment::{KurtosisState, SkewState, VarState};
3
4
pub trait StateUpdate {
5
fn new(params: Option<RollingFnParams>) -> Self;
6
fn insert_one(&mut self, x: f64);
7
8
fn remove_one(&mut self, x: f64);
9
10
fn finalize(&self) -> Option<f64>;
11
}
12
13
pub struct VarianceMoment {
14
state: VarState,
15
ddof: u8,
16
}
17
18
impl StateUpdate for VarianceMoment {
19
fn new(params: Option<RollingFnParams>) -> Self {
20
let ddof = if let Some(RollingFnParams::Var(params)) = params {
21
params.ddof
22
} else {
23
1
24
};
25
26
Self {
27
state: VarState::default(),
28
ddof,
29
}
30
}
31
32
fn insert_one(&mut self, x: f64) {
33
self.state.insert_one(x);
34
}
35
36
fn remove_one(&mut self, x: f64) {
37
self.state.remove_one(x);
38
}
39
fn finalize(&self) -> Option<f64> {
40
self.state.finalize(self.ddof)
41
}
42
}
43
44
pub struct KurtosisMoment {
45
state: KurtosisState,
46
fisher: bool,
47
bias: bool,
48
}
49
50
impl StateUpdate for KurtosisMoment {
51
fn new(params: Option<RollingFnParams>) -> Self {
52
let (fisher, bias) = if let Some(RollingFnParams::Kurtosis { fisher, bias }) = params {
53
(fisher, bias)
54
} else {
55
(false, false)
56
};
57
58
Self {
59
state: KurtosisState::default(),
60
fisher,
61
bias,
62
}
63
}
64
65
fn insert_one(&mut self, x: f64) {
66
self.state.insert_one(x);
67
}
68
69
fn remove_one(&mut self, x: f64) {
70
self.state.remove_one(x);
71
}
72
fn finalize(&self) -> Option<f64> {
73
self.state.finalize(self.fisher, self.bias)
74
}
75
}
76
77
pub struct SkewMoment {
78
state: SkewState,
79
bias: bool,
80
}
81
82
impl StateUpdate for SkewMoment {
83
fn new(params: Option<RollingFnParams>) -> Self {
84
let bias = if let Some(RollingFnParams::Skew { bias }) = params {
85
bias
86
} else {
87
false
88
};
89
90
Self {
91
state: SkewState::default(),
92
bias,
93
}
94
}
95
96
fn insert_one(&mut self, x: f64) {
97
self.state.insert_one(x);
98
}
99
100
fn remove_one(&mut self, x: f64) {
101
self.state.remove_one(x);
102
}
103
fn finalize(&self) -> Option<f64> {
104
self.state.finalize(self.bias)
105
}
106
}
107
108