Skip to content

Commit 47f2307

Browse files
authored
fix: fix some layout.dim_select(axis, 0) to layout.dim_chop(axis) to avoid panic on zero-sized tensors (#86)
1 parent 4ed1bf6 commit 47f2307

4 files changed

Lines changed: 12 additions & 5 deletions

File tree

rstsr-core/src/tensor/adv_indexing.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,13 @@ mod test {
231231
let b = a.index_select(0, [0, 0, 1, -1]);
232232
assert!(fingerprint(&b) - -25.648600916145096 < 1e-8);
233233
}
234+
235+
// 1-dim select with empty index
236+
let device = DeviceCpuSerial::default();
237+
let a = linspace((1.0, 4.0, 4, &device));
238+
let mask: Vec<usize> = vec![];
239+
let b = a.index_select(0, &mask);
240+
assert_eq!(b.raw(), &[]);
234241
}
235242

236243
#[test]

rstsr-core/src/tensor/pack_array.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ where
145145
let (data, device) = storage.into_raw_parts();
146146
let data = data.pack_array_f::<N>()?;
147147
let storage = Storage::new(data, device);
148-
let layout = layout.dim_select(axis as isize, 0)?;
148+
let layout = layout.dim_chop(axis as isize)?;
149149
let stride = layout
150150
.stride()
151151
.as_ref()

rstsr-native-impl/src/cpu_rayon/adv_indexing.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ where
3131
let size_indices = indices.len();
3232

3333
if axis_contig_c {
34-
let lc_rest = lc.clone().dim_select(axis as isize, 0)?;
35-
let la_rest = la.clone().dim_select(axis as isize, 0)?;
34+
let lc_rest = lc.clone().dim_chop(axis as isize)?;
35+
let la_rest = la.clone().dim_chop(axis as isize)?;
3636
let layouts_rest = translate_to_col_major(&[&lc_rest, &la_rest], TensorIterOrder::K)?;
3737
let lc_rest = &layouts_rest[0];
3838
let la_rest = &layouts_rest[1];

rstsr-native-impl/src/cpu_serial/adv_indexing.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ where
3636
let size_indices = indices.len();
3737

3838
if axis_contig_c {
39-
let lc_rest = lc.clone().dim_select(axis as isize, 0)?;
40-
let la_rest = la.clone().dim_select(axis as isize, 0)?;
39+
let lc_rest = lc.clone().dim_chop(axis as isize)?;
40+
let la_rest = la.clone().dim_chop(axis as isize)?;
4141
let layouts_rest = translate_to_col_major(&[&lc_rest, &la_rest], TensorIterOrder::K)?;
4242
let lc_rest = &layouts_rest[0];
4343
let la_rest = &layouts_rest[1];

0 commit comments

Comments
 (0)