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