76 const AllEntities& in,
78 const FF& scaling_factor)
81 using CoeffAcc =
typename Accumulator::CoefficientAccumulator;
83 const auto w_l = CoeffAcc(in.w_l);
84 const auto w_r = CoeffAcc(in.w_r);
85 const auto w_o = CoeffAcc(in.w_o);
86 const auto w_4 = CoeffAcc(in.w_4);
88 const auto w_r_shift = CoeffAcc(in.w_r_shift);
89 const auto w_o_shift = CoeffAcc(in.w_o_shift);
90 const auto w_4_shift = CoeffAcc(in.w_4_shift);
92 const auto q_l = CoeffAcc(in.q_l);
93 const auto q_r = CoeffAcc(in.q_r);
94 const auto q_o = CoeffAcc(in.q_o);
95 const auto q_sel = CoeffAcc(in.q_poseidon2_transition_entry);
97 auto pow5 = [](
const Accumulator& x) -> Accumulator {
99 auto quart = sq.sqr();
104 auto u_0 = pow5(Accumulator(w_l + q_l));
106 auto u_1 = pow5(Accumulator(w_r_shift + q_r));
108 auto u_2 = pow5(Accumulator(w_o_shift + q_o));
110 const auto q_by_scaling_m = q_sel * scaling_factor;
111 const auto q_by_scaling = Accumulator(q_by_scaling_m);
114 auto wp_0 = w_r + w_o + w_4 - w_r_shift;
115 auto wp_1 = w_r *
A_one[0] + w_o *
A_one[1] + w_4 *
A_one[2] - w_o_shift;
119 auto a0_body = u_0 *
D1 + Accumulator(wp_0);
123 auto a1_body = u_1 *
D1 + u_0 *
fr(3) + Accumulator(wp_1);
127 auto a2_body = u_2 *
D1 + u_1 *
fr(3) + u_0 *
sum_A_one + Accumulator(wp_2);