1use crate::{
2 api::{
3 ScalarZnxAutomorphismAssignBackend, ScalarZnxAutomorphismAssignTmpBytes, ScalarZnxAutomorphismBackend,
4 ScalarZnxFillBinaryBlockBackend, ScalarZnxFillBinaryBlockSourceBackend, ScalarZnxFillBinaryHwBackend,
5 ScalarZnxFillBinaryHwSourceBackend, ScalarZnxFillBinaryProbBackend, ScalarZnxFillBinaryProbSourceBackend,
6 ScalarZnxFillTernaryHwBackend, ScalarZnxFillTernaryHwSourceBackend, ScalarZnxFillTernaryProbBackend,
7 ScalarZnxFillTernaryProbSourceBackend, VecZnxAddAssignBackend, VecZnxAddConstAssignBackend, VecZnxAddConstIntoBackend,
8 VecZnxAddIntoBackend, VecZnxAddNormalBackend, VecZnxAddNormalSourceBackend, VecZnxAddScalarAssignBackend,
9 VecZnxAddScalarIntoBackend, VecZnxAutomorphismAssignBackend, VecZnxAutomorphismAssignTmpBytes, VecZnxAutomorphismBackend,
10 VecZnxAutomorphismRotateBackend, VecZnxCopyBackend, VecZnxCopyRangeBackend, VecZnxExtractCoeffBackend,
11 VecZnxFillNormalBackend, VecZnxFillNormalSourceBackend, VecZnxFillUniformBackend, VecZnxFillUniformSourceBackend,
12 VecZnxHadamardProductScalarZnxBackend, VecZnxLshAddCoeffIntoBackend, VecZnxLshAddCoeffToCoeffBackend,
13 VecZnxLshAddIntoBackend, VecZnxLshAssignBackend, VecZnxLshBackend, VecZnxLshCoeffBackend, VecZnxLshSubBackend,
14 VecZnxLshSubCoeffToCoeffBackend, VecZnxLshTmpBytes, VecZnxMergeRingsBackend, VecZnxMergeRingsTmpBytes,
15 VecZnxMulXpMinusOneAssignBackend, VecZnxMulXpMinusOneAssignTmpBytes, VecZnxMulXpMinusOneBackend,
16 VecZnxNegateAssignBackend, VecZnxNegateBackend, VecZnxNormalize, VecZnxNormalizeAssignBackend,
17 VecZnxNormalizeCoeffAssignBackend, VecZnxNormalizeCoeffBackend, VecZnxNormalizeTmpBytes, VecZnxRotateAssignBackend,
18 VecZnxRotateAssignTmpBytes, VecZnxRotateBackend, VecZnxRshAddCoeffIntoBackend, VecZnxRshAddIntoBackend,
19 VecZnxRshAssignBackend, VecZnxRshBackend, VecZnxRshCoeffBackend, VecZnxRshSubBackend, VecZnxRshSubCoeffIntoBackend,
20 VecZnxRshTmpBytes, VecZnxSplitRingBackend, VecZnxSplitRingTmpBytes, VecZnxSubAssignBackend, VecZnxSubBackend,
21 VecZnxSubNegateAssignBackend, VecZnxSubScalarAssignBackend, VecZnxSubScalarBackend, VecZnxSwitchRingBackend,
22 VecZnxTransposeBackend, VecZnxZeroBackend,
23 },
24 layouts::{
25 Backend, Module, NoiseInfos, ScalarZnxBackendMut, ScalarZnxBackendRef, ScratchArena, VecZnxBackendMut, VecZnxBackendRef,
26 VecZnxBigBackendMut, scalar_znx_as_vec_znx_backend_mut_from_mut, scalar_znx_as_vec_znx_backend_ref_from_ref,
27 },
28 oep::HalVecZnxImpl,
29 source::Source,
30};
31
32macro_rules! impl_vec_znx_delegate {
33 ($trait:ty, $($body:item)+) => {
34 impl<B> $trait for Module<B>
35 where
36 B: Backend<ZnxWord = i64> + HalVecZnxImpl<B>,
41 {
42 $($body)+
43 }
44 };
45}
46
47impl_vec_znx_delegate!(
48 VecZnxZeroBackend<B>,
49 fn vec_znx_zero_backend(&self, res: &mut VecZnxBackendMut<'_, B>, res_col: usize) {
50 B::vec_znx_zero_backend(self, res, res_col);
51 }
52);
53
54impl_vec_znx_delegate!(
55 VecZnxNormalizeTmpBytes,
56 fn vec_znx_normalize_tmp_bytes(&self) -> usize {
57 B::vec_znx_normalize_tmp_bytes_backend(self)
58 }
59);
60
61impl_vec_znx_delegate!(
62 VecZnxNormalize<B>,
63 #[allow(clippy::too_many_arguments)]
64 fn vec_znx_normalize(
65 &self,
66 res: &mut VecZnxBackendMut<'_, B>,
67 res_base2k: usize,
68 res_offset: i64,
69 res_col: usize,
70 a: &VecZnxBackendRef<'_, B>,
71 a_base2k: usize,
72 a_col: usize,
73 scratch: &mut ScratchArena<'_, B>,
74 ) {
75 B::vec_znx_normalize_backend(self, res, res_base2k, res_offset, res_col, a, a_base2k, a_col, scratch)
76 }
77);
78
79impl_vec_znx_delegate!(
80 VecZnxNormalizeAssignBackend<B>,
81 fn vec_znx_normalize_assign_backend(
82 &self,
83 base2k: usize,
84 a: &mut VecZnxBackendMut<'_, B>,
85 a_col: usize,
86 scratch: &mut ScratchArena<'_, B>,
87 ) {
88 B::vec_znx_normalize_assign_backend(self, base2k, a, a_col, scratch)
89 }
90);
91
92impl_vec_znx_delegate!(
93 VecZnxNormalizeCoeffAssignBackend<B>,
94 fn vec_znx_normalize_coeff_assign_backend(
95 &self,
96 base2k: usize,
97 a: &mut VecZnxBackendMut<'_, B>,
98 a_col: usize,
99 a_coeff: usize,
100 scratch: &mut ScratchArena<'_, B>,
101 ) {
102 B::vec_znx_normalize_coeff_assign_backend(self, base2k, a, a_col, a_coeff, scratch)
103 }
104);
105
106impl_vec_znx_delegate!(
107 VecZnxNormalizeCoeffBackend<B>,
108 #[allow(clippy::too_many_arguments)]
109 fn vec_znx_normalize_coeff_backend(
110 &self,
111 res: &mut VecZnxBackendMut<'_, B>,
112 res_base2k: usize,
113 res_offset: i64,
114 res_col: usize,
115 a: &VecZnxBackendRef<'_, B>,
116 a_base2k: usize,
117 a_col: usize,
118 a_coeff: usize,
119 scratch: &mut ScratchArena<'_, B>,
120 ) {
121 B::vec_znx_normalize_coeff_backend(
122 self, res, res_base2k, res_offset, res_col, a, a_base2k, a_col, a_coeff, scratch,
123 )
124 }
125);
126
127impl_vec_znx_delegate!(
128 VecZnxAddIntoBackend<B>,
129 fn vec_znx_add_into_backend(
130 &self,
131 res: &mut VecZnxBackendMut<'_, B>,
132 res_col: usize,
133 a: &VecZnxBackendRef<'_, B>,
134 a_col: usize,
135 b: &VecZnxBackendRef<'_, B>,
136 b_col: usize,
137 ) {
138 B::vec_znx_add_into_backend(self, res, res_col, a, a_col, b, b_col)
139 }
140);
141
142impl_vec_znx_delegate!(
143 VecZnxAddAssignBackend<B>,
144 fn vec_znx_add_assign_backend(
145 &self,
146 res: &mut VecZnxBackendMut<'_, B>,
147 res_col: usize,
148 a: &VecZnxBackendRef<'_, B>,
149 a_col: usize,
150 ) {
151 B::vec_znx_add_assign_backend(self, res, res_col, a, a_col)
152 }
153);
154
155impl_vec_znx_delegate!(
156 VecZnxCopyRangeBackend<B>,
157 fn vec_znx_copy_range_backend(
158 &self,
159 res: &mut VecZnxBackendMut<'_, B>,
160 res_col: usize,
161 res_limb: usize,
162 res_offset: usize,
163 a: &VecZnxBackendRef<'_, B>,
164 a_col: usize,
165 a_limb: usize,
166 a_offset: usize,
167 len: usize,
168 ) {
169 B::vec_znx_copy_range_backend(self, res, res_col, res_limb, res_offset, a, a_col, a_limb, a_offset, len)
170 }
171);
172
173impl_vec_znx_delegate!(
174 VecZnxExtractCoeffBackend<B>,
175 fn vec_znx_extract_coeff_backend(
176 &self,
177 res: &mut VecZnxBackendMut<'_, B>,
178 res_col: usize,
179 a: &VecZnxBackendRef<'_, B>,
180 a_col: usize,
181 a_coeff: usize,
182 ) {
183 B::vec_znx_extract_coeff_backend(self, res, res_col, a, a_col, a_coeff)
184 }
185);
186
187impl_vec_znx_delegate!(
188 VecZnxAddConstIntoBackend<B>,
189 fn vec_znx_add_const_into_backend(
190 &self,
191 res: &mut VecZnxBackendMut<'_, B>,
192 res_col: usize,
193 a: &VecZnxBackendRef<'_, B>,
194 a_col: usize,
195 cnst: &VecZnxBackendRef<'_, B>,
196 cnst_col: usize,
197 cnst_coeff: usize,
198 res_limb: usize,
199 res_coeff: usize,
200 ) {
201 B::vec_znx_add_const_into_backend(self, res, res_col, a, a_col, cnst, cnst_col, cnst_coeff, res_limb, res_coeff)
202 }
203);
204
205impl_vec_znx_delegate!(
206 VecZnxAddConstAssignBackend<B>,
207 fn vec_znx_add_const_assign_backend(
208 &self,
209 res: &mut VecZnxBackendMut<'_, B>,
210 res_col: usize,
211 cnst: &VecZnxBackendRef<'_, B>,
212 cnst_col: usize,
213 cnst_coeff: usize,
214 res_limb: usize,
215 res_coeff: usize,
216 ) {
217 B::vec_znx_add_const_assign_backend(self, res, res_col, cnst, cnst_col, cnst_coeff, res_limb, res_coeff)
218 }
219);
220
221impl_vec_znx_delegate!(
222 VecZnxHadamardProductScalarZnxBackend<B>,
223 fn vec_znx_hadamard_product_scalar_znx_backend(
224 &self,
225 res: &mut VecZnxBigBackendMut<'_, B>,
226 res_col: usize,
227 a: &VecZnxBackendRef<'_, B>,
228 a_col: usize,
229 b: &ScalarZnxBackendRef<'_, B>,
230 b_col: usize,
231 ) {
232 B::vec_znx_hadamard_product_scalar_znx_backend(self, res, res_col, a, a_col, b, b_col)
233 }
234);
235
236impl_vec_znx_delegate!(
237 VecZnxAddScalarIntoBackend<B>,
238 fn vec_znx_add_scalar_into_backend(
239 &self,
240 res: &mut VecZnxBackendMut<'_, B>,
241 res_col: usize,
242 a: &ScalarZnxBackendRef<'_, B>,
243 a_col: usize,
244 b: &VecZnxBackendRef<'_, B>,
245 b_col: usize,
246 b_limb: usize,
247 ) {
248 B::vec_znx_add_scalar_into_backend(self, res, res_col, a, a_col, b, b_col, b_limb)
249 }
250);
251
252impl_vec_znx_delegate!(
253 VecZnxAddScalarAssignBackend<B>,
254 fn vec_znx_add_scalar_assign_backend(
255 &self,
256 res: &mut VecZnxBackendMut<'_, B>,
257 res_col: usize,
258 res_limb: usize,
259 a: &ScalarZnxBackendRef<'_, B>,
260 a_col: usize,
261 ) {
262 B::vec_znx_add_scalar_assign_backend(self, res, res_col, res_limb, a, a_col)
263 }
264);
265
266impl_vec_znx_delegate!(
267 VecZnxSubBackend<B>,
268 fn vec_znx_sub_backend(
269 &self,
270 res: &mut VecZnxBackendMut<'_, B>,
271 res_col: usize,
272 a: &VecZnxBackendRef<'_, B>,
273 a_col: usize,
274 b: &VecZnxBackendRef<'_, B>,
275 b_col: usize,
276 ) {
277 B::vec_znx_sub_backend(self, res, res_col, a, a_col, b, b_col)
278 }
279);
280
281impl_vec_znx_delegate!(
282 VecZnxSubAssignBackend<B>,
283 fn vec_znx_sub_assign_backend(
284 &self,
285 res: &mut VecZnxBackendMut<'_, B>,
286 res_col: usize,
287 a: &VecZnxBackendRef<'_, B>,
288 a_col: usize,
289 ) {
290 B::vec_znx_sub_assign_backend(self, res, res_col, a, a_col)
291 }
292);
293
294impl_vec_znx_delegate!(
295 VecZnxSubNegateAssignBackend<B>,
296 fn vec_znx_sub_negate_assign_backend(
297 &self,
298 res: &mut VecZnxBackendMut<'_, B>,
299 res_col: usize,
300 a: &VecZnxBackendRef<'_, B>,
301 a_col: usize,
302 ) {
303 B::vec_znx_sub_negate_assign_backend(self, res, res_col, a, a_col)
304 }
305);
306
307impl_vec_znx_delegate!(
308 VecZnxSubScalarBackend<B>,
309 fn vec_znx_sub_scalar_backend(
310 &self,
311 res: &mut VecZnxBackendMut<'_, B>,
312 res_col: usize,
313 a: &ScalarZnxBackendRef<'_, B>,
314 a_col: usize,
315 b: &VecZnxBackendRef<'_, B>,
316 b_col: usize,
317 b_limb: usize,
318 ) {
319 B::vec_znx_sub_scalar_backend(self, res, res_col, a, a_col, b, b_col, b_limb)
320 }
321);
322
323impl_vec_znx_delegate!(
324 VecZnxSubScalarAssignBackend<B>,
325 fn vec_znx_sub_scalar_assign_backend(
326 &self,
327 res: &mut VecZnxBackendMut<'_, B>,
328 res_col: usize,
329 res_limb: usize,
330 a: &ScalarZnxBackendRef<'_, B>,
331 a_col: usize,
332 ) {
333 B::vec_znx_sub_scalar_assign_backend(self, res, res_col, res_limb, a, a_col)
334 }
335);
336
337impl_vec_znx_delegate!(
338 VecZnxNegateBackend<B>,
339 fn vec_znx_negate_backend(
340 &self,
341 res: &mut VecZnxBackendMut<'_, B>,
342 res_col: usize,
343 a: &VecZnxBackendRef<'_, B>,
344 a_col: usize,
345 ) {
346 B::vec_znx_negate_backend(self, res, res_col, a, a_col)
347 }
348);
349
350impl_vec_znx_delegate!(
351 VecZnxNegateAssignBackend<B>,
352 fn vec_znx_negate_assign_backend(&self, a: &mut VecZnxBackendMut<'_, B>, a_col: usize) {
353 B::vec_znx_negate_assign_backend(self, a, a_col)
354 }
355);
356
357impl_vec_znx_delegate!(
358 VecZnxRshTmpBytes,
359 fn vec_znx_rsh_tmp_bytes(&self) -> usize {
360 B::vec_znx_rsh_tmp_bytes_backend(self)
361 }
362);
363
364impl_vec_znx_delegate!(
365 VecZnxLshTmpBytes,
366 fn vec_znx_lsh_tmp_bytes(&self) -> usize {
367 B::vec_znx_lsh_tmp_bytes_backend(self)
368 }
369);
370
371impl_vec_znx_delegate!(
372 VecZnxLshBackend<B>,
373 fn vec_znx_lsh_backend(
374 &self,
375 base2k: usize,
376 k: usize,
377 res: &mut VecZnxBackendMut<'_, B>,
378 res_col: usize,
379 a: &VecZnxBackendRef<'_, B>,
380 a_col: usize,
381 scratch: &mut ScratchArena<'_, B>,
382 ) {
383 B::vec_znx_lsh_backend(self, base2k, k, res, res_col, a, a_col, scratch)
384 }
385);
386
387impl_vec_znx_delegate!(
388 VecZnxLshCoeffBackend<B>,
389 fn vec_znx_lsh_coeff_backend(
390 &self,
391 base2k: usize,
392 k: usize,
393 res: &mut VecZnxBackendMut<'_, B>,
394 res_col: usize,
395 a: &VecZnxBackendRef<'_, B>,
396 a_col: usize,
397 a_coeff: usize,
398 scratch: &mut ScratchArena<'_, B>,
399 ) {
400 B::vec_znx_lsh_coeff_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, scratch)
401 }
402);
403
404impl_vec_znx_delegate!(
405 VecZnxLshAddIntoBackend<B>,
406 fn vec_znx_lsh_add_into_backend(
407 &self,
408 base2k: usize,
409 k: usize,
410 res: &mut VecZnxBackendMut<'_, B>,
411 res_col: usize,
412 a: &VecZnxBackendRef<'_, B>,
413 a_col: usize,
414 scratch: &mut ScratchArena<'_, B>,
415 ) {
416 B::vec_znx_lsh_add_into_backend(self, base2k, k, res, res_col, a, a_col, scratch)
417 }
418);
419
420impl_vec_znx_delegate!(
421 VecZnxLshAddCoeffIntoBackend<B>,
422 fn vec_znx_lsh_add_coeff_into_backend(
423 &self,
424 base2k: usize,
425 k: usize,
426 res: &mut VecZnxBackendMut<'_, B>,
427 res_col: usize,
428 a: &VecZnxBackendRef<'_, B>,
429 a_col: usize,
430 a_coeff: usize,
431 scratch: &mut ScratchArena<'_, B>,
432 ) {
433 B::vec_znx_lsh_add_coeff_into_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, scratch)
434 }
435);
436
437impl_vec_znx_delegate!(
438 VecZnxLshAddCoeffToCoeffBackend<B>,
439 fn vec_znx_lsh_add_coeff_to_coeff_backend(
440 &self,
441 base2k: usize,
442 k: usize,
443 res: &mut VecZnxBackendMut<'_, B>,
444 res_col: usize,
445 a: &VecZnxBackendRef<'_, B>,
446 a_col: usize,
447 a_coeff: usize,
448 res_coeff: usize,
449 scratch: &mut ScratchArena<'_, B>,
450 ) {
451 B::vec_znx_lsh_add_coeff_to_coeff_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, res_coeff, scratch)
452 }
453);
454
455impl_vec_znx_delegate!(
456 VecZnxLshSubCoeffToCoeffBackend<B>,
457 fn vec_znx_lsh_sub_coeff_to_coeff_backend(
458 &self,
459 base2k: usize,
460 k: usize,
461 res: &mut VecZnxBackendMut<'_, B>,
462 res_col: usize,
463 a: &VecZnxBackendRef<'_, B>,
464 a_col: usize,
465 a_coeff: usize,
466 res_coeff: usize,
467 scratch: &mut ScratchArena<'_, B>,
468 ) {
469 B::vec_znx_lsh_sub_coeff_to_coeff_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, res_coeff, scratch)
470 }
471);
472
473impl_vec_znx_delegate!(
474 VecZnxRshBackend<B>,
475 fn vec_znx_rsh_backend(
476 &self,
477 base2k: usize,
478 k: usize,
479 res: &mut VecZnxBackendMut<'_, B>,
480 res_col: usize,
481 a: &VecZnxBackendRef<'_, B>,
482 a_col: usize,
483 scratch: &mut ScratchArena<'_, B>,
484 ) {
485 B::vec_znx_rsh_backend(self, base2k, k, res, res_col, a, a_col, scratch)
486 }
487);
488
489impl_vec_znx_delegate!(
490 VecZnxRshCoeffBackend<B>,
491 fn vec_znx_rsh_coeff_backend(
492 &self,
493 base2k: usize,
494 k: usize,
495 res: &mut VecZnxBackendMut<'_, B>,
496 res_col: usize,
497 a: &VecZnxBackendRef<'_, B>,
498 a_col: usize,
499 a_coeff: usize,
500 scratch: &mut ScratchArena<'_, B>,
501 ) {
502 B::vec_znx_rsh_coeff_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, scratch)
503 }
504);
505
506impl_vec_znx_delegate!(
507 VecZnxRshAddIntoBackend<B>,
508 fn vec_znx_rsh_add_into_backend(
509 &self,
510 base2k: usize,
511 k: usize,
512 res: &mut VecZnxBackendMut<'_, B>,
513 res_col: usize,
514 a: &VecZnxBackendRef<'_, B>,
515 a_col: usize,
516 scratch: &mut ScratchArena<'_, B>,
517 ) {
518 B::vec_znx_rsh_add_into_backend(self, base2k, k, res, res_col, a, a_col, scratch)
519 }
520);
521
522impl_vec_znx_delegate!(
523 VecZnxRshAddCoeffIntoBackend<B>,
524 fn vec_znx_rsh_add_coeff_into_backend(
525 &self,
526 base2k: usize,
527 k: usize,
528 res: &mut VecZnxBackendMut<'_, B>,
529 res_col: usize,
530 a: &VecZnxBackendRef<'_, B>,
531 a_col: usize,
532 a_coeff: usize,
533 res_coeff: usize,
534 scratch: &mut ScratchArena<'_, B>,
535 ) {
536 B::vec_znx_rsh_add_coeff_into_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, res_coeff, scratch)
537 }
538);
539
540impl_vec_znx_delegate!(
541 VecZnxRshSubCoeffIntoBackend<B>,
542 fn vec_znx_rsh_sub_coeff_into_backend(
543 &self,
544 base2k: usize,
545 k: usize,
546 res: &mut VecZnxBackendMut<'_, B>,
547 res_col: usize,
548 a: &VecZnxBackendRef<'_, B>,
549 a_col: usize,
550 a_coeff: usize,
551 res_coeff: usize,
552 scratch: &mut ScratchArena<'_, B>,
553 ) {
554 B::vec_znx_rsh_sub_coeff_into_backend(self, base2k, k, res, res_col, a, a_col, a_coeff, res_coeff, scratch)
555 }
556);
557
558impl_vec_znx_delegate!(
559 VecZnxLshSubBackend<B>,
560 fn vec_znx_lsh_sub_backend(
561 &self,
562 base2k: usize,
563 k: usize,
564 res: &mut VecZnxBackendMut<'_, B>,
565 res_col: usize,
566 a: &VecZnxBackendRef<'_, B>,
567 a_col: usize,
568 scratch: &mut ScratchArena<'_, B>,
569 ) {
570 B::vec_znx_lsh_sub_backend(self, base2k, k, res, res_col, a, a_col, scratch)
571 }
572);
573
574impl_vec_znx_delegate!(
575 VecZnxRshSubBackend<B>,
576 fn vec_znx_rsh_sub_backend(
577 &self,
578 base2k: usize,
579 k: usize,
580 res: &mut VecZnxBackendMut<'_, B>,
581 res_col: usize,
582 a: &VecZnxBackendRef<'_, B>,
583 a_col: usize,
584 scratch: &mut ScratchArena<'_, B>,
585 ) {
586 B::vec_znx_rsh_sub_backend(self, base2k, k, res, res_col, a, a_col, scratch)
587 }
588);
589
590impl_vec_znx_delegate!(
591 VecZnxLshAssignBackend<B>,
592 fn vec_znx_lsh_assign_backend(
593 &self,
594 base2k: usize,
595 k: usize,
596 a: &mut VecZnxBackendMut<'_, B>,
597 a_col: usize,
598 scratch: &mut ScratchArena<'_, B>,
599 ) {
600 B::vec_znx_lsh_assign_backend(self, base2k, k, a, a_col, scratch)
601 }
602);
603
604impl_vec_znx_delegate!(
605 VecZnxRshAssignBackend<B>,
606 fn vec_znx_rsh_assign_backend(
607 &self,
608 base2k: usize,
609 k: usize,
610 a: &mut VecZnxBackendMut<'_, B>,
611 a_col: usize,
612 scratch: &mut ScratchArena<'_, B>,
613 ) {
614 B::vec_znx_rsh_assign_backend(self, base2k, k, a, a_col, scratch)
615 }
616);
617
618impl_vec_znx_delegate!(
619 VecZnxRotateBackend<B>,
620 fn vec_znx_rotate_backend(
621 &self,
622 k: i64,
623 res: &mut VecZnxBackendMut<'_, B>,
624 res_col: usize,
625 a: &VecZnxBackendRef<'_, B>,
626 a_col: usize,
627 ) {
628 B::vec_znx_rotate_backend(self, k, res, res_col, a, a_col)
629 }
630);
631
632impl_vec_znx_delegate!(
633 VecZnxRotateAssignTmpBytes,
634 fn vec_znx_rotate_assign_tmp_bytes(&self) -> usize {
635 B::vec_znx_rotate_assign_tmp_bytes_backend(self)
636 }
637);
638
639impl_vec_znx_delegate!(
640 VecZnxRotateAssignBackend<B>,
641 fn vec_znx_rotate_assign_backend(
642 &self,
643 k: i64,
644 a: &mut VecZnxBackendMut<'_, B>,
645 a_col: usize,
646 scratch: &mut ScratchArena<'_, B>,
647 ) {
648 B::vec_znx_rotate_assign_backend(self, k, a, a_col, scratch)
649 }
650);
651
652impl_vec_znx_delegate!(
653 VecZnxAutomorphismBackend<B>,
654 fn vec_znx_automorphism_backend(
655 &self,
656 k: i64,
657 res: &mut VecZnxBackendMut<'_, B>,
658 res_col: usize,
659 a: &VecZnxBackendRef<'_, B>,
660 a_col: usize,
661 ) {
662 B::vec_znx_automorphism_backend(self, k, res, res_col, a, a_col)
663 }
664);
665
666impl_vec_znx_delegate!(
667 VecZnxAutomorphismAssignTmpBytes,
668 fn vec_znx_automorphism_assign_tmp_bytes(&self) -> usize {
669 B::vec_znx_automorphism_assign_tmp_bytes_backend(self)
670 }
671);
672
673impl_vec_znx_delegate!(
674 VecZnxAutomorphismAssignBackend<B>,
675 fn vec_znx_automorphism_assign_backend(
676 &self,
677 k: i64,
678 res: &mut VecZnxBackendMut<'_, B>,
679 res_col: usize,
680 scratch: &mut ScratchArena<'_, B>,
681 ) {
682 B::vec_znx_automorphism_assign_backend(self, k, res, res_col, scratch)
683 }
684);
685
686impl_vec_znx_delegate!(
687 VecZnxAutomorphismRotateBackend<B>,
688 fn vec_znx_automorphism_rotate_backend(
689 &self,
690 p: i64,
691 k: i64,
692 res: &mut VecZnxBackendMut<'_, B>,
693 res_col: usize,
694 a: &VecZnxBackendRef<'_, B>,
695 a_col: usize,
696 ) {
697 B::vec_znx_automorphism_rotate_backend(self, p, k, res, res_col, a, a_col)
698 }
699);
700
701impl_vec_znx_delegate!(
702 ScalarZnxAutomorphismBackend<B>,
703 fn scalar_znx_automorphism_backend(
704 &self,
705 k: i64,
706 res: &mut ScalarZnxBackendMut<'_, B>,
707 res_col: usize,
708 a: &ScalarZnxBackendRef<'_, B>,
709 a_col: usize,
710 ) {
711 let mut res_vec = scalar_znx_as_vec_znx_backend_mut_from_mut::<B>(res);
712 let a_vec = scalar_znx_as_vec_znx_backend_ref_from_ref::<B>(a);
713 B::vec_znx_automorphism_backend(self, k, &mut res_vec, res_col, &a_vec, a_col)
714 }
715);
716
717impl_vec_znx_delegate!(
718 ScalarZnxAutomorphismAssignTmpBytes,
719 fn scalar_znx_automorphism_assign_tmp_bytes(&self) -> usize {
720 B::vec_znx_automorphism_assign_tmp_bytes_backend(self)
721 }
722);
723
724impl_vec_znx_delegate!(
725 ScalarZnxAutomorphismAssignBackend<B>,
726 fn scalar_znx_automorphism_assign_backend(
727 &self,
728 k: i64,
729 res: &mut ScalarZnxBackendMut<'_, B>,
730 res_col: usize,
731 scratch: &mut ScratchArena<'_, B>,
732 ) {
733 let mut res_vec = scalar_znx_as_vec_znx_backend_mut_from_mut::<B>(res);
734 B::vec_znx_automorphism_assign_backend(self, k, &mut res_vec, res_col, scratch)
735 }
736);
737
738impl_vec_znx_delegate!(
739 VecZnxMulXpMinusOneBackend<B>,
740 fn vec_znx_mul_xp_minus_one_backend(
741 &self,
742 p: i64,
743 res: &mut VecZnxBackendMut<'_, B>,
744 res_col: usize,
745 a: &VecZnxBackendRef<'_, B>,
746 a_col: usize,
747 ) {
748 B::vec_znx_mul_xp_minus_one_backend(self, p, res, res_col, a, a_col);
749 }
750);
751
752impl_vec_znx_delegate!(
753 VecZnxMulXpMinusOneAssignTmpBytes,
754 fn vec_znx_mul_xp_minus_one_assign_tmp_bytes(&self) -> usize {
755 B::vec_znx_mul_xp_minus_one_assign_tmp_bytes_backend(self)
756 }
757);
758
759impl_vec_znx_delegate!(
760 VecZnxMulXpMinusOneAssignBackend<B>,
761 fn vec_znx_mul_xp_minus_one_assign_backend(
762 &self,
763 p: i64,
764 res: &mut VecZnxBackendMut<'_, B>,
765 res_col: usize,
766 scratch: &mut ScratchArena<'_, B>,
767 ) {
768 B::vec_znx_mul_xp_minus_one_assign_backend(self, p, res, res_col, scratch)
769 }
770);
771
772impl_vec_znx_delegate!(
773 VecZnxSplitRingTmpBytes,
774 fn vec_znx_split_ring_tmp_bytes(&self) -> usize {
775 B::vec_znx_split_ring_tmp_bytes_backend(self)
776 }
777);
778
779impl_vec_znx_delegate!(
780 VecZnxSplitRingBackend<B>,
781 fn vec_znx_split_ring_backend(
782 &self,
783 res: &mut [VecZnxBackendMut<'_, B>],
784 res_col: usize,
785 a: &VecZnxBackendRef<'_, B>,
786 a_col: usize,
787 scratch: &mut ScratchArena<'_, B>,
788 ) {
789 B::vec_znx_split_ring_backend(self, res, res_col, a, a_col, scratch)
790 }
791);
792
793impl_vec_znx_delegate!(
794 VecZnxMergeRingsTmpBytes,
795 fn vec_znx_merge_rings_tmp_bytes(&self) -> usize {
796 B::vec_znx_merge_rings_tmp_bytes_backend(self)
797 }
798);
799
800impl_vec_znx_delegate!(
801 VecZnxMergeRingsBackend<B>,
802 fn vec_znx_merge_rings_backend(
803 &self,
804 res: &mut VecZnxBackendMut<'_, B>,
805 res_col: usize,
806 a: &[VecZnxBackendRef<'_, B>],
807 a_col: usize,
808 scratch: &mut ScratchArena<'_, B>,
809 ) {
810 B::vec_znx_merge_rings_backend(self, res, res_col, a, a_col, scratch)
811 }
812);
813
814impl_vec_znx_delegate!(
815 VecZnxSwitchRingBackend<B>,
816 fn vec_znx_switch_ring_backend(
817 &self,
818 res: &mut VecZnxBackendMut<'_, B>,
819 res_col: usize,
820 a: &VecZnxBackendRef<'_, B>,
821 a_col: usize,
822 ) {
823 B::vec_znx_switch_ring_backend(self, res, res_col, a, a_col);
824 }
825);
826
827impl_vec_znx_delegate!(
828 VecZnxCopyBackend<B>,
829 fn vec_znx_copy_backend(&self, res: &mut VecZnxBackendMut<'_, B>, res_col: usize, a: &VecZnxBackendRef<'_, B>, a_col: usize) {
830 B::vec_znx_copy_backend(self, res, res_col, a, a_col);
831 }
832);
833
834impl_vec_znx_delegate!(
835 VecZnxTransposeBackend<B>,
836 fn vec_znx_transpose_backend(&self, res: &mut VecZnxBackendMut<'_, B>, a: &VecZnxBackendRef<'_, B>) {
837 B::vec_znx_transpose_backend(self, res, a);
838 }
839);
840
841impl_vec_znx_delegate!(
842 ScalarZnxFillTernaryHwSourceBackend<B>,
843 fn scalar_znx_fill_ternary_hw_source_backend(
844 &self,
845 res: &mut ScalarZnxBackendMut<'_, B>,
846 res_col: usize,
847 hw: usize,
848 source: &mut Source,
849 ) {
850 B::scalar_znx_fill_ternary_hw_backend(self, res, res_col, hw, source.new_seed());
851 }
852);
853
854impl_vec_znx_delegate!(
855 ScalarZnxFillTernaryHwBackend<B>,
856 fn scalar_znx_fill_ternary_hw_backend(
857 &self,
858 res: &mut ScalarZnxBackendMut<'_, B>,
859 res_col: usize,
860 hw: usize,
861 seed: [u8; 32],
862 ) {
863 B::scalar_znx_fill_ternary_hw_backend(self, res, res_col, hw, seed);
864 }
865);
866
867impl_vec_znx_delegate!(
868 ScalarZnxFillTernaryProbSourceBackend<B>,
869 fn scalar_znx_fill_ternary_prob_source_backend(
870 &self,
871 res: &mut ScalarZnxBackendMut<'_, B>,
872 res_col: usize,
873 prob: f64,
874 source: &mut Source,
875 ) {
876 B::scalar_znx_fill_ternary_prob_backend(self, res, res_col, prob, source.new_seed());
877 }
878);
879
880impl_vec_znx_delegate!(
881 ScalarZnxFillTernaryProbBackend<B>,
882 fn scalar_znx_fill_ternary_prob_backend(
883 &self,
884 res: &mut ScalarZnxBackendMut<'_, B>,
885 res_col: usize,
886 prob: f64,
887 seed: [u8; 32],
888 ) {
889 B::scalar_znx_fill_ternary_prob_backend(self, res, res_col, prob, seed);
890 }
891);
892
893impl_vec_znx_delegate!(
894 ScalarZnxFillBinaryHwSourceBackend<B>,
895 fn scalar_znx_fill_binary_hw_source_backend(
896 &self,
897 res: &mut ScalarZnxBackendMut<'_, B>,
898 res_col: usize,
899 hw: usize,
900 source: &mut Source,
901 ) {
902 B::scalar_znx_fill_binary_hw_backend(self, res, res_col, hw, source.new_seed());
903 }
904);
905
906impl_vec_znx_delegate!(
907 ScalarZnxFillBinaryHwBackend<B>,
908 fn scalar_znx_fill_binary_hw_backend(&self, res: &mut ScalarZnxBackendMut<'_, B>, res_col: usize, hw: usize, seed: [u8; 32]) {
909 B::scalar_znx_fill_binary_hw_backend(self, res, res_col, hw, seed);
910 }
911);
912
913impl_vec_znx_delegate!(
914 ScalarZnxFillBinaryProbSourceBackend<B>,
915 fn scalar_znx_fill_binary_prob_source_backend(
916 &self,
917 res: &mut ScalarZnxBackendMut<'_, B>,
918 res_col: usize,
919 prob: f64,
920 source: &mut Source,
921 ) {
922 B::scalar_znx_fill_binary_prob_backend(self, res, res_col, prob, source.new_seed());
923 }
924);
925
926impl_vec_znx_delegate!(
927 ScalarZnxFillBinaryProbBackend<B>,
928 fn scalar_znx_fill_binary_prob_backend(
929 &self,
930 res: &mut ScalarZnxBackendMut<'_, B>,
931 res_col: usize,
932 prob: f64,
933 seed: [u8; 32],
934 ) {
935 B::scalar_znx_fill_binary_prob_backend(self, res, res_col, prob, seed);
936 }
937);
938
939impl_vec_znx_delegate!(
940 ScalarZnxFillBinaryBlockSourceBackend<B>,
941 fn scalar_znx_fill_binary_block_source_backend(
942 &self,
943 res: &mut ScalarZnxBackendMut<'_, B>,
944 res_col: usize,
945 block_size: usize,
946 source: &mut Source,
947 ) {
948 B::scalar_znx_fill_binary_block_backend(self, res, res_col, block_size, source.new_seed());
949 }
950);
951
952impl_vec_znx_delegate!(
953 ScalarZnxFillBinaryBlockBackend<B>,
954 fn scalar_znx_fill_binary_block_backend(
955 &self,
956 res: &mut ScalarZnxBackendMut<'_, B>,
957 res_col: usize,
958 block_size: usize,
959 seed: [u8; 32],
960 ) {
961 B::scalar_znx_fill_binary_block_backend(self, res, res_col, block_size, seed);
962 }
963);
964
965impl_vec_znx_delegate!(
966 VecZnxFillUniformSourceBackend<B>,
967 fn vec_znx_fill_uniform_source_backend(
968 &self,
969 base2k: usize,
970 res: &mut VecZnxBackendMut<'_, B>,
971 res_col: usize,
972 source: &mut Source,
973 ) {
974 B::vec_znx_fill_uniform_backend(self, base2k, res, res_col, source.new_seed());
975 }
976);
977
978impl_vec_znx_delegate!(
979 VecZnxFillUniformBackend<B>,
980 fn vec_znx_fill_uniform_backend(&self, base2k: usize, res: &mut VecZnxBackendMut<'_, B>, res_col: usize, seed: [u8; 32]) {
981 B::vec_znx_fill_uniform_backend(self, base2k, res, res_col, seed);
982 }
983);
984
985impl_vec_znx_delegate!(
986 VecZnxFillNormalSourceBackend<B>,
987 fn vec_znx_fill_normal_source_backend(
988 &self,
989 base2k: usize,
990 res: &mut VecZnxBackendMut<'_, B>,
991 res_col: usize,
992 noise_infos: NoiseInfos,
993 source_xe: &mut Source,
994 ) {
995 B::vec_znx_fill_normal_backend(self, base2k, res, res_col, noise_infos, source_xe.new_seed());
996 }
997);
998
999impl_vec_znx_delegate!(
1000 VecZnxFillNormalBackend<B>,
1001 fn vec_znx_fill_normal_backend(
1002 &self,
1003 base2k: usize,
1004 res: &mut VecZnxBackendMut<'_, B>,
1005 res_col: usize,
1006 noise_infos: NoiseInfos,
1007 seed: [u8; 32],
1008 ) {
1009 B::vec_znx_fill_normal_backend(self, base2k, res, res_col, noise_infos, seed);
1010 }
1011);
1012
1013impl_vec_znx_delegate!(
1014 VecZnxAddNormalSourceBackend<B>,
1015 fn vec_znx_add_normal_source_backend(
1016 &self,
1017 base2k: usize,
1018 res: &mut VecZnxBackendMut<'_, B>,
1019 res_col: usize,
1020 noise_infos: NoiseInfos,
1021 source_xe: &mut Source,
1022 ) {
1023 B::vec_znx_add_normal_backend(self, base2k, res, res_col, noise_infos, source_xe.new_seed());
1024 }
1025);
1026
1027impl_vec_znx_delegate!(
1028 VecZnxAddNormalBackend<B>,
1029 fn vec_znx_add_normal_backend(
1030 &self,
1031 base2k: usize,
1032 res: &mut VecZnxBackendMut<'_, B>,
1033 res_col: usize,
1034 noise_infos: NoiseInfos,
1035 seed: [u8; 32],
1036 ) {
1037 B::vec_znx_add_normal_backend(self, base2k, res, res_col, noise_infos, seed);
1038 }
1039);