Skip to content

Commit 3fc06ec

Browse files
committed
wip
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent e2ba139 commit 3fc06ec

21 files changed

Lines changed: 126 additions & 97 deletions

File tree

encodings/alp/benches/alp_compress.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fn compress_alp<T: ALPFloat + NativePType>(bencher: Bencher, args: (usize, f64,
6868

6969
bencher
7070
.with_inputs(|| &array)
71-
.bench_values(|array| alp_encode(array.as_view(), None).unwrap())
71+
.bench_values(|array| alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap())
7272
}
7373

7474
#[divan::bench(types = [f32, f64], args = BENCH_ARGS)]
@@ -95,6 +95,7 @@ fn decompress_alp<T: ALPFloat + NativePType>(bencher: Bencher, args: (usize, f64
9595
alp_encode(
9696
PrimitiveArray::new(Buffer::copy_from(&values), validity.clone()).as_view(),
9797
None,
98+
&mut LEGACY_SESSION.create_execution_ctx(),
9899
)
99100
.unwrap(),
100101
LEGACY_SESSION.create_execution_ctx(),

encodings/alp/src/alp/array.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -552,11 +552,11 @@ mod tests {
552552
#[case(2048)]
553553
#[case(2049)]
554554
fn test_execute_f32(#[case] size: usize) {
555+
let mut ctx = SESSION.create_execution_ctx();
555556
let values = PrimitiveArray::from_iter((0..size).map(|i| i as f32));
556-
let encoded = alp_encode(values.as_view(), None).unwrap();
557+
let encoded = alp_encode(values.as_view(), None, &mut ctx).unwrap();
557558

558559
let result_canonical = {
559-
let mut ctx = SESSION.create_execution_ctx();
560560
encoded
561561
.clone()
562562
.into_array()
@@ -582,7 +582,7 @@ mod tests {
582582
#[case(2049)]
583583
fn test_execute_f64(#[case] size: usize) {
584584
let values = PrimitiveArray::from_iter((0..size).map(|i| i as f64));
585-
let encoded = alp_encode(values.as_view(), None).unwrap();
585+
let encoded = alp_encode(values.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
586586

587587
let result_canonical = {
588588
let mut ctx = SESSION.create_execution_ctx();
@@ -616,7 +616,7 @@ mod tests {
616616
.collect();
617617

618618
let array = PrimitiveArray::from_iter(values);
619-
let encoded = alp_encode(array.as_view(), None).unwrap();
619+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
620620
assert!(encoded.patches().unwrap().array_len() > 0);
621621

622622
let result_canonical = {
@@ -650,7 +650,7 @@ mod tests {
650650
.collect();
651651

652652
let array = PrimitiveArray::from_option_iter(values);
653-
let encoded = alp_encode(array.as_view(), None).unwrap();
653+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
654654

655655
let result_canonical = {
656656
let mut ctx = SESSION.create_execution_ctx();
@@ -685,7 +685,7 @@ mod tests {
685685
.collect();
686686

687687
let array = PrimitiveArray::from_option_iter(values);
688-
let encoded = alp_encode(array.as_view(), None).unwrap();
688+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
689689
assert!(encoded.patches().unwrap().array_len() > 0);
690690

691691
let result_canonical = {
@@ -721,7 +721,7 @@ mod tests {
721721
.collect();
722722

723723
let array = PrimitiveArray::from_option_iter(values.clone());
724-
let encoded = alp_encode(array.as_view(), None).unwrap();
724+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
725725

726726
let slice_end = size - slice_start;
727727
let slice_len = slice_end - slice_start;
@@ -772,7 +772,7 @@ mod tests {
772772
.collect();
773773

774774
let array = PrimitiveArray::from_option_iter(values.clone());
775-
let encoded = alp_encode(array.as_view(), None).unwrap();
775+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
776776

777777
let slice_end = size - slice_start;
778778
let slice_len = slice_end - slice_start;
@@ -822,7 +822,7 @@ mod tests {
822822
let original = PrimitiveArray::from_iter(values);
823823

824824
// First encode normally to get a properly formed ALPArray with patches.
825-
let normally_encoded = alp_encode(original.as_view(), None).unwrap();
825+
let normally_encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
826826
assert!(
827827
normally_encoded.patches().is_some(),
828828
"Test requires patches to be present"

encodings/alp/src/alp/compress.rs

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
use itertools::Itertools;
55
use vortex_array::ArrayRef;
66
use vortex_array::ArrayView;
7+
use vortex_array::ExecutionCtx;
78
use vortex_array::IntoArray;
8-
use vortex_array::LEGACY_SESSION;
9-
use vortex_array::VortexSessionExecute;
109
use vortex_array::arrays::Primitive;
1110
use vortex_array::arrays::PrimitiveArray;
1211
use vortex_array::dtype::PType;
@@ -46,10 +45,11 @@ macro_rules! match_each_alp_float_ptype {
4645
pub fn alp_encode(
4746
parray: ArrayView<'_, Primitive>,
4847
exponents: Option<Exponents>,
48+
ctx: &mut ExecutionCtx,
4949
) -> VortexResult<ALPArray> {
5050
let (exponents, encoded, patches) = match parray.ptype() {
51-
PType::F32 => alp_encode_components_typed::<f32>(parray, exponents)?,
52-
PType::F64 => alp_encode_components_typed::<f64>(parray, exponents)?,
51+
PType::F32 => alp_encode_components_typed::<f32>(parray, exponents, ctx)?,
52+
PType::F64 => alp_encode_components_typed::<f64>(parray, exponents, ctx)?,
5353
_ => vortex_bail!("ALP can only encode f32 and f64"),
5454
};
5555

@@ -64,6 +64,7 @@ pub fn alp_encode(
6464
fn alp_encode_components_typed<T>(
6565
values: ArrayView<'_, Primitive>,
6666
exponents: Option<Exponents>,
67+
ctx: &mut ExecutionCtx,
6768
) -> VortexResult<(Exponents, ArrayRef, Option<Patches>)>
6869
where
6970
T: ALPFloat,
@@ -75,10 +76,10 @@ where
7576

7677
let encoded_array = PrimitiveArray::new(encoded, values.validity()?).into_array();
7778

78-
let validity = values.array().validity()?.to_mask(
79-
values.array().len(),
80-
&mut LEGACY_SESSION.create_execution_ctx(),
81-
)?;
79+
let validity = values
80+
.array()
81+
.validity()?
82+
.to_mask(values.array().len(), ctx)?;
8283
// exceptional_positions may contain exceptions at invalid positions (which contain garbage
8384
// data). We remove null exceptions in order to keep the Patches small.
8485
let (valid_exceptional_positions, valid_exceptional_values): (Buffer<u64>, Buffer<T>) =
@@ -151,7 +152,7 @@ mod tests {
151152
#[test]
152153
fn test_compress() {
153154
let array = PrimitiveArray::new(buffer![1.234f32; 1025], Validity::NonNullable);
154-
let encoded = alp_encode(array.as_view(), None).unwrap();
155+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
155156
assert!(encoded.patches().is_none());
156157
let expected_encoded = PrimitiveArray::from_iter(vec![1234i32; 1025]);
157158
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -165,7 +166,7 @@ mod tests {
165166
#[test]
166167
fn test_nullable_compress() {
167168
let array = PrimitiveArray::from_option_iter([None, Some(1.234f32), None]);
168-
let encoded = alp_encode(array.as_view(), None).unwrap();
169+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
169170
assert!(encoded.patches().is_none());
170171
let expected_encoded = PrimitiveArray::from_option_iter([None, Some(1234i32), None]);
171172
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -182,7 +183,7 @@ mod tests {
182183
fn test_patched_compress() {
183184
let values = buffer![1.234f64, 2.718, PI, 4.0];
184185
let array = PrimitiveArray::new(values.clone(), Validity::NonNullable);
185-
let encoded = alp_encode(array.as_view(), None).unwrap();
186+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
186187
assert!(encoded.patches().is_some());
187188
let expected_encoded = PrimitiveArray::from_iter(vec![1234i64, 2718, 1234, 4000]);
188189
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -199,7 +200,7 @@ mod tests {
199200
fn test_compress_ignores_invalid_exceptional_values() {
200201
let values = buffer![1.234f64, 2.718, PI, 4.0];
201202
let array = PrimitiveArray::new(values, Validity::from_iter([true, true, false, true]));
202-
let encoded = alp_encode(array.as_view(), None).unwrap();
203+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
203204
assert!(encoded.patches().is_none());
204205
let expected_encoded =
205206
PrimitiveArray::from_option_iter(buffer![Some(1234i64), Some(2718), None, Some(4000)]);
@@ -221,7 +222,7 @@ mod tests {
221222
Some(4.0),
222223
None,
223224
]);
224-
let encoded = alp_encode(array.as_view(), None).unwrap();
225+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
225226
assert!(encoded.patches().is_some());
226227

227228
assert_eq!(encoded.exponents(), Exponents { e: 16, f: 13 });
@@ -235,15 +236,15 @@ mod tests {
235236
#[test]
236237
fn roundtrips_close_fractional() {
237238
let original = PrimitiveArray::from_iter([195.26274f32, 195.27837, -48.815685]);
238-
let alp_arr = alp_encode(original.as_view(), None).unwrap();
239+
let alp_arr = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
239240
assert_arrays_eq!(alp_arr, original);
240241
}
241242

242243
#[test]
243244
fn roundtrips_all_null() {
244245
let original =
245246
PrimitiveArray::new(buffer![195.26274f64, PI, -48.815685], Validity::AllInvalid);
246-
let alp_arr = alp_encode(original.as_view(), None).unwrap();
247+
let alp_arr = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
247248
let decompressed = alp_arr.into_array().to_primitive();
248249

249250
assert_eq!(
@@ -261,7 +262,7 @@ mod tests {
261262
buffer![0.0f32, -0.0, f32::NAN, f32::NEG_INFINITY, f32::INFINITY],
262263
Validity::NonNullable,
263264
);
264-
let encoded = alp_encode(original.as_view(), None).unwrap();
265+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
265266
let decoded = encoded.as_array().to_primitive();
266267
for idx in 0..original.len() {
267268
let decoded_val = decoded.as_slice::<f32>()[idx];
@@ -282,7 +283,7 @@ mod tests {
282283
values[1025] = PI;
283284

284285
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
285-
let encoded = alp_encode(array.as_view(), None).unwrap();
286+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
286287
let patches = encoded.patches().unwrap();
287288

288289
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -305,7 +306,7 @@ mod tests {
305306
values[2048] = E;
306307

307308
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
308-
let encoded = alp_encode(array.as_view(), None).unwrap();
309+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
309310
let patches = encoded.patches().unwrap();
310311

311312
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -327,7 +328,7 @@ mod tests {
327328
values[0] = PI;
328329

329330
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
330-
let encoded = alp_encode(array.as_view(), None).unwrap();
331+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
331332
let patches = encoded.patches().unwrap();
332333

333334
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -350,7 +351,7 @@ mod tests {
350351
values[100] = E;
351352

352353
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
353-
let encoded = alp_encode(array.as_view(), None).unwrap();
354+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
354355
let patches = encoded.patches().unwrap();
355356

356357
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -371,7 +372,7 @@ mod tests {
371372
// Create 1024 elements, encode, slice to first 512, then decode
372373
let values = vec![1.234f32; 1024];
373374
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
374-
let encoded = alp_encode(original.as_view(), None).unwrap();
375+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
375376

376377
let sliced_alp = encoded.slice(512..1024).unwrap();
377378

@@ -383,7 +384,7 @@ mod tests {
383384
fn test_slice_half_chunk_f64_roundtrip() {
384385
let values = vec![5.678f64; 1024];
385386
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
386-
let encoded = alp_encode(original.as_view(), None).unwrap();
387+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
387388

388389
let sliced_alp = encoded.slice(512..1024).unwrap();
389390

@@ -399,7 +400,7 @@ mod tests {
399400
values[600] = 42.42;
400401

401402
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
402-
let encoded = alp_encode(original.as_view(), None).unwrap();
403+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
403404

404405
let sliced_alp = encoded.slice(512..1024).unwrap();
405406

@@ -419,7 +420,7 @@ mod tests {
419420
values[1023] = 42.42;
420421

421422
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
422-
let encoded = alp_encode(original.as_view(), None).unwrap();
423+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
423424

424425
let sliced_alp = encoded.slice(1023..1025).unwrap();
425426

@@ -435,7 +436,7 @@ mod tests {
435436
.collect::<Vec<_>>();
436437

437438
let original = PrimitiveArray::from_option_iter(values);
438-
let encoded = alp_encode(original.as_view(), None).unwrap();
439+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
439440

440441
let sliced_alp = encoded.slice(512..1024).unwrap();
441442
let decoded = sliced_alp.to_primitive();
@@ -448,7 +449,7 @@ mod tests {
448449
fn test_large_f32_array_uniform_values() {
449450
let size = 10_000;
450451
let array = PrimitiveArray::new(buffer![42.125f32; size], Validity::NonNullable);
451-
let encoded = alp_encode(array.as_view(), None).unwrap();
452+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
452453

453454
assert!(encoded.patches().is_none());
454455
let decoded =
@@ -460,7 +461,7 @@ mod tests {
460461
fn test_large_f64_array_uniform_values() {
461462
let size = 50_000;
462463
let array = PrimitiveArray::new(buffer![123.456789f64; size], Validity::NonNullable);
463-
let encoded = alp_encode(array.as_view(), None).unwrap();
464+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
464465

465466
assert!(encoded.patches().is_none());
466467
let decoded =
@@ -478,7 +479,7 @@ mod tests {
478479
values[4500] = f32::INFINITY;
479480

480481
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
481-
let encoded = alp_encode(array.as_view(), None).unwrap();
482+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
482483

483484
assert!(encoded.patches().is_some());
484485
let decoded =
@@ -500,7 +501,7 @@ mod tests {
500501
values[7000] = 999.999999999;
501502

502503
let array = PrimitiveArray::new(Buffer::from(values.clone()), Validity::NonNullable);
503-
let encoded = alp_encode(array.as_view(), None).unwrap();
504+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
504505

505506
assert!(encoded.patches().is_some());
506507
let decoded =
@@ -530,7 +531,7 @@ mod tests {
530531
.collect();
531532

532533
let array = PrimitiveArray::from_option_iter(values);
533-
let encoded = alp_encode(array.as_view(), None).unwrap();
534+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
534535
let decoded =
535536
decompress_into_array(encoded, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
536537

@@ -551,7 +552,7 @@ mod tests {
551552
let validity = Validity::from_iter((0..size).map(|i| !matches!(i, 500 | 2500)));
552553

553554
let array = PrimitiveArray::new(Buffer::from(values), validity);
554-
let encoded = alp_encode(array.as_view(), None).unwrap();
555+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
555556
let decoded =
556557
decompress_into_array(encoded, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
557558

@@ -582,7 +583,7 @@ mod tests {
582583
values[2900] = PI;
583584

584585
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
585-
let encoded = alp_encode(original.as_view(), None).unwrap();
586+
let encoded = alp_encode(original.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
586587
assert!(encoded.patches().is_some());
587588

588589
// Slice ending mid-chunk-2 (element 2500 is inside chunk 2 = 2048..3072).

encodings/alp/src/alp/compute/between.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ where
9595

9696
#[cfg(test)]
9797
mod tests {
98+
use vortex_array::LEGACY_SESSION;
99+
use vortex_array::VortexSessionExecute;
98100
use vortex_array::arrays::BoolArray;
99101
use vortex_array::arrays::PrimitiveArray;
100102
use vortex_array::assert_arrays_eq;
@@ -123,7 +125,7 @@ mod tests {
123125
fn comparison_range() {
124126
let value = 0.0605_f32;
125127
let array = PrimitiveArray::from_iter([value; 1]);
126-
let encoded = alp_encode(array.as_view(), None).unwrap();
128+
let encoded = alp_encode(array.as_view(), None, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
127129
assert!(encoded.patches().is_none());
128130

129131
assert_between(

0 commit comments

Comments
 (0)