use crate::tensor::Shape;
pub fn calculate_unfold_windows(dim_size: usize, window_size: usize, step_size: usize) -> usize {
assert!(step_size > 0);
let x = dim_size + step_size;
if x < window_size {
0
} else {
(x - window_size) / step_size
}
}
pub fn calculate_unfold_shape<S: Into<Shape>>(
shape: S,
dim: usize,
size: usize,
step: usize,
) -> Shape {
let mut shape = shape.into();
let d_shape = shape[dim];
let windows = calculate_unfold_windows(d_shape, size, step);
shape[dim] = windows;
shape.push(size);
shape
}