poulpy/poulpy-hal/src/oep/zn.rs
poulpy-hal/src/oep/zn.rsRaw
1use rand_distr::Distribution;
2
3use crate::{
4 layouts::{Backend, Scratch, ZnToMut},
5 source::Source,
6};
7
8/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
9/// * See [zn_normalize_base2k_ref](https://github.com/phantomzone-org/spqlios-arithmetic/blob/32a3f5fcce9863b58e949f2dfd5abc1bfbaa09b4/spqlios/arithmetic/zn64.c#L9) for reference code.
10/// * See [crate::api::ZnxNormalizeInplace] for corresponding public API.
11/// # Safety [crate::doc::backend_safety] for safety contract.
12pub unsafe trait ZnNormalizeInplaceImpl<B: Backend> {
13 fn zn_normalize_inplace_impl<A>(n: usize, basek: usize, a: &mut A, a_col: usize, scratch: &mut Scratch<B>)
14 where
15 A: ZnToMut;
16}
17
18/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
19/// * See [crate::api::ZnFillUniform] for corresponding public API.
20/// # Safety [crate::doc::backend_safety] for safety contract.
21pub unsafe trait ZnFillUniformImpl<B: Backend> {
22 fn zn_fill_uniform_impl<R>(n: usize, basek: usize, res: &mut R, res_col: usize, k: usize, source: &mut Source)
23 where
24 R: ZnToMut;
25}
26
27#[allow(clippy::too_many_arguments)]
28/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
29/// * See [crate::api::ZnFillDistF64] for corresponding public API.
30/// # Safety [crate::doc::backend_safety] for safety contract.
31pub unsafe trait ZnFillDistF64Impl<B: Backend> {
32 fn zn_fill_dist_f64_impl<R, D: Distribution<f64>>(
33 n: usize,
34 basek: usize,
35 res: &mut R,
36 res_col: usize,
37 k: usize,
38 source: &mut Source,
39 dist: D,
40 bound: f64,
41 ) where
42 R: ZnToMut;
43}
44
45#[allow(clippy::too_many_arguments)]
46/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
47/// * See [crate::api::ZnAddDistF64] for corresponding public API.
48/// # Safety [crate::doc::backend_safety] for safety contract.
49pub unsafe trait ZnAddDistF64Impl<B: Backend> {
50 fn zn_add_dist_f64_impl<R, D: Distribution<f64>>(
51 n: usize,
52 basek: usize,
53 res: &mut R,
54 res_col: usize,
55 k: usize,
56 source: &mut Source,
57 dist: D,
58 bound: f64,
59 ) where
60 R: ZnToMut;
61}
62
63#[allow(clippy::too_many_arguments)]
64/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
65/// * See [crate::api::ZnFillNormal] for corresponding public API.
66/// # Safety [crate::doc::backend_safety] for safety contract.
67pub unsafe trait ZnFillNormalImpl<B: Backend> {
68 fn zn_fill_normal_impl<R>(
69 n: usize,
70 basek: usize,
71 res: &mut R,
72 res_col: usize,
73 k: usize,
74 source: &mut Source,
75 sigma: f64,
76 bound: f64,
77 ) where
78 R: ZnToMut;
79}
80
81#[allow(clippy::too_many_arguments)]
82/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
83/// * See [crate::api::ZnAddNormal] for corresponding public API.
84/// # Safety [crate::doc::backend_safety] for safety contract.
85pub unsafe trait ZnAddNormalImpl<B: Backend> {
86 fn zn_add_normal_impl<R>(
87 n: usize,
88 basek: usize,
89 res: &mut R,
90 res_col: usize,
91 k: usize,
92 source: &mut Source,
93 sigma: f64,
94 bound: f64,
95 ) where
96 R: ZnToMut;
97}