arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/oep/svp_ppol.rs
poulpy-hal/src/oep/svp_ppol.rsRaw
 1use crate::layouts::{
 2    Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef,
 3};
 4
 5/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 6/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
 7/// * See [crate::api::SvpPPolFromBytes] for corresponding public API.
 8/// # Safety [crate::doc::backend_safety] for safety contract.
 9pub unsafe trait SvpPPolFromBytesImpl<B: Backend> {
10    fn svp_ppol_from_bytes_impl(n: usize, cols: usize, bytes: Vec<u8>) -> SvpPPolOwned<B>;
11}
12
13/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
14/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
15/// * See [crate::api::SvpPPolAlloc] for corresponding public API.
16/// # Safety [crate::doc::backend_safety] for safety contract.
17pub unsafe trait SvpPPolAllocImpl<B: Backend> {
18    fn svp_ppol_alloc_impl(n: usize, cols: usize) -> SvpPPolOwned<B>;
19}
20
21/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
22/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
23/// * See [crate::api::SvpPPolAllocBytes] for corresponding public API.
24/// # Safety [crate::doc::backend_safety] for safety contract.
25pub unsafe trait SvpPPolAllocBytesImpl<B: Backend> {
26    fn svp_ppol_bytes_of_impl(n: usize, cols: usize) -> usize;
27}
28
29/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
30/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
31/// * See [crate::api::SvpPrepare] for corresponding public API.
32/// # Safety [crate::doc::backend_safety] for safety contract.
33pub unsafe trait SvpPrepareImpl<B: Backend> {
34    fn svp_prepare_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
35    where
36        R: SvpPPolToMut<B>,
37        A: ScalarZnxToRef;
38}
39
40/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
41/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
42/// * See [crate::api::SvpApplyDft] for corresponding public API.
43/// # Safety [crate::doc::backend_safety] for safety contract.
44pub unsafe trait SvpApplyDftImpl<B: Backend> {
45    fn svp_apply_dft_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
46    where
47        R: VecZnxDftToMut<B>,
48        A: SvpPPolToRef<B>,
49        C: VecZnxToRef;
50}
51
52/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
53/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
54/// * See [crate::api::SvpApplyDftToDft] for corresponding public API.
55/// # Safety [crate::doc::backend_safety] for safety contract.
56pub unsafe trait SvpApplyDftToDftImpl<B: Backend> {
57    fn svp_apply_dft_to_dft_impl<R, A, C>(
58        module: &Module<B>,
59        res: &mut R,
60        res_col: usize,
61        a: &A,
62        a_col: usize,
63        b: &C,
64        b_col: usize,
65    ) where
66        R: VecZnxDftToMut<B>,
67        A: SvpPPolToRef<B>,
68        C: VecZnxDftToRef<B>;
69}
70
71/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
72/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
73/// * See [crate::api::SvpApplyDftToDftAdd] for corresponding public API.
74/// # Safety [crate::doc::backend_safety] for safety contract.
75pub unsafe trait SvpApplyDftToDftAddImpl<B: Backend> {
76    fn svp_apply_dft_to_dft_add_impl<R, A, C>(
77        module: &Module<B>,
78        res: &mut R,
79        res_col: usize,
80        a: &A,
81        a_col: usize,
82        b: &C,
83        b_col: usize,
84    ) where
85        R: VecZnxDftToMut<B>,
86        A: SvpPPolToRef<B>,
87        C: VecZnxDftToRef<B>;
88}
89
90/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
91/// * See the [poulpy-backend/src/cpu_fft64_ref/svp.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/svp.rs) reference implementation.
92/// * See [crate::api::SvpApplyDftToDftInplace] for corresponding public API.
93/// # Safety [crate::doc::backend_safety] for safety contract.
94pub unsafe trait SvpApplyDftToDftInplaceImpl: Backend {
95    fn svp_apply_dft_to_dft_inplace_impl<R, A>(module: &Module<Self>, res: &mut R, res_col: usize, a: &A, a_col: usize)
96    where
97        R: VecZnxDftToMut<Self>,
98        A: SvpPPolToRef<Self>;
99}