Comments and minor refactor in eval_vanish*

This commit is contained in:
wborgeaud 2021-07-02 10:12:13 +02:00
parent 90bdb5796c
commit a3f473a073

View File

@ -74,6 +74,8 @@ pub(crate) fn eval_vanishing_poly<F: Extendable<D>, const D: usize>(
alphas: &[F], alphas: &[F],
) -> Vec<F::Extension> { ) -> Vec<F::Extension> {
let max_degree = common_data.max_filtered_constraint_degree; let max_degree = common_data.max_filtered_constraint_degree;
let (num_prods, final_num_prod) = common_data.num_partial_products;
let constraint_terms = let constraint_terms =
evaluate_gate_constraints(&common_data.gates, common_data.num_gate_constraints, vars); evaluate_gate_constraints(&common_data.gates, common_data.num_gate_constraints, vars);
@ -105,25 +107,33 @@ pub(crate) fn eval_vanishing_poly<F: Extendable<D>, const D: usize>(
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let (num_prods, final_num_prod) = common_data.num_partial_products; // The partial products considered for this iteration of `i`.
let current_partial_products =
&partial_products[2 * i * num_prods..(2 * i + 2) * num_prods];
// The partial products for the numerator are in the first `num_prods` elements.
let numerator_partial_products = &current_partial_products[..num_prods];
// The partial products for the denominator are in the last `num_prods` elements.
let denominator_partial_products = &current_partial_products[num_prods..];
// Check the numerator partial products.
vanishing_partial_products_terms.extend(check_partial_products( vanishing_partial_products_terms.extend(check_partial_products(
&numerator_values, &numerator_values,
&partial_products[2 * i * num_prods..(2 * i + 1) * num_prods], numerator_partial_products,
max_degree, max_degree,
)); ));
// Check the denominator partial products.
vanishing_partial_products_terms.extend(check_partial_products( vanishing_partial_products_terms.extend(check_partial_products(
&denominator_values, &denominator_values,
&partial_products[(2 * i + 1) * num_prods..(2 * i + 2) * num_prods], denominator_partial_products,
max_degree, max_degree,
)); ));
let f_prime: F::Extension = partial_products // The numerator final product is the product of the last `final_num_prod` elements.
[(2 * i + 1) * num_prods - final_num_prod..(2 * i + 1) * num_prods] let f_prime: F::Extension = numerator_partial_products[num_prods - final_num_prod..]
.iter() .iter()
.copied() .copied()
.product(); .product();
let g_prime: F::Extension = partial_products // The denominator final product is the product of the last `final_num_prod` elements.
[(2 * i + 2) * num_prods - final_num_prod..(2 * i + 2) * num_prods] let g_prime: F::Extension = denominator_partial_products[num_prods - final_num_prod..]
.iter() .iter()
.copied() .copied()
.product(); .product();
@ -158,6 +168,8 @@ pub(crate) fn eval_vanishing_poly_base<F: Extendable<D>, const D: usize>(
z_h_on_coset: &ZeroPolyOnCoset<F>, z_h_on_coset: &ZeroPolyOnCoset<F>,
) -> Vec<F> { ) -> Vec<F> {
let max_degree = common_data.max_filtered_constraint_degree; let max_degree = common_data.max_filtered_constraint_degree;
let (num_prods, final_num_prod) = common_data.num_partial_products;
let constraint_terms = let constraint_terms =
evaluate_gate_constraints_base(&common_data.gates, common_data.num_gate_constraints, vars); evaluate_gate_constraints_base(&common_data.gates, common_data.num_gate_constraints, vars);
@ -189,25 +201,33 @@ pub(crate) fn eval_vanishing_poly_base<F: Extendable<D>, const D: usize>(
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let (num_prods, final_num_prod) = common_data.num_partial_products; // The partial products considered for this iteration of `i`.
let current_partial_products =
&partial_products[2 * i * num_prods..(2 * i + 2) * num_prods];
// The partial products for the numerator are in the first `num_prods` elements.
let numerator_partial_products = &current_partial_products[..num_prods];
// The partial products for the denominator are in the last `num_prods` elements.
let denominator_partial_products = &current_partial_products[num_prods..];
// Check the numerator partial products.
vanishing_partial_products_terms.extend(check_partial_products( vanishing_partial_products_terms.extend(check_partial_products(
&numerator_values, &numerator_values,
&partial_products[2 * i * num_prods..(2 * i + 1) * num_prods], numerator_partial_products,
max_degree, max_degree,
)); ));
// Check the denominator partial products.
vanishing_partial_products_terms.extend(check_partial_products( vanishing_partial_products_terms.extend(check_partial_products(
&denominator_values, &denominator_values,
&partial_products[(2 * i + 1) * num_prods..(2 * i + 2) * num_prods], denominator_partial_products,
max_degree, max_degree,
)); ));
let f_prime: F = partial_products // The numerator final product is the product of the last `final_num_prod` elements.
[(2 * i + 1) * num_prods - final_num_prod..(2 * i + 1) * num_prods] let f_prime: F = numerator_partial_products[num_prods - final_num_prod..]
.iter() .iter()
.copied() .copied()
.product(); .product();
let g_prime: F = partial_products // The denominator final product is the product of the last `final_num_prod` elements.
[(2 * i + 2) * num_prods - final_num_prod..(2 * i + 2) * num_prods] let g_prime: F = denominator_partial_products[num_prods - final_num_prod..]
.iter() .iter()
.copied() .copied()
.product(); .product();