use crate::layouts::GetTensorKey;
use anyhow::Result;
use poulpy_hal::layouts::{Backend, ScratchArena};
use crate::{
BSGSOps,
layouts::{BabyStep, GLWEInfos, GLWEToBackendMut, GLWEToBackendRef, Parity, PowerBasisHelper},
};
pub trait GLWEPolynomialEvaluation<BE: Backend> {
#[allow(clippy::too_many_arguments)]
fn glwe_eval_baby_step<Ops, V, P, A, G>(
&self,
ops: &Ops,
res: &mut V,
parity: Parity,
coeffs: &P,
power_basis: &G,
scratch: &mut ScratchArena<'_, BE>,
) -> Result<()>
where
Ops: BSGSOps<BE, V, P, A, V>,
V: GLWEToBackendMut<BE> + GLWEToBackendRef<BE>,
P: GLWEToBackendRef<BE> + GLWEInfos,
A: GLWEToBackendRef<BE>,
G: PowerBasisHelper<BE, A>;
fn glwe_eval_giant_steps<Ops, R, B, V, P, A, G, H>(
&self,
ops: &Ops,
res: &mut R,
baby_steps: &mut [B],
power_basis: &G,
tsk: &H,
scratch: &mut ScratchArena<'_, BE>,
) -> Result<()>
where
Ops: BSGSOps<BE, V, P, A, R>,
R: GLWEToBackendMut<BE>,
B: BabyStep<BE, Value = V>,
V: GLWEToBackendMut<BE> + GLWEToBackendRef<BE>,
P: GLWEToBackendRef<BE>,
A: GLWEToBackendRef<BE>,
G: PowerBasisHelper<BE, A>,
H: GetTensorKey<BE>;
}