poulpy_hal/delegates/
svp_ppol.rs1use crate::{
2 api::{SvpApply, SvpApplyInplace, SvpPPolAlloc, SvpPPolAllocBytes, SvpPPolFromBytes, SvpPrepare},
3 layouts::{Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef},
4 oep::{SvpApplyImpl, SvpApplyInplaceImpl, SvpPPolAllocBytesImpl, SvpPPolAllocImpl, SvpPPolFromBytesImpl, SvpPrepareImpl},
5};
6
7impl<B> SvpPPolFromBytes<B> for Module<B>
8where
9 B: Backend + SvpPPolFromBytesImpl<B>,
10{
11 fn svp_ppol_from_bytes(&self, n: usize, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<B> {
12 B::svp_ppol_from_bytes_impl(n, cols, bytes)
13 }
14}
15
16impl<B> SvpPPolAlloc<B> for Module<B>
17where
18 B: Backend + SvpPPolAllocImpl<B>,
19{
20 fn svp_ppol_alloc(&self, n: usize, cols: usize) -> SvpPPolOwned<B> {
21 B::svp_ppol_alloc_impl(n, cols)
22 }
23}
24
25impl<B> SvpPPolAllocBytes for Module<B>
26where
27 B: Backend + SvpPPolAllocBytesImpl<B>,
28{
29 fn svp_ppol_alloc_bytes(&self, n: usize, cols: usize) -> usize {
30 B::svp_ppol_alloc_bytes_impl(n, cols)
31 }
32}
33
34impl<B> SvpPrepare<B> for Module<B>
35where
36 B: Backend + SvpPrepareImpl<B>,
37{
38 fn svp_prepare<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
39 where
40 R: SvpPPolToMut<B>,
41 A: ScalarZnxToRef,
42 {
43 B::svp_prepare_impl(self, res, res_col, a, a_col);
44 }
45}
46
47impl<B> SvpApply<B> for Module<B>
48where
49 B: Backend + SvpApplyImpl<B>,
50{
51 fn svp_apply<R, A, C>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
52 where
53 R: VecZnxDftToMut<B>,
54 A: SvpPPolToRef<B>,
55 C: VecZnxDftToRef<B>,
56 {
57 B::svp_apply_impl(self, res, res_col, a, a_col, b, b_col);
58 }
59}
60
61impl<B> SvpApplyInplace<B> for Module<B>
62where
63 B: Backend + SvpApplyInplaceImpl,
64{
65 fn svp_apply_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
66 where
67 R: VecZnxDftToMut<B>,
68 A: SvpPPolToRef<B>,
69 {
70 B::svp_apply_inplace_impl(self, res, res_col, a, a_col);
71 }
72}