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