use crate::layouts::{
Backend, MatZnxToRef, Module, Scratch, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, VmpPMatToMut, VmpPMatToRef,
};
pub unsafe trait VmpPrepareTmpBytesImpl<B: Backend> {
fn vmp_prepare_tmp_bytes_impl(module: &Module<B>, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize;
}
pub unsafe trait VmpPrepareImpl<B: Backend> {
fn vmp_prepare_impl<R, A>(module: &Module<B>, res: &mut R, a: &A, scratch: &mut Scratch<B>)
where
R: VmpPMatToMut<B>,
A: MatZnxToRef;
}
#[allow(clippy::too_many_arguments)]
pub unsafe trait VmpApplyDftTmpBytesImpl<B: Backend> {
fn vmp_apply_dft_tmp_bytes_impl(
module: &Module<B>,
res_size: usize,
a_size: usize,
b_rows: usize,
b_cols_in: usize,
b_cols_out: usize,
b_size: usize,
) -> usize;
}
pub unsafe trait VmpApplyDftImpl<B: Backend> {
fn vmp_apply_dft_impl<R, A, C>(module: &Module<B>, res: &mut R, a: &A, b: &C, scratch: &mut Scratch<B>)
where
R: VecZnxDftToMut<B>,
A: VecZnxToRef,
C: VmpPMatToRef<B>;
}
#[allow(clippy::too_many_arguments)]
pub unsafe trait VmpApplyDftToDftTmpBytesImpl<B: Backend> {
fn vmp_apply_dft_to_dft_tmp_bytes_impl(
module: &Module<B>,
res_size: usize,
a_size: usize,
b_rows: usize,
b_cols_in: usize,
b_cols_out: usize,
b_size: usize,
) -> usize;
}
pub unsafe trait VmpApplyDftToDftImpl<B: Backend> {
fn vmp_apply_dft_to_dft_impl<R, A, C>(
module: &Module<B>,
res: &mut R,
a: &A,
b: &C,
limb_offset: usize,
scratch: &mut Scratch<B>,
) where
R: VecZnxDftToMut<B>,
A: VecZnxDftToRef<B>,
C: VmpPMatToRef<B>;
}
pub unsafe trait VmpZeroImpl<B: Backend> {
fn vmp_zero_impl<R>(module: &Module<B>, res: &mut R)
where
R: VmpPMatToMut<B>;
}