From 4b0660544982e238db500c60ae44c47e9991de1e Mon Sep 17 00:00:00 2001 From: Julian Arnesino Date: Thu, 29 Aug 2024 15:31:17 -0300 Subject: [PATCH] Add new PolyOps trait for interpolating many columns --- crates/prover/src/core/pcs/prover.rs | 7 +++---- crates/prover/src/core/poly/circle/ops.rs | 11 +++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/crates/prover/src/core/pcs/prover.rs b/crates/prover/src/core/pcs/prover.rs index e5ae1b266..55b694615 100644 --- a/crates/prover/src/core/pcs/prover.rs +++ b/crates/prover/src/core/pcs/prover.rs @@ -170,11 +170,10 @@ impl<'a, 'b, B: BackendForChannel, MC: MerkleChannel> TreeBuilder<'a, 'b, B, columns: impl IntoIterator>, ) -> TreeSubspan { let span = span!(Level::INFO, "Interpolation for commitment").entered(); - let polys = columns - .into_iter() - .map(|eval| eval.interpolate_with_twiddles(self.commitment_scheme.twiddles)) - .collect_vec(); + let polys: Vec> = + B::interpolate_columns(&columns, self.commitment_scheme.twiddles); span.exit(); + self.extend_polys(polys) } diff --git a/crates/prover/src/core/poly/circle/ops.rs b/crates/prover/src/core/poly/circle/ops.rs index 40b86cb68..59b25ca88 100644 --- a/crates/prover/src/core/poly/circle/ops.rs +++ b/crates/prover/src/core/poly/circle/ops.rs @@ -6,6 +6,7 @@ use crate::core::fields::qm31::SecureField; use crate::core::fields::FieldOps; use crate::core::poly::twiddles::TwiddleTree; use crate::core::poly::BitReversedOrder; +use crate::core::ColumnVec; /// Operations on BaseField polynomials. pub trait PolyOps: FieldOps + Sized { @@ -27,6 +28,16 @@ pub trait PolyOps: FieldOps + Sized { itwiddles: &TwiddleTree, ) -> CirclePoly; + fn interpolate_columns( + columns: &ColumnVec>, + twiddles: &TwiddleTree, + ) -> Vec> { + columns + .into_iter() + .map(|eval| Self::interpolate(eval.clone(), twiddles)) + .collect() + } + /// Evaluates the polynomial at a single point. /// Used by the [`CirclePoly::eval_at_point()`] function. fn eval_at_point(poly: &CirclePoly, point: CirclePoint) -> SecureField;