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}