18template <
class Flavor>
26 auto copy_cycles = populate_wires_and_selectors_and_compute_copy_cycles(
builder, polynomials, active_region_data);
31 add_ecc_op_wires_to_proving_key(
builder, polynomials);
38 compute_permutation_argument_polynomials<Flavor>(
builder, polynomials, copy_cycles, active_region_data);
42template <
class Flavor>
50 copy_cycles.resize(
builder.get_num_variables());
53 auto selectors = polynomials.get_selectors();
56 for (
auto& block :
builder.blocks.get()) {
57 const uint32_t
offset = block.trace_offset();
58 const uint32_t block_size =
static_cast<uint32_t
>(block.size());
61 if (block.size() > 0) {
70 for (uint32_t block_row_idx = 0; block_row_idx < block_size; ++block_row_idx) {
71 for (uint32_t wire_idx = 0; wire_idx < NUM_WIRES; ++wire_idx) {
72 uint32_t var_idx = block.wires[wire_idx][block_row_idx];
73 uint32_t real_var_idx =
builder.real_variable_index[var_idx];
74 uint32_t trace_row_idx = block_row_idx +
offset;
76 wires[wire_idx].at(trace_row_idx) =
builder.get_variable(var_idx);
78 copy_cycles[real_var_idx].emplace_back(
cycle_node{ wire_idx, trace_row_idx });
86 for (
size_t selector_idx = 0; selector_idx < block_selectors.
size(); selector_idx++) {
87 auto& selector = block_selectors[selector_idx];
88 for (
size_t row_idx = 0; row_idx < block_size; ++row_idx) {
89 size_t trace_row_idx = row_idx +
offset;
90 selectors[selector_idx].set_if_valid_index(trace_row_idx, selector[row_idx]);
98template <
class Flavor>
102 auto& ecc_op_selector = polynomials.lagrange_ecc_op;
107 const size_t num_ecc_ops =
builder.blocks.ecc_op.size();
108 for (
auto [ecc_op_wire, wire] :
zip_view(polynomials.get_ecc_op_wires(), polynomials.get_wires())) {
109 for (
size_t i = 0; i < num_ecc_ops; ++i) {
110 ecc_op_wire.at(i) = wire[i + wire_idx_offset];
111 ecc_op_selector.at(i) = 1;
119#ifdef STARKNET_GARAGA_FLAVORS
A container for the prover polynomials handles.
static constexpr bool has_zero_row
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
typename Flavor::CircuitBuilder Builder
static void add_ecc_op_wires_to_proving_key(Builder &builder, ProverPolynomials &)
Construct and add the goblin ecc op wires to the proving key.
static void populate(Builder &builder, ProverPolynomials &, ActiveRegionData &)
Given a circuit, populate a proving key with wire polys, selector polys, and sigma/id polys.
static std::vector< CyclicPermutation > populate_wires_and_selectors_and_compute_copy_cycles(Builder &builder, ProverPolynomials &, ActiveRegionData &)
Populate wire polynomials, selector polynomials and copy cycles from raw circuit data.
typename Flavor::ProverPolynomials ProverPolynomials
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
#define PROFILE_THIS_NAME(name)
void add_range(const size_t start, const size_t end)
cycle_node represents the idx of a value of the circuit. It will belong to a CyclicPermutation,...