use crate::{ api::{ VecZnxDftAdd, VecZnxDftAddInplace, VecZnxDftAlloc, VecZnxDftAllocBytes, VecZnxDftCopy, VecZnxDftFromBytes, VecZnxDftFromVecZnx, VecZnxDftSub, VecZnxDftSubABInplace, VecZnxDftSubBAInplace, VecZnxDftToVecZnxBig, VecZnxDftToVecZnxBigConsume, VecZnxDftToVecZnxBigTmpA, VecZnxDftToVecZnxBigTmpBytes, VecZnxDftZero, }, layouts::{ Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, }, oep::{ VecZnxDftAddImpl, VecZnxDftAddInplaceImpl, VecZnxDftAllocBytesImpl, VecZnxDftAllocImpl, VecZnxDftCopyImpl, VecZnxDftFromBytesImpl, VecZnxDftFromVecZnxImpl, VecZnxDftSubABInplaceImpl, VecZnxDftSubBAInplaceImpl, VecZnxDftSubImpl, VecZnxDftToVecZnxBigConsumeImpl, VecZnxDftToVecZnxBigImpl, VecZnxDftToVecZnxBigTmpAImpl, VecZnxDftToVecZnxBigTmpBytesImpl, VecZnxDftZeroImpl, }, }; impl VecZnxDftFromBytes for Module where B: Backend + VecZnxDftFromBytesImpl, { fn vec_znx_dft_from_bytes(&self, n: usize, cols: usize, size: usize, bytes: Vec) -> VecZnxDftOwned { B::vec_znx_dft_from_bytes_impl(n, cols, size, bytes) } } impl VecZnxDftAllocBytes for Module where B: Backend + VecZnxDftAllocBytesImpl, { fn vec_znx_dft_alloc_bytes(&self, n: usize, cols: usize, size: usize) -> usize { B::vec_znx_dft_alloc_bytes_impl(n, cols, size) } } impl VecZnxDftAlloc for Module where B: Backend + VecZnxDftAllocImpl, { fn vec_znx_dft_alloc(&self, n: usize, cols: usize, size: usize) -> VecZnxDftOwned { B::vec_znx_dft_alloc_impl(n, cols, size) } } impl VecZnxDftToVecZnxBigTmpBytes for Module where B: Backend + VecZnxDftToVecZnxBigTmpBytesImpl, { fn vec_znx_dft_to_vec_znx_big_tmp_bytes(&self, n: usize) -> usize { B::vec_znx_dft_to_vec_znx_big_tmp_bytes_impl(self, n) } } impl VecZnxDftToVecZnxBig for Module where B: Backend + VecZnxDftToVecZnxBigImpl, { fn vec_znx_dft_to_vec_znx_big(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, scratch: &mut Scratch) where R: VecZnxBigToMut, A: VecZnxDftToRef, { B::vec_znx_dft_to_vec_znx_big_impl(self, res, res_col, a, a_col, scratch); } } impl VecZnxDftToVecZnxBigTmpA for Module where B: Backend + VecZnxDftToVecZnxBigTmpAImpl, { fn vec_znx_dft_to_vec_znx_big_tmp_a(&self, res: &mut R, res_col: usize, a: &mut A, a_col: usize) where R: VecZnxBigToMut, A: VecZnxDftToMut, { B::vec_znx_dft_to_vec_znx_big_tmp_a_impl(self, res, res_col, a, a_col); } } impl VecZnxDftToVecZnxBigConsume for Module where B: Backend + VecZnxDftToVecZnxBigConsumeImpl, { fn vec_znx_dft_to_vec_znx_big_consume(&self, a: VecZnxDft) -> VecZnxBig where VecZnxDft: VecZnxDftToMut, { B::vec_znx_dft_to_vec_znx_big_consume_impl(self, a) } } impl VecZnxDftFromVecZnx for Module where B: Backend + VecZnxDftFromVecZnxImpl, { fn vec_znx_dft_from_vec_znx(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxToRef, { B::vec_znx_dft_from_vec_znx_impl(self, step, offset, res, res_col, a, a_col); } } impl VecZnxDftAdd for Module where B: Backend + VecZnxDftAddImpl, { fn vec_znx_dft_add(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, D: VecZnxDftToRef, { B::vec_znx_dft_add_impl(self, res, res_col, a, a_col, b, b_col); } } impl VecZnxDftAddInplace for Module where B: Backend + VecZnxDftAddInplaceImpl, { fn vec_znx_dft_add_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { B::vec_znx_dft_add_inplace_impl(self, res, res_col, a, a_col); } } impl VecZnxDftSub for Module where B: Backend + VecZnxDftSubImpl, { fn vec_znx_dft_sub(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, D: VecZnxDftToRef, { B::vec_znx_dft_sub_impl(self, res, res_col, a, a_col, b, b_col); } } impl VecZnxDftSubABInplace for Module where B: Backend + VecZnxDftSubABInplaceImpl, { fn vec_znx_dft_sub_ab_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { B::vec_znx_dft_sub_ab_inplace_impl(self, res, res_col, a, a_col); } } impl VecZnxDftSubBAInplace for Module where B: Backend + VecZnxDftSubBAInplaceImpl, { fn vec_znx_dft_sub_ba_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { B::vec_znx_dft_sub_ba_inplace_impl(self, res, res_col, a, a_col); } } impl VecZnxDftCopy for Module where B: Backend + VecZnxDftCopyImpl, { fn vec_znx_dft_copy(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { B::vec_znx_dft_copy_impl(self, step, offset, res, res_col, a, a_col); } } impl VecZnxDftZero for Module where B: Backend + VecZnxDftZeroImpl, { fn vec_znx_dft_zero(&self, res: &mut R) where R: VecZnxDftToMut, { B::vec_znx_dft_zero_impl(self, res); } }