89 const AllEntities& in,
91 const FF& scaling_factor)
96 using CoefficientAccumulator =
typename Accumulator::CoefficientAccumulator;
99 const auto w_1 = CoefficientAccumulator(in.w_l);
100 const auto w_2 = CoefficientAccumulator(in.w_r);
101 const auto w_3 = CoefficientAccumulator(in.w_o);
102 const auto w_4 = CoefficientAccumulator(in.w_4);
104 const auto w_1_shift = CoefficientAccumulator(in.w_l_shift);
105 const auto w_2_shift = CoefficientAccumulator(in.w_r_shift);
106 const auto w_3_shift = CoefficientAccumulator(in.w_o_shift);
107 const auto w_4_shift = CoefficientAccumulator(in.w_4_shift);
109 const auto c_1 = CoefficientAccumulator(in.q_l);
110 const auto c_2 = CoefficientAccumulator(in.q_r);
111 const auto c_3 = CoefficientAccumulator(in.q_o);
112 const auto c_4 = CoefficientAccumulator(in.q_4);
114 const auto q_poseidon2_external = CoefficientAccumulator(in.q_poseidon2_external);
118 auto sbox = [](
const Accumulator& x) {
124 auto u1 = sbox(Accumulator(w_1 + c_1));
125 auto u2 = sbox(Accumulator(w_2 + c_2));
126 auto u3 = sbox(Accumulator(w_3 + c_3));
127 auto u4 = sbox(Accumulator(w_4 + c_4));
152 auto q_pos_by_scaling = Accumulator(q_poseidon2_external * scaling_factor);
153 std::get<0>(evals) += q_pos_by_scaling * (v1 - Accumulator(w_1_shift));
155 std::get<1>(evals) += q_pos_by_scaling * (v2 - Accumulator(w_2_shift));
157 std::get<2>(evals) += q_pos_by_scaling * (v3 - Accumulator(w_3_shift));
159 std::get<3>(evals) += q_pos_by_scaling * (v4 - Accumulator(w_4_shift));