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}