use crate::hal::layouts::{ Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, }; pub unsafe trait VecZnxDftAllocImpl { fn vec_znx_dft_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxDftOwned; } pub unsafe trait VecZnxDftFromBytesImpl { fn vec_znx_dft_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec) -> VecZnxDftOwned; } pub unsafe trait VecZnxDftAllocBytesImpl { fn vec_znx_dft_alloc_bytes_impl(n: usize, cols: usize, size: usize) -> usize; } pub unsafe trait VecZnxDftToVecZnxBigTmpBytesImpl { fn vec_znx_dft_to_vec_znx_big_tmp_bytes_impl(module: &Module) -> usize; } pub unsafe trait VecZnxDftToVecZnxBigImpl { fn vec_znx_dft_to_vec_znx_big_impl( module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, scratch: &mut Scratch, ) where R: VecZnxBigToMut, A: VecZnxDftToRef; } pub unsafe trait VecZnxDftToVecZnxBigTmpAImpl { fn vec_znx_dft_to_vec_znx_big_tmp_a_impl(module: &Module, res: &mut R, res_col: usize, a: &mut A, a_col: usize) where R: VecZnxBigToMut, A: VecZnxDftToMut; } pub unsafe trait VecZnxDftToVecZnxBigConsumeImpl { fn vec_znx_dft_to_vec_znx_big_consume_impl(module: &Module, a: VecZnxDft) -> VecZnxBig where VecZnxDft: VecZnxDftToMut; } pub unsafe trait VecZnxDftAddImpl { fn vec_znx_dft_add_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, D: VecZnxDftToRef; } pub unsafe trait VecZnxDftAddInplaceImpl { fn vec_znx_dft_add_inplace_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub unsafe trait VecZnxDftSubImpl { fn vec_znx_dft_sub_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, D: VecZnxDftToRef; } pub unsafe trait VecZnxDftSubABInplaceImpl { fn vec_znx_dft_sub_ab_inplace_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub unsafe trait VecZnxDftSubBAInplaceImpl { fn vec_znx_dft_sub_ba_inplace_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub unsafe trait VecZnxDftCopyImpl { fn vec_znx_dft_copy_impl( module: &Module, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize, ) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub unsafe trait VecZnxDftFromVecZnxImpl { fn vec_znx_dft_from_vec_znx_impl( module: &Module, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize, ) where R: VecZnxDftToMut, A: VecZnxToRef; } pub unsafe trait VecZnxDftZeroImpl { fn vec_znx_dft_zero_impl(module: &Module, res: &mut R) where R: VecZnxDftToMut; }