hyperplonk/arithmetic/src/multilinear_polynomial.rs
arithmetic/src/multilinear_polynomial.rsRaw
1use ark_ff::PrimeField;
2use ark_std::{end_timer, rand::RngCore, start_timer};
3use std::rc::Rc;
4
5pub use ark_poly::DenseMultilinearExtension;
6
7// Build a randomize list of mle-s whose sum is zero.
8pub fn random_zero_mle_list<F: PrimeField, R: RngCore>(
9 nv: usize,
10 degree: usize,
11 rng: &mut R,
12) -> Vec<Rc<DenseMultilinearExtension<F>>> {
13 let start = start_timer!(|| "sample random zero mle list");
14
15 let mut multiplicands = Vec::with_capacity(degree);
16 for _ in 0..degree {
17 multiplicands.push(Vec::with_capacity(1 << nv))
18 }
19 for _ in 0..(1 << nv) {
20 multiplicands[0].push(F::zero());
21 for e in multiplicands.iter_mut().skip(1) {
22 e.push(F::rand(rng));
23 }
24 }
25
26 let list = multiplicands
27 .into_iter()
28 .map(|x| Rc::new(DenseMultilinearExtension::from_evaluations_vec(nv, x)))
29 .collect();
30
31 end_timer!(start);
32 list
33}