48 copy_cycles.resize(
builder.get_num_variables());
51 auto selectors = polynomials.get_selectors();
54 for (
auto& block :
builder.blocks.get()) {
55 const uint32_t
offset = block.trace_offset();
56 const uint32_t block_size =
static_cast<uint32_t
>(block.size());
63 for (uint32_t block_row_idx = 0; block_row_idx < block_size; ++block_row_idx) {
64 for (uint32_t wire_idx = 0; wire_idx < NUM_WIRES; ++wire_idx) {
65 uint32_t var_idx = block.wires[wire_idx][block_row_idx];
66 uint32_t real_var_idx =
builder.real_variable_index[var_idx];
67 uint32_t trace_row_idx = block_row_idx +
offset;
69 wires[wire_idx].at(trace_row_idx) =
builder.get_variable(var_idx);
72 copy_cycles[real_var_idx].emplace_back(
cycle_node{ wire_idx, trace_row_idx });
80 for (
size_t selector_idx = 0; selector_idx < block_selectors.
size(); selector_idx++) {
81 auto& selector = block_selectors[selector_idx];
82 for (
size_t row_idx = 0; row_idx < block_size; ++row_idx) {
83 size_t trace_row_idx = row_idx +
offset;
84 selectors[selector_idx].set_if_valid_index(trace_row_idx, selector[row_idx]);
static void populate(Builder &builder, ProverPolynomials &)
Given a circuit, populate a proving key with wire polys, selector polys, and sigma/id polys.