use crate::{ api::{ SvpApplyDft, SvpApplyDftToDft, SvpApplyDftToDftAdd, SvpApplyDftToDftInplace, SvpPPolAlloc, SvpPPolBytesOf, SvpPPolFromBytes, SvpPrepare, }, layouts::{ Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, }, oep::{ SvpApplyDftImpl, SvpApplyDftToDftAddImpl, SvpApplyDftToDftImpl, SvpApplyDftToDftInplaceImpl, SvpPPolAllocBytesImpl, SvpPPolAllocImpl, SvpPPolFromBytesImpl, SvpPrepareImpl, }, }; impl SvpPPolFromBytes for Module where B: Backend + SvpPPolFromBytesImpl, { fn svp_ppol_from_bytes(&self, cols: usize, bytes: Vec) -> SvpPPolOwned { B::svp_ppol_from_bytes_impl(self.n(), cols, bytes) } } impl SvpPPolAlloc for Module where B: Backend + SvpPPolAllocImpl, { fn svp_ppol_alloc(&self, cols: usize) -> SvpPPolOwned { B::svp_ppol_alloc_impl(self.n(), cols) } } impl SvpPPolBytesOf for Module where B: Backend + SvpPPolAllocBytesImpl, { fn bytes_of_svp_ppol(&self, cols: usize) -> usize { B::svp_ppol_bytes_of_impl(self.n(), cols) } } impl SvpPrepare for Module where B: Backend + SvpPrepareImpl, { fn svp_prepare(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: SvpPPolToMut, A: ScalarZnxToRef, { B::svp_prepare_impl(self, res, res_col, a, a_col); } } impl SvpApplyDft for Module where B: Backend + SvpApplyDftImpl, { fn svp_apply_dft(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, C: VecZnxToRef, { B::svp_apply_dft_impl(self, res, res_col, a, a_col, b, b_col); } } impl SvpApplyDftToDft for Module where B: Backend + SvpApplyDftToDftImpl, { fn svp_apply_dft_to_dft(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, C: VecZnxDftToRef, { B::svp_apply_dft_to_dft_impl(self, res, res_col, a, a_col, b, b_col); } } impl SvpApplyDftToDftAdd for Module where B: Backend + SvpApplyDftToDftAddImpl, { fn svp_apply_dft_to_dft_add(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, C: VecZnxDftToRef, { B::svp_apply_dft_to_dft_add_impl(self, res, res_col, a, a_col, b, b_col); } } impl SvpApplyDftToDftInplace for Module where B: Backend + SvpApplyDftToDftInplaceImpl, { fn svp_apply_dft_to_dft_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, { B::svp_apply_dft_to_dft_inplace_impl(self, res, res_col, a, a_col); } }