Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
to_radix_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
5
6namespace bb::avm2 {
7
8template <typename FF_>
9template <typename ContainerOverSubrelations, typename AllEntities>
10void to_radixImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
11 const AllEntities& in,
12 [[maybe_unused]] const RelationParameters<FF_>&,
13 [[maybe_unused]] const FF_& scaling_factor)
14{
15 using C = ColumnAndShifts;
16
17 PROFILE_THIS_NAME("accumulate/to_radix");
18
19 const auto to_radix_LATCH_CONDITION = in.get(C::to_radix_end) + in.get(C::precomputed_first_row);
20 const auto to_radix_REM = (in.get(C::to_radix_value) - in.get(C::to_radix_acc));
21 const auto to_radix_safety_diff = (in.get(C::to_radix_limb_index) - in.get(C::to_radix_safe_limbs));
22 const auto to_radix_LIMB_LT_P = ((in.get(C::to_radix_p_limb) - in.get(C::to_radix_limb)) - FF(1));
23 const auto to_radix_LIMB_GT_P = ((in.get(C::to_radix_limb) - in.get(C::to_radix_p_limb)) - FF(1));
24 const auto to_radix_LIMB_EQ_P = (in.get(C::to_radix_limb) - in.get(C::to_radix_p_limb)) * FF(256);
25
26 {
27 using Accumulator = typename std::tuple_element_t<0, ContainerOverSubrelations>;
28 auto tmp = in.get(C::to_radix_sel) * (FF(1) - in.get(C::to_radix_sel));
29 tmp *= scaling_factor;
30 std::get<0>(evals) += typename Accumulator::View(tmp);
31 }
32 {
33 using Accumulator = typename std::tuple_element_t<1, ContainerOverSubrelations>;
34 auto tmp = in.get(C::to_radix_start) * (FF(1) - in.get(C::to_radix_start));
35 tmp *= scaling_factor;
36 std::get<1>(evals) += typename Accumulator::View(tmp);
37 }
38 {
39 using Accumulator = typename std::tuple_element_t<2, ContainerOverSubrelations>;
40 auto tmp = in.get(C::to_radix_end) * (FF(1) - in.get(C::to_radix_end));
41 tmp *= scaling_factor;
42 std::get<2>(evals) += typename Accumulator::View(tmp);
43 }
44 {
45 using Accumulator = typename std::tuple_element_t<3, ContainerOverSubrelations>;
46 auto tmp = in.get(C::to_radix_end) * in.get(C::precomputed_first_row);
47 tmp *= scaling_factor;
48 std::get<3>(evals) += typename Accumulator::View(tmp);
49 }
50 { // START_AFTER_LATCH
51 using Accumulator = typename std::tuple_element_t<4, ContainerOverSubrelations>;
52 auto tmp = in.get(C::to_radix_sel_shift) * (in.get(C::to_radix_start_shift) - to_radix_LATCH_CONDITION);
53 tmp *= scaling_factor;
54 std::get<4>(evals) += typename Accumulator::View(tmp);
55 }
56 { // SELECTOR_ON_START
57 using Accumulator = typename std::tuple_element_t<5, ContainerOverSubrelations>;
58 auto tmp = in.get(C::to_radix_start) * (FF(1) - in.get(C::to_radix_sel));
59 tmp *= scaling_factor;
60 std::get<5>(evals) += typename Accumulator::View(tmp);
61 }
62 { // SELECTOR_CONSISTENCY
63 using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>;
64 auto tmp = (in.get(C::to_radix_sel_shift) - in.get(C::to_radix_sel)) * (FF(1) - to_radix_LATCH_CONDITION);
65 tmp *= scaling_factor;
66 std::get<6>(evals) += typename Accumulator::View(tmp);
67 }
68 {
69 using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>;
70 auto tmp = in.get(C::to_radix_end) * (FF(1) - in.get(C::to_radix_sel));
71 tmp *= scaling_factor;
72 std::get<7>(evals) += typename Accumulator::View(tmp);
73 }
74 {
75 using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>;
76 auto tmp = (in.get(C::to_radix_sel) * (FF(1) - in.get(C::to_radix_end)) - in.get(C::to_radix_not_end));
77 tmp *= scaling_factor;
78 std::get<8>(evals) += typename Accumulator::View(tmp);
79 }
80 {
81 using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>;
82 auto tmp = in.get(C::to_radix_not_padding_limb) * (FF(1) - in.get(C::to_radix_not_padding_limb));
83 tmp *= scaling_factor;
84 std::get<9>(evals) += typename Accumulator::View(tmp);
85 }
86 {
87 using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>;
88 auto tmp = in.get(C::to_radix_start) * (in.get(C::to_radix_exponent) - FF(1));
89 tmp *= scaling_factor;
90 std::get<10>(evals) += typename Accumulator::View(tmp);
91 }
92 {
93 using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>;
94 auto tmp = in.get(C::to_radix_not_end) * in.get(C::to_radix_not_padding_limb_shift) *
95 (in.get(C::to_radix_exponent) * in.get(C::to_radix_radix) - in.get(C::to_radix_exponent_shift));
96 tmp *= scaling_factor;
97 std::get<11>(evals) += typename Accumulator::View(tmp);
98 }
99 {
100 using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>;
101 auto tmp = in.get(C::to_radix_start) * (FF(1) - in.get(C::to_radix_not_padding_limb));
102 tmp *= scaling_factor;
103 std::get<12>(evals) += typename Accumulator::View(tmp);
104 }
105 {
106 using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>;
107 auto tmp = in.get(C::to_radix_not_end) *
108 (((FF(0) - in.get(C::to_radix_not_padding_limb)) * in.get(C::to_radix_is_unsafe_limb) +
109 in.get(C::to_radix_not_padding_limb)) -
110 in.get(C::to_radix_not_padding_limb_shift));
111 tmp *= scaling_factor;
112 std::get<13>(evals) += typename Accumulator::View(tmp);
113 }
114 {
115 using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>;
116 auto tmp = (FF(1) - in.get(C::to_radix_not_padding_limb)) * in.get(C::to_radix_exponent);
117 tmp *= scaling_factor;
118 std::get<14>(evals) += typename Accumulator::View(tmp);
119 }
120 {
121 using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>;
122 auto tmp = in.get(C::to_radix_found) * (FF(1) - in.get(C::to_radix_found));
123 tmp *= scaling_factor;
124 std::get<15>(evals) += typename Accumulator::View(tmp);
125 }
126 {
127 using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>;
128 auto tmp = in.get(C::to_radix_start) * in.get(C::to_radix_limb_index);
129 tmp *= scaling_factor;
130 std::get<16>(evals) += typename Accumulator::View(tmp);
131 }
132 {
133 using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>;
134 auto tmp = in.get(C::to_radix_not_end) *
135 ((in.get(C::to_radix_limb_index) + FF(1)) - in.get(C::to_radix_limb_index_shift));
136 tmp *= scaling_factor;
137 std::get<17>(evals) += typename Accumulator::View(tmp);
138 }
139 {
140 using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>;
141 auto tmp = in.get(C::to_radix_sel) * (((in.get(C::to_radix_radix) - FF(1)) - in.get(C::to_radix_limb)) -
142 in.get(C::to_radix_limb_radix_diff));
143 tmp *= scaling_factor;
144 std::get<18>(evals) += typename Accumulator::View(tmp);
145 }
146 {
147 using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>;
148 auto tmp = in.get(C::to_radix_start) * (in.get(C::to_radix_acc) - in.get(C::to_radix_limb));
149 tmp *= scaling_factor;
150 std::get<19>(evals) += typename Accumulator::View(tmp);
151 }
152 {
153 using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>;
154 auto tmp = in.get(C::to_radix_not_end) *
155 ((in.get(C::to_radix_acc) + in.get(C::to_radix_exponent_shift) * in.get(C::to_radix_limb_shift)) -
156 in.get(C::to_radix_acc_shift));
157 tmp *= scaling_factor;
158 std::get<20>(evals) += typename Accumulator::View(tmp);
159 }
160 {
161 using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>;
162 auto tmp = in.get(C::to_radix_sel) *
163 ((to_radix_REM * (in.get(C::to_radix_found) * (FF(1) - in.get(C::to_radix_rem_inverse)) +
164 in.get(C::to_radix_rem_inverse)) -
165 FF(1)) +
166 in.get(C::to_radix_found));
167 tmp *= scaling_factor;
168 std::get<21>(evals) += typename Accumulator::View(tmp);
169 }
170 {
171 using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>;
172 auto tmp = in.get(C::to_radix_not_end) * in.get(C::to_radix_found) * in.get(C::to_radix_limb_shift);
173 tmp *= scaling_factor;
174 std::get<22>(evals) += typename Accumulator::View(tmp);
175 }
176 {
177 using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>;
178 auto tmp = (FF(1) - in.get(C::to_radix_found)) * in.get(C::to_radix_end);
179 tmp *= scaling_factor;
180 std::get<23>(evals) += typename Accumulator::View(tmp);
181 }
182 {
183 using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>;
184 auto tmp = in.get(C::to_radix_is_unsafe_limb) * (FF(1) - in.get(C::to_radix_is_unsafe_limb));
185 tmp *= scaling_factor;
186 std::get<24>(evals) += typename Accumulator::View(tmp);
187 }
188 {
189 using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>;
190 auto tmp = (FF(1) - in.get(C::to_radix_not_padding_limb)) * in.get(C::to_radix_limb);
191 tmp *= scaling_factor;
192 std::get<25>(evals) += typename Accumulator::View(tmp);
193 }
194 {
195 using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>;
196 auto tmp = (FF(1) - in.get(C::to_radix_not_padding_limb)) * in.get(C::to_radix_p_limb);
197 tmp *= scaling_factor;
198 std::get<26>(evals) += typename Accumulator::View(tmp);
199 }
200 {
201 using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>;
202 auto tmp = in.get(C::to_radix_sel) *
203 ((to_radix_safety_diff *
204 (in.get(C::to_radix_is_unsafe_limb) * (FF(1) - in.get(C::to_radix_safety_diff_inverse)) +
205 in.get(C::to_radix_safety_diff_inverse)) -
206 FF(1)) +
207 in.get(C::to_radix_is_unsafe_limb));
208 tmp *= scaling_factor;
209 std::get<27>(evals) += typename Accumulator::View(tmp);
210 }
211 {
212 using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>;
213 auto tmp = in.get(C::to_radix_acc_under_p) * (FF(1) - in.get(C::to_radix_acc_under_p));
214 tmp *= scaling_factor;
215 std::get<28>(evals) += typename Accumulator::View(tmp);
216 }
217 {
218 using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>;
219 auto tmp = in.get(C::to_radix_limb_lt_p) * (FF(1) - in.get(C::to_radix_limb_lt_p));
220 tmp *= scaling_factor;
221 std::get<29>(evals) += typename Accumulator::View(tmp);
222 }
223 {
224 using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>;
225 auto tmp = in.get(C::to_radix_limb_eq_p) * (FF(1) - in.get(C::to_radix_limb_eq_p));
226 tmp *= scaling_factor;
227 std::get<30>(evals) += typename Accumulator::View(tmp);
228 }
229 {
230 using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>;
231 auto tmp = in.get(C::to_radix_limb_eq_p) * in.get(C::to_radix_limb_lt_p);
232 tmp *= scaling_factor;
233 std::get<31>(evals) += typename Accumulator::View(tmp);
234 }
235 {
236 using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>;
237 auto tmp = in.get(C::to_radix_limb_lt_p) * (to_radix_LIMB_LT_P - in.get(C::to_radix_limb_p_diff));
238 tmp *= scaling_factor;
239 std::get<32>(evals) += typename Accumulator::View(tmp);
240 }
241 {
242 using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>;
243 auto tmp = in.get(C::to_radix_sel) * (FF(1) - in.get(C::to_radix_limb_lt_p)) *
244 (((to_radix_LIMB_EQ_P - to_radix_LIMB_GT_P) * in.get(C::to_radix_limb_eq_p) + to_radix_LIMB_GT_P) -
245 in.get(C::to_radix_limb_p_diff));
246 tmp *= scaling_factor;
247 std::get<33>(evals) += typename Accumulator::View(tmp);
248 }
249 {
250 using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>;
251 auto tmp = in.get(C::to_radix_start) * (in.get(C::to_radix_acc_under_p) - in.get(C::to_radix_limb_lt_p));
252 tmp *= scaling_factor;
253 std::get<34>(evals) += typename Accumulator::View(tmp);
254 }
255 {
256 using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>;
257 auto tmp =
258 in.get(C::to_radix_not_end) * (((in.get(C::to_radix_acc_under_p) - in.get(C::to_radix_limb_lt_p_shift)) *
259 in.get(C::to_radix_limb_eq_p_shift) +
260 in.get(C::to_radix_limb_lt_p_shift)) -
261 in.get(C::to_radix_acc_under_p_shift));
262 tmp *= scaling_factor;
263 std::get<35>(evals) += typename Accumulator::View(tmp);
264 }
265 { // OVERFLOW_CHECK
266 using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>;
267 auto tmp = in.get(C::to_radix_is_unsafe_limb) * (FF(1) - in.get(C::to_radix_acc_under_p));
268 tmp *= scaling_factor;
269 std::get<36>(evals) += typename Accumulator::View(tmp);
270 }
271 { // CONSTANT_CONSISTENCY_RADIX
272 using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>;
273 auto tmp = in.get(C::to_radix_not_end) * (in.get(C::to_radix_radix) - in.get(C::to_radix_radix_shift));
274 tmp *= scaling_factor;
275 std::get<37>(evals) += typename Accumulator::View(tmp);
276 }
277 { // CONSTANT_CONSISTENCY_VALUE
278 using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>;
279 auto tmp = in.get(C::to_radix_not_end) * (in.get(C::to_radix_value) - in.get(C::to_radix_value_shift));
280 tmp *= scaling_factor;
281 std::get<38>(evals) += typename Accumulator::View(tmp);
282 }
283 { // CONSTANT_CONSISTENCY_SAFE_LIMBS
284 using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>;
285 auto tmp =
286 in.get(C::to_radix_not_end) * (in.get(C::to_radix_safe_limbs) - in.get(C::to_radix_safe_limbs_shift));
287 tmp *= scaling_factor;
288 std::get<39>(evals) += typename Accumulator::View(tmp);
289 }
290}
291
292} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
ColumnAndShifts
Definition columns.hpp:35
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define PROFILE_THIS_NAME(name)
Definition op_count.hpp:16
Container for parameters used by the grand product (permutation, lookup) Honk relations.