#[inline(always)]
pub(super) fn row_major_strides<const N: usize>(shape: [usize; N]) -> [usize; N] {
let mut strides = [1usize; N];
let mut acc = 1usize;
let mut i = N;
while i > 0 {
i -= 1;
strides[i] = acc;
acc = acc.saturating_mul(shape[i]);
}
strides
}
#[inline(always)]
pub(super) fn compute_offset(idx: &[usize], strides: &[usize]) -> usize {
let mut offset = 0usize;
for i in 0..idx.len() {
offset += idx[i] * strides[i];
}
offset
}