Path: blob/main/crates/polars-compute/src/comparisons/dictionary.rs
6939 views
use arrow::array::{Array, DictionaryArray, DictionaryKey};1use arrow::bitmap::{Bitmap, BitmapBuilder};23use super::TotalEqKernel;4use crate::comparisons::dyn_array::{array_tot_eq_missing_kernel, array_tot_ne_missing_kernel};56impl<K: DictionaryKey> TotalEqKernel for DictionaryArray<K> {7type Scalar = Box<dyn Array>;89fn tot_eq_kernel(&self, other: &Self) -> Bitmap {10assert_eq!(self.len(), other.len());1112let mut bitmap = BitmapBuilder::with_capacity(self.len());1314for i in 0..self.len() {15let lval = self.validity().is_none_or(|v| v.get(i).unwrap());16let rval = other.validity().is_none_or(|v| v.get(i).unwrap());1718if !lval || !rval {19bitmap.push(true);20continue;21}2223let lkey = self.key_value(i);24let rkey = other.key_value(i);2526let mut lhs_value = self.values().clone();27lhs_value.slice(lkey, 1);28let mut rhs_value = other.values().clone();29rhs_value.slice(rkey, 1);3031let result = array_tot_eq_missing_kernel(lhs_value.as_ref(), rhs_value.as_ref());32bitmap.push(result.unset_bits() == 0);33}3435bitmap.freeze()36}3738fn tot_ne_kernel(&self, other: &Self) -> Bitmap {39assert_eq!(self.len(), other.len());4041let mut bitmap = BitmapBuilder::with_capacity(self.len());4243for i in 0..self.len() {44let lval = self.validity().is_none_or(|v| v.get(i).unwrap());45let rval = other.validity().is_none_or(|v| v.get(i).unwrap());4647if !lval || !rval {48bitmap.push(false);49continue;50}5152let lkey = self.key_value(i);53let rkey = other.key_value(i);5455let mut lhs_value = self.values().clone();56lhs_value.slice(lkey, 1);57let mut rhs_value = other.values().clone();58rhs_value.slice(rkey, 1);5960let result = array_tot_ne_missing_kernel(lhs_value.as_ref(), rhs_value.as_ref());61bitmap.push(result.set_bits() > 0);62}6364bitmap.freeze()65}6667fn tot_eq_kernel_broadcast(&self, _other: &Self::Scalar) -> arrow::bitmap::Bitmap {68todo!()69}7071fn tot_ne_kernel_broadcast(&self, _other: &Self::Scalar) -> arrow::bitmap::Bitmap {72todo!()73}74}757677