Skip to content

Commit d4e1586

Browse files
authored
Chore: rename some methods (#4710)
Makes 2 method names more consistent: - `fixed_size_list_at` -> `fixed_size_list_elements_at` for `FixedSizeListArray` - `elements_at` -> `list_elements_at` for `ListArray` Also adds a better doc comment for `FixedSizeListArray` --------- Signed-off-by: Connor Tsui <[email protected]>
1 parent 51b9afa commit d4e1586

File tree

12 files changed

+175
-110
lines changed

12 files changed

+175
-110
lines changed

encodings/sparse/src/canonical.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ fn canonicalize_sparse_fixed_size_list_inner<I: NativePType>(
321321

322322
// Append the patch value, handling null patches by appending defaults.
323323
if values.validity().is_valid(patch_idx) {
324-
let patch_list = values.fixed_size_list_at(patch_idx);
324+
let patch_list = values.fixed_size_list_elements_at(patch_idx);
325325
for i in 0..list_size as usize {
326326
builder
327327
.append_scalar(&patch_list.scalar_at(i))

vortex-array/src/arrays/constant/canonical.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ mod tests {
471471

472472
// Check that each list is [10, 20, 30].
473473
for i in 0..4 {
474-
let list = canonical.fixed_size_list_at(i);
474+
let list = canonical.fixed_size_list_elements_at(i);
475475
let list_primitive = list.to_primitive();
476476
assert_eq!(list_primitive.as_slice::<i32>(), [10, 20, 30]);
477477
}

vortex-array/src/arrays/fixed_size_list/mod.rs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,49 @@ mod tests;
1919
mod compute;
2020

2121
/// The canonical encoding for fixed-size list arrays.
22+
///
23+
/// A fixed-size list array stores lists where each list has the same number of elements. This is
24+
/// similar to a 2D array or matrix where the inner dimension is fixed.
25+
///
26+
/// ## Data Layout
27+
///
28+
/// Unlike [`ListArray`] which uses offsets, `FixedSizeListArray` stores elements contiguously and
29+
/// uses a fixed `list_size`:
30+
///
31+
/// - **Elements array**: A flat array containing all list elements concatenated together
32+
/// - **List size**: The fixed number of elements in each list
33+
/// - **Validity**: Optional mask indicating which lists are null
34+
///
35+
/// The list at index `i` contains elements from `elements[i * list_size..(i + 1) * list_size]`.
36+
///
37+
/// [`ListArray`]: crate::arrays::ListArray
38+
///
39+
/// # Examples
40+
///
41+
/// ```
42+
/// use vortex_array::arrays::{FixedSizeListArray, PrimitiveArray};
43+
/// use vortex_array::validity::Validity;
44+
/// use vortex_array::IntoArray;
45+
/// use vortex_buffer::buffer;
46+
///
47+
/// // Create a fixed-size list array representing [[1, 2] [3, 4], [5, 6], [7, 8]]
48+
/// let elements = buffer![1i32, 2, 3, 4, 5, 6, 7, 8].into_array();
49+
/// let list_size = 2;
50+
///
51+
/// let fixed_list_array = FixedSizeListArray::new(
52+
/// elements.into_array(),
53+
/// list_size,
54+
/// Validity::NonNullable,
55+
/// 4, // 4 lists
56+
/// );
57+
///
58+
/// assert_eq!(fixed_list_array.len(), 4);
59+
/// assert_eq!(fixed_list_array.list_size(), 2);
60+
///
61+
/// // Access individual lists
62+
/// let first_list = fixed_list_array.fixed_size_list_elements_at(0);
63+
/// assert_eq!(first_list.len(), 2);
64+
/// ```
2265
#[derive(Clone, Debug)]
2366
pub struct FixedSizeListArray {
2467
/// The [`DType`] of the fixed-size list.
@@ -145,12 +188,12 @@ impl FixedSizeListArray {
145188
self.list_size
146189
}
147190

148-
/// Returns the elements at the given index from the list array.
191+
/// Returns the elements of the fixed-size list scalar at the given index of the list array.
149192
///
150193
/// # Panics
151194
///
152195
/// Panics if the index is out of bounds.
153-
pub fn fixed_size_list_at(&self, index: usize) -> ArrayRef {
196+
pub fn fixed_size_list_elements_at(&self, index: usize) -> ArrayRef {
154197
debug_assert!(
155198
index < self.len,
156199
"index out of bounds: the len is {} but the index is {index}",

vortex-array/src/arrays/fixed_size_list/tests/basic.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@ fn test_basic_fixed_size_list() {
3232
));
3333

3434
// Check the actual values in each list.
35-
let first_list = fsl.fixed_size_list_at(0);
35+
let first_list = fsl.fixed_size_list_elements_at(0);
3636
assert_eq!(first_list.scalar_at(0), 1i32.into());
3737
assert_eq!(first_list.scalar_at(1), 2i32.into());
3838
assert_eq!(first_list.scalar_at(2), 3i32.into());
3939

40-
let second_list = fsl.fixed_size_list_at(1);
40+
let second_list = fsl.fixed_size_list_elements_at(1);
4141
assert_eq!(second_list.scalar_at(0), 4i32.into());
4242
assert_eq!(second_list.scalar_at(1), 5i32.into());
4343
assert_eq!(second_list.scalar_at(2), 6i32.into());
4444

45-
let third_list = fsl.fixed_size_list_at(2);
45+
let third_list = fsl.fixed_size_list_elements_at(2);
4646
assert_eq!(third_list.scalar_at(0), 7i32.into());
4747
assert_eq!(third_list.scalar_at(1), 8i32.into());
4848
assert_eq!(third_list.scalar_at(2), 9i32.into());
4949

50-
let fourth_list = fsl.fixed_size_list_at(3);
50+
let fourth_list = fsl.fixed_size_list_elements_at(3);
5151
assert_eq!(fourth_list.scalar_at(0), 10i32.into());
5252
assert_eq!(fourth_list.scalar_at(1), 11i32.into());
5353
assert_eq!(fourth_list.scalar_at(2), 12i32.into());
@@ -73,7 +73,7 @@ fn test_scalar_at() {
7373
);
7474

7575
// Additionally check individual elements via fixed_size_list_at.
76-
let first_list = fsl.fixed_size_list_at(0);
76+
let first_list = fsl.fixed_size_list_elements_at(0);
7777
assert_eq!(first_list.scalar_at(0), 1i32.into());
7878
assert_eq!(first_list.scalar_at(1), 2i32.into());
7979
assert_eq!(first_list.scalar_at(2), 3i32.into());
@@ -90,7 +90,7 @@ fn test_scalar_at() {
9090
);
9191

9292
// Additionally check individual elements via fixed_size_list_at.
93-
let second_list = fsl.fixed_size_list_at(1);
93+
let second_list = fsl.fixed_size_list_elements_at(1);
9494
assert_eq!(second_list.scalar_at(0), 4i32.into());
9595
assert_eq!(second_list.scalar_at(1), 5i32.into());
9696
assert_eq!(second_list.scalar_at(2), 6i32.into());
@@ -105,13 +105,13 @@ fn test_fixed_size_list_at() {
105105
let fsl = FixedSizeListArray::new(elements, list_size, Validity::AllValid, len);
106106

107107
// Get the first list [1.0, 2.0].
108-
let first_list = fsl.fixed_size_list_at(0);
108+
let first_list = fsl.fixed_size_list_elements_at(0);
109109
assert_eq!(first_list.len(), list_size as usize);
110110
assert_eq!(first_list.scalar_at(0), 1.0f64.into());
111111
assert_eq!(first_list.scalar_at(1), 2.0f64.into());
112112

113113
// Get the third list [5.0, 6.0].
114-
let third_list = fsl.fixed_size_list_at(2);
114+
let third_list = fsl.fixed_size_list_elements_at(2);
115115
assert_eq!(third_list.len(), list_size as usize);
116116
assert_eq!(third_list.scalar_at(0), 5.0f64.into());
117117
assert_eq!(third_list.scalar_at(1), 6.0f64.into());

vortex-array/src/arrays/fixed_size_list/tests/filter.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ fn test_filter_alternating() {
6262
assert_eq!(filtered_fsl.elements().len(), 4);
6363

6464
// First list should be [1, 2].
65-
let first = filtered_fsl.fixed_size_list_at(0);
65+
let first = filtered_fsl.fixed_size_list_elements_at(0);
6666
assert_eq!(first.scalar_at(0), 1i32.into());
6767
assert_eq!(first.scalar_at(1), 2i32.into());
6868

6969
// Second list should be [5, 6].
70-
let second = filtered_fsl.fixed_size_list_at(1);
70+
let second = filtered_fsl.fixed_size_list_elements_at(1);
7171
assert_eq!(second.scalar_at(0), 5i32.into());
7272
assert_eq!(second.scalar_at(1), 6i32.into());
7373
}
@@ -86,13 +86,13 @@ fn test_filter_selective() {
8686
assert_eq!(filtered_fsl.elements().len(), 6);
8787

8888
// First list should be [4.0, 5.0, 6.0].
89-
let first = filtered_fsl.fixed_size_list_at(0);
89+
let first = filtered_fsl.fixed_size_list_elements_at(0);
9090
assert_eq!(first.scalar_at(0), 4.0f64.into());
9191
assert_eq!(first.scalar_at(1), 5.0f64.into());
9292
assert_eq!(first.scalar_at(2), 6.0f64.into());
9393

9494
// Second list should be [7.0, 8.0, 9.0].
95-
let second = filtered_fsl.fixed_size_list_at(1);
95+
let second = filtered_fsl.fixed_size_list_elements_at(1);
9696
assert_eq!(second.scalar_at(0), 7.0f64.into());
9797
assert_eq!(second.scalar_at(1), 8.0f64.into());
9898
assert_eq!(second.scalar_at(2), 9.0f64.into());
@@ -126,7 +126,7 @@ fn test_filter_single_element() {
126126
assert_eq!(filtered_fsl.list_size(), 3);
127127
assert_eq!(filtered_fsl.elements().len(), 3);
128128

129-
let first = filtered_fsl.fixed_size_list_at(0);
129+
let first = filtered_fsl.fixed_size_list_elements_at(0);
130130
assert_eq!(first.scalar_at(0), 42i32.into());
131131
assert_eq!(first.scalar_at(1), 43i32.into());
132132
assert_eq!(first.scalar_at(2), 44i32.into());
@@ -222,12 +222,12 @@ fn test_filter_with_nulls() {
222222
assert_eq!(filtered_fsl.list_size(), 2);
223223

224224
// First list should be [1, 2] and valid.
225-
let first = filtered_fsl.fixed_size_list_at(0);
225+
let first = filtered_fsl.fixed_size_list_elements_at(0);
226226
assert_eq!(first.scalar_at(0), 1i32.into());
227227
assert_eq!(first.scalar_at(1), 2i32.into());
228228

229229
// Second list should be [5, 6] and valid.
230-
let second = filtered_fsl.fixed_size_list_at(1);
230+
let second = filtered_fsl.fixed_size_list_elements_at(1);
231231
assert_eq!(second.scalar_at(0), 5i32.into());
232232
assert_eq!(second.scalar_at(1), 6i32.into());
233233
}
@@ -292,15 +292,15 @@ fn test_filter_nested_fixed_size_lists() {
292292
assert_eq!(filtered_inner.list_size(), 2);
293293

294294
// Check the actual values.
295-
let inner_list_0 = filtered_inner.fixed_size_list_at(0);
295+
let inner_list_0 = filtered_inner.fixed_size_list_elements_at(0);
296296
assert_eq!(inner_list_0.scalar_at(0), 7i32.into());
297297
assert_eq!(inner_list_0.scalar_at(1), 8i32.into());
298298

299-
let inner_list_1 = filtered_inner.fixed_size_list_at(1);
299+
let inner_list_1 = filtered_inner.fixed_size_list_elements_at(1);
300300
assert_eq!(inner_list_1.scalar_at(0), 9i32.into());
301301
assert_eq!(inner_list_1.scalar_at(1), 10i32.into());
302302

303-
let inner_list_2 = filtered_inner.fixed_size_list_at(2);
303+
let inner_list_2 = filtered_inner.fixed_size_list_elements_at(2);
304304
assert_eq!(inner_list_2.scalar_at(0), 11i32.into());
305305
assert_eq!(inner_list_2.scalar_at(1), 12i32.into());
306306
}
@@ -442,7 +442,7 @@ fn test_complex_filter_pattern() {
442442
// Original indices kept: 0, 1, 3, 6, 7, 8.
443443
let expected_starts = [0i32, 3, 9, 18, 21, 24];
444444
for (i, &start) in expected_starts.iter().enumerate() {
445-
let list = filtered_fsl.fixed_size_list_at(i);
445+
let list = filtered_fsl.fixed_size_list_elements_at(i);
446446
assert_eq!(list.scalar_at(0), (start).into());
447447
assert_eq!(list.scalar_at(1), (start + 1).into());
448448
assert_eq!(list.scalar_at(2), (start + 2).into());
@@ -474,13 +474,13 @@ fn test_filter_large_list_size() {
474474
assert_eq!(filtered_fsl.elements().len(), 3 * list_size as usize);
475475

476476
// Check that the correct lists were kept (indices 1, 3, 4).
477-
let list_0 = filtered_fsl.fixed_size_list_at(0);
477+
let list_0 = filtered_fsl.fixed_size_list_elements_at(0);
478478
assert_eq!(list_0.scalar_at(0), 100i64.into()); // Start of original list 1.
479479

480-
let list_1 = filtered_fsl.fixed_size_list_at(1);
480+
let list_1 = filtered_fsl.fixed_size_list_elements_at(1);
481481
assert_eq!(list_1.scalar_at(0), 300i64.into()); // Start of original list 3.
482482

483-
let list_2 = filtered_fsl.fixed_size_list_at(2);
483+
let list_2 = filtered_fsl.fixed_size_list_elements_at(2);
484484
assert_eq!(list_2.scalar_at(0), 400i64.into()); // Start of original list 4.
485485
}
486486

@@ -556,13 +556,13 @@ fn test_mask_expansion_threshold_boundary() {
556556
assert_eq!(filtered_fsl.elements().len(), 3 * list_size as usize);
557557

558558
// Verify correct elements were kept.
559-
let first = filtered_fsl.fixed_size_list_at(0);
559+
let first = filtered_fsl.fixed_size_list_elements_at(0);
560560
assert_eq!(first.scalar_at(0), (5i32 * list_size as i32).into());
561561

562-
let second = filtered_fsl.fixed_size_list_at(1);
562+
let second = filtered_fsl.fixed_size_list_elements_at(1);
563563
assert_eq!(second.scalar_at(0), (25i32 * list_size as i32).into());
564564

565-
let third = filtered_fsl.fixed_size_list_at(2);
565+
let third = filtered_fsl.fixed_size_list_elements_at(2);
566566
assert_eq!(third.scalar_at(0), (75i32 * list_size as i32).into());
567567

568568
// Test with list_size == 7 (just below threshold).

vortex-array/src/arrays/fixed_size_list/tests/nested.rs

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ fn test_fsl_of_fsl_basic() {
5858
));
5959

6060
// Get the first outer list.
61-
let first_outer = outer_fsl.fixed_size_list_at(0);
61+
let first_outer = outer_fsl.fixed_size_list_elements_at(0);
6262
assert_eq!(first_outer.len(), outer_list_size as usize);
6363

6464
// The first outer list should contain 3 inner lists.
@@ -68,38 +68,50 @@ fn test_fsl_of_fsl_basic() {
6868

6969
// Check the actual values in the nested structure.
7070
// First outer list contains: [[1,2], [3,4], [5,6]].
71-
let first_outer_list = outer_fsl.fixed_size_list_at(0);
71+
let first_outer_list = outer_fsl.fixed_size_list_elements_at(0);
7272

7373
// Check first inner list [1,2].
74-
let inner_list_0 = first_outer_list.to_fixed_size_list().fixed_size_list_at(0);
74+
let inner_list_0 = first_outer_list
75+
.to_fixed_size_list()
76+
.fixed_size_list_elements_at(0);
7577
assert_eq!(inner_list_0.scalar_at(0), 1i32.into());
7678
assert_eq!(inner_list_0.scalar_at(1), 2i32.into());
7779

7880
// Check second inner list [3,4].
79-
let inner_list_1 = first_outer_list.to_fixed_size_list().fixed_size_list_at(1);
81+
let inner_list_1 = first_outer_list
82+
.to_fixed_size_list()
83+
.fixed_size_list_elements_at(1);
8084
assert_eq!(inner_list_1.scalar_at(0), 3i32.into());
8185
assert_eq!(inner_list_1.scalar_at(1), 4i32.into());
8286

8387
// Check third inner list [5,6].
84-
let inner_list_2 = first_outer_list.to_fixed_size_list().fixed_size_list_at(2);
88+
let inner_list_2 = first_outer_list
89+
.to_fixed_size_list()
90+
.fixed_size_list_elements_at(2);
8591
assert_eq!(inner_list_2.scalar_at(0), 5i32.into());
8692
assert_eq!(inner_list_2.scalar_at(1), 6i32.into());
8793

8894
// Second outer list contains: [[7,8], [9,10], [11,12]].
89-
let second_outer_list = outer_fsl.fixed_size_list_at(1);
95+
let second_outer_list = outer_fsl.fixed_size_list_elements_at(1);
9096

9197
// Check first inner list [7,8].
92-
let inner_list_0 = second_outer_list.to_fixed_size_list().fixed_size_list_at(0);
98+
let inner_list_0 = second_outer_list
99+
.to_fixed_size_list()
100+
.fixed_size_list_elements_at(0);
93101
assert_eq!(inner_list_0.scalar_at(0), 7i32.into());
94102
assert_eq!(inner_list_0.scalar_at(1), 8i32.into());
95103

96104
// Check second inner list [9,10].
97-
let inner_list_1 = second_outer_list.to_fixed_size_list().fixed_size_list_at(1);
105+
let inner_list_1 = second_outer_list
106+
.to_fixed_size_list()
107+
.fixed_size_list_elements_at(1);
98108
assert_eq!(inner_list_1.scalar_at(0), 9i32.into());
99109
assert_eq!(inner_list_1.scalar_at(1), 10i32.into());
100110

101111
// Check third inner list [11,12].
102-
let inner_list_2 = second_outer_list.to_fixed_size_list().fixed_size_list_at(2);
112+
let inner_list_2 = second_outer_list
113+
.to_fixed_size_list()
114+
.fixed_size_list_elements_at(2);
103115
assert_eq!(inner_list_2.scalar_at(0), 11i32.into());
104116
assert_eq!(inner_list_2.scalar_at(1), 12i32.into());
105117
}
@@ -194,25 +206,29 @@ fn test_deeply_nested_fsl() {
194206

195207
// Check the actual deeply nested values.
196208
// Structure: [[[1,2],[3,4]],[[5,6],[7,8]]].
197-
let top_level = level3.fixed_size_list_at(0);
198-
let level2_0 = top_level.to_fixed_size_list().fixed_size_list_at(0);
199-
let level2_1 = top_level.to_fixed_size_list().fixed_size_list_at(1);
209+
let top_level = level3.fixed_size_list_elements_at(0);
210+
let level2_0 = top_level
211+
.to_fixed_size_list()
212+
.fixed_size_list_elements_at(0);
213+
let level2_1 = top_level
214+
.to_fixed_size_list()
215+
.fixed_size_list_elements_at(1);
200216

201217
// First level-2 list: [[1,2],[3,4]].
202-
let level1_0_0 = level2_0.to_fixed_size_list().fixed_size_list_at(0);
218+
let level1_0_0 = level2_0.to_fixed_size_list().fixed_size_list_elements_at(0);
203219
assert_eq!(level1_0_0.scalar_at(0), 1i32.into());
204220
assert_eq!(level1_0_0.scalar_at(1), 2i32.into());
205221

206-
let level1_0_1 = level2_0.to_fixed_size_list().fixed_size_list_at(1);
222+
let level1_0_1 = level2_0.to_fixed_size_list().fixed_size_list_elements_at(1);
207223
assert_eq!(level1_0_1.scalar_at(0), 3i32.into());
208224
assert_eq!(level1_0_1.scalar_at(1), 4i32.into());
209225

210226
// Second level-2 list: [[5,6],[7,8]].
211-
let level1_1_0 = level2_1.to_fixed_size_list().fixed_size_list_at(0);
227+
let level1_1_0 = level2_1.to_fixed_size_list().fixed_size_list_elements_at(0);
212228
assert_eq!(level1_1_0.scalar_at(0), 5i32.into());
213229
assert_eq!(level1_1_0.scalar_at(1), 6i32.into());
214230

215-
let level1_1_1 = level2_1.to_fixed_size_list().fixed_size_list_at(1);
231+
let level1_1_1 = level2_1.to_fixed_size_list().fixed_size_list_elements_at(1);
216232
assert_eq!(level1_1_1.scalar_at(0), 7i32.into());
217233
assert_eq!(level1_1_1.scalar_at(1), 8i32.into());
218234
}

0 commit comments

Comments
 (0)