use numr::dtype::DType;
use numr::error::{Error, Result};
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub trait WindowFunctions<R: Runtime<DType = DType>> {
fn hann_window(&self, size: usize, dtype: DType, device: &R::Device) -> Result<Tensor<R>>;
fn hamming_window(&self, size: usize, dtype: DType, device: &R::Device) -> Result<Tensor<R>>;
fn blackman_window(&self, size: usize, dtype: DType, device: &R::Device) -> Result<Tensor<R>>;
fn kaiser_window(
&self,
size: usize,
beta: f64,
dtype: DType,
device: &R::Device,
) -> Result<Tensor<R>>;
}
pub fn validate_window_dtype(dtype: DType, op: &'static str) -> Result<()> {
match dtype {
DType::F32 | DType::F64 => Ok(()),
_ => Err(Error::UnsupportedDType { dtype, op }),
}
}
pub fn validate_window_size(size: usize, op: &'static str) -> Result<()> {
if size == 0 {
return Err(Error::InvalidArgument {
arg: "size",
reason: format!("{op} requires size > 0"),
});
}
Ok(())
}