1pub mod binary_ref;
2pub mod binary_u64;
3pub mod dense;
4pub mod dynamic;
5pub mod nat_evaluation;
6
7use crypto_primitives::FieldConfig;
8
9fn prepare_projection<C, P, GetCoeff, const N: usize>(
12 cfg: &C,
13 sampled_value: &C::Element,
14 get_coeff: GetCoeff,
15) -> impl Fn(&P) -> C::Element
16where
17 C: FieldConfig + 'static,
18 GetCoeff: Fn(&P, usize) -> bool + Send + Sync + 'static,
19{
20 let cfg = cfg.clone();
21 let r_powers = {
22 let mut r_powers = Vec::with_capacity(N);
23 let mut curr = cfg.one();
24 r_powers.push(curr.clone());
25 for _ in 1..N {
26 cfg.mul_assign(&mut curr, sampled_value);
27 r_powers.push(curr.clone());
28 }
29 r_powers
30 };
31 move |poly: &P| {
32 let mut acc = cfg.zero();
33 for (i, r) in r_powers.iter().enumerate() {
34 if get_coeff(poly, i) {
35 cfg.add_assign(&mut acc, r);
36 }
37 }
38 acc
39 }
40}
41pub mod binary {
42 #[cfg(not(feature = "simd"))]
43 pub use crate::univariate::binary_ref::{
44 BinaryRefPoly as BinaryPoly, BinaryRefPolyInnerProduct as BinaryPolyInnerProduct,
45 };
46 #[cfg(feature = "simd")]
47 pub use crate::univariate::binary_u64::{
48 BinaryU64Poly as BinaryPoly, BinaryU64PolyInnerProduct as BinaryPolyInnerProduct,
49 };
50}