# sage_setup: distribution = sagemath-flint
# distutils: libraries = flint
# distutils: depends = flint/fmpz_poly.h

################################################################################
# This file is auto-generated by the script
#   SAGE_ROOT/src/sage_setup/autogen/flint_autogen.py.
# From the commit 3e2c3a3e091106a25ca9c6fba28e02f2cbcd654a
# Do not modify by hand! Fix and rerun the script instead.
################################################################################

from libc.stdio cimport FILE
from sage.libs.gmp.types cimport *
from sage.libs.mpfr.types cimport *
from sage.libs.flint.types cimport *

cdef extern from "flint_wrap.h":
    void fmpz_poly_init(fmpz_poly_t poly) noexcept
    void fmpz_poly_init2(fmpz_poly_t poly, slong alloc) noexcept
    void fmpz_poly_realloc(fmpz_poly_t poly, slong alloc) noexcept
    void fmpz_poly_fit_length(fmpz_poly_t poly, slong len) noexcept
    void fmpz_poly_clear(fmpz_poly_t poly) noexcept
    void _fmpz_poly_normalise(fmpz_poly_t poly) noexcept
    void _fmpz_poly_set_length(fmpz_poly_t poly, slong newlen) noexcept
    void fmpz_poly_attach_truncate(fmpz_poly_t trunc, const fmpz_poly_t poly, slong n) noexcept
    void fmpz_poly_attach_shift(fmpz_poly_t trunc, const fmpz_poly_t poly, slong n) noexcept
    slong fmpz_poly_length(const fmpz_poly_t poly) noexcept
    slong fmpz_poly_degree(const fmpz_poly_t poly) noexcept
    void fmpz_poly_set(fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_set_si(fmpz_poly_t poly, slong c) noexcept
    void fmpz_poly_set_ui(fmpz_poly_t poly, ulong c) noexcept
    void fmpz_poly_set_fmpz(fmpz_poly_t poly, const fmpz_t c) noexcept
    int _fmpz_poly_set_str(fmpz * poly, const char * str) noexcept
    int fmpz_poly_set_str(fmpz_poly_t poly, const char * str) noexcept
    char * _fmpz_poly_get_str(const fmpz * poly, slong len) noexcept
    char * fmpz_poly_get_str(const fmpz_poly_t poly) noexcept
    char * _fmpz_poly_get_str_pretty(const fmpz * poly, slong len, const char * x) noexcept
    char * fmpz_poly_get_str_pretty(const fmpz_poly_t poly, const char * x) noexcept
    void fmpz_poly_zero(fmpz_poly_t poly) noexcept
    void fmpz_poly_one(fmpz_poly_t poly) noexcept
    void fmpz_poly_zero_coeffs(fmpz_poly_t poly, slong i, slong j) noexcept
    void fmpz_poly_swap(fmpz_poly_t poly1, fmpz_poly_t poly2) noexcept
    void _fmpz_poly_reverse(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_reverse(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void fmpz_poly_truncate(fmpz_poly_t poly, slong newlen) noexcept
    void fmpz_poly_set_trunc(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void fmpz_poly_randtest(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_unsigned(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_not_zero(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_no_real_root(fmpz_poly_t p, flint_rand_t state, slong len, flint_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_irreducible1(fmpz_poly_t pol, flint_rand_t state, slong len, mp_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_irreducible2(fmpz_poly_t pol, flint_rand_t state, slong len, mp_bitcnt_t bits) noexcept
    void fmpz_poly_randtest_irreducible(fmpz_poly_t pol, flint_rand_t state, slong len, mp_bitcnt_t bits) noexcept
    void fmpz_poly_get_coeff_fmpz(fmpz_t x, const fmpz_poly_t poly, slong n) noexcept
    slong fmpz_poly_get_coeff_si(const fmpz_poly_t poly, slong n) noexcept
    ulong fmpz_poly_get_coeff_ui(const fmpz_poly_t poly, slong n) noexcept
    fmpz * fmpz_poly_get_coeff_ptr(const fmpz_poly_t poly, slong n) noexcept
    fmpz * fmpz_poly_lead(const fmpz_poly_t poly) noexcept
    void fmpz_poly_set_coeff_fmpz(fmpz_poly_t poly, slong n, const fmpz_t x) noexcept
    void fmpz_poly_set_coeff_si(fmpz_poly_t poly, slong n, slong x) noexcept
    void fmpz_poly_set_coeff_ui(fmpz_poly_t poly, slong n, ulong x) noexcept
    bint fmpz_poly_equal(const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    bint fmpz_poly_equal_trunc(const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    bint fmpz_poly_is_zero(const fmpz_poly_t poly) noexcept
    bint fmpz_poly_is_one(const fmpz_poly_t poly) noexcept
    bint fmpz_poly_is_unit(const fmpz_poly_t poly) noexcept
    bint fmpz_poly_is_gen(const fmpz_poly_t poly) noexcept
    void _fmpz_poly_add(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_add(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_add_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_sub(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_sub(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_sub_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void fmpz_poly_neg(fmpz_poly_t res, const fmpz_poly_t poly) noexcept
    void fmpz_poly_scalar_abs(fmpz_poly_t res, const fmpz_poly_t poly) noexcept
    void fmpz_poly_scalar_mul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_mul_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) noexcept
    void fmpz_poly_scalar_mul_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_mul_2exp(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong exp) noexcept
    void fmpz_poly_scalar_addmul_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) noexcept
    void fmpz_poly_scalar_addmul_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_addmul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_submul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_fdiv_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_fdiv_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) noexcept
    void fmpz_poly_scalar_fdiv_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_fdiv_2exp(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_tdiv_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_tdiv_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) noexcept
    void fmpz_poly_scalar_tdiv_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_tdiv_2exp(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_divexact_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) noexcept
    void fmpz_poly_scalar_divexact_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) noexcept
    void fmpz_poly_scalar_divexact_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) noexcept
    void fmpz_poly_scalar_mod_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t p) noexcept
    void fmpz_poly_scalar_smod_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t p) noexcept
    slong _fmpz_poly_remove_content_2exp(fmpz * pol, slong len) noexcept
    void _fmpz_poly_scale_2exp(fmpz * pol, slong len, slong k) noexcept
    void _fmpz_poly_bit_pack(mp_ptr arr, const fmpz * poly, slong len, flint_bitcnt_t bit_size, int negate) noexcept
    int _fmpz_poly_bit_unpack(fmpz * poly, slong len, mp_srcptr arr, flint_bitcnt_t bit_size, int negate) noexcept
    void _fmpz_poly_bit_unpack_unsigned(fmpz * poly, slong len, mp_srcptr arr, flint_bitcnt_t bit_size) noexcept
    void fmpz_poly_bit_pack(fmpz_t f, const fmpz_poly_t poly, flint_bitcnt_t bit_size) noexcept
    void fmpz_poly_bit_unpack(fmpz_poly_t poly, const fmpz_t f, flint_bitcnt_t bit_size) noexcept
    void fmpz_poly_bit_unpack_unsigned(fmpz_poly_t poly, const fmpz_t f, flint_bitcnt_t bit_size) noexcept
    void _fmpz_poly_mul_classical(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_mul_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mullow_classical(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_mullow_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_mulhigh_classical(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong start) noexcept
    void fmpz_poly_mulhigh_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong start) noexcept
    void _fmpz_poly_mulmid_classical(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_mulmid_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mul_karatsuba(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_mul_karatsuba(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mullow_karatsuba_n(fmpz * res, const fmpz * poly1, const fmpz * poly2, slong n) noexcept
    void fmpz_poly_mullow_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_mulhigh_karatsuba_n(fmpz * res, const fmpz * poly1, const fmpz * poly2, slong len) noexcept
    void fmpz_poly_mulhigh_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong len) noexcept
    void _fmpz_poly_mul_KS(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_mul_KS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mullow_KS(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_mullow_KS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_mul_SS(fmpz * output, const fmpz * input1, slong length1, const fmpz * input2, slong length2) noexcept
    void fmpz_poly_mul_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mullow_SS(fmpz * output, const fmpz * input1, slong length1, const fmpz * input2, slong length2, slong n) noexcept
    void fmpz_poly_mullow_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_mul(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_mul(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_mullow(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_mullow(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void fmpz_poly_mulhigh_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_mulhigh(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong start) noexcept
    void fmpz_poly_mul_SS_precache_init(fmpz_poly_mul_precache_t pre, slong len1, slong bits1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_mul_precache_clear(fmpz_poly_mul_precache_t pre) noexcept
    void _fmpz_poly_mullow_SS_precache(fmpz * output, const fmpz * input1, slong len1, fmpz_poly_mul_precache_t pre, slong trunc) noexcept
    void fmpz_poly_mullow_SS_precache(fmpz_poly_t res, const fmpz_poly_t poly1, fmpz_poly_mul_precache_t pre, slong n) noexcept
    void fmpz_poly_mul_SS_precache(fmpz_poly_t res, const fmpz_poly_t poly1, fmpz_poly_mul_precache_t pre) noexcept
    void _fmpz_poly_sqr_KS(fmpz * rop, const fmpz * op, slong len) noexcept
    void fmpz_poly_sqr_KS(fmpz_poly_t rop, const fmpz_poly_t op) noexcept
    void _fmpz_poly_sqr_karatsuba(fmpz * rop, const fmpz * op, slong len) noexcept
    void fmpz_poly_sqr_karatsuba(fmpz_poly_t rop, const fmpz_poly_t op) noexcept
    void _fmpz_poly_sqr_classical(fmpz * rop, const fmpz * op, slong len) noexcept
    void fmpz_poly_sqr_classical(fmpz_poly_t rop, const fmpz_poly_t op) noexcept
    void _fmpz_poly_sqr(fmpz * rop, const fmpz * op, slong len) noexcept
    void fmpz_poly_sqr(fmpz_poly_t rop, const fmpz_poly_t op) noexcept
    void _fmpz_poly_sqrlow_KS(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_sqrlow_KS(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_sqrlow_karatsuba_n(fmpz * res, const fmpz * poly, slong n) noexcept
    void fmpz_poly_sqrlow_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_sqrlow_classical(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_sqrlow_classical(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_sqrlow(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_sqrlow(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_pow_multinomial(fmpz * res, const fmpz * poly, slong len, ulong e) noexcept
    void fmpz_poly_pow_multinomial(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) noexcept
    void _fmpz_poly_pow_binomial(fmpz * res, const fmpz * poly, ulong e) noexcept
    void fmpz_poly_pow_binomial(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) noexcept
    void _fmpz_poly_pow_addchains(fmpz * res, const fmpz * poly, slong len, const int * a, int n) noexcept
    void fmpz_poly_pow_addchains(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) noexcept
    void _fmpz_poly_pow_binexp(fmpz * res, const fmpz * poly, slong len, ulong e) noexcept
    void fmpz_poly_pow_binexp(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) noexcept
    void _fmpz_poly_pow_small(fmpz * res, const fmpz * poly, slong len, ulong e) noexcept
    void _fmpz_poly_pow(fmpz * res, const fmpz * poly, slong len, ulong e) noexcept
    void fmpz_poly_pow(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) noexcept
    void _fmpz_poly_pow_trunc(fmpz * res, const fmpz * poly, ulong e, slong n) noexcept
    void fmpz_poly_pow_trunc(fmpz_poly_t res, const fmpz_poly_t poly, ulong e, slong n) noexcept
    void _fmpz_poly_shift_left(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_shift_left(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_shift_right(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_shift_right(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    ulong fmpz_poly_max_limbs(const fmpz_poly_t poly) noexcept
    slong fmpz_poly_max_bits(const fmpz_poly_t poly) noexcept
    void fmpz_poly_height(fmpz_t height, const fmpz_poly_t poly) noexcept
    void _fmpz_poly_2norm(fmpz_t res, const fmpz * poly, slong len) noexcept
    void fmpz_poly_2norm(fmpz_t res, const fmpz_poly_t poly) noexcept
    mp_limb_t _fmpz_poly_2norm_normalised_bits(const fmpz * poly, slong len) noexcept
    void _fmpz_poly_gcd_subresultant(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_gcd_subresultant(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    int _fmpz_poly_gcd_heuristic(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    int fmpz_poly_gcd_heuristic(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_gcd_modular(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_gcd_modular(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_gcd(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_gcd(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_xgcd_modular(fmpz_t r, fmpz * s, fmpz * t, const fmpz * f, slong len1, const fmpz * g, slong len2) noexcept
    void fmpz_poly_xgcd_modular(fmpz_t r, fmpz_poly_t s, fmpz_poly_t t, const fmpz_poly_t f, const fmpz_poly_t g) noexcept
    void _fmpz_poly_xgcd(fmpz_t r, fmpz * s, fmpz * t, const fmpz * f, slong len1, const fmpz * g, slong len2) noexcept
    void fmpz_poly_xgcd(fmpz_t r, fmpz_poly_t s, fmpz_poly_t t, const fmpz_poly_t f, const fmpz_poly_t g) noexcept
    void _fmpz_poly_lcm(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_lcm(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_resultant_modular(fmpz_t res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_resultant_modular(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_resultant_modular_div(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t div, slong nbits) noexcept
    void _fmpz_poly_resultant_euclidean(fmpz_t res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_resultant_euclidean(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_resultant(fmpz_t res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_resultant(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_discriminant(fmpz_t res, const fmpz * poly, slong len) noexcept
    void fmpz_poly_discriminant(fmpz_t res, const fmpz_poly_t poly) noexcept
    void _fmpz_poly_content(fmpz_t res, const fmpz * poly, slong len) noexcept
    void fmpz_poly_content(fmpz_t res, const fmpz_poly_t poly) noexcept
    void _fmpz_poly_primitive_part(fmpz * res, const fmpz * poly, slong len) noexcept
    void fmpz_poly_primitive_part(fmpz_poly_t res, const fmpz_poly_t poly) noexcept
    bint _fmpz_poly_is_squarefree(const fmpz * poly, slong len) noexcept
    bint fmpz_poly_is_squarefree(const fmpz_poly_t poly) noexcept
    int _fmpz_poly_divrem_basecase(fmpz * Q, fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_divrem_basecase(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    int _fmpz_poly_divrem_divconquer_recursive(fmpz * Q, fmpz * BQ, fmpz * W, const fmpz * A, const fmpz * B, slong lenB, int exact) noexcept
    int _fmpz_poly_divrem_divconquer(fmpz * Q, fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_divrem_divconquer(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    int _fmpz_poly_divrem(fmpz * Q, fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_divrem(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    int _fmpz_poly_div_basecase(fmpz * Q, fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_div_basecase(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    int _fmpz_poly_divremlow_divconquer_recursive(fmpz * Q, fmpz * BQ, const fmpz * A, const fmpz * B, slong lenB, int exact) noexcept
    int _fmpz_poly_div_divconquer_recursive(fmpz * Q, fmpz * temp, const fmpz * A, const fmpz * B, slong lenB, int exact) noexcept
    int _fmpz_poly_div_divconquer(fmpz * Q, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_div_divconquer(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    int _fmpz_poly_div(fmpz * Q, const fmpz * A, slong lenA, const fmpz * B, slong lenB, int exact) noexcept
    void fmpz_poly_div(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_rem_basecase(fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB) noexcept
    void fmpz_poly_rem_basecase(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_rem(fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB) noexcept
    void fmpz_poly_rem(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_div_root(fmpz * Q, const fmpz * A, slong len, const fmpz_t c) noexcept
    void fmpz_poly_div_root(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_t c) noexcept
    void _fmpz_poly_preinvert(fmpz * B_inv, const fmpz * B, slong n) noexcept
    void fmpz_poly_preinvert(fmpz_poly_t B_inv, const fmpz_poly_t B) noexcept
    void _fmpz_poly_div_preinv(fmpz * Q, const fmpz * A, slong len1, const fmpz * B, const fmpz * B_inv, slong len2) noexcept
    void fmpz_poly_div_preinv(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, const fmpz_poly_t B_inv) noexcept
    void _fmpz_poly_divrem_preinv(fmpz * Q, fmpz * A, slong len1, const fmpz * B, const fmpz * B_inv, slong len2) noexcept
    void fmpz_poly_divrem_preinv(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B, const fmpz_poly_t B_inv) noexcept
    fmpz ** _fmpz_poly_powers_precompute(const fmpz * B, slong len) noexcept
    void fmpz_poly_powers_precompute(fmpz_poly_powers_precomp_t pinv, fmpz_poly_t poly) noexcept
    void _fmpz_poly_powers_clear(fmpz ** powers, slong len) noexcept
    void fmpz_poly_powers_clear(fmpz_poly_powers_precomp_t pinv) noexcept
    void _fmpz_poly_rem_powers_precomp(fmpz * A, slong m, const fmpz * B, slong n, fmpz ** const powers) noexcept
    void fmpz_poly_rem_powers_precomp(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B, const fmpz_poly_powers_precomp_t B_inv) noexcept
    int _fmpz_poly_divides(fmpz * Q, const fmpz * A, slong lenA, const fmpz * B, slong lenB) noexcept
    int fmpz_poly_divides(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    slong fmpz_poly_remove(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_divlow_smodp(fmpz * res, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_t p, slong n) noexcept
    void fmpz_poly_divhigh_smodp(fmpz * res, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_t p, slong n) noexcept
    void _fmpz_poly_inv_series_basecase(fmpz * Qinv, const fmpz * Q, slong Qlen, slong n) noexcept
    void fmpz_poly_inv_series_basecase(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) noexcept
    void _fmpz_poly_inv_series_newton(fmpz * Qinv, const fmpz * Q, slong Qlen, slong n) noexcept
    void fmpz_poly_inv_series_newton(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) noexcept
    void _fmpz_poly_inv_series(fmpz * Qinv, const fmpz * Q, slong Qlen, slong n) noexcept
    void fmpz_poly_inv_series(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) noexcept
    void _fmpz_poly_div_series_basecase(fmpz * Q, const fmpz * A, slong Alen, const fmpz * B, slong Blen, slong n) noexcept
    void _fmpz_poly_div_series_divconquer(fmpz * Q, const fmpz * A, slong Alen, const fmpz * B, slong Blen, slong n) noexcept
    void _fmpz_poly_div_series(fmpz * Q, const fmpz * A, slong Alen, const fmpz * B, slong Blen, slong n) noexcept
    void fmpz_poly_div_series_basecase(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) noexcept
    void fmpz_poly_div_series_divconquer(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) noexcept
    void fmpz_poly_div_series(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) noexcept
    void _fmpz_poly_pseudo_divrem_basecase(fmpz * Q, fmpz * R, ulong * d, const fmpz * A, slong lenA, const fmpz * B, slong lenB, const fmpz_preinvn_t inv) noexcept
    void fmpz_poly_pseudo_divrem_basecase(fmpz_poly_t Q, fmpz_poly_t R, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_divrem_divconquer(fmpz * Q, fmpz * R, ulong * d, const fmpz * A, slong lenA, const fmpz * B, slong lenB, const fmpz_preinvn_t inv) noexcept
    void fmpz_poly_pseudo_divrem_divconquer(fmpz_poly_t Q, fmpz_poly_t R, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_divrem_cohen(fmpz * Q, fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB) noexcept
    void fmpz_poly_pseudo_divrem_cohen(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_rem_cohen(fmpz * R, const fmpz * A, slong lenA, const fmpz * B, slong lenB) noexcept
    void fmpz_poly_pseudo_rem_cohen(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_divrem(fmpz * Q, fmpz * R, ulong * d, const fmpz * A, slong lenA, const fmpz * B, slong lenB, const fmpz_preinvn_t inv) noexcept
    void fmpz_poly_pseudo_divrem(fmpz_poly_t Q, fmpz_poly_t R, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_div(fmpz * Q, ulong * d, const fmpz * A, slong lenA, const fmpz * B, slong lenB, const fmpz_preinvn_t inv) noexcept
    void fmpz_poly_pseudo_div(fmpz_poly_t Q, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_pseudo_rem(fmpz * R, ulong * d, const fmpz * A, slong lenA, const fmpz * B, slong lenB, const fmpz_preinvn_t inv) noexcept
    void fmpz_poly_pseudo_rem(fmpz_poly_t R, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) noexcept
    void _fmpz_poly_derivative(fmpz * rpoly, const fmpz * poly, slong len) noexcept
    void fmpz_poly_derivative(fmpz_poly_t res, const fmpz_poly_t poly) noexcept
    void _fmpz_poly_nth_derivative(fmpz * rpoly, const fmpz * poly, ulong n, slong len) noexcept
    void fmpz_poly_nth_derivative(fmpz_poly_t res, const fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_evaluate_divconquer_fmpz(fmpz_t res, const fmpz * poly, slong len, const fmpz_t a) noexcept
    void fmpz_poly_evaluate_divconquer_fmpz(fmpz_t res, const fmpz_poly_t poly, const fmpz_t a) noexcept
    void _fmpz_poly_evaluate_horner_fmpz(fmpz_t res, const fmpz * f, slong len, const fmpz_t a) noexcept
    void fmpz_poly_evaluate_horner_fmpz(fmpz_t res, const fmpz_poly_t f, const fmpz_t a) noexcept
    void _fmpz_poly_evaluate_fmpz(fmpz_t res, const fmpz * f, slong len, const fmpz_t a) noexcept
    void fmpz_poly_evaluate_fmpz(fmpz_t res, const fmpz_poly_t f, const fmpz_t a) noexcept
    void _fmpz_poly_evaluate_divconquer_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz * f, slong len, const fmpz_t anum, const fmpz_t aden) noexcept
    void fmpz_poly_evaluate_divconquer_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) noexcept
    void _fmpz_poly_evaluate_horner_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz * f, slong len, const fmpz_t anum, const fmpz_t aden) noexcept
    void fmpz_poly_evaluate_horner_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) noexcept
    void _fmpz_poly_evaluate_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz * f, slong len, const fmpz_t anum, const fmpz_t aden) noexcept
    void fmpz_poly_evaluate_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) noexcept
    mp_limb_t _fmpz_poly_evaluate_mod(const fmpz * poly, slong len, mp_limb_t a, mp_limb_t n, mp_limb_t ninv) noexcept
    mp_limb_t fmpz_poly_evaluate_mod(const fmpz_poly_t poly, mp_limb_t a, mp_limb_t n) noexcept
    void fmpz_poly_evaluate_fmpz_vec(fmpz * res, const fmpz_poly_t f, const fmpz * a, slong n) noexcept
    double _fmpz_poly_evaluate_horner_d(const fmpz * poly, slong n, double d) noexcept
    double fmpz_poly_evaluate_horner_d(const fmpz_poly_t poly, double d) noexcept
    double _fmpz_poly_evaluate_horner_d_2exp(slong * exp, const fmpz * poly, slong n, double d) noexcept
    double fmpz_poly_evaluate_horner_d_2exp(slong * exp, const fmpz_poly_t poly, double d) noexcept
    double _fmpz_poly_evaluate_horner_d_2exp2(slong * exp, const fmpz * poly, slong n, double d, slong dexp) noexcept
    void _fmpz_poly_monomial_to_newton(fmpz * poly, const fmpz * roots, slong n) noexcept
    void _fmpz_poly_newton_to_monomial(fmpz * poly, const fmpz * roots, slong n) noexcept
    void fmpz_poly_interpolate_fmpz_vec(fmpz_poly_t poly, const fmpz * xs, const fmpz * ys, slong n) noexcept
    void _fmpz_poly_compose_horner(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_compose_horner(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_compose_divconquer(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_compose_divconquer(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void _fmpz_poly_compose(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2) noexcept
    void fmpz_poly_compose(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) noexcept
    void fmpz_poly_inflate(fmpz_poly_t result, const fmpz_poly_t input, ulong inflation) noexcept
    void fmpz_poly_deflate(fmpz_poly_t result, const fmpz_poly_t input, ulong deflation) noexcept
    ulong fmpz_poly_deflation(const fmpz_poly_t input) noexcept
    void _fmpz_poly_taylor_shift_horner(fmpz * poly, const fmpz_t c, slong n) noexcept
    void fmpz_poly_taylor_shift_horner(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) noexcept
    void _fmpz_poly_taylor_shift_divconquer(fmpz * poly, const fmpz_t c, slong n) noexcept
    void fmpz_poly_taylor_shift_divconquer(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) noexcept
    void _fmpz_poly_taylor_shift_multi_mod(fmpz * poly, const fmpz_t c, slong n) noexcept
    void fmpz_poly_taylor_shift_multi_mod(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) noexcept
    void _fmpz_poly_taylor_shift(fmpz * poly, const fmpz_t c, slong n) noexcept
    void fmpz_poly_taylor_shift(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) noexcept
    void _fmpz_poly_compose_series_horner(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_compose_series_horner(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_compose_series_brent_kung(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_compose_series_brent_kung(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_compose_series(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n) noexcept
    void fmpz_poly_compose_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) noexcept
    void _fmpz_poly_revert_series(fmpz * Qinv, const fmpz * Q, slong Qlen, slong n) noexcept
    void fmpz_poly_revert_series(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) noexcept
    int _fmpz_poly_sqrtrem_classical(fmpz * res, fmpz * r, const fmpz * poly, slong len) noexcept
    int fmpz_poly_sqrtrem_classical(fmpz_poly_t b, fmpz_poly_t r, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrtrem_divconquer(fmpz * res, fmpz * r, const fmpz * poly, slong len, fmpz * temp) noexcept
    int fmpz_poly_sqrtrem_divconquer(fmpz_poly_t b, fmpz_poly_t r, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrt_classical(fmpz * res, const fmpz * poly, slong len, int exact) noexcept
    int fmpz_poly_sqrt_classical(fmpz_poly_t b, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrt_KS(fmpz * res, const fmpz * poly, slong len) noexcept
    int fmpz_poly_sqrt_KS(fmpz_poly_t b, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrt_divconquer(fmpz * res, const fmpz * poly, slong len, int exact) noexcept
    int fmpz_poly_sqrt_divconquer(fmpz_poly_t b, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrt(fmpz * res, const fmpz * poly, slong len) noexcept
    int fmpz_poly_sqrt(fmpz_poly_t b, const fmpz_poly_t a) noexcept
    int _fmpz_poly_sqrt_series(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    int fmpz_poly_sqrt_series(fmpz_poly_t b, const fmpz_poly_t a, slong n) noexcept
    void _fmpz_poly_power_sums_naive(fmpz * res, const fmpz * poly, slong len, slong n) noexcept
    void fmpz_poly_power_sums_naive(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void fmpz_poly_power_sums(fmpz_poly_t res, const fmpz_poly_t poly, slong n) noexcept
    void _fmpz_poly_power_sums_to_poly(fmpz * res, const fmpz * poly, slong len) noexcept
    void fmpz_poly_power_sums_to_poly(fmpz_poly_t res, const fmpz_poly_t Q) noexcept
    void _fmpz_poly_signature(slong * r1, slong * r2, const fmpz * poly, slong len) noexcept
    void fmpz_poly_signature(slong * r1, slong * r2, const fmpz_poly_t poly) noexcept
    void fmpz_poly_hensel_build_tree(slong * link, fmpz_poly_t * v, fmpz_poly_t * w, const nmod_poly_factor_t fac) noexcept
    void fmpz_poly_hensel_lift(fmpz_poly_t G, fmpz_poly_t H, fmpz_poly_t A, fmpz_poly_t B, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_poly_t h, const fmpz_poly_t a, const fmpz_poly_t b, const fmpz_t p, const fmpz_t p1) noexcept
    void fmpz_poly_hensel_lift_without_inverse(fmpz_poly_t Gout, fmpz_poly_t Hout, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_poly_t h, const fmpz_poly_t a, const fmpz_poly_t b, const fmpz_t p, const fmpz_t p1) noexcept
    void fmpz_poly_hensel_lift_only_inverse(fmpz_poly_t Aout, fmpz_poly_t Bout, const fmpz_poly_t G, const fmpz_poly_t H, const fmpz_poly_t a, const fmpz_poly_t b, const fmpz_t p, const fmpz_t p1) noexcept
    void fmpz_poly_hensel_lift_tree_recursive(slong * link, fmpz_poly_t * v, fmpz_poly_t * w, fmpz_poly_t f, slong j, slong inv, const fmpz_t p0, const fmpz_t p1) noexcept
    void fmpz_poly_hensel_lift_tree(slong * link, fmpz_poly_t * v, fmpz_poly_t * w, fmpz_poly_t f, slong r, const fmpz_t p, slong e0, slong e1, slong inv) noexcept
    slong _fmpz_poly_hensel_start_lift(fmpz_poly_factor_t lifted_fac, slong * link, fmpz_poly_t * v, fmpz_poly_t * w, const fmpz_poly_t f, const nmod_poly_factor_t local_fac, slong N) noexcept
    slong _fmpz_poly_hensel_continue_lift(fmpz_poly_factor_t lifted_fac, slong * link, fmpz_poly_t * v, fmpz_poly_t * w, const fmpz_poly_t f, slong prev, slong curr, slong N, const fmpz_t p) noexcept
    void fmpz_poly_hensel_lift_once(fmpz_poly_factor_t lifted_fac, const fmpz_poly_t f, const nmod_poly_factor_t local_fac, slong N) noexcept
    int _fmpz_poly_print(const fmpz * poly, slong len) noexcept
    int fmpz_poly_print(const fmpz_poly_t poly) noexcept
    int _fmpz_poly_print_pretty(const fmpz * poly, slong len, const char * x) noexcept
    int fmpz_poly_print_pretty(const fmpz_poly_t poly, const char * x) noexcept
    int _fmpz_poly_fprint(FILE * file, const fmpz * poly, slong len) noexcept
    int fmpz_poly_fprint(FILE * file, const fmpz_poly_t poly) noexcept
    int _fmpz_poly_fprint_pretty(FILE * file, const fmpz * poly, slong len, const char * x) noexcept
    int fmpz_poly_fprint_pretty(FILE * file, const fmpz_poly_t poly, const char * x) noexcept
    int fmpz_poly_read(fmpz_poly_t poly) noexcept
    int fmpz_poly_read_pretty(fmpz_poly_t poly, char **x) noexcept
    int fmpz_poly_fread(FILE * file, fmpz_poly_t poly) noexcept
    int fmpz_poly_fread_pretty(FILE * file, fmpz_poly_t poly, char **x) noexcept
    void fmpz_poly_get_nmod_poly(nmod_poly_t Amod, const fmpz_poly_t A) noexcept
    void fmpz_poly_set_nmod_poly(fmpz_poly_t A, const nmod_poly_t Amod) noexcept
    void fmpz_poly_set_nmod_poly_unsigned(fmpz_poly_t A, const nmod_poly_t Amod) noexcept
    void _fmpz_poly_CRT_ui_precomp(fmpz * res, const fmpz * poly1, slong len1, const fmpz_t m1, mp_srcptr poly2, slong len2, mp_limb_t m2, mp_limb_t m2inv, fmpz_t m1m2, mp_limb_t c, int sign) noexcept
    void _fmpz_poly_CRT_ui(fmpz * res, const fmpz * poly1, slong len1, const fmpz_t m1, mp_srcptr poly2, slong len2, mp_limb_t m2, mp_limb_t m2inv, int sign) noexcept
    void fmpz_poly_CRT_ui(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_t m, const nmod_poly_t poly2, int sign) noexcept
    void _fmpz_poly_product_roots_fmpz_vec(fmpz * poly, const fmpz * xs, slong n) noexcept
    void fmpz_poly_product_roots_fmpz_vec(fmpz_poly_t poly, const fmpz * xs, slong n) noexcept
    void _fmpz_poly_product_roots_fmpq_vec(fmpz * poly, const fmpq * xs, slong n) noexcept
    void fmpz_poly_product_roots_fmpq_vec(fmpz_poly_t poly, const fmpq * xs, slong n) noexcept
    void _fmpz_poly_bound_roots(fmpz_t bound, const fmpz * poly, slong len) noexcept
    void fmpz_poly_bound_roots(fmpz_t bound, const fmpz_poly_t poly) noexcept
    void _fmpz_poly_num_real_roots_sturm(slong * n_neg, slong * n_pos, const fmpz * pol, slong len) noexcept
    slong fmpz_poly_num_real_roots_sturm(const fmpz_poly_t pol) noexcept
    slong _fmpz_poly_num_real_roots(const fmpz * pol, slong len) noexcept
    slong fmpz_poly_num_real_roots(const fmpz_poly_t pol) noexcept
    void _fmpz_poly_cyclotomic(fmpz * a, ulong n, mp_ptr factors, slong num_factors, ulong phi) noexcept
    void fmpz_poly_cyclotomic(fmpz_poly_t poly, ulong n) noexcept
    ulong _fmpz_poly_is_cyclotomic(const fmpz * poly, slong len) noexcept
    ulong fmpz_poly_is_cyclotomic(const fmpz_poly_t poly) noexcept
    void _fmpz_poly_cos_minpoly(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_cos_minpoly(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_swinnerton_dyer(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_swinnerton_dyer(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_chebyshev_t(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_chebyshev_t(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_chebyshev_u(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_chebyshev_u(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_legendre_pt(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_legendre_pt(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_hermite_h(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_hermite_h(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_hermite_he(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_hermite_he(fmpz_poly_t poly, ulong n) noexcept
    void _fmpz_poly_fibonacci(fmpz * coeffs, ulong n) noexcept
    void fmpz_poly_fibonacci(fmpz_poly_t poly, ulong n) noexcept
    void arith_eulerian_polynomial(fmpz_poly_t res, ulong n) noexcept
    void _fmpz_poly_eta_qexp(fmpz * f, slong r, slong len) noexcept
    void fmpz_poly_eta_qexp(fmpz_poly_t f, slong r, slong n) noexcept
    void _fmpz_poly_theta_qexp(fmpz * f, slong r, slong len) noexcept
    void fmpz_poly_theta_qexp(fmpz_poly_t f, slong r, slong n) noexcept
    void fmpz_poly_CLD_bound(fmpz_t res, const fmpz_poly_t f, slong n) noexcept

from .fmpz_poly_macros cimport *
