54 static_assert(!
D2_minus_D3.
is_zero(),
"Poseidon2 quad: D_2 == D_3, Vandermonde singular");
55 static_assert(!
D2_minus_D4.
is_zero(),
"Poseidon2 quad: D_2 == D_4, Vandermonde singular");
56 static_assert(!
D3_minus_D4.
is_zero(),
"Poseidon2 quad: D_3 == D_4, Vandermonde singular");
173 s +=
a[i][k] *
b[k][j];
210 for (
const auto& entry : v) {
220 r[i] = weights[0] * table[
OUT_1][i] + weights[1] * table[
OUT_2][i] + weights[2] * table[
OUT_3][i];
227 const Vec ones = {
FF(1),
FF(1),
FF(1) };
247 const Mat Bu = { { { -
D1,
FF(0),
FF(0) },
269 row0[i] = row0_wire_coefficients[i];
271 row0[
U_0] = row0_u_coefficients[0] + sum_A2_one;
273 row0[
U_2] = row0_u_coefficients[2] +
FF(3);
277 auto build_out_j = [&](
size_t j) {
282 r[
U_0] = MBu[j][0] + A3_one[j];
289 ClosedFormTable closed_form_table{ row0, build_out_j(0), build_out_j(1), build_out_j(2) };
305 return Tables{ closed_form_table, lhs_table };
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr size_t t
static constexpr std::array< FF, t > internal_matrix_diagonal_minus_one
ForwardVandermondeTable forward_vandermonde_lhs
ClosedFormTable closed_form
static constexpr FF sum_A_one
static constexpr FF alpha_2_1
std::array< std::array< FF, VANDERMONDE_SIZE >, VANDERMONDE_SIZE > Mat
static constexpr FF D3_minus_D4
static constexpr Mat matrix_multiply(const Mat &a, const Mat &b)
static constexpr size_t VANDERMONDE_SIZE
std::array< FF, CLOSED_FORM_INPUT_COUNT > ClosedFormRow
static const Tables tables
static constexpr std::array< FF, VANDERMONDE_SIZE > A_one
static constexpr FF inv_denom_2
static constexpr FF inv_denom_1
static constexpr FF alpha_3_3
static constexpr FF alpha_3_2
static constexpr FF alpha_1_1
static constexpr FF vector_sum(const Vec &v)
static constexpr FF alpha_1_2
static constexpr FF D2_minus_D3
static constexpr FF alpha_2_2
static constexpr ClosedFormRow weighted_closed_form_sum(const Vec &weights, const ClosedFormTable &table)
static constexpr Vec vector_matrix_multiply(const Vec &v, const Mat &a)
static constexpr FF SIGMA
static constexpr FF alpha_1_3
std::array< FF, VANDERMONDE_SIZE > Vec
static constexpr std::array< FF, VANDERMONDE_SIZE > A2_one
static constexpr FF alpha_2_3
static constexpr Vec matrix_vector_multiply(const Mat &a, const Vec &v)
static constexpr FF D2_minus_D4
static constexpr FF inv_denom_3
Poseidon2Bn254ScalarFieldParams::FF FF
static constexpr FF alpha_3_1
std::array< ClosedFormRow, 4 > ClosedFormTable
static Tables build_tables()
static constexpr size_t CLOSED_FORM_INPUT_COUNT
std::array< ClosedFormRow, VANDERMONDE_SIZE > ForwardVandermondeTable
constexpr field invert() const noexcept
BB_INLINE constexpr bool is_zero() const noexcept