pub fn estimate_multiplication_noise<D1, D2, D3, K>(
    poly_size: PolynomialSize,
    mask_size: GlweDimension,
    dispersion_glwe1: D1,
    dispersion_glwe2: D2,
    delta_1: f64,
    delta_2: f64,
    max_msg_1: f64,
    max_msg_2: f64,
    dispersion_rlk: D3,
    base_log: DecompositionBaseLog,
    level: DecompositionLevelCount,
    log2_modulus: u32
) -> Variancewhere
    D1: DispersionParameter,
    D2: DispersionParameter,
    D3: DispersionParameter,
    K: KeyDispersion,
Expand description

Computes the dispersion of a GLWE multiplication between two GLWEs (i.e., a tensor product followed by a relinearization).

Example

use concrete_core::prelude::{
    BinaryKeyKind, DecompositionBaseLog, DecompositionLevelCount, GlweDimension,
    PolynomialSize, Variance,
};
use concrete_npe::estimate_multiplication_noise;
let dimension = GlweDimension(3);
let polynomial_size = PolynomialSize(1024);
let dispersion_rlwe_0 = Variance::from_modular_variance(2_f64.powi(24), 64);
let dispersion_rlwe_1 = Variance::from_modular_variance(2_f64.powi(24), 64);
let delta_1 = 2_f64.powi(40);
let delta_2 = 2_f64.powi(42);
let max_msg_1 = 15.;
let max_msg_2 = 7.;
let l_gadget = DecompositionLevelCount(4);
let base_log = DecompositionBaseLog(7);
let dispersion_rlk = Variance(2_f64.powi(-38));
let var_out = estimate_multiplication_noise::<_, _, _, BinaryKeyKind>(
    polynomial_size,
    dimension,
    dispersion_rlwe_0,
    dispersion_rlwe_1,
    delta_1,
    delta_2,
    max_msg_1,
    max_msg_2,
    dispersion_rlk,
    base_log,
    l_gadget,
    64,
);