poulpy_hal/api/
svp_ppol.rs1use crate::layouts::{
2 Backend, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef,
3};
4
5pub trait SvpPPolAlloc<B: Backend> {
7 fn svp_ppol_alloc(&self, cols: usize) -> SvpPPolOwned<B>;
8}
9
10pub trait SvpPPolBytesOf {
12 fn bytes_of_svp_ppol(&self, cols: usize) -> usize;
13}
14
15pub trait SvpPPolFromBytes<B: Backend> {
18 fn svp_ppol_from_bytes(&self, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<B>;
19}
20
21pub trait SvpPrepare<B: Backend> {
23 fn svp_prepare<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
24 where
25 R: SvpPPolToMut<B>,
26 A: ScalarZnxToRef;
27}
28
29pub trait SvpApplyDft<B: Backend> {
31 fn svp_apply_dft<R, A, C>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
32 where
33 R: VecZnxDftToMut<B>,
34 A: SvpPPolToRef<B>,
35 C: VecZnxToRef;
36}
37
38pub trait SvpApplyDftToDft<B: Backend> {
40 fn svp_apply_dft_to_dft<R, A, C>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
41 where
42 R: VecZnxDftToMut<B>,
43 A: SvpPPolToRef<B>,
44 C: VecZnxDftToRef<B>;
45}
46
47pub trait SvpApplyDftToDftAdd<B: Backend> {
49 fn svp_apply_dft_to_dft_add<R, A, C>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
50 where
51 R: VecZnxDftToMut<B>,
52 A: SvpPPolToRef<B>,
53 C: VecZnxDftToRef<B>;
54}
55
56pub trait SvpApplyDftToDftInplace<B: Backend> {
58 fn svp_apply_dft_to_dft_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
59 where
60 R: VecZnxDftToMut<B>,
61 A: SvpPPolToRef<B>;
62}