Path: blob/main/crates/polars-expr/src/dispatch/business.rs
7884 views
use std::sync::Arc;12use polars_core::error::PolarsResult;3use polars_core::prelude::Column;4use polars_ops::series::Roll;5use polars_plan::dsl::{ColumnsUdf, SpecialEq};6use polars_plan::plans::IRBusinessFunction;78pub fn function_expr_to_udf(func: IRBusinessFunction) -> SpecialEq<Arc<dyn ColumnsUdf>> {9use IRBusinessFunction::*;10match func {11BusinessDayCount {12week_mask,13holidays,14} => {15map_as_slice!(business_day_count, week_mask, &holidays)16},17AddBusinessDay {18week_mask,19holidays,20roll,21} => {22map_as_slice!(add_business_days, week_mask, &holidays, roll)23},24IsBusinessDay {25week_mask,26holidays,27} => {28map_as_slice!(is_business_day, week_mask, &holidays)29},30}31}3233pub(super) fn business_day_count(34s: &[Column],35week_mask: [bool; 7],36holidays: &[i32],37) -> PolarsResult<Column> {38let start = &s[0];39let end = &s[1];40polars_ops::prelude::business_day_count(41start.as_materialized_series(),42end.as_materialized_series(),43week_mask,44holidays,45)46.map(Column::from)47}48pub(super) fn add_business_days(49s: &[Column],50week_mask: [bool; 7],51holidays: &[i32],52roll: Roll,53) -> PolarsResult<Column> {54let start = &s[0];55let n = &s[1];56polars_ops::prelude::add_business_days(57start.as_materialized_series(),58n.as_materialized_series(),59week_mask,60holidays,61roll,62)63.map(Column::from)64}6566pub(super) fn is_business_day(67s: &[Column],68week_mask: [bool; 7],69holidays: &[i32],70) -> PolarsResult<Column> {71let dates = &s[0];72polars_ops::prelude::is_business_day(dates.as_materialized_series(), week_mask, holidays)73.map(Column::from)74}757677