arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/oep/vec_znx_big.rs
poulpy-hal/src/oep/vec_znx_big.rsRaw
  1use rand_distr::Distribution;
  2
  3use crate::{
  4    layouts::{Backend, Module, Scratch, VecZnxBigOwned, VecZnxBigToMut, VecZnxBigToRef, VecZnxToMut, VecZnxToRef},
  5    source::Source,
  6};
  7
  8/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
  9/// * See TODO for reference code.
 10/// * See TODO for corresponding public API.
 11/// # Safety [crate::doc::backend_safety] for safety contract.
 12pub unsafe trait VecZnxBigAllocImpl<B: Backend> {
 13    fn vec_znx_big_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxBigOwned<B>;
 14}
 15
 16/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 17/// * See TODO for reference code.
 18/// * See TODO for corresponding public API.
 19/// # Safety [crate::doc::backend_safety] for safety contract.
 20pub unsafe trait VecZnxBigFromBytesImpl<B: Backend> {
 21    fn vec_znx_big_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxBigOwned<B>;
 22}
 23
 24/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 25/// * See TODO for reference code.
 26/// * See TODO for corresponding public API.
 27/// # Safety [crate::doc::backend_safety] for safety contract.
 28pub unsafe trait VecZnxBigAllocBytesImpl<B: Backend> {
 29    fn vec_znx_big_alloc_bytes_impl(n: usize, cols: usize, size: usize) -> usize;
 30}
 31
 32#[allow(clippy::too_many_arguments)]
 33/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 34/// * See TODO for reference code.
 35/// * See TODO for corresponding public API.
 36/// # Safety [crate::doc::backend_safety] for safety contract.
 37pub unsafe trait VecZnxBigAddNormalImpl<B: Backend> {
 38    fn add_normal_impl<R: VecZnxBigToMut<B>>(
 39        module: &Module<B>,
 40        basek: usize,
 41        res: &mut R,
 42        res_col: usize,
 43        k: usize,
 44        source: &mut Source,
 45        sigma: f64,
 46        bound: f64,
 47    );
 48}
 49
 50#[allow(clippy::too_many_arguments)]
 51/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 52/// * See TODO for reference code.
 53/// * See TODO for corresponding public API.
 54/// # Safety [crate::doc::backend_safety] for safety contract.
 55pub unsafe trait VecZnxBigFillNormalImpl<B: Backend> {
 56    fn fill_normal_impl<R: VecZnxBigToMut<B>>(
 57        module: &Module<B>,
 58        basek: usize,
 59        res: &mut R,
 60        res_col: usize,
 61        k: usize,
 62        source: &mut Source,
 63        sigma: f64,
 64        bound: f64,
 65    );
 66}
 67
 68#[allow(clippy::too_many_arguments)]
 69/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 70/// * See TODO for reference code.
 71/// * See TODO for corresponding public API.
 72/// # Safety [crate::doc::backend_safety] for safety contract.
 73pub unsafe trait VecZnxBigFillDistF64Impl<B: Backend> {
 74    fn fill_dist_f64_impl<R: VecZnxBigToMut<B>, D: Distribution<f64>>(
 75        module: &Module<B>,
 76        basek: usize,
 77        res: &mut R,
 78        res_col: usize,
 79        k: usize,
 80        source: &mut Source,
 81        dist: D,
 82        bound: f64,
 83    );
 84}
 85
 86#[allow(clippy::too_many_arguments)]
 87/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
 88/// * See TODO for reference code.
 89/// * See TODO for corresponding public API.
 90/// # Safety [crate::doc::backend_safety] for safety contract.
 91pub unsafe trait VecZnxBigAddDistF64Impl<B: Backend> {
 92    fn add_dist_f64_impl<R: VecZnxBigToMut<B>, D: Distribution<f64>>(
 93        module: &Module<B>,
 94        basek: usize,
 95        res: &mut R,
 96        res_col: usize,
 97        k: usize,
 98        source: &mut Source,
 99        dist: D,
100        bound: f64,
101    );
102}
103
104/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
105/// * See TODO for reference code.
106/// * See TODO for corresponding public API.
107/// # Safety [crate::doc::backend_safety] for safety contract.
108pub unsafe trait VecZnxBigAddImpl<B: Backend> {
109    fn vec_znx_big_add_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
110    where
111        R: VecZnxBigToMut<B>,
112        A: VecZnxBigToRef<B>,
113        C: VecZnxBigToRef<B>;
114}
115
116/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
117/// * See TODO for reference code.
118/// * See TODO for corresponding public API.
119/// # Safety [crate::doc::backend_safety] for safety contract.
120pub unsafe trait VecZnxBigAddInplaceImpl<B: Backend> {
121    fn vec_znx_big_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
122    where
123        R: VecZnxBigToMut<B>,
124        A: VecZnxBigToRef<B>;
125}
126
127/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
128/// * See TODO for reference code.
129/// * See TODO for corresponding public API.
130/// # Safety [crate::doc::backend_safety] for safety contract.
131pub unsafe trait VecZnxBigAddSmallImpl<B: Backend> {
132    fn vec_znx_big_add_small_impl<R, A, C>(
133        module: &Module<B>,
134        res: &mut R,
135        res_col: usize,
136        a: &A,
137        a_col: usize,
138        b: &C,
139        b_col: usize,
140    ) where
141        R: VecZnxBigToMut<B>,
142        A: VecZnxBigToRef<B>,
143        C: VecZnxToRef;
144}
145
146/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
147/// * See TODO for reference code.
148/// * See TODO for corresponding public API.
149/// # Safety [crate::doc::backend_safety] for safety contract.
150pub unsafe trait VecZnxBigAddSmallInplaceImpl<B: Backend> {
151    fn vec_znx_big_add_small_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
152    where
153        R: VecZnxBigToMut<B>,
154        A: VecZnxToRef;
155}
156
157/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
158/// * See TODO for reference code.
159/// * See TODO for corresponding public API.
160/// # Safety [crate::doc::backend_safety] for safety contract.
161pub unsafe trait VecZnxBigSubImpl<B: Backend> {
162    fn vec_znx_big_sub_impl<R, A, C>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &C, b_col: usize)
163    where
164        R: VecZnxBigToMut<B>,
165        A: VecZnxBigToRef<B>,
166        C: VecZnxBigToRef<B>;
167}
168
169/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
170/// * See TODO for reference code.
171/// * See TODO for corresponding public API.
172/// # Safety [crate::doc::backend_safety] for safety contract.
173pub unsafe trait VecZnxBigSubABInplaceImpl<B: Backend> {
174    fn vec_znx_big_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
175    where
176        R: VecZnxBigToMut<B>,
177        A: VecZnxBigToRef<B>;
178}
179
180/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
181/// * See TODO for reference code.
182/// * See TODO for corresponding public API.
183/// # Safety [crate::doc::backend_safety] for safety contract.
184pub unsafe trait VecZnxBigSubBAInplaceImpl<B: Backend> {
185    fn vec_znx_big_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
186    where
187        R: VecZnxBigToMut<B>,
188        A: VecZnxBigToRef<B>;
189}
190
191/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
192/// * See TODO for reference code.
193/// * See TODO for corresponding public API.
194/// # Safety [crate::doc::backend_safety] for safety contract.
195pub unsafe trait VecZnxBigSubSmallAImpl<B: Backend> {
196    fn vec_znx_big_sub_small_a_impl<R, A, C>(
197        module: &Module<B>,
198        res: &mut R,
199        res_col: usize,
200        a: &A,
201        a_col: usize,
202        b: &C,
203        b_col: usize,
204    ) where
205        R: VecZnxBigToMut<B>,
206        A: VecZnxToRef,
207        C: VecZnxBigToRef<B>;
208}
209
210/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
211/// * See TODO for reference code.
212/// * See TODO for corresponding public API.
213/// # Safety [crate::doc::backend_safety] for safety contract.
214pub unsafe trait VecZnxBigSubSmallAInplaceImpl<B: Backend> {
215    fn vec_znx_big_sub_small_a_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
216    where
217        R: VecZnxBigToMut<B>,
218        A: VecZnxToRef;
219}
220
221/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
222/// * See TODO for reference code.
223/// * See TODO for corresponding public API.
224/// # Safety [crate::doc::backend_safety] for safety contract.
225pub unsafe trait VecZnxBigSubSmallBImpl<B: Backend> {
226    fn vec_znx_big_sub_small_b_impl<R, A, C>(
227        module: &Module<B>,
228        res: &mut R,
229        res_col: usize,
230        a: &A,
231        a_col: usize,
232        b: &C,
233        b_col: usize,
234    ) where
235        R: VecZnxBigToMut<B>,
236        A: VecZnxBigToRef<B>,
237        C: VecZnxToRef;
238}
239
240/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
241/// * See TODO for reference code.
242/// * See TODO for corresponding public API.
243/// # Safety [crate::doc::backend_safety] for safety contract.
244pub unsafe trait VecZnxBigSubSmallBInplaceImpl<B: Backend> {
245    fn vec_znx_big_sub_small_b_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
246    where
247        R: VecZnxBigToMut<B>,
248        A: VecZnxToRef;
249}
250
251/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
252/// * See TODO for reference code.
253/// * See TODO for corresponding public API.
254/// # Safety [crate::doc::backend_safety] for safety contract.
255pub unsafe trait VecZnxBigNegateInplaceImpl<B: Backend> {
256    fn vec_znx_big_negate_inplace_impl<A>(module: &Module<B>, a: &mut A, a_col: usize)
257    where
258        A: VecZnxBigToMut<B>;
259}
260
261/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
262/// * See TODO for reference code.
263/// * See TODO for corresponding public API.
264/// # Safety [crate::doc::backend_safety] for safety contract.
265pub unsafe trait VecZnxBigNormalizeTmpBytesImpl<B: Backend> {
266    fn vec_znx_big_normalize_tmp_bytes_impl(module: &Module<B>, n: usize) -> usize;
267}
268
269/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
270/// * See TODO for reference code.
271/// * See TODO for corresponding public API.
272/// # Safety [crate::doc::backend_safety] for safety contract.
273pub unsafe trait VecZnxBigNormalizeImpl<B: Backend> {
274    fn vec_znx_big_normalize_impl<R, A>(
275        module: &Module<B>,
276        basek: usize,
277        res: &mut R,
278        res_col: usize,
279        a: &A,
280        a_col: usize,
281        scratch: &mut Scratch<B>,
282    ) where
283        R: VecZnxToMut,
284        A: VecZnxBigToRef<B>;
285}
286
287/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
288/// * See TODO for reference code.
289/// * See TODO for corresponding public API.
290/// # Safety [crate::doc::backend_safety] for safety contract.
291pub unsafe trait VecZnxBigAutomorphismImpl<B: Backend> {
292    fn vec_znx_big_automorphism_impl<R, A>(module: &Module<B>, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
293    where
294        R: VecZnxBigToMut<B>,
295        A: VecZnxBigToRef<B>;
296}
297
298/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
299/// * See TODO for reference code.
300/// * See TODO for corresponding public API.
301/// # Safety [crate::doc::backend_safety] for safety contract.
302pub unsafe trait VecZnxBigAutomorphismInplaceImpl<B: Backend> {
303    fn vec_znx_big_automorphism_inplace_impl<A>(module: &Module<B>, k: i64, a: &mut A, a_col: usize)
304    where
305        A: VecZnxBigToMut<B>;
306}