use crate::layouts::{ Backend, Data, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, }; pub trait VecZnxDftAlloc { fn vec_znx_dft_alloc(&self, cols: usize, size: usize) -> VecZnxDftOwned; } pub trait VecZnxDftFromBytes { fn vec_znx_dft_from_bytes(&self, cols: usize, size: usize, bytes: Vec) -> VecZnxDftOwned; } pub trait VecZnxDftBytesOf { fn bytes_of_vec_znx_dft(&self, cols: usize, size: usize) -> usize; } pub trait VecZnxDftApply { fn vec_znx_dft_apply(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxToRef; } pub trait VecZnxIdftApplyTmpBytes { fn vec_znx_idft_apply_tmp_bytes(&self) -> usize; } pub trait VecZnxIdftApply { fn vec_znx_idft_apply(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, scratch: &mut Scratch) where R: VecZnxBigToMut, A: VecZnxDftToRef; } pub trait VecZnxIdftApplyTmpA { fn vec_znx_idft_apply_tmpa(&self, res: &mut R, res_col: usize, a: &mut A, a_col: usize) where R: VecZnxBigToMut, A: VecZnxDftToMut; } pub trait VecZnxIdftApplyConsume { fn vec_znx_idft_apply_consume(&self, a: VecZnxDft) -> VecZnxBig where VecZnxDft: VecZnxDftToMut; } pub trait VecZnxDftAdd { 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; } pub trait VecZnxDftAddInplace { fn vec_znx_dft_add_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub trait VecZnxDftAddScaledInplace { fn vec_znx_dft_add_scaled_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, a_scale: i64) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub trait VecZnxDftSub { 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; } pub trait VecZnxDftSubInplace { fn vec_znx_dft_sub_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub trait VecZnxDftSubNegateInplace { fn vec_znx_dft_sub_negate_inplace(&self, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: VecZnxDftToRef; } pub trait VecZnxDftCopy { 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; } pub trait VecZnxDftZero { fn vec_znx_dft_zero(&self, res: &mut R) where R: VecZnxDftToMut; }