63 if (scaling_factor.is_zero()) {
84 for (
auto u_i : challenge) {
103 std::vector<FF> result;
104 std::vector<FF> denominators;
105 for (
const auto& challenge : challenges) {
106 denominators.push_back((
FF(1) - challenge));
111 for (
const auto& [denom_inverted, challenge] :
zip_view(denominators, challenges)) {
112 result.push_back(denom_inverted * challenge);
143 const size_t d = r.
size();
144 BB_ASSERT_EQ(d, log_num_monomials,
"expect log_num_monomials == r.size()");
145 const size_t N = 1UL << d;
149 std::vector<FF> eq_linear_coeffs(d);
150 std::vector<FF> eq_constant_coeffs(d);
151 for (
size_t i = 0; i < d; ++i) {
152 eq_linear_coeffs[i] = r[i] + r[i] -
FF(1);
153 eq_constant_coeffs[i] =
FF(1) - r[i];
159 current.
at(0) =
FF(1);
162 for (
size_t var_idx = 0; var_idx < d; ++var_idx) {
163 const FF a_i = eq_linear_coeffs[var_idx];
164 const FF b_i = eq_constant_coeffs.at(var_idx);
166 const size_t prev_size = current.
size();
167 const size_t next_size = prev_size << 1;
175 const FF* src = current.
data();
178 for (
size_t j = 0; j < prev_size; ++j) {
181 dst[j + prev_size] = v * (b_i + a_i);
217 for (
size_t i = 0; i <
r.size(); ++i) {
218 a[i] =
r[i] +
r[i] -
FF(1);
226 assert(u.size() ==
r.size());
228 for (
size_t i = 0; i < u.size(); ++i) {
230 acc *= (
b[i] + u[i] *
a[i]);
238 assert(r_in.size() == u.size());
240 for (
size_t i = 0; i < r_in.size(); ++i) {
241 const FF ai = r_in[i] + r_in[i] -
FF(1);
242 const FF bi =
FF(1) - r_in[i];
243 acc *= (bi + u[i] * ai);
#define BB_ASSERT_EQ(actual, expected,...)
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
Fr & at(size_t index)
Our mutable accessor, unlike operator[]. We abuse precedent a bit to differentiate at() and operator[...
Prover-side eq(X, r) polynomial over Boolean hypercube.
static FF compute_scaling_factor(std::span< const FF > challenge)
Compute the scaling factor C = ∏_i (1 - r_i) for coordinate transformation.
static std::vector< FF > transform_challenge(std::span< const FF > challenges)
Transform challenges r_i to γ_i = r_i / (1 - r_i) for optimal method.
static Polynomial< FF > construct(std::span< const FF > challenges, size_t log_num_monomials)
Construct eq(X, r) coefficient table over Boolean hypercube {0,1}^d.
static Polynomial< FF > construct_eq_with_edge_cases(std::span< const FF > r, size_t log_num_monomials)
Fallback method: direct construction of eq(X, r) coefficient table for edge cases.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static BB_PROFILE Polynomial< FF > compute_beta_products(const std::vector< FF > &betas, const size_t log_num_monomials, const FF &scaling_factor=FF(1))
Given compute for .
Verifier-side polynomial for division-free evaluation of eq(r, u).
void initialize(const std::vector< FF > &r_in)
FF evaluate(std::span< const FF > u) const
VerifierEqPolynomial(const std::vector< FF > &r_in)
static FF eval(std::span< const FF > r_in, std::span< const FF > u)
static void batch_invert(C &coeffs) noexcept