3#include "barretenberg/proof_system/types/circuit_type.hpp"
10enum PolynomialSource { WITNESS, SELECTOR, PERMUTATION, OTHER };
12enum EvaluationType { NON_SHIFTED, SHIFTED };
57 std::string_view polynomial_label_ =
"",
58 bool requires_shifted_evaluation_ =
false,
59 PolynomialSource source_ = WITNESS,
60 PolynomialIndex index_ = Q_1)
61 : commitment_label(commitment_label_)
62 , polynomial_label(polynomial_label_)
63 , requires_shifted_evaluation(requires_shifted_evaluation_)
68 : commitment_label(other.commitment_label)
69 , polynomial_label(other.polynomial_label)
70 , requires_shifted_evaluation(other.requires_shifted_evaluation)
71 , source(other.source)
76 commitment_label = other.commitment_label;
77 polynomial_label = other.polynomial_label;
78 requires_shifted_evaluation = other.requires_shifted_evaluation;
79 source = other.source;
84 std::string_view commitment_label;
85 std::string_view polynomial_label;
86 bool requires_shifted_evaluation;
87 PolynomialSource source;
88 PolynomialIndex index;
91static constexpr size_t STANDARD_MANIFEST_SIZE = 12;
107static constexpr size_t ULTRA_MANIFEST_SIZE = 30;
108static constexpr PolynomialDescriptor ultra_polynomial_manifest[ULTRA_MANIFEST_SIZE]{
109 PolynomialDescriptor(
"W_1",
"w_1",
true, WITNESS, W_1),
110 PolynomialDescriptor(
"W_2",
"w_2",
true, WITNESS, W_2),
111 PolynomialDescriptor(
"W_3",
"w_3",
true, WITNESS, W_3),
112 PolynomialDescriptor(
"W_4",
"w_4",
true, WITNESS, W_4),
113 PolynomialDescriptor(
"S",
"s",
true, WITNESS, S),
114 PolynomialDescriptor(
"Z_PERM",
"z_perm",
true, WITNESS, Z),
115 PolynomialDescriptor(
"Z_LOOKUP",
"z_lookup",
true, WITNESS, Z_LOOKUP),
116 PolynomialDescriptor(
"Q_1",
"q_1",
false, SELECTOR, Q_1),
117 PolynomialDescriptor(
"Q_2",
"q_2",
false, SELECTOR, Q_2),
118 PolynomialDescriptor(
"Q_3",
"q_3",
false, SELECTOR, Q_3),
119 PolynomialDescriptor(
"Q_4",
"q_4",
false, SELECTOR, Q_4),
120 PolynomialDescriptor(
"Q_M",
"q_m",
false, SELECTOR, Q_M),
121 PolynomialDescriptor(
"Q_C",
"q_c",
false, SELECTOR, Q_C),
122 PolynomialDescriptor(
"Q_ARITHMETIC",
"q_arith",
false, SELECTOR, Q_ARITHMETIC),
123 PolynomialDescriptor(
"Q_SORT",
"q_sort",
false, SELECTOR, Q_SORT),
124 PolynomialDescriptor(
"Q_ELLIPTIC",
"q_elliptic",
false, SELECTOR, Q_ELLIPTIC),
125 PolynomialDescriptor(
"Q_AUX",
"q_aux",
false, SELECTOR, Q_AUX),
126 PolynomialDescriptor(
"SIGMA_1",
"sigma_1",
false, PERMUTATION, SIGMA_1),
127 PolynomialDescriptor(
"SIGMA_2",
"sigma_2",
false, PERMUTATION, SIGMA_2),
128 PolynomialDescriptor(
"SIGMA_3",
"sigma_3",
false, PERMUTATION, SIGMA_3),
129 PolynomialDescriptor(
"SIGMA_4",
"sigma_4",
false, PERMUTATION, SIGMA_4),
130 PolynomialDescriptor(
"TABLE_1",
"table_value_1",
true, SELECTOR, TABLE_1),
131 PolynomialDescriptor(
"TABLE_2",
"table_value_2",
true, SELECTOR, TABLE_2),
132 PolynomialDescriptor(
"TABLE_3",
"table_value_3",
true, SELECTOR, TABLE_3),
133 PolynomialDescriptor(
"TABLE_4",
"table_value_4",
true, SELECTOR, TABLE_4),
134 PolynomialDescriptor(
"TABLE_TYPE",
"table_type",
false, SELECTOR, TABLE_TYPE),
135 PolynomialDescriptor(
"ID_1",
"id_1",
false, PERMUTATION, ID_1),
136 PolynomialDescriptor(
"ID_2",
"id_2",
false, PERMUTATION, ID_2),
137 PolynomialDescriptor(
"ID_3",
"id_3",
false, PERMUTATION, ID_3),
138 PolynomialDescriptor(
"ID_4",
"id_4",
false, PERMUTATION, ID_4),
145 std::vector<PolynomialDescriptor> manifest;
152 switch (circuit_type) {
153 case CircuitType::STANDARD: {
154 std::copy(standard_polynomial_manifest,
155 standard_polynomial_manifest + STANDARD_MANIFEST_SIZE,
156 std::back_inserter(manifest));
159 case CircuitType::ULTRA: {
160 std::copy(ultra_polynomial_manifest,
161 ultra_polynomial_manifest + ULTRA_MANIFEST_SIZE,
162 std::back_inserter(manifest));
172 const std::vector<PolynomialDescriptor>& get()
const {
return manifest; };
174 size_t size()
const {
return manifest.size(); }
188 std::vector<std::string> precomputed_poly_ids;
196 for (
size_t i = 0; i < manifest.size(); ++i) {
197 std::string label = std::string(manifest[i].polynomial_label);
198 PolynomialSource source = manifest[i].source;
201 case PolynomialSource::WITNESS:
203 case PolynomialSource::SELECTOR:
204 precomputed_poly_ids.emplace_back(label);
205 precomputed_poly_ids.emplace_back(label +
"_fft");
207 if (circuit_type == CircuitType::ULTRA) {
208 precomputed_poly_ids.emplace_back(label +
"_lagrange");
211 case PolynomialSource::PERMUTATION:
212 precomputed_poly_ids.emplace_back(label);
213 precomputed_poly_ids.emplace_back(label +
"_fft");
214 precomputed_poly_ids.emplace_back(label +
"_lagrange");
216 case PolynomialSource::OTHER:
222 size_t size()
const {
return precomputed_poly_ids.size(); }
224 std::string operator[](
size_t index)
const {
return precomputed_poly_ids[index]; }
Definition: polynomial_manifest.hpp:142
Definition: polynomial_manifest.hpp:185
Definition: widget.bench.cpp:13
Definition: polynomial_manifest.hpp:55