arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/backend/src/hal/delegates/scalar_znx.rs
backend/src/hal/delegates/scalar_znx.rsRaw
 1use crate::hal::{
 2    api::{
 3        ScalarZnxAlloc, ScalarZnxAllocBytes, ScalarZnxAutomorphism, ScalarZnxAutomorphismInplace, ScalarZnxFromBytes,
 4        ScalarZnxMulXpMinusOne, ScalarZnxMulXpMinusOneInplace,
 5    },
 6    layouts::{Backend, Module, ScalarZnxOwned, ScalarZnxToMut, ScalarZnxToRef},
 7    oep::{
 8        ScalarZnxAllocBytesImpl, ScalarZnxAllocImpl, ScalarZnxAutomorphismImpl, ScalarZnxAutomorphismInplaceIml,
 9        ScalarZnxFromBytesImpl, ScalarZnxMulXpMinusOneImpl, ScalarZnxMulXpMinusOneInplaceImpl,
10    },
11};
12
13impl<B> ScalarZnxAllocBytes for Module<B>
14where
15    B: Backend + ScalarZnxAllocBytesImpl<B>,
16{
17    fn scalar_znx_alloc_bytes(&self, cols: usize) -> usize {
18        B::scalar_znx_alloc_bytes_impl(self.n(), cols)
19    }
20}
21
22impl<B> ScalarZnxAlloc for Module<B>
23where
24    B: Backend + ScalarZnxAllocImpl<B>,
25{
26    fn scalar_znx_alloc(&self, cols: usize) -> ScalarZnxOwned {
27        B::scalar_znx_alloc_impl(self.n(), cols)
28    }
29}
30
31impl<B> ScalarZnxFromBytes for Module<B>
32where
33    B: Backend + ScalarZnxFromBytesImpl<B>,
34{
35    fn scalar_znx_from_bytes(&self, cols: usize, bytes: Vec<u8>) -> ScalarZnxOwned {
36        B::scalar_znx_from_bytes_impl(self.n(), cols, bytes)
37    }
38}
39
40impl<B> ScalarZnxAutomorphism for Module<B>
41where
42    B: Backend + ScalarZnxAutomorphismImpl<B>,
43{
44    fn scalar_znx_automorphism<R, A>(&self, k: i64, res: &mut R, res_col: usize, a: &A, a_col: usize)
45    where
46        R: ScalarZnxToMut,
47        A: ScalarZnxToRef,
48    {
49        B::scalar_znx_automorphism_impl(self, k, res, res_col, a, a_col);
50    }
51}
52
53impl<B> ScalarZnxAutomorphismInplace for Module<B>
54where
55    B: Backend + ScalarZnxAutomorphismInplaceIml<B>,
56{
57    fn scalar_znx_automorphism_inplace<A>(&self, k: i64, a: &mut A, a_col: usize)
58    where
59        A: ScalarZnxToMut,
60    {
61        B::scalar_znx_automorphism_inplace_impl(self, k, a, a_col);
62    }
63}
64
65impl<B> ScalarZnxMulXpMinusOne for Module<B>
66where
67    B: Backend + ScalarZnxMulXpMinusOneImpl<B>,
68{
69    fn scalar_znx_mul_xp_minus_one<R, A>(&self, p: i64, r: &mut R, r_col: usize, a: &A, a_col: usize)
70    where
71        R: ScalarZnxToMut,
72        A: ScalarZnxToRef,
73    {
74        B::scalar_znx_mul_xp_minus_one_impl(self, p, r, r_col, a, a_col);
75    }
76}
77
78impl<B> ScalarZnxMulXpMinusOneInplace for Module<B>
79where
80    B: Backend + ScalarZnxMulXpMinusOneInplaceImpl<B>,
81{
82    fn scalar_znx_mul_xp_minus_one_inplace<R>(&self, p: i64, r: &mut R, r_col: usize)
83    where
84        R: ScalarZnxToMut,
85    {
86        B::scalar_znx_mul_xp_minus_one_inplace_impl(self, p, r, r_col);
87    }
88}