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/min_max.rs
6939 views
1
use polars_utils::min_max::{MaxPropagateNan, MinPropagateNan};
2
3
use super::super::min_max::MinMaxWindow;
4
5
pub type MinWindow<'a, T> = MinMaxWindow<'a, T, MinPropagateNan>;
6
pub type MaxWindow<'a, T> = MinMaxWindow<'a, T, MaxPropagateNan>;
7
8
use super::*;
9
10
pub fn rolling_min<T>(
11
arr: &PrimitiveArray<T>,
12
window_size: usize,
13
min_periods: usize,
14
center: bool,
15
weights: Option<&[f64]>,
16
_params: Option<RollingFnParams>,
17
) -> ArrayRef
18
where
19
T: NativeType + IsFloat,
20
{
21
if weights.is_some() {
22
panic!("weights not yet supported on array with null values")
23
}
24
if center {
25
rolling_apply_agg_window::<MinMaxWindow<T, MinPropagateNan>, _, _>(
26
arr.values().as_slice(),
27
arr.validity().as_ref().unwrap(),
28
window_size,
29
min_periods,
30
det_offsets_center,
31
None,
32
)
33
} else {
34
rolling_apply_agg_window::<MinMaxWindow<T, MinPropagateNan>, _, _>(
35
arr.values().as_slice(),
36
arr.validity().as_ref().unwrap(),
37
window_size,
38
min_periods,
39
det_offsets,
40
None,
41
)
42
}
43
}
44
45
pub fn rolling_max<T>(
46
arr: &PrimitiveArray<T>,
47
window_size: usize,
48
min_periods: usize,
49
center: bool,
50
weights: Option<&[f64]>,
51
_params: Option<RollingFnParams>,
52
) -> ArrayRef
53
where
54
T: NativeType + std::iter::Sum + Zero + AddAssign + Copy + PartialOrd + Bounded + IsFloat,
55
{
56
if weights.is_some() {
57
panic!("weights not yet supported on array with null values")
58
}
59
if center {
60
rolling_apply_agg_window::<MinMaxWindow<T, MaxPropagateNan>, _, _>(
61
arr.values().as_slice(),
62
arr.validity().as_ref().unwrap(),
63
window_size,
64
min_periods,
65
det_offsets_center,
66
None,
67
)
68
} else {
69
rolling_apply_agg_window::<MinMaxWindow<T, MaxPropagateNan>, _, _>(
70
arr.values().as_slice(),
71
arr.validity().as_ref().unwrap(),
72
window_size,
73
min_periods,
74
det_offsets,
75
None,
76
)
77
}
78
}
79
80