arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/delegates/vmp_pmat.rs
poulpy-hal/src/delegates/vmp_pmat.rsRaw
  1use crate::{
  2    api::{
  3        VmpApplyDft, VmpApplyDftTmpBytes, VmpApplyDftToDft, VmpApplyDftToDftAdd, VmpApplyDftToDftAddTmpBytes,
  4        VmpApplyDftToDftTmpBytes, VmpPMatAlloc, VmpPMatBytesOf, VmpPMatFromBytes, VmpPrepare, VmpPrepareTmpBytes, VmpZero,
  5    },
  6    layouts::{
  7        Backend, MatZnxToRef, Module, Scratch, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef, VmpPMatOwned, VmpPMatToMut,
  8        VmpPMatToRef,
  9    },
 10    oep::{
 11        VmpApplyDftImpl, VmpApplyDftTmpBytesImpl, VmpApplyDftToDftAddImpl, VmpApplyDftToDftAddTmpBytesImpl, VmpApplyDftToDftImpl,
 12        VmpApplyDftToDftTmpBytesImpl, VmpPMatAllocBytesImpl, VmpPMatAllocImpl, VmpPMatFromBytesImpl, VmpPrepareImpl,
 13        VmpPrepareTmpBytesImpl, VmpZeroImpl,
 14    },
 15};
 16
 17impl<B> VmpPMatAlloc<B> for Module<B>
 18where
 19    B: Backend + VmpPMatAllocImpl<B>,
 20{
 21    fn vmp_pmat_alloc(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> VmpPMatOwned<B> {
 22        B::vmp_pmat_alloc_impl(self.n(), rows, cols_in, cols_out, size)
 23    }
 24}
 25
 26impl<B> VmpPMatBytesOf for Module<B>
 27where
 28    B: Backend + VmpPMatAllocBytesImpl<B>,
 29{
 30    fn bytes_of_vmp_pmat(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize {
 31        B::vmp_pmat_bytes_of_impl(self.n(), rows, cols_in, cols_out, size)
 32    }
 33}
 34
 35impl<B> VmpPMatFromBytes<B> for Module<B>
 36where
 37    B: Backend + VmpPMatFromBytesImpl<B>,
 38{
 39    fn vmp_pmat_from_bytes(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize, bytes: Vec<u8>) -> VmpPMatOwned<B> {
 40        B::vmp_pmat_from_bytes_impl(self.n(), rows, cols_in, cols_out, size, bytes)
 41    }
 42}
 43
 44impl<B> VmpPrepareTmpBytes for Module<B>
 45where
 46    B: Backend + VmpPrepareTmpBytesImpl<B>,
 47{
 48    fn vmp_prepare_tmp_bytes(&self, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize {
 49        B::vmp_prepare_tmp_bytes_impl(self, rows, cols_in, cols_out, size)
 50    }
 51}
 52
 53impl<B> VmpPrepare<B> for Module<B>
 54where
 55    B: Backend + VmpPrepareImpl<B>,
 56{
 57    fn vmp_prepare<R, A>(&self, res: &mut R, a: &A, scratch: &mut Scratch<B>)
 58    where
 59        R: VmpPMatToMut<B>,
 60        A: MatZnxToRef,
 61    {
 62        B::vmp_prepare_impl(self, res, a, scratch)
 63    }
 64}
 65
 66impl<B> VmpApplyDftTmpBytes for Module<B>
 67where
 68    B: Backend + VmpApplyDftTmpBytesImpl<B>,
 69{
 70    fn vmp_apply_dft_tmp_bytes(
 71        &self,
 72        res_size: usize,
 73        a_size: usize,
 74        b_rows: usize,
 75        b_cols_in: usize,
 76        b_cols_out: usize,
 77        b_size: usize,
 78    ) -> usize {
 79        B::vmp_apply_dft_tmp_bytes_impl(self, res_size, a_size, b_rows, b_cols_in, b_cols_out, b_size)
 80    }
 81}
 82
 83impl<B> VmpApplyDft<B> for Module<B>
 84where
 85    B: Backend + VmpApplyDftImpl<B>,
 86{
 87    fn vmp_apply_dft<R, A, C>(&self, res: &mut R, a: &A, b: &C, scratch: &mut Scratch<B>)
 88    where
 89        R: VecZnxDftToMut<B>,
 90        A: VecZnxToRef,
 91        C: VmpPMatToRef<B>,
 92    {
 93        B::vmp_apply_dft_impl(self, res, a, b, scratch);
 94    }
 95}
 96
 97impl<B> VmpApplyDftToDftTmpBytes for Module<B>
 98where
 99    B: Backend + VmpApplyDftToDftTmpBytesImpl<B>,
100{
101    fn vmp_apply_dft_to_dft_tmp_bytes(
102        &self,
103        res_size: usize,
104        a_size: usize,
105        b_rows: usize,
106        b_cols_in: usize,
107        b_cols_out: usize,
108        b_size: usize,
109    ) -> usize {
110        B::vmp_apply_dft_to_dft_tmp_bytes_impl(self, res_size, a_size, b_rows, b_cols_in, b_cols_out, b_size)
111    }
112}
113
114impl<B> VmpApplyDftToDft<B> for Module<B>
115where
116    B: Backend + VmpApplyDftToDftImpl<B>,
117{
118    fn vmp_apply_dft_to_dft<R, A, C>(&self, res: &mut R, a: &A, b: &C, scratch: &mut Scratch<B>)
119    where
120        R: VecZnxDftToMut<B>,
121        A: VecZnxDftToRef<B>,
122        C: VmpPMatToRef<B>,
123    {
124        B::vmp_apply_dft_to_dft_impl(self, res, a, b, scratch);
125    }
126}
127
128impl<B> VmpApplyDftToDftAddTmpBytes for Module<B>
129where
130    B: Backend + VmpApplyDftToDftAddTmpBytesImpl<B>,
131{
132    fn vmp_apply_dft_to_dft_add_tmp_bytes(
133        &self,
134        res_size: usize,
135        a_size: usize,
136        b_rows: usize,
137        b_cols_in: usize,
138        b_cols_out: usize,
139        b_size: usize,
140    ) -> usize {
141        B::vmp_apply_dft_to_dft_add_tmp_bytes_impl(self, res_size, a_size, b_rows, b_cols_in, b_cols_out, b_size)
142    }
143}
144
145impl<B> VmpApplyDftToDftAdd<B> for Module<B>
146where
147    B: Backend + VmpApplyDftToDftAddImpl<B>,
148{
149    fn vmp_apply_dft_to_dft_add<R, A, C>(&self, res: &mut R, a: &A, b: &C, scale: usize, scratch: &mut Scratch<B>)
150    where
151        R: VecZnxDftToMut<B>,
152        A: VecZnxDftToRef<B>,
153        C: VmpPMatToRef<B>,
154    {
155        B::vmp_apply_dft_to_dft_add_impl(self, res, a, b, scale, scratch);
156    }
157}
158
159impl<B> VmpZero<B> for Module<B>
160where
161    B: Backend + VmpZeroImpl<B>,
162{
163    fn vmp_zero<R>(&self, res: &mut R)
164    where
165        R: VmpPMatToMut<B>,
166    {
167        B::vmp_zero_impl(self, res);
168    }
169}