mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16: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
@@ -6,7 +6,7 @@ mod glwe_ct;
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn var_noise_gglwe_product(
|
||||
n: f64,
|
||||
basek: usize,
|
||||
base2k: usize,
|
||||
var_xs: f64,
|
||||
var_msg: f64,
|
||||
var_a_err: f64,
|
||||
@@ -17,12 +17,12 @@ pub(crate) fn var_noise_gglwe_product(
|
||||
b_logq: usize,
|
||||
) -> f64 {
|
||||
let a_logq: usize = a_logq.min(b_logq);
|
||||
let a_cols: usize = a_logq.div_ceil(basek);
|
||||
let a_cols: usize = a_logq.div_ceil(base2k);
|
||||
|
||||
let b_scale: f64 = (b_logq as f64).exp2();
|
||||
let a_scale: f64 = ((b_logq - a_logq) as f64).exp2();
|
||||
|
||||
let base: f64 = (basek as f64).exp2();
|
||||
let base: f64 = (base2k as f64).exp2();
|
||||
let var_base: f64 = base * base / 12f64;
|
||||
|
||||
// lhs = a_cols * n * (var_base * var_gct_err_lhs + var_e_a * var_msg * p^2)
|
||||
@@ -38,7 +38,7 @@ pub(crate) fn var_noise_gglwe_product(
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn log2_std_noise_gglwe_product(
|
||||
n: f64,
|
||||
basek: usize,
|
||||
base2k: usize,
|
||||
var_xs: f64,
|
||||
var_msg: f64,
|
||||
var_a_err: f64,
|
||||
@@ -50,7 +50,7 @@ pub(crate) fn log2_std_noise_gglwe_product(
|
||||
) -> f64 {
|
||||
let mut noise: f64 = var_noise_gglwe_product(
|
||||
n,
|
||||
basek,
|
||||
base2k,
|
||||
var_xs,
|
||||
var_msg,
|
||||
var_a_err,
|
||||
@@ -68,7 +68,7 @@ pub(crate) fn log2_std_noise_gglwe_product(
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn noise_ggsw_product(
|
||||
n: f64,
|
||||
basek: usize,
|
||||
base2k: usize,
|
||||
var_xs: f64,
|
||||
var_msg: f64,
|
||||
var_a0_err: f64,
|
||||
@@ -80,12 +80,12 @@ pub(crate) fn noise_ggsw_product(
|
||||
k_ggsw: usize,
|
||||
) -> f64 {
|
||||
let a_logq: usize = k_in.min(k_ggsw);
|
||||
let a_cols: usize = a_logq.div_ceil(basek);
|
||||
let a_cols: usize = a_logq.div_ceil(base2k);
|
||||
|
||||
let b_scale: f64 = (k_ggsw as f64).exp2();
|
||||
let a_scale: f64 = ((k_ggsw - a_logq) as f64).exp2();
|
||||
|
||||
let base: f64 = (basek as f64).exp2();
|
||||
let base: f64 = (base2k as f64).exp2();
|
||||
let var_base: f64 = base * base / 12f64;
|
||||
|
||||
// lhs = a_cols * n * (var_base * var_gct_err_lhs + var_e_a * var_msg * p^2)
|
||||
@@ -102,7 +102,7 @@ pub(crate) fn noise_ggsw_product(
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn noise_ggsw_keyswitch(
|
||||
n: f64,
|
||||
basek: usize,
|
||||
base2k: usize,
|
||||
col: usize,
|
||||
var_xs: f64,
|
||||
var_a_err: f64,
|
||||
@@ -118,7 +118,7 @@ pub(crate) fn noise_ggsw_keyswitch(
|
||||
// Initial KS for col = 0
|
||||
let mut noise: f64 = var_noise_gglwe_product(
|
||||
n,
|
||||
basek,
|
||||
base2k,
|
||||
var_xs,
|
||||
var_xs,
|
||||
var_a_err,
|
||||
@@ -133,7 +133,7 @@ pub(crate) fn noise_ggsw_keyswitch(
|
||||
if col > 0 {
|
||||
noise += var_noise_gglwe_product(
|
||||
n,
|
||||
basek,
|
||||
base2k,
|
||||
var_xs,
|
||||
var_si_x_sj,
|
||||
var_a_err + 1f64 / 12.0,
|
||||
|
||||
Reference in New Issue
Block a user