poulpy-cpu-ref 0.6.0

Portable reference CPU implementations of poulpy-hal open extension points
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pub fn znx_automorphism_ref(p: i64, res: &mut [i64], a: &[i64]) {
    #[cfg(debug_assertions)]
    {
        assert_eq!(res.len(), a.len());
    }

    let n: usize = res.len();
    let mut k: usize = 0usize;
    let mask: usize = 2 * n - 1;
    let p_2n = (p & mask as i64) as usize;

    res[0] = a[0];
    for ai in a.iter().take(n).skip(1) {
        k = (k + p_2n) & mask;
        if k < n { res[k] = *ai } else { res[k - n] = -*ai }
    }
}