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