# distutils: libraries = flint
# distutils: depends = flint/fmpz_poly_q.h

################################################################################
# This file is auto-generated by the script
#   SAGE_ROOT/tools/flint-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_q_init(fmpz_poly_q_t rop) noexcept
    void fmpz_poly_q_clear(fmpz_poly_q_t rop) noexcept
    fmpz_poly_struct * fmpz_poly_q_numref(const fmpz_poly_q_t op) noexcept
    fmpz_poly_struct * fmpz_poly_q_denref(const fmpz_poly_q_t op) noexcept
    void fmpz_poly_q_canonicalise(fmpz_poly_q_t rop) noexcept
    bint fmpz_poly_q_is_canonical(const fmpz_poly_q_t op) noexcept
    void fmpz_poly_q_randtest(fmpz_poly_q_t poly, flint_rand_t state, slong len1, flint_bitcnt_t bits1, slong len2, flint_bitcnt_t bits2) noexcept
    void fmpz_poly_q_randtest_not_zero(fmpz_poly_q_t poly, flint_rand_t state, slong len1, flint_bitcnt_t bits1, slong len2, flint_bitcnt_t bits2) noexcept
    void fmpz_poly_q_set(fmpz_poly_q_t rop, const fmpz_poly_q_t op) noexcept
    void fmpz_poly_q_set_si(fmpz_poly_q_t rop, slong op) noexcept
    void fmpz_poly_q_swap(fmpz_poly_q_t op1, fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_zero(fmpz_poly_q_t rop) noexcept
    void fmpz_poly_q_one(fmpz_poly_q_t rop) noexcept
    void fmpz_poly_q_neg(fmpz_poly_q_t rop, const fmpz_poly_q_t op) noexcept
    void fmpz_poly_q_inv(fmpz_poly_q_t rop, const fmpz_poly_q_t op) noexcept
    bint fmpz_poly_q_is_zero(const fmpz_poly_q_t op) noexcept
    bint fmpz_poly_q_is_one(const fmpz_poly_q_t op) noexcept
    bint fmpz_poly_q_equal(const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_add(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_sub(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_addmul(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_submul(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_scalar_mul_si(fmpz_poly_q_t rop, const fmpz_poly_q_t op, slong x) noexcept
    void fmpz_poly_q_scalar_mul_fmpz(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const fmpz_t x) noexcept
    void fmpz_poly_q_scalar_mul_fmpq(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const fmpq_t x) noexcept
    void fmpz_poly_q_scalar_div_si(fmpz_poly_q_t rop, const fmpz_poly_q_t op, slong x) noexcept
    void fmpz_poly_q_scalar_div_fmpz(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const fmpz_t x) noexcept
    void fmpz_poly_q_scalar_div_fmpq(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const fmpq_t x) noexcept
    void fmpz_poly_q_mul(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_div(fmpz_poly_q_t rop, const fmpz_poly_q_t op1, const fmpz_poly_q_t op2) noexcept
    void fmpz_poly_q_pow(fmpz_poly_q_t rop, const fmpz_poly_q_t op, ulong exp) noexcept
    void fmpz_poly_q_derivative(fmpz_poly_q_t rop, const fmpz_poly_q_t op) noexcept
    int fmpz_poly_q_evaluate_fmpq(fmpq_t rop, const fmpz_poly_q_t f, const fmpq_t a) noexcept
    int fmpz_poly_q_set_str(fmpz_poly_q_t rop, const char * s) noexcept
    char * fmpz_poly_q_get_str(const fmpz_poly_q_t op) noexcept
    char * fmpz_poly_q_get_str_pretty(const fmpz_poly_q_t op, const char * x) noexcept
    int fmpz_poly_q_print(const fmpz_poly_q_t op) noexcept
    int fmpz_poly_q_print_pretty(const fmpz_poly_q_t op, const char * x) noexcept
