Path: blob/main/crates/polars-compute/src/rolling/nulls/min_max.rs
6939 views
use polars_utils::min_max::{MaxPropagateNan, MinPropagateNan};12use super::super::min_max::MinMaxWindow;34pub type MinWindow<'a, T> = MinMaxWindow<'a, T, MinPropagateNan>;5pub type MaxWindow<'a, T> = MinMaxWindow<'a, T, MaxPropagateNan>;67use super::*;89pub fn rolling_min<T>(10arr: &PrimitiveArray<T>,11window_size: usize,12min_periods: usize,13center: bool,14weights: Option<&[f64]>,15_params: Option<RollingFnParams>,16) -> ArrayRef17where18T: NativeType + IsFloat,19{20if weights.is_some() {21panic!("weights not yet supported on array with null values")22}23if center {24rolling_apply_agg_window::<MinMaxWindow<T, MinPropagateNan>, _, _>(25arr.values().as_slice(),26arr.validity().as_ref().unwrap(),27window_size,28min_periods,29det_offsets_center,30None,31)32} else {33rolling_apply_agg_window::<MinMaxWindow<T, MinPropagateNan>, _, _>(34arr.values().as_slice(),35arr.validity().as_ref().unwrap(),36window_size,37min_periods,38det_offsets,39None,40)41}42}4344pub fn rolling_max<T>(45arr: &PrimitiveArray<T>,46window_size: usize,47min_periods: usize,48center: bool,49weights: Option<&[f64]>,50_params: Option<RollingFnParams>,51) -> ArrayRef52where53T: NativeType + std::iter::Sum + Zero + AddAssign + Copy + PartialOrd + Bounded + IsFloat,54{55if weights.is_some() {56panic!("weights not yet supported on array with null values")57}58if center {59rolling_apply_agg_window::<MinMaxWindow<T, MaxPropagateNan>, _, _>(60arr.values().as_slice(),61arr.validity().as_ref().unwrap(),62window_size,63min_periods,64det_offsets_center,65None,66)67} else {68rolling_apply_agg_window::<MinMaxWindow<T, MaxPropagateNan>, _, _>(69arr.values().as_slice(),70arr.validity().as_ref().unwrap(),71window_size,72min_periods,73det_offsets,74None,75)76}77}787980