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