arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}