Skip to content

Commit bcb49d4

Browse files
feat: masked array iterative execution clean up (#7690)
Use array_slots macro, lazy validity and iterative execution see #7674 --------- Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 2db4ab1 commit bcb49d4

12 files changed

Lines changed: 109 additions & 144 deletions

File tree

.github/runs-on.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
_extends: .github-private
2+
images:
3+
ubuntu24-full-arm64-pre:
4+
platform: "linux"
5+
arch: "arm64"
6+
ami: "ami-08f97c6362847dc5d"

vortex-array/public-api.lock

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3408,23 +3408,51 @@ impl vortex_array::ArrayHash for vortex_array::arrays::masked::MaskedData
34083408

34093409
pub fn vortex_array::arrays::masked::MaskedData::array_hash<H: core::hash::Hasher>(&self, _state: &mut H, _precision: vortex_array::Precision)
34103410

3411-
pub trait vortex_array::arrays::masked::MaskedArrayExt: vortex_array::TypedArrayRef<vortex_array::arrays::Masked>
3411+
pub struct vortex_array::arrays::masked::MaskedSlots
34123412

3413-
pub fn vortex_array::arrays::masked::MaskedArrayExt::child(&self) -> &vortex_array::ArrayRef
3413+
pub vortex_array::arrays::masked::MaskedSlots::child: vortex_array::ArrayRef
34143414

3415-
pub fn vortex_array::arrays::masked::MaskedArrayExt::masked_validity(&self) -> vortex_array::validity::Validity
3415+
pub vortex_array::arrays::masked::MaskedSlots::validity: core::option::Option<vortex_array::ArrayRef>
3416+
3417+
impl vortex_array::arrays::masked::MaskedSlots
3418+
3419+
pub const vortex_array::arrays::masked::MaskedSlots::CHILD: usize
3420+
3421+
pub const vortex_array::arrays::masked::MaskedSlots::COUNT: usize
3422+
3423+
pub const vortex_array::arrays::masked::MaskedSlots::NAMES: [&'static str; 2]
34163424

3417-
pub fn vortex_array::arrays::masked::MaskedArrayExt::validity_child(&self) -> core::option::Option<&vortex_array::ArrayRef>
3425+
pub const vortex_array::arrays::masked::MaskedSlots::VALIDITY: usize
3426+
3427+
pub fn vortex_array::arrays::masked::MaskedSlots::from_slots(slots: alloc::vec::Vec<core::option::Option<vortex_array::ArrayRef>>) -> Self
3428+
3429+
pub fn vortex_array::arrays::masked::MaskedSlots::into_slots(self) -> alloc::vec::Vec<core::option::Option<vortex_array::ArrayRef>>
3430+
3431+
pub trait vortex_array::arrays::masked::MaskedArrayExt: vortex_array::TypedArrayRef<vortex_array::arrays::Masked> + vortex_array::arrays::masked::MaskedArraySlotsExt
3432+
3433+
pub fn vortex_array::arrays::masked::MaskedArrayExt::masked_validity(&self) -> vortex_array::validity::Validity
34183434

34193435
impl<T: vortex_array::TypedArrayRef<vortex_array::arrays::Masked>> vortex_array::arrays::masked::MaskedArrayExt for T
34203436

3437+
pub fn T::masked_validity(&self) -> vortex_array::validity::Validity
3438+
3439+
pub trait vortex_array::arrays::masked::MaskedArraySlotsExt: vortex_array::TypedArrayRef<vortex_array::arrays::Masked>
3440+
3441+
pub fn vortex_array::arrays::masked::MaskedArraySlotsExt::child(&self) -> &vortex_array::ArrayRef
3442+
3443+
pub fn vortex_array::arrays::masked::MaskedArraySlotsExt::slots_view(&self) -> vortex_array::arrays::masked::array::MaskedSlotsView<'_>
3444+
3445+
pub fn vortex_array::arrays::masked::MaskedArraySlotsExt::validity(&self) -> core::option::Option<&vortex_array::ArrayRef>
3446+
3447+
impl<T: vortex_array::TypedArrayRef<vortex_array::arrays::Masked>> vortex_array::arrays::masked::MaskedArraySlotsExt for T
3448+
34213449
pub fn T::child(&self) -> &vortex_array::ArrayRef
34223450

3423-
pub fn T::masked_validity(&self) -> vortex_array::validity::Validity
3451+
pub fn T::slots_view(&self) -> vortex_array::arrays::masked::array::MaskedSlotsView<'_>
34243452

3425-
pub fn T::validity_child(&self) -> core::option::Option<&vortex_array::ArrayRef>
3453+
pub fn T::validity(&self) -> core::option::Option<&vortex_array::ArrayRef>
34263454

3427-
pub fn vortex_array::arrays::masked::mask_validity_canonical(canonical: vortex_array::Canonical, validity_mask: &vortex_mask::Mask, ctx: &mut vortex_array::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::Canonical>
3455+
pub fn vortex_array::arrays::masked::mask_validity_canonical(canonical: vortex_array::Canonical, validity: vortex_array::validity::Validity, ctx: &mut vortex_array::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::Canonical>
34283456

34293457
pub type vortex_array::arrays::masked::MaskedArray = vortex_array::Array<vortex_array::arrays::Masked>
34303458

vortex-array/src/arrays/masked/array.rs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
use std::fmt::Display;
55
use std::fmt::Formatter;
66

7-
use vortex_error::VortexExpect;
87
use vortex_error::VortexResult;
98
use vortex_error::vortex_bail;
109

@@ -16,15 +15,17 @@ use crate::array::ArrayParts;
1615
use crate::array::TypedArrayRef;
1716
use crate::array::child_to_validity;
1817
use crate::array::validity_to_child;
18+
use crate::array_slots;
1919
use crate::arrays::Masked;
2020
use crate::validity::Validity;
2121

22-
/// The underlying child array being masked.
23-
pub(super) const CHILD_SLOT: usize = 0;
24-
/// The validity bitmap defining which elements are non-null.
25-
pub(super) const VALIDITY_SLOT: usize = 1;
26-
pub(super) const NUM_SLOTS: usize = 2;
27-
pub(super) const SLOT_NAMES: [&str; NUM_SLOTS] = ["child", "validity"];
22+
#[array_slots(Masked)]
23+
pub struct MaskedSlots {
24+
/// The underlying child array being masked.
25+
pub child: ArrayRef,
26+
/// The validity bitmap defining which elements are non-null.
27+
pub validity: Option<ArrayRef>,
28+
}
2829

2930
#[derive(Clone, Debug)]
3031
pub struct MaskedData;
@@ -35,22 +36,10 @@ impl Display for MaskedData {
3536
}
3637
}
3738

38-
pub trait MaskedArrayExt: TypedArrayRef<Masked> {
39-
fn child(&self) -> &ArrayRef {
40-
self.as_ref().slots()[CHILD_SLOT]
41-
.as_ref()
42-
.vortex_expect("validated masked child slot")
43-
}
44-
45-
fn validity_child(&self) -> Option<&ArrayRef> {
46-
self.as_ref().slots()[VALIDITY_SLOT].as_ref()
47-
}
48-
39+
pub trait MaskedArrayExt: TypedArrayRef<Masked> + MaskedArraySlotsExt {
4940
fn masked_validity(&self) -> Validity {
50-
child_to_validity(
51-
&self.as_ref().slots()[VALIDITY_SLOT],
52-
self.as_ref().dtype().nullability(),
53-
)
41+
let x = &self.as_ref().slots()[MaskedSlots::VALIDITY];
42+
child_to_validity(x, self.as_ref().dtype().nullability())
5443
}
5544
}
5645
impl<T: TypedArrayRef<Masked>> MaskedArrayExt for T {}

vortex-array/src/arrays/masked/compute/filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::array::ArrayView;
1010
use crate::arrays::Masked;
1111
use crate::arrays::MaskedArray;
1212
use crate::arrays::filter::FilterReduce;
13-
use crate::arrays::masked::MaskedArrayExt;
13+
use crate::arrays::masked::MaskedArraySlotsExt;
1414

1515
impl FilterReduce for Masked {
1616
fn filter(array: ArrayView<'_, Masked>, mask: &Mask) -> VortexResult<Option<ArrayRef>> {

vortex-array/src/arrays/masked/compute/mask.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use vortex_error::VortexResult;
66
use crate::ArrayRef;
77
use crate::array::ArrayView;
88
use crate::arrays::Masked;
9-
use crate::arrays::masked::MaskedArrayExt;
9+
use crate::arrays::masked::MaskedArraySlotsExt;
1010
use crate::arrays::scalar_fn::ScalarFnFactoryExt;
1111
use crate::scalar_fn::EmptyOptions;
1212
use crate::scalar_fn::fns::mask::Mask as MaskExpr;

vortex-array/src/arrays/masked/compute/slice.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::IntoArray;
1010
use crate::array::ArrayView;
1111
use crate::arrays::Masked;
1212
use crate::arrays::MaskedArray;
13-
use crate::arrays::masked::MaskedArrayExt;
13+
use crate::arrays::masked::MaskedArraySlotsExt;
1414
use crate::arrays::slice::SliceReduce;
1515

1616
impl SliceReduce for Masked {

vortex-array/src/arrays/masked/compute/take.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::array::ArrayView;
99
use crate::arrays::Masked;
1010
use crate::arrays::MaskedArray;
1111
use crate::arrays::dict::TakeReduce;
12-
use crate::arrays::masked::MaskedArrayExt;
12+
use crate::arrays::masked::MaskedArraySlotsExt;
1313
use crate::builtins::ArrayBuiltins;
1414
use crate::scalar::Scalar;
1515
use crate::validity::Validity;

0 commit comments

Comments
 (0)