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 sampling::source::Source;
  3
  4use crate::hal::layouts::{Backend, Module, ScalarZnxToRef, Scratch, VecZnxToMut, VecZnxToRef};
  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::hal::api::VecZnxNormalizeTmpBytes] for corresponding public API.
  9/// * See [crate::doc::backend_safety] for safety contract.
 10pub unsafe trait VecZnxNormalizeTmpBytesImpl<B: Backend> {
 11    fn vec_znx_normalize_tmp_bytes_impl(module: &Module<B>, n: usize) -> 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::hal::api::VecZnxNormalize] for corresponding public API.
 17/// * See [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::hal::api::VecZnxNormalizeInplace] for corresponding public API.
 35/// * See [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::hal::api::VecZnxAdd] for corresponding public API.
 45/// * See [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::hal::api::VecZnxAddInplace] for corresponding public API.
 57/// * See [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::hal::api::VecZnxAddScalarInplace] for corresponding public API.
 68/// * See [crate::doc::backend_safety] for safety contract.
 69pub unsafe trait VecZnxAddScalarInplaceImpl<B: Backend> {
 70    fn vec_znx_add_scalar_inplace_impl<R, A>(
 71        module: &Module<B>,
 72        res: &mut R,
 73        res_col: usize,
 74        res_limb: usize,
 75        a: &A,
 76        a_col: usize,
 77    ) where
 78        R: VecZnxToMut,
 79        A: ScalarZnxToRef;
 80}
 81
 82/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 83/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
 84/// * See [crate::hal::api::VecZnxSub] for corresponding public API.
 85/// * See [crate::doc::backend_safety] for safety contract.
 86pub unsafe trait VecZnxSubImpl<B: Backend> {
 87    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)
 88    where
 89        R: VecZnxToMut,
 90        A: VecZnxToRef,
 91        C: VecZnxToRef;
 92}
 93
 94/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 95/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
 96/// * See [crate::hal::api::VecZnxSubABInplace] for corresponding public API.
 97/// * See [crate::doc::backend_safety] for safety contract.
 98pub unsafe trait VecZnxSubABInplaceImpl<B: Backend> {
 99    fn vec_znx_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
100    where
101        R: VecZnxToMut,
102        A: VecZnxToRef;
103}
104
105/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
106/// * See [vec_znx_sub_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L125) for reference code.
107/// * See [crate::hal::api::VecZnxSubBAInplace] for corresponding public API.
108/// * See [crate::doc::backend_safety] for safety contract.
109pub unsafe trait VecZnxSubBAInplaceImpl<B: Backend> {
110    fn vec_znx_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
111    where
112        R: VecZnxToMut,
113        A: 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::hal::api::VecZnxSubScalarInplace] for corresponding public API.
119/// * See [crate::doc::backend_safety] for safety contract.
120pub unsafe trait VecZnxSubScalarInplaceImpl<B: Backend> {
121    fn vec_znx_sub_scalar_inplace_impl<R, A>(
122        module: &Module<B>,
123        res: &mut R,
124        res_col: usize,
125        res_limb: usize,
126        a: &A,
127        a_col: usize,
128    ) where
129        R: VecZnxToMut,
130        A: ScalarZnxToRef;
131}
132
133/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
134/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
135/// * See [crate::hal::api::VecZnxNegate] for corresponding public API.
136/// * See [crate::doc::backend_safety] for safety contract.
137pub unsafe trait VecZnxNegateImpl<B: Backend> {
138    fn vec_znx_negate_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
139    where
140        R: VecZnxToMut,
141        A: VecZnxToRef;
142}
143
144/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
145/// * See [vec_znx_negate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L322C13-L322C31) for reference code.
146/// * See [crate::hal::api::VecZnxNegateInplace] for corresponding public API.
147/// * See [crate::doc::backend_safety] for safety contract.
148pub unsafe trait VecZnxNegateInplaceImpl<B: Backend> {
149    fn vec_znx_negate_inplace_impl<A>(module: &Module<B>, a: &mut A, a_col: usize)
150    where
151        A: VecZnxToMut;
152}
153
154/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
155/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_rsh_inplace_ref] for reference code.
156/// * See [crate::hal::api::VecZnxRshInplace] for corresponding public API.
157/// * See [crate::doc::backend_safety] for safety contract.
158pub unsafe trait VecZnxRshInplaceImpl<B: Backend> {
159    fn vec_znx_rsh_inplace_impl<A>(module: &Module<B>, basek: usize, k: usize, a: &mut A)
160    where
161        A: VecZnxToMut;
162}
163
164/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
165/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_lsh_inplace_ref] for reference code.
166/// * See [crate::hal::api::VecZnxLshInplace] for corresponding public API.
167/// * See [crate::doc::backend_safety] for safety contract.
168pub unsafe trait VecZnxLshInplaceImpl<B: Backend> {
169    fn vec_znx_lsh_inplace_impl<A>(module: &Module<B>, basek: usize, k: usize, a: &mut A)
170    where
171        A: VecZnxToMut;
172}
173
174/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
175/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
176/// * See [crate::hal::api::VecZnxRotate] for corresponding public API.
177/// * See [crate::doc::backend_safety] for safety contract.
178pub unsafe trait VecZnxRotateImpl<B: Backend> {
179    fn vec_znx_rotate_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
180    where
181        R: VecZnxToMut,
182        A: VecZnxToRef;
183}
184
185/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
186/// * See [vec_znx_rotate_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L164) for reference code.
187/// * See [crate::hal::api::VecZnxRotateInplace] for corresponding public API.
188/// * See [crate::doc::backend_safety] for safety contract.
189pub unsafe trait VecZnxRotateInplaceImpl<B: Backend> {
190    fn vec_znx_rotate_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
191    where
192        A: VecZnxToMut;
193}
194
195/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
196/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
197/// * See [crate::hal::api::VecZnxAutomorphism] for corresponding public API.
198/// * See [crate::doc::backend_safety] for safety contract.
199pub unsafe trait VecZnxAutomorphismImpl<B: Backend> {
200    fn vec_znx_automorphism_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
201    where
202        R: VecZnxToMut,
203        A: VecZnxToRef;
204}
205
206/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
207/// * See [vec_znx_automorphism_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/vec_znx.c#L188) for reference code.
208/// * See [crate::hal::api::VecZnxAutomorphismInplace] for corresponding public API.
209/// * See [crate::doc::backend_safety] for safety contract.
210pub unsafe trait VecZnxAutomorphismInplaceImpl<B: Backend> {
211    fn vec_znx_automorphism_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
212    where
213        A: VecZnxToMut;
214}
215
216/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
217/// * 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.
218/// * See [crate::hal::api::VecZnxMulXpMinusOne] for corresponding public API.
219/// * See [crate::doc::backend_safety] for safety contract.
220pub unsafe trait VecZnxMulXpMinusOneImpl<B: Backend> {
221    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)
222    where
223        R: VecZnxToMut,
224        A: VecZnxToRef;
225}
226
227/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
228/// * 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.
229/// * See [crate::hal::api::VecZnxMulXpMinusOneInplace] for corresponding public API.
230/// * See [crate::doc::backend_safety] for safety contract.
231pub unsafe trait VecZnxMulXpMinusOneInplaceImpl<B: Backend> {
232    fn vec_znx_mul_xp_minus_one_inplace_impl<R>(module: &Module<B>, p: i64, res: &mut R, res_col: usize)
233    where
234        R: VecZnxToMut;
235}
236
237/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
238/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_split_ref] for reference code.
239/// * See [crate::hal::api::VecZnxSplit] for corresponding public API.
240/// * See [crate::doc::backend_safety] for safety contract.
241pub unsafe trait VecZnxSplitImpl<B: Backend> {
242    fn vec_znx_split_impl<R, A>(
243        module: &Module<B>,
244        res: &mut Vec<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::implementation::cpu_spqlios::vec_znx::vec_znx_merge_ref] for reference code.
256/// * See [crate::hal::api::VecZnxMerge] for corresponding public API.
257/// * See [crate::doc::backend_safety] for safety contract.
258pub unsafe trait VecZnxMergeImpl<B: Backend> {
259    fn vec_znx_merge_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: Vec<A>, a_col: usize)
260    where
261        R: VecZnxToMut,
262        A: VecZnxToRef;
263}
264
265/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
266/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_switch_degree_ref] for reference code.
267/// * See [crate::hal::api::VecZnxSwithcDegree] for corresponding public API.
268/// * See [crate::doc::backend_safety] for safety contract.
269pub unsafe trait VecZnxSwithcDegreeImpl<B: Backend> {
270    fn vec_znx_switch_degree_impl<R: VecZnxToMut, A: VecZnxToRef>(
271        module: &Module<B>,
272        res: &mut R,
273        res_col: usize,
274        a: &A,
275        a_col: usize,
276    );
277}
278
279/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
280/// * See [crate::implementation::cpu_spqlios::vec_znx::vec_znx_copy_ref] for reference code.
281/// * See [crate::hal::api::VecZnxCopy] for corresponding public API.
282/// * See [crate::doc::backend_safety] for safety contract.
283pub unsafe trait VecZnxCopyImpl<B: Backend> {
284    fn vec_znx_copy_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
285    where
286        R: VecZnxToMut,
287        A: VecZnxToRef;
288}
289
290/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
291/// * See [crate::hal::api::VecZnxFillUniform] for corresponding public API.
292/// * See [crate::doc::backend_safety] for safety contract.
293pub unsafe trait VecZnxFillUniformImpl<B: Backend> {
294    fn vec_znx_fill_uniform_impl<R>(module: &Module<B>, basek: usize, res: &mut R, res_col: usize, k: usize, source: &mut Source)
295    where
296        R: VecZnxToMut;
297}
298
299/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
300/// * See [crate::hal::api::VecZnxFillDistF64] for corresponding public API.
301/// * See [crate::doc::backend_safety] for safety contract.
302pub unsafe trait VecZnxFillDistF64Impl<B: Backend> {
303    fn vec_znx_fill_dist_f64_impl<R, D: Distribution<f64>>(
304        module: &Module<B>,
305        basek: usize,
306        res: &mut R,
307        res_col: usize,
308        k: usize,
309        source: &mut Source,
310        dist: D,
311        bound: f64,
312    ) where
313        R: VecZnxToMut;
314}
315
316/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
317/// * See [crate::hal::api::VecZnxAddDistF64] for corresponding public API.
318/// * See [crate::doc::backend_safety] for safety contract.
319pub unsafe trait VecZnxAddDistF64Impl<B: Backend> {
320    fn vec_znx_add_dist_f64_impl<R, D: Distribution<f64>>(
321        module: &Module<B>,
322        basek: usize,
323        res: &mut R,
324        res_col: usize,
325        k: usize,
326        source: &mut Source,
327        dist: D,
328        bound: f64,
329    ) where
330        R: VecZnxToMut;
331}
332
333/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
334/// * See [crate::hal::api::VecZnxFillNormal] for corresponding public API.
335/// * See [crate::doc::backend_safety] for safety contract.
336pub unsafe trait VecZnxFillNormalImpl<B: Backend> {
337    fn vec_znx_fill_normal_impl<R>(
338        module: &Module<B>,
339        basek: usize,
340        res: &mut R,
341        res_col: usize,
342        k: usize,
343        source: &mut Source,
344        sigma: f64,
345        bound: f64,
346    ) where
347        R: VecZnxToMut;
348}
349
350/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
351/// * See [crate::hal::api::VecZnxAddNormal] for corresponding public API.
352/// * See [crate::doc::backend_safety] for safety contract.
353pub unsafe trait VecZnxAddNormalImpl<B: Backend> {
354    fn vec_znx_add_normal_impl<R>(
355        module: &Module<B>,
356        basek: usize,
357        res: &mut R,
358        res_col: usize,
359        k: usize,
360        source: &mut Source,
361        sigma: f64,
362        bound: f64,
363    ) where
364        R: VecZnxToMut;
365}