Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-compute/src/rolling/nulls/moment.rs
8475 views
1
#![allow(unsafe_op_in_unsafe_fn)]
2
3
use num_traits::{FromPrimitive, ToPrimitive};
4
5
pub use super::super::moment::*;
6
use super::*;
7
8
pub fn rolling_var<T>(
9
arr: &PrimitiveArray<T>,
10
window_size: usize,
11
min_periods: usize,
12
center: bool,
13
weights: Option<&[f64]>,
14
params: Option<RollingFnParams>,
15
) -> ArrayRef
16
where
17
T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,
18
{
19
if weights.is_some() {
20
panic!("weights not yet supported on array with null values")
21
}
22
let offsets_fn = if center {
23
det_offsets_center
24
} else {
25
det_offsets
26
};
27
rolling_apply_agg_window::<MomentWindow<_, VarianceMoment>, _, _, _>(
28
arr.values().as_slice(),
29
arr.validity().as_ref().unwrap(),
30
window_size,
31
min_periods,
32
offsets_fn,
33
params,
34
)
35
}
36
37
pub fn rolling_skew<T>(
38
arr: &PrimitiveArray<T>,
39
window_size: usize,
40
min_periods: usize,
41
center: bool,
42
params: Option<RollingFnParams>,
43
) -> ArrayRef
44
where
45
T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,
46
{
47
let offsets_fn = if center {
48
det_offsets_center
49
} else {
50
det_offsets
51
};
52
rolling_apply_agg_window::<MomentWindow<_, SkewMoment>, _, _, _>(
53
arr.values().as_slice(),
54
arr.validity().as_ref().unwrap(),
55
window_size,
56
min_periods,
57
offsets_fn,
58
params,
59
)
60
}
61
62
pub fn rolling_kurtosis<T>(
63
arr: &PrimitiveArray<T>,
64
window_size: usize,
65
min_periods: usize,
66
center: bool,
67
params: Option<RollingFnParams>,
68
) -> ArrayRef
69
where
70
T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,
71
{
72
let offsets_fn = if center {
73
det_offsets_center
74
} else {
75
det_offsets
76
};
77
rolling_apply_agg_window::<MomentWindow<_, KurtosisMoment>, _, _, _>(
78
arr.values().as_slice(),
79
arr.validity().as_ref().unwrap(),
80
window_size,
81
min_periods,
82
offsets_fn,
83
params,
84
)
85
}
86
87