From a79c2d0af40a473dbd39de6a574ef6d2094ef943 Mon Sep 17 00:00:00 2001 From: shreyas-londhe Date: Fri, 24 Jan 2025 00:00:08 +0530 Subject: [PATCH] feat: added fn drop_next_variable in SplitEqPoly --- jolt-core/src/poly/split_eq_poly.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/jolt-core/src/poly/split_eq_poly.rs b/jolt-core/src/poly/split_eq_poly.rs index 0fe169103..a812a5431 100644 --- a/jolt-core/src/poly/split_eq_poly.rs +++ b/jolt-core/src/poly/split_eq_poly.rs @@ -83,6 +83,21 @@ impl SplitEqPolynomial { DensePolynomial::new(merged) } } + + /// Drop the first variable from E1 or E2 table for Gruen's optimization + /// Before n/2: E1⁽ⁱ⁺¹⁾[x'] = eq(w[i+2:n/2], x') + /// After n/2: E2⁽ⁱ⁺¹⁾[x'] = eq(w[i+2:n], x') + pub fn drop_next_variable(&mut self) { + if self.E1_len > 1 { + // Still in first phase (before n/2) + self.E1 = EqPolynomial::evals(&self.E1[1..self.E1_len]); + self.E1_len -= 1; + } else { + // In second phase (after n/2) + self.E2 = EqPolynomial::evals(&self.E2[1..self.E2_len]); + self.E2_len -= 1; + } + } } #[cfg(test)]