151 inline static void accumulate(ContainerOverSubrelations& accumulators,
153 const Parameters& params,
154 const FF& scaling_factor)
158 using CoefficientAccumulator =
typename Accumulator::CoefficientAccumulator;
159 using ParameterView = Parameters::DataType;
160 using ParameterCoefficientAccumulator =
typename ParameterView::CoefficientAccumulator;
175 const ParameterCoefficientAccumulator gamma_m(params.gamma);
176 const ParameterCoefficientAccumulator beta_m(params.beta);
178 const auto w_1_plus_gamma = w_1_m + gamma_m;
179 const auto w_2_plus_gamma = w_2_m + gamma_m;
180 const auto w_3_plus_gamma = w_3_m + gamma_m;
181 const auto w_4_plus_gamma = w_4_m + gamma_m;
183 auto t1 = (id_1_m * beta_m);
184 t1 += w_1_plus_gamma;
185 t1 *= scaling_factor;
186 auto t2 = id_2_m * beta_m;
187 t2 += w_2_plus_gamma;
188 auto t3 = id_3_m * beta_m;
189 t3 += w_3_plus_gamma;
190 auto t4 = id_4_m * beta_m;
191 t4 += w_4_plus_gamma;
193 auto t5 = sigma_1_m * beta_m;
194 t5 += w_1_plus_gamma;
195 t5 *= scaling_factor;
196 auto t6 = sigma_2_m * beta_m;
197 t6 += w_2_plus_gamma;
198 auto t7 = sigma_3_m * beta_m;
199 t7 += w_3_plus_gamma;
200 auto t8 = sigma_4_m * beta_m;
201 t8 += w_4_plus_gamma;
224 const ParameterCoefficientAccumulator public_input_delta_m(params.public_input_delta);
235 if (lagrange_first_m.is_zero() && lagrange_last_m.is_zero()) {
236 const Accumulator public_input_term(z_perm_shift_m);
242 auto public_input_term_m = lagrange_last_m * public_input_delta_m;
243 public_input_term_m += z_perm_shift_m;
244 const Accumulator public_input_term(public_input_term_m);
247 ((
Accumulator(z_perm_m + lagrange_first_m) * numerator) - (public_input_term * denominator));
251 if (subrelation_is_active<Accumulator>(lagrange_last_m)) {
252 std::get<1>(accumulators) += ShortAccumulator((lagrange_last_m * z_perm_shift_m) * scaling_factor);
260 if (subrelation_is_active<Accumulator>(lagrange_first_m)) {
261 std::get<2>(accumulators) += InitAccumulator((lagrange_first_m * z_perm_m) * scaling_factor);