arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/backend/src/hal/oep/vec_znx.rs
backend/src/hal/oep/vec_znx.rsRaw
  1use rand_distr::Distribution;
  2use rug::Float;
  3use sampling::source::Source;
  4
  5use crate::hal::layouts::{Backend, Module, ScalarZnxToRef, Scratch, VecZnxOwned, VecZnxToMut, VecZnxToRef};
  6
  7/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
  8/// * See [crate::hal::layouts::VecZnx::new] for reference code.
  9/// * See [crate::hal::api::VecZnxAlloc] for corresponding public API.
 10/// * See [crate::doc::backend_safety] for safety contract.
 11/// * See test \[TODO\]
 12pub unsafe trait VecZnxAllocImpl<B: Backend> {
 13    fn vec_znx_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxOwned;
 14}
 15
 16/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 17/// * See [crate::hal::layouts::VecZnx::from_bytes] for reference code.
 18/// * See [crate::hal::api::VecZnxFromBytes] for corresponding public API.
 19/// * See [crate::doc::backend_safety] for safety contract.
 20pub unsafe trait VecZnxFromBytesImpl<B: Backend> {
 21    fn vec_znx_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxOwned;
 22}
 23
 24/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 25/// * See [crate::hal::layouts::VecZnx::alloc_bytes] for reference code.
 26/// * See [crate::hal::api::VecZnxAllocBytes] for corresponding public API.
 27/// * See [crate::doc::backend_safety] for safety contract.
 28pub unsafe trait VecZnxAllocBytesImpl<B: Backend> {
 29    fn vec_znx_alloc_bytes_impl(n: usize, cols: usize, size: usize) -> usize;
 30}
 31
 32/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 33/// * 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.
 34/// * See [crate::hal::api::VecZnxNormalizeTmpBytes] for corresponding public API.
 35/// * See [crate::doc::backend_safety] for safety contract.
 36pub unsafe trait VecZnxNormalizeTmpBytesImpl<B: Backend> {
 37    fn vec_znx_normalize_tmp_bytes_impl(module: &Module<B>, n: usize) -> usize;
 38}
 39
 40/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 41/// * See [vec_znx_normalize_base2k_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L212) for reference code.
 42/// * See [crate::hal::api::VecZnxNormalize] for corresponding public API.
 43/// * See [crate::doc::backend_safety] for safety contract.
 44pub unsafe trait VecZnxNormalizeImpl<B: Backend> {
 45    fn vec_znx_normalize_impl<R, A>(
 46        module: &Module<B>,
 47        basek: usize,
 48        res: &mut R,
 49        res_col: usize,
 50        a: &A,
 51        a_col: usize,
 52        scratch: &mut Scratch<B>,
 53    ) where
 54        R: VecZnxToMut,
 55        A: VecZnxToRef;
 56}
 57
 58/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 59/// * See [vec_znx_normalize_base2k_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L212) for reference code.
 60/// * See [crate::hal::api::VecZnxNormalizeInplace] for corresponding public API.
 61/// * See [crate::doc::backend_safety] for safety contract.
 62pub unsafe trait VecZnxNormalizeInplaceImpl<B: Backend> {
 63    fn vec_znx_normalize_inplace_impl<A>(module: &Module<B>, basek: usize, a: &mut A, a_col: usize, scratch: &mut Scratch<B>)
 64    where
 65        A: VecZnxToMut;
 66}
 67
 68/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 69/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
 70/// * See [crate::hal::api::VecZnxAdd] for corresponding public API.
 71/// * See [crate::doc::backend_safety] for safety contract.
 72pub unsafe trait VecZnxAddImpl<B: Backend> {
 73    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)
 74    where
 75        R: VecZnxToMut,
 76        A: VecZnxToRef,
 77        C: VecZnxToRef;
 78}
 79
 80/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 81/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
 82/// * See [crate::hal::api::VecZnxAddInplace] for corresponding public API.
 83/// * See [crate::doc::backend_safety] for safety contract.
 84pub unsafe trait VecZnxAddInplaceImpl<B: Backend> {
 85    fn vec_znx_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
 86    where
 87        R: VecZnxToMut,
 88        A: VecZnxToRef;
 89}
 90
 91/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 92/// * See [vec_znx_add_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L86) for reference code.
 93/// * See [crate::hal::api::VecZnxAddScalarInplace] for corresponding public API.
 94/// * See [crate::doc::backend_safety] for safety contract.
 95pub unsafe trait VecZnxAddScalarInplaceImpl<B: Backend> {
 96    fn vec_znx_add_scalar_inplace_impl<R, A>(
 97        module: &Module<B>,
 98        res: &mut R,
 99        res_col: usize,
100        res_limb: usize,
101        a: &A,
102        a_col: usize,
103    ) where
104        R: VecZnxToMut,
105        A: ScalarZnxToRef;
106}
107
108/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
109/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
110/// * See [crate::hal::api::VecZnxSub] for corresponding public API.
111/// * See [crate::doc::backend_safety] for safety contract.
112pub unsafe trait VecZnxSubImpl<B: Backend> {
113    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)
114    where
115        R: VecZnxToMut,
116        A: VecZnxToRef,
117        C: VecZnxToRef;
118}
119
120/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
121/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
122/// * See [crate::hal::api::VecZnxSubABInplace] for corresponding public API.
123/// * See [crate::doc::backend_safety] for safety contract.
124pub unsafe trait VecZnxSubABInplaceImpl<B: Backend> {
125    fn vec_znx_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
126    where
127        R: VecZnxToMut,
128        A: VecZnxToRef;
129}
130
131/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
132/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
133/// * See [crate::hal::api::VecZnxSubBAInplace] for corresponding public API.
134/// * See [crate::doc::backend_safety] for safety contract.
135pub unsafe trait VecZnxSubBAInplaceImpl<B: Backend> {
136    fn vec_znx_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
137    where
138        R: VecZnxToMut,
139        A: VecZnxToRef;
140}
141
142/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
143/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
144/// * See [crate::hal::api::VecZnxSubScalarInplace] for corresponding public API.
145/// * See [crate::doc::backend_safety] for safety contract.
146pub unsafe trait VecZnxSubScalarInplaceImpl<B: Backend> {
147    fn vec_znx_sub_scalar_inplace_impl<R, A>(
148        module: &Module<B>,
149        res: &mut R,
150        res_col: usize,
151        res_limb: usize,
152        a: &A,
153        a_col: usize,
154    ) where
155        R: VecZnxToMut,
156        A: ScalarZnxToRef;
157}
158
159/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
160/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
161/// * See [crate::hal::api::VecZnxNegate] for corresponding public API.
162/// * See [crate::doc::backend_safety] for safety contract.
163pub unsafe trait VecZnxNegateImpl<B: Backend> {
164    fn vec_znx_negate_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
165    where
166        R: VecZnxToMut,
167        A: VecZnxToRef;
168}
169
170/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
171/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
172/// * See [crate::hal::api::VecZnxNegateInplace] for corresponding public API.
173/// * See [crate::doc::backend_safety] for safety contract.
174pub unsafe trait VecZnxNegateInplaceImpl<B: Backend> {
175    fn vec_znx_negate_inplace_impl<A>(module: &Module<B>, a: &mut A, a_col: usize)
176    where
177        A: VecZnxToMut;
178}
179
180/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
181/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_rsh_inplace_ref] for reference code.
182/// * See [crate::hal::api::VecZnxRshInplace] for corresponding public API.
183/// * See [crate::doc::backend_safety] for safety contract.
184pub unsafe trait VecZnxRshInplaceImpl<B: Backend> {
185    fn vec_znx_rsh_inplace_impl<A>(module: &Module<B>, basek: usize, k: usize, a: &mut A)
186    where
187        A: VecZnxToMut;
188}
189
190/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
191/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_lsh_inplace_ref] for reference code.
192/// * See [crate::hal::api::VecZnxLshInplace] for corresponding public API.
193/// * See [crate::doc::backend_safety] for safety contract.
194pub unsafe trait VecZnxLshInplaceImpl<B: Backend> {
195    fn vec_znx_lsh_inplace_impl<A>(module: &Module<B>, basek: usize, k: usize, a: &mut A)
196    where
197        A: VecZnxToMut;
198}
199
200/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
201/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
202/// * See [crate::hal::api::VecZnxRotate] for corresponding public API.
203/// * See [crate::doc::backend_safety] for safety contract.
204pub unsafe trait VecZnxRotateImpl<B: Backend> {
205    fn vec_znx_rotate_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
206    where
207        R: VecZnxToMut,
208        A: VecZnxToRef;
209}
210
211/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
212/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
213/// * See [crate::hal::api::VecZnxRotateInplace] for corresponding public API.
214/// * See [crate::doc::backend_safety] for safety contract.
215pub unsafe trait VecZnxRotateInplaceImpl<B: Backend> {
216    fn vec_znx_rotate_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
217    where
218        A: VecZnxToMut;
219}
220
221/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
222/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
223/// * See [crate::hal::api::VecZnxAutomorphism] for corresponding public API.
224/// * See [crate::doc::backend_safety] for safety contract.
225pub unsafe trait VecZnxAutomorphismImpl<B: Backend> {
226    fn vec_znx_automorphism_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
227    where
228        R: VecZnxToMut,
229        A: VecZnxToRef;
230}
231
232/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
233/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
234/// * See [crate::hal::api::VecZnxAutomorphismInplace] for corresponding public API.
235/// * See [crate::doc::backend_safety] for safety contract.
236pub unsafe trait VecZnxAutomorphismInplaceImpl<B: Backend> {
237    fn vec_znx_automorphism_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
238    where
239        A: VecZnxToMut;
240}
241
242/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
243/// * 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.
244/// * See [crate::hal::api::VecZnxMulXpMinusOne] for corresponding public API.
245/// * See [crate::doc::backend_safety] for safety contract.
246pub unsafe trait VecZnxMulXpMinusOneImpl<B: Backend> {
247    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)
248    where
249        R: VecZnxToMut,
250        A: VecZnxToRef;
251}
252
253/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
254/// * 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.
255/// * See [crate::hal::api::VecZnxMulXpMinusOneInplace] for corresponding public API.
256/// * See [crate::doc::backend_safety] for safety contract.
257pub unsafe trait VecZnxMulXpMinusOneInplaceImpl<B: Backend> {
258    fn vec_znx_mul_xp_minus_one_inplace_impl<R>(module: &Module<B>, p: i64, res: &mut R, res_col: usize)
259    where
260        R: VecZnxToMut;
261}
262
263/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
264/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_split_ref] for reference code.
265/// * See [crate::hal::api::VecZnxSplit] for corresponding public API.
266/// * See [crate::doc::backend_safety] for safety contract.
267pub unsafe trait VecZnxSplitImpl<B: Backend> {
268    fn vec_znx_split_impl<R, A>(
269        module: &Module<B>,
270        res: &mut Vec<R>,
271        res_col: usize,
272        a: &A,
273        a_col: usize,
274        scratch: &mut Scratch<B>,
275    ) where
276        R: VecZnxToMut,
277        A: VecZnxToRef;
278}
279
280/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
281/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_merge_ref] for reference code.
282/// * See [crate::hal::api::VecZnxMerge] for corresponding public API.
283/// * See [crate::doc::backend_safety] for safety contract.
284pub unsafe trait VecZnxMergeImpl<B: Backend> {
285    fn vec_znx_merge_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: Vec<A>, a_col: usize)
286    where
287        R: VecZnxToMut,
288        A: VecZnxToRef;
289}
290
291/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
292/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_switch_degree_ref] for reference code.
293/// * See [crate::hal::api::VecZnxSwithcDegree] for corresponding public API.
294/// * See [crate::doc::backend_safety] for safety contract.
295pub unsafe trait VecZnxSwithcDegreeImpl<B: Backend> {
296    fn vec_znx_switch_degree_impl<R: VecZnxToMut, A: VecZnxToRef>(
297        module: &Module<B>,
298        res: &mut R,
299        res_col: usize,
300        a: &A,
301        a_col: usize,
302    );
303}
304
305/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
306/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_copy_ref] for reference code.
307/// * See [crate::hal::api::VecZnxCopy] for corresponding public API.
308/// * See [crate::doc::backend_safety] for safety contract.
309pub unsafe trait VecZnxCopyImpl<B: Backend> {
310    fn vec_znx_copy_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
311    where
312        R: VecZnxToMut,
313        A: VecZnxToRef;
314}
315
316/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
317/// * See [crate::hal::api::VecZnxStd] for corresponding public API.
318/// * See [crate::doc::backend_safety] for safety contract.
319pub unsafe trait VecZnxStdImpl<B: Backend> {
320    fn vec_znx_std_impl<A>(module: &Module<B>, basek: usize, a: &A, a_col: usize) -> f64
321    where
322        A: VecZnxToRef;
323}
324
325/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
326/// * See [crate::hal::api::VecZnxFillUniform] for corresponding public API.
327/// * See [crate::doc::backend_safety] for safety contract.
328pub unsafe trait VecZnxFillUniformImpl<B: Backend> {
329    fn vec_znx_fill_uniform_impl<R>(module: &Module<B>, basek: usize, res: &mut R, res_col: usize, k: usize, source: &mut Source)
330    where
331        R: VecZnxToMut;
332}
333
334/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
335/// * See [crate::hal::api::VecZnxFillDistF64] for corresponding public API.
336/// * See [crate::doc::backend_safety] for safety contract.
337pub unsafe trait VecZnxFillDistF64Impl<B: Backend> {
338    fn vec_znx_fill_dist_f64_impl<R, D: Distribution<f64>>(
339        module: &Module<B>,
340        basek: usize,
341        res: &mut R,
342        res_col: usize,
343        k: usize,
344        source: &mut Source,
345        dist: D,
346        bound: f64,
347    ) where
348        R: VecZnxToMut;
349}
350
351/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
352/// * See [crate::hal::api::VecZnxAddDistF64] for corresponding public API.
353/// * See [crate::doc::backend_safety] for safety contract.
354pub unsafe trait VecZnxAddDistF64Impl<B: Backend> {
355    fn vec_znx_add_dist_f64_impl<R, D: Distribution<f64>>(
356        module: &Module<B>,
357        basek: usize,
358        res: &mut R,
359        res_col: usize,
360        k: usize,
361        source: &mut Source,
362        dist: D,
363        bound: f64,
364    ) where
365        R: VecZnxToMut;
366}
367
368/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
369/// * See [crate::hal::api::VecZnxFillNormal] for corresponding public API.
370/// * See [crate::doc::backend_safety] for safety contract.
371pub unsafe trait VecZnxFillNormalImpl<B: Backend> {
372    fn vec_znx_fill_normal_impl<R>(
373        module: &Module<B>,
374        basek: usize,
375        res: &mut R,
376        res_col: usize,
377        k: usize,
378        source: &mut Source,
379        sigma: f64,
380        bound: f64,
381    ) where
382        R: VecZnxToMut;
383}
384
385/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
386/// * See [crate::hal::api::VecZnxAddNormal] for corresponding public API.
387/// * See [crate::doc::backend_safety] for safety contract.
388pub unsafe trait VecZnxAddNormalImpl<B: Backend> {
389    fn vec_znx_add_normal_impl<R>(
390        module: &Module<B>,
391        basek: usize,
392        res: &mut R,
393        res_col: usize,
394        k: usize,
395        source: &mut Source,
396        sigma: f64,
397        bound: f64,
398    ) where
399        R: VecZnxToMut;
400}
401
402/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
403/// * See \[TODO\] for reference code.
404/// * See [crate::hal::api::VecZnxEncodeVeci64] for corresponding public API.
405/// * See [crate::doc::backend_safety] for safety contract.
406pub unsafe trait VecZnxEncodeVeci64Impl<B: Backend> {
407    fn encode_vec_i64_impl<R>(
408        module: &Module<B>,
409        basek: usize,
410        res: &mut R,
411        res_col: usize,
412        k: usize,
413        data: &[i64],
414        log_max: usize,
415    ) where
416        R: VecZnxToMut;
417}
418
419/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
420/// * See \[TODO\] for reference code.
421/// * See [crate::hal::api::VecZnxEncodeCoeffsi64] for corresponding public API.
422/// * See [crate::doc::backend_safety] for safety contract.
423pub unsafe trait VecZnxEncodeCoeffsi64Impl<B: Backend> {
424    fn encode_coeff_i64_impl<R>(
425        module: &Module<B>,
426        basek: usize,
427        res: &mut R,
428        res_col: usize,
429        k: usize,
430        i: usize,
431        data: i64,
432        log_max: usize,
433    ) where
434        R: VecZnxToMut;
435}
436
437/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
438/// * See \[TODO\] for reference code.
439/// * See [crate::hal::api::VecZnxDecodeVeci64] for corresponding public API.
440/// * See [crate::doc::backend_safety] for safety contract.
441pub unsafe trait VecZnxDecodeVeci64Impl<B: Backend> {
442    fn decode_vec_i64_impl<R>(module: &Module<B>, basek: usize, res: &R, res_col: usize, k: usize, data: &mut [i64])
443    where
444        R: VecZnxToRef;
445}
446
447/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
448/// * See \[TODO\] for reference code.
449/// * See [crate::hal::api::VecZnxDecodeCoeffsi64] for corresponding public API.
450/// * See [crate::doc::backend_safety] for safety contract.
451pub unsafe trait VecZnxDecodeCoeffsi64Impl<B: Backend> {
452    fn decode_coeff_i64_impl<R>(module: &Module<B>, basek: usize, res: &R, res_col: usize, k: usize, i: usize) -> i64
453    where
454        R: VecZnxToRef;
455}
456
457/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
458/// * See \[TODO\] for reference code.
459/// * See [crate::hal::api::VecZnxDecodeVecFloat] for corresponding public API.
460/// * See [crate::doc::backend_safety] for safety contract.
461pub unsafe trait VecZnxDecodeVecFloatImpl<B: Backend> {
462    fn decode_vec_float_impl<R>(module: &Module<B>, basek: usize, res: &R, res_col: usize, data: &mut [Float])
463    where
464        R: VecZnxToRef;
465}