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, n: usize, cols: usize, size: usize) -> VecZnxDftOwned<B>;
7}
8
9pub trait VecZnxDftFromBytes<B: Backend> {
10    fn vec_znx_dft_from_bytes(&self, n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxDftOwned<B>;
11}
12
13pub trait VecZnxDftAllocBytes {
14    fn vec_znx_dft_alloc_bytes(&self, n: usize, cols: usize, size: usize) -> usize;
15}
16
17pub trait VecZnxDftToVecZnxBigTmpBytes {
18    fn vec_znx_dft_to_vec_znx_big_tmp_bytes(&self, n: usize) -> usize;
19}
20
21pub trait VecZnxDftToVecZnxBig<B: Backend> {
22    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>)
23    where
24        R: VecZnxBigToMut<B>,
25        A: VecZnxDftToRef<B>;
26}
27
28pub trait VecZnxDftToVecZnxBigTmpA<B: Backend> {
29    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)
30    where
31        R: VecZnxBigToMut<B>,
32        A: VecZnxDftToMut<B>;
33}
34
35pub trait VecZnxDftToVecZnxBigConsume<B: Backend> {
36    fn vec_znx_dft_to_vec_znx_big_consume<D: Data>(&self, a: VecZnxDft<D, B>) -> VecZnxBig<D, B>
37    where
38        VecZnxDft<D, B>: VecZnxDftToMut<B>;
39}
40
41pub trait VecZnxDftAdd<B: Backend> {
42    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)
43    where
44        R: VecZnxDftToMut<B>,
45        A: VecZnxDftToRef<B>,
46        D: VecZnxDftToRef<B>;
47}
48
49pub trait VecZnxDftAddInplace<B: Backend> {
50    fn vec_znx_dft_add_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
51    where
52        R: VecZnxDftToMut<B>,
53        A: VecZnxDftToRef<B>;
54}
55
56pub trait VecZnxDftSub<B: Backend> {
57    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)
58    where
59        R: VecZnxDftToMut<B>,
60        A: VecZnxDftToRef<B>,
61        D: VecZnxDftToRef<B>;
62}
63
64pub trait VecZnxDftSubABInplace<B: Backend> {
65    fn vec_znx_dft_sub_ab_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
66    where
67        R: VecZnxDftToMut<B>,
68        A: VecZnxDftToRef<B>;
69}
70
71pub trait VecZnxDftSubBAInplace<B: Backend> {
72    fn vec_znx_dft_sub_ba_inplace<R, A>(&self, res: &mut R, res_col: usize, a: &A, a_col: usize)
73    where
74        R: VecZnxDftToMut<B>,
75        A: VecZnxDftToRef<B>;
76}
77
78pub trait VecZnxDftCopy<B: Backend> {
79    fn vec_znx_dft_copy<R, A>(&self, step: usize, offset: usize, 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 VecZnxDftFromVecZnx<B: Backend> {
86    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)
87    where
88        R: VecZnxDftToMut<B>,
89        A: VecZnxToRef;
90}
91
92pub trait VecZnxDftZero<B: Backend> {
93    fn vec_znx_dft_zero<R>(&self, res: &mut R)
94    where
95        R: VecZnxDftToMut<B>;
96}