Path: blob/main/crates/polars-compute/src/rolling/nulls/moment.rs
8475 views
#![allow(unsafe_op_in_unsafe_fn)]12use num_traits::{FromPrimitive, ToPrimitive};34pub use super::super::moment::*;5use super::*;67pub fn rolling_var<T>(8arr: &PrimitiveArray<T>,9window_size: usize,10min_periods: usize,11center: bool,12weights: Option<&[f64]>,13params: Option<RollingFnParams>,14) -> ArrayRef15where16T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,17{18if weights.is_some() {19panic!("weights not yet supported on array with null values")20}21let offsets_fn = if center {22det_offsets_center23} else {24det_offsets25};26rolling_apply_agg_window::<MomentWindow<_, VarianceMoment>, _, _, _>(27arr.values().as_slice(),28arr.validity().as_ref().unwrap(),29window_size,30min_periods,31offsets_fn,32params,33)34}3536pub fn rolling_skew<T>(37arr: &PrimitiveArray<T>,38window_size: usize,39min_periods: usize,40center: bool,41params: Option<RollingFnParams>,42) -> ArrayRef43where44T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,45{46let offsets_fn = if center {47det_offsets_center48} else {49det_offsets50};51rolling_apply_agg_window::<MomentWindow<_, SkewMoment>, _, _, _>(52arr.values().as_slice(),53arr.validity().as_ref().unwrap(),54window_size,55min_periods,56offsets_fn,57params,58)59}6061pub fn rolling_kurtosis<T>(62arr: &PrimitiveArray<T>,63window_size: usize,64min_periods: usize,65center: bool,66params: Option<RollingFnParams>,67) -> ArrayRef68where69T: NativeType + ToPrimitive + FromPrimitive + IsFloat + Float,70{71let offsets_fn = if center {72det_offsets_center73} else {74det_offsets75};76rolling_apply_agg_window::<MomentWindow<_, KurtosisMoment>, _, _, _>(77arr.values().as_slice(),78arr.validity().as_ref().unwrap(),79window_size,80min_periods,81offsets_fn,82params,83)84}858687