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