Skip to content

Commit bbdb949

Browse files
authored
Remove with_dyn and ArrayDef (#1503)
Waiting on #1501
1 parent 6696266 commit bbdb949

File tree

27 files changed

+151
-246
lines changed

27 files changed

+151
-246
lines changed

encodings/fastlanes/src/bitpacking/compute/search_sorted.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use vortex_array::compute::{
1010
search_sorted_usize, IndexOrd, Len, SearchResult, SearchSorted, SearchSortedFn,
1111
SearchSortedSide,
1212
};
13+
use vortex_array::stats::ArrayStatistics;
1314
use vortex_array::validity::Validity;
1415
use vortex_array::variants::PrimitiveArrayTrait;
1516
use vortex_array::{ArrayDType, ArrayLen};
@@ -156,11 +157,10 @@ impl<'a, T: BitPacking + NativePType> BitPackedSearch<'a, T> {
156157
Validity::AllInvalid => 0,
157158
Validity::Array(varray) => {
158159
// In sorted order, nulls come after all the non-null values.
159-
varray.with_dyn(|a| {
160-
a.statistics()
161-
.compute_true_count()
162-
.vortex_expect("Failed to compute true count")
163-
})
160+
varray
161+
.statistics()
162+
.compute_true_count()
163+
.vortex_expect("Failed to compute true count")
164164
}
165165
};
166166

encodings/fsst/src/array.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ use std::sync::Arc;
33

44
use fsst::{Decompressor, Symbol};
55
use serde::{Deserialize, Serialize};
6-
use vortex_array::array::{VarBin, VarBinArray};
7-
use vortex_array::encoding::ids;
6+
use vortex_array::array::{VarBinArray, VarBinEncoding};
7+
use vortex_array::encoding::{ids, Encoding};
88
use vortex_array::stats::{StatisticsVTable, StatsSet};
99
use vortex_array::validity::{ArrayValidity, LogicalValidity, Validity, ValidityVTable};
1010
use vortex_array::variants::{BinaryArrayTrait, Utf8ArrayTrait, VariantsVTable};
1111
use vortex_array::visitor::{ArrayVisitor, VisitorVTable};
12-
use vortex_array::{
13-
impl_encoding, ArrayDType, ArrayData, ArrayDef, ArrayLen, ArrayTrait, IntoCanonical,
14-
};
12+
use vortex_array::{impl_encoding, ArrayDType, ArrayData, ArrayLen, ArrayTrait, IntoCanonical};
1513
use vortex_dtype::{DType, Nullability, PType};
1614
use vortex_error::{vortex_bail, VortexExpect, VortexResult};
1715

@@ -75,7 +73,7 @@ impl FSSTArray {
7573
vortex_bail!(InvalidArgument: "uncompressed_lengths must have integer type and cannot be nullable");
7674
}
7775

78-
if codes.encoding().id() != VarBin::ID {
76+
if codes.encoding().id() != VarBinEncoding::ID {
7977
vortex_bail!(
8078
InvalidArgument: "codes must have varbin encoding, was {}",
8179
codes.encoding().id()

encodings/fsst/tests/fsst_tests.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
use vortex_array::array::builder::VarBinBuilder;
44
use vortex_array::array::PrimitiveArray;
55
use vortex_array::compute::{filter, scalar_at, slice, take, FilterMask, TakeOptions};
6+
use vortex_array::encoding::Encoding;
67
use vortex_array::validity::Validity;
7-
use vortex_array::{ArrayData, ArrayDef, IntoArrayData, IntoCanonical};
8+
use vortex_array::{ArrayData, IntoArrayData, IntoCanonical};
89
use vortex_dtype::{DType, Nullability};
9-
use vortex_fsst::{fsst_compress, fsst_train_compressor, FSST};
10+
use vortex_fsst::{fsst_compress, fsst_train_compressor, FSSTEncoding};
1011

1112
macro_rules! assert_nth_scalar {
1213
($arr:expr, $n:expr, $expected:expr) => {
@@ -55,7 +56,7 @@ fn test_fsst_array_ops() {
5556

5657
// test slice
5758
let fsst_sliced = slice(&fsst_array, 1, 3).unwrap();
58-
assert_eq!(fsst_sliced.encoding().id(), FSST::ENCODING.id());
59+
assert_eq!(fsst_sliced.encoding().id(), FSSTEncoding::ID);
5960
assert_eq!(fsst_sliced.len(), 2);
6061
assert_nth_scalar!(
6162
fsst_sliced,
@@ -87,7 +88,7 @@ fn test_fsst_array_ops() {
8788
let mask = FilterMask::from_iter([false, true, false]);
8889

8990
let fsst_filtered = filter(&fsst_array, mask).unwrap();
90-
assert_eq!(fsst_filtered.encoding().id(), FSST::ENCODING.id());
91+
assert_eq!(fsst_filtered.encoding().id(), FSSTEncoding::ID);
9192
assert_eq!(fsst_filtered.len(), 1);
9293
assert_nth_scalar!(
9394
fsst_filtered,

vortex-array/src/data/mod.rs

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use owned::OwnedArrayData;
88
use viewed::ViewedArrayData;
99
use vortex_buffer::Buffer;
1010
use vortex_dtype::DType;
11-
use vortex_error::{vortex_err, vortex_panic, VortexExpect, VortexResult};
11+
use vortex_error::{vortex_err, VortexExpect, VortexResult};
1212
use vortex_scalar::Scalar;
1313

1414
use crate::array::{
@@ -22,7 +22,7 @@ use crate::stats::{ArrayStatistics, Stat, Statistics, StatsSet};
2222
use crate::stream::{ArrayStream, ArrayStreamAdapter};
2323
use crate::validity::{ArrayValidity, LogicalValidity, ValidityVTable};
2424
use crate::{
25-
ArrayChildrenIterator, ArrayDType, ArrayLen, ArrayMetadata, ArrayTrait, Context,
25+
ArrayChildrenIterator, ArrayDType, ArrayLen, ArrayMetadata, Context,
2626
TryDeserializeArrayMetadata,
2727
};
2828

@@ -335,30 +335,6 @@ impl ArrayData {
335335
pub fn is_encoding(&self, id: EncodingId) -> bool {
336336
self.encoding().id() == id
337337
}
338-
339-
#[inline]
340-
pub fn with_dyn<R, F>(&self, mut f: F) -> R
341-
where
342-
F: FnMut(&dyn ArrayTrait) -> R,
343-
{
344-
let mut result = None;
345-
346-
self.encoding()
347-
.with_dyn(self, &mut |array| {
348-
result = Some(f(array));
349-
Ok(())
350-
})
351-
.unwrap_or_else(|err| {
352-
vortex_panic!(
353-
err,
354-
"Failed to convert Array to {}",
355-
std::any::type_name::<dyn ArrayTrait>()
356-
)
357-
});
358-
359-
// Now we unwrap the optional, which we know to be populated by the closure.
360-
result.vortex_expect("Failed to get result from Array::with_dyn")
361-
}
362338
}
363339

364340
impl Display for ArrayData {

vortex-array/src/encoding/mod.rs

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ use std::any::Any;
44
use std::fmt::{Debug, Display, Formatter};
55
use std::hash::{Hash, Hasher};
66

7-
use vortex_error::{vortex_panic, VortexResult};
8-
97
use crate::compute::ComputeVTable;
108
use crate::stats::StatisticsVTable;
119
use crate::validity::ValidityVTable;
1210
use crate::variants::VariantsVTable;
1311
use crate::visitor::VisitorVTable;
14-
use crate::{ArrayData, ArrayDef, ArrayMetadata, ArrayTrait, IntoCanonicalVTable, MetadataVTable};
12+
use crate::{ArrayData, ArrayMetadata, IntoCanonicalVTable, MetadataVTable};
1513

1614
pub mod opaque;
1715

@@ -63,6 +61,8 @@ impl AsRef<str> for EncodingId {
6361

6462
/// Marker trait for array encodings with their associated Array type.
6563
pub trait Encoding: 'static {
64+
const ID: EncodingId;
65+
6666
type Array;
6767
type Metadata: ArrayMetadata;
6868
}
@@ -86,13 +86,6 @@ pub trait EncodingVTable:
8686
fn id(&self) -> EncodingId;
8787

8888
fn as_any(&self) -> &dyn Any;
89-
90-
/// Unwrap the provided array into an implementation of ArrayTrait
91-
fn with_dyn(
92-
&self,
93-
array: &ArrayData,
94-
f: &mut dyn for<'b> FnMut(&'b (dyn ArrayTrait + 'b)) -> VortexResult<()>,
95-
) -> VortexResult<()>;
9689
}
9790

9891
impl PartialEq for dyn EncodingVTable + '_ {
@@ -107,26 +100,6 @@ impl Hash for dyn EncodingVTable + '_ {
107100
}
108101
}
109102

110-
/// Non-object-safe extensions to the ArrayEncoding trait.
111-
pub trait ArrayEncodingExt {
112-
type D: ArrayDef;
113-
114-
fn with_dyn<R, F>(array: &ArrayData, mut f: F) -> R
115-
where
116-
F: for<'b> FnMut(&'b (dyn ArrayTrait + 'b)) -> R,
117-
{
118-
let typed = <<Self::D as ArrayDef>::Array as TryFrom<ArrayData>>::try_from(array.clone())
119-
.unwrap_or_else(|err| {
120-
vortex_panic!(
121-
err,
122-
"Failed to convert array to {}",
123-
std::any::type_name::<<Self::D as ArrayDef>::Array>()
124-
)
125-
});
126-
f(&typed)
127-
}
128-
}
129-
130103
pub trait ArrayEncodingRef {
131104
fn encoding(&self) -> EncodingRef;
132105
}

vortex-array/src/encoding/opaque.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::validity::{LogicalValidity, ValidityVTable};
1111
use crate::variants::VariantsVTable;
1212
use crate::visitor::{ArrayVisitor, VisitorVTable};
1313
use crate::{
14-
ArrayData, ArrayMetadata, ArrayTrait, Canonical, IntoCanonicalVTable, MetadataVTable,
14+
ArrayData, ArrayMetadata, Canonical, IntoCanonicalVTable, MetadataVTable,
1515
TrySerializeArrayMetadata,
1616
};
1717

@@ -38,17 +38,6 @@ impl EncodingVTable for OpaqueEncoding {
3838
fn as_any(&self) -> &dyn Any {
3939
self
4040
}
41-
42-
fn with_dyn(
43-
&self,
44-
_array: &ArrayData,
45-
_f: &mut dyn for<'b> FnMut(&'b (dyn ArrayTrait + 'b)) -> VortexResult<()>,
46-
) -> VortexResult<()> {
47-
vortex_bail!(
48-
"OpaqueEncoding: with_dyn cannot be called for opaque array ({})",
49-
self.0
50-
)
51-
}
5241
}
5342

5443
impl IntoCanonicalVTable for OpaqueEncoding {

vortex-array/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
pub use canonical::*;
1515
pub use context::*;
1616
pub use data::*;
17-
pub use macros::*;
1817
pub use metadata::*;
1918
pub use paste;
2019
use vortex_dtype::DType;

vortex-array/src/macros.rs

Lines changed: 14 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,7 @@
11
//! The core Vortex macro to create new encodings and array types.
22
3-
use vortex_error::VortexError;
4-
5-
use crate::encoding::{
6-
ArrayEncodingExt, ArrayEncodingRef, EncodingId, EncodingRef, EncodingVTable,
7-
};
8-
use crate::{ArrayData, ArrayMetadata, ArrayTrait, ToArrayData, TryDeserializeArrayMetadata};
9-
10-
/// Trait the defines the set of types relating to an array.
11-
/// Because it has associated types it can't be used as a trait object.
12-
pub trait ArrayDef {
13-
const ID: EncodingId;
14-
const ENCODING: EncodingRef;
15-
16-
type Array: ArrayTrait + TryFrom<ArrayData, Error = VortexError>;
17-
type Metadata: ArrayMetadata + Clone + for<'m> TryDeserializeArrayMetadata<'m>;
18-
type Encoding: EncodingVTable + ArrayEncodingExt<D = Self>;
19-
}
3+
use crate::encoding::{ArrayEncodingRef, EncodingRef};
4+
use crate::{ArrayData, ToArrayData};
205

216
impl<A: AsRef<ArrayData>> ToArrayData for A {
227
fn to_array(&self) -> ArrayData {
@@ -32,22 +17,6 @@ impl<A: AsRef<ArrayData>> ToArrayData for A {
3217
macro_rules! impl_encoding {
3318
($id:literal, $code:expr, $Name:ident) => {
3419
$crate::paste::paste! {
35-
/// The array definition trait
36-
#[derive(std::fmt::Debug, Clone)]
37-
pub struct $Name;
38-
impl $crate::ArrayDef for $Name {
39-
const ID: $crate::encoding::EncodingId = $crate::encoding::EncodingId::new($id, $code);
40-
const ENCODING: $crate::encoding::EncodingRef = &[<$Name Encoding>];
41-
type Array = [<$Name Array>];
42-
type Metadata = [<$Name Metadata>];
43-
type Encoding = [<$Name Encoding>];
44-
}
45-
46-
impl $crate::encoding::Encoding for [<$Name Encoding>] {
47-
type Array = [<$Name Array>];
48-
type Metadata = [<$Name Metadata>];
49-
}
50-
5120
#[derive(std::fmt::Debug, Clone)]
5221
#[repr(transparent)]
5322
pub struct [<$Name Array>]($crate::ArrayData);
@@ -95,11 +64,11 @@ macro_rules! impl_encoding {
9564
type Error = vortex_error::VortexError;
9665

9766
fn try_from(data: $crate::ArrayData) -> vortex_error::VortexResult<Self> {
98-
if data.encoding().id() != <$Name as $crate::ArrayDef>::ID {
67+
if data.encoding().id() != <[<$Name Encoding>] as $crate::encoding::Encoding>::ID {
9968
vortex_error::vortex_bail!(
10069
"Mismatched encoding {}, expected {}",
10170
data.encoding().id().as_ref(),
102-
<$Name as $crate::ArrayDef>::ID,
71+
<[<$Name Encoding>] as $crate::encoding::Encoding>::ID,
10372
);
10473
}
10574
Ok(Self(data))
@@ -112,11 +81,11 @@ macro_rules! impl_encoding {
11281
type Error = vortex_error::VortexError;
11382

11483
fn try_from(data: &'a $crate::ArrayData) -> vortex_error::VortexResult<Self> {
115-
if data.encoding().id() != <$Name as $crate::ArrayDef>::ID {
84+
if data.encoding().id() != <[<$Name Encoding>] as $crate::encoding::Encoding>::ID {
11685
vortex_error::vortex_bail!(
11786
"Mismatched encoding {}, expected {}",
11887
data.encoding().id().as_ref(),
119-
<$Name as $crate::ArrayDef>::ID,
88+
<[<$Name Encoding>] as $crate::encoding::Encoding>::ID,
12089
);
12190
}
12291
Ok(unsafe { std::mem::transmute::<&$crate::ArrayData, &[<$Name Array>]>(data) })
@@ -126,27 +95,22 @@ macro_rules! impl_encoding {
12695
/// The array encoding
12796
#[derive(std::fmt::Debug)]
12897
pub struct [<$Name Encoding>];
98+
99+
impl $crate::encoding::Encoding for [<$Name Encoding>] {
100+
const ID: $crate::encoding::EncodingId = $crate::encoding::EncodingId::new($id, $code);
101+
type Array = [<$Name Array>];
102+
type Metadata = [<$Name Metadata>];
103+
}
104+
129105
impl $crate::encoding::EncodingVTable for [<$Name Encoding>] {
130106
#[inline]
131107
fn id(&self) -> $crate::encoding::EncodingId {
132-
<$Name as $crate::ArrayDef>::ID
108+
<[<$Name Encoding>] as $crate::encoding::Encoding>::ID
133109
}
134110

135111
fn as_any(&self) -> &dyn std::any::Any {
136112
self
137113
}
138-
139-
#[inline]
140-
fn with_dyn(
141-
&self,
142-
array: &$crate::ArrayData,
143-
f: &mut dyn for<'b> FnMut(&'b (dyn $crate::ArrayTrait + 'b)) -> vortex_error::VortexResult<()>,
144-
) -> vortex_error::VortexResult<()> {
145-
<Self as $crate::encoding::ArrayEncodingExt>::with_dyn(array, f)
146-
}
147-
}
148-
impl $crate::encoding::ArrayEncodingExt for [<$Name Encoding>] {
149-
type D = $Name;
150114
}
151115

152116
/// Implement ArrayMetadata

vortex-sampling-compressor/src/compressors/alp.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use vortex_alp::{alp_encode_components, match_each_alp_float_ptype, ALPArray, ALPEncoding, ALP};
1+
use vortex_alp::{alp_encode_components, match_each_alp_float_ptype, ALPArray, ALPEncoding};
22
use vortex_array::aliases::hash_set::HashSet;
33
use vortex_array::array::PrimitiveArray;
4-
use vortex_array::encoding::EncodingRef;
4+
use vortex_array::encoding::{Encoding, EncodingRef};
55
use vortex_array::stats::ArrayStatistics;
66
use vortex_array::variants::PrimitiveArrayTrait;
7-
use vortex_array::{ArrayData, ArrayDef, IntoArrayData, IntoArrayVariant};
7+
use vortex_array::{ArrayData, IntoArrayData, IntoArrayVariant};
88
use vortex_dtype::PType;
99
use vortex_error::VortexResult;
1010

@@ -17,7 +17,7 @@ pub struct ALPCompressor;
1717

1818
impl EncodingCompressor for ALPCompressor {
1919
fn id(&self) -> &str {
20-
ALP::ID.as_ref()
20+
ALPEncoding::ID.as_ref()
2121
}
2222

2323
fn cost(&self) -> u8 {

vortex-sampling-compressor/src/compressors/alp_rd.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use std::any::Any;
22
use std::sync::Arc;
33

4-
use vortex_alp::{match_each_alp_float_ptype, ALPRDEncoding, RDEncoder as ALPRDEncoder, ALPRD};
4+
use vortex_alp::{match_each_alp_float_ptype, ALPRDEncoding, RDEncoder as ALPRDEncoder};
55
use vortex_array::aliases::hash_set::HashSet;
66
use vortex_array::array::PrimitiveArray;
7-
use vortex_array::encoding::EncodingRef;
7+
use vortex_array::encoding::{Encoding, EncodingRef};
88
use vortex_array::stats::ArrayStatistics;
99
use vortex_array::variants::PrimitiveArrayTrait;
10-
use vortex_array::{ArrayData, ArrayDef, IntoArrayData, IntoArrayVariant};
10+
use vortex_array::{ArrayData, IntoArrayData, IntoArrayVariant};
1111
use vortex_dtype::PType;
1212
use vortex_error::{vortex_bail, VortexResult};
1313
use vortex_fastlanes::BitPackedEncoding;
@@ -26,7 +26,7 @@ impl EncoderMetadata for ALPRDEncoder {
2626

2727
impl EncodingCompressor for ALPRDCompressor {
2828
fn id(&self) -> &str {
29-
ALPRD::ID.as_ref()
29+
ALPRDEncoding::ID.as_ref()
3030
}
3131

3232
fn cost(&self) -> u8 {

0 commit comments

Comments
 (0)