use poulpy_hal::{ layouts::{ Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, }, oep::{ VecZnxDftAddImpl, VecZnxDftAddInplaceImpl, VecZnxDftAddScaledInplaceImpl, VecZnxDftAllocBytesImpl, VecZnxDftAllocImpl, VecZnxDftApplyImpl, VecZnxDftCopyImpl, VecZnxDftFromBytesImpl, VecZnxDftSubImpl, VecZnxDftSubInplaceImpl, VecZnxDftSubNegateInplaceImpl, VecZnxDftZeroImpl, VecZnxIdftApplyConsumeImpl, VecZnxIdftApplyImpl, VecZnxIdftApplyTmpAImpl, VecZnxIdftApplyTmpBytesImpl, }, reference::fft64::vec_znx_dft::{ vec_znx_dft_add, vec_znx_dft_add_inplace, vec_znx_dft_add_scaled_inplace, vec_znx_dft_apply, vec_znx_dft_copy, vec_znx_dft_sub, vec_znx_dft_sub_inplace, vec_znx_dft_sub_negate_inplace, vec_znx_dft_zero, vec_znx_idft_apply, vec_znx_idft_apply_consume, vec_znx_idft_apply_tmpa, }, }; use crate::{FFT64Ref, module::FFT64ModuleHandle}; unsafe impl VecZnxDftFromBytesImpl for FFT64Ref { fn vec_znx_dft_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec) -> VecZnxDftOwned { VecZnxDft::, Self>::from_bytes(n, cols, size, bytes) } } unsafe impl VecZnxDftAllocBytesImpl for FFT64Ref { fn vec_znx_dft_bytes_of_impl(n: usize, cols: usize, size: usize) -> usize { Self::layout_prep_word_count() * n * cols * size * size_of::<::ScalarPrep>() } } unsafe impl VecZnxDftAllocImpl for FFT64Ref { fn vec_znx_dft_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxDftOwned { VecZnxDftOwned::alloc(n, cols, size) } } unsafe impl VecZnxIdftApplyTmpBytesImpl for FFT64Ref { fn vec_znx_idft_apply_tmp_bytes_impl(_module: &Module) -> usize { 0 } } unsafe impl VecZnxIdftApplyImpl for FFT64Ref { fn vec_znx_idft_apply_impl( module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, _scratch: &mut Scratch, ) where R: VecZnxBigToMut, A: VecZnxDftToRef, { vec_znx_idft_apply(module.get_ifft_table(), res, res_col, a, a_col); } } unsafe impl VecZnxIdftApplyTmpAImpl for FFT64Ref { fn vec_znx_idft_apply_tmpa_impl(module: &Module, res: &mut R, res_col: usize, a: &mut A, a_col: usize) where R: VecZnxBigToMut, A: VecZnxDftToMut, { vec_znx_idft_apply_tmpa(module.get_ifft_table(), res, res_col, a, a_col); } } unsafe impl VecZnxIdftApplyConsumeImpl for FFT64Ref { fn vec_znx_idft_apply_consume_impl(module: &Module, res: VecZnxDft) -> VecZnxBig where VecZnxDft: VecZnxDftToMut, { vec_znx_idft_apply_consume(module.get_ifft_table(), res) } } unsafe impl VecZnxDftApplyImpl for FFT64Ref { fn vec_znx_dft_apply_impl( module: &Module, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize, ) where R: VecZnxDftToMut, A: VecZnxToRef, { vec_znx_dft_apply(module.get_fft_table(), step, offset, res, res_col, a, a_col); } } unsafe impl VecZnxDftAddImpl for FFT64Ref { fn vec_znx_dft_add_impl( _module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &B, b_col: usize, ) where R: VecZnxDftToMut, A: VecZnxDftToRef, B: VecZnxDftToRef, { vec_znx_dft_add(res, res_col, a, a_col, b, b_col); } } unsafe impl VecZnxDftAddScaledInplaceImpl for FFT64Ref { fn vec_znx_dft_add_scaled_inplace_impl( _module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, a_scale: i64, ) where R: VecZnxDftToMut, A: VecZnxDftToRef, { vec_znx_dft_add_scaled_inplace(res, res_col, a, a_col, a_scale); } } unsafe impl VecZnxDftAddInplaceImpl for FFT64Ref { 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, { vec_znx_dft_add_inplace(res, res_col, a, a_col); } } unsafe impl VecZnxDftSubImpl for FFT64Ref { fn vec_znx_dft_sub_impl( _module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &B, b_col: usize, ) where R: VecZnxDftToMut, A: VecZnxDftToRef, B: VecZnxDftToRef, { vec_znx_dft_sub(res, res_col, a, a_col, b, b_col); } } unsafe impl VecZnxDftSubInplaceImpl for FFT64Ref { fn vec_znx_dft_sub_inplace_impl(_module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { vec_znx_dft_sub_inplace(res, res_col, a, a_col); } } unsafe impl VecZnxDftSubNegateInplaceImpl for FFT64Ref { fn vec_znx_dft_sub_negate_inplace_impl(_module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef, { vec_znx_dft_sub_negate_inplace(res, res_col, a, a_col); } } unsafe impl VecZnxDftCopyImpl for FFT64Ref { 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, { vec_znx_dft_copy(step, offset, res, res_col, a, a_col); } } unsafe impl VecZnxDftZeroImpl for FFT64Ref { fn vec_znx_dft_zero_impl(_module: &Module, res: &mut R, res_col: usize) where R: VecZnxDftToMut, { vec_znx_dft_zero(res, res_col); } }