Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mega_avm_flavor_generated.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE — do not edit. Regenerate via:
2// node barretenberg/cpp/scripts/flavor-codegen/dist/main.js
3//
4// Source: barretenberg/cpp/scripts/flavor-codegen/src/flavors/mega_avm.ts
5#pragma once
6
7#include <array>
8#include <cstddef>
9#include <cstdint>
10#include <span>
11#include <string>
12#include <tuple>
13#include <vector>
14
28
29namespace bb {
30
32 public:
33 // Dense flavor-local entity index. Layout: [masking | precomputed | witness | shifted].
34 enum class EntityId : uint16_t {
35 q_m = 0,
36 q_l = 1,
37 q_r = 2,
38 q_o = 3,
39 q_4 = 4,
40 q_c = 5,
41 q_arith = 6,
42 sigma_1 = 7,
43 sigma_2 = 8,
44 sigma_3 = 9,
45 sigma_4 = 10,
46 id_1 = 11,
47 id_2 = 12,
48 id_3 = 13,
49 id_4 = 14,
50 lagrange_first = 15,
51 lagrange_last = 16,
52 q_delta_range = 17,
53 lagrange_ecc_op = 18,
57 q_5 = 22,
60 w_l = 25,
61 w_r = 26,
62 w_o = 27,
63 w_4 = 28,
64 z_perm = 29,
65 ecc_op_wire_1 = 30,
66 ecc_op_wire_2 = 31,
67 ecc_op_wire_3 = 32,
68 ecc_op_wire_4 = 33,
69 w_l_shift = 34,
70 w_r_shift = 35,
71 w_o_shift = 36,
72 w_4_shift = 37,
73 z_perm_shift = 38,
74 };
75
76 // Sumcheck relation tuple. Source of truth is
77 // flavor-codegen/src/flavors/mega_avm.ts; structural relations are omitted.
78 template <typename FF>
79 using Relations_ = std::tuple<
89
90 static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 25;
91 static constexpr size_t NUM_WITNESS_ENTITIES = 9;
92 static constexpr size_t NUM_MASKING_ENTITIES = 0;
93 static constexpr size_t NUM_SHIFTED_ENTITIES = 5;
94 static constexpr bool HasDataBus = false;
95 static constexpr size_t NUM_BUS_COLUMNS = 0;
96 static constexpr bool HasLogDerivLookup = false;
97 static constexpr bool HasElliptic = false;
98 static constexpr bool HasMemory = false;
99 static constexpr bool HasNonNativeField = false;
100 static constexpr bool HasEccOpQueue = true;
101 static constexpr size_t NUM_COMMITTED_WITNESS_ENTITIES =
103 static constexpr size_t NUM_UNSHIFTED_ENTITIES =
106
107 // Per-shifted-entity (original, duplicate) index pairs in AllEntities, one per shifted
108 // entity. Collapsed into `RepeatedCommitmentsData` below for Shplemini compatibility.
110 DuplicatePair{ 25, 34 },
111 DuplicatePair{ 26, 35 },
112 DuplicatePair{ 27, 36 },
113 DuplicatePair{ 28, 37 },
114 DuplicatePair{ 29, 38 },
115 };
118
119 // Gate-selector blocks, parallel to `get_gate_selectors()`.
120 template <typename TraceBlocks>
121 static auto get_gate_blocks(TraceBlocks& blocks)
122 {
123 using BlockBase = typename TraceBlocks::BlockBase;
125 &blocks.arithmetic,
126 &blocks.delta_range,
127 &blocks.poseidon2,
128 &blocks.poseidon2,
129 &blocks.poseidon2,
130 &blocks.poseidon2,
131 &blocks.poseidon2,
132 });
133 }
134
135 template <typename TraceBlocks>
136 static auto get_gate_blocks(TraceBlocks const& blocks)
137 {
138 using BlockBase = typename TraceBlocks::BlockBase;
140 &blocks.arithmetic,
141 &blocks.delta_range,
142 &blocks.poseidon2,
143 &blocks.poseidon2,
144 &blocks.poseidon2,
145 &blocks.poseidon2,
146 &blocks.poseidon2,
147 });
148 }
149
150 // GateKind for each gate selector, parallel to `get_gate_blocks()`.
160
161 // Non-gate selectors in `get_non_gate_selectors()` order, as references into a single block.
162 template <typename TraceBlock>
163 static auto get_block_non_gate_selectors(TraceBlock& block)
164 {
165 using SelT = std::remove_reference_t<decltype(block.q_m())>;
166 return RefArray<SelT, 7>{
167 block.q_m(),
168 block.q_1(),
169 block.q_2(),
170 block.q_3(),
171 block.q_4(),
172 block.q_c(),
173 block.q_5(),
174 };
175 }
176
177 // AllEntities: flat `std::array` storage with EntityId-keyed access and named accessors.
178 template <typename DataType> class AllEntities {
179 public:
181 std::array<DataType, NUM_ALL_ENTITIES> data{};
182
183 DataType& operator[](EntityId id) { return data[static_cast<size_t>(id)]; }
184 const DataType& operator[](EntityId id) const { return data[static_cast<size_t>(id)]; }
185
188
189 // Named accessors (unshifted + shifted): mutable + const overloads.
190 DataType& q_m() { return data[static_cast<size_t>(EntityId::q_m)]; }
191 const DataType& q_m() const { return data[static_cast<size_t>(EntityId::q_m)]; }
192 DataType& q_l() { return data[static_cast<size_t>(EntityId::q_l)]; }
193 const DataType& q_l() const { return data[static_cast<size_t>(EntityId::q_l)]; }
194 DataType& q_r() { return data[static_cast<size_t>(EntityId::q_r)]; }
195 const DataType& q_r() const { return data[static_cast<size_t>(EntityId::q_r)]; }
196 DataType& q_o() { return data[static_cast<size_t>(EntityId::q_o)]; }
197 const DataType& q_o() const { return data[static_cast<size_t>(EntityId::q_o)]; }
198 DataType& q_4() { return data[static_cast<size_t>(EntityId::q_4)]; }
199 const DataType& q_4() const { return data[static_cast<size_t>(EntityId::q_4)]; }
200 DataType& q_c() { return data[static_cast<size_t>(EntityId::q_c)]; }
201 const DataType& q_c() const { return data[static_cast<size_t>(EntityId::q_c)]; }
202 DataType& q_arith() { return data[static_cast<size_t>(EntityId::q_arith)]; }
203 const DataType& q_arith() const { return data[static_cast<size_t>(EntityId::q_arith)]; }
204 DataType& sigma_1() { return data[static_cast<size_t>(EntityId::sigma_1)]; }
205 const DataType& sigma_1() const { return data[static_cast<size_t>(EntityId::sigma_1)]; }
206 DataType& sigma_2() { return data[static_cast<size_t>(EntityId::sigma_2)]; }
207 const DataType& sigma_2() const { return data[static_cast<size_t>(EntityId::sigma_2)]; }
208 DataType& sigma_3() { return data[static_cast<size_t>(EntityId::sigma_3)]; }
209 const DataType& sigma_3() const { return data[static_cast<size_t>(EntityId::sigma_3)]; }
210 DataType& sigma_4() { return data[static_cast<size_t>(EntityId::sigma_4)]; }
211 const DataType& sigma_4() const { return data[static_cast<size_t>(EntityId::sigma_4)]; }
212 DataType& id_1() { return data[static_cast<size_t>(EntityId::id_1)]; }
213 const DataType& id_1() const { return data[static_cast<size_t>(EntityId::id_1)]; }
214 DataType& id_2() { return data[static_cast<size_t>(EntityId::id_2)]; }
215 const DataType& id_2() const { return data[static_cast<size_t>(EntityId::id_2)]; }
216 DataType& id_3() { return data[static_cast<size_t>(EntityId::id_3)]; }
217 const DataType& id_3() const { return data[static_cast<size_t>(EntityId::id_3)]; }
218 DataType& id_4() { return data[static_cast<size_t>(EntityId::id_4)]; }
219 const DataType& id_4() const { return data[static_cast<size_t>(EntityId::id_4)]; }
220 DataType& lagrange_first() { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
221 const DataType& lagrange_first() const { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
222 DataType& lagrange_last() { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
223 const DataType& lagrange_last() const { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
224 DataType& q_delta_range() { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
225 const DataType& q_delta_range() const { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
226 DataType& lagrange_ecc_op() { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
227 const DataType& lagrange_ecc_op() const { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
228 DataType& q_poseidon2_external() { return data[static_cast<size_t>(EntityId::q_poseidon2_external)]; }
229 const DataType& q_poseidon2_external() const { return data[static_cast<size_t>(EntityId::q_poseidon2_external)]; }
230 DataType& q_poseidon2_external_initial() { return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)]; }
231 const DataType& q_poseidon2_external_initial() const { return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)]; }
232 DataType& q_poseidon2_quad_internal() { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)]; }
233 const DataType& q_poseidon2_quad_internal() const { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)]; }
234 DataType& q_5() { return data[static_cast<size_t>(EntityId::q_5)]; }
235 const DataType& q_5() const { return data[static_cast<size_t>(EntityId::q_5)]; }
236 DataType& q_poseidon2_quad_internal_terminal() { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)]; }
237 const DataType& q_poseidon2_quad_internal_terminal() const { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)]; }
238 DataType& q_poseidon2_transition_entry() { return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)]; }
239 const DataType& q_poseidon2_transition_entry() const { return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)]; }
240 DataType& w_l() { return data[static_cast<size_t>(EntityId::w_l)]; }
241 const DataType& w_l() const { return data[static_cast<size_t>(EntityId::w_l)]; }
242 DataType& w_r() { return data[static_cast<size_t>(EntityId::w_r)]; }
243 const DataType& w_r() const { return data[static_cast<size_t>(EntityId::w_r)]; }
244 DataType& w_o() { return data[static_cast<size_t>(EntityId::w_o)]; }
245 const DataType& w_o() const { return data[static_cast<size_t>(EntityId::w_o)]; }
246 DataType& w_4() { return data[static_cast<size_t>(EntityId::w_4)]; }
247 const DataType& w_4() const { return data[static_cast<size_t>(EntityId::w_4)]; }
248 DataType& z_perm() { return data[static_cast<size_t>(EntityId::z_perm)]; }
249 const DataType& z_perm() const { return data[static_cast<size_t>(EntityId::z_perm)]; }
250 DataType& ecc_op_wire_1() { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
251 const DataType& ecc_op_wire_1() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
252 DataType& ecc_op_wire_2() { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
253 const DataType& ecc_op_wire_2() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
254 DataType& ecc_op_wire_3() { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
255 const DataType& ecc_op_wire_3() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
256 DataType& ecc_op_wire_4() { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
257 const DataType& ecc_op_wire_4() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
258 DataType& w_l_shift() { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
259 const DataType& w_l_shift() const { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
260 DataType& w_r_shift() { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
261 const DataType& w_r_shift() const { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
262 DataType& w_o_shift() { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
263 const DataType& w_o_shift() const { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
264 DataType& w_4_shift() { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
265 const DataType& w_4_shift() const { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
266 DataType& z_perm_shift() { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
267 const DataType& z_perm_shift() const { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
268
269 // Kind/shift partitions: contiguous slices of `data`.
280
281 // Subset views (relation-declared groupings in layout order).
282 RefArray<DataType, 4> get_wires() { return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] }; }
283 RefArray<const DataType, 4> get_wires() const { return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] }; }
284 RefArray<DataType, 7> get_non_gate_selectors() { return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] }; }
285 RefArray<const DataType, 7> get_non_gate_selectors() const { return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] }; }
286 RefArray<DataType, 7> get_gate_selectors() { return { (*this)[EntityId::q_arith], (*this)[EntityId::q_delta_range], (*this)[EntityId::q_poseidon2_external], (*this)[EntityId::q_poseidon2_external_initial], (*this)[EntityId::q_poseidon2_quad_internal], (*this)[EntityId::q_poseidon2_quad_internal_terminal], (*this)[EntityId::q_poseidon2_transition_entry] }; }
287 RefArray<const DataType, 7> get_gate_selectors() const { return { (*this)[EntityId::q_arith], (*this)[EntityId::q_delta_range], (*this)[EntityId::q_poseidon2_external], (*this)[EntityId::q_poseidon2_external_initial], (*this)[EntityId::q_poseidon2_quad_internal], (*this)[EntityId::q_poseidon2_quad_internal_terminal], (*this)[EntityId::q_poseidon2_transition_entry] }; }
288 RefArray<DataType, 4> get_sigmas() { return { (*this)[EntityId::sigma_1], (*this)[EntityId::sigma_2], (*this)[EntityId::sigma_3], (*this)[EntityId::sigma_4] }; }
289 RefArray<const DataType, 4> get_sigmas() const { return { (*this)[EntityId::sigma_1], (*this)[EntityId::sigma_2], (*this)[EntityId::sigma_3], (*this)[EntityId::sigma_4] }; }
290 RefArray<DataType, 4> get_ids() { return { (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4] }; }
291 RefArray<const DataType, 4> get_ids() const { return { (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4] }; }
292 RefArray<DataType, 4> get_ecc_op_wires() { return { (*this)[EntityId::ecc_op_wire_1], (*this)[EntityId::ecc_op_wire_2], (*this)[EntityId::ecc_op_wire_3], (*this)[EntityId::ecc_op_wire_4] }; }
293 RefArray<const DataType, 4> get_ecc_op_wires() const { return { (*this)[EntityId::ecc_op_wire_1], (*this)[EntityId::ecc_op_wire_2], (*this)[EntityId::ecc_op_wire_3], (*this)[EntityId::ecc_op_wire_4] }; }
294
295 // Composite views: concatenations of subset views.
298
299 // Labels — uppercase, layout order.
300 static const std::vector<std::string>& get_labels()
301 {
302 static const std::vector<std::string> labels = {
303 "Q_M", "Q_L", "Q_R", "Q_O",
304 "Q_4", "Q_C", "Q_ARITH", "SIGMA_1",
305 "SIGMA_2", "SIGMA_3", "SIGMA_4", "ID_1",
306 "ID_2", "ID_3", "ID_4", "LAGRANGE_FIRST",
307 "LAGRANGE_LAST", "Q_DELTA_RANGE", "LAGRANGE_ECC_OP", "Q_POSEIDON2_EXTERNAL",
308 "Q_POSEIDON2_EXTERNAL_INITIAL", "Q_POSEIDON2_QUAD_INTERNAL", "Q_5", "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
309 "Q_POSEIDON2_TRANSITION_ENTRY", "W_L", "W_R", "W_O",
310 "W_4", "Z_PERM", "ECC_OP_WIRE_1", "ECC_OP_WIRE_2",
311 "ECC_OP_WIRE_3", "ECC_OP_WIRE_4", "W_L_SHIFT", "W_R_SHIFT",
312 "W_O_SHIFT", "W_4_SHIFT", "Z_PERM_SHIFT",
313 };
314 return labels;
315 }
316 };
317
318 // Verification-key transport class. Owns its own storage; not a slice of AllEntities.
319 template <typename DataType_> class PrecomputedEntities {
320 public:
321 using DataType = DataType_;
322 std::array<DataType, NUM_PRECOMPUTED_ENTITIES> data{};
323
324 bool operator==(const PrecomputedEntities&) const = default;
325
328
329 static constexpr size_t size() { return NUM_PRECOMPUTED_ENTITIES; }
330
331 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
332 DataType& q_m() { return data[0]; }
333 const DataType& q_m() const { return data[0]; }
334 DataType& q_l() { return data[1]; }
335 const DataType& q_l() const { return data[1]; }
336 DataType& q_r() { return data[2]; }
337 const DataType& q_r() const { return data[2]; }
338 DataType& q_o() { return data[3]; }
339 const DataType& q_o() const { return data[3]; }
340 DataType& q_4() { return data[4]; }
341 const DataType& q_4() const { return data[4]; }
342 DataType& q_c() { return data[5]; }
343 const DataType& q_c() const { return data[5]; }
344 DataType& q_arith() { return data[6]; }
345 const DataType& q_arith() const { return data[6]; }
346 DataType& sigma_1() { return data[7]; }
347 const DataType& sigma_1() const { return data[7]; }
348 DataType& sigma_2() { return data[8]; }
349 const DataType& sigma_2() const { return data[8]; }
350 DataType& sigma_3() { return data[9]; }
351 const DataType& sigma_3() const { return data[9]; }
352 DataType& sigma_4() { return data[10]; }
353 const DataType& sigma_4() const { return data[10]; }
354 DataType& id_1() { return data[11]; }
355 const DataType& id_1() const { return data[11]; }
356 DataType& id_2() { return data[12]; }
357 const DataType& id_2() const { return data[12]; }
358 DataType& id_3() { return data[13]; }
359 const DataType& id_3() const { return data[13]; }
360 DataType& id_4() { return data[14]; }
361 const DataType& id_4() const { return data[14]; }
362 DataType& lagrange_first() { return data[15]; }
363 const DataType& lagrange_first() const { return data[15]; }
364 DataType& lagrange_last() { return data[16]; }
365 const DataType& lagrange_last() const { return data[16]; }
366 DataType& q_delta_range() { return data[17]; }
367 const DataType& q_delta_range() const { return data[17]; }
368 DataType& lagrange_ecc_op() { return data[18]; }
369 const DataType& lagrange_ecc_op() const { return data[18]; }
371 const DataType& q_poseidon2_external() const { return data[19]; }
373 const DataType& q_poseidon2_external_initial() const { return data[20]; }
375 const DataType& q_poseidon2_quad_internal() const { return data[21]; }
376 DataType& q_5() { return data[22]; }
377 const DataType& q_5() const { return data[22]; }
379 const DataType& q_poseidon2_quad_internal_terminal() const { return data[23]; }
381 const DataType& q_poseidon2_transition_entry() const { return data[24]; }
382
383 // Subset views.
384 RefArray<DataType, 7> get_non_gate_selectors() { return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() }; }
385 RefArray<const DataType, 7> get_non_gate_selectors() const { return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() }; }
388 RefArray<DataType, 4> get_sigmas() { return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() }; }
389 RefArray<const DataType, 4> get_sigmas() const { return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() }; }
390 RefArray<DataType, 4> get_ids() { return { this->id_1(), this->id_2(), this->id_3(), this->id_4() }; }
391 RefArray<const DataType, 4> get_ids() const { return { this->id_1(), this->id_2(), this->id_3(), this->id_4() }; }
392
393 // Composite views.
396
397 static const std::vector<std::string>& get_labels()
398 {
399 static const std::vector<std::string> labels = {
400 "Q_M", "Q_L", "Q_R", "Q_O",
401 "Q_4", "Q_C", "Q_ARITH", "SIGMA_1",
402 "SIGMA_2", "SIGMA_3", "SIGMA_4", "ID_1",
403 "ID_2", "ID_3", "ID_4", "LAGRANGE_FIRST",
404 "LAGRANGE_LAST", "Q_DELTA_RANGE", "LAGRANGE_ECC_OP", "Q_POSEIDON2_EXTERNAL",
405 "Q_POSEIDON2_EXTERNAL_INITIAL", "Q_POSEIDON2_QUAD_INTERNAL", "Q_5", "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
406 "Q_POSEIDON2_TRANSITION_ENTRY",
407 };
408 return labels;
409 }
410 };
411
412 // Prover-commitment transport class (witness only). Owns its own storage.
413 template <typename DataType_> class WitnessEntities {
414 public:
415 using DataType = DataType_;
416 std::array<DataType, NUM_WITNESS_ENTITIES> data{};
417
418 bool operator==(const WitnessEntities&) const = default;
419
422
423 static constexpr size_t size() { return NUM_WITNESS_ENTITIES; }
424
425 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
426 DataType& w_l() { return data[0]; }
427 const DataType& w_l() const { return data[0]; }
428 DataType& w_r() { return data[1]; }
429 const DataType& w_r() const { return data[1]; }
430 DataType& w_o() { return data[2]; }
431 const DataType& w_o() const { return data[2]; }
432 DataType& w_4() { return data[3]; }
433 const DataType& w_4() const { return data[3]; }
434 DataType& z_perm() { return data[4]; }
435 const DataType& z_perm() const { return data[4]; }
436 DataType& ecc_op_wire_1() { return data[5]; }
437 const DataType& ecc_op_wire_1() const { return data[5]; }
438 DataType& ecc_op_wire_2() { return data[6]; }
439 const DataType& ecc_op_wire_2() const { return data[6]; }
440 DataType& ecc_op_wire_3() { return data[7]; }
441 const DataType& ecc_op_wire_3() const { return data[7]; }
442 DataType& ecc_op_wire_4() { return data[8]; }
443 const DataType& ecc_op_wire_4() const { return data[8]; }
444
445 // Subset views.
446 RefArray<DataType, 4> get_wires() { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
447 RefArray<const DataType, 4> get_wires() const { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
450
451 RefArray<DataType, 5> get_to_be_shifted() { return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() }; }
452 RefArray<const DataType, 5> get_to_be_shifted() const { return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() }; }
453
454 static const std::vector<std::string>& get_labels()
455 {
456 static const std::vector<std::string> labels = {
457 "W_L", "W_R", "W_O", "W_4",
458 "Z_PERM", "ECC_OP_WIRE_1", "ECC_OP_WIRE_2", "ECC_OP_WIRE_3",
459 "ECC_OP_WIRE_4",
460 };
461 return labels;
462 }
463 };
464};
465
466} // namespace bb
std::span< DataType, NUM_ALL_ENTITIES > get_all()
std::span< const DataType, NUM_WITNESS_ENTITIES > get_witness() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_shifted()
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_shifted() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted() const
RefArray< const DataType, 4 > get_sigmas() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted()
RefArray< const DataType, 7 > get_non_gate_selectors() const
std::span< const DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed()
static const std::vector< std::string > & get_labels()
RefArray< const DataType, 4 > get_ids() const
RefArray< const DataType, 4 > get_wires() const
std::array< DataType, NUM_ALL_ENTITIES > data
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed() const
RefArray< const DataType, 7 > get_gate_selectors() const
std::span< DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted()
std::span< DataType, NUM_WITNESS_ENTITIES > get_witness()
RefArray< const DataType, 4 > get_ecc_op_wires() const
std::span< const DataType, NUM_ALL_ENTITIES > get_all() const
const DataType & operator[](EntityId id) const
static const std::vector< std::string > & get_labels()
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_all()
RefArray< const DataType, 7 > get_non_gate_selectors() const
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_all() const
std::array< DataType, NUM_PRECOMPUTED_ENTITIES > data
bool operator==(const PrecomputedEntities &) const =default
std::array< DataType, NUM_WITNESS_ENTITIES > data
bool operator==(const WitnessEntities &) const =default
RefArray< const DataType, 5 > get_to_be_shifted() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_all() const
static const std::vector< std::string > & get_labels()
std::span< DataType, NUM_WITNESS_ENTITIES > get_all()
RefArray< const DataType, 4 > get_ecc_op_wires() const
static constexpr std::array< GateKind, 7 > GATE_KINDS
static constexpr size_t NUM_MASKING_ENTITIES
static constexpr size_t NUM_UNSHIFTED_ENTITIES
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
static auto get_gate_blocks(TraceBlocks &blocks)
static auto get_block_non_gate_selectors(TraceBlock &block)
static auto get_gate_blocks(TraceBlocks const &blocks)
static constexpr size_t NUM_SHIFTED_ENTITIES
static constexpr size_t NUM_COMMITTED_WITNESS_ENTITIES
static constexpr size_t NUM_PRECOMPUTED_ENTITIES
static constexpr std::array< DuplicatePair, NUM_SHIFTED_ENTITIES > REPEATED_COMMITMENT_PAIRS
static constexpr size_t NUM_WITNESS_ENTITIES
std::tuple< bb::ArithmeticRelation< FF >, bb::UltraPermutationRelation< FF >, bb::DeltaRangeConstraintRelation< FF >, bb::EccOpQueueRelation< FF >, bb::Poseidon2ExternalRelation< FF >, bb::Poseidon2InitialExternalRelation< FF >, bb::Poseidon2QuadInternalRelation< FF >, bb::Poseidon2QuadInternalTerminalRelation< FF >, bb::Poseidon2TransitionEntryRelation< FF > > Relations_
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
Definition ref_array.hpp:23
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr RepeatedCommitmentsData repeated_commitments_from_pairs(std::span< const DuplicatePair > pairs)
Collapse a span of (original, duplicate) pairs into a RepeatedCommitmentsData of up to two contiguous...
RefArray< T,(Ns+...)> constexpr concatenate(const RefArray< T, Ns > &... ref_arrays)
Concatenates multiple RefArray objects into a single RefArray.
@ Poseidon2QuadIntTerminal
@ Poseidon2TransitionEntry
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
One commitment shared by an unshifted polynomial and its shifted copy.