pub fn estimate_bit_extraction_noise<D1, D2, D3, K1, K2>(
    number_of_bits_to_extract: ExtractedBitsCount,
    total_precision: u32,
    input_lwe_mask_size: LweDimension,
    lwe_mask_size_after_ks: LweDimension,
    glwe_mask_size: GlweDimension,
    poly_size: PolynomialSize,
    dispersion_lwe: D1,
    dispersion_ksk: D2,
    dispersion_bsk: D3,
    base_log_ksk: DecompositionBaseLog,
    level_ksk: DecompositionLevelCount,
    base_log_bsk: DecompositionBaseLog,
    level_bsk: DecompositionLevelCount,
    log2_modulus: u32
) -> Vec<Variance>where
    D1: DispersionParameter,
    D2: DispersionParameter,
    D3: DispersionParameter,
    K1: KeyDispersion,
    K2: KeyDispersion,
Expand description

Computes the dispersions of ciphertexts encrypting the bits after bit extraction, the dispersion of the ciphertext of the most significant bit extracted is first and of the least significant bit last.

Example

use concrete_core::prelude::*;
use concrete_npe::estimate_bit_extraction_noise;
let poly_size = PolynomialSize(1024);
let input_lwe_mask_size = LweDimension(667);
let lwe_mask_size_after_ks = LweDimension(512);
let glwe_mask_size = GlweDimension(2);
let dispersion_lwe = Variance(2_f64.powi(-38));
let dispersion_ksk = Variance(2_f64.powi(-31));
let dispersion_bsk = Variance(2_f64.powi(-104));
let level_ksk = DecompositionLevelCount(14);
let base_log_ksk = DecompositionBaseLog(1);
let level_bsk = DecompositionLevelCount(6);
let base_log_bsk = DecompositionBaseLog(7);
let number_of_bits_to_extract = ExtractedBitsCount(8);
let total_precision = 16_u32;
let vars_bit_extract = estimate_bit_extraction_noise::<_, _, _, BinaryKeyKind, BinaryKeyKind>(
    number_of_bits_to_extract,
    total_precision,
    input_lwe_mask_size,
    lwe_mask_size_after_ks,
    glwe_mask_size,
    poly_size,
    dispersion_lwe,
    dispersion_ksk,
    dispersion_bsk,
    base_log_ksk,
    level_ksk,
    base_log_bsk,
    level_bsk,
    64,
);