use crate::{ api::{SvpApply, SvpApplyInplace, SvpPPolAlloc, SvpPPolAllocBytes, SvpPPolFromBytes, SvpPrepare}, layouts::{Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef}, oep::{SvpApplyImpl, SvpApplyInplaceImpl, 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 SvpPPolAllocBytes for Module where B: Backend + SvpPPolAllocBytesImpl, { fn svp_ppol_alloc_bytes(&self, cols: usize) -> usize { B::svp_ppol_alloc_bytes_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 SvpApply for Module where B: Backend + SvpApplyImpl, { fn svp_apply(&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_impl(self, res, res_col, a, a_col, b, b_col); } } impl SvpApplyInplace for Module where B: Backend + SvpApplyInplaceImpl, { fn svp_apply_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, { B::svp_apply_inplace_impl(self, res, res_col, a, a_col); } }