Path: blob/main/crates/polars-compute/src/cast/boolean_to.rs
6939 views
use arrow::array::{Array, BooleanArray, PrimitiveArray};1use arrow::types::NativeType;2use polars_error::PolarsResult;34use super::{ArrayFromIter, BinaryViewArray, Utf8ViewArray};56pub(super) fn boolean_to_primitive_dyn<T>(array: &dyn Array) -> PolarsResult<Box<dyn Array>>7where8T: NativeType + num_traits::One,9{10let array = array.as_any().downcast_ref().unwrap();11Ok(Box::new(boolean_to_primitive::<T>(array)))12}1314/// Casts the [`BooleanArray`] to a [`PrimitiveArray`].15pub fn boolean_to_primitive<T>(from: &BooleanArray) -> PrimitiveArray<T>16where17T: NativeType + num_traits::One,18{19let values = from20.values()21.iter()22.map(|x| if x { T::one() } else { T::default() })23.collect::<Vec<_>>();2425PrimitiveArray::<T>::new(T::PRIMITIVE.into(), values.into(), from.validity().cloned())26}2728pub fn boolean_to_utf8view(from: &BooleanArray) -> Utf8ViewArray {29unsafe { boolean_to_binaryview(from).to_utf8view_unchecked() }30}3132pub(super) fn boolean_to_utf8view_dyn(array: &dyn Array) -> PolarsResult<Box<dyn Array>> {33let array = array.as_any().downcast_ref().unwrap();34Ok(boolean_to_utf8view(array).boxed())35}3637/// Casts the [`BooleanArray`] to a [`BinaryArray`], casting trues to `"1"` and falses to `"0"`38pub fn boolean_to_binaryview(from: &BooleanArray) -> BinaryViewArray {39let iter = from.iter().map(|opt_b| match opt_b {40Some(true) => Some("true".as_bytes()),41Some(false) => Some("false".as_bytes()),42None => None,43});44BinaryViewArray::arr_from_iter_trusted(iter)45}4647pub(super) fn boolean_to_binaryview_dyn(array: &dyn Array) -> PolarsResult<Box<dyn Array>> {48let array = array.as_any().downcast_ref().unwrap();49Ok(boolean_to_binaryview(array).boxed())50}515253