82 for (
const auto& u_k : challenge) {
99 BB_ASSERT_DEBUG(idx % 2 == 0,
"GateSeparatorPolynomial: edge index must be even");
112 return Element::from_lanes([&](
size_t j) {
return (*
this)[edge_idx + (2 * j)]; });
147 if (!
betas.empty()) {
164 const size_t log_num_monomials,
165 const FF& scaling_factor =
FF(1))
172 BB_BENCH_NAME(
"GateSeparatorPolynomial::compute_beta_products");
173 size_t pow_size =
static_cast<size_t>(1) << log_num_monomials;
200 [&](
size_t start,
size_t end,
BB_UNUSED size_t chunk_index) {
202 for (
size_t i = start; i < end; i++) {
210 size_t predecessor = i ^ (
static_cast<size_t>(1) << lsb_pos);
212 if (predecessor >= start) {
218 size_t remaining = i;
219 while (remaining != 0) {
222 remaining ^=
static_cast<size_t>(1) << bit;
#define BB_ASSERT_DEBUG(expression,...)
bb::field< bb::Bn254FrParams > FF
#define BB_BENCH_NAME(name)
#define BB_BENCH_TRACY_NAME(name)
Fr & at(size_t index)
Our mutable accessor, unlike operator[]. We abuse precedent a bit to differentiate at() and operator[...
constexpr T get_lsb(const T in)
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.
bb::VectorAffineElementPushSpan< BaseParams > out
static FF univariate_factor(const FF &challenge, const FF &beta)
The pow_β per-variable factor at .
GateSeparatorPolynomial(const std::vector< FF > &betas)
Construct a new GateSeparatorPolynomial object without expanding to a vector of monomials.
Element gather(size_t edge_idx) const
Read Element::SIZE consecutive edge-pair pow_beta factors starting at edge_idx, packed as a single El...
size_t periodicity
In Round of Sumcheck, the periodicity equals to and represents the fixed interval at which elements...
GateSeparatorPolynomial(const std::vector< FF > &betas, const size_t log_num_monomials)
Construct a new GateSeparatorPolynomial.
std::vector< FF > betas
The challenges .
FF current_element() const
Computes the component at index current_element_idx in betas.
FF const & operator[](size_t idx) const
Retruns the element in beta_products at place #idx.
void partially_evaluate(FF challenge)
Partially evaluate the -polynomial at the new challenge and update .
FF univariate_eval(FF challenge) const
Evaluate at the challenge point .
GateSeparatorPolynomial(const std::vector< FF > &betas, const std::vector< FF > &challenge)
Constructs a virtual GateSeparator used by the prover in rounds k > d - 1, and computes its partial e...
FF partial_evaluation_result
The value obtained by partially evaluating one variable in the power polynomial at each round....
size_t current_element_idx
In Round of Sumcheck, it points to the -th element in .
Polynomial< FF > beta_products
The consecutive evaluations for identified with the integers .
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 .