use crate::layouts::{ Backend, CnvPVecL, CnvPVecLToMut, CnvPVecLToRef, CnvPVecR, CnvPVecRToMut, CnvPVecRToRef, Module, Scratch, VecZnxBigToMut, VecZnxDftToMut, VecZnxToRef, ZnxInfos, }; /// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe) /// * See the TODO reference implementation. /// * See [crate::api::CnvPVecLAlloc] for corresponding public API. /// # Safety [crate::doc::backend_safety] for safety contract. pub unsafe trait CnvPVecLAllocImpl { fn cnv_pvec_left_alloc_impl(n: usize, cols: usize, size: usize) -> CnvPVecL, BE>; fn cnv_pvec_right_alloc_impl(n: usize, cols: usize, size: usize) -> CnvPVecR, BE>; } /// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe) /// * See the TODO reference implementation. /// * See [crate::api::CnvPVecLBytesOf] for corresponding public API. /// # Safety [crate::doc::backend_safety] for safety contract. pub unsafe trait CnvPVecBytesOfImpl { fn bytes_of_cnv_pvec_left_impl(n: usize, cols: usize, size: usize) -> usize; fn bytes_of_cnv_pvec_right_impl(n: usize, cols: usize, size: usize) -> usize; } /// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe) /// * See the TODO reference implementation. /// * See [crate::api::Convolution] for corresponding public API. /// # Safety [crate::doc::backend_safety] for safety contract. pub unsafe trait ConvolutionImpl { fn cnv_prepare_left_tmp_bytes_impl(module: &Module, res_size: usize, a_size: usize) -> usize; fn cnv_prepare_left_impl(module: &Module, res: &mut R, a: &A, scratch: &mut Scratch) where R: CnvPVecLToMut, A: VecZnxToRef; fn cnv_prepare_right_tmp_bytes_impl(module: &Module, res_size: usize, a_size: usize) -> usize; fn cnv_prepare_right_impl(module: &Module, res: &mut R, a: &A, scratch: &mut Scratch) where R: CnvPVecRToMut, A: VecZnxToRef + ZnxInfos; fn cnv_apply_dft_tmp_bytes_impl( module: &Module, res_size: usize, res_offset: usize, a_size: usize, b_size: usize, ) -> usize; fn cnv_by_const_apply_tmp_bytes_impl( module: &Module, res_size: usize, res_offset: usize, a_size: usize, b_size: usize, ) -> usize; #[allow(clippy::too_many_arguments)] fn cnv_by_const_apply_impl( module: &Module, res: &mut R, res_offset: usize, res_col: usize, a: &A, a_col: usize, b: &[i64], scratch: &mut Scratch, ) where R: VecZnxBigToMut, A: VecZnxToRef; #[allow(clippy::too_many_arguments)] fn cnv_apply_dft_impl( module: &Module, res: &mut R, res_offset: usize, res_col: usize, a: &A, a_col: usize, b: &B, b_col: usize, scratch: &mut Scratch, ) where R: VecZnxDftToMut, A: CnvPVecLToRef, B: CnvPVecRToRef; fn cnv_pairwise_apply_dft_tmp_bytes( module: &Module, res_size: usize, res_offset: usize, a_size: usize, b_size: usize, ) -> usize; #[allow(clippy::too_many_arguments)] fn cnv_pairwise_apply_dft_impl( module: &Module, res: &mut R, res_offset: usize, res_col: usize, a: &A, b: &B, i: usize, j: usize, scratch: &mut Scratch, ) where R: VecZnxDftToMut, A: CnvPVecLToRef, B: CnvPVecRToRef; }