Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
d02df0a
Vortex Operators
gatesn Oct 20, 2025
8ebf018
Vortex Operators
gatesn Oct 20, 2025
35c6c5a
Vortex Operators
gatesn Oct 20, 2025
9d2f8b5
Vortex Operators
gatesn Oct 20, 2025
8960529
Merge branch 'develop' into ngates/vxo
gatesn Oct 21, 2025
d5c05e9
Merge branch 'develop' into ngates/vxo
gatesn Oct 21, 2025
00e0126
Use pin-project-lite
gatesn Oct 21, 2025
da544e3
Use pin-project-lite
gatesn Oct 21, 2025
3a54d48
Merge develop
gatesn Oct 21, 2025
ae00a4b
Merge develop
gatesn Oct 21, 2025
900a5d4
Merge develop
gatesn Oct 21, 2025
7be0f4f
Merge develop
gatesn Oct 21, 2025
6fa2f8f
Merge develop
gatesn Oct 21, 2025
3bf5cd0
Merge develop
gatesn Oct 21, 2025
6249285
Merge develop
gatesn Oct 21, 2025
f116a24
Merge develop
gatesn Oct 21, 2025
594d323
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
1e03ada
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
d3f593c
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
b9221c4
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
974fd46
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
1bea5a6
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
2e4ff2f
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
7e81fbb
Add Hash/Eq to FSST symbol
gatesn Oct 22, 2025
9253b07
Add Hash/Eq to FSST symbol
gatesn Oct 23, 2025
bf8ee29
Add Hash/Eq to FSST symbol
gatesn Oct 23, 2025
93a018e
Merge branch 'develop' into ngates/vxo
gatesn Oct 23, 2025
e85af84
Add Hash/Eq to FSST symbol
gatesn Oct 23, 2025
f9bbf54
Vortex Compute
gatesn Oct 23, 2025
b2bf1fa
Vortex Compute
gatesn Oct 24, 2025
22daabe
Vortex Compute
gatesn Oct 24, 2025
3bc6365
Vortex Compute
gatesn Oct 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion encodings/alp/src/alp/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl VTable for ALPVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.alp")
Expand Down
2 changes: 1 addition & 1 deletion encodings/alp/src/alp_rd/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl VTable for ALPRDVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.alprd")
Expand Down
2 changes: 1 addition & 1 deletion encodings/bytebool/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ impl VTable for ByteBoolVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = NotSupported;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.bytebool")
Expand Down
2 changes: 1 addition & 1 deletion encodings/datetime-parts/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl VTable for DateTimePartsVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.datetimeparts")
Expand Down
2 changes: 1 addition & 1 deletion encodings/decimal-byte-parts/src/decimal_byte_parts/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl VTable for DecimalBytePartsVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = NotSupported;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.decimal_byte_parts")
Expand Down
2 changes: 1 addition & 1 deletion encodings/dict/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl VTable for DictVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.dict")
Expand Down
2 changes: 1 addition & 1 deletion encodings/fastlanes/src/bitpacking/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl VTable for BitPackedVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = Self;
type OperatorVTable = Self;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("fastlanes.bitpacked")
Expand Down
4 changes: 2 additions & 2 deletions encodings/fastlanes/src/bitpacking/operator/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ use vortex_array::operator::{
LengthBounds, Operator, OperatorEq, OperatorHash, OperatorId, OperatorRef,
};
use vortex_array::pipeline::{BindContext, Kernel, PipelinedOperator, RowSelection};
use vortex_array::vtable::PipelineVTable;
use vortex_array::vtable::OperatorVTable;
use vortex_buffer::Buffer;
use vortex_dtype::{DType, PhysicalPType, match_each_integer_ptype};
use vortex_error::VortexResult;

use crate::operator::aligned_kernel::BitPackedKernel;
use crate::{BitPackedArray, BitPackedVTable};

impl PipelineVTable<BitPackedVTable> for BitPackedVTable {
impl OperatorVTable<BitPackedVTable> for BitPackedVTable {
fn to_operator(array: &BitPackedArray) -> VortexResult<Option<OperatorRef>> {
if array.dtype.is_nullable() {
log::trace!("BitPackedVTable does not support nullable arrays");
Expand Down
2 changes: 1 addition & 1 deletion encodings/fastlanes/src/delta/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl VTable for DeltaVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = NotSupported;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("fastlanes.delta")
Expand Down
2 changes: 1 addition & 1 deletion encodings/fastlanes/src/for/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl VTable for FoRVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = Self;
type OperatorVTable = Self;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("fastlanes.for")
Expand Down
4 changes: 2 additions & 2 deletions encodings/fastlanes/src/for/pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ use vortex_array::pipeline::view::ViewMut;
use vortex_array::pipeline::{
BindContext, Element, Kernel, KernelContext, PipelinedOperator, RowSelection, VectorId,
};
use vortex_array::vtable::PipelineVTable;
use vortex_array::vtable::OperatorVTable;
use vortex_dtype::{DType, NativePType, PType, match_each_integer_ptype};
use vortex_error::{VortexExpect, VortexResult, vortex_bail};
use vortex_scalar::Scalar;

use crate::{FoRArray, FoRVTable};

impl PipelineVTable<FoRVTable> for FoRVTable {
impl OperatorVTable<FoRVTable> for FoRVTable {
fn to_operator(array: &FoRArray) -> VortexResult<Option<OperatorRef>> {
let Some(op) = array.encoded.to_operator()? else {
return Ok(None);
Expand Down
2 changes: 1 addition & 1 deletion encodings/fastlanes/src/rle/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl VTable for RLEVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("fastlanes.rle")
Expand Down
2 changes: 1 addition & 1 deletion encodings/fsst/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl VTable for FSSTVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = Self;
type OperatorVTable = Self;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.fsst")
Expand Down
4 changes: 2 additions & 2 deletions encodings/fsst/src/operator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ use vortex_array::operator::{
BatchBindCtx, BatchExecution, BatchExecutionRef, BatchOperator, LengthBounds, Operator,
OperatorEq, OperatorHash, OperatorId, OperatorRef,
};
use vortex_array::vtable::PipelineVTable;
use vortex_array::vtable::OperatorVTable;
use vortex_array::{Array, Canonical};
use vortex_dtype::DType;
use vortex_error::VortexResult;
use vortex_mask::Mask;

use crate::{FSSTArray, FSSTVTable};

impl PipelineVTable<FSSTVTable> for FSSTVTable {
impl OperatorVTable<FSSTVTable> for FSSTVTable {
fn to_operator(array: &FSSTArray) -> VortexResult<Option<OperatorRef>> {
Ok(Some(Arc::new(array.clone())))
}
Expand Down
2 changes: 1 addition & 1 deletion encodings/pco/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ impl VTable for PcoVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.pco")
Expand Down
2 changes: 1 addition & 1 deletion encodings/runend/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ impl VTable for RunEndVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.runend")
Expand Down
2 changes: 1 addition & 1 deletion encodings/sequence/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ impl VTable for SequenceVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = Self;
type OperatorVTable = Self;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.sequence")
Expand Down
4 changes: 2 additions & 2 deletions encodings/sequence/src/operator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ use vortex_array::pipeline::view::ViewMut;
use vortex_array::pipeline::{
BindContext, Element, Kernel, KernelContext, N, PipelinedOperator, RowSelection,
};
use vortex_array::vtable::PipelineVTable;
use vortex_array::vtable::OperatorVTable;
use vortex_dtype::{DType, IntegerPType, NativePType, match_each_integer_ptype};
use vortex_error::{VortexResult, vortex_err};

use crate::{SequenceArray, SequenceVTable};

impl PipelineVTable<SequenceVTable> for SequenceVTable {
impl OperatorVTable<SequenceVTable> for SequenceVTable {
fn to_operator(array: &SequenceArray) -> VortexResult<Option<OperatorRef>> {
Ok(Some(Arc::new(array.clone())))
}
Expand Down
2 changes: 1 addition & 1 deletion encodings/sparse/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl VTable for SparseVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.sparse")
Expand Down
2 changes: 1 addition & 1 deletion encodings/zigzag/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ impl VTable for ZigZagVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.zigzag")
Expand Down
2 changes: 1 addition & 1 deletion encodings/zstd/src/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ impl VTable for ZstdVTable {
type ComputeVTable = NotSupported;
type EncodeVTable = Self;
type SerdeVTable = Self;
type PipelineVTable = NotSupported;
type OperatorVTable = NotSupported;

fn id(_encoding: &Self::Encoding) -> EncodingId {
EncodingId::new_ref("vortex.zstd")
Expand Down
6 changes: 5 additions & 1 deletion vortex-array/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ async-trait = { workspace = true }
bitvec = { workspace = true }
cfg-if = { workspace = true }
enum-iterator = { workspace = true }
enum-map = { workspace = true }
flatbuffers = { workspace = true }
futures = { workspace = true, features = ["alloc", "async-await", "std"] }
getrandom_v03 = { workspace = true }
Expand All @@ -60,13 +61,16 @@ tabled = { workspace = true, optional = true, default-features = false, features
] }
termtree = { workspace = true }
vortex-buffer = { workspace = true, features = ["arrow"] }
vortex-dtype = { workspace = true, features = ["arrow"] }
vortex-compute = { workspace = true, default-features = true }
vortex-dtype = { workspace = true, features = ["arrow", "serde"] }
vortex-error = { workspace = true, features = ["prost"] }
vortex-flatbuffers = { workspace = true, features = ["array"] }
vortex-io = { workspace = true }
vortex-mask = { workspace = true }
vortex-metrics = { workspace = true }
vortex-scalar = { workspace = true }
vortex-utils = { workspace = true }
vortex-vector = { workspace = true }

[features]
arbitrary = [
Expand Down
18 changes: 14 additions & 4 deletions vortex-array/src/array/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-FileCopyrightText: Copyright the Vortex contributors

pub mod display;
mod operator;
mod visitor;

use std::any::Any;
Expand All @@ -10,6 +11,7 @@ use std::hash::{Hash, Hasher};
use std::ops::Range;
use std::sync::Arc;

pub use operator::*;
pub use visitor::*;
use vortex_buffer::ByteBuffer;
use vortex_dtype::{DType, Nullability};
Expand All @@ -28,7 +30,7 @@ use crate::operator::OperatorRef;
use crate::serde::ArrayChildren;
use crate::stats::{Precision, Stat, StatsProviderExt, StatsSetRef};
use crate::vtable::{
ArrayVTable, CanonicalVTable, ComputeVTable, OperationsVTable, PipelineVTable, SerdeVTable,
ArrayVTable, CanonicalVTable, ComputeVTable, OperationsVTable, OperatorVTable, SerdeVTable,
VTable, ValidityVTable, VisitorVTable,
};
use crate::{
Expand All @@ -38,7 +40,15 @@ use crate::{

/// The public API trait for all Vortex arrays.
pub trait Array:
'static + private::Sealed + Send + Sync + Debug + DynArrayEq + DynArrayHash + ArrayVisitor
'static
+ private::Sealed
+ Send
+ Sync
+ Debug
+ DynArrayEq
+ DynArrayHash
+ ArrayVisitor
+ ArrayOperator
{
/// Returns the array as a reference to a generic [`Any`] trait object.
fn as_any(&self) -> &dyn Any;
Expand Down Expand Up @@ -159,7 +169,7 @@ pub trait Array:
fn invoke(&self, compute_fn: &ComputeFn, args: &InvocationArgs)
-> VortexResult<Option<Output>>;

/// Convert the array to a operator operator if supported by the encoding.
/// Convert the array to an operator if supported by the encoding.
///
/// Returns `None` if the encoding does not support operator operations.
fn to_operator(&self) -> VortexResult<Option<OperatorRef>>;
Expand Down Expand Up @@ -640,7 +650,7 @@ impl<V: VTable> Array for ArrayAdapter<V> {
}

fn to_operator(&self) -> VortexResult<Option<OperatorRef>> {
<V::PipelineVTable as PipelineVTable<V>>::to_operator(&self.0)
<V::OperatorVTable as OperatorVTable<V>>::to_operator(&self.0)
}
}

Expand Down
Loading
Loading