Skip to main content

poulpy_hal/delegates/
vec_znx_dft.rs

1use crate::{
2    api::{
3        VecZnxDftAddAssign, VecZnxDftAddInto, VecZnxDftAddScaledAssign, VecZnxDftAlloc, VecZnxDftApply, VecZnxDftBytesOf,
4        VecZnxDftCopy, VecZnxDftFromBytes, VecZnxDftSub, VecZnxDftSubAssign, VecZnxDftSubNegateAssign, VecZnxDftZero,
5        VecZnxIdftApply, VecZnxIdftApplyTmpA, VecZnxIdftApplyTmpBytes,
6    },
7    layouts::{
8        Backend, Module, ScratchArena, VecZnxBackendRef, VecZnxBigBackendMut, VecZnxDft, VecZnxDftBackendMut,
9        VecZnxDftBackendRef, VecZnxDftOwned,
10    },
11    oep::HalVecZnxDftImpl,
12};
13
14macro_rules! impl_vec_znx_dft_delegate {
15    ($trait:ty, $($body:item)+) => {
16        impl<B> $trait for Module<B>
17        where
18            B: Backend + HalVecZnxDftImpl<B>,
19        {
20            $($body)+
21        }
22    };
23}
24
25impl<B: Backend> VecZnxDftFromBytes<B> for Module<B> {
26    fn vec_znx_dft_from_bytes(&self, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B> {
27        VecZnxDft::<B::OwnedBuf, B>::from_bytes(self.n(), cols, size, bytes)
28    }
29}
30
31impl<B: Backend> VecZnxDftBytesOf for Module<B> {
32    fn bytes_of_vec_znx_dft(&self, cols: usize, size: usize) -> usize {
33        B::bytes_of_vec_znx_dft(self.n(), cols, size)
34    }
35}
36
37impl<B: Backend> VecZnxDftAlloc<B> for Module<B> {
38    fn vec_znx_dft_alloc(&self, cols: usize, size: usize) -> VecZnxDftOwned<B> {
39        VecZnxDftOwned::alloc(self.n(), cols, size)
40    }
41}
42
43impl_vec_znx_dft_delegate!(
44    VecZnxIdftApplyTmpBytes,
45    fn vec_znx_idft_apply_tmp_bytes(&self) -> usize {
46        B::vec_znx_idft_apply_tmp_bytes(self)
47    }
48);
49
50impl_vec_znx_dft_delegate!(
51    VecZnxIdftApply<B>,
52    fn vec_znx_idft_apply(
53        &self,
54        res: &mut VecZnxBigBackendMut<'_, B>,
55        res_col: usize,
56        a: &VecZnxDftBackendRef<'_, B>,
57        a_col: usize,
58        scratch: &mut ScratchArena<'_, B>,
59    ) {
60        B::vec_znx_idft_apply(self, res, res_col, a, a_col, scratch)
61    }
62);
63
64impl_vec_znx_dft_delegate!(
65    VecZnxIdftApplyTmpA<B>,
66    fn vec_znx_idft_apply_tmpa(
67        &self,
68        res: &mut VecZnxBigBackendMut<'_, B>,
69        res_col: usize,
70        a: &mut VecZnxDftBackendMut<'_, B>,
71        a_col: usize,
72    ) {
73        B::vec_znx_idft_apply_tmpa(self, res, res_col, a, a_col);
74    }
75);
76
77impl_vec_znx_dft_delegate!(
78    VecZnxDftApply<B>,
79    fn vec_znx_dft_apply(
80        &self,
81        step: usize,
82        offset: usize,
83        res: &mut VecZnxDftBackendMut<'_, B>,
84        res_col: usize,
85        a: &VecZnxBackendRef<'_, B>,
86        a_col: usize,
87    ) {
88        B::vec_znx_dft_apply(self, step, offset, res, res_col, a, a_col);
89    }
90);
91
92impl_vec_znx_dft_delegate!(
93    VecZnxDftAddInto<B>,
94    fn vec_znx_dft_add_into(
95        &self,
96        res: &mut VecZnxDftBackendMut<'_, B>,
97        res_col: usize,
98        a: &VecZnxDftBackendRef<'_, B>,
99        a_col: usize,
100        b: &VecZnxDftBackendRef<'_, B>,
101        b_col: usize,
102    ) {
103        B::vec_znx_dft_add_into(self, res, res_col, a, a_col, b, b_col);
104    }
105);
106
107impl_vec_znx_dft_delegate!(
108    VecZnxDftAddAssign<B>,
109    fn vec_znx_dft_add_assign(
110        &self,
111        res: &mut VecZnxDftBackendMut<'_, B>,
112        res_col: usize,
113        a: &VecZnxDftBackendRef<'_, B>,
114        a_col: usize,
115    ) {
116        B::vec_znx_dft_add_assign(self, res, res_col, a, a_col);
117    }
118);
119
120impl_vec_znx_dft_delegate!(
121    VecZnxDftAddScaledAssign<B>,
122    fn vec_znx_dft_add_scaled_assign(
123        &self,
124        res: &mut VecZnxDftBackendMut<'_, B>,
125        res_col: usize,
126        a: &VecZnxDftBackendRef<'_, B>,
127        a_col: usize,
128        a_scale: i64,
129    ) {
130        B::vec_znx_dft_add_scaled_assign(self, res, res_col, a, a_col, a_scale);
131    }
132);
133
134impl_vec_znx_dft_delegate!(
135    VecZnxDftSub<B>,
136    fn vec_znx_dft_sub(
137        &self,
138        res: &mut VecZnxDftBackendMut<'_, B>,
139        res_col: usize,
140        a: &VecZnxDftBackendRef<'_, B>,
141        a_col: usize,
142        b: &VecZnxDftBackendRef<'_, B>,
143        b_col: usize,
144    ) {
145        B::vec_znx_dft_sub(self, res, res_col, a, a_col, b, b_col);
146    }
147);
148
149impl_vec_znx_dft_delegate!(
150    VecZnxDftSubAssign<B>,
151    fn vec_znx_dft_sub_assign(
152        &self,
153        res: &mut VecZnxDftBackendMut<'_, B>,
154        res_col: usize,
155        a: &VecZnxDftBackendRef<'_, B>,
156        a_col: usize,
157    ) {
158        B::vec_znx_dft_sub_assign(self, res, res_col, a, a_col);
159    }
160);
161
162impl_vec_znx_dft_delegate!(
163    VecZnxDftSubNegateAssign<B>,
164    fn vec_znx_dft_sub_negate_assign(
165        &self,
166        res: &mut VecZnxDftBackendMut<'_, B>,
167        res_col: usize,
168        a: &VecZnxDftBackendRef<'_, B>,
169        a_col: usize,
170    ) {
171        B::vec_znx_dft_sub_negate_assign(self, res, res_col, a, a_col);
172    }
173);
174
175impl_vec_znx_dft_delegate!(
176    VecZnxDftCopy<B>,
177    fn vec_znx_dft_copy(
178        &self,
179        step: usize,
180        offset: usize,
181        res: &mut VecZnxDftBackendMut<'_, B>,
182        res_col: usize,
183        a: &VecZnxDftBackendRef<'_, B>,
184        a_col: usize,
185    ) {
186        B::vec_znx_dft_copy(self, step, offset, res, res_col, a, a_col);
187    }
188);
189
190impl_vec_znx_dft_delegate!(
191    VecZnxDftZero<B>,
192    fn vec_znx_dft_zero(&self, res: &mut VecZnxDftBackendMut<'_, B>, res_col: usize) {
193        B::vec_znx_dft_zero(self, res, res_col);
194    }
195);