mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 05:06:44 +01:00
Add cross-basek normalization (#90)
* added cross_basek_normalization * updated method signatures to take layouts * fixed cross-base normalization fix #91 fix #93
This commit is contained in:
committed by
GitHub
parent
4da790ea6a
commit
37e13b965c
@@ -1,52 +1,52 @@
|
||||
use crate::layouts::{GLWEPlaintext, Infos, LWEPlaintext};
|
||||
use crate::layouts::{GLWEPlaintext, LWEInfos, LWEPlaintext, TorusPrecision};
|
||||
use poulpy_hal::layouts::{DataMut, DataRef};
|
||||
use rug::Float;
|
||||
|
||||
impl<D: DataMut> GLWEPlaintext<D> {
|
||||
pub fn encode_vec_i64(&mut self, data: &[i64], k: usize) {
|
||||
let basek: usize = self.basek();
|
||||
self.data
|
||||
.encode_vec_i64(basek, 0, k, data, i64::BITS as usize);
|
||||
pub fn encode_vec_i64(&mut self, data: &[i64], k: TorusPrecision) {
|
||||
let base2k: usize = self.base2k().into();
|
||||
self.data.encode_vec_i64(base2k, 0, k.into(), data);
|
||||
}
|
||||
|
||||
pub fn encode_coeff_i64(&mut self, data: i64, k: usize, idx: usize) {
|
||||
let basek: usize = self.basek();
|
||||
self.data
|
||||
.encode_coeff_i64(basek, 0, k, idx, data, i64::BITS as usize);
|
||||
pub fn encode_coeff_i64(&mut self, data: i64, k: TorusPrecision, idx: usize) {
|
||||
let base2k: usize = self.base2k().into();
|
||||
self.data.encode_coeff_i64(base2k, 0, k.into(), idx, data);
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataRef> GLWEPlaintext<D> {
|
||||
pub fn decode_vec_i64(&self, data: &mut [i64], k: usize) {
|
||||
self.data.decode_vec_i64(self.basek(), 0, k, data);
|
||||
pub fn decode_vec_i64(&self, data: &mut [i64], k: TorusPrecision) {
|
||||
self.data
|
||||
.decode_vec_i64(self.base2k().into(), 0, k.into(), data);
|
||||
}
|
||||
|
||||
pub fn decode_coeff_i64(&self, k: usize, idx: usize) -> i64 {
|
||||
self.data.decode_coeff_i64(self.basek(), 0, k, idx)
|
||||
pub fn decode_coeff_i64(&self, k: TorusPrecision, idx: usize) -> i64 {
|
||||
self.data
|
||||
.decode_coeff_i64(self.base2k().into(), 0, k.into(), idx)
|
||||
}
|
||||
|
||||
pub fn decode_vec_float(&self, data: &mut [Float]) {
|
||||
self.data.decode_vec_float(self.basek(), 0, data);
|
||||
self.data.decode_vec_float(self.base2k().into(), 0, data);
|
||||
}
|
||||
|
||||
pub fn std(&self) -> f64 {
|
||||
self.data.std(self.basek(), 0)
|
||||
self.data.std(self.base2k().into(), 0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataMut> LWEPlaintext<D> {
|
||||
pub fn encode_i64(&mut self, data: i64, k: usize) {
|
||||
let basek: usize = self.basek();
|
||||
self.data.encode_i64(basek, k, data, i64::BITS as usize);
|
||||
pub fn encode_i64(&mut self, data: i64, k: TorusPrecision) {
|
||||
let base2k: usize = self.base2k().into();
|
||||
self.data.encode_i64(base2k, k.into(), data);
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataRef> LWEPlaintext<D> {
|
||||
pub fn decode_i64(&self, k: usize) -> i64 {
|
||||
self.data.decode_i64(self.basek(), k)
|
||||
pub fn decode_i64(&self, k: TorusPrecision) -> i64 {
|
||||
self.data.decode_i64(self.base2k().into(), k.into())
|
||||
}
|
||||
|
||||
pub fn decode_float(&self) -> Float {
|
||||
self.data.decode_float(self.basek())
|
||||
self.data.decode_float(self.base2k().into())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user