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