Path: blob/main/crates/polars-compute/src/rolling/moment.rs
6939 views
use super::RollingFnParams;1use crate::moment::{KurtosisState, SkewState, VarState};23pub trait StateUpdate {4fn new(params: Option<RollingFnParams>) -> Self;5fn insert_one(&mut self, x: f64);67fn remove_one(&mut self, x: f64);89fn finalize(&self) -> Option<f64>;10}1112pub struct VarianceMoment {13state: VarState,14ddof: u8,15}1617impl StateUpdate for VarianceMoment {18fn new(params: Option<RollingFnParams>) -> Self {19let ddof = if let Some(RollingFnParams::Var(params)) = params {20params.ddof21} else {22123};2425Self {26state: VarState::default(),27ddof,28}29}3031fn insert_one(&mut self, x: f64) {32self.state.insert_one(x);33}3435fn remove_one(&mut self, x: f64) {36self.state.remove_one(x);37}38fn finalize(&self) -> Option<f64> {39self.state.finalize(self.ddof)40}41}4243pub struct KurtosisMoment {44state: KurtosisState,45fisher: bool,46bias: bool,47}4849impl StateUpdate for KurtosisMoment {50fn new(params: Option<RollingFnParams>) -> Self {51let (fisher, bias) = if let Some(RollingFnParams::Kurtosis { fisher, bias }) = params {52(fisher, bias)53} else {54(false, false)55};5657Self {58state: KurtosisState::default(),59fisher,60bias,61}62}6364fn insert_one(&mut self, x: f64) {65self.state.insert_one(x);66}6768fn remove_one(&mut self, x: f64) {69self.state.remove_one(x);70}71fn finalize(&self) -> Option<f64> {72self.state.finalize(self.fisher, self.bias)73}74}7576pub struct SkewMoment {77state: SkewState,78bias: bool,79}8081impl StateUpdate for SkewMoment {82fn new(params: Option<RollingFnParams>) -> Self {83let bias = if let Some(RollingFnParams::Skew { bias }) = params {84bias85} else {86false87};8889Self {90state: SkewState::default(),91bias,92}93}9495fn insert_one(&mut self, x: f64) {96self.state.insert_one(x);97}9899fn remove_one(&mut self, x: f64) {100self.state.remove_one(x);101}102fn finalize(&self) -> Option<f64> {103self.state.finalize(self.bias)104}105}106107108