poulpy-cpu-ref 0.6.0

Portable reference CPU implementations of poulpy-hal open extension points
Documentation
#[macro_export]
macro_rules! hal_impl_vec_znx_big {
    ($defaults:ident) => {
        fn vec_znx_big_from_small_backend(
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_from_small_default(&mut res, res_col, a, a_col)
        }

        fn vec_znx_big_add_normal_backend(
            module: &Module<Self>,
            res_base2k: usize,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            noise_infos: NoiseInfos,
            seed: [u8; 32],
        ) {
            <Self as $defaults<Self>>::vec_znx_big_add_normal_seed_default(
                module,
                res_base2k,
                &mut res,
                res_col,
                noise_infos,
                seed,
            )
        }

        fn vec_znx_big_add_into(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_add_into_default(module, &mut res, res_col, &a, a_col, &b, b_col)
        }

        fn vec_znx_big_add_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_add_assign_default(module, &mut res, res_col, &a, a_col)
        }

        fn vec_znx_big_add_small_into_backend(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_add_small_into_default(module, &mut res, res_col, &a, a_col, b, b_col)
        }

        fn vec_znx_big_add_small_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_add_small_assign_default(module, &mut res, res_col, a, a_col)
        }

        fn vec_znx_big_sub(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_default(module, &mut res, res_col, &a, a_col, &b, b_col)
        }

        fn vec_znx_big_sub_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_assign_default(module, &mut res, res_col, &a, a_col)
        }

        fn vec_znx_big_sub_negate_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_negate_assign_default(module, &mut res, res_col, &a, a_col)
        }

        fn vec_znx_big_sub_small_a_backend(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_small_a_default(module, &mut res, res_col, a, a_col, &b, b_col)
        }

        fn vec_znx_big_sub_small_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_small_assign_default(module, &mut res, res_col, a, a_col)
        }

        fn vec_znx_big_sub_small_b_backend(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_small_b_default(module, &mut res, res_col, &a, a_col, b, b_col)
        }

        fn vec_znx_big_sub_small_negate_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_sub_small_negate_assign_default(module, &mut res, res_col, a, a_col)
        }

        fn vec_znx_big_inner_sum_backend(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            res_coeff: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_inner_sum_default(module, &mut res, res_col, res_coeff, &a, a_col)
        }

        fn vec_znx_scalar_product(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBackendRef<'_, Self>,
            a_col: usize,
            b: &poulpy_hal::layouts::ScalarZnxBackendRef<'_, Self>,
            b_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_scalar_product_default(module, &mut res, res_col, a, a_col, b, b_col)
        }

        fn vec_znx_big_negate(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_negate_default(module, &mut res, res_col, &a, a_col)
        }

        fn vec_znx_big_negate_assign(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_negate_assign_default(module, &mut res, res_col)
        }

        fn vec_znx_big_normalize_tmp_bytes(module: &Module<Self>) -> usize {
            <Self as $defaults<Self>>::vec_znx_big_normalize_tmp_bytes_default(module)
        }

        fn vec_znx_big_normalize(
            module: &Module<Self>,
            mut res: &mut poulpy_hal::layouts::VecZnxBackendMut<'_, Self>,
            res_base2k: usize,
            res_offset: i64,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_base2k: usize,
            a_col: usize,
            scratch: &mut poulpy_hal::layouts::ScratchArena<'_, Self>,
        ) {
            let mut scratch = scratch.borrow();
            <Self as $defaults<Self>>::vec_znx_big_normalize_default(
                module,
                &mut res,
                res_base2k,
                res_offset,
                res_col,
                &a,
                a_base2k,
                a_col,
                &mut scratch,
            );
        }

        fn vec_znx_big_automorphism(
            module: &Module<Self>,
            k: i64,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            a: &poulpy_hal::layouts::VecZnxBigBackendRef<'_, Self>,
            a_col: usize,
        ) {
            <Self as $defaults<Self>>::vec_znx_big_automorphism_default(module, k, &mut res, res_col, &a, a_col)
        }

        fn vec_znx_big_automorphism_assign_tmp_bytes(module: &Module<Self>) -> usize {
            <Self as $defaults<Self>>::vec_znx_big_automorphism_assign_tmp_bytes_default(module)
        }

        fn vec_znx_big_automorphism_assign(
            module: &Module<Self>,
            k: i64,
            mut res: &mut poulpy_hal::layouts::VecZnxBigBackendMut<'_, Self>,
            res_col: usize,
            scratch: &mut poulpy_hal::layouts::ScratchArena<'_, Self>,
        ) {
            let mut scratch = scratch.borrow();
            <Self as $defaults<Self>>::vec_znx_big_automorphism_assign_default(module, k, &mut res, res_col, &mut scratch);
        }
    };
}