26 static constexpr size_t poly_length = 1UL << log_num_monomials;
35 [&](
size_t idx) {
result.at(idx + 1) += scaling_factor * eq[idx]; },
44 constexpr size_t ALLOW_ONE_PAST_READ = 1;
48 [&](
size_t idx,
FF& partial) { partial += eq[idx] * witness.get(idx + 1, ALLOW_ONE_PAST_READ); },
52 for (
const auto& partial : partials) {
61 BB_ASSERT_EQ(ipa_round_challenges_inv.size(), log_num_monomials);
70 for (
size_t lowest_set_bit = 0; lowest_set_bit < log_num_monomials; ++lowest_set_bit) {
71 left_products[lowest_set_bit] = lower_prefix_products[lowest_set_bit] * (
FF::one() - point[lowest_set_bit]);
72 right_products[lowest_set_bit] =
73 fold_factor(ipa_round_challenges_inv, lowest_set_bit) * upper_suffix_products[lowest_set_bit];
77 for (
size_t idx = 0; idx < log_num_monomials; ++idx) {
78 result += left_products[idx] * right_products[idx];
94 BB_ASSERT_EQ(ipa_round_challenges_inv.size(), log_num_monomials);
97 for (
size_t coordinate_idx = 0; coordinate_idx < log_num_monomials; ++coordinate_idx) {
106 return ipa_round_challenges_inv[log_num_monomials - 1 - coordinate_idx];
121 for (
size_t coordinate_idx = 0; coordinate_idx < log_num_monomials; ++coordinate_idx) {
122 lower_prefix_products[coordinate_idx] = lower_prefix;
123 lower_prefix *= point[coordinate_idx];
127 for (
size_t reverse_idx = 0; reverse_idx < log_num_monomials; ++reverse_idx) {
128 const size_t coordinate_idx = log_num_monomials - 1 - reverse_idx;
129 upper_suffix_products[coordinate_idx] = upper_suffix;
130 const FF s_i =
fold_factor(ipa_round_challenges_inv, coordinate_idx);
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_ASSERT_LTE(left, right,...)
static FF evaluate_folded(std::span< const FF > point, std::span< const FF > ipa_round_challenges_inv)
typename Curve::ScalarField FF
static FF fold_factor(std::span< const FF > ipa_round_challenges_inv, const size_t coordinate_idx)
static FF evaluate_eq_factor(const FF &coordinate, const FF &fold)
static void compute_prefix_suffix_products(std::span< const FF > point, std::span< const FF > ipa_round_challenges_inv, std::array< FF, log_num_monomials > &lower_prefix_products, std::array< FF, log_num_monomials > &upper_suffix_products)
static constexpr size_t poly_length
static FF evaluate_eq_folded(std::span< const FF > point, std::span< const FF > ipa_round_challenges_inv)
Fold the unshifted eq tensor eq(point, .) against the IPA s-vector.
static FF evaluate_from_eq(const Polynomial &eq, const Polynomial &witness)
static void add_scaled(Polynomial &result, const Polynomial &eq, const FF &scaling_factor)
static constexpr bool is_stdlib_type
constexpr size_t FF_ADDITION_COST
constexpr size_t FF_MULTIPLICATION_COST
Entry point for Barretenberg command-line interface.
void parallel_for_heuristic(size_t num_points, const std::function< void(size_t, size_t, size_t)> &func, size_t heuristic_cost)
Split a loop into several loops running in parallel based on operations in 1 iteration.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static FF univariate_factor(const FF &challenge, const FF &beta)
The pow_β per-variable factor at .
static constexpr field one()
static constexpr field zero()