use crate::layouts::{
Backend, MatZnxBackendRef, ScratchArena, VecZnxBackendRef, VecZnxDftBackendMut, VecZnxDftBackendRef, VecZnxDftToBackendMut,
VmpPMatBackendMut, VmpPMatBackendRef, VmpPMatOwned,
};
pub trait VmpPMatAlloc<B: Backend> {
fn vmp_pmat_alloc(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> VmpPMatOwned<B>;
}
pub trait VmpPMatBytesOf {
fn bytes_of_vmp_pmat(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize;
}
pub trait VmpPrepareTmpBytes {
fn vmp_prepare_tmp_bytes(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize;
}
pub trait VmpPrepare<B: Backend> {
fn vmp_prepare(&self, pmat: &mut VmpPMatBackendMut<'_, B>, mat: &MatZnxBackendRef<'_, B>, scratch: &mut ScratchArena<'_, B>);
}
#[allow(clippy::too_many_arguments)]
pub trait VmpApplyDftTmpBytes {
fn vmp_apply_dft_tmp_bytes(
&self,
res_size: usize,
a_size: usize,
b_rows: usize,
b_cols_in: usize,
b_cols_out: usize,
b_size: usize,
) -> usize;
}
pub trait VmpApplyDft<B: Backend> {
fn vmp_apply_dft<R>(
&self,
res: &mut R,
a: &VecZnxBackendRef<'_, B>,
pmat: &VmpPMatBackendRef<'_, B>,
scratch: &mut ScratchArena<'_, B>,
) where
R: VecZnxDftToBackendMut<B>;
}
#[allow(clippy::too_many_arguments)]
pub trait VmpApplyDftToDftTmpBytes {
fn vmp_apply_dft_to_dft_tmp_bytes(
&self,
res_size: usize,
a_size: usize,
b_rows: usize,
b_cols_in: usize,
b_cols_out: usize,
b_size: usize,
) -> usize;
}
#[allow(clippy::too_many_arguments)]
pub trait VmpApplyDftToDftAccumulateTmpBytes {
fn vmp_apply_dft_to_dft_accumulate_tmp_bytes(
&self,
res_size: usize,
a_size: usize,
b_rows: usize,
b_cols_in: usize,
b_cols_out: usize,
b_size: usize,
) -> usize;
}
pub trait VmpApplyDftToDft<B: Backend> {
fn vmp_apply_dft_to_dft<'r>(
&self,
res: &mut VecZnxDftBackendMut<'r, B>,
a: &VecZnxDftBackendRef<'_, B>,
pmat: &VmpPMatBackendRef<'_, B>,
limb_offset: usize,
scratch: &mut ScratchArena<'_, B>,
);
}
pub trait VmpApplyDftToDftAccumulate<B: Backend> {
fn vmp_apply_dft_to_dft_accumulate<'r>(
&self,
res: &mut VecZnxDftBackendMut<'r, B>,
a: &VecZnxDftBackendRef<'_, B>,
pmat: &VmpPMatBackendRef<'_, B>,
limb_offset: usize,
scratch: &mut ScratchArena<'_, B>,
);
}
pub trait VmpZero<B: Backend> {
fn vmp_zero(&self, res: &mut VmpPMatBackendMut<'_, B>);
}