Path: blob/main/crates/polars-expr/src/dispatch/bitwise.rs
7884 views
use std::sync::Arc;12use polars_core::error::PolarsResult;3use polars_core::prelude::Column;4use polars_plan::dsl::{ColumnsUdf, SpecialEq};5use polars_plan::plans::IRBitwiseFunction;67pub fn function_expr_to_udf(func: IRBitwiseFunction) -> SpecialEq<Arc<dyn ColumnsUdf>> {8use IRBitwiseFunction as B;910match func {11B::CountOnes => map!(count_ones),12B::CountZeros => map!(count_zeros),13B::LeadingOnes => map!(leading_ones),14B::LeadingZeros => map!(leading_zeros),15B::TrailingOnes => map!(trailing_ones),16B::TrailingZeros => map!(trailing_zeros),1718B::And => map!(reduce_and),19B::Or => map!(reduce_or),20B::Xor => map!(reduce_xor),21}22}2324fn count_ones(c: &Column) -> PolarsResult<Column> {25c.try_apply_unary_elementwise(polars_ops::series::count_ones)26}2728fn count_zeros(c: &Column) -> PolarsResult<Column> {29c.try_apply_unary_elementwise(polars_ops::series::count_zeros)30}3132fn leading_ones(c: &Column) -> PolarsResult<Column> {33c.try_apply_unary_elementwise(polars_ops::series::leading_ones)34}3536fn leading_zeros(c: &Column) -> PolarsResult<Column> {37c.try_apply_unary_elementwise(polars_ops::series::leading_zeros)38}3940fn trailing_ones(c: &Column) -> PolarsResult<Column> {41c.try_apply_unary_elementwise(polars_ops::series::trailing_ones)42}4344fn trailing_zeros(c: &Column) -> PolarsResult<Column> {45c.try_apply_unary_elementwise(polars_ops::series::trailing_zeros)46}4748fn reduce_and(c: &Column) -> PolarsResult<Column> {49c.and_reduce().map(|v| v.into_column(c.name().clone()))50}5152fn reduce_or(c: &Column) -> PolarsResult<Column> {53c.or_reduce().map(|v| v.into_column(c.name().clone()))54}5556fn reduce_xor(c: &Column) -> PolarsResult<Column> {57c.xor_reduce().map(|v| v.into_column(c.name().clone()))58}596061