fix lost evals when P::WIDTH > 0

This commit is contained in:
Sladuca 2022-08-19 17:39:55 -04:00
parent 68de3ee0c6
commit ff961a34a3
2 changed files with 13 additions and 8 deletions

View File

@ -44,12 +44,8 @@ impl<P: PackedField> ConstraintConsumer<P> {
} }
} }
// TODO: Do this correctly. pub fn accumulators(self) -> Vec<P> {
pub fn accumulators(self) -> Vec<P::Scalar> {
self.constraint_accs self.constraint_accs
.into_iter()
.map(|acc| acc.as_slice()[0])
.collect()
} }
/// Add one constraint valid on all rows except the last. /// Add one constraint valid on all rows except the last.

View File

@ -258,7 +258,7 @@ where
let quotient_values = (0..size) let quotient_values = (0..size)
.into_par_iter() .into_par_iter()
.step_by(P::WIDTH) .step_by(P::WIDTH)
.map(|i_start| { .flat_map_iter(|i_start| {
let i_next_start = (i_start + next_step) % size; let i_next_start = (i_start + next_step) % size;
let i_range = i_start..i_start + P::WIDTH; let i_range = i_start..i_start + P::WIDTH;
@ -292,13 +292,22 @@ where
permutation_check_data, permutation_check_data,
&mut consumer, &mut consumer,
); );
let mut constraints_evals = consumer.accumulators(); let mut constraints_evals = consumer.accumulators();
// We divide the constraints evaluations by `Z_H(x)`. // We divide the constraints evaluations by `Z_H(x)`.
let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start); let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start);
for eval in &mut constraints_evals { for eval in &mut constraints_evals {
*eval *= denominator_inv; *eval *= denominator_inv;
} }
constraints_evals
let num_challenges = alphas.len();
(0..P::WIDTH)
.into_iter()
.map(move |i| {
(0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect()
})
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();