arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/delegates/svp_ppol.rs
poulpy-hal/src/delegates/svp_ppol.rsRaw
  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}