use crate::{ api::{ZnAddNormal, ZnFillNormal, ZnFillUniform, ZnNormalizeInplace, ZnNormalizeTmpBytes}, layouts::{Backend, Module, Scratch, ZnToMut}, oep::{ZnAddNormalImpl, ZnFillNormalImpl, ZnFillUniformImpl, ZnNormalizeInplaceImpl, ZnNormalizeTmpBytesImpl}, source::Source, }; impl ZnNormalizeTmpBytes for Module where B: Backend + ZnNormalizeTmpBytesImpl, { fn zn_normalize_tmp_bytes(&self, n: usize) -> usize { B::zn_normalize_tmp_bytes_impl(n) } } impl ZnNormalizeInplace for Module where B: Backend + ZnNormalizeInplaceImpl, { fn zn_normalize_inplace(&self, n: usize, base2k: usize, a: &mut A, a_col: usize, scratch: &mut Scratch) where A: ZnToMut, { B::zn_normalize_inplace_impl(n, base2k, a, a_col, scratch) } } impl ZnFillUniform for Module where B: Backend + ZnFillUniformImpl, { fn zn_fill_uniform(&self, n: usize, base2k: usize, res: &mut R, res_col: usize, source: &mut Source) where R: ZnToMut, { B::zn_fill_uniform_impl(n, base2k, res, res_col, source); } } impl ZnFillNormal for Module where B: Backend + ZnFillNormalImpl, { fn zn_fill_normal( &self, n: usize, base2k: usize, res: &mut R, res_col: usize, k: usize, source: &mut Source, sigma: f64, bound: f64, ) where R: ZnToMut, { B::zn_fill_normal_impl(n, base2k, res, res_col, k, source, sigma, bound); } } impl ZnAddNormal for Module where B: Backend + ZnAddNormalImpl, { fn zn_add_normal( &self, n: usize, base2k: usize, res: &mut R, res_col: usize, k: usize, source: &mut Source, sigma: f64, bound: f64, ) where R: ZnToMut, { B::zn_add_normal_impl(n, base2k, res, res_col, k, source, sigma, bound); } }