poulpy_hal/delegates/
vec_znx_dft.rs

1use crate::{
2    api::{
3        VecZnxDftAdd, VecZnxDftAddInplace, VecZnxDftAlloc, VecZnxDftAllocBytes, VecZnxDftCopy, VecZnxDftFromBytes,
4        VecZnxDftFromVecZnx, VecZnxDftSub, VecZnxDftSubABInplace, VecZnxDftSubBAInplace, VecZnxDftToVecZnxBig,
5        VecZnxDftToVecZnxBigConsume, VecZnxDftToVecZnxBigTmpA, VecZnxDftToVecZnxBigTmpBytes, VecZnxDftZero,
6    },
7    layouts::{
8        Backend, Data, Module, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef,
9        VecZnxToRef,
10    },
11    oep::{
12        VecZnxDftAddImpl, VecZnxDftAddInplaceImpl, VecZnxDftAllocBytesImpl, VecZnxDftAllocImpl, VecZnxDftCopyImpl,
13        VecZnxDftFromBytesImpl, VecZnxDftFromVecZnxImpl, VecZnxDftSubABInplaceImpl, VecZnxDftSubBAInplaceImpl, VecZnxDftSubImpl,
14        VecZnxDftToVecZnxBigConsumeImpl, VecZnxDftToVecZnxBigImpl, VecZnxDftToVecZnxBigTmpAImpl,
15        VecZnxDftToVecZnxBigTmpBytesImpl, VecZnxDftZeroImpl,
16    },
17};
18
19impl<B> VecZnxDftFromBytes<B> for Module<B>
20where
21    B: Backend + VecZnxDftFromBytesImpl<B>,
22{
23    fn vec_znx_dft_from_bytes(&self, n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B> {
24        B::vec_znx_dft_from_bytes_impl(n, cols, size, bytes)
25    }
26}
27
28impl<B> VecZnxDftAllocBytes for Module<B>
29where
30    B: Backend + VecZnxDftAllocBytesImpl<B>,
31{
32    fn vec_znx_dft_alloc_bytes(&self, n: usize, cols: usize, size: usize) -> usize {
33        B::vec_znx_dft_alloc_bytes_impl(n, cols, size)
34    }
35}
36
37impl<B> VecZnxDftAlloc<B> for Module<B>
38where
39    B: Backend + VecZnxDftAllocImpl<B>,
40{
41    fn vec_znx_dft_alloc(&self, n: usize, cols: usize, size: usize) -> VecZnxDftOwned<B> {
42        B::vec_znx_dft_alloc_impl(n, cols, size)
43    }
44}
45
46impl<B> VecZnxDftToVecZnxBigTmpBytes for Module<B>
47where
48    B: Backend + VecZnxDftToVecZnxBigTmpBytesImpl<B>,
49{
50    fn vec_znx_dft_to_vec_znx_big_tmp_bytes(&self, n: usize) -> usize {
51        B::vec_znx_dft_to_vec_znx_big_tmp_bytes_impl(self, n)
52    }
53}
54
55impl<B> VecZnxDftToVecZnxBig<B> for Module<B>
56where
57    B: Backend + VecZnxDftToVecZnxBigImpl<B>,
58{
59    fn vec_znx_dft_to_vec_znx_big<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, scratch: &mut Scratch<B>)
60    where
61        R: VecZnxBigToMut<B>,
62        A: VecZnxDftToRef<B>,
63    {
64        B::vec_znx_dft_to_vec_znx_big_impl(self, res, res_col, a, a_col, scratch);
65    }
66}
67
68impl<B> VecZnxDftToVecZnxBigTmpA<B> for Module<B>
69where
70    B: Backend + VecZnxDftToVecZnxBigTmpAImpl<B>,
71{
72    fn vec_znx_dft_to_vec_znx_big_tmp_a<R, A>(&self, res: &mut R, res_col: usize, a: &mut A, a_col: usize)
73    where
74        R: VecZnxBigToMut<B>,
75        A: VecZnxDftToMut<B>,
76    {
77        B::vec_znx_dft_to_vec_znx_big_tmp_a_impl(self, res, res_col, a, a_col);
78    }
79}
80
81impl<B> VecZnxDftToVecZnxBigConsume<B> for Module<B>
82where
83    B: Backend + VecZnxDftToVecZnxBigConsumeImpl<B>,
84{
85    fn vec_znx_dft_to_vec_znx_big_consume<D: Data>(&self, a: VecZnxDft<D, B>) -> VecZnxBig<D, B>
86    where
87        VecZnxDft<D, B>: VecZnxDftToMut<B>,
88    {
89        B::vec_znx_dft_to_vec_znx_big_consume_impl(self, a)
90    }
91}
92
93impl<B> VecZnxDftFromVecZnx<B> for Module<B>
94where
95    B: Backend + VecZnxDftFromVecZnxImpl<B>,
96{
97    fn vec_znx_dft_from_vec_znx<R, A>(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize)
98    where
99        R: VecZnxDftToMut<B>,
100        A: VecZnxToRef,
101    {
102        B::vec_znx_dft_from_vec_znx_impl(self, step, offset, res, res_col, a, a_col);
103    }
104}
105
106impl<B> VecZnxDftAdd<B> for Module<B>
107where
108    B: Backend + VecZnxDftAddImpl<B>,
109{
110    fn vec_znx_dft_add<R, A, D>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize)
111    where
112        R: VecZnxDftToMut<B>,
113        A: VecZnxDftToRef<B>,
114        D: VecZnxDftToRef<B>,
115    {
116        B::vec_znx_dft_add_impl(self, res, res_col, a, a_col, b, b_col);
117    }
118}
119
120impl<B> VecZnxDftAddInplace<B> for Module<B>
121where
122    B: Backend + VecZnxDftAddInplaceImpl<B>,
123{
124    fn vec_znx_dft_add_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
125    where
126        R: VecZnxDftToMut<B>,
127        A: VecZnxDftToRef<B>,
128    {
129        B::vec_znx_dft_add_inplace_impl(self, res, res_col, a, a_col);
130    }
131}
132
133impl<B> VecZnxDftSub<B> for Module<B>
134where
135    B: Backend + VecZnxDftSubImpl<B>,
136{
137    fn vec_znx_dft_sub<R, A, D>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &D, b_col: usize)
138    where
139        R: VecZnxDftToMut<B>,
140        A: VecZnxDftToRef<B>,
141        D: VecZnxDftToRef<B>,
142    {
143        B::vec_znx_dft_sub_impl(self, res, res_col, a, a_col, b, b_col);
144    }
145}
146
147impl<B> VecZnxDftSubABInplace<B> for Module<B>
148where
149    B: Backend + VecZnxDftSubABInplaceImpl<B>,
150{
151    fn vec_znx_dft_sub_ab_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
152    where
153        R: VecZnxDftToMut<B>,
154        A: VecZnxDftToRef<B>,
155    {
156        B::vec_znx_dft_sub_ab_inplace_impl(self, res, res_col, a, a_col);
157    }
158}
159
160impl<B> VecZnxDftSubBAInplace<B> for Module<B>
161where
162    B: Backend + VecZnxDftSubBAInplaceImpl<B>,
163{
164    fn vec_znx_dft_sub_ba_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
165    where
166        R: VecZnxDftToMut<B>,
167        A: VecZnxDftToRef<B>,
168    {
169        B::vec_znx_dft_sub_ba_inplace_impl(self, res, res_col, a, a_col);
170    }
171}
172
173impl<B> VecZnxDftCopy<B> for Module<B>
174where
175    B: Backend + VecZnxDftCopyImpl<B>,
176{
177    fn vec_znx_dft_copy<R, A>(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize)
178    where
179        R: VecZnxDftToMut<B>,
180        A: VecZnxDftToRef<B>,
181    {
182        B::vec_znx_dft_copy_impl(self, step, offset, res, res_col, a, a_col);
183    }
184}
185
186impl<B> VecZnxDftZero<B> for Module<B>
187where
188    B: Backend + VecZnxDftZeroImpl<B>,
189{
190    fn vec_znx_dft_zero<R>(&self, res: &mut R)
191    where
192        R: VecZnxDftToMut<B>,
193    {
194        B::vec_znx_dft_zero_impl(self, res);
195    }
196}