poulpy_hal/delegates/
svp_ppol.rs

1use 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}