poulpy/poulpy-hal/src/oep/vec_znx.rs
poulpy-hal/src/oep/vec_znx.rsRaw
1use crate::{
2 layouts::{Backend, Module, ScalarZnxToRef, Scratch, VecZnxToMut, VecZnxToRef},
3 source::Source,
4};
5
6/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
7/// * See [vec_znx_normalize_base2k_tmp_bytes_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L245C17-L245C55) for reference code.
8/// * See [crate::api::VecZnxNormalizeTmpBytes] for corresponding public API.
9/// # Safety [crate::doc::backend_safety] for safety contract.
10pub unsafe trait VecZnxNormalizeTmpBytesImpl<B: Backend> {
11 fn vec_znx_normalize_tmp_bytes_impl(module: &Module<B>) -> usize;
12}
13
14/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
15/// * See [vec_znx_normalize_base2k_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L212) for reference code.
16/// * See [crate::api::VecZnxNormalize] for corresponding public API.
17/// # Safety [crate::doc::backend_safety] for safety contract.
18pub unsafe trait VecZnxNormalizeImpl<B: Backend> {
19 fn vec_znx_normalize_impl<R, A>(
20 module: &Module<B>,
21 basek: usize,
22 res: &mut R,
23 res_col: usize,
24 a: &A,
25 a_col: usize,
26 scratch: &mut Scratch<B>,
27 ) where
28 R: VecZnxToMut,
29 A: VecZnxToRef;
30}
31
32/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
33/// * See [vec_znx_normalize_base2k_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L212) for reference code.
34/// * See [crate::api::VecZnxNormalizeInplace] for corresponding public API.
35/// # Safety [crate::doc::backend_safety] for safety contract.
36pub unsafe trait VecZnxNormalizeInplaceImpl<B: Backend> {
37 fn vec_znx_normalize_inplace_impl<A>(module: &Module<B>, basek: usize, a: &mut A, a_col: usize, scratch: &mut Scratch<B>)
38 where
39 A: VecZnxToMut;
40}
41
42/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
43/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
44/// * See [crate::api::VecZnxAdd] for corresponding public API.
45/// # Safety [crate::doc::backend_safety] for safety contract.
46pub unsafe trait VecZnxAddImpl<B: Backend> {
47 fn vec_znx_add_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
48 where
49 R: VecZnxToMut,
50 A: VecZnxToRef,
51 C: VecZnxToRef;
52}
53
54/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
55/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
56/// * See [crate::api::VecZnxAddInplace] for corresponding public API.
57/// # Safety [crate::doc::backend_safety] for safety contract.
58pub unsafe trait VecZnxAddInplaceImpl<B: Backend> {
59 fn vec_znx_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
60 where
61 R: VecZnxToMut,
62 A: VecZnxToRef;
63}
64
65/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
66/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
67/// * See [crate::api::VecZnxAddScalar] for corresponding public API.
68/// # Safety [crate::doc::backend_safety] for safety contract.
69pub unsafe trait VecZnxAddScalarImpl<D: Backend> {
70 /// Adds the selected column of `a` on the selected column and limb of `b` and writes the result on the selected column of `res`.
71 #[allow(clippy::too_many_arguments)]
72 fn vec_znx_add_scalar_impl<R, A, B>(
73 module: &Module<D>,
74 res: &mut R,
75 res_col: usize,
76 a: &A,
77 a_col: usize,
78 b: &B,
79 b_col: usize,
80 b_limb: usize,
81 ) where
82 R: VecZnxToMut,
83 A: ScalarZnxToRef,
84 B: VecZnxToRef;
85}
86
87/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
88/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
89/// * See [crate::api::VecZnxAddScalarInplace] for corresponding public API.
90/// # Safety [crate::doc::backend_safety] for safety contract.
91pub unsafe trait VecZnxAddScalarInplaceImpl<B: Backend> {
92 fn vec_znx_add_scalar_inplace_impl<R, A>(
93 module: &Module<B>,
94 res: &mut R,
95 res_col: usize,
96 res_limb: usize,
97 a: &A,
98 a_col: usize,
99 ) where
100 R: VecZnxToMut,
101 A: ScalarZnxToRef;
102}
103
104/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
105/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
106/// * See [crate::api::VecZnxSub] for corresponding public API.
107/// # Safety [crate::doc::backend_safety] for safety contract.
108pub unsafe trait VecZnxSubImpl<B: Backend> {
109 fn vec_znx_sub_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: VecZnxToMut,
112 A: VecZnxToRef,
113 C: VecZnxToRef;
114}
115
116/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
117/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
118/// * See [crate::api::VecZnxSubABInplace] for corresponding public API.
119/// # Safety [crate::doc::backend_safety] for safety contract.
120pub unsafe trait VecZnxSubABInplaceImpl<B: Backend> {
121 fn vec_znx_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
122 where
123 R: VecZnxToMut,
124 A: VecZnxToRef;
125}
126
127/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
128/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
129/// * See [crate::api::VecZnxSubBAInplace] for corresponding public API.
130/// # Safety [crate::doc::backend_safety] for safety contract.
131pub unsafe trait VecZnxSubBAInplaceImpl<B: Backend> {
132 fn vec_znx_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
133 where
134 R: VecZnxToMut,
135 A: VecZnxToRef;
136}
137
138/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
139/// * See TODO.
140/// * See [crate::api::VecZnxAddScalar] for corresponding public API.
141/// # Safety [crate::doc::backend_safety] for safety contract.
142pub unsafe trait VecZnxSubScalarImpl<D: Backend> {
143 /// Adds the selected column of `a` on the selected column and limb of `b` and writes the result on the selected column of `res`.
144 #[allow(clippy::too_many_arguments)]
145 fn vec_znx_sub_scalar_impl<R, A, B>(
146 module: &Module<D>,
147 res: &mut R,
148 res_col: usize,
149 a: &A,
150 a_col: usize,
151 b: &B,
152 b_col: usize,
153 b_limb: usize,
154 ) where
155 R: VecZnxToMut,
156 A: ScalarZnxToRef,
157 B: VecZnxToRef;
158}
159
160/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
161/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
162/// * See [crate::api::VecZnxSubScalarInplace] for corresponding public API.
163/// # Safety [crate::doc::backend_safety] for safety contract.
164pub unsafe trait VecZnxSubScalarInplaceImpl<B: Backend> {
165 fn vec_znx_sub_scalar_inplace_impl<R, A>(
166 module: &Module<B>,
167 res: &mut R,
168 res_col: usize,
169 res_limb: usize,
170 a: &A,
171 a_col: usize,
172 ) where
173 R: VecZnxToMut,
174 A: ScalarZnxToRef;
175}
176
177/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
178/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
179/// * See [crate::api::VecZnxNegate] for corresponding public API.
180/// # Safety [crate::doc::backend_safety] for safety contract.
181pub unsafe trait VecZnxNegateImpl<B: Backend> {
182 fn vec_znx_negate_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
183 where
184 R: VecZnxToMut,
185 A: VecZnxToRef;
186}
187
188/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
189/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
190/// * See [crate::api::VecZnxNegateInplace] for corresponding public API.
191/// # Safety [crate::doc::backend_safety] for safety contract.
192pub unsafe trait VecZnxNegateInplaceImpl<B: Backend> {
193 fn vec_znx_negate_inplace_impl<A>(module: &Module<B>, a: &mut A, a_col: usize)
194 where
195 A: VecZnxToMut;
196}
197
198/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
199/// * See [crate::reference::vec_znx::shift::vec_znx_rsh_tmp_bytes] for reference code.
200/// * See [crate::api::VecZnxRshTmpBytes] for corresponding public API.
201/// # Safety [crate::doc::backend_safety] for safety contract.
202pub unsafe trait VecZnxRshTmpBytesImpl<B: Backend> {
203 fn vec_znx_rsh_tmp_bytes_impl(module: &Module<B>) -> usize;
204}
205
206/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
207/// * See [crate::reference::vec_znx::shift::vec_znx_rsh_inplace] for reference code.
208/// * See [crate::api::VecZnxRsh] for corresponding public API.
209/// # Safety [crate::doc::backend_safety] for safety contract.
210pub unsafe trait VecZnxRshImpl<B: Backend> {
211 #[allow(clippy::too_many_arguments)]
212 fn vec_znx_rsh_inplace_impl<R, A>(
213 module: &Module<B>,
214 basek: usize,
215 k: usize,
216 res: &mut R,
217 res_col: usize,
218 a: &A,
219 a_col: usize,
220 scratch: &mut Scratch<B>,
221 ) where
222 R: VecZnxToMut,
223 A: VecZnxToRef;
224}
225
226/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
227/// * See [crate::reference::vec_znx::shift::vec_znx_lsh_tmp_bytes] for reference code.
228/// * See [crate::api::VecZnxLshTmpBytes] for corresponding public API.
229/// # Safety [crate::doc::backend_safety] for safety contract.
230pub unsafe trait VecZnxLshTmpBytesImpl<B: Backend> {
231 fn vec_znx_lsh_tmp_bytes_impl(module: &Module<B>) -> usize;
232}
233
234/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
235/// * See [crate::reference::vec_znx::shift::vec_znx_lsh_inplace] for reference code.
236/// * See [crate::api::VecZnxLsh] for corresponding public API.
237/// # Safety [crate::doc::backend_safety] for safety contract.
238pub unsafe trait VecZnxLshImpl<B: Backend> {
239 #[allow(clippy::too_many_arguments)]
240 fn vec_znx_lsh_inplace_impl<R, A>(
241 module: &Module<B>,
242 basek: usize,
243 k: usize,
244 res: &mut R,
245 res_col: usize,
246 a: &A,
247 a_col: usize,
248 scratch: &mut Scratch<B>,
249 ) where
250 R: VecZnxToMut,
251 A: VecZnxToRef;
252}
253
254/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
255/// * See [crate::cpu_spqlios::vec_znx::vec_znx_rsh_inplace_ref] for reference code.
256/// * See [crate::api::VecZnxRshInplace] for corresponding public API.
257/// # Safety [crate::doc::backend_safety] for safety contract.
258pub unsafe trait VecZnxRshInplaceImpl<B: Backend> {
259 fn vec_znx_rsh_inplace_impl<R>(
260 module: &Module<B>,
261 basek: usize,
262 k: usize,
263 res: &mut R,
264 res_col: usize,
265 scratch: &mut Scratch<B>,
266 ) where
267 R: VecZnxToMut;
268}
269
270/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
271/// * See [crate::cpu_spqlios::vec_znx::vec_znx_lsh_inplace_ref] for reference code.
272/// * See [crate::api::VecZnxLshInplace] for corresponding public API.
273/// # Safety [crate::doc::backend_safety] for safety contract.
274pub unsafe trait VecZnxLshInplaceImpl<B: Backend> {
275 fn vec_znx_lsh_inplace_impl<R>(
276 module: &Module<B>,
277 basek: usize,
278 k: usize,
279 res: &mut R,
280 res_col: usize,
281 scratch: &mut Scratch<B>,
282 ) where
283 R: VecZnxToMut;
284}
285
286/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
287/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
288/// * See [crate::api::VecZnxRotate] for corresponding public API.
289/// # Safety [crate::doc::backend_safety] for safety contract.
290pub unsafe trait VecZnxRotateImpl<B: Backend> {
291 fn vec_znx_rotate_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
292 where
293 R: VecZnxToMut,
294 A: VecZnxToRef;
295}
296
297/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
298/// * See TODO;
299/// * See [crate::api::VecZnxRotateInplaceTmpBytes] for corresponding public API.
300/// # Safety [crate::doc::backend_safety] for safety contract.
301pub unsafe trait VecZnxRotateInplaceTmpBytesImpl<B: Backend> {
302 fn vec_znx_rotate_inplace_tmp_bytes_impl(module: &Module<B>) -> usize;
303}
304
305/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
306/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
307/// * See [crate::api::VecZnxRotateInplace] for corresponding public API.
308/// # Safety [crate::doc::backend_safety] for safety contract.
309pub unsafe trait VecZnxRotateInplaceImpl<B: Backend> {
310 fn vec_znx_rotate_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize, scratch: &mut Scratch<B>)
311 where
312 A: VecZnxToMut;
313}
314
315/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
316/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
317/// * See [crate::api::VecZnxAutomorphism] for corresponding public API.
318/// # Safety [crate::doc::backend_safety] for safety contract.
319pub unsafe trait VecZnxAutomorphismImpl<B: Backend> {
320 fn vec_znx_automorphism_impl<R, A>(module: &Module<B>, p: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
321 where
322 R: VecZnxToMut,
323 A: VecZnxToRef;
324}
325
326/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
327/// * See TODO;
328/// * See [crate::api::VecZnxAutomorphismInplaceTmpBytes] for corresponding public API.
329/// # Safety [crate::doc::backend_safety] for safety contract.
330pub unsafe trait VecZnxAutomorphismInplaceTmpBytesImpl<B: Backend> {
331 fn vec_znx_automorphism_inplace_tmp_bytes_impl(module: &Module<B>) -> usize;
332}
333
334/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
335/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
336/// * See [crate::api::VecZnxAutomorphismInplace] for corresponding public API.
337/// # Safety [crate::doc::backend_safety] for safety contract.
338pub unsafe trait VecZnxAutomorphismInplaceImpl<B: Backend> {
339 fn vec_znx_automorphism_inplace_impl<R>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, scratch: &mut Scratch<B>)
340 where
341 R: VecZnxToMut;
342}
343
344/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
345/// * See [vec_znx_mul_xp_minus_one_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/7160f588da49712a042931ea247b4259b95cefcc/spqlios/arithmetic/vec_znx.c#L200C13-L200C41) for reference code.
346/// * See [crate::api::VecZnxMulXpMinusOne] for corresponding public API.
347/// # Safety [crate::doc::backend_safety] for safety contract.
348pub unsafe trait VecZnxMulXpMinusOneImpl<B: Backend> {
349 fn vec_znx_mul_xp_minus_one_impl<R, A>(module: &Module<B>, p: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
350 where
351 R: VecZnxToMut,
352 A: VecZnxToRef;
353}
354
355/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
356/// * See TODO;
357/// * See [crate::api::VecZnxMulXpMinusOneInplaceTmpBytes] for corresponding public API.
358/// # Safety [crate::doc::backend_safety] for safety contract.
359pub unsafe trait VecZnxMulXpMinusOneInplaceTmpBytesImpl<B: Backend> {
360 fn vec_znx_mul_xp_minus_one_inplace_tmp_bytes_impl(module: &Module<B>) -> usize;
361}
362
363/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
364/// * See [vec_znx_mul_xp_minus_one_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/7160f588da49712a042931ea247b4259b95cefcc/spqlios/arithmetic/vec_znx.c#L200C13-L200C41) for reference code.
365/// * See [crate::api::VecZnxMulXpMinusOneInplace] for corresponding public API.
366/// # Safety [crate::doc::backend_safety] for safety contract.
367pub unsafe trait VecZnxMulXpMinusOneInplaceImpl<B: Backend> {
368 fn vec_znx_mul_xp_minus_one_inplace_impl<R>(
369 module: &Module<B>,
370 p: i64,
371 res: &mut R,
372 res_col: usize,
373 scratch: &mut Scratch<B>,
374 ) where
375 R: VecZnxToMut;
376}
377
378/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
379/// * See TODO;
380/// * See [crate::api::VecZnxSplitRingTmpBytes] for corresponding public API.
381/// # Safety [crate::doc::backend_safety] for safety contract.
382pub unsafe trait VecZnxSplitRingTmpBytesImpl<B: Backend> {
383 fn vec_znx_split_ring_tmp_bytes_impl(module: &Module<B>) -> usize;
384}
385
386/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
387/// * See [crate::cpu_spqlios::vec_znx::vec_znx_split_ref] for reference code.
388/// * See [crate::api::VecZnxSplitRing] for corresponding public API.
389/// # Safety [crate::doc::backend_safety] for safety contract.
390pub unsafe trait VecZnxSplitRingImpl<B: Backend> {
391 fn vec_znx_split_ring_impl<R, A>(
392 module: &Module<B>,
393 res: &mut [R],
394 res_col: usize,
395 a: &A,
396 a_col: usize,
397 scratch: &mut Scratch<B>,
398 ) where
399 R: VecZnxToMut,
400 A: VecZnxToRef;
401}
402
403/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
404/// * See TODO;
405/// * See [crate::api::VecZnxMergeRingsTmpBytes] for corresponding public API.
406/// # Safety [crate::doc::backend_safety] for safety contract.
407pub unsafe trait VecZnxMergeRingsTmpBytesImpl<B: Backend> {
408 fn vec_znx_merge_rings_tmp_bytes_impl(module: &Module<B>) -> usize;
409}
410
411/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
412/// * See [crate::cpu_spqlios::vec_znx::vec_znx_merge_ref] for reference code.
413/// * See [crate::api::VecZnxMerge] for corresponding public API.
414/// # Safety [crate::doc::backend_safety] for safety contract.
415pub unsafe trait VecZnxMergeRingsImpl<B: Backend> {
416 fn vec_znx_merge_rings_impl<R, A>(
417 module: &Module<B>,
418 res: &mut R,
419 res_col: usize,
420 a: &[A],
421 a_col: usize,
422 scratch: &mut Scratch<B>,
423 ) where
424 R: VecZnxToMut,
425 A: VecZnxToRef;
426}
427
428/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
429/// * See [crate::cpu_spqlios::vec_znx::vec_znx_switch_degree_ref] for reference code.
430/// * See [crate::api::VecZnxSwithcDegree] for corresponding public API.
431/// # Safety [crate::doc::backend_safety] for safety contract.
432pub unsafe trait VecZnxSwitchRingImpl<B: Backend> {
433 fn vec_znx_switch_ring_impl<R: VecZnxToMut, A: VecZnxToRef>(
434 module: &Module<B>,
435 res: &mut R,
436 res_col: usize,
437 a: &A,
438 a_col: usize,
439 );
440}
441
442/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
443/// * See [crate::cpu_spqlios::vec_znx::vec_znx_copy_ref] for reference code.
444/// * See [crate::api::VecZnxCopy] for corresponding public API.
445/// # Safety [crate::doc::backend_safety] for safety contract.
446pub unsafe trait VecZnxCopyImpl<B: Backend> {
447 fn vec_znx_copy_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
448 where
449 R: VecZnxToMut,
450 A: VecZnxToRef;
451}
452
453/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
454/// * See [crate::api::VecZnxFillUniform] for corresponding public API.
455/// # Safety [crate::doc::backend_safety] for safety contract.
456pub unsafe trait VecZnxFillUniformImpl<B: Backend> {
457 fn vec_znx_fill_uniform_impl<R>(module: &Module<B>, basek: usize, res: &mut R, res_col: usize, source: &mut Source)
458 where
459 R: VecZnxToMut;
460}
461
462#[allow(clippy::too_many_arguments)]
463/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
464/// * See [crate::api::VecZnxFillNormal] for corresponding public API.
465/// # Safety [crate::doc::backend_safety] for safety contract.
466pub unsafe trait VecZnxFillNormalImpl<B: Backend> {
467 fn vec_znx_fill_normal_impl<R>(
468 module: &Module<B>,
469 basek: usize,
470 res: &mut R,
471 res_col: usize,
472 k: usize,
473 source: &mut Source,
474 sigma: f64,
475 bound: f64,
476 ) where
477 R: VecZnxToMut;
478}
479
480#[allow(clippy::too_many_arguments)]
481/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
482/// * See [crate::api::VecZnxAddNormal] for corresponding public API.
483/// # Safety [crate::doc::backend_safety] for safety contract.
484pub unsafe trait VecZnxAddNormalImpl<B: Backend> {
485 fn vec_znx_add_normal_impl<R>(
486 module: &Module<B>,
487 basek: usize,
488 res: &mut R,
489 res_col: usize,
490 k: usize,
491 source: &mut Source,
492 sigma: f64,
493 bound: f64,
494 ) where
495 R: VecZnxToMut;
496}