Skip to content

Commit 73798ad

Browse files
committed
replace &PrimitiveArray with ArrayView in a bunch of places
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
1 parent 50d64a4 commit 73798ad

59 files changed

Lines changed: 387 additions & 359 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

encodings/alp/benches/alp_compress.rs

Lines changed: 4 additions & 4 deletions
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, None).unwrap())
71+
.bench_values(|array| alp_encode(array.as_view(), None).unwrap())
7272
}
7373

7474
#[divan::bench(types = [f32, f64], args = BENCH_ARGS)]
@@ -93,7 +93,7 @@ fn decompress_alp<T: ALPFloat + NativePType>(bencher: Bencher, args: (usize, f64
9393
.with_inputs(|| {
9494
(
9595
alp_encode(
96-
&PrimitiveArray::new(Buffer::copy_from(&values), validity.clone()),
96+
PrimitiveArray::new(Buffer::copy_from(&values), validity.clone()).as_view(),
9797
None,
9898
)
9999
.unwrap(),
@@ -136,15 +136,15 @@ fn compress_rd<T: ALPRDFloat + NativePType>(bencher: Bencher, args: (usize, f64)
136136

137137
bencher
138138
.with_inputs(|| (&primitive, &encoder))
139-
.bench_refs(|(primitive, encoder)| encoder.encode(primitive))
139+
.bench_refs(|(primitive, encoder)| encoder.encode(primitive.as_view()))
140140
}
141141

142142
#[divan::bench(types = [f32, f64], args = RD_BENCH_ARGS)]
143143
fn decompress_rd<T: ALPRDFloat + NativePType>(bencher: Bencher, args: (usize, f64)) {
144144
let (n, fraction_patch) = args;
145145
let primitive = make_rd_array::<T>(n, fraction_patch);
146146
let encoder = RDEncoder::new(primitive.as_slice::<T>());
147-
let encoded = encoder.encode(&primitive);
147+
let encoded = encoder.encode(primitive.as_view());
148148

149149
bencher
150150
.with_inputs(|| &encoded)

encodings/alp/public-api.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ pub struct vortex_alp::RDEncoder
386386

387387
impl vortex_alp::RDEncoder
388388

389-
pub fn vortex_alp::RDEncoder::encode(&self, array: &vortex_array::arrays::primitive::vtable::PrimitiveArray) -> vortex_alp::ALPRDArray
389+
pub fn vortex_alp::RDEncoder::encode(&self, array: vortex_array::array::view::ArrayView<'_, vortex_array::arrays::primitive::vtable::Primitive>) -> vortex_alp::ALPRDArray
390390

391391
pub fn vortex_alp::RDEncoder::from_parts(right_bit_width: u8, codes: alloc::vec::Vec<u16>) -> Self
392392

@@ -642,7 +642,7 @@ pub fn f64::to_bits(value: Self) -> Self::UINT
642642

643643
pub fn f64::to_u16(bits: Self::UINT) -> u16
644644

645-
pub fn vortex_alp::alp_encode(parray: &vortex_array::arrays::primitive::vtable::PrimitiveArray, exponents: core::option::Option<vortex_alp::Exponents>) -> vortex_error::VortexResult<vortex_alp::ALPArray>
645+
pub fn vortex_alp::alp_encode(parray: vortex_array::array::view::ArrayView<'_, vortex_array::arrays::primitive::vtable::Primitive>, exponents: core::option::Option<vortex_alp::Exponents>) -> vortex_error::VortexResult<vortex_alp::ALPArray>
646646

647647
pub fn vortex_alp::alp_rd_decode<T: vortex_alp::ALPRDFloat>(left_parts: vortex_buffer::buffer_mut::BufferMut<u16>, left_parts_dict: &[u16], right_bit_width: u8, right_parts: vortex_buffer::buffer_mut::BufferMut<<T as vortex_alp::ALPRDFloat>::UINT>, left_parts_patches: core::option::Option<vortex_array::patches::Patches>, ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_buffer::buffer::Buffer<T>>
648648

encodings/alp/src/alp/array.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ mod tests {
555555
#[case(2049)]
556556
fn test_execute_f32(#[case] size: usize) {
557557
let values = PrimitiveArray::from_iter((0..size).map(|i| i as f32));
558-
let encoded = alp_encode(&values, None).unwrap();
558+
let encoded = alp_encode(values.as_view(), None).unwrap();
559559

560560
let result_canonical = {
561561
let mut ctx = SESSION.create_execution_ctx();
@@ -584,7 +584,7 @@ mod tests {
584584
#[case(2049)]
585585
fn test_execute_f64(#[case] size: usize) {
586586
let values = PrimitiveArray::from_iter((0..size).map(|i| i as f64));
587-
let encoded = alp_encode(&values, None).unwrap();
587+
let encoded = alp_encode(values.as_view(), None).unwrap();
588588

589589
let result_canonical = {
590590
let mut ctx = SESSION.create_execution_ctx();
@@ -618,7 +618,7 @@ mod tests {
618618
.collect();
619619

620620
let array = PrimitiveArray::from_iter(values);
621-
let encoded = alp_encode(&array, None).unwrap();
621+
let encoded = alp_encode(array.as_view(), None).unwrap();
622622
assert!(encoded.patches().unwrap().array_len() > 0);
623623

624624
let result_canonical = {
@@ -652,7 +652,7 @@ mod tests {
652652
.collect();
653653

654654
let array = PrimitiveArray::from_option_iter(values);
655-
let encoded = alp_encode(&array, None).unwrap();
655+
let encoded = alp_encode(array.as_view(), None).unwrap();
656656

657657
let result_canonical = {
658658
let mut ctx = SESSION.create_execution_ctx();
@@ -687,7 +687,7 @@ mod tests {
687687
.collect();
688688

689689
let array = PrimitiveArray::from_option_iter(values);
690-
let encoded = alp_encode(&array, None).unwrap();
690+
let encoded = alp_encode(array.as_view(), None).unwrap();
691691
assert!(encoded.patches().unwrap().array_len() > 0);
692692

693693
let result_canonical = {
@@ -723,7 +723,7 @@ mod tests {
723723
.collect();
724724

725725
let array = PrimitiveArray::from_option_iter(values.clone());
726-
let encoded = alp_encode(&array, None).unwrap();
726+
let encoded = alp_encode(array.as_view(), None).unwrap();
727727

728728
let slice_end = size - slice_start;
729729
let slice_len = slice_end - slice_start;
@@ -774,7 +774,7 @@ mod tests {
774774
.collect();
775775

776776
let array = PrimitiveArray::from_option_iter(values.clone());
777-
let encoded = alp_encode(&array, None).unwrap();
777+
let encoded = alp_encode(array.as_view(), None).unwrap();
778778

779779
let slice_end = size - slice_start;
780780
let slice_len = slice_end - slice_start;
@@ -815,7 +815,7 @@ mod tests {
815815
let original = PrimitiveArray::from_iter(values);
816816

817817
// First encode normally to get a properly formed ALPArray with patches.
818-
let normally_encoded = alp_encode(&original, None).unwrap();
818+
let normally_encoded = alp_encode(original.as_view(), None).unwrap();
819819
assert!(
820820
normally_encoded.patches().is_some(),
821821
"Test requires patches to be present"

encodings/alp/src/alp/compress.rs

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
use itertools::Itertools;
55
use vortex_array::ArrayRef;
6+
use vortex_array::ArrayView;
67
use vortex_array::IntoArray;
8+
use vortex_array::arrays::Primitive;
79
use vortex_array::arrays::PrimitiveArray;
810
use vortex_array::dtype::PType;
911
use vortex_array::patches::Patches;
@@ -39,7 +41,10 @@ macro_rules! match_each_alp_float_ptype {
3941
}};
4042
}
4143

42-
pub fn alp_encode(parray: &PrimitiveArray, exponents: Option<Exponents>) -> VortexResult<ALPArray> {
44+
pub fn alp_encode(
45+
parray: ArrayView<'_, Primitive>,
46+
exponents: Option<Exponents>,
47+
) -> VortexResult<ALPArray> {
4348
let (exponents, encoded, patches) = match parray.ptype() {
4449
PType::F32 => alp_encode_components_typed::<f32>(parray, exponents)?,
4550
PType::F64 => alp_encode_components_typed::<f64>(parray, exponents)?,
@@ -55,7 +60,7 @@ pub fn alp_encode(parray: &PrimitiveArray, exponents: Option<Exponents>) -> Vort
5560
reason = "u64 index cast to usize is safe for reasonable array sizes"
5661
)]
5762
fn alp_encode_components_typed<T>(
58-
values: &PrimitiveArray,
63+
values: ArrayView<'_, Primitive>,
5964
exponents: Option<Exponents>,
6065
) -> VortexResult<(Exponents, ArrayRef, Option<Patches>)>
6166
where
@@ -68,7 +73,7 @@ where
6873

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

71-
let validity = values.validity_mask()?;
76+
let validity = values.array().validity_mask()?;
7277
// exceptional_positions may contain exceptions at invalid positions (which contain garbage
7378
// data). We remove null exceptions in order to keep the Patches small.
7479
let (valid_exceptional_positions, valid_exceptional_values): (Buffer<u64>, Buffer<T>) =
@@ -141,7 +146,7 @@ mod tests {
141146
#[test]
142147
fn test_compress() {
143148
let array = PrimitiveArray::new(buffer![1.234f32; 1025], Validity::NonNullable);
144-
let encoded = alp_encode(&array, None).unwrap();
149+
let encoded = alp_encode(array.as_view(), None).unwrap();
145150
assert!(encoded.patches().is_none());
146151
let expected_encoded = PrimitiveArray::from_iter(vec![1234i32; 1025]);
147152
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -155,7 +160,7 @@ mod tests {
155160
#[test]
156161
fn test_nullable_compress() {
157162
let array = PrimitiveArray::from_option_iter([None, Some(1.234f32), None]);
158-
let encoded = alp_encode(&array, None).unwrap();
163+
let encoded = alp_encode(array.as_view(), None).unwrap();
159164
assert!(encoded.patches().is_none());
160165
let expected_encoded = PrimitiveArray::from_option_iter([None, Some(1234i32), None]);
161166
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -172,7 +177,7 @@ mod tests {
172177
fn test_patched_compress() {
173178
let values = buffer![1.234f64, 2.718, PI, 4.0];
174179
let array = PrimitiveArray::new(values.clone(), Validity::NonNullable);
175-
let encoded = alp_encode(&array, None).unwrap();
180+
let encoded = alp_encode(array.as_view(), None).unwrap();
176181
assert!(encoded.patches().is_some());
177182
let expected_encoded = PrimitiveArray::from_iter(vec![1234i64, 2718, 1234, 4000]);
178183
assert_arrays_eq!(encoded.encoded(), expected_encoded);
@@ -189,7 +194,7 @@ mod tests {
189194
fn test_compress_ignores_invalid_exceptional_values() {
190195
let values = buffer![1.234f64, 2.718, PI, 4.0];
191196
let array = PrimitiveArray::new(values, Validity::from_iter([true, true, false, true]));
192-
let encoded = alp_encode(&array, None).unwrap();
197+
let encoded = alp_encode(array.as_view(), None).unwrap();
193198
assert!(encoded.patches().is_none());
194199
let expected_encoded =
195200
PrimitiveArray::from_option_iter(buffer![Some(1234i64), Some(2718), None, Some(4000)]);
@@ -211,7 +216,7 @@ mod tests {
211216
Some(4.0),
212217
None,
213218
]);
214-
let encoded = alp_encode(&array, None).unwrap();
219+
let encoded = alp_encode(array.as_view(), None).unwrap();
215220
assert!(encoded.patches().is_some());
216221

217222
assert_eq!(encoded.exponents(), Exponents { e: 16, f: 13 });
@@ -225,15 +230,15 @@ mod tests {
225230
#[test]
226231
fn roundtrips_close_fractional() {
227232
let original = PrimitiveArray::from_iter([195.26274f32, 195.27837, -48.815685]);
228-
let alp_arr = alp_encode(&original, None).unwrap();
233+
let alp_arr = alp_encode(original.as_view(), None).unwrap();
229234
assert_arrays_eq!(alp_arr, original);
230235
}
231236

232237
#[test]
233238
fn roundtrips_all_null() {
234239
let original =
235240
PrimitiveArray::new(buffer![195.26274f64, PI, -48.815685], Validity::AllInvalid);
236-
let alp_arr = alp_encode(&original, None).unwrap();
241+
let alp_arr = alp_encode(original.as_view(), None).unwrap();
237242
let decompressed = alp_arr.into_array().to_primitive();
238243

239244
assert_eq!(
@@ -251,7 +256,7 @@ mod tests {
251256
buffer![0.0f32, -0.0, f32::NAN, f32::NEG_INFINITY, f32::INFINITY],
252257
Validity::NonNullable,
253258
);
254-
let encoded = alp_encode(&original, None).unwrap();
259+
let encoded = alp_encode(original.as_view(), None).unwrap();
255260
let decoded = encoded.as_array().to_primitive();
256261
for idx in 0..original.len() {
257262
let decoded_val = decoded.as_slice::<f32>()[idx];
@@ -272,7 +277,7 @@ mod tests {
272277
values[1025] = PI;
273278

274279
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
275-
let encoded = alp_encode(&array, None).unwrap();
280+
let encoded = alp_encode(array.as_view(), None).unwrap();
276281
let patches = encoded.patches().unwrap();
277282

278283
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -295,7 +300,7 @@ mod tests {
295300
values[2048] = E;
296301

297302
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
298-
let encoded = alp_encode(&array, None).unwrap();
303+
let encoded = alp_encode(array.as_view(), None).unwrap();
299304
let patches = encoded.patches().unwrap();
300305

301306
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -317,7 +322,7 @@ mod tests {
317322
values[0] = PI;
318323

319324
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
320-
let encoded = alp_encode(&array, None).unwrap();
325+
let encoded = alp_encode(array.as_view(), None).unwrap();
321326
let patches = encoded.patches().unwrap();
322327

323328
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -340,7 +345,7 @@ mod tests {
340345
values[100] = E;
341346

342347
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
343-
let encoded = alp_encode(&array, None).unwrap();
348+
let encoded = alp_encode(array.as_view(), None).unwrap();
344349
let patches = encoded.patches().unwrap();
345350

346351
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
@@ -361,7 +366,7 @@ mod tests {
361366
// Create 1024 elements, encode, slice to first 512, then decode
362367
let values = vec![1.234f32; 1024];
363368
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
364-
let encoded = alp_encode(&original, None).unwrap();
369+
let encoded = alp_encode(original.as_view(), None).unwrap();
365370

366371
let sliced_alp = encoded.slice(512..1024).unwrap();
367372

@@ -373,7 +378,7 @@ mod tests {
373378
fn test_slice_half_chunk_f64_roundtrip() {
374379
let values = vec![5.678f64; 1024];
375380
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
376-
let encoded = alp_encode(&original, None).unwrap();
381+
let encoded = alp_encode(original.as_view(), None).unwrap();
377382

378383
let sliced_alp = encoded.slice(512..1024).unwrap();
379384

@@ -389,7 +394,7 @@ mod tests {
389394
values[600] = 42.42;
390395

391396
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
392-
let encoded = alp_encode(&original, None).unwrap();
397+
let encoded = alp_encode(original.as_view(), None).unwrap();
393398

394399
let sliced_alp = encoded.slice(512..1024).unwrap();
395400

@@ -409,7 +414,7 @@ mod tests {
409414
values[1023] = 42.42;
410415

411416
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
412-
let encoded = alp_encode(&original, None).unwrap();
417+
let encoded = alp_encode(original.as_view(), None).unwrap();
413418

414419
let sliced_alp = encoded.slice(1023..1025).unwrap();
415420

@@ -425,7 +430,7 @@ mod tests {
425430
.collect::<Vec<_>>();
426431

427432
let original = PrimitiveArray::from_option_iter(values);
428-
let encoded = alp_encode(&original, None).unwrap();
433+
let encoded = alp_encode(original.as_view(), None).unwrap();
429434

430435
let sliced_alp = encoded.slice(512..1024).unwrap();
431436
let decoded = sliced_alp.to_primitive();
@@ -438,7 +443,7 @@ mod tests {
438443
fn test_large_f32_array_uniform_values() {
439444
let size = 10_000;
440445
let array = PrimitiveArray::new(buffer![42.125f32; size], Validity::NonNullable);
441-
let encoded = alp_encode(&array, None).unwrap();
446+
let encoded = alp_encode(array.as_view(), None).unwrap();
442447

443448
assert!(encoded.patches().is_none());
444449
let decoded =
@@ -450,7 +455,7 @@ mod tests {
450455
fn test_large_f64_array_uniform_values() {
451456
let size = 50_000;
452457
let array = PrimitiveArray::new(buffer![123.456789f64; size], Validity::NonNullable);
453-
let encoded = alp_encode(&array, None).unwrap();
458+
let encoded = alp_encode(array.as_view(), None).unwrap();
454459

455460
assert!(encoded.patches().is_none());
456461
let decoded =
@@ -468,7 +473,7 @@ mod tests {
468473
values[4500] = f32::INFINITY;
469474

470475
let array = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
471-
let encoded = alp_encode(&array, None).unwrap();
476+
let encoded = alp_encode(array.as_view(), None).unwrap();
472477

473478
assert!(encoded.patches().is_some());
474479
let decoded =
@@ -490,7 +495,7 @@ mod tests {
490495
values[7000] = 999.999999999;
491496

492497
let array = PrimitiveArray::new(Buffer::from(values.clone()), Validity::NonNullable);
493-
let encoded = alp_encode(&array, None).unwrap();
498+
let encoded = alp_encode(array.as_view(), None).unwrap();
494499

495500
assert!(encoded.patches().is_some());
496501
let decoded =
@@ -520,7 +525,7 @@ mod tests {
520525
.collect();
521526

522527
let array = PrimitiveArray::from_option_iter(values);
523-
let encoded = alp_encode(&array, None).unwrap();
528+
let encoded = alp_encode(array.as_view(), None).unwrap();
524529
let decoded =
525530
decompress_into_array(encoded, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
526531

@@ -541,7 +546,7 @@ mod tests {
541546
let validity = Validity::from_iter((0..size).map(|i| !matches!(i, 500 | 2500)));
542547

543548
let array = PrimitiveArray::new(Buffer::from(values), validity);
544-
let encoded = alp_encode(&array, None).unwrap();
549+
let encoded = alp_encode(array.as_view(), None).unwrap();
545550
let decoded =
546551
decompress_into_array(encoded, &mut LEGACY_SESSION.create_execution_ctx()).unwrap();
547552

@@ -572,7 +577,7 @@ mod tests {
572577
values[2900] = PI;
573578

574579
let original = PrimitiveArray::new(Buffer::from(values), Validity::NonNullable);
575-
let encoded = alp_encode(&original, None).unwrap();
580+
let encoded = alp_encode(original.as_view(), None).unwrap();
576581
assert!(encoded.patches().is_some());
577582

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ mod tests {
123123
fn comparison_range() {
124124
let value = 0.0605_f32;
125125
let array = PrimitiveArray::from_iter([value; 1]);
126-
let encoded = alp_encode(&array, None).unwrap();
126+
let encoded = alp_encode(array.as_view(), None).unwrap();
127127
assert!(encoded.patches().is_none());
128128

129129
assert_between(

0 commit comments

Comments
 (0)