poulpy/poulpy-hal/src/oep/vec_znx_dft.rs
poulpy-hal/src/oep/vec_znx_dft.rsRaw
1use crate::layouts::{
2 Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef,
3 VecZnxToRef,
4};
5
6/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
7/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
8/// * See [crate::api::VecZnxDftAlloc] for corresponding public API.
9/// # Safety [crate::doc::backend_safety] for safety contract.
10pub unsafe trait VecZnxDftAllocImpl<B: Backend> {
11 fn vec_znx_dft_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxDftOwned<B>;
12}
13
14/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
15/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
16/// * See [crate::api::VecZnxDftFromBytes] for corresponding public API.
17/// # Safety [crate::doc::backend_safety] for safety contract.
18pub unsafe trait VecZnxDftFromBytesImpl<B: Backend> {
19 fn vec_znx_dft_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B>;
20}
21
22/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
23/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
24/// * See [crate::api::VecZnxDftApply] for corresponding public API.
25/// # Safety [crate::doc::backend_safety] for safety contract.
26pub unsafe trait VecZnxDftApplyImpl<B: Backend> {
27 fn vec_znx_dft_apply_impl<R, A>(
28 module: &Module<B>,
29 step: usize,
30 offset: usize,
31 res: &mut R,
32 res_col: usize,
33 a: &A,
34 a_col: usize,
35 ) where
36 R: VecZnxDftToMut<B>,
37 A: VecZnxToRef;
38}
39
40/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
41/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
42/// * See [crate::api::VecZnxDftAllocBytes] for corresponding public API.
43/// # Safety [crate::doc::backend_safety] for safety contract.
44pub unsafe trait VecZnxDftAllocBytesImpl<B: Backend> {
45 fn vec_znx_dft_bytes_of_impl(n: usize, cols: usize, size: usize) -> usize;
46}
47
48/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
49/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
50/// * See [crate::api::VecZnxIdftApplyTmpBytes] for corresponding public API.
51/// # Safety [crate::doc::backend_safety] for safety contract.
52pub unsafe trait VecZnxIdftApplyTmpBytesImpl<B: Backend> {
53 fn vec_znx_idft_apply_tmp_bytes_impl(module: &Module<B>) -> usize;
54}
55
56/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
57/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
58/// * See [crate::api::VecZnxIdftApply] for corresponding public API.
59/// # Safety [crate::doc::backend_safety] for safety contract.
60pub unsafe trait VecZnxIdftApplyImpl<B: Backend> {
61 fn vec_znx_idft_apply_impl<R, A>(
62 module: &Module<B>,
63 res: &mut R,
64 res_col: usize,
65 a: &A,
66 a_col: usize,
67 scratch: &mut Scratch<B>,
68 ) where
69 R: VecZnxBigToMut<B>,
70 A: VecZnxDftToRef<B>;
71}
72
73/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
74/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
75/// * See [crate::api::VecZnxIdftApplyTmpA] for corresponding public API.
76/// # Safety [crate::doc::backend_safety] for safety contract.
77pub unsafe trait VecZnxIdftApplyTmpAImpl<B: Backend> {
78 fn vec_znx_idft_apply_tmpa_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &mut A, a_col: usize)
79 where
80 R: VecZnxBigToMut<B>,
81 A: VecZnxDftToMut<B>;
82}
83
84/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
85/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
86/// * See [crate::api::VecZnxIdftApplyConsume] for corresponding public API.
87/// # Safety [crate::doc::backend_safety] for safety contract.
88pub unsafe trait VecZnxIdftApplyConsumeImpl<B: Backend> {
89 fn vec_znx_idft_apply_consume_impl<D: Data>(module: &Module<B>, a: VecZnxDft<D, B>) -> VecZnxBig<D, B>
90 where
91 VecZnxDft<D, B>: VecZnxDftToMut<B>;
92}
93
94/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
95/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
96/// * See [crate::api::VecZnxDftAdd] for corresponding public API.
97/// # Safety [crate::doc::backend_safety] for safety contract.
98pub unsafe trait VecZnxDftAddImpl<B: Backend> {
99 fn vec_znx_dft_add_impl<R, A, D>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize)
100 where
101 R: VecZnxDftToMut<B>,
102 A: VecZnxDftToRef<B>,
103 D: VecZnxDftToRef<B>;
104}
105
106/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
107/// * See TODO reference implementation.
108/// * See [crate::api::VecZnxDftAddScaledInplace] for corresponding public API.
109/// # Safety [crate::doc::backend_safety] for safety contract.
110pub unsafe trait VecZnxDftAddScaledInplaceImpl<B: Backend> {
111 fn vec_znx_dft_add_scaled_inplace_impl<R, A>(
112 module: &Module<B>,
113 res: &mut R,
114 res_col: usize,
115 a: &A,
116 a_col: usize,
117 a_scale: i64,
118 ) where
119 R: VecZnxDftToMut<B>,
120 A: VecZnxDftToRef<B>;
121}
122
123/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
124/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
125/// * See [crate::api::VecZnxDftAddInplace] for corresponding public API.
126/// # Safety [crate::doc::backend_safety] for safety contract.
127pub unsafe trait VecZnxDftAddInplaceImpl<B: Backend> {
128 fn vec_znx_dft_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
129 where
130 R: VecZnxDftToMut<B>,
131 A: VecZnxDftToRef<B>;
132}
133
134/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
135/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
136/// * See [crate::api::VecZnxDftSub] for corresponding public API.
137/// # Safety [crate::doc::backend_safety] for safety contract.
138pub unsafe trait VecZnxDftSubImpl<B: Backend> {
139 fn vec_znx_dft_sub_impl<R, A, D>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize)
140 where
141 R: VecZnxDftToMut<B>,
142 A: VecZnxDftToRef<B>,
143 D: VecZnxDftToRef<B>;
144}
145
146/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
147/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
148/// * See [crate::api::VecZnxDftSubInplace] for corresponding public API.
149/// # Safety [crate::doc::backend_safety] for safety contract.
150pub unsafe trait VecZnxDftSubInplaceImpl<B: Backend> {
151 fn vec_znx_dft_sub_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
152 where
153 R: VecZnxDftToMut<B>,
154 A: VecZnxDftToRef<B>;
155}
156
157/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
158/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
159/// * See [crate::api::VecZnxDftSubNegateInplace] for corresponding public API.
160/// # Safety [crate::doc::backend_safety] for safety contract.
161pub unsafe trait VecZnxDftSubNegateInplaceImpl<B: Backend> {
162 fn vec_znx_dft_sub_negate_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
163 where
164 R: VecZnxDftToMut<B>,
165 A: VecZnxDftToRef<B>;
166}
167
168/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
169/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
170/// * See [crate::api::VecZnxDftCopy] for corresponding public API.
171/// # Safety [crate::doc::backend_safety] for safety contract.
172pub unsafe trait VecZnxDftCopyImpl<B: Backend> {
173 fn vec_znx_dft_copy_impl<R, A>(
174 module: &Module<B>,
175 step: usize,
176 offset: usize,
177 res: &mut R,
178 res_col: usize,
179 a: &A,
180 a_col: usize,
181 ) where
182 R: VecZnxDftToMut<B>,
183 A: VecZnxDftToRef<B>;
184}
185
186/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
187/// * See the [poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs](https://github.com/phantomzone-org/poulpy/blob/main/poulpy-backend/src/cpu_fft64_ref/vec_znx_dft.rs) reference implementation.
188/// * See [crate::api::VecZnxDftZero] for corresponding public API.
189/// # Safety [crate::doc::backend_safety] for safety contract.
190pub unsafe trait VecZnxDftZeroImpl<B: Backend> {
191 fn vec_znx_dft_zero_impl<R>(module: &Module<B>, res: &mut R)
192 where
193 R: VecZnxDftToMut<B>;
194}