poulpy-cpu-ref 0.6.0

Portable reference CPU implementations of poulpy-hal open extension points
Documentation
use crate::{
    layouts::{Backend, HostDataMut, NoiseInfos, VecZnxBackendMut, ZnxViewMut},
    reference::znx::{znx_add_normal_f64_ref, znx_fill_normal_f64_ref, znx_fill_uniform_ref},
    source::Source,
};

pub fn vec_znx_fill_uniform_ref<'r, BE>(base2k: usize, res: &mut VecZnxBackendMut<'r, BE>, res_col: usize, source: &mut Source)
where
    BE: Backend,
    BE::BufMut<'r>: HostDataMut,
{
    for j in 0..res.size() {
        znx_fill_uniform_ref(base2k, res.at_mut(res_col, j), source)
    }
}

pub fn vec_znx_fill_normal_ref<'r, BE>(
    base2k: usize,
    res: &mut VecZnxBackendMut<'r, BE>,
    res_col: usize,
    noise_infos: NoiseInfos,
    source: &mut Source,
) where
    BE: Backend,
    BE::BufMut<'r>: HostDataMut,
{
    assert!(
        (noise_infos.bound.log2().ceil() as i64) < 64,
        "invalid bound: ceil(log2(bound))={} > 63",
        (noise_infos.bound.log2().ceil() as i64)
    );

    let (limb, scale) = noise_infos.target_limb_and_scale(base2k);
    znx_fill_normal_f64_ref(
        res.at_mut(res_col, limb),
        noise_infos.sigma * scale,
        noise_infos.bound * scale,
        source,
    )
}

pub fn vec_znx_add_normal_ref<'r, BE>(
    base2k: usize,
    res: &mut VecZnxBackendMut<'r, BE>,
    res_col: usize,
    noise_infos: NoiseInfos,
    source: &mut Source,
) where
    BE: Backend,
    BE::BufMut<'r>: HostDataMut,
{
    assert!(
        (noise_infos.bound.log2().ceil() as i64) < 64,
        "invalid bound: ceil(log2(bound))={} > 63",
        (noise_infos.bound.log2().ceil() as i64)
    );

    let (limb, scale) = noise_infos.target_limb_and_scale(base2k);
    znx_add_normal_f64_ref(
        res.at_mut(res_col, limb),
        noise_infos.sigma * scale,
        noise_infos.bound * scale,
        source,
    )
}