poulpy/poulpy-hal/src/oep/vec_znx_big.rs
poulpy-hal/src/oep/vec_znx_big.rsRaw
1use rand_distr::Distribution;
2
3use crate::{
4 layouts::{Backend, Module, Scratch, VecZnxBigOwned, VecZnxBigToMut, VecZnxBigToRef, VecZnxToMut, VecZnxToRef},
5 source::Source,
6};
7
8/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
9/// * See TODO for reference code.
10/// * See TODO for corresponding public API.
11/// # Safety [crate::doc::backend_safety] for safety contract.
12pub unsafe trait VecZnxBigAllocImpl<B: Backend> {
13 fn vec_znx_big_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxBigOwned<B>;
14}
15
16/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
17/// * See TODO for reference code.
18/// * See TODO for corresponding public API.
19/// # Safety [crate::doc::backend_safety] for safety contract.
20pub unsafe trait VecZnxBigFromBytesImpl<B: Backend> {
21 fn vec_znx_big_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxBigOwned<B>;
22}
23
24/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
25/// * See TODO for reference code.
26/// * See TODO for corresponding public API.
27/// # Safety [crate::doc::backend_safety] for safety contract.
28pub unsafe trait VecZnxBigAllocBytesImpl<B: Backend> {
29 fn vec_znx_big_alloc_bytes_impl(n: usize, cols: usize, size: usize) -> usize;
30}
31
32#[allow(clippy::too_many_arguments)]
33/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
34/// * See TODO for reference code.
35/// * See TODO for corresponding public API.
36/// # Safety [crate::doc::backend_safety] for safety contract.
37pub unsafe trait VecZnxBigAddNormalImpl<B: Backend> {
38 fn add_normal_impl<R: VecZnxBigToMut<B>>(
39 module: &Module<B>,
40 basek: usize,
41 res: &mut R,
42 res_col: usize,
43 k: usize,
44 source: &mut Source,
45 sigma: f64,
46 bound: f64,
47 );
48}
49
50#[allow(clippy::too_many_arguments)]
51/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
52/// * See TODO for reference code.
53/// * See TODO for corresponding public API.
54/// # Safety [crate::doc::backend_safety] for safety contract.
55pub unsafe trait VecZnxBigFillNormalImpl<B: Backend> {
56 fn fill_normal_impl<R: VecZnxBigToMut<B>>(
57 module: &Module<B>,
58 basek: usize,
59 res: &mut R,
60 res_col: usize,
61 k: usize,
62 source: &mut Source,
63 sigma: f64,
64 bound: f64,
65 );
66}
67
68#[allow(clippy::too_many_arguments)]
69/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
70/// * See TODO for reference code.
71/// * See TODO for corresponding public API.
72/// # Safety [crate::doc::backend_safety] for safety contract.
73pub unsafe trait VecZnxBigFillDistF64Impl<B: Backend> {
74 fn fill_dist_f64_impl<R: VecZnxBigToMut<B>, D: Distribution<f64>>(
75 module: &Module<B>,
76 basek: usize,
77 res: &mut R,
78 res_col: usize,
79 k: usize,
80 source: &mut Source,
81 dist: D,
82 bound: f64,
83 );
84}
85
86#[allow(clippy::too_many_arguments)]
87/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
88/// * See TODO for reference code.
89/// * See TODO for corresponding public API.
90/// # Safety [crate::doc::backend_safety] for safety contract.
91pub unsafe trait VecZnxBigAddDistF64Impl<B: Backend> {
92 fn add_dist_f64_impl<R: VecZnxBigToMut<B>, D: Distribution<f64>>(
93 module: &Module<B>,
94 basek: usize,
95 res: &mut R,
96 res_col: usize,
97 k: usize,
98 source: &mut Source,
99 dist: D,
100 bound: f64,
101 );
102}
103
104/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
105/// * See TODO for reference code.
106/// * See TODO for corresponding public API.
107/// # Safety [crate::doc::backend_safety] for safety contract.
108pub unsafe trait VecZnxBigAddImpl<B: Backend> {
109 fn vec_znx_big_add_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
110 where
111 R: VecZnxBigToMut<B>,
112 A: VecZnxBigToRef<B>,
113 C: VecZnxBigToRef<B>;
114}
115
116/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
117/// * See TODO for reference code.
118/// * See TODO for corresponding public API.
119/// # Safety [crate::doc::backend_safety] for safety contract.
120pub unsafe trait VecZnxBigAddInplaceImpl<B: Backend> {
121 fn vec_znx_big_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
122 where
123 R: VecZnxBigToMut<B>,
124 A: VecZnxBigToRef<B>;
125}
126
127/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
128/// * See TODO for reference code.
129/// * See TODO for corresponding public API.
130/// # Safety [crate::doc::backend_safety] for safety contract.
131pub unsafe trait VecZnxBigAddSmallImpl<B: Backend> {
132 fn vec_znx_big_add_small_impl<R, A, C>(
133 module: &Module<B>,
134 res: &mut R,
135 res_col: usize,
136 a: &A,
137 a_col: usize,
138 b: &C,
139 b_col: usize,
140 ) where
141 R: VecZnxBigToMut<B>,
142 A: VecZnxBigToRef<B>,
143 C: VecZnxToRef;
144}
145
146/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
147/// * See TODO for reference code.
148/// * See TODO for corresponding public API.
149/// # Safety [crate::doc::backend_safety] for safety contract.
150pub unsafe trait VecZnxBigAddSmallInplaceImpl<B: Backend> {
151 fn vec_znx_big_add_small_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
152 where
153 R: VecZnxBigToMut<B>,
154 A: VecZnxToRef;
155}
156
157/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
158/// * See TODO for reference code.
159/// * See TODO for corresponding public API.
160/// # Safety [crate::doc::backend_safety] for safety contract.
161pub unsafe trait VecZnxBigSubImpl<B: Backend> {
162 fn vec_znx_big_sub_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
163 where
164 R: VecZnxBigToMut<B>,
165 A: VecZnxBigToRef<B>,
166 C: VecZnxBigToRef<B>;
167}
168
169/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
170/// * See TODO for reference code.
171/// * See TODO for corresponding public API.
172/// # Safety [crate::doc::backend_safety] for safety contract.
173pub unsafe trait VecZnxBigSubABInplaceImpl<B: Backend> {
174 fn vec_znx_big_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
175 where
176 R: VecZnxBigToMut<B>,
177 A: VecZnxBigToRef<B>;
178}
179
180/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
181/// * See TODO for reference code.
182/// * See TODO for corresponding public API.
183/// # Safety [crate::doc::backend_safety] for safety contract.
184pub unsafe trait VecZnxBigSubBAInplaceImpl<B: Backend> {
185 fn vec_znx_big_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
186 where
187 R: VecZnxBigToMut<B>,
188 A: VecZnxBigToRef<B>;
189}
190
191/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
192/// * See TODO for reference code.
193/// * See TODO for corresponding public API.
194/// # Safety [crate::doc::backend_safety] for safety contract.
195pub unsafe trait VecZnxBigSubSmallAImpl<B: Backend> {
196 fn vec_znx_big_sub_small_a_impl<R, A, C>(
197 module: &Module<B>,
198 res: &mut R,
199 res_col: usize,
200 a: &A,
201 a_col: usize,
202 b: &C,
203 b_col: usize,
204 ) where
205 R: VecZnxBigToMut<B>,
206 A: VecZnxToRef,
207 C: VecZnxBigToRef<B>;
208}
209
210/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
211/// * See TODO for reference code.
212/// * See TODO for corresponding public API.
213/// # Safety [crate::doc::backend_safety] for safety contract.
214pub unsafe trait VecZnxBigSubSmallAInplaceImpl<B: Backend> {
215 fn vec_znx_big_sub_small_a_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
216 where
217 R: VecZnxBigToMut<B>,
218 A: VecZnxToRef;
219}
220
221/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
222/// * See TODO for reference code.
223/// * See TODO for corresponding public API.
224/// # Safety [crate::doc::backend_safety] for safety contract.
225pub unsafe trait VecZnxBigSubSmallBImpl<B: Backend> {
226 fn vec_znx_big_sub_small_b_impl<R, A, C>(
227 module: &Module<B>,
228 res: &mut R,
229 res_col: usize,
230 a: &A,
231 a_col: usize,
232 b: &C,
233 b_col: usize,
234 ) where
235 R: VecZnxBigToMut<B>,
236 A: VecZnxBigToRef<B>,
237 C: VecZnxToRef;
238}
239
240/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
241/// * See TODO for reference code.
242/// * See TODO for corresponding public API.
243/// # Safety [crate::doc::backend_safety] for safety contract.
244pub unsafe trait VecZnxBigSubSmallBInplaceImpl<B: Backend> {
245 fn vec_znx_big_sub_small_b_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
246 where
247 R: VecZnxBigToMut<B>,
248 A: VecZnxToRef;
249}
250
251/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
252/// * See TODO for reference code.
253/// * See TODO for corresponding public API.
254/// # Safety [crate::doc::backend_safety] for safety contract.
255pub unsafe trait VecZnxBigNegateInplaceImpl<B: Backend> {
256 fn vec_znx_big_negate_inplace_impl<A>(module: &Module<B>, a: &mut A, a_col: usize)
257 where
258 A: VecZnxBigToMut<B>;
259}
260
261/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
262/// * See TODO for reference code.
263/// * See TODO for corresponding public API.
264/// # Safety [crate::doc::backend_safety] for safety contract.
265pub unsafe trait VecZnxBigNormalizeTmpBytesImpl<B: Backend> {
266 fn vec_znx_big_normalize_tmp_bytes_impl(module: &Module<B>) -> usize;
267}
268
269/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
270/// * See TODO for reference code.
271/// * See TODO for corresponding public API.
272/// # Safety [crate::doc::backend_safety] for safety contract.
273pub unsafe trait VecZnxBigNormalizeImpl<B: Backend> {
274 fn vec_znx_big_normalize_impl<R, A>(
275 module: &Module<B>,
276 basek: usize,
277 res: &mut R,
278 res_col: usize,
279 a: &A,
280 a_col: usize,
281 scratch: &mut Scratch<B>,
282 ) where
283 R: VecZnxToMut,
284 A: VecZnxBigToRef<B>;
285}
286
287/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
288/// * See TODO for reference code.
289/// * See TODO for corresponding public API.
290/// # Safety [crate::doc::backend_safety] for safety contract.
291pub unsafe trait VecZnxBigAutomorphismImpl<B: Backend> {
292 fn vec_znx_big_automorphism_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
293 where
294 R: VecZnxBigToMut<B>,
295 A: VecZnxBigToRef<B>;
296}
297
298/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
299/// * See TODO for reference code.
300/// * See TODO for corresponding public API.
301/// # Safety [crate::doc::backend_safety] for safety contract.
302pub unsafe trait VecZnxBigAutomorphismInplaceImpl<B: Backend> {
303 fn vec_znx_big_automorphism_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
304 where
305 A: VecZnxBigToMut<B>;
306}