Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-compute/src/comparisons/binary.rs
6939 views
1
use arrow::array::{BinaryArray, FixedSizeBinaryArray};
2
use arrow::bitmap::Bitmap;
3
use arrow::types::Offset;
4
use polars_utils::total_ord::{TotalEq, TotalOrd};
5
6
use super::{TotalEqKernel, TotalOrdKernel};
7
8
impl<O: Offset> TotalEqKernel for BinaryArray<O> {
9
type Scalar = [u8];
10
11
fn tot_eq_kernel(&self, other: &Self) -> Bitmap {
12
assert!(self.len() == other.len());
13
self.values_iter()
14
.zip(other.values_iter())
15
.map(|(l, r)| l.tot_eq(&r))
16
.collect()
17
}
18
19
fn tot_ne_kernel(&self, other: &Self) -> Bitmap {
20
assert!(self.len() == other.len());
21
self.values_iter()
22
.zip(other.values_iter())
23
.map(|(l, r)| l.tot_ne(&r))
24
.collect()
25
}
26
27
fn tot_eq_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
28
self.values_iter().map(|l| l.tot_eq(&other)).collect()
29
}
30
31
fn tot_ne_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
32
self.values_iter().map(|l| l.tot_ne(&other)).collect()
33
}
34
}
35
36
impl<O: Offset> TotalOrdKernel for BinaryArray<O> {
37
type Scalar = [u8];
38
39
fn tot_lt_kernel(&self, other: &Self) -> Bitmap {
40
assert!(self.len() == other.len());
41
self.values_iter()
42
.zip(other.values_iter())
43
.map(|(l, r)| l.tot_lt(&r))
44
.collect()
45
}
46
47
fn tot_le_kernel(&self, other: &Self) -> Bitmap {
48
assert!(self.len() == other.len());
49
self.values_iter()
50
.zip(other.values_iter())
51
.map(|(l, r)| l.tot_le(&r))
52
.collect()
53
}
54
55
fn tot_lt_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
56
self.values_iter().map(|l| l.tot_lt(&other)).collect()
57
}
58
59
fn tot_le_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
60
self.values_iter().map(|l| l.tot_le(&other)).collect()
61
}
62
63
fn tot_gt_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
64
self.values_iter().map(|l| l.tot_gt(&other)).collect()
65
}
66
67
fn tot_ge_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
68
self.values_iter().map(|l| l.tot_ge(&other)).collect()
69
}
70
}
71
72
impl TotalEqKernel for FixedSizeBinaryArray {
73
type Scalar = [u8];
74
75
fn tot_eq_kernel(&self, other: &Self) -> Bitmap {
76
assert!(self.len() == other.len());
77
78
if self.size() != other.size() {
79
return Bitmap::new_zeroed(self.len());
80
}
81
82
(0..self.len())
83
.map(|i| self.value(i) == other.value(i))
84
.collect()
85
}
86
87
fn tot_ne_kernel(&self, other: &Self) -> Bitmap {
88
assert!(self.len() == other.len());
89
90
if self.size() != other.size() {
91
return Bitmap::new_with_value(true, self.len());
92
}
93
94
(0..self.len())
95
.map(|i| self.value(i) != other.value(i))
96
.collect()
97
}
98
99
fn tot_eq_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
100
if self.size() != other.len() {
101
return Bitmap::new_zeroed(self.len());
102
}
103
104
(0..self.len()).map(|i| self.value(i) == other).collect()
105
}
106
107
fn tot_ne_kernel_broadcast(&self, other: &Self::Scalar) -> Bitmap {
108
if self.size() != other.len() {
109
return Bitmap::new_with_value(true, self.len());
110
}
111
112
(0..self.len()).map(|i| self.value(i) != other).collect()
113
}
114
}
115
116