23template <
typename Fr>
Fr evaluate(
const Fr* coeffs,
const Fr& z,
const size_t n);
27 return evaluate(coeffs.data(), z, n);
31 return evaluate(coeffs, z, coeffs.size());
33template <
typename Fr>
Fr evaluate(
const std::vector<Fr*> coeffs,
const Fr& z,
const size_t large_n);
37 requires SupportsFFT<Fr>
41 const std::vector<Fr*>& root_table);
44 requires SupportsFFT<Fr>
47 requires SupportsFFT<Fr>
50 requires SupportsFFT<Fr>
54 requires SupportsFFT<Fr>
57 requires SupportsFFT<Fr>
60 requires SupportsFFT<Fr>
63 requires SupportsFFT<Fr>
67 const size_t domain_extension);
70 requires SupportsFFT<Fr>
73 requires SupportsFFT<Fr>
76 requires SupportsFFT<Fr>
80 requires SupportsFFT<Fr>
83 requires SupportsFFT<Fr>
90 unsigned long num_coeffs,
103template <
typename Fr>
111 const size_t size = polynomial.size();
117 std::copy_n(polynomial.begin() + 1, size - 1, polynomial.begin());
144 Fr root_inverse = (-root).invert();
149 for (
size_t i = 0; i < size - 1; ++i) {
152 temp = (polynomial[i] - temp);
153 temp *= root_inverse;
154 polynomial[i] = temp;
#define BB_ASSERT_LTE(left, right,...)
void ifft(Fr *coeffs, const EvaluationDomain< Fr > &domain)
void fft_inner_parallel(std::vector< Fr * > coeffs, const EvaluationDomain< Fr > &domain, const Fr &, const std::vector< Fr * > &root_table)
void coset_fft(Fr *coeffs, const EvaluationDomain< Fr > &domain)
void compute_linear_polynomial_product(const Fr *roots, Fr *dest, const size_t n)
Fr evaluate(const Fr *coeffs, const Fr &z, const size_t n)
void factor_roots(std::span< Fr > polynomial, const Fr &root)
Divides p(X) by (X-r) in-place.
void fft(Fr *coeffs, const EvaluationDomain< Fr > &domain)
fr compute_barycentric_evaluation(const fr *coeffs, const size_t num_coeffs, const fr &z, const EvaluationDomain< fr > &domain)
void coset_ifft(Fr *coeffs, const EvaluationDomain< Fr > &domain)
void compute_efficient_interpolation(const Fr *src, Fr *dest, const Fr *evaluation_points, const size_t n)
Fr compute_sum(const Fr *src, const size_t n)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
BB_INLINE constexpr bool is_zero() const noexcept
static constexpr field zero()