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}