2#include "barretenberg/polynomials/pow.hpp"
3#include "barretenberg/relations/relation_parameters.hpp"
9 using FF =
typename Flavor::FF;
10 using Relations =
typename Flavor::Relations;
12 using RelationEvaluations =
typename Flavor::TupleOfArraysOfValues;
14 static constexpr size_t NUM_RELATIONS = Flavor::NUM_RELATIONS;
28 template <
size_t outer_
idx = 0,
size_t inner_
idx = 0,
class Operation>
31 auto& inner_tuple = std::get<outer_idx>(tuple);
32 auto& univariate = std::get<inner_idx>(inner_tuple);
35 operation.template operator()<outer_idx, inner_idx>(univariate);
37 const size_t inner_size = std::tuple_size_v<std::decay_t<decltype(std::get<outer_idx>(tuple))>>;
38 const size_t outer_size = std::tuple_size_v<std::decay_t<
decltype(tuple)>>;
41 if constexpr (inner_idx + 1 < inner_size) {
42 apply_to_tuple_of_tuples<outer_idx, inner_idx + 1, Operation>(tuple, std::forward<Operation>(operation));
43 }
else if constexpr (outer_idx + 1 < outer_size) {
44 apply_to_tuple_of_tuples<outer_idx + 1, 0, Operation>(tuple, std::forward<Operation>(operation));
55 auto set_to_zero = []<size_t,
size_t>(
auto& element) {
56 std::fill(element.evaluations.begin(), element.evaluations.end(), FF(0));
70 auto scale_by_consecutive_powers_of_challenge = [&]<size_t,
size_t>(
auto& element) {
71 element *= current_scalar;
72 current_scalar *= challenge;
86 template <
typename... T>
87 static constexpr void add_tuples(std::tuple<T...>& tuple_1,
const std::tuple<T...>& tuple_2)
89 auto add_tuples_helper = [&]<std::size_t... I>(std::index_sequence<I...>)
91 ((std::get<I>(tuple_1) += std::get<I>(tuple_2)), ...);
94 add_tuples_helper(std::make_index_sequence<
sizeof...(T)>{});
108 template <
typename Tuple, std::
size_t Index = 0>
111 if constexpr (Index < std::tuple_size<Tuple>::value) {
112 add_tuples(std::get<Index>(tuple_1), std::get<Index>(tuple_2));
113 add_nested_tuples<Tuple, Index + 1>(tuple_1, tuple_2);
125 template <
typename Parameters,
size_t relation_
idx = 0>
128 RelationEvaluations& relation_evaluations,
129 const Parameters& relation_parameters,
130 const FF& partial_evaluation_constant)
132 using Relation = std::tuple_element_t<relation_idx, Relations>;
133 Relation::accumulate(std::get<relation_idx>(relation_evaluations),
136 partial_evaluation_constant);
139 if constexpr (relation_idx + 1 < NUM_RELATIONS) {
140 accumulate_relation_evaluations<Parameters, relation_idx + 1>(
141 evaluations, relation_evaluations, relation_parameters, partial_evaluation_constant);
156 auto set_to_zero = [](
auto& element) { std::fill(element.begin(), element.end(), FF(0)); };
166 auto scale_by_challenge_and_accumulate = [&](
auto& element) {
167 for (
auto& entry : element) {
168 result += entry * current_scalar;
169 current_scalar *= challenge;
181 template <
typename Operation,
size_t idx = 0,
typename... Ts>
184 auto& element = std::get<idx>(tuple);
186 std::invoke(std::forward<Operation>(operation), element);
188 if constexpr (idx + 1 <
sizeof...(Ts)) {
189 apply_to_tuple_of_arrays<Operation, idx + 1>(operation, tuple);
static void zero_elements(auto &tuple)
Set each element in a tuple of arrays to zero.
Definition: utils.hpp:154
static void zero_univariates(auto &tuple)
Set all coefficients of Univariates to zero.
Definition: utils.hpp:53
static void scale_and_batch_elements(auto &tuple, const FF &challenge, FF current_scalar, FF &result)
Scale elements by consecutive powers of the challenge then sum.
Definition: utils.hpp:164
static void apply_to_tuple_of_arrays(Operation &&operation, std::tuple< Ts... > &tuple)
General purpose method for applying a tuple of arrays (of FFs)
Definition: utils.hpp:182
static void accumulate_relation_evaluations(PolynomialEvaluations evaluations, RelationEvaluations &relation_evaluations, const Parameters &relation_parameters, const FF &partial_evaluation_constant)
Calculate the contribution of each relation to the expected value of the full Honk relation.
Definition: utils.hpp:127
static void apply_to_tuple_of_tuples(auto &tuple, Operation &&operation)
General purpose method for applying an operation to a tuple of tuples of Univariates.
Definition: utils.hpp:29
static void scale_univariates(auto &tuple, const FF &challenge, FF ¤t_scalar)
Scale Univaraites by consecutive powers of the provided challenge.
Definition: utils.hpp:68
static constexpr void add_nested_tuples(Tuple &tuple_1, const Tuple &tuple_2)
Componentwise addition of nested tuples (tuples of tuples)
Definition: utils.hpp:109
static constexpr void add_tuples(std::tuple< T... > &tuple_1, const std::tuple< T... > &tuple_2)
Componentwise addition of two tuples.
Definition: utils.hpp:87
Definition: AvmMini_flavor.hpp:254
constexpr_utils defines some helper methods that perform some stl-equivalent operations but in a cons...
Definition: constexpr_utils.hpp:16