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, 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}