package datascience

// RollingWindow genera ventanas deslizantes de tamaño size sobre el slice xs.
// Si size <= 0 o size > len(xs), retorna nil.
func RollingWindow[T any](xs []T, size int) [][]T {
	n := len(xs)
	if size <= 0 || size > n {
		return nil
	}
	windows := make([][]T, 0, n-size+1)
	for i := 0; i <= n-size; i++ {
		w := make([]T, size)
		copy(w, xs[i:i+size])
		windows = append(windows, w)
	}
	return windows
}
