Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
scalar_mul_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 scalar_mulImpl<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 scalar_mul_LATCH_CONDITION = in.get(C::scalar_mul_end) + in.get(C::precomputed_first_row);
19 const auto scalar_mul_should_pass = in.get(C::scalar_mul_not_end) * (FF(1) - in.get(C::scalar_mul_bit));
20
21 {
22 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
23 auto tmp =
24 static_cast<View>(in.get(C::scalar_mul_sel)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_sel)));
25 std::get<0>(evals) += (tmp * scaling_factor);
26 }
27 {
28 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
29 auto tmp = static_cast<View>(in.get(C::scalar_mul_point_inf)) *
30 (FF(1) - static_cast<View>(in.get(C::scalar_mul_point_inf)));
31 std::get<1>(evals) += (tmp * scaling_factor);
32 }
33 {
34 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
35 auto tmp =
36 static_cast<View>(in.get(C::scalar_mul_start)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_start)));
37 std::get<2>(evals) += (tmp * scaling_factor);
38 }
39 {
40 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
41 auto tmp =
42 static_cast<View>(in.get(C::scalar_mul_end)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_end)));
43 std::get<3>(evals) += (tmp * scaling_factor);
44 }
45 {
46 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
47 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) * static_cast<View>(in.get(C::precomputed_first_row));
48 std::get<4>(evals) += (tmp * scaling_factor);
49 }
50 { // START_AFTER_LATCH
51 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
52 auto tmp = static_cast<View>(in.get(C::scalar_mul_sel_shift)) *
53 (static_cast<View>(in.get(C::scalar_mul_start_shift)) - CView(scalar_mul_LATCH_CONDITION));
54 std::get<5>(evals) += (tmp * scaling_factor);
55 }
56 { // SELECTOR_ON_START
57 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
58 auto tmp =
59 static_cast<View>(in.get(C::scalar_mul_start)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_sel)));
60 std::get<6>(evals) += (tmp * scaling_factor);
61 }
62 { // SELECTOR_CONSISTENCY
63 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
64 auto tmp = (static_cast<View>(in.get(C::scalar_mul_sel_shift)) - static_cast<View>(in.get(C::scalar_mul_sel))) *
65 (FF(1) - CView(scalar_mul_LATCH_CONDITION));
66 std::get<7>(evals) += (tmp * scaling_factor);
67 }
68 {
69 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
70 auto tmp =
71 static_cast<View>(in.get(C::scalar_mul_end)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_sel)));
72 std::get<8>(evals) += (tmp * scaling_factor);
73 }
74 {
75 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
76 auto tmp =
77 (static_cast<View>(in.get(C::scalar_mul_not_end)) -
78 static_cast<View>(in.get(C::scalar_mul_sel)) * (FF(1) - static_cast<View>(in.get(C::scalar_mul_end))));
79 std::get<9>(evals) += (tmp * scaling_factor);
80 }
81 {
82 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
83 auto tmp = ((static_cast<View>(in.get(C::scalar_mul_end)) + static_cast<View>(in.get(C::scalar_mul_not_end))) -
84 static_cast<View>(in.get(C::scalar_mul_sel)));
85 std::get<10>(evals) += (tmp * scaling_factor);
86 }
87 { // INPUT_CONSISTENCY_X
88 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
89 auto tmp =
90 static_cast<View>(in.get(C::scalar_mul_not_end)) *
91 (static_cast<View>(in.get(C::scalar_mul_point_x)) - static_cast<View>(in.get(C::scalar_mul_point_x_shift)));
92 std::get<11>(evals) += (tmp * scaling_factor);
93 }
94 { // INPUT_CONSISTENCY_Y
95 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
96 auto tmp =
97 static_cast<View>(in.get(C::scalar_mul_not_end)) *
98 (static_cast<View>(in.get(C::scalar_mul_point_y)) - static_cast<View>(in.get(C::scalar_mul_point_y_shift)));
99 std::get<12>(evals) += (tmp * scaling_factor);
100 }
101 { // INPUT_CONSISTENCY_INF
102 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
103 auto tmp = static_cast<View>(in.get(C::scalar_mul_not_end)) *
104 (static_cast<View>(in.get(C::scalar_mul_point_inf)) -
105 static_cast<View>(in.get(C::scalar_mul_point_inf_shift)));
106 std::get<13>(evals) += (tmp * scaling_factor);
107 }
108 { // INPUT_CONSISTENCY_SCALAR
109 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
110 auto tmp =
111 static_cast<View>(in.get(C::scalar_mul_not_end)) *
112 (static_cast<View>(in.get(C::scalar_mul_scalar)) - static_cast<View>(in.get(C::scalar_mul_scalar_shift)));
113 std::get<14>(evals) += (tmp * scaling_factor);
114 }
115 {
116 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
117 auto tmp = static_cast<View>(in.get(C::scalar_mul_start)) *
118 (static_cast<View>(in.get(C::scalar_mul_bit_idx)) - FF(253));
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::scalar_mul_end)) * static_cast<View>(in.get(C::scalar_mul_bit_idx));
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::scalar_mul_not_end)) *
129 (static_cast<View>(in.get(C::scalar_mul_bit_idx)) -
130 (static_cast<View>(in.get(C::scalar_mul_bit_idx_shift)) + FF(1)));
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::scalar_mul_sel)) * (static_cast<View>(in.get(C::scalar_mul_bit_radix)) - FF(2));
137 std::get<18>(evals) += (tmp * scaling_factor);
138 }
139 {
140 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
141 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) *
142 (static_cast<View>(in.get(C::scalar_mul_temp_x)) - static_cast<View>(in.get(C::scalar_mul_point_x)));
143 std::get<19>(evals) += (tmp * scaling_factor);
144 }
145 {
146 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
147 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) *
148 (static_cast<View>(in.get(C::scalar_mul_temp_y)) - static_cast<View>(in.get(C::scalar_mul_point_y)));
149 std::get<20>(evals) += (tmp * scaling_factor);
150 }
151 {
152 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
153 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) * (static_cast<View>(in.get(C::scalar_mul_temp_inf)) -
154 static_cast<View>(in.get(C::scalar_mul_point_inf)));
155 std::get<21>(evals) += (tmp * scaling_factor);
156 }
157 {
158 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
159 auto tmp = (static_cast<View>(in.get(C::scalar_mul_temp_x_shift)) -
160 static_cast<View>(in.get(C::scalar_mul_temp_x_shift)));
161 std::get<22>(evals) += (tmp * scaling_factor);
162 }
163 {
164 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
165 auto tmp = (static_cast<View>(in.get(C::scalar_mul_temp_y_shift)) -
166 static_cast<View>(in.get(C::scalar_mul_temp_y_shift)));
167 std::get<23>(evals) += (tmp * scaling_factor);
168 }
169 {
170 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
171 auto tmp = (static_cast<View>(in.get(C::scalar_mul_temp_inf_shift)) -
172 static_cast<View>(in.get(C::scalar_mul_temp_inf_shift)));
173 std::get<24>(evals) += (tmp * scaling_factor);
174 }
175 {
176 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
177 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) *
178 (static_cast<View>(in.get(C::scalar_mul_point_x)) * static_cast<View>(in.get(C::scalar_mul_bit)) -
179 static_cast<View>(in.get(C::scalar_mul_res_x)));
180 std::get<25>(evals) += (tmp * scaling_factor);
181 }
182 {
183 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
184 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) *
185 (static_cast<View>(in.get(C::scalar_mul_point_y)) * static_cast<View>(in.get(C::scalar_mul_bit)) -
186 static_cast<View>(in.get(C::scalar_mul_res_y)));
187 std::get<26>(evals) += (tmp * scaling_factor);
188 }
189 {
190 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
191 auto tmp = static_cast<View>(in.get(C::scalar_mul_end)) *
192 (((static_cast<View>(in.get(C::scalar_mul_point_inf)) - FF(1)) *
193 static_cast<View>(in.get(C::scalar_mul_bit)) +
194 FF(1)) -
195 static_cast<View>(in.get(C::scalar_mul_res_inf)));
196 std::get<27>(evals) += (tmp * scaling_factor);
197 }
198 {
199 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
200 auto tmp = (static_cast<View>(in.get(C::scalar_mul_should_add)) -
201 static_cast<View>(in.get(C::scalar_mul_not_end)) * static_cast<View>(in.get(C::scalar_mul_bit)));
202 std::get<28>(evals) += (tmp * scaling_factor);
203 }
204 {
205 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
206 auto tmp = CView(scalar_mul_should_pass) * (static_cast<View>(in.get(C::scalar_mul_res_x)) -
207 static_cast<View>(in.get(C::scalar_mul_res_x_shift)));
208 std::get<29>(evals) += (tmp * scaling_factor);
209 }
210 {
211 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
212 auto tmp = CView(scalar_mul_should_pass) * (static_cast<View>(in.get(C::scalar_mul_res_y)) -
213 static_cast<View>(in.get(C::scalar_mul_res_y_shift)));
214 std::get<30>(evals) += (tmp * scaling_factor);
215 }
216 {
217 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
218 auto tmp = CView(scalar_mul_should_pass) * (static_cast<View>(in.get(C::scalar_mul_res_inf)) -
219 static_cast<View>(in.get(C::scalar_mul_res_inf_shift)));
220 std::get<31>(evals) += (tmp * scaling_factor);
221 }
222}
223
224} // 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.