poulpy_hal/api/
vec_znx_dft.rs

1use crate::layouts::{
2    Backend, Data, Scratch, VecZnxBig, VecZnxBigToMut, VecZnxDft, VecZnxDftOwned, VecZnxDftToMut, VecZnxDftToRef, VecZnxToRef,
3};
4
5pub trait VecZnxDftAlloc<B: Backend> {
6    fn vec_znx_dft_alloc(&self, cols: usize, size: usize) -> VecZnxDftOwned<B>;
7}
8
9pub trait VecZnxDftFromBytes<B: Backend> {
10    fn vec_znx_dft_from_bytes(&self, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B>;
11}
12
13pub trait VecZnxDftBytesOf {
14    fn bytes_of_vec_znx_dft(&self, cols: usize, size: usize) -> usize;
15}
16
17pub trait VecZnxDftApply<B: Backend> {
18    fn vec_znx_dft_apply<R, A>(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize)
19    where
20        R: VecZnxDftToMut<B>,
21        A: VecZnxToRef;
22}
23
24pub trait VecZnxIdftApplyTmpBytes {
25    fn vec_znx_idft_apply_tmp_bytes(&self) -> usize;
26}
27
28pub trait VecZnxIdftApply<B: Backend> {
29    fn vec_znx_idft_apply<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, scratch: &mut Scratch<B>)
30    where
31        R: VecZnxBigToMut<B>,
32        A: VecZnxDftToRef<B>;
33}
34
35pub trait VecZnxIdftApplyTmpA<B: Backend> {
36    fn vec_znx_idft_apply_tmpa<R, A>(&self, 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 trait VecZnxIdftApplyConsume<B: Backend> {
43    fn vec_znx_idft_apply_consume<D: Data>(&self, a: VecZnxDft<D, B>) -> VecZnxBig<D, B>
44    where
45        VecZnxDft<D, B>: VecZnxDftToMut<B>;
46}
47
48pub trait VecZnxDftAdd<B: Backend> {
49    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)
50    where
51        R: VecZnxDftToMut<B>,
52        A: VecZnxDftToRef<B>,
53        D: VecZnxDftToRef<B>;
54}
55
56pub trait VecZnxDftAddInplace<B: Backend> {
57    fn vec_znx_dft_add_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
58    where
59        R: VecZnxDftToMut<B>,
60        A: VecZnxDftToRef<B>;
61}
62
63pub trait VecZnxDftAddScaledInplace<B: Backend> {
64    fn vec_znx_dft_add_scaled_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize, a_scale: i64)
65    where
66        R: VecZnxDftToMut<B>,
67        A: VecZnxDftToRef<B>;
68}
69
70pub trait VecZnxDftSub<B: Backend> {
71    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)
72    where
73        R: VecZnxDftToMut<B>,
74        A: VecZnxDftToRef<B>,
75        D: VecZnxDftToRef<B>;
76}
77
78pub trait VecZnxDftSubInplace<B: Backend> {
79    fn vec_znx_dft_sub_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
80    where
81        R: VecZnxDftToMut<B>,
82        A: VecZnxDftToRef<B>;
83}
84
85pub trait VecZnxDftSubNegateInplace<B: Backend> {
86    fn vec_znx_dft_sub_negate_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
87    where
88        R: VecZnxDftToMut<B>,
89        A: VecZnxDftToRef<B>;
90}
91
92pub trait VecZnxDftCopy<B: Backend> {
93    fn vec_znx_dft_copy<R, A>(&self, step: usize, offset: usize, res: &mut R, res_col: usize, a: &A, a_col: usize)
94    where
95        R: VecZnxDftToMut<B>,
96        A: VecZnxDftToRef<B>;
97}
98
99pub trait VecZnxDftZero<B: Backend> {
100    fn vec_znx_dft_zero<R>(&self, res: &mut R, res_col: usize)
101    where
102        R: VecZnxDftToMut<B>;
103}