use crate::layouts::{
Backend, CnvPVecL, CnvPVecLToMut, CnvPVecLToRef, CnvPVecR, CnvPVecRToMut, CnvPVecRToRef, Scratch, VecZnxBigToMut,
VecZnxDftToMut, VecZnxToRef, ZnxInfos, ZnxViewMut,
};
pub trait CnvPVecAlloc<BE: Backend> {
fn cnv_pvec_left_alloc(&self, cols: usize, size: usize) -> CnvPVecL<Vec<u8>, BE>;
fn cnv_pvec_right_alloc(&self, cols: usize, size: usize) -> CnvPVecR<Vec<u8>, BE>;
}
pub trait CnvPVecBytesOf {
fn bytes_of_cnv_pvec_left(&self, cols: usize, size: usize) -> usize;
fn bytes_of_cnv_pvec_right(&self, cols: usize, size: usize) -> usize;
}
pub trait Convolution<BE: Backend> {
fn cnv_prepare_left_tmp_bytes(&self, res_size: usize, a_size: usize) -> usize;
fn cnv_prepare_left<R, A>(&self, res: &mut R, a: &A, scratch: &mut Scratch<BE>)
where
R: CnvPVecLToMut<BE> + ZnxInfos + ZnxViewMut<Scalar = BE::ScalarPrep>,
A: VecZnxToRef + ZnxInfos;
fn cnv_prepare_right_tmp_bytes(&self, res_size: usize, a_size: usize) -> usize;
fn cnv_prepare_right<R, A>(&self, res: &mut R, a: &A, scratch: &mut Scratch<BE>)
where
R: CnvPVecRToMut<BE> + ZnxInfos + ZnxViewMut<Scalar = BE::ScalarPrep>,
A: VecZnxToRef + ZnxInfos;
fn cnv_apply_dft_tmp_bytes(&self, res_size: usize, res_offset: usize, a_size: usize, b_size: usize) -> usize;
fn cnv_by_const_apply_tmp_bytes(&self, res_size: usize, res_offset: usize, a_size: usize, b_size: usize) -> usize;
#[allow(clippy::too_many_arguments)]
fn cnv_by_const_apply<R, A>(
&self,
res: &mut R,
res_offset: usize,
res_col: usize,
a: &A,
a_col: usize,
b: &[i64],
scratch: &mut Scratch<BE>,
) where
R: VecZnxBigToMut<BE>,
A: VecZnxToRef;
#[allow(clippy::too_many_arguments)]
fn cnv_apply_dft<R, A, B>(
&self,
res: &mut R,
res_offset: usize,
res_col: usize,
a: &A,
a_col: usize,
b: &B,
b_col: usize,
scratch: &mut Scratch<BE>,
) where
R: VecZnxDftToMut<BE>,
A: CnvPVecLToRef<BE>,
B: CnvPVecRToRef<BE>;
fn cnv_pairwise_apply_dft_tmp_bytes(&self, res_size: usize, res_offset: usize, a_size: usize, b_size: usize) -> usize;
#[allow(clippy::too_many_arguments)]
fn cnv_pairwise_apply_dft<R, A, B>(
&self,
res: &mut R,
res_offset: usize,
res_col: usize,
a: &A,
b: &B,
i: usize,
j: usize,
scratch: &mut Scratch<BE>,
) where
R: VecZnxDftToMut<BE>,
A: CnvPVecLToRef<BE>,
B: CnvPVecRToRef<BE>;
}