poulpy_hal/delegates/
svp_ppol.rs

1use crate::{
2    api::{
3        SvpApplyDft, SvpApplyDftToDft, SvpApplyDftToDftAdd, SvpApplyDftToDftInplace, SvpPPolAlloc, SvpPPolBytesOf,
4        SvpPPolFromBytes, SvpPrepare,
5    },
6    layouts::{
7        Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef,
8    },
9    oep::{
10        SvpApplyDftImpl, SvpApplyDftToDftAddImpl, SvpApplyDftToDftImpl, SvpApplyDftToDftInplaceImpl, SvpPPolAllocBytesImpl,
11        SvpPPolAllocImpl, SvpPPolFromBytesImpl, SvpPrepareImpl,
12    },
13};
14
15impl<B> SvpPPolFromBytes<B> for Module<B>
16where
17    B: Backend + SvpPPolFromBytesImpl<B>,
18{
19    fn svp_ppol_from_bytes(&self, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<B> {
20        B::svp_ppol_from_bytes_impl(self.n(), cols, bytes)
21    }
22}
23
24impl<B> SvpPPolAlloc<B> for Module<B>
25where
26    B: Backend + SvpPPolAllocImpl<B>,
27{
28    fn svp_ppol_alloc(&self, cols: usize) -> SvpPPolOwned<B> {
29        B::svp_ppol_alloc_impl(self.n(), cols)
30    }
31}
32
33impl<B> SvpPPolBytesOf for Module<B>
34where
35    B: Backend + SvpPPolAllocBytesImpl<B>,
36{
37    fn bytes_of_svp_ppol(&self, cols: usize) -> usize {
38        B::svp_ppol_bytes_of_impl(self.n(), cols)
39    }
40}
41
42impl<B> SvpPrepare<B> for Module<B>
43where
44    B: Backend + SvpPrepareImpl<B>,
45{
46    fn svp_prepare<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
47    where
48        R: SvpPPolToMut<B>,
49        A: ScalarZnxToRef,
50    {
51        B::svp_prepare_impl(self, res, res_col, a, a_col);
52    }
53}
54
55impl<B> SvpApplyDft<B> for Module<B>
56where
57    B: Backend + SvpApplyDftImpl<B>,
58{
59    fn svp_apply_dft<R, A, C>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
60    where
61        R: VecZnxDftToMut<B>,
62        A: SvpPPolToRef<B>,
63        C: VecZnxToRef,
64    {
65        B::svp_apply_dft_impl(self, res, res_col, a, a_col, b, b_col);
66    }
67}
68
69impl<B> SvpApplyDftToDft<B> for Module<B>
70where
71    B: Backend + SvpApplyDftToDftImpl<B>,
72{
73    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)
74    where
75        R: VecZnxDftToMut<B>,
76        A: SvpPPolToRef<B>,
77        C: VecZnxDftToRef<B>,
78    {
79        B::svp_apply_dft_to_dft_impl(self, res, res_col, a, a_col, b, b_col);
80    }
81}
82
83impl<B> SvpApplyDftToDftAdd<B> for Module<B>
84where
85    B: Backend + SvpApplyDftToDftAddImpl<B>,
86{
87    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)
88    where
89        R: VecZnxDftToMut<B>,
90        A: SvpPPolToRef<B>,
91        C: VecZnxDftToRef<B>,
92    {
93        B::svp_apply_dft_to_dft_add_impl(self, res, res_col, a, a_col, b, b_col);
94    }
95}
96
97impl<B> SvpApplyDftToDftInplace<B> for Module<B>
98where
99    B: Backend + SvpApplyDftToDftInplaceImpl,
100{
101    fn svp_apply_dft_to_dft_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
102    where
103        R: VecZnxDftToMut<B>,
104        A: SvpPPolToRef<B>,
105    {
106        B::svp_apply_dft_to_dft_inplace_impl(self, res, res_col, a, a_col);
107    }
108}