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