vortex_array/arrays/extension/compute/
mod.rs1mod cast;
5mod compare;
6
7use vortex_error::VortexResult;
8use vortex_mask::Mask;
9use vortex_scalar::Scalar;
10
11use crate::arrays::ExtensionVTable;
12use crate::arrays::extension::ExtensionArray;
13use crate::compute::{
14 FilterKernel, FilterKernelAdapter, IsConstantKernel, IsConstantKernelAdapter, IsConstantOpts,
15 IsSortedKernel, IsSortedKernelAdapter, MinMaxKernel, MinMaxKernelAdapter, MinMaxResult,
16 SumKernel, SumKernelAdapter, TakeKernel, TakeKernelAdapter, filter, is_constant_opts,
17 is_sorted, is_strict_sorted, min_max, sum, take,
18};
19use crate::{Array, ArrayRef, IntoArray, register_kernel};
20
21impl FilterKernel for ExtensionVTable {
22 fn filter(&self, array: &ExtensionArray, mask: &Mask) -> VortexResult<ArrayRef> {
23 Ok(
24 ExtensionArray::new(array.ext_dtype().clone(), filter(array.storage(), mask)?)
25 .into_array(),
26 )
27 }
28}
29
30register_kernel!(FilterKernelAdapter(ExtensionVTable).lift());
31
32impl SumKernel for ExtensionVTable {
33 fn sum(&self, array: &ExtensionArray) -> VortexResult<Scalar> {
34 sum(array.storage())
35 }
36}
37
38register_kernel!(SumKernelAdapter(ExtensionVTable).lift());
39
40impl TakeKernel for ExtensionVTable {
41 fn take(&self, array: &ExtensionArray, indices: &dyn Array) -> VortexResult<ArrayRef> {
42 Ok(
43 ExtensionArray::new(array.ext_dtype().clone(), take(array.storage(), indices)?)
44 .into_array(),
45 )
46 }
47}
48
49register_kernel!(TakeKernelAdapter(ExtensionVTable).lift());
50
51impl MinMaxKernel for ExtensionVTable {
52 fn min_max(&self, array: &ExtensionArray) -> VortexResult<Option<MinMaxResult>> {
53 Ok(
54 min_max(array.storage())?.map(|MinMaxResult { min, max }| MinMaxResult {
55 min: Scalar::extension(array.ext_dtype().clone(), min),
56 max: Scalar::extension(array.ext_dtype().clone(), max),
57 }),
58 )
59 }
60}
61
62register_kernel!(MinMaxKernelAdapter(ExtensionVTable).lift());
63
64impl IsConstantKernel for ExtensionVTable {
65 fn is_constant(
66 &self,
67 array: &ExtensionArray,
68 opts: &IsConstantOpts,
69 ) -> VortexResult<Option<bool>> {
70 is_constant_opts(array.storage(), opts)
71 }
72}
73
74register_kernel!(IsConstantKernelAdapter(ExtensionVTable).lift());
75
76impl IsSortedKernel for ExtensionVTable {
77 fn is_sorted(&self, array: &ExtensionArray) -> VortexResult<bool> {
78 is_sorted(array.storage())
79 }
80
81 fn is_strict_sorted(&self, array: &ExtensionArray) -> VortexResult<bool> {
82 is_strict_sorted(array.storage())
83 }
84}
85
86register_kernel!(IsSortedKernelAdapter(ExtensionVTable).lift());