poulpy/backend/src/hal/oep/vec_znx_dft.rs
backend/src/hal/oep/vec_znx_dft.rsRaw
1use crate::hal::layouts::{
2 Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef,
3 VecZnxToRef,
4};
5
6pub unsafe trait VecZnxDftAllocImpl<B: Backend> {
7 fn vec_znx_dft_alloc_impl(n: usize, cols: usize, size: usize) -> VecZnxDftOwned<B>;
8}
9
10pub unsafe trait VecZnxDftFromBytesImpl<B: Backend> {
11 fn vec_znx_dft_from_bytes_impl(n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B>;
12}
13
14pub unsafe trait VecZnxDftAllocBytesImpl<B: Backend> {
15 fn vec_znx_dft_alloc_bytes_impl(n: usize, cols: usize, size: usize) -> usize;
16}
17
18pub unsafe trait VecZnxDftToVecZnxBigTmpBytesImpl<B: Backend> {
19 fn vec_znx_dft_to_vec_znx_big_tmp_bytes_impl(module: &Module<B>) -> usize;
20}
21
22pub unsafe trait VecZnxDftToVecZnxBigImpl<B: Backend> {
23 fn vec_znx_dft_to_vec_znx_big_impl<R, A>(
24 module: &Module<B>,
25 res: &mut R,
26 res_col: usize,
27 a: &A,
28 a_col: usize,
29 scratch: &mut Scratch<B>,
30 ) where
31 R: VecZnxBigToMut<B>,
32 A: VecZnxDftToRef<B>;
33}
34
35pub unsafe trait VecZnxDftToVecZnxBigTmpAImpl<B: Backend> {
36 fn vec_znx_dft_to_vec_znx_big_tmp_a_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &mut A, a_col: usize)
37 where
38 R: VecZnxBigToMut<B>,
39 A: VecZnxDftToMut<B>;
40}
41
42pub unsafe trait VecZnxDftToVecZnxBigConsumeImpl<B: Backend> {
43 fn vec_znx_dft_to_vec_znx_big_consume_impl<D: Data>(module: &Module<B>, a: VecZnxDft<D, B>) -> VecZnxBig<D, B>
44 where
45 VecZnxDft<D, B>: VecZnxDftToMut<B>;
46}
47
48pub unsafe trait VecZnxDftAddImpl<B: Backend> {
49 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)
50 where
51 R: VecZnxDftToMut<B>,
52 A: VecZnxDftToRef<B>,
53 D: VecZnxDftToRef<B>;
54}
55
56pub unsafe trait VecZnxDftAddInplaceImpl<B: Backend> {
57 fn vec_znx_dft_add_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
58 where
59 R: VecZnxDftToMut<B>,
60 A: VecZnxDftToRef<B>;
61}
62
63pub unsafe trait VecZnxDftSubImpl<B: Backend> {
64 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)
65 where
66 R: VecZnxDftToMut<B>,
67 A: VecZnxDftToRef<B>,
68 D: VecZnxDftToRef<B>;
69}
70
71pub unsafe trait VecZnxDftSubABInplaceImpl<B: Backend> {
72 fn vec_znx_dft_sub_ab_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
73 where
74 R: VecZnxDftToMut<B>,
75 A: VecZnxDftToRef<B>;
76}
77
78pub unsafe trait VecZnxDftSubBAInplaceImpl<B: Backend> {
79 fn vec_znx_dft_sub_ba_inplace_impl<R, A>(module: &Module<B>, res: &mut R, res_col: usize, a: &A, a_col: usize)
80 where
81 R: VecZnxDftToMut<B>,
82 A: VecZnxDftToRef<B>;
83}
84
85pub unsafe trait VecZnxDftCopyImpl<B: Backend> {
86 fn vec_znx_dft_copy_impl<R, A>(
87 module: &Module<B>,
88 step: usize,
89 offset: usize,
90 res: &mut R,
91 res_col: usize,
92 a: &A,
93 a_col: usize,
94 ) where
95 R: VecZnxDftToMut<B>,
96 A: VecZnxDftToRef<B>;
97}
98
99pub unsafe trait VecZnxDftFromVecZnxImpl<B: Backend> {
100 fn vec_znx_dft_from_vec_znx_impl<R, A>(
101 module: &Module<B>,
102 step: usize,
103 offset: usize,
104 res: &mut R,
105 res_col: usize,
106 a: &A,
107 a_col: usize,
108 ) where
109 R: VecZnxDftToMut<B>,
110 A: VecZnxToRef;
111}
112
113pub unsafe trait VecZnxDftZeroImpl<B: Backend> {
114 fn vec_znx_dft_zero_impl<R>(module: &Module<B>, res: &mut R)
115 where
116 R: VecZnxDftToMut<B>;
117}