Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-expr/src/dispatch/bitwise.rs
7884 views
1
use std::sync::Arc;
2
3
use polars_core::error::PolarsResult;
4
use polars_core::prelude::Column;
5
use polars_plan::dsl::{ColumnsUdf, SpecialEq};
6
use polars_plan::plans::IRBitwiseFunction;
7
8
pub fn function_expr_to_udf(func: IRBitwiseFunction) -> SpecialEq<Arc<dyn ColumnsUdf>> {
9
use IRBitwiseFunction as B;
10
11
match func {
12
B::CountOnes => map!(count_ones),
13
B::CountZeros => map!(count_zeros),
14
B::LeadingOnes => map!(leading_ones),
15
B::LeadingZeros => map!(leading_zeros),
16
B::TrailingOnes => map!(trailing_ones),
17
B::TrailingZeros => map!(trailing_zeros),
18
19
B::And => map!(reduce_and),
20
B::Or => map!(reduce_or),
21
B::Xor => map!(reduce_xor),
22
}
23
}
24
25
fn count_ones(c: &Column) -> PolarsResult<Column> {
26
c.try_apply_unary_elementwise(polars_ops::series::count_ones)
27
}
28
29
fn count_zeros(c: &Column) -> PolarsResult<Column> {
30
c.try_apply_unary_elementwise(polars_ops::series::count_zeros)
31
}
32
33
fn leading_ones(c: &Column) -> PolarsResult<Column> {
34
c.try_apply_unary_elementwise(polars_ops::series::leading_ones)
35
}
36
37
fn leading_zeros(c: &Column) -> PolarsResult<Column> {
38
c.try_apply_unary_elementwise(polars_ops::series::leading_zeros)
39
}
40
41
fn trailing_ones(c: &Column) -> PolarsResult<Column> {
42
c.try_apply_unary_elementwise(polars_ops::series::trailing_ones)
43
}
44
45
fn trailing_zeros(c: &Column) -> PolarsResult<Column> {
46
c.try_apply_unary_elementwise(polars_ops::series::trailing_zeros)
47
}
48
49
fn reduce_and(c: &Column) -> PolarsResult<Column> {
50
c.and_reduce().map(|v| v.into_column(c.name().clone()))
51
}
52
53
fn reduce_or(c: &Column) -> PolarsResult<Column> {
54
c.or_reduce().map(|v| v.into_column(c.name().clone()))
55
}
56
57
fn reduce_xor(c: &Column) -> PolarsResult<Column> {
58
c.xor_reduce().map(|v| v.into_column(c.name().clone()))
59
}
60
61