poulpy_core/
utils.rs

1use crate::layouts::{GLWEPlaintext, LWEInfos, LWEPlaintext, TorusPrecision};
2use poulpy_hal::layouts::{DataMut, DataRef};
3use rug::Float;
4
5impl<D: DataMut> GLWEPlaintext<D> {
6    pub fn encode_vec_i64(&mut self, data: &[i64], k: TorusPrecision) {
7        let base2k: usize = self.base2k().into();
8        self.data.encode_vec_i64(base2k, 0, k.into(), data);
9    }
10
11    pub fn encode_coeff_i64(&mut self, data: i64, k: TorusPrecision, idx: usize) {
12        let base2k: usize = self.base2k().into();
13        self.data.encode_coeff_i64(base2k, 0, k.into(), idx, data);
14    }
15}
16
17impl<D: DataRef> GLWEPlaintext<D> {
18    pub fn decode_vec_i64(&self, data: &mut [i64], k: TorusPrecision) {
19        self.data
20            .decode_vec_i64(self.base2k().into(), 0, k.into(), data);
21    }
22
23    pub fn decode_coeff_i64(&self, k: TorusPrecision, idx: usize) -> i64 {
24        self.data
25            .decode_coeff_i64(self.base2k().into(), 0, k.into(), idx)
26    }
27
28    pub fn decode_vec_float(&self, data: &mut [Float]) {
29        self.data.decode_vec_float(self.base2k().into(), 0, data);
30    }
31
32    pub fn std(&self) -> f64 {
33        self.data.std(self.base2k().into(), 0)
34    }
35}
36
37impl<D: DataMut> LWEPlaintext<D> {
38    pub fn encode_i64(&mut self, data: i64, k: TorusPrecision) {
39        let base2k: usize = self.base2k().into();
40        self.data.encode_i64(base2k, k.into(), data);
41    }
42}
43
44impl<D: DataRef> LWEPlaintext<D> {
45    pub fn decode_i64(&self, k: TorusPrecision) -> i64 {
46        self.data.decode_i64(self.base2k().into(), k.into())
47    }
48
49    pub fn decode_float(&self) -> Float {
50        self.data.decode_float(self.base2k().into())
51    }
52}