arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}