use crate::base::polynomial::CompositePolynomial;
use crate::{base::scalar::Scalar, utils::log};
use alloc::vec::Vec;
#[derive(Debug)]
pub struct ProverState<S: Scalar> {
pub list_of_products: Vec<(S, Vec<usize>)>,
pub flattened_ml_extensions: Vec<Vec<S>>,
pub num_vars: usize,
pub max_multiplicands: usize,
pub round: usize,
}
impl<S: Scalar> ProverState<S> {
pub fn new(
list_of_products: Vec<(S, Vec<usize>)>,
flattened_ml_extensions: Vec<Vec<S>>,
num_vars: usize,
max_multiplicands: usize,
) -> Self {
ProverState {
list_of_products,
flattened_ml_extensions,
num_vars,
max_multiplicands,
round: 0,
}
}
#[tracing::instrument(name = "ProverState::create", level = "debug", skip_all)]
#[cfg_attr(not(test), expect(dead_code))]
pub fn create(polynomial: &CompositePolynomial<S>) -> Self {
log::log_memory_usage("Start");
assert!(
polynomial.num_variables != 0,
"Attempt to prove a constant."
);
let flattened_ml_extensions = polynomial
.flattened_ml_extensions
.iter()
.map(|x| x.as_ref().clone())
.collect();
log::log_memory_usage("End");
ProverState::new(
polynomial.products.clone(),
flattened_ml_extensions,
polynomial.num_variables,
polynomial.max_multiplicands,
)
}
}