use crate::{
layouts::{
Backend, NoiseInfos, ScalarZnxBackendRef, ScratchArena, VecZnxBackendMut, VecZnxBackendRef, VecZnxBigBackendMut,
VecZnxBigBackendRef, VecZnxBigOwned,
},
source::Source,
};
pub trait VecZnxBigFromSmallBackend<B: Backend> {
fn vec_znx_big_from_small_backend(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigAlloc<B: Backend> {
fn vec_znx_big_alloc(&self, cols: usize, size: usize) -> VecZnxBigOwned<B>;
fn vec_znx_big_alloc_n(&self, n: usize, cols: usize, size: usize) -> VecZnxBigOwned<B>;
}
pub trait VecZnxBigBytesOf {
fn bytes_of_vec_znx_big(&self, cols: usize, size: usize) -> usize;
fn bytes_of_vec_znx_big_n(&self, n: usize, cols: usize, size: usize) -> usize;
}
pub trait VecZnxBigFromBytes<B: Backend> {
fn vec_znx_big_from_bytes(&self, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxBigOwned<B>;
fn vec_znx_big_from_bytes_n(&self, n: usize, cols: usize, size: usize, bytes: Vec<u8>) -> VecZnxBigOwned<B>;
}
#[allow(clippy::too_many_arguments)]
pub trait VecZnxBigAddNormal<B: Backend> {
fn vec_znx_big_add_normal(
&self,
base2k: usize,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
noise_infos: NoiseInfos,
source: &mut Source,
);
}
#[allow(clippy::too_many_arguments)]
pub trait VecZnxBigAddNormalBackend<B: Backend> {
fn vec_znx_big_add_normal_backend(
&self,
base2k: usize,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
noise_infos: NoiseInfos,
seed: [u8; 32],
);
}
pub trait VecZnxBigAddInto<B: Backend> {
fn vec_znx_big_add_into(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
b: &VecZnxBigBackendRef<'_, B>,
b_col: usize,
);
}
pub trait VecZnxBigAddAssign<B: Backend> {
fn vec_znx_big_add_assign(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigAddSmallIntoBackend<B: Backend> {
fn vec_znx_big_add_small_into_backend(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
b: &VecZnxBackendRef<'_, B>,
b_col: usize,
);
}
pub trait VecZnxBigAddSmallAssign<B: Backend> {
fn vec_znx_big_add_small_assign<'r, 'a>(
&self,
res: &mut VecZnxBigBackendMut<'r, B>,
res_col: usize,
a: &VecZnxBackendRef<'a, B>,
a_col: usize,
);
}
pub trait VecZnxBigSub<B: Backend> {
fn vec_znx_big_sub(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
b: &VecZnxBigBackendRef<'_, B>,
b_col: usize,
);
}
pub trait VecZnxBigSubAssign<B: Backend> {
fn vec_znx_big_sub_assign(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigSubNegateAssign<B: Backend> {
fn vec_znx_big_sub_negate_assign(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigSubSmallABackend<B: Backend> {
fn vec_znx_big_sub_small_a_backend(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBackendRef<'_, B>,
a_col: usize,
b: &VecZnxBigBackendRef<'_, B>,
b_col: usize,
);
}
pub trait VecZnxBigSubSmallAssign<B: Backend> {
fn vec_znx_big_sub_small_assign<'r, 'a>(
&self,
res: &mut VecZnxBigBackendMut<'r, B>,
res_col: usize,
a: &VecZnxBackendRef<'a, B>,
a_col: usize,
);
}
pub trait VecZnxBigSubSmallBBackend<B: Backend> {
fn vec_znx_big_sub_small_b_backend(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
b: &VecZnxBackendRef<'_, B>,
b_col: usize,
);
}
pub trait VecZnxBigSubSmallNegateAssign<B: Backend> {
fn vec_znx_big_sub_small_negate_assign<'r, 'a>(
&self,
res: &mut VecZnxBigBackendMut<'r, B>,
res_col: usize,
a: &VecZnxBackendRef<'a, B>,
a_col: usize,
);
}
pub trait VecZnxBigInnerSumBackend<B: Backend> {
fn vec_znx_big_inner_sum_backend<'r, 'a>(
&self,
res: &mut VecZnxBigBackendMut<'r, B>,
res_col: usize,
res_coeff: usize,
a: &VecZnxBigBackendRef<'a, B>,
a_col: usize,
);
}
pub trait VecZnxScalarProduct<B: Backend> {
fn vec_znx_scalar_product<'r, 'a, 'b>(
&self,
res: &mut VecZnxBigBackendMut<'r, B>,
res_col: usize,
a: &VecZnxBackendRef<'a, B>,
a_col: usize,
b: &ScalarZnxBackendRef<'b, B>,
b_col: usize,
);
}
pub trait VecZnxBigNegate<B: Backend> {
fn vec_znx_big_negate(
&self,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigNegateAssign<B: Backend> {
fn vec_znx_big_negate_assign(&self, res: &mut VecZnxBigBackendMut<'_, B>, res_col: usize);
}
pub trait VecZnxBigNormalizeTmpBytes {
fn vec_znx_big_normalize_tmp_bytes(&self) -> usize;
}
#[allow(clippy::too_many_arguments)]
pub trait VecZnxBigNormalize<B: Backend> {
fn vec_znx_big_normalize(
&self,
res: &mut VecZnxBackendMut<'_, B>,
res_base2k: usize,
res_offset: i64,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_base2k: usize,
a_col: usize,
scratch: &mut ScratchArena<'_, B>,
);
}
pub trait VecZnxBigAutomorphismAssignTmpBytes {
fn vec_znx_big_automorphism_assign_tmp_bytes(&self) -> usize;
}
pub trait VecZnxBigAutomorphism<B: Backend> {
fn vec_znx_big_automorphism(
&self,
p: i64,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
a: &VecZnxBigBackendRef<'_, B>,
a_col: usize,
);
}
pub trait VecZnxBigAutomorphismAssign<B: Backend> {
fn vec_znx_big_automorphism_assign(
&self,
p: i64,
res: &mut VecZnxBigBackendMut<'_, B>,
res_col: usize,
scratch: &mut ScratchArena<'_, B>,
);
}