Skip to content

Commit 668e2d6

Browse files
committed
Merge remote-tracking branch 'origin/develop' into ji/assert-array-eq-more-places
# Conflicts: # encodings/fastlanes/src/bitpacking/compress.rs # encodings/fastlanes/src/bitpacking/compute/cast.rs # encodings/fastlanes/src/delta/compute/cast.rs # encodings/fastlanes/src/delta/ops.rs # encodings/fastlanes/src/for/compress.rs # encodings/fastlanes/src/for/compute/cast.rs # encodings/fastlanes/src/rle/compress.rs # encodings/fastlanes/src/rle/ops.rs
2 parents abe5e2d + 08f57dc commit 668e2d6

File tree

155 files changed

+1941
-849
lines changed

Some content is hidden

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

155 files changed

+1941
-849
lines changed

.github/workflows/bench-pr.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ permissions:
1313
contents: read
1414
pull-requests: write # for commenting on PRs
1515
id-token: write # enables AWS-GitHub OIDC
16+
deployments: write # for Polar Signals profiling
1617

1718
jobs:
1819
label_trigger:

.github/workflows/sql-pr.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ permissions:
1313
contents: read
1414
pull-requests: write # for commenting on PRs
1515
id-token: write # enables AWS-GitHub OIDC
16+
deployments: write # for Polar Signals profiling
1617

1718
jobs:
1819
label_trigger:

Cargo.lock

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

encodings/alp/src/alp/array.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl VTable for ALPVTable {
3232
type ComputeVTable = NotSupported;
3333
type EncodeVTable = Self;
3434
type SerdeVTable = Self;
35-
type PipelineVTable = NotSupported;
35+
type OperatorVTable = NotSupported;
3636

3737
fn id(_encoding: &Self::Encoding) -> EncodingId {
3838
EncodingId::new_ref("vortex.alp")

encodings/alp/src/alp/compress.rs

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ where
6363
{
6464
let values_slice = values.as_slice::<T>();
6565

66-
let (exponents, encoded, exceptional_positions, exceptional_values, chunk_offsets) =
66+
let (exponents, encoded, exceptional_positions, exceptional_values, mut chunk_offsets) =
6767
T::encode(values_slice, exponents);
6868

6969
let encoded_array = PrimitiveArray::new(encoded, values.validity().clone()).into_array();
@@ -82,7 +82,16 @@ where
8282
let (pos, vals): (BufferMut<u64>, BufferMut<T>) = exceptional_positions
8383
.into_iter()
8484
.zip_eq(exceptional_values)
85-
.filter(|(index, _)| is_valid.value(*index as usize))
85+
.filter(|(index, _)| {
86+
let is_valid = is_valid.value(*index as usize);
87+
if !is_valid {
88+
let patch_chunk = *index as usize / 1024;
89+
for chunk_idx in (patch_chunk + 1)..chunk_offsets.len() {
90+
chunk_offsets[chunk_idx] -= 1;
91+
}
92+
}
93+
is_valid
94+
})
8695
.unzip();
8796
(pos.freeze(), vals.freeze())
8897
}
@@ -145,30 +154,26 @@ mod tests {
145154
let array = PrimitiveArray::new(buffer![1.234f32; 1025], Validity::NonNullable);
146155
let encoded = alp_encode(&array, None).unwrap();
147156
assert!(encoded.patches().is_none());
148-
assert_eq!(
149-
encoded.encoded().to_primitive().as_slice::<i32>(),
150-
vec![1234; 1025]
151-
);
157+
let expected_encoded = PrimitiveArray::from_iter(vec![1234i32; 1025]);
158+
assert_arrays_eq!(encoded.encoded(), expected_encoded);
152159
assert_eq!(encoded.exponents(), Exponents { e: 9, f: 6 });
153160

154161
let decoded = decompress(&encoded);
155-
assert_eq!(array.as_slice::<f32>(), decoded.as_slice::<f32>());
162+
assert_arrays_eq!(decoded, array);
156163
}
157164

158165
#[test]
159166
fn test_nullable_compress() {
160167
let array = PrimitiveArray::from_option_iter([None, Some(1.234f32), None]);
161168
let encoded = alp_encode(&array, None).unwrap();
162169
assert!(encoded.patches().is_none());
163-
assert_eq!(
164-
encoded.encoded().to_primitive().as_slice::<i32>(),
165-
vec![0, 1234, 0]
166-
);
170+
let expected_encoded = PrimitiveArray::from_option_iter([None, Some(1234i32), None]);
171+
assert_arrays_eq!(encoded.encoded(), expected_encoded);
167172
assert_eq!(encoded.exponents(), Exponents { e: 9, f: 6 });
168173

169174
let decoded = decompress(&encoded);
170-
let expected = vec![0f32, 1.234f32, 0f32];
171-
assert_eq!(decoded.as_slice::<f32>(), expected.as_slice());
175+
let expected = PrimitiveArray::from_option_iter(vec![None, Some(1.234f32), None]);
176+
assert_arrays_eq!(decoded, expected);
172177
}
173178

174179
#[test]
@@ -178,14 +183,13 @@ mod tests {
178183
let array = PrimitiveArray::new(values.clone(), Validity::NonNullable);
179184
let encoded = alp_encode(&array, None).unwrap();
180185
assert!(encoded.patches().is_some());
181-
assert_eq!(
182-
encoded.encoded().to_primitive().as_slice::<i64>(),
183-
vec![1234i64, 2718, 1234, 4000]
184-
);
186+
let expected_encoded = PrimitiveArray::from_iter(vec![1234i64, 2718, 1234, 4000]);
187+
assert_arrays_eq!(encoded.encoded(), expected_encoded);
185188
assert_eq!(encoded.exponents(), Exponents { e: 16, f: 13 });
186189

187190
let decoded = decompress(&encoded);
188-
assert_eq!(values.as_slice(), decoded.as_slice::<f64>());
191+
let expected_decoded = PrimitiveArray::new(values, Validity::NonNullable);
192+
assert_arrays_eq!(decoded, expected_decoded);
189193
}
190194

191195
#[test]
@@ -195,10 +199,9 @@ mod tests {
195199
let array = PrimitiveArray::new(values, Validity::from_iter([true, true, false, true]));
196200
let encoded = alp_encode(&array, None).unwrap();
197201
assert!(encoded.patches().is_none());
198-
assert_eq!(
199-
encoded.encoded().to_primitive().as_slice::<i64>(),
200-
vec![1234i64, 2718, 1234, 4000]
201-
);
202+
let expected_encoded =
203+
PrimitiveArray::from_option_iter(buffer![Some(1234i64), Some(2718), None, Some(4000)]);
204+
assert_arrays_eq!(encoded.encoded(), expected_encoded);
202205
assert_eq!(encoded.exponents(), Exponents { e: 16, f: 13 });
203206

204207
let decoded = decompress(&encoded);
@@ -230,7 +233,7 @@ mod tests {
230233
let original = PrimitiveArray::from_iter([195.26274f32, 195.27837, -48.815685]);
231234
let alp_arr = alp_encode(&original, None).unwrap();
232235
let decompressed = alp_arr.to_primitive();
233-
assert_eq!(original.as_slice::<f32>(), decompressed.as_slice::<f32>());
236+
assert_arrays_eq!(decompressed, original);
234237
}
235238

236239
#[test]
@@ -280,13 +283,16 @@ mod tests {
280283
let patches = encoded.patches().unwrap();
281284

282285
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
283-
assert_eq!(chunk_offsets.as_slice::<u64>(), &[0, 1, 3]);
286+
let expected_offsets = PrimitiveArray::from_iter(vec![0u64, 1, 3]);
287+
assert_arrays_eq!(chunk_offsets, expected_offsets);
284288

285289
let patch_indices = patches.indices().to_primitive();
286-
assert_eq!(patch_indices.as_slice::<u64>(), &[1023, 1024, 1025]);
290+
let expected_indices = PrimitiveArray::from_iter(vec![1023u64, 1024, 1025]);
291+
assert_arrays_eq!(patch_indices, expected_indices);
287292

288293
let patch_values = patches.values().to_primitive();
289-
assert_eq!(patch_values.as_slice::<f64>(), &[PI, E, PI]);
294+
let expected_values = PrimitiveArray::from_iter(vec![PI, E, PI]);
295+
assert_arrays_eq!(patch_values, expected_values);
290296
}
291297

292298
#[test]
@@ -300,13 +306,16 @@ mod tests {
300306
let patches = encoded.patches().unwrap();
301307

302308
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
303-
assert_eq!(chunk_offsets.as_slice::<u64>(), &[0, 1, 1]);
309+
let expected_offsets = PrimitiveArray::from_iter(vec![0u64, 1, 1]);
310+
assert_arrays_eq!(chunk_offsets, expected_offsets);
304311

305312
let patch_indices = patches.indices().to_primitive();
306-
assert_eq!(patch_indices.as_slice::<u64>(), &[0, 2048]);
313+
let expected_indices = PrimitiveArray::from_iter(vec![0u64, 2048]);
314+
assert_arrays_eq!(patch_indices, expected_indices);
307315

308316
let patch_values = patches.values().to_primitive();
309-
assert_eq!(patch_values.as_slice::<f64>(), &[PI, E]);
317+
let expected_values = PrimitiveArray::from_iter(vec![PI, E]);
318+
assert_arrays_eq!(patch_values, expected_values);
310319
}
311320

312321
#[test]
@@ -319,13 +328,16 @@ mod tests {
319328
let patches = encoded.patches().unwrap();
320329

321330
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
322-
assert_eq!(chunk_offsets.as_slice::<u64>(), &[0, 1, 1]);
331+
let expected_offsets = PrimitiveArray::from_iter(vec![0u64, 1, 1]);
332+
assert_arrays_eq!(chunk_offsets, expected_offsets);
323333

324334
let patch_indices = patches.indices().to_primitive();
325-
assert_eq!(patch_indices.as_slice::<u64>(), &[0]);
335+
let expected_indices = PrimitiveArray::from_iter(vec![0u64]);
336+
assert_arrays_eq!(patch_indices, expected_indices);
326337

327338
let patch_values = patches.values().to_primitive();
328-
assert_eq!(patch_values.as_slice::<f64>(), &[PI]);
339+
let expected_values = PrimitiveArray::from_iter(vec![PI]);
340+
assert_arrays_eq!(patch_values, expected_values);
329341
}
330342

331343
#[test]
@@ -339,12 +351,15 @@ mod tests {
339351
let patches = encoded.patches().unwrap();
340352

341353
let chunk_offsets = patches.chunk_offsets().clone().unwrap().to_primitive();
342-
assert_eq!(chunk_offsets.as_slice::<u64>(), &[0]);
354+
let expected_offsets = PrimitiveArray::from_iter(vec![0u64]);
355+
assert_arrays_eq!(chunk_offsets, expected_offsets);
343356

344357
let patch_indices = patches.indices().to_primitive();
345-
assert_eq!(patch_indices.as_slice::<u64>(), &[0, 100]);
358+
let expected_indices = PrimitiveArray::from_iter(vec![0u64, 100]);
359+
assert_arrays_eq!(patch_indices, expected_indices);
346360

347361
let patch_values = patches.values().to_primitive();
348-
assert_eq!(patch_values.as_slice::<f64>(), &[PI, E]);
362+
let expected_values = PrimitiveArray::from_iter(vec![PI, E]);
363+
assert_arrays_eq!(patch_values, expected_values);
349364
}
350365
}

encodings/alp/src/alp/compute/cast.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ register_kernel!(CastKernelAdapter(ALPVTable).lift());
4545
#[cfg(test)]
4646
mod tests {
4747
use rstest::rstest;
48-
use vortex_array::IntoArray;
4948
use vortex_array::arrays::PrimitiveArray;
5049
use vortex_array::compute::cast;
5150
use vortex_array::compute::conformance::cast::test_cast_conformance;
51+
use vortex_array::{IntoArray, assert_arrays_eq};
5252
use vortex_buffer::buffer;
5353
use vortex_dtype::{DType, Nullability, PType};
5454

@@ -98,7 +98,7 @@ mod tests {
9898
);
9999

100100
let decoded = casted.to_canonical().into_primitive();
101-
assert_eq!(decoded.as_slice::<i32>(), &[1i32, 2, 3, 4]);
101+
assert_arrays_eq!(decoded, PrimitiveArray::from_iter([1i32, 2, 3, 4]));
102102
}
103103

104104
#[rstest]

encodings/alp/src/alp/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub trait ALPFloat: private::Sealed + Float + Display + NativePType {
127127
Buffer<Self::ALPInt>,
128128
Buffer<u64>,
129129
Buffer<Self>,
130-
Buffer<u64>,
130+
BufferMut<u64>,
131131
) {
132132
let exp = exponents.unwrap_or_else(|| Self::find_best_exponents(values));
133133

@@ -158,7 +158,7 @@ pub trait ALPFloat: private::Sealed + Float + Display + NativePType {
158158
encoded_output.freeze(),
159159
patch_indices.freeze(),
160160
patch_values.freeze(),
161-
chunk_offsets.freeze(),
161+
chunk_offsets,
162162
)
163163
}
164164

encodings/alp/src/alp_rd/array.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl VTable for ALPRDVTable {
3535
type ComputeVTable = NotSupported;
3636
type EncodeVTable = Self;
3737
type SerdeVTable = Self;
38-
type PipelineVTable = NotSupported;
38+
type OperatorVTable = NotSupported;
3939

4040
fn id(_encoding: &Self::Encoding) -> EncodingId {
4141
EncodingId::new_ref("vortex.alprd")
@@ -265,8 +265,8 @@ impl CanonicalVTable<ALPRDVTable> for ALPRDVTable {
265265
#[cfg(test)]
266266
mod test {
267267
use rstest::rstest;
268-
use vortex_array::ToCanonical;
269268
use vortex_array::arrays::PrimitiveArray;
269+
use vortex_array::{ToCanonical, assert_arrays_eq};
270270

271271
use crate::{ALPRDFloat, alp_rd};
272272

@@ -294,7 +294,6 @@ mod test {
294294

295295
let decoded = rd_array.to_primitive();
296296

297-
let maybe_null_reals: Vec<T> = reals.into_iter().map(|v| v.unwrap_or_default()).collect();
298-
assert_eq!(decoded.as_slice::<T>(), &maybe_null_reals);
297+
assert_arrays_eq!(decoded, PrimitiveArray::from_option_iter(reals));
299298
}
300299
}

0 commit comments

Comments
 (0)