From bb8a37806cfa3b6da094f9e18e4b8dc59018a94d Mon Sep 17 00:00:00 2001 From: David Einstein Date: Wed, 6 Sep 2023 10:38:45 -0400 Subject: [PATCH 1/2] Moved _flint.pxd to flintlib.flint.pxd --- src/flint/flint_base/flint_context.pyx | 2 +- src/flint/flintlib/acb.pxd | 2 +- src/flint/flintlib/acb_dirichlet.pxd | 2 +- src/flint/flintlib/acb_mat.pxd | 2 +- src/flint/flintlib/acb_poly.pxd | 2 +- src/flint/flintlib/arb.pxd | 2 +- src/flint/flintlib/arb_fmpz_poly.pxd | 2 +- src/flint/flintlib/arb_hypgeom.pxd | 2 +- src/flint/flintlib/arb_mat.pxd | 2 +- src/flint/flintlib/arb_poly.pxd | 2 +- src/flint/flintlib/arf.pxd | 2 +- src/flint/flintlib/arith.pxd | 2 +- src/flint/flintlib/bernoulli.pxd | 2 +- src/flint/flintlib/dirichlet.pxd | 2 +- src/flint/{_flint.pxd => flintlib/flint.pxd} | 12 +----------- src/flint/flintlib/fmpq.pxd | 2 +- src/flint/flintlib/fmpq_mat.pxd | 2 +- src/flint/flintlib/fmpq_poly.pxd | 2 +- src/flint/flintlib/fmpz.pxd | 4 ++-- src/flint/flintlib/fmpz_factor.pxd | 2 +- src/flint/flintlib/fmpz_mat.pxd | 2 +- src/flint/flintlib/fmpz_mpoly.pxd | 2 +- src/flint/flintlib/fmpz_poly.pxd | 2 +- src/flint/flintlib/mag.pxd | 2 +- src/flint/flintlib/mpoly.pxd | 2 +- src/flint/flintlib/nmod_mat.pxd | 4 ++-- src/flint/flintlib/nmod_poly.pxd | 4 ++-- src/flint/flintlib/nmod_vec.pxd | 2 +- src/flint/flintlib/ulong_extras.pxd | 2 +- src/flint/pyflint.pxd | 2 +- src/flint/types/acb.pyx | 2 +- src/flint/types/arb.pyx | 2 +- src/flint/types/fmpq.pyx | 2 +- src/flint/types/fmpz.pxd | 4 ++-- src/flint/types/fmpz.pyx | 2 +- src/flint/types/fmpz_mpoly.pxd | 2 +- src/flint/types/nmod.pxd | 2 +- src/flint/types/nmod_mat.pxd | 2 +- src/flint/types/nmod_mat.pyx | 2 +- src/flint/types/nmod_poly.pxd | 2 +- 40 files changed, 44 insertions(+), 54 deletions(-) rename src/flint/{_flint.pxd => flintlib/flint.pxd} (82%) diff --git a/src/flint/flint_base/flint_context.pyx b/src/flint/flint_base/flint_context.pyx index 60401492..c73c83bc 100644 --- a/src/flint/flint_base/flint_context.pyx +++ b/src/flint/flint_base/flint_context.pyx @@ -1,5 +1,5 @@ from flint.flintlib.arf cimport ARF_RND_DOWN -from flint._flint cimport ( +from flint.flintlib.flint cimport ( flint_cleanup, flint_get_num_threads, flint_set_num_threads diff --git a/src/flint/flintlib/acb.pxd b/src/flint/flintlib/acb.pxd index c74b3c03..384affb8 100644 --- a/src/flint/flintlib/acb.pxd +++ b/src/flint/flintlib/acb.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, slong +from flint.flintlib.flint cimport ulong, slong from flint.flintlib.arb cimport arb_struct, arb_t, arb_ptr from flint.flintlib.fmpq cimport fmpq_t from flint.flintlib.fmpz cimport fmpz_t diff --git a/src/flint/flintlib/acb_dirichlet.pxd b/src/flint/flintlib/acb_dirichlet.pxd index 74886cda..f6196ceb 100644 --- a/src/flint/flintlib/acb_dirichlet.pxd +++ b/src/flint/flintlib/acb_dirichlet.pxd @@ -1,6 +1,6 @@ from flint.flintlib.acb cimport acb_t, acb_ptr from flint.flintlib.dirichlet cimport dirichlet_group_t, dirichlet_char_t -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.acb_poly cimport acb_poly_t from flint.flintlib.fmpz cimport fmpz_t from flint.flintlib.arb cimport arb_t diff --git a/src/flint/flintlib/acb_mat.pxd b/src/flint/flintlib/acb_mat.pxd index fa2023e4..42b703a1 100644 --- a/src/flint/flintlib/acb_mat.pxd +++ b/src/flint/flintlib/acb_mat.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, flint_rand_t +from flint.flintlib.flint cimport ulong, flint_rand_t from flint.flintlib.fmpz_mat cimport fmpz_mat_t from flint.flintlib.fmpq_mat cimport fmpq_mat_t from flint.flintlib.mag cimport mag_t diff --git a/src/flint/flintlib/acb_poly.pxd b/src/flint/flintlib/acb_poly.pxd index 137d23a3..0dcd476b 100644 --- a/src/flint/flintlib/acb_poly.pxd +++ b/src/flint/flintlib/acb_poly.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport flint_rand_t, ulong +from flint.flintlib.flint cimport flint_rand_t, ulong from flint.flintlib.acb cimport acb_ptr, acb_t, acb_srcptr from flint.flintlib.arb_poly cimport arb_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t diff --git a/src/flint/flintlib/arb.pxd b/src/flint/flintlib/arb.pxd index c846592c..059c175f 100644 --- a/src/flint/flintlib/arb.pxd +++ b/src/flint/flintlib/arb.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, slong, flint_rand_t +from flint.flintlib.flint cimport ulong, slong, flint_rand_t from flint.flintlib.fmpz cimport fmpz_t from flint.flintlib.fmpq cimport fmpq_t from flint.flintlib.arf cimport arf_struct, arf_ptr, arf_t diff --git a/src/flint/flintlib/arb_fmpz_poly.pxd b/src/flint/flintlib/arb_fmpz_poly.pxd index 60be9a79..3317c9af 100644 --- a/src/flint/flintlib/arb_fmpz_poly.pxd +++ b/src/flint/flintlib/arb_fmpz_poly.pxd @@ -1,7 +1,7 @@ from flint.flintlib.arb cimport arb_t from flint.flintlib.acb cimport acb_t, acb_ptr from flint.flintlib.fmpz_poly cimport fmpz_poly_t -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong cdef extern from "arb_fmpz_poly.h": void arb_fmpz_poly_evaluate_arb(arb_t res, const fmpz_poly_t poly, const arb_t x, long prec) diff --git a/src/flint/flintlib/arb_hypgeom.pxd b/src/flint/flintlib/arb_hypgeom.pxd index bca0d1f4..47bbe71d 100644 --- a/src/flint/flintlib/arb_hypgeom.pxd +++ b/src/flint/flintlib/arb_hypgeom.pxd @@ -1,7 +1,7 @@ from flint.flintlib.arb cimport arb_t, arb_srcptr from flint.flintlib.arb_poly cimport arb_poly_t from flint.flintlib.fmpz cimport fmpz_t -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong cdef extern from "arb_hypgeom.h": void arb_hypgeom_pfq(arb_t res, arb_srcptr a, long p, arb_srcptr b, long q, const arb_t z, int regularized, long prec) diff --git a/src/flint/flintlib/arb_mat.pxd b/src/flint/flintlib/arb_mat.pxd index 3220a516..4db252f8 100644 --- a/src/flint/flintlib/arb_mat.pxd +++ b/src/flint/flintlib/arb_mat.pxd @@ -2,7 +2,7 @@ from flint.flintlib.arb cimport arb_ptr, arb_struct from flint.flintlib.fmpz_mat cimport fmpz_mat_t from flint.flintlib.fmpq_mat cimport fmpq_mat_t from flint.flintlib.mag cimport mag_t -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.fmpz cimport fmpz_t from flint.flintlib.arb cimport arb_t from flint.flintlib.arb_poly cimport arb_poly_t diff --git a/src/flint/flintlib/arb_poly.pxd b/src/flint/flintlib/arb_poly.pxd index 9476d313..48f1b241 100644 --- a/src/flint/flintlib/arb_poly.pxd +++ b/src/flint/flintlib/arb_poly.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport flint_rand_t, ulong +from flint.flintlib.flint cimport flint_rand_t, ulong from flint.flintlib.arb cimport arb_ptr, arb_t, arb_srcptr from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t diff --git a/src/flint/flintlib/arf.pxd b/src/flint/flintlib/arf.pxd index 38ac745a..22b7ea94 100644 --- a/src/flint/flintlib/arf.pxd +++ b/src/flint/flintlib/arf.pxd @@ -1,5 +1,5 @@ from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct -from flint._flint cimport mp_limb_t, ulong, flint_rand_t +from flint.flintlib.flint cimport mp_limb_t, ulong, flint_rand_t from flint.flintlib.fmpq cimport fmpq_t from flint.flintlib.mag cimport mag_t diff --git a/src/flint/flintlib/arith.pxd b/src/flint/flintlib/arith.pxd index 64ce4308..7ecea190 100644 --- a/src/flint/flintlib/arith.pxd +++ b/src/flint/flintlib/arith.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.fmpz cimport fmpz_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t diff --git a/src/flint/flintlib/bernoulli.pxd b/src/flint/flintlib/bernoulli.pxd index a1fb9ee2..a36c5ab0 100644 --- a/src/flint/flintlib/bernoulli.pxd +++ b/src/flint/flintlib/bernoulli.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.fmpq cimport fmpq_t cdef extern from "bernoulli.h": diff --git a/src/flint/flintlib/dirichlet.pxd b/src/flint/flintlib/dirichlet.pxd index 6ab7306f..ca8dd6ea 100644 --- a/src/flint/flintlib/dirichlet.pxd +++ b/src/flint/flintlib/dirichlet.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.nmod_vec cimport nmod_t cdef extern from "dirichlet.h": diff --git a/src/flint/_flint.pxd b/src/flint/flintlib/flint.pxd similarity index 82% rename from src/flint/_flint.pxd rename to src/flint/flintlib/flint.pxd index c0218e25..51950f47 100644 --- a/src/flint/_flint.pxd +++ b/src/flint/flintlib/flint.pxd @@ -1,19 +1,9 @@ # _flint.pxd # -# Define the contents of the Python, GMP, Flint and Arb headers. +# Define fundamental types and constants cdef extern from "Python.h": ctypedef void PyObject -# ctypedef void PyTypeObject -# ctypedef long Py_ssize_t -# int PyObject_TypeCheck(object, PyTypeObject*) -# int PyInt_Check(PyObject *o) -# int PyLong_Check(PyObject *o) -# long PyInt_AS_LONG(PyObject *io) -# double PyFloat_AS_DOUBLE(PyObject *io) -# Py_ssize_t PyList_GET_SIZE(PyObject *list) -# long PyLong_AsLongAndOverflow(PyObject *pylong, int *overflow) -# long long PyLong_AsLongLongAndOverflow(PyObject *pylong, int *overflow) cdef enum: FMPZ_UNKNOWN = 0 diff --git a/src/flint/flintlib/fmpq.pxd b/src/flint/flintlib/fmpq.pxd index 5af96777..9457a7a7 100644 --- a/src/flint/flintlib/fmpq.pxd +++ b/src/flint/flintlib/fmpq.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, flint_rand_t, mp_bitcnt_t +from flint.flintlib.flint cimport ulong, flint_rand_t, mp_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t cdef extern from "flint/fmpq.h": diff --git a/src/flint/flintlib/fmpq_mat.pxd b/src/flint/flintlib/fmpq_mat.pxd index 4c0982a3..eaf72ad2 100644 --- a/src/flint/flintlib/fmpq_mat.pxd +++ b/src/flint/flintlib/fmpq_mat.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport flint_rand_t, mp_bitcnt_t +from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpq cimport fmpq_struct, fmpq_t from flint.flintlib.fmpz_mat cimport fmpz_mat_t diff --git a/src/flint/flintlib/fmpq_poly.pxd b/src/flint/flintlib/fmpq_poly.pxd index eaf0373e..c1082938 100644 --- a/src/flint/flintlib/fmpq_poly.pxd +++ b/src/flint/flintlib/fmpq_poly.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport mp_bitcnt_t, flint_rand_t, ulong +from flint.flintlib.flint cimport mp_bitcnt_t, flint_rand_t, ulong from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.fmpq cimport fmpq_t diff --git a/src/flint/flintlib/fmpz.pxd b/src/flint/flintlib/fmpz.pxd index 4c78ec52..69791b02 100644 --- a/src/flint/flintlib/fmpz.pxd +++ b/src/flint/flintlib/fmpz.pxd @@ -1,5 +1,5 @@ -from flint._flint cimport fmpz_struct, ulong, mp_limb_t -from flint._flint cimport mp_size_t, mp_bitcnt_t +from flint.flintlib.flint cimport fmpz_struct, ulong, mp_limb_t +from flint.flintlib.flint cimport mp_size_t, mp_bitcnt_t cdef extern from "flint/fmpz.h": ctypedef fmpz_struct fmpz_t[1] diff --git a/src/flint/flintlib/fmpz_factor.pxd b/src/flint/flintlib/fmpz_factor.pxd index f87316ba..272a55c9 100644 --- a/src/flint/flintlib/fmpz_factor.pxd +++ b/src/flint/flintlib/fmpz_factor.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport fmpz_struct, ulong +from flint.flintlib.flint cimport fmpz_struct, ulong from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/fmpz_factor.h": diff --git a/src/flint/flintlib/fmpz_mat.pxd b/src/flint/flintlib/fmpz_mat.pxd index 2ad7eaf1..421eb418 100644 --- a/src/flint/flintlib/fmpz_mat.pxd +++ b/src/flint/flintlib/fmpz_mat.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport flint_rand_t, mp_bitcnt_t, ulong +from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t, ulong from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.nmod_mat cimport nmod_mat_t diff --git a/src/flint/flintlib/fmpz_mpoly.pxd b/src/flint/flintlib/fmpz_mpoly.pxd index 27f61950..b723d6d9 100644 --- a/src/flint/flintlib/fmpz_mpoly.pxd +++ b/src/flint/flintlib/fmpz_mpoly.pxd @@ -1,6 +1,6 @@ from flint.flintlib.mpoly cimport mpoly_ctx_t, ordering_t from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct -from flint._flint cimport ulong, slong, flint_bitcnt_t, flint_rand_t +from flint.flintlib.flint cimport ulong, slong, flint_bitcnt_t, flint_rand_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t, fmpz_poly_struct cdef extern from "flint/fmpz_mpoly.h": diff --git a/src/flint/flintlib/fmpz_poly.pxd b/src/flint/flintlib/fmpz_poly.pxd index 498177b9..dc3c5157 100644 --- a/src/flint/flintlib/fmpz_poly.pxd +++ b/src/flint/flintlib/fmpz_poly.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, mp_limb_t +from flint.flintlib.flint cimport ulong, mp_limb_t from flint.flintlib.fmpz cimport fmpz_struct,fmpz_t from flint.flintlib.nmod_poly cimport nmod_poly_t diff --git a/src/flint/flintlib/mag.pxd b/src/flint/flintlib/mag.pxd index fe25de18..c12efd50 100644 --- a/src/flint/flintlib/mag.pxd +++ b/src/flint/flintlib/mag.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong, mp_limb_t +from flint.flintlib.flint cimport ulong, mp_limb_t from flint.flintlib.fmpz cimport fmpz_struct cdef extern from "mag.h": diff --git a/src/flint/flintlib/mpoly.pxd b/src/flint/flintlib/mpoly.pxd index e3dabfe6..81b7cb8d 100644 --- a/src/flint/flintlib/mpoly.pxd +++ b/src/flint/flintlib/mpoly.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport slong, FLINT_BITS +from flint.flintlib.flint cimport slong, FLINT_BITS cdef extern from "flint/mpoly.h": ctypedef enum ordering_t: diff --git a/src/flint/flintlib/nmod_mat.pxd b/src/flint/flintlib/nmod_mat.pxd index aa0a16c4..673cda32 100644 --- a/src/flint/flintlib/nmod_mat.pxd +++ b/src/flint/flintlib/nmod_mat.pxd @@ -1,5 +1,5 @@ -from flint._flint cimport mp_limb_t, flint_rand_t, mp_ptr -from flint._flint cimport mp_srcptr +from flint.flintlib.flint cimport mp_limb_t, flint_rand_t, mp_ptr +from flint.flintlib.flint cimport mp_srcptr from flint.flintlib.nmod_vec cimport nmod_t from flint.flintlib.nmod_poly cimport nmod_poly_t diff --git a/src/flint/flintlib/nmod_poly.pxd b/src/flint/flintlib/nmod_poly.pxd index acdd779a..32b300c5 100644 --- a/src/flint/flintlib/nmod_poly.pxd +++ b/src/flint/flintlib/nmod_poly.pxd @@ -1,5 +1,5 @@ -from flint._flint cimport mp_ptr, mp_limb_t, mp_bitcnt_t -from flint._flint cimport flint_rand_t, ulong +from flint.flintlib.flint cimport mp_ptr, mp_limb_t, mp_bitcnt_t +from flint.flintlib.flint cimport flint_rand_t, ulong from flint.flintlib.nmod_vec cimport nmod_t cdef extern from "flint/nmod_poly.h": diff --git a/src/flint/flintlib/nmod_vec.pxd b/src/flint/flintlib/nmod_vec.pxd index 9a154a18..e5059ce4 100644 --- a/src/flint/flintlib/nmod_vec.pxd +++ b/src/flint/flintlib/nmod_vec.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport mp_limb_t, mp_bitcnt_t +from flint.flintlib.flint cimport mp_limb_t, mp_bitcnt_t cdef extern from "flint/nmod_vec.h": ctypedef struct nmod_t: diff --git a/src/flint/flintlib/ulong_extras.pxd b/src/flint/flintlib/ulong_extras.pxd index e253dd91..e4952d80 100644 --- a/src/flint/flintlib/ulong_extras.pxd +++ b/src/flint/flintlib/ulong_extras.pxd @@ -1,4 +1,4 @@ -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong cdef extern from "flint/ulong_extras.h": ulong n_gcd(ulong n, ulong k) diff --git a/src/flint/pyflint.pxd b/src/flint/pyflint.pxd index d34fb964..ec18e14c 100644 --- a/src/flint/pyflint.pxd +++ b/src/flint/pyflint.pxd @@ -6,7 +6,7 @@ from flint.flint_base.flint_base cimport flint_scalar from flint.flint_base.flint_base cimport flint_poly from flint.types.fmpz cimport fmpz -from flint._flint cimport * +from flint.flintlib.flint cimport * cdef flint_rand_t global_random_state diff --git a/src/flint/types/acb.pyx b/src/flint/types/acb.pyx index d0d345eb..961da564 100644 --- a/src/flint/types/acb.pyx +++ b/src/flint/types/acb.pyx @@ -13,7 +13,7 @@ from flint.types.fmpz cimport fmpz from flint.types.fmpz cimport any_as_fmpz from flint.types.dirichlet cimport dirichlet_char -from flint._flint cimport FMPZ_TMP, FMPZ_REF, FMPZ_UNKNOWN +from flint.flintlib.flint cimport FMPZ_TMP, FMPZ_REF, FMPZ_UNKNOWN from flint.flintlib.mag cimport * from flint.flintlib.arb cimport * from flint.flintlib.arf cimport * diff --git a/src/flint/types/arb.pyx b/src/flint/types/arb.pyx index 129a519a..5f5a15b4 100644 --- a/src/flint/types/arb.pyx +++ b/src/flint/types/arb.pyx @@ -14,7 +14,7 @@ from flint.types.arf cimport arf from flint.types.fmpq cimport fmpq from flint.types.fmpz cimport fmpz -from flint._flint cimport FMPZ_UNKNOWN, FMPZ_TMP, FMPZ_REF +from flint.flintlib.flint cimport FMPZ_UNKNOWN, FMPZ_TMP, FMPZ_REF from flint.flintlib.mag cimport * from flint.flintlib.fmpz cimport fmpz_init, fmpz_clear from flint.flintlib.arf cimport * diff --git a/src/flint/types/fmpq.pyx b/src/flint/types/fmpq.pyx index 35f81a3d..83c9c4b5 100644 --- a/src/flint/types/fmpq.pyx +++ b/src/flint/types/fmpq.pyx @@ -4,7 +4,7 @@ from flint.types.fmpz cimport fmpz_set_any_ref from flint.types.fmpz cimport fmpz from flint.types.fmpz cimport any_as_fmpz -from flint._flint cimport FMPZ_UNKNOWN, FMPZ_TMP +from flint.flintlib.flint cimport FMPZ_UNKNOWN, FMPZ_TMP from flint.flintlib.fmpz cimport fmpz_set, fmpz_one from flint.flintlib.fmpz cimport fmpz_is_zero, fmpz_sgn from flint.flintlib.fmpz cimport fmpz_fdiv_q, fmpz_bits diff --git a/src/flint/types/fmpz.pxd b/src/flint/types/fmpz.pxd index d23f5f71..4317c89f 100644 --- a/src/flint/types/fmpz.pxd +++ b/src/flint/types/fmpz.pxd @@ -3,8 +3,8 @@ from cpython.long cimport PyLong_Check from flint.flint_base.flint_base cimport flint_scalar from flint.utils.conversion cimport chars_from_str -from flint._flint cimport slong, pylong_as_slong -from flint._flint cimport PyObject +from flint.flintlib.flint cimport slong, pylong_as_slong +from flint.flintlib.flint cimport PyObject from flint.flintlib.fmpz cimport fmpz_t, fmpz_set_str, fmpz_set_si from cpython.version cimport PY_MAJOR_VERSION diff --git a/src/flint/types/fmpz.pyx b/src/flint/types/fmpz.pyx index 45f7b6f9..51d46ba1 100644 --- a/src/flint/types/fmpz.pyx +++ b/src/flint/types/fmpz.pyx @@ -6,7 +6,7 @@ from flint.utils.conversion cimport chars_from_str from flint.utils.conversion cimport str_from_chars, _str_trunc cimport libc.stdlib -from flint._flint cimport FMPZ_REF, FMPZ_TMP, FMPZ_UNKNOWN +from flint.flintlib.flint cimport FMPZ_REF, FMPZ_TMP, FMPZ_UNKNOWN from flint.flintlib.fmpz cimport * from flint.flintlib.fmpz_factor cimport * from flint.flintlib.arith cimport * diff --git a/src/flint/types/fmpz_mpoly.pxd b/src/flint/types/fmpz_mpoly.pxd index 8cf863c3..e4470efd 100644 --- a/src/flint/types/fmpz_mpoly.pxd +++ b/src/flint/types/fmpz_mpoly.pxd @@ -2,7 +2,7 @@ from flint.flint_base.flint_base cimport flint_mpoly from flint.flintlib.fmpz_mpoly cimport fmpz_mpoly_ctx_t from flint.flintlib.fmpz_mpoly cimport fmpz_mpoly_t -from flint._flint cimport slong +from flint.flintlib.flint cimport slong cdef class fmpz_mpoly_ctx: cdef fmpz_mpoly_ctx_t val diff --git a/src/flint/types/nmod.pxd b/src/flint/types/nmod.pxd index 0a441fec..3db868c7 100644 --- a/src/flint/types/nmod.pxd +++ b/src/flint/types/nmod.pxd @@ -1,5 +1,5 @@ from flint.flint_base.flint_base cimport flint_scalar -from flint._flint cimport mp_limb_t +from flint.flintlib.flint cimport mp_limb_t from flint.flintlib.nmod_vec cimport nmod_t cdef int any_as_nmod(mp_limb_t * val, obj, nmod_t mod) except -1 diff --git a/src/flint/types/nmod_mat.pxd b/src/flint/types/nmod_mat.pxd index 7a31e15b..fc930383 100644 --- a/src/flint/types/nmod_mat.pxd +++ b/src/flint/types/nmod_mat.pxd @@ -1,7 +1,7 @@ from flint.flint_base.flint_base cimport flint_mat from flint.flintlib.nmod_mat cimport nmod_mat_t -from flint._flint cimport mp_limb_t +from flint.flintlib.flint cimport mp_limb_t cdef class nmod_mat: cdef nmod_mat_t val diff --git a/src/flint/types/nmod_mat.pyx b/src/flint/types/nmod_mat.pyx index 6a813433..350bf73d 100644 --- a/src/flint/types/nmod_mat.pyx +++ b/src/flint/types/nmod_mat.pyx @@ -9,7 +9,7 @@ from flint.flint_base.flint_context cimport thectx cimport cython -from flint._flint cimport ulong +from flint.flintlib.flint cimport ulong from flint.flintlib.nmod_mat cimport * from flint.flintlib.fmpz_mat cimport fmpz_mat_nrows, fmpz_mat_ncols from flint.flintlib.fmpz_mat cimport fmpz_mat_get_nmod_mat diff --git a/src/flint/types/nmod_poly.pxd b/src/flint/types/nmod_poly.pxd index ab33f64c..c0d1cd85 100644 --- a/src/flint/types/nmod_poly.pxd +++ b/src/flint/types/nmod_poly.pxd @@ -1,7 +1,7 @@ from flint.flint_base.flint_base cimport flint_poly from flint.flintlib.nmod_poly cimport nmod_poly_t -from flint._flint cimport mp_limb_t +from flint.flintlib.flint cimport mp_limb_t cdef class nmod_poly(flint_poly): cdef nmod_poly_t val From e5065547c39a12fd740bdba8fa16f8e4704ce4a9 Mon Sep 17 00:00:00 2001 From: David Einstein Date: Thu, 7 Sep 2023 12:46:48 -0400 Subject: [PATCH 2/2] Expanded the interface of flintlib to all flint2.9 functions This mined the rst files for the documentation to get the signatures of the functions. Functions using structures not yet implemented in python-flint are commented out. Note: The documentation is not always correct. I'll automatically compare the documentation with the headers as soon as I write some code to do so. --- src/flint/flintlib/acb.pxd | 385 +++++++++++-------- src/flint/flintlib/acb_calc.pxd | 13 +- src/flint/flintlib/acb_dirichlet.pxd | 139 ++++++- src/flint/flintlib/acb_elliptic.pxd | 43 ++- src/flint/flintlib/acb_hypgeom.pxd | 231 ++++++++---- src/flint/flintlib/acb_mat.pxd | 164 ++++---- src/flint/flintlib/acb_poly.pxd | 431 ++++++++++++--------- src/flint/flintlib/arb_fmpz_poly.pxd | 22 +- src/flint/flintlib/arb_hypgeom.pxd | 202 ++++++---- src/flint/flintlib/arb_mat.pxd | 163 +++++--- src/flint/flintlib/arb_poly.pxd | 429 +++++++++++---------- src/flint/flintlib/arf.pxd | 235 +++++++----- src/flint/flintlib/arith.pxd | 87 ++++- src/flint/flintlib/bernoulli.pxd | 20 +- src/flint/flintlib/dirichlet.pxd | 59 +-- src/flint/flintlib/fmpq.pxd | 309 +++++++++++++-- src/flint/flintlib/fmpq_mat.pxd | 129 ++++--- src/flint/flintlib/fmpq_poly.pxd | 325 +++++++++++----- src/flint/flintlib/fmpz.pxd | 323 +++++++++++----- src/flint/flintlib/fmpz_factor.pxd | 37 +- src/flint/flintlib/fmpz_lll.pxd | 37 +- src/flint/flintlib/fmpz_mat.pxd | 237 ++++++++++-- src/flint/flintlib/fmpz_mpoly.pxd | 203 +++++----- src/flint/flintlib/fmpz_poly.pxd | 467 ++++++++++++++++++----- src/flint/flintlib/fmpz_poly_factor.pxd | 20 +- src/flint/flintlib/mag.pxd | 119 +++++- src/flint/flintlib/nmod.pxd | 31 ++ src/flint/flintlib/nmod_mat.pxd | 108 ++++-- src/flint/flintlib/nmod_poly.pxd | 481 ++++++++++++++++++++---- src/flint/flintlib/nmod_poly_factor.pxd | 42 +++ src/flint/flintlib/nmod_vec.pxd | 5 +- src/flint/flintlib/partitions.pxd | 11 +- src/flint/flintlib/ulong_extras.pxd | 129 ++++++- src/flint/types/nmod_poly.pyx | 1 + 34 files changed, 4067 insertions(+), 1570 deletions(-) create mode 100644 src/flint/flintlib/nmod.pxd create mode 100644 src/flint/flintlib/nmod_poly_factor.pxd diff --git a/src/flint/flintlib/acb.pxd b/src/flint/flintlib/acb.pxd index 384affb8..cfa16c08 100644 --- a/src/flint/flintlib/acb.pxd +++ b/src/flint/flintlib/acb.pxd @@ -1,9 +1,9 @@ -from flint.flintlib.flint cimport ulong, slong +from flint.flintlib.flint cimport ulong, slong, flint_rand_t from flint.flintlib.arb cimport arb_struct, arb_t, arb_ptr from flint.flintlib.fmpq cimport fmpq_t -from flint.flintlib.fmpz cimport fmpz_t -from flint.flintlib.arf cimport arf_t -from flint.flintlib.mag cimport mag_t +from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct +from flint.flintlib.arf cimport arf_t, arf_srcptr +from flint.flintlib.mag cimport mag_t, mag_srcptr cdef extern from "acb.h": ctypedef struct acb_struct: @@ -17,181 +17,240 @@ cdef extern from "acb.h": arb_ptr acb_realref(const acb_t x) arb_ptr acb_imagref(const acb_t x) - acb_ptr _acb_vec_init(long n) - void _acb_vec_clear(acb_ptr v, long n) - void _acb_vec_sort_pretty(acb_ptr vec, long len) - void acb_printd(const acb_t z, long digits) - void acb_init(acb_t x) void acb_clear(acb_t x) - int acb_is_zero(const acb_t z) - int acb_is_one(const acb_t z) - int acb_is_exact(const acb_t z) - int acb_is_finite(const acb_t x) - void acb_indeterminate(acb_t x) + acb_ptr _acb_vec_init(slong n) + void _acb_vec_clear(acb_ptr v, slong n) + slong acb_allocated_bytes(const acb_t x) + slong _acb_vec_allocated_bytes(acb_srcptr vec, slong len) + double _acb_vec_estimate_allocated_bytes(slong len, slong prec) void acb_zero(acb_t z) void acb_one(acb_t z) void acb_onei(acb_t z) void acb_set(acb_t z, const acb_t x) - void acb_set_round(acb_t z, const acb_t x, long prec) - void acb_neg_round(acb_t z, const acb_t x, long prec) + void acb_set_ui(acb_t z, ulong x) + void acb_set_si(acb_t z, slong x) + void acb_set_d(acb_t z, double x) + void acb_set_fmpz(acb_t z, const fmpz_t x) + void acb_set_arb(acb_t z, const arb_t c) + void acb_set_si_si(acb_t z, slong x, slong y) + void acb_set_d_d(acb_t z, double x, double y) + void acb_set_fmpz_fmpz(acb_t z, const fmpz_t x, const fmpz_t y) + void acb_set_arb_arb(acb_t z, const arb_t x, const arb_t y) + void acb_set_fmpq(acb_t z, const fmpq_t x, slong prec) + void acb_set_round(acb_t z, const acb_t x, slong prec) + void acb_set_round_fmpz(acb_t z, const fmpz_t x, slong prec) + void acb_set_round_arb(acb_t z, const arb_t x, slong prec) void acb_swap(acb_t z, acb_t x) + void acb_add_error_arf(acb_t x, const arf_t err) + void acb_add_error_mag(acb_t x, const mag_t err) + void acb_add_error_arb(acb_t x, const arb_t err) + void acb_get_mid(acb_t m, const acb_t x) + void acb_print(const acb_t x) + void acb_printd(const acb_t x, slong digits) + void acb_printn(const acb_t x, slong digits, ulong flags) + void acb_randtest(acb_t z, flint_rand_t state, slong prec, slong mag_bits) + void acb_randtest_special(acb_t z, flint_rand_t state, slong prec, slong mag_bits) + void acb_randtest_precise(acb_t z, flint_rand_t state, slong prec, slong mag_bits) + void acb_randtest_param(acb_t z, flint_rand_t state, slong prec, slong mag_bits) + int acb_is_zero(const acb_t z) + int acb_is_one(const acb_t z) + int acb_is_finite(const acb_t z) + int acb_is_exact(const acb_t z) + int acb_is_int(const acb_t z) + int acb_is_int_2exp_si(const acb_t x, slong e) int acb_equal(const acb_t x, const acb_t y) + int acb_equal_si(const acb_t x, slong y) int acb_eq(const acb_t x, const acb_t y) int acb_ne(const acb_t x, const acb_t y) int acb_overlaps(const acb_t x, const acb_t y) - int acb_contains_zero(const acb_t x) + void acb_union(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_get_abs_ubound_arf(arf_t u, const acb_t z, slong prec) + void acb_get_abs_lbound_arf(arf_t u, const acb_t z, slong prec) + void acb_get_rad_ubound_arf(arf_t u, const acb_t z, slong prec) + void acb_get_mag(mag_t u, const acb_t x) + void acb_get_mag_lower(mag_t u, const acb_t x) int acb_contains_fmpq(const acb_t x, const fmpq_t y) int acb_contains_fmpz(const acb_t x, const fmpz_t y) int acb_contains(const acb_t x, const acb_t y) + int acb_contains_zero(const acb_t x) + int acb_contains_int(const acb_t x) int acb_contains_interior(const acb_t x, const acb_t y) + slong acb_rel_error_bits(const acb_t x) + slong acb_rel_accuracy_bits(const acb_t x) + slong acb_rel_one_accuracy_bits(const acb_t x) + slong acb_bits(const acb_t x) + void acb_indeterminate(acb_t x) + void acb_trim(acb_t y, const acb_t x) + int acb_is_real(const acb_t x) int acb_get_unique_fmpz(fmpz_t z, const acb_t x) - int acb_contains_int(const acb_t x) - void acb_union(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_set_ui(acb_t z, ulong c) - void acb_set_si(acb_t z, long c) - void acb_set_fmpz(acb_t z, const fmpz_t c) - void acb_set_round_fmpz(acb_t z, const fmpz_t y, long prec) - void acb_set_fmpq(acb_t z, const fmpq_t c, long prec) - void acb_set_arb(acb_t z, const arb_t c) - void acb_set_round_arb(acb_t z, const arb_t x, long prec) - void acb_trim(acb_t z, const acb_t x) - void acb_add_error_arf(acb_t x, const arf_t err) - void acb_add_error_mag(acb_t x, const mag_t err) - void acb_get_mag(mag_t z, const acb_t x) - void acb_get_mag_lower(mag_t z, const acb_t x) - void acb_get_abs_ubound_arf(arf_t u, const acb_t z, long prec) - void acb_get_abs_lbound_arf(arf_t u, const acb_t z, long prec) - void acb_get_rad_ubound_arf(arf_t u, const acb_t z, long prec) - void acb_arg(arb_t r, const acb_t z, long prec) - void acb_add(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_sub(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_add_ui(acb_t z, const acb_t x, ulong c, long prec) - void acb_sub_ui(acb_t z, const acb_t x, ulong c, long prec) - void acb_add_fmpz(acb_t z, const acb_t x, const fmpz_t y, long prec) - void acb_add_arb(acb_t z, const acb_t x, const arb_t y, long prec) - void acb_sub_fmpz(acb_t z, const acb_t x, const fmpz_t y, long prec) - void acb_sub_arb(acb_t z, const acb_t x, const arb_t y, long prec) + void acb_get_real(arb_t re, const acb_t z) + void acb_get_imag(arb_t im, const acb_t z) + void acb_arg(arb_t r, const acb_t z, slong prec) + void acb_abs(arb_t r, const acb_t z, slong prec) + void acb_sgn(acb_t r, const acb_t z, slong prec) + void acb_csgn(arb_t r, const acb_t z) void acb_neg(acb_t z, const acb_t x) + void acb_neg_round(acb_t z, const acb_t x, slong prec) void acb_conj(acb_t z, const acb_t x) - void acb_abs(arb_t u, const acb_t z, long prec) - void acb_sgn(acb_t u, const acb_t z, long prec) - void acb_csgn(arb_t u, const acb_t z) - void acb_get_real(arb_t u, const acb_t z) - void acb_get_imag(arb_t u, const acb_t z) - - void acb_real_abs(acb_t res, const acb_t z, int analytic, long prec) - void acb_real_sgn(acb_t res, const acb_t z, int analytic, long prec) - void acb_real_heaviside(acb_t res, const acb_t z, int analytic, long prec) - void acb_real_floor(acb_t res, const acb_t z, int analytic, long prec) - void acb_real_ceil(acb_t res, const acb_t z, int analytic, long prec) - void acb_real_max(acb_t res, const acb_t x, const acb_t y, int analytic, long prec) - void acb_real_min(acb_t res, const acb_t x, const acb_t y, int analytic, long prec) - void acb_real_sqrtpos(acb_t res, const acb_t z, int analytic, long prec) - - void acb_sqrt_analytic(acb_t res, const acb_t z, int analytic, long prec) - void acb_rsqrt_analytic(acb_t res, const acb_t z, int analytic, long prec) - void acb_log_analytic(acb_t res, const acb_t z, int analytic, long prec) - void acb_pow_analytic(acb_t res, const acb_t z, const acb_t w, int analytic, long prec) - - void acb_mul_ui(acb_t z, const acb_t x, ulong y, long prec) - void acb_mul_si(acb_t z, const acb_t x, long y, long prec) - void acb_mul_fmpz(acb_t z, const acb_t x, const fmpz_t y, long prec) - void acb_mul_arb(acb_t z, const acb_t x, const arb_t y, long prec) + void acb_add_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_add_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_add_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_add_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_add(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_sub_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_sub_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_sub_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_sub_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_sub(acb_t z, const acb_t x, const acb_t y, slong prec) void acb_mul_onei(acb_t z, const acb_t x) - void acb_mul(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_mul_2exp_si(acb_t z, const acb_t x, long e) - void acb_mul_2exp_fmpz(acb_t z, const acb_t x, const fmpz_t c) - void acb_addmul(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_submul(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_addmul_ui(acb_t z, const acb_t x, ulong y, long prec) - void acb_addmul_si(acb_t z, const acb_t x, long y, long prec) - void acb_submul_ui(acb_t z, const acb_t x, ulong y, long prec) - void acb_submul_si(acb_t z, const acb_t x, long y, long prec) - void acb_addmul_fmpz(acb_t z, const acb_t x, const fmpz_t y, long prec) - void acb_submul_fmpz(acb_t z, const acb_t x, const fmpz_t y, long prec) - void acb_addmul_arb(acb_t z, const acb_t x, const arb_t y, long prec) - void acb_submul_arb(acb_t z, const acb_t x, const arb_t y, long prec) - void acb_inv(acb_t z, const acb_t x, long prec) - void acb_div(acb_t z, const acb_t x, const acb_t y, long prec) - void acb_div_ui(acb_t z, const acb_t x, ulong c, long prec) - void acb_div_si(acb_t z, const acb_t x, long c, long prec) - void acb_div_arb(acb_t z, const acb_t x, const arb_t c, long prec) - void acb_div_fmpz(acb_t z, const acb_t x, const fmpz_t c, long prec) - void acb_cube(acb_t y, const acb_t x, long prec) - void acb_pow_fmpz(acb_t y, const acb_t b, const fmpz_t e, long prec) - void acb_pow_ui(acb_t y, const acb_t b, ulong e, long prec) - void acb_pow_si(acb_t y, const acb_t b, long e, long prec) - void acb_const_pi(acb_t x, long prec) - void acb_log(acb_t r, const acb_t z, long prec) - void acb_exp(acb_t r, const acb_t z, long prec) - void acb_exp_pi_i(acb_t r, const acb_t z, long prec) - void acb_sin(acb_t r, const acb_t z, long prec) - void acb_cos(acb_t r, const acb_t z, long prec) - void acb_sin_cos(acb_t s, acb_t c, const acb_t z, long prec) - void acb_tan(acb_t r, const acb_t z, long prec) - void acb_cot(acb_t r, const acb_t z, long prec) - void acb_sec(acb_t r, const acb_t z, long prec) - void acb_csc(acb_t r, const acb_t z, long prec) - void acb_sin_pi(acb_t r, const acb_t z, long prec) - void acb_cos_pi(acb_t r, const acb_t z, long prec) - void acb_sin_cos_pi(acb_t s, acb_t c, const acb_t z, long prec) - void acb_tan_pi(acb_t r, const acb_t z, long prec) - void acb_cot_pi(acb_t r, const acb_t z, long prec) - void acb_sinh(acb_t r, const acb_t z, long prec) - void acb_cosh(acb_t r, const acb_t z, long prec) - void acb_sinh_cosh(acb_t s, acb_t c, const acb_t z, long prec) - void acb_tanh(acb_t r, const acb_t z, long prec) - void acb_coth(acb_t r, const acb_t z, long prec) - void acb_sech(acb_t r, const acb_t z, long prec) - void acb_csch(acb_t r, const acb_t z, long prec) - void acb_sinc(acb_t r, const acb_t z, long prec) - void acb_sinc_pi(acb_t r, const acb_t z, long prec) - void acb_pow_arb(acb_t z, const acb_t x, const arb_t y, long prec) - void acb_pow(acb_t r, const acb_t x, const acb_t y, long prec) - void acb_sqrt(acb_t y, const acb_t x, long prec) - void acb_rsqrt(acb_t y, const acb_t x, long prec) - void acb_rising_ui_bs(acb_t y, const acb_t x, ulong n, long prec) - void acb_rising_ui_rs(acb_t y, const acb_t x, ulong n, ulong m, long prec) - void acb_rising_ui_rec(acb_t y, const acb_t x, ulong n, long prec) - void acb_rising_ui(acb_t z, const acb_t x, ulong n, long prec) - void acb_rising2_ui_bs(acb_t u, acb_t v, const acb_t x, ulong n, long prec) - void acb_rising2_ui_rs(acb_t u, acb_t v, const acb_t x, ulong n, ulong m, long prec) - void acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, long prec) - void acb_rising_ui_get_mag(mag_t bound, const acb_t s, ulong n) - void acb_rising(acb_t y, const acb_t x, const acb_t n, long prec) - - void acb_gamma(acb_t y, const acb_t x, long prec) - void acb_rgamma(acb_t y, const acb_t x, long prec) - void acb_lgamma(acb_t y, const acb_t x, long prec) - void acb_digamma(acb_t y, const acb_t x, long prec) - void acb_zeta(acb_t z, const acb_t s, long prec) - void acb_hurwitz_zeta(acb_t z, const acb_t s, const acb_t a, long prec) - void acb_polylog(acb_t w, const acb_t s, const acb_t z, long prec) - void acb_polylog_si(acb_t w, long s, const acb_t z, long prec) - void acb_agm1(acb_t m, const acb_t z, long prec) - void acb_agm1_cpx(acb_ptr m, const acb_t z, long len, long prec) - void acb_agm(acb_t res, const acb_t a, const acb_t b, long prec) - void acb_expm1(acb_t r, const acb_t z, long prec) - void acb_log1p(acb_t r, const acb_t z, long prec) - void acb_asin(acb_t r, const acb_t z, long prec) - void acb_acos(acb_t r, const acb_t z, long prec) - void acb_atan(acb_t r, const acb_t z, long prec) - void acb_asinh(acb_t r, const acb_t z, long prec) - void acb_acosh(acb_t r, const acb_t z, long prec) - void acb_atanh(acb_t r, const acb_t z, long prec) - void acb_log_sin_pi(acb_t res, const acb_t z, long prec) - - void acb_polygamma(acb_t w, const acb_t s, const acb_t z, long prec) - void acb_log_barnes_g(acb_t w, const acb_t z, long prec) - void acb_barnes_g(acb_t w, const acb_t z, long prec) - - void acb_bernoulli_poly_ui(acb_t res, ulong n, const acb_t x, long prec) - - void acb_lambertw(acb_t z, const acb_t x, const fmpz_t k, int flags, long prec) - - long acb_rel_error_bits(const acb_t x) - long acb_rel_accuracy_bits(const acb_t x) - long acb_bits(const acb_t x) - - void acb_root_ui(acb_t z, const acb_t x, ulong k, long prec) + void acb_div_onei(acb_t z, const acb_t x) + void acb_mul_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_mul_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_mul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_mul_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_mul(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_mul_2exp_si(acb_t z, const acb_t x, slong e) + void acb_mul_2exp_fmpz(acb_t z, const acb_t x, const fmpz_t e) + void acb_sqr(acb_t z, const acb_t x, slong prec) + void acb_cube(acb_t z, const acb_t x, slong prec) + void acb_addmul(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_addmul_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_addmul_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_addmul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_addmul_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_submul(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_submul_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_submul_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_submul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_submul_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_inv(acb_t z, const acb_t x, slong prec) + void acb_div_ui(acb_t z, const acb_t x, ulong y, slong prec) + void acb_div_si(acb_t z, const acb_t x, slong y, slong prec) + void acb_div_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec) + void acb_div_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_div(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_dot_precise(acb_t res, const acb_t s, int subtract, acb_srcptr x, slong xstep, acb_srcptr y, slong ystep, slong len, slong prec) + void acb_dot_simple(acb_t res, const acb_t s, int subtract, acb_srcptr x, slong xstep, acb_srcptr y, slong ystep, slong len, slong prec) + void acb_dot(acb_t res, const acb_t s, int subtract, acb_srcptr x, slong xstep, acb_srcptr y, slong ystep, slong len, slong prec) + void acb_approx_dot(acb_t res, const acb_t s, int subtract, acb_srcptr x, slong xstep, acb_srcptr y, slong ystep, slong len, slong prec) + void acb_dot_ui(acb_t res, const acb_t initial, int subtract, acb_srcptr x, slong xstep, const ulong * y, slong ystep, slong len, slong prec) + void acb_dot_si(acb_t res, const acb_t initial, int subtract, acb_srcptr x, slong xstep, const slong * y, slong ystep, slong len, slong prec) + void acb_dot_uiui(acb_t res, const acb_t initial, int subtract, acb_srcptr x, slong xstep, const ulong * y, slong ystep, slong len, slong prec) + void acb_dot_siui(acb_t res, const acb_t initial, int subtract, acb_srcptr x, slong xstep, const ulong * y, slong ystep, slong len, slong prec) + void acb_dot_fmpz(acb_t res, const acb_t initial, int subtract, acb_srcptr x, slong xstep, const fmpz_struct * y, slong ystep, slong len, slong prec) + void acb_const_pi(acb_t y, slong prec) + void acb_sqrt(acb_t r, const acb_t z, slong prec) + void acb_sqrt_analytic(acb_t r, const acb_t z, int analytic, slong prec) + void acb_rsqrt(acb_t r, const acb_t z, slong prec) + void acb_rsqrt_analytic(acb_t r, const acb_t z, int analytic, slong prec) + void acb_quadratic_roots_fmpz(acb_t r1, acb_t r2, const fmpz_t a, const fmpz_t b, const fmpz_t c, slong prec) + void acb_root_ui(acb_t r, const acb_t z, ulong k, slong prec) + void acb_pow_fmpz(acb_t y, const acb_t b, const fmpz_t e, slong prec) + void acb_pow_ui(acb_t y, const acb_t b, ulong e, slong prec) + void acb_pow_si(acb_t y, const acb_t b, slong e, slong prec) + void acb_pow_arb(acb_t z, const acb_t x, const arb_t y, slong prec) + void acb_pow(acb_t z, const acb_t x, const acb_t y, slong prec) + void acb_pow_analytic(acb_t r, const acb_t x, const acb_t y, int analytic, slong prec) + void acb_unit_root(acb_t res, ulong order, slong prec) + void acb_exp(acb_t y, const acb_t z, slong prec) + void acb_exp_pi_i(acb_t y, const acb_t z, slong prec) + void acb_exp_invexp(acb_t s, acb_t t, const acb_t z, slong prec) + void acb_expm1(acb_t res, const acb_t z, slong prec) + void acb_log(acb_t y, const acb_t z, slong prec) + void acb_log_analytic(acb_t r, const acb_t z, int analytic, slong prec) + void acb_log1p(acb_t z, const acb_t x, slong prec) + void acb_sin(acb_t s, const acb_t z, slong prec) + void acb_cos(acb_t c, const acb_t z, slong prec) + void acb_sin_cos(acb_t s, acb_t c, const acb_t z, slong prec) + void acb_tan(acb_t s, const acb_t z, slong prec) + void acb_cot(acb_t s, const acb_t z, slong prec) + void acb_sin_pi(acb_t s, const acb_t z, slong prec) + void acb_cos_pi(acb_t s, const acb_t z, slong prec) + void acb_sin_cos_pi(acb_t s, acb_t c, const acb_t z, slong prec) + void acb_tan_pi(acb_t s, const acb_t z, slong prec) + void acb_cot_pi(acb_t s, const acb_t z, slong prec) + void acb_sec(acb_t res, const acb_t z, slong prec) + void acb_csc(acb_t res, const acb_t z, slong prec) + void acb_csc_pi(acb_t res, const acb_t z, slong prec) + void acb_sinc(acb_t s, const acb_t z, slong prec) + void acb_sinc_pi(acb_t s, const acb_t z, slong prec) + void acb_asin(acb_t res, const acb_t z, slong prec) + void acb_acos(acb_t res, const acb_t z, slong prec) + void acb_atan(acb_t res, const acb_t z, slong prec) + void acb_sinh(acb_t s, const acb_t z, slong prec) + void acb_cosh(acb_t c, const acb_t z, slong prec) + void acb_sinh_cosh(acb_t s, acb_t c, const acb_t z, slong prec) + void acb_tanh(acb_t s, const acb_t z, slong prec) + void acb_coth(acb_t s, const acb_t z, slong prec) + void acb_sech(acb_t res, const acb_t z, slong prec) + void acb_csch(acb_t res, const acb_t z, slong prec) + void acb_asinh(acb_t res, const acb_t z, slong prec) + void acb_acosh(acb_t res, const acb_t z, slong prec) + void acb_atanh(acb_t res, const acb_t z, slong prec) + void acb_lambertw_asymp(acb_t res, const acb_t z, const fmpz_t k, slong L, slong M, slong prec) + int acb_lambertw_check_branch(const acb_t w, const fmpz_t k, slong prec) + void acb_lambertw_bound_deriv(mag_t res, const acb_t z, const acb_t ez1, const fmpz_t k) + void acb_lambertw(acb_t res, const acb_t z, const fmpz_t k, int flags, slong prec) + void acb_rising_ui(acb_t z, const acb_t x, ulong n, slong prec) + void acb_rising(acb_t z, const acb_t x, const acb_t n, slong prec) + void acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, slong prec) + void acb_rising_ui_get_mag(mag_t bound, const acb_t x, ulong n) + void acb_gamma(acb_t y, const acb_t x, slong prec) + void acb_rgamma(acb_t y, const acb_t x, slong prec) + void acb_lgamma(acb_t y, const acb_t x, slong prec) + void acb_digamma(acb_t y, const acb_t x, slong prec) + void acb_log_sin_pi(acb_t res, const acb_t z, slong prec) + void acb_polygamma(acb_t res, const acb_t s, const acb_t z, slong prec) + void acb_barnes_g(acb_t res, const acb_t z, slong prec) + void acb_log_barnes_g(acb_t res, const acb_t z, slong prec) + void acb_zeta(acb_t z, const acb_t s, slong prec) + void acb_hurwitz_zeta(acb_t z, const acb_t s, const acb_t a, slong prec) + void acb_bernoulli_poly_ui(acb_t res, ulong n, const acb_t x, slong prec) + void acb_polylog(acb_t w, const acb_t s, const acb_t z, slong prec) + void acb_polylog_si(acb_t w, slong s, const acb_t z, slong prec) + void acb_agm1(acb_t m, const acb_t z, slong prec) + void acb_agm1_cpx(acb_ptr m, const acb_t z, slong len, slong prec) + void acb_agm(acb_t m, const acb_t x, const acb_t y, slong prec) + void acb_chebyshev_t_ui(acb_t a, ulong n, const acb_t x, slong prec) + void acb_chebyshev_u_ui(acb_t a, ulong n, const acb_t x, slong prec) + void acb_chebyshev_t2_ui(acb_t a, acb_t b, ulong n, const acb_t x, slong prec) + void acb_chebyshev_u2_ui(acb_t a, acb_t b, ulong n, const acb_t x, slong prec) + void acb_real_abs(acb_t res, const acb_t z, int analytic, slong prec) + void acb_real_sgn(acb_t res, const acb_t z, int analytic, slong prec) + void acb_real_heaviside(acb_t res, const acb_t z, int analytic, slong prec) + void acb_real_floor(acb_t res, const acb_t z, int analytic, slong prec) + void acb_real_ceil(acb_t res, const acb_t z, int analytic, slong prec) + void acb_real_max(acb_t res, const acb_t x, const acb_t y, int analytic, slong prec) + void acb_real_min(acb_t res, const acb_t x, const acb_t y, int analytic, slong prec) + void acb_real_sqrtpos(acb_t res, const acb_t z, int analytic, slong prec) + void _acb_vec_zero(acb_ptr A, slong n) + int _acb_vec_is_zero(acb_srcptr vec, slong len) + int _acb_vec_is_real(acb_srcptr v, slong len) + void _acb_vec_set(acb_ptr res, acb_srcptr vec, slong len) + void _acb_vec_set_round(acb_ptr res, acb_srcptr vec, slong len, slong prec) + void _acb_vec_swap(acb_ptr vec1, acb_ptr vec2, slong len) + void _acb_vec_neg(acb_ptr res, acb_srcptr vec, slong len) + void _acb_vec_add(acb_ptr res, acb_srcptr vec1, acb_srcptr vec2, slong len, slong prec) + void _acb_vec_sub(acb_ptr res, acb_srcptr vec1, acb_srcptr vec2, slong len, slong prec) + void _acb_vec_scalar_submul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec) + void _acb_vec_scalar_addmul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec) + void _acb_vec_scalar_mul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec) + void _acb_vec_scalar_mul_ui(acb_ptr res, acb_srcptr vec, slong len, ulong c, slong prec) + void _acb_vec_scalar_mul_2exp_si(acb_ptr res, acb_srcptr vec, slong len, slong c) + void _acb_vec_scalar_mul_onei(acb_ptr res, acb_srcptr vec, slong len) + void _acb_vec_scalar_div_ui(acb_ptr res, acb_srcptr vec, slong len, ulong c, slong prec) + void _acb_vec_scalar_div(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec) + void _acb_vec_scalar_mul_arb(acb_ptr res, acb_srcptr vec, slong len, const arb_t c, slong prec) + void _acb_vec_scalar_div_arb(acb_ptr res, acb_srcptr vec, slong len, const arb_t c, slong prec) + void _acb_vec_scalar_mul_fmpz(acb_ptr res, acb_srcptr vec, slong len, const fmpz_t c, slong prec) + void _acb_vec_scalar_div_fmpz(acb_ptr res, acb_srcptr vec, slong len, const fmpz_t c, slong prec) + slong _acb_vec_bits(acb_srcptr vec, slong len) + void _acb_vec_set_powers(acb_ptr xs, const acb_t x, slong len, slong prec) + void _acb_vec_unit_roots(acb_ptr z, slong order, slong len, slong prec) + void _acb_vec_add_error_arf_vec(acb_ptr res, arf_srcptr err, slong len) + void _acb_vec_add_error_mag_vec(acb_ptr res, mag_srcptr err, slong len) + void _acb_vec_indeterminate(acb_ptr vec, slong len) + void _acb_vec_trim(acb_ptr res, acb_srcptr vec, slong len) + int _acb_vec_get_unique_fmpz_vec(fmpz_struct * res, acb_srcptr vec, slong len) + void _acb_vec_sort_pretty(acb_ptr vec, slong len) diff --git a/src/flint/flintlib/acb_calc.pxd b/src/flint/flintlib/acb_calc.pxd index 18dd8fee..5e2ecda3 100644 --- a/src/flint/flintlib/acb_calc.pxd +++ b/src/flint/flintlib/acb_calc.pxd @@ -1,5 +1,8 @@ from flint.flintlib.acb cimport acb_t, acb_ptr from flint.flintlib.mag cimport mag_t +from flint.flintlib.flint cimport slong +from flint.flintlib.arb cimport arb_t +from flint.flintlib.arf cimport arf_t cdef extern from "acb_calc.h": ctypedef int (*acb_calc_func_t)(acb_ptr out, const acb_t inp, void * param, long order, long prec) @@ -13,10 +16,10 @@ cdef extern from "acb_calc.h": ctypedef acb_calc_integrate_opt_struct acb_calc_integrate_opt_t[1] +# from /Users/davideinstein/projects/arb/doc/source/acb_calc.rst + int acb_calc_integrate(acb_t res, acb_calc_func_t func, void * param, const acb_t a, const acb_t b, slong rel_goal, const mag_t abs_tol, const acb_calc_integrate_opt_t options, slong prec) void acb_calc_integrate_opt_init(acb_calc_integrate_opt_t options) + int acb_calc_integrate_gl_auto_deg(acb_t res, slong * num_eval, acb_calc_func_t func, void * param, const acb_t a, const acb_t b, const mag_t tol, slong deg_limit, int flags, slong prec) + void acb_calc_cauchy_bound(arb_t bound, acb_calc_func_t func, void * param, const acb_t x, const arb_t radius, slong maxdepth, slong prec) + int acb_calc_integrate_taylor(acb_t res, acb_calc_func_t func, void * param, const acb_t a, const acb_t b, const arf_t inner_radius, const arf_t outer_radius, slong accuracy_goal, slong prec) - int acb_calc_integrate(acb_t res, acb_calc_func_t f, void * param, - const acb_t a, const acb_t b, - long goal, const mag_t tol, - const acb_calc_integrate_opt_t options, - long prec) diff --git a/src/flint/flintlib/acb_dirichlet.pxd b/src/flint/flintlib/acb_dirichlet.pxd index f6196ceb..ff380e29 100644 --- a/src/flint/flintlib/acb_dirichlet.pxd +++ b/src/flint/flintlib/acb_dirichlet.pxd @@ -1,24 +1,133 @@ from flint.flintlib.acb cimport acb_t, acb_ptr from flint.flintlib.dirichlet cimport dirichlet_group_t, dirichlet_char_t -from flint.flintlib.flint cimport ulong +from flint.flintlib.flint cimport ulong, slong from flint.flintlib.acb_poly cimport acb_poly_t from flint.flintlib.fmpz cimport fmpz_t -from flint.flintlib.arb cimport arb_t - +from flint.flintlib.arb cimport arb_t, arb_ptr +from flint.flintlib.mag cimport mag_t, mag_struct +from flint.flintlib.acb cimport acb_struct, acb_srcptr +from flint.flintlib.fmpq cimport fmpq_t +from flint.flintlib.arf cimport arf_t +from flint.flintlib.arb cimport arb_srcptr cdef extern from "acb_dirichlet.h": - void acb_dirichlet_eta(acb_t res, const acb_t s, long prec) - void acb_dirichlet_chi(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, ulong n, long prec) + ctypedef struct acb_dirichlet_roots_struct: + ulong order + ulong reduced_order + acb_t z + slong size + slong depth + acb_ptr Z + int use_pow + + ctypedef acb_dirichlet_roots_struct acb_dirichlet_roots_t[1] + + ctypedef struct acb_dirichlet_hurwitz_precomp_struct: + acb_struct s + mag_struct err + acb_ptr coeffs + int deflate + slong A + slong N + slong K - void acb_dirichlet_l(acb_t res, const acb_t s, const dirichlet_group_t G, const dirichlet_char_t chi, long prec) - void acb_dirichlet_hardy_z(acb_ptr res, const acb_t t, const dirichlet_group_t G, const dirichlet_char_t chi, long len, long prec) - void acb_dirichlet_l_series(acb_poly_t res, const acb_poly_t s, const dirichlet_group_t G, const dirichlet_char_t chi, int deflate, long len, long prec) + ctypedef acb_dirichlet_hurwitz_precomp_struct acb_dirichlet_hurwitz_precomp_t[1] - void acb_dirichlet_stieltjes(acb_t res, const fmpz_t n, const acb_t a, long prec) - void acb_dirichlet_gram_point(arb_t res, const fmpz_t n, const dirichlet_group_t G, const dirichlet_char_t chi, long prec) - void acb_dirichlet_zeta_zeros(acb_ptr res, const fmpz_t n, long len, long prec) - void acb_dirichlet_zeta_nzeros(arb_t res, const arb_t t, long prec) - void acb_dirichlet_backlund_s(arb_t res, const arb_t t, long prec) - void acb_dirichlet_zeta_zero(acb_t res, const fmpz_t n, long prec) - void acb_dirichlet_zeta_zeros(acb_ptr res, const fmpz_t n, long len, long prec) +# from here on is parsed + void acb_dirichlet_roots_init(acb_dirichlet_roots_t roots, ulong n, slong num, slong prec) + void acb_dirichlet_roots_clear(acb_dirichlet_roots_t roots) + void acb_dirichlet_root(acb_t res, const acb_dirichlet_roots_t roots, ulong k, slong prec) + void acb_dirichlet_powsum_term(acb_ptr res, arb_t log_prev, ulong * prev, const acb_t s, ulong k, int integer, int critical_line, slong len, slong prec) + void acb_dirichlet_powsum_sieved(acb_ptr res, const acb_t s, ulong n, slong len, slong prec) + void acb_dirichlet_powsum_smooth(acb_ptr res, const acb_t s, ulong n, slong len, slong prec) + void acb_dirichlet_zeta(acb_t res, const acb_t s, slong prec) + void acb_dirichlet_zeta_jet(acb_t res, const acb_t s, int deflate, slong len, slong prec) + void acb_dirichlet_zeta_bound(mag_t res, const acb_t s) + void acb_dirichlet_zeta_deriv_bound(mag_t der1, mag_t der2, const acb_t s) + void acb_dirichlet_eta(acb_t res, const acb_t s, slong prec) + void acb_dirichlet_xi(acb_t res, const acb_t s, slong prec) + void acb_dirichlet_zeta_rs_f_coeffs(acb_ptr f, const arb_t p, slong n, slong prec) + void acb_dirichlet_zeta_rs_d_coeffs(arb_ptr d, const arb_t sigma, slong k, slong prec) + void acb_dirichlet_zeta_rs_bound(mag_t err, const acb_t s, slong K) + void acb_dirichlet_zeta_rs_r(acb_t res, const acb_t s, slong K, slong prec) + void acb_dirichlet_zeta_rs(acb_t res, const acb_t s, slong K, slong prec) + void acb_dirichlet_zeta_jet_rs(acb_t res, const acb_t s, slong len, slong prec) + void acb_dirichlet_hurwitz(acb_t res, const acb_t s, const acb_t a, slong prec) + void acb_dirichlet_hurwitz_precomp_init(acb_dirichlet_hurwitz_precomp_t pre, const acb_t s, int deflate, ulong A, ulong K, ulong N, slong prec) + void acb_dirichlet_hurwitz_precomp_init_num(acb_dirichlet_hurwitz_precomp_t pre, const acb_t s, int deflate, double num_eval, slong prec) + void acb_dirichlet_hurwitz_precomp_clear(acb_dirichlet_hurwitz_precomp_t pre) + void acb_dirichlet_hurwitz_precomp_choose_param(ulong * A, ulong * K, ulong * N, const acb_t s, double num_eval, slong prec) + void acb_dirichlet_hurwitz_precomp_bound(mag_t res, const acb_t s, ulong A, ulong K, ulong N) + void acb_dirichlet_hurwitz_precomp_eval(acb_t res, const acb_dirichlet_hurwitz_precomp_t pre, ulong p, ulong q, slong prec) + void acb_dirichlet_lerch_phi_integral(acb_t res, const acb_t z, const acb_t s, const acb_t a, slong prec) + void acb_dirichlet_lerch_phi_direct(acb_t res, const acb_t z, const acb_t s, const acb_t a, slong prec) + void acb_dirichlet_lerch_phi(acb_t res, const acb_t z, const acb_t s, const acb_t a, slong prec) + void acb_dirichlet_stieltjes(acb_t res, const fmpz_t n, const acb_t a, slong prec) + void acb_dirichlet_chi(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, ulong n, slong prec) + void acb_dirichlet_chi_vec(acb_ptr v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv, slong prec) + void acb_dirichlet_pairing(acb_t res, const dirichlet_group_t G, ulong m, ulong n, slong prec) + void acb_dirichlet_pairing_char(acb_t res, const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b, slong prec) + void acb_dirichlet_gauss_sum_naive(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_gauss_sum_factor(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_gauss_sum_order2(acb_t res, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_gauss_sum_theta(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_gauss_sum(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_gauss_sum_ui(acb_t res, const dirichlet_group_t G, ulong a, slong prec) + void acb_dirichlet_jacobi_sum_naive(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2, slong prec) + void acb_dirichlet_jacobi_sum_factor(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2, slong prec) + void acb_dirichlet_jacobi_sum_gauss(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2, slong prec) + void acb_dirichlet_jacobi_sum(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2, slong prec) + void acb_dirichlet_jacobi_sum_ui(acb_t res, const dirichlet_group_t G, ulong a, ulong b, slong prec) + void acb_dirichlet_chi_theta_arb(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, const arb_t t, slong prec) + void acb_dirichlet_ui_theta_arb(acb_t res, const dirichlet_group_t G, ulong a, const arb_t t, slong prec) + ulong acb_dirichlet_theta_length(ulong q, const arb_t t, slong prec) + void acb_dirichlet_qseries_powers_naive(acb_t res, const arb_t x, int p, const ulong * a, const acb_dirichlet_roots_t z, slong len, slong prec) + void acb_dirichlet_qseries_powers_smallorder(acb_t res, const arb_t x, int p, const ulong * a, const acb_dirichlet_roots_t z, slong len, slong prec) + void acb_dirichlet_dft_conrey(acb_ptr w, acb_srcptr v, const dirichlet_group_t G, slong prec) + void acb_dirichlet_dft(acb_ptr w, acb_srcptr v, const dirichlet_group_t G, slong prec) + void acb_dirichlet_root_number_theta(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_root_number(acb_t res, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_l_hurwitz(acb_t res, const acb_t s, const acb_dirichlet_hurwitz_precomp_t precomp, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_l_euler_product(acb_t res, const acb_t s, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void _acb_dirichlet_euler_product_real_ui(arb_t res, ulong s, const signed char * chi, int mod, int reciprocal, slong prec) + void acb_dirichlet_l(acb_t res, const acb_t s, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_l_fmpq(acb_t res, const fmpq_t s, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_l_fmpq_afe(acb_t res, const fmpq_t s, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + void acb_dirichlet_l_vec_hurwitz(acb_ptr res, const acb_t s, const acb_dirichlet_hurwitz_precomp_t precomp, const dirichlet_group_t G, slong prec) + void acb_dirichlet_l_jet(acb_ptr res, const acb_t s, const dirichlet_group_t G, const dirichlet_char_t chi, int deflate, slong len, slong prec) + void _acb_dirichlet_l_series(acb_ptr res, acb_srcptr s, slong slen, const dirichlet_group_t G, const dirichlet_char_t chi, int deflate, slong len, slong prec) + void acb_dirichlet_l_series(acb_poly_t res, const acb_poly_t s, const dirichlet_group_t G, const dirichlet_char_t chi, int deflate, slong len, slong prec) + void acb_dirichlet_hardy_theta(acb_ptr res, const acb_t t, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void acb_dirichlet_hardy_z(acb_t res, const acb_t t, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void _acb_dirichlet_hardy_theta_series(acb_ptr res, acb_srcptr t, slong tlen, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void acb_dirichlet_hardy_theta_series(acb_poly_t res, const acb_poly_t t, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void _acb_dirichlet_hardy_z_series(acb_ptr res, acb_srcptr t, slong tlen, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void acb_dirichlet_hardy_z_series(acb_poly_t res, const acb_poly_t t, const dirichlet_group_t G, const dirichlet_char_t chi, slong len, slong prec) + void acb_dirichlet_gram_point(arb_t res, const fmpz_t n, const dirichlet_group_t G, const dirichlet_char_t chi, slong prec) + ulong acb_dirichlet_turing_method_bound(const fmpz_t p) + int _acb_dirichlet_definite_hardy_z(arb_t res, const arf_t t, slong * pprec) + void _acb_dirichlet_isolate_gram_hardy_z_zero(arf_t a, arf_t b, const fmpz_t n) + void _acb_dirichlet_isolate_rosser_hardy_z_zero(arf_t a, arf_t b, const fmpz_t n) + void _acb_dirichlet_isolate_turing_hardy_z_zero(arf_t a, arf_t b, const fmpz_t n) + void acb_dirichlet_isolate_hardy_z_zero(arf_t a, arf_t b, const fmpz_t n) + void _acb_dirichlet_refine_hardy_z_zero(arb_t res, const arf_t a, const arf_t b, slong prec) + void acb_dirichlet_hardy_z_zero(arb_t res, const fmpz_t n, slong prec) + void acb_dirichlet_hardy_z_zeros(arb_ptr res, const fmpz_t n, slong len, slong prec) + void acb_dirichlet_zeta_zero(acb_t res, const fmpz_t n, slong prec) + void acb_dirichlet_zeta_zeros(acb_ptr res, const fmpz_t n, slong len, slong prec) + void _acb_dirichlet_exact_zeta_nzeros(fmpz_t res, const arf_t t) + void acb_dirichlet_zeta_nzeros(arb_t res, const arb_t t, slong prec) + void acb_dirichlet_backlund_s(arb_t res, const arb_t t, slong prec) + void acb_dirichlet_backlund_s_bound(mag_t res, const arb_t t) + void acb_dirichlet_zeta_nzeros_gram(fmpz_t res, const fmpz_t n) + slong acb_dirichlet_backlund_s_gram(const fmpz_t n) + void acb_dirichlet_platt_scaled_lambda(arb_t res, const arb_t t, slong prec) + void acb_dirichlet_platt_scaled_lambda_vec(arb_ptr res, const fmpz_t T, slong A, slong B, slong prec) + void acb_dirichlet_platt_multieval(arb_ptr res, const fmpz_t T, slong A, slong B, const arb_t h, const fmpz_t J, slong K, slong sigma, slong prec) + void acb_dirichlet_platt_multieval_threaded(arb_ptr res, const fmpz_t T, slong A, slong B, const arb_t h, const fmpz_t J, slong K, slong sigma, slong prec) + void acb_dirichlet_platt_ws_interpolation(arb_t res, arf_t deriv, const arb_t t0, arb_srcptr p, const fmpz_t T, slong A, slong B, slong Ns_max, const arb_t H, slong sigma, slong prec) + slong _acb_dirichlet_platt_local_hardy_z_zeros(arb_ptr res, const fmpz_t n, slong len, const fmpz_t T, slong A, slong B, const arb_t h, const fmpz_t J, slong K, slong sigma_grid, slong Ns_max, const arb_t H, slong sigma_interp, slong prec) + slong acb_dirichlet_platt_local_hardy_z_zeros(arb_ptr res, const fmpz_t n, slong len, slong prec) + slong acb_dirichlet_platt_hardy_z_zeros(arb_ptr res, const fmpz_t n, slong len, slong prec) + slong acb_dirichlet_platt_zeta_zeros(acb_ptr res, const fmpz_t n, slong len, slong prec) diff --git a/src/flint/flintlib/acb_elliptic.pxd b/src/flint/flintlib/acb_elliptic.pxd index d5f906dd..e0d99991 100644 --- a/src/flint/flintlib/acb_elliptic.pxd +++ b/src/flint/flintlib/acb_elliptic.pxd @@ -1,16 +1,31 @@ -from flint.flintlib.acb cimport acb_t +from flint.flintlib.acb cimport acb_t, acb_ptr, acb_srcptr +from flint.flintlib.acb_poly cimport acb_poly_t +from flint.flintlib.flint cimport slong cdef extern from "acb_elliptic.h": - void acb_elliptic_rf(acb_t res, const acb_t x, const acb_t y, const acb_t z, int flags, long prec) - void acb_elliptic_rj(acb_t res, const acb_t x, const acb_t y, const acb_t z, const acb_t p, int flags, long prec) - void acb_elliptic_rg(acb_t res, const acb_t x, const acb_t y, const acb_t z, int flags, long prec) - void acb_elliptic_f(acb_t res, const acb_t phi, const acb_t m, int times_pi, long prec) - void acb_elliptic_e_inc(acb_t res, const acb_t phi, const acb_t m, int times_pi, long prec) - void acb_elliptic_pi(acb_t res, const acb_t n, const acb_t m, long prec) - void acb_elliptic_pi_inc(acb_t res, const acb_t n, const acb_t phi, const acb_t m, int times_pi, long prec) - void acb_elliptic_p(acb_t res, const acb_t z, const acb_t tau, long prec) - void acb_elliptic_zeta(acb_t res, const acb_t z, const acb_t tau, long prec) - void acb_elliptic_sigma(acb_t res, const acb_t z, const acb_t tau, long prec) - void acb_elliptic_roots(acb_t e1, acb_t e2, acb_t e3, const acb_t tau, long prec) - void acb_elliptic_invariants(acb_t g2, acb_t g3, const acb_t tau, long prec) - void acb_elliptic_inv_p(acb_t res, const acb_t z, const acb_t tau, long prec) +# from here on is parsed + void acb_elliptic_k(acb_t res, const acb_t m, slong prec) + void acb_elliptic_k_jet(acb_ptr res, const acb_t m, slong len, slong prec) + void _acb_elliptic_k_series(acb_ptr res, acb_srcptr m, slong mlen, slong len, slong prec) + void acb_elliptic_k_series(acb_poly_t res, const acb_poly_t m, slong len, slong prec) + void acb_elliptic_e(acb_t res, const acb_t m, slong prec) + void acb_elliptic_pi(acb_t res, const acb_t n, const acb_t m, slong prec) + void acb_elliptic_f(acb_t res, const acb_t phi, const acb_t m, int pi, slong prec) + void acb_elliptic_e_inc(acb_t res, const acb_t phi, const acb_t m, int pi, slong prec) + void acb_elliptic_pi_inc(acb_t res, const acb_t n, const acb_t phi, const acb_t m, int pi, slong prec) + void acb_elliptic_rf(acb_t res, const acb_t x, const acb_t y, const acb_t z, int flags, slong prec) + void acb_elliptic_rg(acb_t res, const acb_t x, const acb_t y, const acb_t z, int flags, slong prec) + void acb_elliptic_rj(acb_t res, const acb_t x, const acb_t y, const acb_t z, const acb_t p, int flags, slong prec) + void acb_elliptic_rj_carlson(acb_t res, const acb_t x, const acb_t y, const acb_t z, const acb_t p, int flags, slong prec) + void acb_elliptic_rj_integration(acb_t res, const acb_t x, const acb_t y, const acb_t z, const acb_t p, int flags, slong prec) + void acb_elliptic_rc1(acb_t res, const acb_t x, slong prec) + void acb_elliptic_p(acb_t res, const acb_t z, const acb_t tau, slong prec) + void acb_elliptic_p_prime(acb_t res, const acb_t z, const acb_t tau, slong prec) + void acb_elliptic_p_jet(acb_ptr res, const acb_t z, const acb_t tau, slong len, slong prec) + void _acb_elliptic_p_series(acb_ptr res, acb_srcptr z, slong zlen, const acb_t tau, slong len, slong prec) + void acb_elliptic_p_series(acb_poly_t res, const acb_poly_t z, const acb_t tau, slong len, slong prec) + void acb_elliptic_invariants(acb_t g2, acb_t g3, const acb_t tau, slong prec) + void acb_elliptic_roots(acb_t e1, acb_t e2, acb_t e3, const acb_t tau, slong prec) + void acb_elliptic_inv_p(acb_t res, const acb_t z, const acb_t tau, slong prec) + void acb_elliptic_zeta(acb_t res, const acb_t z, const acb_t tau, slong prec) + void acb_elliptic_sigma(acb_t res, const acb_t z, const acb_t tau, slong prec) diff --git a/src/flint/flintlib/acb_hypgeom.pxd b/src/flint/flintlib/acb_hypgeom.pxd index 2e46ed57..8c40671e 100644 --- a/src/flint/flintlib/acb_hypgeom.pxd +++ b/src/flint/flintlib/acb_hypgeom.pxd @@ -1,81 +1,160 @@ from flint.flintlib.acb cimport acb_t, acb_srcptr, acb_ptr from flint.flintlib.acb_poly cimport acb_poly_t, acb_poly_struct from flint.flintlib.mag cimport mag_t +from flint.flintlib.flint cimport ulong, slong cdef extern from "acb_hypgeom.h": - void acb_hypgeom_bessel_j(acb_t res, const acb_t nu, const acb_t z, long prec) - void acb_hypgeom_bessel_k(acb_t res, const acb_t nu, const acb_t z, long prec) - void acb_hypgeom_bessel_i(acb_t res, const acb_t nu, const acb_t z, long prec) - void acb_hypgeom_bessel_y(acb_t res, const acb_t nu, const acb_t z, long prec) - - void acb_hypgeom_bessel_k_scaled(acb_t res, const acb_t nu, const acb_t z, long prec) - void acb_hypgeom_bessel_i_scaled(acb_t res, const acb_t nu, const acb_t z, long prec) - - void acb_hypgeom_erf(acb_t res, const acb_t z, long prec) - void acb_hypgeom_pfq_direct(acb_t res, acb_srcptr a, long p, acb_srcptr b, long q, const acb_t z, long n, long prec) - void acb_hypgeom_u_asymp(acb_t res, const acb_t a, const acb_t b, const acb_t z, long n, long prec) - void acb_hypgeom_u(acb_t res, const acb_t a, const acb_t b, const acb_t z, long prec) - void acb_hypgeom_m(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, long prec) - void acb_hypgeom_1f1(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, long prec) - - long acb_hypgeom_pfq_choose_n(acb_srcptr a, long p, acb_srcptr b, long q, const acb_t z, long prec) - void acb_hypgeom_pfq(acb_t res, acb_srcptr a, long p, acb_srcptr b, long q, const acb_t z, int regularized, long prec) - void acb_hypgeom_gamma_upper(acb_t res, const acb_t s, const acb_t z, int modified, long prec) - void acb_hypgeom_gamma_upper_asymp(acb_t res, const acb_t s, const acb_t z, int modified, long prec) - void acb_hypgeom_expint(acb_t res, const acb_t s, const acb_t z, long prec) - void acb_hypgeom_gamma_lower(acb_t res, const acb_t s, const acb_t z, int modified, long prec) - void acb_hypgeom_beta_lower(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, long prec) - void acb_hypgeom_erfc(acb_t res, const acb_t z, long prec) - void acb_hypgeom_erfi(acb_t res, const acb_t z, long prec) - void acb_hypgeom_pfq_series_direct(acb_poly_t res, const acb_poly_struct * a, long p, const acb_poly_struct * b, long q, const acb_poly_t z, int regularized, long n, long len, long prec) - void acb_hypgeom_ei(acb_t res, const acb_t z, long prec) - void acb_hypgeom_si(acb_t res, const acb_t z, long prec) - void acb_hypgeom_ci(acb_t res, const acb_t z, long prec) - void acb_hypgeom_shi(acb_t res, const acb_t z, long prec) - void acb_hypgeom_chi(acb_t res, const acb_t z, long prec) - void acb_hypgeom_li(acb_t res, const acb_t z, int offset, long prec) - void acb_hypgeom_2f1(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int regularized, long prec) - void acb_hypgeom_0f1(acb_t res, const acb_t a, const acb_t z, int regularized, long prec) - void acb_hypgeom_legendre_p(acb_t res, const acb_t n, const acb_t m, const acb_t z, int type, long prec) - void acb_hypgeom_legendre_q(acb_t res, const acb_t n, const acb_t m, const acb_t z, int type, long prec) - void acb_hypgeom_spherical_y(acb_t res, long n, long m, const acb_t theta, const acb_t phi, long prec) - void acb_hypgeom_jacobi_p(acb_t res, const acb_t n, const acb_t a, const acb_t b, const acb_t z, long prec) - void acb_hypgeom_gegenbauer_c(acb_t res, const acb_t n, const acb_t m, const acb_t z, long prec) - void acb_hypgeom_laguerre_l(acb_t res, const acb_t n, const acb_t m, const acb_t z, long prec) - void acb_hypgeom_hermite_h(acb_t res, const acb_t n, const acb_t z, long prec) - void acb_hypgeom_chebyshev_t(acb_t res, const acb_t n, const acb_t z, long prec) - void acb_hypgeom_chebyshev_u(acb_t res, const acb_t n, const acb_t z, long prec) - - void acb_hypgeom_airy_bound(mag_t ai, mag_t aip, mag_t bi, mag_t bip, const acb_t z) - void acb_hypgeom_airy_asymp(acb_t ai, acb_t aip, acb_t bi, acb_t bip, const acb_t z, long n, long prec) - void acb_hypgeom_airy_direct(acb_t ai, acb_t aip, acb_t bi, acb_t bip, const acb_t z, long n, long prec) - void acb_hypgeom_airy(acb_t ai, acb_t aip, acb_t bi, acb_t bip, const acb_t z, long prec) - void acb_hypgeom_airy_jet(acb_ptr ai, acb_ptr bi, const acb_t z, long len, long prec) - void _acb_hypgeom_airy_series(acb_ptr ai, acb_ptr ai_prime, acb_ptr bi, acb_ptr bi_prime, acb_srcptr z, long zlen, long len, long prec) - void acb_hypgeom_airy_series(acb_poly_t ai, acb_poly_t ai_prime, acb_poly_t bi, acb_poly_t bi_prime, const acb_poly_t z, long len, long prec) - - void acb_hypgeom_coulomb(acb_t F, acb_t G, acb_t Hpos, acb_t Hneg, const acb_t l, const acb_t eta, const acb_t z, long prec) - void acb_hypgeom_coulomb_series(acb_poly_t F, acb_poly_t G, acb_poly_t Hpos, acb_poly_t Hneg, const acb_t l, const acb_t eta, const acb_poly_t z, long len, long prec) - - void acb_hypgeom_erf_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_erfc_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_erfi_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - - void acb_hypgeom_fresnel(acb_t res1, acb_t res2, const acb_t z, int normalized, long prec) - void acb_hypgeom_fresnel_series(acb_poly_t res1, acb_poly_t res2, const acb_poly_t h, int normalized, long n, long prec) - - void _acb_hypgeom_gamma_upper_series(acb_ptr g, const acb_t s, acb_srcptr h, long hlen, int regularized, long n, long prec) - void acb_hypgeom_gamma_upper_series(acb_poly_t g, const acb_t s, const acb_poly_t h, int regularized, long n, long prec) - - void _acb_hypgeom_gamma_lower_series(acb_ptr g, const acb_t s, acb_srcptr h, long hlen, int regularized, long n, long prec) - void acb_hypgeom_gamma_lower_series(acb_poly_t g, const acb_t s, const acb_poly_t h, int regularized, long n, long prec) - - void _acb_hypgeom_beta_lower_series(acb_ptr g, const acb_t s, const acb_t t, acb_srcptr h, long hlen, int regularized, long n, long prec) - void acb_hypgeom_beta_lower_series(acb_poly_t g, const acb_t s, const acb_t t, const acb_poly_t h, int regularized, long n, long prec) - - void acb_hypgeom_ei_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_si_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_ci_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_shi_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_chi_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - void acb_hypgeom_li_series(acb_poly_t res, const acb_poly_t h, int offset, long n, long prec) +# from here on is parsed + void acb_hypgeom_rising_ui_forward(acb_t res, const acb_t x, ulong n, slong prec) + void acb_hypgeom_rising_ui_bs(acb_t res, const acb_t x, ulong n, slong prec) + void acb_hypgeom_rising_ui_rs(acb_t res, const acb_t x, ulong n, ulong m, slong prec) + void acb_hypgeom_rising_ui_rec(acb_t res, const acb_t x, ulong n, slong prec) + void acb_hypgeom_rising_ui(acb_t res, const acb_t x, ulong n, slong prec) + void acb_hypgeom_rising(acb_t res, const acb_t x, const acb_t n, slong prec) + void acb_hypgeom_rising_ui_jet_powsum(acb_ptr res, const acb_t x, ulong n, slong len, slong prec) + void acb_hypgeom_rising_ui_jet_bs(acb_ptr res, const acb_t x, ulong n, slong len, slong prec) + void acb_hypgeom_rising_ui_jet_rs(acb_ptr res, const acb_t x, ulong n, ulong m, slong len, slong prec) + void acb_hypgeom_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec) + void acb_hypgeom_log_rising_ui(acb_ptr res, const acb_t x, ulong n, slong prec) + void acb_hypgeom_log_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec) + void acb_hypgeom_gamma_stirling_sum_horner(acb_t s, const acb_t z, slong N, slong prec) + void acb_hypgeom_gamma_stirling_sum_improved(acb_t s, const acb_t z, slong N, slong K, slong prec) + void acb_hypgeom_gamma_stirling(acb_t res, const acb_t x, int reciprocal, slong prec) + int acb_hypgeom_gamma_taylor(acb_t res, const acb_t x, int reciprocal, slong prec) + void acb_hypgeom_gamma(acb_t res, const acb_t x, slong prec) + void acb_hypgeom_rgamma(acb_t res, const acb_t x, slong prec) + void acb_hypgeom_lgamma(acb_t res, const acb_t x, slong prec) + void acb_hypgeom_pfq_bound_factor(mag_t C, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, ulong n) + slong acb_hypgeom_pfq_choose_n(acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong prec) + void acb_hypgeom_pfq_sum_forward(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_sum_rs(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_sum_bs(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_sum_fme(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_sum(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_sum_bs_invz(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t w, slong n, slong prec) + void acb_hypgeom_pfq_sum_invz(acb_t s, acb_t t, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, const acb_t w, slong n, slong prec) + void acb_hypgeom_pfq_direct(acb_t res, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, slong n, slong prec) + void acb_hypgeom_pfq_series_sum_forward(acb_poly_t s, acb_poly_t t, const acb_poly_struct * a, slong p, const acb_poly_struct * b, slong q, const acb_poly_t z, int regularized, slong n, slong len, slong prec) + void acb_hypgeom_pfq_series_sum_bs(acb_poly_t s, acb_poly_t t, const acb_poly_struct * a, slong p, const acb_poly_struct * b, slong q, const acb_poly_t z, int regularized, slong n, slong len, slong prec) + void acb_hypgeom_pfq_series_sum_rs(acb_poly_t s, acb_poly_t t, const acb_poly_struct * a, slong p, const acb_poly_struct * b, slong q, const acb_poly_t z, int regularized, slong n, slong len, slong prec) + void acb_hypgeom_pfq_series_sum(acb_poly_t s, acb_poly_t t, const acb_poly_struct * a, slong p, const acb_poly_struct * b, slong q, const acb_poly_t z, int regularized, slong n, slong len, slong prec) + void acb_hypgeom_pfq_series_direct(acb_poly_t res, const acb_poly_struct * a, slong p, const acb_poly_struct * b, slong q, const acb_poly_t z, int regularized, slong n, slong len, slong prec) + void acb_hypgeom_u_asymp(acb_t res, const acb_t a, const acb_t b, const acb_t z, slong n, slong prec) + int acb_hypgeom_u_use_asymp(const acb_t z, slong prec) + void acb_hypgeom_pfq(acb_t res, acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, int regularized, slong prec) + void acb_hypgeom_u_1f1_series(acb_poly_t res, const acb_poly_t a, const acb_poly_t b, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_u_1f1(acb_t res, const acb_t a, const acb_t b, const acb_t z, slong prec) + void acb_hypgeom_u(acb_t res, const acb_t a, const acb_t b, const acb_t z, slong prec) + void acb_hypgeom_m_asymp(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, slong prec) + void acb_hypgeom_m_1f1(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, slong prec) + void acb_hypgeom_m(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, slong prec) + void acb_hypgeom_1f1(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, slong prec) + void acb_hypgeom_0f1_asymp(acb_t res, const acb_t a, const acb_t z, int regularized, slong prec) + void acb_hypgeom_0f1_direct(acb_t res, const acb_t a, const acb_t z, int regularized, slong prec) + void acb_hypgeom_0f1(acb_t res, const acb_t a, const acb_t z, int regularized, slong prec) + void acb_hypgeom_erf_propagated_error(mag_t re, mag_t im, const acb_t z) + void acb_hypgeom_erf_1f1a(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_erf_1f1b(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_erf_asymp(acb_t res, const acb_t z, int complementary, slong prec, slong prec2) + void acb_hypgeom_erf(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_erf_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_erf_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_erfc(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_erfc_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_erfc_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_erfi(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_erfi_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_erfi_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_fresnel(acb_t res1, acb_t res2, const acb_t z, int normalized, slong prec) + void _acb_hypgeom_fresnel_series(acb_ptr res1, acb_ptr res2, acb_srcptr z, slong zlen, int normalized, slong len, slong prec) + void acb_hypgeom_fresnel_series(acb_poly_t res1, acb_poly_t res2, const acb_poly_t z, int normalized, slong len, slong prec) + void acb_hypgeom_bessel_j_asymp(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_j_0f1(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_j(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_y(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_jy(acb_t res1, acb_t res2, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_i_asymp(acb_t res, const acb_t nu, const acb_t z, int scaled, slong prec) + void acb_hypgeom_bessel_i_0f1(acb_t res, const acb_t nu, const acb_t z, int scaled, slong prec) + void acb_hypgeom_bessel_i(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_i_scaled(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_k_asymp(acb_t res, const acb_t nu, const acb_t z, int scaled, slong prec) + void acb_hypgeom_bessel_k_0f1_series(acb_poly_t res, const acb_poly_t nu, const acb_poly_t z, int scaled, slong len, slong prec) + void acb_hypgeom_bessel_k_0f1(acb_t res, const acb_t nu, const acb_t z, int scaled, slong prec) + void acb_hypgeom_bessel_k(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_bessel_k_scaled(acb_t res, const acb_t nu, const acb_t z, slong prec) + void acb_hypgeom_airy_direct(acb_t ai, acb_t ai_prime, acb_t bi, acb_t bi_prime, const acb_t z, slong n, slong prec) + void acb_hypgeom_airy_asymp(acb_t ai, acb_t ai_prime, acb_t bi, acb_t bi_prime, const acb_t z, slong n, slong prec) + void acb_hypgeom_airy_bound(mag_t ai, mag_t ai_prime, mag_t bi, mag_t bi_prime, const acb_t z) + void acb_hypgeom_airy(acb_t ai, acb_t ai_prime, acb_t bi, acb_t bi_prime, const acb_t z, slong prec) + void acb_hypgeom_airy_jet(acb_ptr ai, acb_ptr bi, const acb_t z, slong len, slong prec) + void _acb_hypgeom_airy_series(acb_ptr ai, acb_ptr ai_prime, acb_ptr bi, acb_ptr bi_prime, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_airy_series(acb_poly_t ai, acb_poly_t ai_prime, acb_poly_t bi, acb_poly_t bi_prime, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_coulomb(acb_t F, acb_t G, acb_t Hpos, acb_t Hneg, const acb_t l, const acb_t eta, const acb_t z, slong prec) + void acb_hypgeom_coulomb_jet(acb_ptr F, acb_ptr G, acb_ptr Hpos, acb_ptr Hneg, const acb_t l, const acb_t eta, const acb_t z, slong len, slong prec) + void _acb_hypgeom_coulomb_series(acb_ptr F, acb_ptr G, acb_ptr Hpos, acb_ptr Hneg, const acb_t l, const acb_t eta, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_coulomb_series(acb_poly_t F, acb_poly_t G, acb_poly_t Hpos, acb_poly_t Hneg, const acb_t l, const acb_t eta, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_gamma_upper_asymp(acb_t res, const acb_t s, const acb_t z, int regularized, slong prec) + void acb_hypgeom_gamma_upper_1f1a(acb_t res, const acb_t s, const acb_t z, int regularized, slong prec) + void acb_hypgeom_gamma_upper_1f1b(acb_t res, const acb_t s, const acb_t z, int regularized, slong prec) + void acb_hypgeom_gamma_upper_singular(acb_t res, slong s, const acb_t z, int regularized, slong prec) + void acb_hypgeom_gamma_upper(acb_t res, const acb_t s, const acb_t z, int regularized, slong prec) + void _acb_hypgeom_gamma_upper_series(acb_ptr res, const acb_t s, acb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void acb_hypgeom_gamma_upper_series(acb_poly_t res, const acb_t s, const acb_poly_t z, int regularized, slong n, slong prec) + void acb_hypgeom_gamma_lower(acb_t res, const acb_t s, const acb_t z, int regularized, slong prec) + void _acb_hypgeom_gamma_lower_series(acb_ptr res, const acb_t s, acb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void acb_hypgeom_gamma_lower_series(acb_poly_t res, const acb_t s, const acb_poly_t z, int regularized, slong n, slong prec) + void acb_hypgeom_beta_lower(acb_t res, const acb_t a, const acb_t b, const acb_t z, int regularized, slong prec) + void _acb_hypgeom_beta_lower_series(acb_ptr res, const acb_t a, const acb_t b, acb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void acb_hypgeom_beta_lower_series(acb_poly_t res, const acb_t a, const acb_t b, const acb_poly_t z, int regularized, slong n, slong prec) + void acb_hypgeom_expint(acb_t res, const acb_t s, const acb_t z, slong prec) + void acb_hypgeom_ei_asymp(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_ei_2f2(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_ei(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_ei_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_ei_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_si_asymp(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_si_1f2(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_si(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_si_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_si_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_ci_asymp(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_ci_2f3(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_ci(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_ci_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_ci_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_shi(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_shi_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_shi_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_chi_asymp(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_chi_2f3(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_chi(acb_t res, const acb_t z, slong prec) + void _acb_hypgeom_chi_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_hypgeom_chi_series(acb_poly_t res, const acb_poly_t z, slong len, slong prec) + void acb_hypgeom_li(acb_t res, const acb_t z, int offset, slong prec) + void _acb_hypgeom_li_series(acb_ptr res, acb_srcptr z, slong zlen, int offset, slong len, slong prec) + void acb_hypgeom_li_series(acb_poly_t res, const acb_poly_t z, int offset, slong len, slong prec) + void acb_hypgeom_2f1_continuation(acb_t res0, acb_t res1, const acb_t a, const acb_t b, const acb_t c, const acb_t z0, const acb_t z1, const acb_t f0, const acb_t f1, slong prec) + void acb_hypgeom_2f1_series_direct(acb_poly_t res, const acb_poly_t a, const acb_poly_t b, const acb_poly_t c, const acb_poly_t z, int regularized, slong len, slong prec) + void acb_hypgeom_2f1_direct(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int regularized, slong prec) + void acb_hypgeom_2f1_transform(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int flags, int which, slong prec) + void acb_hypgeom_2f1_transform_limit(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int regularized, int which, slong prec) + void acb_hypgeom_2f1_corner(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int regularized, slong prec) + int acb_hypgeom_2f1_choose(const acb_t z) + void acb_hypgeom_2f1(acb_t res, const acb_t a, const acb_t b, const acb_t c, const acb_t z, int flags, slong prec) + void acb_hypgeom_chebyshev_t(acb_t res, const acb_t n, const acb_t z, slong prec) + void acb_hypgeom_chebyshev_u(acb_t res, const acb_t n, const acb_t z, slong prec) + void acb_hypgeom_jacobi_p(acb_t res, const acb_t n, const acb_t a, const acb_t b, const acb_t z, slong prec) + void acb_hypgeom_gegenbauer_c(acb_t res, const acb_t n, const acb_t m, const acb_t z, slong prec) + void acb_hypgeom_laguerre_l(acb_t res, const acb_t n, const acb_t m, const acb_t z, slong prec) + void acb_hypgeom_hermite_h(acb_t res, const acb_t n, const acb_t z, slong prec) + void acb_hypgeom_legendre_p(acb_t res, const acb_t n, const acb_t m, const acb_t z, int type, slong prec) + void acb_hypgeom_legendre_q(acb_t res, const acb_t n, const acb_t m, const acb_t z, int type, slong prec) + void acb_hypgeom_legendre_p_uiui_rec(acb_t res, ulong n, ulong m, const acb_t z, slong prec) + void acb_hypgeom_spherical_y(acb_t res, slong n, slong m, const acb_t theta, const acb_t phi, slong prec) + void acb_hypgeom_dilog_bernoulli(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_dilog_zero_taylor(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_dilog_zero(acb_t res, const acb_t z, slong prec) + void acb_hypgeom_dilog_transform(acb_t res, const acb_t z, int algorithm, slong prec) + void acb_hypgeom_dilog_continuation(acb_t res, const acb_t a, const acb_t z, slong prec) + void acb_hypgeom_dilog_bitburst(acb_t res, acb_t z0, const acb_t z, slong prec) + void acb_hypgeom_dilog(acb_t res, const acb_t z, slong prec) diff --git a/src/flint/flintlib/acb_mat.pxd b/src/flint/flintlib/acb_mat.pxd index 42b703a1..4d99f73b 100644 --- a/src/flint/flintlib/acb_mat.pxd +++ b/src/flint/flintlib/acb_mat.pxd @@ -1,4 +1,4 @@ -from flint.flintlib.flint cimport ulong, flint_rand_t +from flint.flintlib.flint cimport ulong, flint_rand_t, slong from flint.flintlib.fmpz_mat cimport fmpz_mat_t from flint.flintlib.fmpq_mat cimport fmpq_mat_t from flint.flintlib.mag cimport mag_t @@ -6,6 +6,7 @@ from flint.flintlib.fmpz cimport fmpz_t from flint.flintlib.acb_poly cimport acb_poly_t from flint.flintlib.arb cimport arb_t from flint.flintlib.acb cimport acb_ptr, acb_struct, acb_t, acb_srcptr +from flint.flintlib.arb_mat cimport arb_mat_t cdef extern from "acb_mat.h": ctypedef struct acb_mat_struct: @@ -15,83 +16,118 @@ cdef extern from "acb_mat.h": acb_ptr * rows ctypedef acb_mat_struct acb_mat_t[1] - +#macros acb_struct * acb_mat_entry(acb_mat_t mat, long i, long j) long acb_mat_nrows(const acb_mat_t x) long acb_mat_ncols(const acb_mat_t x) - - void acb_mat_init(acb_mat_t mat, long r, long c) +# from here on is parsed + void acb_mat_init(acb_mat_t mat, slong r, slong c) void acb_mat_clear(acb_mat_t mat) - + slong acb_mat_allocated_bytes(const acb_mat_t x) + void acb_mat_window_init(acb_mat_t window, const acb_mat_t mat, slong r1, slong c1, slong r2, slong c2) + void acb_mat_window_clear(acb_mat_t window) void acb_mat_set(acb_mat_t dest, const acb_mat_t src) void acb_mat_set_fmpz_mat(acb_mat_t dest, const fmpz_mat_t src) - void acb_mat_set_fmpq_mat(acb_mat_t dest, const fmpq_mat_t src, long prec) - void acb_mat_printd(const acb_mat_t mat, long digits) + void acb_mat_set_round_fmpz_mat(acb_mat_t dest, const fmpz_mat_t src, slong prec) + void acb_mat_set_fmpq_mat(acb_mat_t dest, const fmpq_mat_t src, slong prec) + void acb_mat_set_arb_mat(acb_mat_t dest, const arb_mat_t src) + void acb_mat_set_round_arb_mat(acb_mat_t dest, const arb_mat_t src, slong prec) + void acb_mat_randtest(acb_mat_t mat, flint_rand_t state, slong prec, slong mag_bits) + void acb_mat_randtest_eig(acb_mat_t mat, flint_rand_t state, acb_srcptr E, slong prec) + void acb_mat_printd(const acb_mat_t mat, slong digits) int acb_mat_equal(const acb_mat_t mat1, const acb_mat_t mat2) int acb_mat_overlaps(const acb_mat_t mat1, const acb_mat_t mat2) int acb_mat_contains(const acb_mat_t mat1, const acb_mat_t mat2) - int acb_mat_contains_fmpq_mat(const acb_mat_t mat1, const fmpq_mat_t mat2) int acb_mat_contains_fmpz_mat(const acb_mat_t mat1, const fmpz_mat_t mat2) - + int acb_mat_contains_fmpq_mat(const acb_mat_t mat1, const fmpq_mat_t mat2) + int acb_mat_eq(const acb_mat_t mat1, const acb_mat_t mat2) + int acb_mat_ne(const acb_mat_t mat1, const acb_mat_t mat2) + int acb_mat_is_real(const acb_mat_t mat) + int acb_mat_is_empty(const acb_mat_t mat) + int acb_mat_is_square(const acb_mat_t mat) + int acb_mat_is_exact(const acb_mat_t mat) + int acb_mat_is_zero(const acb_mat_t mat) + int acb_mat_is_finite(const acb_mat_t mat) + int acb_mat_is_triu(const acb_mat_t mat) + int acb_mat_is_tril(const acb_mat_t mat) + int acb_mat_is_diag(const acb_mat_t mat) void acb_mat_zero(acb_mat_t mat) void acb_mat_one(acb_mat_t mat) - + void acb_mat_ones(acb_mat_t mat) + void acb_mat_indeterminate(acb_mat_t mat) + void acb_mat_dft(acb_mat_t mat, int type, slong prec) + void acb_mat_transpose(acb_mat_t dest, const acb_mat_t src) + void acb_mat_conjugate_transpose(acb_mat_t dest, const acb_mat_t src) + void acb_mat_conjugate(acb_mat_t dest, const acb_mat_t src) void acb_mat_bound_inf_norm(mag_t b, const acb_mat_t A) - + void acb_mat_frobenius_norm(acb_t res, const acb_mat_t A, slong prec) + void acb_mat_bound_frobenius_norm(mag_t res, const acb_mat_t A) void acb_mat_neg(acb_mat_t dest, const acb_mat_t src) - void acb_mat_add(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, long prec) - void acb_mat_sub(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, long prec) - void acb_mat_mul(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, long prec) - void acb_mat_pow_ui(acb_mat_t B, const acb_mat_t A, ulong exp, long prec) - - void acb_mat_scalar_mul_2exp_si(acb_mat_t B, const acb_mat_t A, long c) - void acb_mat_scalar_addmul_si(acb_mat_t B, const acb_mat_t A, long c, long prec) - void acb_mat_scalar_mul_si(acb_mat_t B, const acb_mat_t A, long c, long prec) - void acb_mat_scalar_div_si(acb_mat_t B, const acb_mat_t A, long c, long prec) - void acb_mat_scalar_addmul_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, long prec) - void acb_mat_scalar_mul_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, long prec) - void acb_mat_scalar_div_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, long prec) - void acb_mat_scalar_addmul_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, long prec) - void acb_mat_scalar_mul_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, long prec) - void acb_mat_scalar_div_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, long prec) - - int acb_mat_lu(long * P, acb_mat_t LU, const acb_mat_t A, long prec) - void acb_mat_solve_lu_precomp(acb_mat_t X, const long * perm, const acb_mat_t A, const acb_mat_t B, long prec) - int acb_mat_solve(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, long prec) - int acb_mat_solve_lu(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, long prec) - int acb_mat_solve_precond(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, long prec) - int acb_mat_inv(acb_mat_t X, const acb_mat_t A, long prec) - void acb_mat_det(acb_t det, const acb_mat_t A, long prec) - - void acb_mat_exp(acb_mat_t B, const acb_mat_t A, long prec) - - void _acb_mat_charpoly(acb_ptr cp, const acb_mat_t mat, long prec) - void acb_mat_charpoly(acb_poly_t cp, const acb_mat_t mat, long prec) - - - void acb_mat_conjugate(acb_mat_t mat1, const acb_mat_t mat2) - void acb_mat_transpose(acb_mat_t B, const acb_mat_t A) - void acb_mat_trace(acb_t trace, const acb_mat_t mat, long prec) + void acb_mat_add(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_sub(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_mul_classical(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_mul_threaded(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_mul_reorder(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_mul(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_mul_entrywise(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_sqr_classical(acb_mat_t res, const acb_mat_t mat, slong prec) + void acb_mat_sqr(acb_mat_t res, const acb_mat_t mat, slong prec) + void acb_mat_pow_ui(acb_mat_t res, const acb_mat_t mat, ulong exp, slong prec) + void acb_mat_approx_mul(acb_mat_t res, const acb_mat_t mat1, const acb_mat_t mat2, slong prec) + void acb_mat_scalar_mul_2exp_si(acb_mat_t B, const acb_mat_t A, slong c) + void acb_mat_scalar_addmul_si(acb_mat_t B, const acb_mat_t A, slong c, slong prec) + void acb_mat_scalar_addmul_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, slong prec) + void acb_mat_scalar_addmul_arb(acb_mat_t B, const acb_mat_t A, const arb_t c, slong prec) + void acb_mat_scalar_addmul_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, slong prec) + void acb_mat_scalar_mul_si(acb_mat_t B, const acb_mat_t A, slong c, slong prec) + void acb_mat_scalar_mul_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, slong prec) + void acb_mat_scalar_mul_arb(acb_mat_t B, const acb_mat_t A, const arb_t c, slong prec) + void acb_mat_scalar_mul_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, slong prec) + void acb_mat_scalar_div_si(acb_mat_t B, const acb_mat_t A, slong c, slong prec) + void acb_mat_scalar_div_fmpz(acb_mat_t B, const acb_mat_t A, const fmpz_t c, slong prec) + void acb_mat_scalar_div_arb(acb_mat_t B, const acb_mat_t A, const arb_t c, slong prec) + void acb_mat_scalar_div_acb(acb_mat_t B, const acb_mat_t A, const acb_t c, slong prec) + int acb_mat_lu_classical(slong * perm, acb_mat_t LU, const acb_mat_t A, slong prec) + int acb_mat_lu_recursive(slong * perm, acb_mat_t LU, const acb_mat_t A, slong prec) + int acb_mat_lu(slong * perm, acb_mat_t LU, const acb_mat_t A, slong prec) + void acb_mat_solve_tril_classical(acb_mat_t X, const acb_mat_t L, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_tril_recursive(acb_mat_t X, const acb_mat_t L, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_tril(acb_mat_t X, const acb_mat_t L, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_triu_classical(acb_mat_t X, const acb_mat_t U, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_triu_recursive(acb_mat_t X, const acb_mat_t U, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_triu(acb_mat_t X, const acb_mat_t U, const acb_mat_t B, int unit, slong prec) + void acb_mat_solve_lu_precomp(acb_mat_t X, const slong * perm, const acb_mat_t LU, const acb_mat_t B, slong prec) + int acb_mat_solve(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, slong prec) + int acb_mat_solve_lu(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, slong prec) + int acb_mat_solve_precond(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, slong prec) + int acb_mat_inv(acb_mat_t X, const acb_mat_t A, slong prec) + void acb_mat_det_lu(acb_t det, const acb_mat_t A, slong prec) + void acb_mat_det_precond(acb_t det, const acb_mat_t A, slong prec) + void acb_mat_det(acb_t det, const acb_mat_t A, slong prec) + void acb_mat_approx_solve_triu(acb_mat_t X, const acb_mat_t U, const acb_mat_t B, int unit, slong prec) + void acb_mat_approx_solve_tril(acb_mat_t X, const acb_mat_t L, const acb_mat_t B, int unit, slong prec) + int acb_mat_approx_lu(slong * P, acb_mat_t LU, const acb_mat_t A, slong prec) + void acb_mat_approx_solve_lu_precomp(acb_mat_t X, const slong * perm, const acb_mat_t A, const acb_mat_t B, slong prec) + int acb_mat_approx_solve(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, slong prec) + int acb_mat_approx_inv(acb_mat_t X, const acb_mat_t A, slong prec) + void _acb_mat_charpoly(acb_ptr poly, const acb_mat_t mat, slong prec) + void acb_mat_charpoly(acb_poly_t poly, const acb_mat_t mat, slong prec) + void _acb_mat_companion(acb_mat_t mat, acb_srcptr poly, slong prec) + void acb_mat_companion(acb_mat_t mat, const acb_poly_t poly, slong prec) + void acb_mat_exp_taylor_sum(acb_mat_t S, const acb_mat_t A, slong N, slong prec) + void acb_mat_exp(acb_mat_t B, const acb_mat_t A, slong prec) + void acb_mat_trace(acb_t trace, const acb_mat_t mat, slong prec) + void _acb_mat_diag_prod(acb_t res, const acb_mat_t mat, slong a, slong b, slong prec) + void acb_mat_diag_prod(acb_t res, const acb_mat_t mat, slong prec) void acb_mat_get_mid(acb_mat_t B, const acb_mat_t A) + void acb_mat_add_error_mag(acb_mat_t mat, const mag_t err) + int acb_mat_approx_eig_qr(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, const mag_t tol, slong maxiter, slong prec) + void acb_mat_eig_global_enclosure(mag_t eps, const acb_mat_t A, acb_srcptr E, const acb_mat_t R, slong prec) + void acb_mat_eig_enclosure_rump(acb_t l, acb_mat_t J, acb_mat_t R, const acb_mat_t A, const acb_t lambda_approx, const acb_mat_t R_approx, slong prec) + int acb_mat_eig_simple_rump(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, slong prec) + int acb_mat_eig_simple_vdhoeven_mourrain(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, slong prec) + int acb_mat_eig_simple(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, slong prec) + int acb_mat_eig_multiple_rump(acb_ptr E, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, slong prec) + int acb_mat_eig_multiple(acb_ptr E, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, slong prec) - void acb_mat_dft(acb_mat_t res, int kind, long prec) - - void acb_mat_frobenius_norm(arb_t res, const acb_mat_t A, long prec) - - int acb_mat_eq(const acb_mat_t mat1, const acb_mat_t mat2) - int acb_mat_ne(const acb_mat_t mat1, const acb_mat_t mat2) - int acb_mat_equal(const acb_mat_t mat1, const acb_mat_t mat2) - - int acb_mat_approx_solve(acb_mat_t X, const acb_mat_t A, const acb_mat_t B, long prec) - - void acb_mat_randtest_eig(acb_mat_t A, flint_rand_t state, acb_srcptr E, long prec) - int acb_mat_approx_eig_qr(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, const mag_t tol, long maxiter, long prec) - void acb_mat_eig_global_enclosure(mag_t eps, const acb_mat_t A, acb_srcptr E, const acb_mat_t R, long prec) - - int acb_mat_eig_simple_rump(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, long prec) - int acb_mat_eig_simple_vdhoeven_mourrain(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, long prec) - int acb_mat_eig_simple(acb_ptr E, acb_mat_t L, acb_mat_t R, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, long prec) - - int acb_mat_eig_multiple_rump(acb_ptr E, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, long prec) - int acb_mat_eig_multiple(acb_ptr E, const acb_mat_t A, acb_srcptr E_approx, const acb_mat_t R_approx, long prec) diff --git a/src/flint/flintlib/acb_poly.pxd b/src/flint/flintlib/acb_poly.pxd index 0dcd476b..e399082c 100644 --- a/src/flint/flintlib/acb_poly.pxd +++ b/src/flint/flintlib/acb_poly.pxd @@ -1,10 +1,11 @@ -from flint.flintlib.flint cimport flint_rand_t, ulong +from flint.flintlib.flint cimport flint_rand_t, ulong, slong from flint.flintlib.acb cimport acb_ptr, acb_t, acb_srcptr from flint.flintlib.arb_poly cimport arb_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.mag cimport mag_t from flint.flintlib.fmpz cimport fmpz_t +from flint.flintlib.arb cimport arb_ptr cdef extern from "acb_poly.h": ctypedef struct acb_poly_struct: @@ -14,199 +15,259 @@ cdef extern from "acb_poly.h": ctypedef acb_poly_struct acb_poly_t[1] +#macros + acb_ptr acb_poly_get_coeff_ptr(arb_poly_t poly, long n) +# from here on is parsed void acb_poly_init(acb_poly_t poly) - void acb_poly_init2(acb_poly_t poly, long len) void acb_poly_clear(acb_poly_t poly) - void acb_poly_fit_length(acb_poly_t poly, long len) - void _acb_poly_set_length(acb_poly_t poly, long len) + void acb_poly_fit_length(acb_poly_t poly, slong len) + void _acb_poly_set_length(acb_poly_t poly, slong len) void _acb_poly_normalise(acb_poly_t poly) void acb_poly_swap(acb_poly_t poly1, acb_poly_t poly2) - long acb_poly_length(const acb_poly_t poly) - long acb_poly_degree(const acb_poly_t poly) + slong acb_poly_allocated_bytes(const acb_poly_t x) + slong acb_poly_length(const acb_poly_t poly) + slong acb_poly_degree(const acb_poly_t poly) + int acb_poly_is_zero(const acb_poly_t poly) + int acb_poly_is_one(const acb_poly_t poly) + int acb_poly_is_x(const acb_poly_t poly) void acb_poly_zero(acb_poly_t poly) void acb_poly_one(acb_poly_t poly) - void acb_poly_set_coeff_si(acb_poly_t poly, long n, long x) - void acb_poly_set_coeff_acb(acb_poly_t poly, long n, const acb_t x) - void acb_poly_get_coeff_acb(acb_t x, const acb_poly_t poly, long n) - acb_ptr acb_poly_get_coeff_ptr(arb_poly_t poly, long n) - void _acb_poly_shift_right(acb_ptr res, acb_srcptr poly, long len, long n) - void acb_poly_shift_right(acb_poly_t res, const acb_poly_t poly, long n) - void _acb_poly_shift_left(acb_ptr res, acb_srcptr poly, long len, long n) - void acb_poly_shift_left(acb_poly_t res, const acb_poly_t poly, long n) - void acb_poly_truncate(acb_poly_t poly, long newlen) - void acb_poly_printd(const acb_poly_t poly, long digits) - void _acb_poly_evaluate_horner(acb_t res, acb_srcptr f, long len, const acb_t a, long prec) - void acb_poly_evaluate_horner(acb_t res, const acb_poly_t f, const acb_t a, long prec) - void _acb_poly_evaluate_rectangular(acb_t y, acb_srcptr poly, long len, const acb_t x, long prec) - void acb_poly_evaluate_rectangular(acb_t res, const acb_poly_t f, const acb_t a, long prec) - void _acb_poly_evaluate(acb_t res, acb_srcptr f, long len, const acb_t a, long prec) - void acb_poly_evaluate(acb_t res, const acb_poly_t f, const acb_t a, long prec) - void _acb_poly_evaluate2_horner(acb_t y, acb_t z, acb_srcptr f, long len, const acb_t x, long prec) - void acb_poly_evaluate2_horner(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, long prec) - void _acb_poly_evaluate2_rectangular(acb_t y, acb_t z, acb_srcptr f, long len, const acb_t x, long prec) - void acb_poly_evaluate2_rectangular(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, long prec) - void _acb_poly_evaluate2(acb_t y, acb_t z, acb_srcptr f, long len, const acb_t x, long prec) - void acb_poly_evaluate2(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, long prec) - void _acb_poly_derivative(acb_ptr res, acb_srcptr poly, long len, long prec) - void acb_poly_derivative(acb_poly_t res, const acb_poly_t poly, long prec) - void _acb_poly_integral(acb_ptr res, acb_srcptr poly, long len, long prec) - void acb_poly_integral(acb_poly_t res, const acb_poly_t poly, long prec) void acb_poly_set(acb_poly_t dest, const acb_poly_t src) - void acb_poly_set_round(acb_poly_t dest, const acb_poly_t src, long prec) - void acb_poly_set_arb_poly(acb_poly_t poly, const arb_poly_t re) - void acb_poly_set2_arb_poly(acb_poly_t poly, const arb_poly_t re, const arb_poly_t im) - void acb_poly_set_fmpq_poly(acb_poly_t poly, const fmpq_poly_t re, long prec) - void acb_poly_set2_fmpq_poly(acb_poly_t poly, const fmpq_poly_t re, const fmpq_poly_t im, long prec) - void acb_poly_set_fmpz_poly(acb_poly_t poly, const fmpz_poly_t src, long prec) - void acb_poly_set_acb(acb_poly_t poly, const acb_t c) - void acb_poly_set_si(acb_poly_t poly, long c) - void acb_poly_randtest(acb_poly_t poly, flint_rand_t state, long len, long prec, long mag_bits) + void acb_poly_set_round(acb_poly_t dest, const acb_poly_t src, slong prec) + void acb_poly_set_trunc(acb_poly_t dest, const acb_poly_t src, slong n) + void acb_poly_set_trunc_round(acb_poly_t dest, const acb_poly_t src, slong n, slong prec) + void acb_poly_set_coeff_si(acb_poly_t poly, slong n, slong c) + void acb_poly_set_coeff_acb(acb_poly_t poly, slong n, const acb_t c) + void acb_poly_get_coeff_acb(acb_t v, const acb_poly_t poly, slong n) + void _acb_poly_shift_right(acb_ptr res, acb_srcptr poly, slong len, slong n) + void acb_poly_shift_right(acb_poly_t res, const acb_poly_t poly, slong n) + void _acb_poly_shift_left(acb_ptr res, acb_srcptr poly, slong len, slong n) + void acb_poly_shift_left(acb_poly_t res, const acb_poly_t poly, slong n) + void acb_poly_truncate(acb_poly_t poly, slong n) + slong acb_poly_valuation(const acb_poly_t poly) + void acb_poly_printd(const acb_poly_t poly, slong digits) + void acb_poly_randtest(acb_poly_t poly, flint_rand_t state, slong len, slong prec, slong mag_bits) int acb_poly_equal(const acb_poly_t A, const acb_poly_t B) + int acb_poly_contains(const acb_poly_t poly1, const acb_poly_t poly2) int acb_poly_contains_fmpz_poly(const acb_poly_t poly1, const fmpz_poly_t poly2) int acb_poly_contains_fmpq_poly(const acb_poly_t poly1, const fmpq_poly_t poly2) - int _acb_poly_overlaps(acb_srcptr poly1, long len1, acb_srcptr poly2, long len2) + int _acb_poly_overlaps(acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2) int acb_poly_overlaps(const acb_poly_t poly1, const acb_poly_t poly2) - int acb_poly_contains(const acb_poly_t poly1, const acb_poly_t poly2) - void _acb_poly_add(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long prec) - void acb_poly_add(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void _acb_poly_sub(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long prec) - void acb_poly_sub(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void acb_poly_neg(acb_poly_t res, const acb_poly_t poly) - void acb_poly_scalar_mul_2exp_si(acb_poly_t res, const acb_poly_t poly, long c) - void acb_poly_mullow_classical(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_mullow_classical(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void _acb_poly_mullow_transpose(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_mullow_transpose(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_mullow_transpose_gauss(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_mullow_transpose_gauss(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_mullow(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_mullow(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_mul(acb_ptr C, acb_srcptr A, long lenA, acb_srcptr B, long lenB, long prec) - void acb_poly_mul(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void _acb_poly_inv_series(acb_ptr Qinv, acb_srcptr Q, long Qlen, long len, long prec) - void acb_poly_inv_series(acb_poly_t Qinv, const acb_poly_t Q, long n, long prec) - void _acb_poly_div_series(acb_ptr Q, acb_srcptr A, long Alen, acb_srcptr B, long Blen, long n, long prec) - void acb_poly_div_series(acb_poly_t Q, const acb_poly_t A, const acb_poly_t B, long n, long prec) - void _acb_poly_reverse(acb_ptr res, acb_srcptr poly, long len, long n) - void _acb_poly_div(acb_ptr Q, acb_srcptr A, long lenA, acb_srcptr B, long lenB, long prec) - void _acb_poly_divrem(acb_ptr Q, acb_ptr R, acb_srcptr A, long lenA, acb_srcptr B, long lenB, long prec) - void _acb_poly_rem(acb_ptr R, acb_srcptr A, long lenA, acb_srcptr B, long lenB, long prec) - int acb_poly_divrem(acb_poly_t Q, acb_poly_t R, const acb_poly_t A, const acb_poly_t B, long prec) - void _acb_poly_div_root(acb_ptr Q, acb_t R, acb_srcptr A, long len, const acb_t c, long prec) - void _acb_poly_compose(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long prec) - void acb_poly_compose(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void _acb_poly_compose_horner(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long prec) - void acb_poly_compose_horner(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void _acb_poly_compose_divconquer(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long prec) - void acb_poly_compose_divconquer(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long prec) - void _acb_poly_compose_series_horner(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_compose_series_horner(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_compose_series_brent_kung(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_compose_series_brent_kung(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_compose_series(acb_ptr res, acb_srcptr poly1, long len1, acb_srcptr poly2, long len2, long n, long prec) - void acb_poly_compose_series(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, long n, long prec) - void _acb_poly_revert_series_lagrange(acb_ptr Qinv, acb_srcptr Q, long Qlen, long n, long prec) - void acb_poly_revert_series_lagrange(acb_poly_t Qinv, const acb_poly_t Q, long n, long prec) - void _acb_poly_revert_series_newton(acb_ptr Qinv, acb_srcptr Q, long Qlen, long n, long prec) - void acb_poly_revert_series_newton(acb_poly_t Qinv, const acb_poly_t Q, long n, long prec) - void _acb_poly_revert_series_lagrange_fast(acb_ptr Qinv, acb_srcptr Q, long Qlen, long n, long prec) - void acb_poly_revert_series_lagrange_fast(acb_poly_t Qinv, const acb_poly_t Q, long n, long prec) - void _acb_poly_revert_series(acb_ptr Qinv, acb_srcptr Q, long Qlen, long n, long prec) - void acb_poly_revert_series(acb_poly_t Qinv, const acb_poly_t Q, long n, long prec) - void _acb_poly_evaluate_vec_fast_precomp(acb_ptr vs, acb_srcptr poly, long plen, acb_ptr * tree, long len, long prec) - void _acb_poly_evaluate_vec_fast(acb_ptr ys, acb_srcptr poly, long plen, acb_srcptr xs, long n, long prec) - void acb_poly_evaluate_vec_fast(acb_ptr ys, const acb_poly_t poly, acb_srcptr xs, long n, long prec) - void _acb_poly_evaluate_vec_iter(acb_ptr ys, acb_srcptr poly, long plen, acb_srcptr xs, long n, long prec) - void acb_poly_evaluate_vec_iter(acb_ptr ys, const acb_poly_t poly, acb_srcptr xs, long n, long prec) - void _acb_poly_interpolate_barycentric(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, long n, long prec) - void acb_poly_interpolate_barycentric(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, long n, long prec) - void _acb_poly_interpolation_weights(acb_ptr w, acb_ptr * tree, long len, long prec) - void _acb_poly_interpolate_fast_precomp(acb_ptr poly, acb_srcptr ys, acb_ptr * tree, acb_srcptr weights, long len, long prec) - void _acb_poly_interpolate_fast(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, long len, long prec) - void acb_poly_interpolate_fast(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, long n, long prec) - void _acb_poly_interpolate_newton(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, long n, long prec) - void acb_poly_interpolate_newton(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, long n, long prec) - void _acb_poly_product_roots(acb_ptr poly, acb_srcptr xs, long n, long prec) - void acb_poly_product_roots(acb_poly_t poly, acb_srcptr xs, long n, long prec) - acb_ptr * _acb_poly_tree_alloc(long len) - void _acb_poly_tree_free(acb_ptr * tree, long len) - void _acb_poly_tree_build(acb_ptr * tree, acb_srcptr roots, long len, long prec) - void _acb_poly_root_inclusion(acb_t r, const acb_t m, acb_srcptr poly, acb_srcptr polyder, long len, long prec) - long _acb_poly_validate_roots(acb_ptr roots, acb_srcptr poly, long len, long prec) - void _acb_poly_refine_roots_durand_kerner(acb_ptr roots, acb_srcptr poly, long len, long prec) - long _acb_poly_find_roots(acb_ptr roots, acb_srcptr poly, acb_srcptr initial, long len, long maxiter, long prec) - long acb_poly_find_roots(acb_ptr roots, const acb_poly_t poly, acb_srcptr initial, long maxiter, long prec) - void _acb_poly_pow_ui_trunc_binexp(acb_ptr res, acb_srcptr f, long flen, ulong exp, long len, long prec) - void acb_poly_pow_ui_trunc_binexp(acb_poly_t res, const acb_poly_t poly, ulong exp, long len, long prec) - void _acb_poly_pow_ui(acb_ptr res, acb_srcptr f, long flen, ulong exp, long prec) - void acb_poly_pow_ui(acb_poly_t res, const acb_poly_t poly, ulong exp, long prec) - void _acb_poly_rsqrt_series(acb_ptr g, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_rsqrt_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_sqrt_series(acb_ptr g, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_sqrt_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_log_series(acb_ptr res, acb_srcptr f, long flen, long n, long prec) - void acb_poly_log_series(acb_poly_t res, const acb_poly_t f, long n, long prec) - void _acb_poly_atan_series(acb_ptr res, acb_srcptr f, long flen, long n, long prec) - void acb_poly_atan_series(acb_poly_t res, const acb_poly_t f, long n, long prec) - void _acb_poly_exp_series_basecase(acb_ptr f, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_exp_series_basecase(acb_poly_t f, const acb_poly_t h, long n, long prec) - void _acb_poly_exp_series(acb_ptr f, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_exp_series(acb_poly_t f, const acb_poly_t h, long n, long prec) - void _acb_poly_sin_cos_series_basecase(acb_ptr s, acb_ptr c, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_sin_cos_series_basecase(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec) - void _acb_poly_sin_cos_series_tangent(acb_ptr s, acb_ptr c, const acb_srcptr h, long hlen, long len, long prec) - void acb_poly_sin_cos_series_tangent(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec) - void _acb_poly_sin_cos_series(acb_ptr s, acb_ptr c, const acb_srcptr h, long hlen, long len, long prec) - void acb_poly_sin_cos_series(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec) - void _acb_poly_sin_series(acb_ptr g, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_sin_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_cos_series(acb_ptr g, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_cos_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_tan_series(acb_ptr g, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_tan_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_gamma_series(acb_ptr res, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_gamma_series(acb_poly_t res, const acb_poly_t f, long n, long prec) - void _acb_poly_rgamma_series(acb_ptr res, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_rgamma_series(acb_poly_t res, const acb_poly_t f, long n, long prec) - void _acb_poly_lgamma_series(acb_ptr res, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_lgamma_series(acb_poly_t res, const acb_poly_t f, long n, long prec) - void _acb_poly_rising_ui_series(acb_ptr res, acb_srcptr f, long flen, ulong r, long trunc, long prec) - void acb_poly_rising_ui_series(acb_poly_t res, const acb_poly_t f, ulong r, long trunc, long prec) - void _acb_poly_zeta_series(acb_ptr res, acb_srcptr h, long hlen, const acb_t a, int deflate, long len, long prec) - void acb_poly_zeta_series(acb_poly_t res, const acb_poly_t f, const acb_t a, int deflate, long n, long prec) - void _acb_poly_polylog_cpx_zeta(acb_ptr w, const acb_t s, const acb_t z, long len, long prec) - void _acb_poly_polylog_cpx_small(acb_ptr w, const acb_t s, const acb_t z, long len, long prec) - void _acb_poly_polylog_cpx(acb_ptr w, const acb_t s, const acb_t z, long len, long prec) - void _acb_poly_polylog_series(acb_ptr res, acb_srcptr s, long slen, const acb_t z, long len, long prec) - void acb_poly_polylog_series(acb_poly_t res, const acb_poly_t s, const acb_t z, long n, long prec) - - void _acb_poly_pow_series(acb_ptr h, acb_srcptr f, long flen, acb_srcptr g, long glen, long len, long prec) - void acb_poly_pow_series(acb_poly_t h, const acb_poly_t f, const acb_poly_t g, long len, long prec) - void _acb_poly_pow_acb_series(acb_ptr h, acb_srcptr f, long flen, const acb_t g, long len, long prec) - void acb_poly_pow_acb_series(acb_poly_t h, const acb_poly_t f, const acb_t g, long len, long prec) - - void _acb_poly_agm1_series(acb_ptr res, acb_srcptr z, long zlen, long len, long prec) - void acb_poly_agm1_series(acb_poly_t res, const acb_poly_t z, long n, long prec) - - void _acb_poly_elliptic_k_series(acb_ptr res, acb_srcptr z, long zlen, long len, long prec) - void acb_poly_elliptic_k_series(acb_poly_t res, const acb_poly_t z, long n, long prec) - void _acb_poly_elliptic_p_series(acb_ptr res, acb_srcptr z, long zlen, const acb_t tau, long len, long prec) - void acb_poly_elliptic_p_series(acb_poly_t res, const acb_poly_t z, const acb_t tau, long n, long prec) - - void _acb_poly_erf_series(acb_ptr res, acb_srcptr h, long hlen, long len, long prec) - void acb_poly_erf_series(acb_poly_t res, const acb_poly_t h, long n, long prec) - int acb_poly_get_unique_fmpz_poly(fmpz_poly_t res, const acb_poly_t src) - - void _acb_poly_sin_cos_pi_series(acb_ptr s, acb_ptr c, const acb_srcptr h, long hlen, long len, long prec) - void acb_poly_sin_cos_pi_series(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec) - void _acb_poly_sin_pi_series(acb_ptr g, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_sin_pi_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - void _acb_poly_cos_pi_series(acb_ptr g, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_cos_pi_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - - void _acb_poly_cot_pi_series(acb_ptr g, acb_srcptr h, long hlen, long n, long prec) - void acb_poly_cot_pi_series(acb_poly_t g, const acb_poly_t h, long n, long prec) - + int acb_poly_get_unique_fmpz_poly(fmpz_poly_t z, const acb_poly_t x) + int acb_poly_is_real(const acb_poly_t poly) + void acb_poly_set_fmpz_poly(acb_poly_t poly, const fmpz_poly_t re, slong prec) + void acb_poly_set2_fmpz_poly(acb_poly_t poly, const fmpz_poly_t re, const fmpz_poly_t im, slong prec) + void acb_poly_set_arb_poly(acb_poly_t poly, const arb_poly_t re) + void acb_poly_set2_arb_poly(acb_poly_t poly, const arb_poly_t re, const arb_poly_t im) + void acb_poly_set_fmpq_poly(acb_poly_t poly, const fmpq_poly_t re, slong prec) + void acb_poly_set2_fmpq_poly(acb_poly_t poly, const fmpq_poly_t re, const fmpq_poly_t im, slong prec) + void acb_poly_set_acb(acb_poly_t poly, const acb_t src) + void acb_poly_set_si(acb_poly_t poly, slong src) + void _acb_poly_majorant(arb_ptr res, acb_srcptr poly, slong len, slong prec) + void acb_poly_majorant(arb_poly_t res, const acb_poly_t poly, slong prec) + void _acb_poly_add(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + void acb_poly_add(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong prec) + void acb_poly_add_si(acb_poly_t C, const acb_poly_t A, slong B, slong prec) + void _acb_poly_sub(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + void acb_poly_sub(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong prec) + void acb_poly_add_series(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong len, slong prec) + void acb_poly_sub_series(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong len, slong prec) + void acb_poly_neg(acb_poly_t C, const acb_poly_t A) + void acb_poly_scalar_mul_2exp_si(acb_poly_t C, const acb_poly_t A, slong c) + void acb_poly_scalar_mul(acb_poly_t C, const acb_poly_t A, const acb_t c, slong prec) + void acb_poly_scalar_div(acb_poly_t C, const acb_poly_t A, const acb_t c, slong prec) + void _acb_poly_mullow_classical(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong n, slong prec) + void _acb_poly_mullow_transpose(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong n, slong prec) + void _acb_poly_mullow_transpose_gauss(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong n, slong prec) + void _acb_poly_mullow(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong n, slong prec) + void acb_poly_mullow_classical(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong n, slong prec) + void acb_poly_mullow_transpose(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong n, slong prec) + void acb_poly_mullow_transpose_gauss(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong n, slong prec) + void acb_poly_mullow(acb_poly_t C, const acb_poly_t A, const acb_poly_t B, slong n, slong prec) + void _acb_poly_mul(acb_ptr C, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + void acb_poly_mul(acb_poly_t C, const acb_poly_t A1, const acb_poly_t B2, slong prec) + void _acb_poly_inv_series(acb_ptr Qinv, acb_srcptr Q, slong Qlen, slong len, slong prec) + void acb_poly_inv_series(acb_poly_t Qinv, const acb_poly_t Q, slong n, slong prec) + void _acb_poly_div_series(acb_ptr Q, acb_srcptr A, slong Alen, acb_srcptr B, slong Blen, slong n, slong prec) + void acb_poly_div_series(acb_poly_t Q, const acb_poly_t A, const acb_poly_t B, slong n, slong prec) + void _acb_poly_div(acb_ptr Q, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + void _acb_poly_rem(acb_ptr R, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + void _acb_poly_divrem(acb_ptr Q, acb_ptr R, acb_srcptr A, slong lenA, acb_srcptr B, slong lenB, slong prec) + int acb_poly_divrem(acb_poly_t Q, acb_poly_t R, const acb_poly_t A, const acb_poly_t B, slong prec) + void _acb_poly_div_root(acb_ptr Q, acb_t R, acb_srcptr A, slong len, const acb_t c, slong prec) + void _acb_poly_taylor_shift_horner(acb_ptr g, const acb_t c, slong n, slong prec) + void acb_poly_taylor_shift_horner(acb_poly_t g, const acb_poly_t f, const acb_t c, slong prec) + void _acb_poly_taylor_shift_divconquer(acb_ptr g, const acb_t c, slong n, slong prec) + void acb_poly_taylor_shift_divconquer(acb_poly_t g, const acb_poly_t f, const acb_t c, slong prec) + void _acb_poly_taylor_shift_convolution(acb_ptr g, const acb_t c, slong n, slong prec) + void acb_poly_taylor_shift_convolution(acb_poly_t g, const acb_poly_t f, const acb_t c, slong prec) + void _acb_poly_taylor_shift(acb_ptr g, const acb_t c, slong n, slong prec) + void acb_poly_taylor_shift(acb_poly_t g, const acb_poly_t f, const acb_t c, slong prec) + void _acb_poly_compose_horner(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong prec) + void acb_poly_compose_horner(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong prec) + void _acb_poly_compose_divconquer(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong prec) + void acb_poly_compose_divconquer(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong prec) + void _acb_poly_compose(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong prec) + void acb_poly_compose(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong prec) + void _acb_poly_compose_series_horner(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong n, slong prec) + void acb_poly_compose_series_horner(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong n, slong prec) + void _acb_poly_compose_series_brent_kung(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong n, slong prec) + void acb_poly_compose_series_brent_kung(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong n, slong prec) + void _acb_poly_compose_series(acb_ptr res, acb_srcptr poly1, slong len1, acb_srcptr poly2, slong len2, slong n, slong prec) + void acb_poly_compose_series(acb_poly_t res, const acb_poly_t poly1, const acb_poly_t poly2, slong n, slong prec) + void _acb_poly_revert_series_lagrange(acb_ptr h, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_revert_series_lagrange(acb_poly_t h, const acb_poly_t f, slong n, slong prec) + void _acb_poly_revert_series_newton(acb_ptr h, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_revert_series_newton(acb_poly_t h, const acb_poly_t f, slong n, slong prec) + void _acb_poly_revert_series_lagrange_fast(acb_ptr h, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_revert_series_lagrange_fast(acb_poly_t h, const acb_poly_t f, slong n, slong prec) + void _acb_poly_revert_series(acb_ptr h, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_revert_series(acb_poly_t h, const acb_poly_t f, slong n, slong prec) + void _acb_poly_evaluate_horner(acb_t y, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate_horner(acb_t y, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_evaluate_rectangular(acb_t y, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate_rectangular(acb_t y, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_evaluate(acb_t y, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate(acb_t y, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_evaluate2_horner(acb_t y, acb_t z, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate2_horner(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_evaluate2_rectangular(acb_t y, acb_t z, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate2_rectangular(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_evaluate2(acb_t y, acb_t z, acb_srcptr f, slong len, const acb_t x, slong prec) + void acb_poly_evaluate2(acb_t y, acb_t z, const acb_poly_t f, const acb_t x, slong prec) + void _acb_poly_product_roots(acb_ptr poly, acb_srcptr xs, slong n, slong prec) + void acb_poly_product_roots(acb_poly_t poly, acb_srcptr xs, slong n, slong prec) + acb_ptr * _acb_poly_tree_alloc(slong len) + void _acb_poly_tree_free(acb_ptr * tree, slong len) + void _acb_poly_tree_build(acb_ptr * tree, acb_srcptr roots, slong len, slong prec) + void _acb_poly_evaluate_vec_iter(acb_ptr ys, acb_srcptr poly, slong plen, acb_srcptr xs, slong n, slong prec) + void acb_poly_evaluate_vec_iter(acb_ptr ys, const acb_poly_t poly, acb_srcptr xs, slong n, slong prec) + void _acb_poly_evaluate_vec_fast_precomp(acb_ptr vs, acb_srcptr poly, slong plen, acb_ptr * tree, slong len, slong prec) + void _acb_poly_evaluate_vec_fast(acb_ptr ys, acb_srcptr poly, slong plen, acb_srcptr xs, slong n, slong prec) + void acb_poly_evaluate_vec_fast(acb_ptr ys, const acb_poly_t poly, acb_srcptr xs, slong n, slong prec) + void _acb_poly_interpolate_newton(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, slong n, slong prec) + void acb_poly_interpolate_newton(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, slong n, slong prec) + void _acb_poly_interpolate_barycentric(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, slong n, slong prec) + void acb_poly_interpolate_barycentric(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, slong n, slong prec) + void _acb_poly_interpolation_weights(acb_ptr w, acb_ptr * tree, slong len, slong prec) + void _acb_poly_interpolate_fast_precomp(acb_ptr poly, acb_srcptr ys, acb_ptr * tree, acb_srcptr weights, slong len, slong prec) + void _acb_poly_interpolate_fast(acb_ptr poly, acb_srcptr xs, acb_srcptr ys, slong len, slong prec) + void acb_poly_interpolate_fast(acb_poly_t poly, acb_srcptr xs, acb_srcptr ys, slong n, slong prec) + void _acb_poly_derivative(acb_ptr res, acb_srcptr poly, slong len, slong prec) + void acb_poly_derivative(acb_poly_t res, const acb_poly_t poly, slong prec) + void _acb_poly_integral(acb_ptr res, acb_srcptr poly, slong len, slong prec) + void acb_poly_integral(acb_poly_t res, const acb_poly_t poly, slong prec) + void _acb_poly_borel_transform(acb_ptr res, acb_srcptr poly, slong len, slong prec) + void acb_poly_borel_transform(acb_poly_t res, const acb_poly_t poly, slong prec) + void _acb_poly_inv_borel_transform(acb_ptr res, acb_srcptr poly, slong len, slong prec) + void acb_poly_inv_borel_transform(acb_poly_t res, const acb_poly_t poly, slong prec) + void _acb_poly_binomial_transform_basecase(acb_ptr b, acb_srcptr a, slong alen, slong len, slong prec) + void acb_poly_binomial_transform_basecase(acb_poly_t b, const acb_poly_t a, slong len, slong prec) + void _acb_poly_binomial_transform_convolution(acb_ptr b, acb_srcptr a, slong alen, slong len, slong prec) + void acb_poly_binomial_transform_convolution(acb_poly_t b, const acb_poly_t a, slong len, slong prec) + void _acb_poly_binomial_transform(acb_ptr b, acb_srcptr a, slong alen, slong len, slong prec) + void acb_poly_binomial_transform(acb_poly_t b, const acb_poly_t a, slong len, slong prec) + void _acb_poly_graeffe_transform(acb_ptr b, acb_srcptr a, slong len, slong prec) + void acb_poly_graeffe_transform(acb_poly_t b, acb_poly_t a, slong prec) + void _acb_poly_pow_ui_trunc_binexp(acb_ptr res, acb_srcptr f, slong flen, ulong exp, slong len, slong prec) + void acb_poly_pow_ui_trunc_binexp(acb_poly_t res, const acb_poly_t poly, ulong exp, slong len, slong prec) + void _acb_poly_pow_ui(acb_ptr res, acb_srcptr f, slong flen, ulong exp, slong prec) + void acb_poly_pow_ui(acb_poly_t res, const acb_poly_t poly, ulong exp, slong prec) + void _acb_poly_pow_series(acb_ptr h, acb_srcptr f, slong flen, acb_srcptr g, slong glen, slong len, slong prec) + void acb_poly_pow_series(acb_poly_t h, const acb_poly_t f, const acb_poly_t g, slong len, slong prec) + void _acb_poly_pow_acb_series(acb_ptr h, acb_srcptr f, slong flen, const acb_t g, slong len, slong prec) + void acb_poly_pow_acb_series(acb_poly_t h, const acb_poly_t f, const acb_t g, slong len, slong prec) + void _acb_poly_sqrt_series(acb_ptr g, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sqrt_series(acb_poly_t g, const acb_poly_t h, slong n, slong prec) + void _acb_poly_rsqrt_series(acb_ptr g, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_rsqrt_series(acb_poly_t g, const acb_poly_t h, slong n, slong prec) + void _acb_poly_log_series(acb_ptr res, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_log_series(acb_poly_t res, const acb_poly_t f, slong n, slong prec) + void _acb_poly_log1p_series(acb_ptr res, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_log1p_series(acb_poly_t res, const acb_poly_t f, slong n, slong prec) + void _acb_poly_atan_series(acb_ptr res, acb_srcptr f, slong flen, slong n, slong prec) + void acb_poly_atan_series(acb_poly_t res, const acb_poly_t f, slong n, slong prec) + void _acb_poly_exp_series_basecase(acb_ptr f, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_exp_series_basecase(acb_poly_t f, const acb_poly_t h, slong n, slong prec) + void _acb_poly_exp_series(acb_ptr f, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_exp_series(acb_poly_t f, const acb_poly_t h, slong n, slong prec) + void _acb_poly_exp_pi_i_series(acb_ptr f, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_exp_pi_i_series(acb_poly_t f, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sin_cos_series_basecase(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec, int times_pi) + void acb_poly_sin_cos_series_basecase(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec, int times_pi) + void _acb_poly_sin_cos_series_tangent(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec, int times_pi) + void acb_poly_sin_cos_series_tangent(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec, int times_pi) + void _acb_poly_sin_cos_series(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sin_cos_series(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sin_series(acb_ptr s, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sin_series(acb_poly_t s, const acb_poly_t h, slong n, slong prec) + void _acb_poly_cos_series(acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_cos_series(acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_tan_series(acb_ptr g, acb_srcptr h, slong hlen, slong len, slong prec) + void acb_poly_tan_series(acb_poly_t g, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sin_cos_pi_series(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sin_cos_pi_series(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sin_pi_series(acb_ptr s, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sin_pi_series(acb_poly_t s, const acb_poly_t h, slong n, slong prec) + void _acb_poly_cos_pi_series(acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_cos_pi_series(acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_cot_pi_series(acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_cot_pi_series(acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sinh_cosh_series_basecase(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sinh_cosh_series_basecase(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sinh_cosh_series_exponential(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sinh_cosh_series_exponential(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sinh_cosh_series(acb_ptr s, acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sinh_cosh_series(acb_poly_t s, acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sinh_series(acb_ptr s, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sinh_series(acb_poly_t s, const acb_poly_t h, slong n, slong prec) + void _acb_poly_cosh_series(acb_ptr c, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_cosh_series(acb_poly_t c, const acb_poly_t h, slong n, slong prec) + void _acb_poly_sinc_series(acb_ptr s, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_sinc_series(acb_poly_t s, const acb_poly_t h, slong n, slong prec) + void _acb_poly_lambertw_series(acb_ptr res, acb_srcptr z, slong zlen, const fmpz_t k, int flags, slong len, slong prec) + void acb_poly_lambertw_series(acb_poly_t res, const acb_poly_t z, const fmpz_t k, int flags, slong len, slong prec) + void _acb_poly_gamma_series(acb_ptr res, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_gamma_series(acb_poly_t res, const acb_poly_t h, slong n, slong prec) + void _acb_poly_rgamma_series(acb_ptr res, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_rgamma_series(acb_poly_t res, const acb_poly_t h, slong n, slong prec) + void _acb_poly_lgamma_series(acb_ptr res, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_lgamma_series(acb_poly_t res, const acb_poly_t h, slong n, slong prec) + void _acb_poly_digamma_series(acb_ptr res, acb_srcptr h, slong hlen, slong n, slong prec) + void acb_poly_digamma_series(acb_poly_t res, const acb_poly_t h, slong n, slong prec) + void _acb_poly_rising_ui_series(acb_ptr res, acb_srcptr f, slong flen, ulong r, slong trunc, slong prec) + void acb_poly_rising_ui_series(acb_poly_t res, const acb_poly_t f, ulong r, slong trunc, slong prec) + void _acb_poly_powsum_series_naive(acb_ptr z, const acb_t s, const acb_t a, const acb_t q, slong n, slong len, slong prec) + void _acb_poly_powsum_series_naive_threaded(acb_ptr z, const acb_t s, const acb_t a, const acb_t q, slong n, slong len, slong prec) + void _acb_poly_powsum_one_series_sieved(acb_ptr z, const acb_t s, slong n, slong len, slong prec) + void _acb_poly_zeta_em_choose_param(mag_t bound, ulong * N, ulong * M, const acb_t s, const acb_t a, slong d, slong target, slong prec) + void _acb_poly_zeta_em_bound1(mag_t bound, const acb_t s, const acb_t a, slong N, slong M, slong d, slong wp) + void _acb_poly_zeta_em_bound(arb_ptr vec, const acb_t s, const acb_t a, ulong N, ulong M, slong d, slong wp) + void _acb_poly_zeta_em_tail_naive(acb_ptr z, const acb_t s, const acb_t Na, acb_srcptr Nasx, slong M, slong len, slong prec) + void _acb_poly_zeta_em_tail_bsplit(acb_ptr z, const acb_t s, const acb_t Na, acb_srcptr Nasx, slong M, slong len, slong prec) + void _acb_poly_zeta_em_sum(acb_ptr z, const acb_t s, const acb_t a, int deflate, ulong N, ulong M, slong d, slong prec) + void _acb_poly_zeta_cpx_series(acb_ptr z, const acb_t s, const acb_t a, int deflate, slong d, slong prec) + void _acb_poly_zeta_series(acb_ptr res, acb_srcptr h, slong hlen, const acb_t a, int deflate, slong len, slong prec) + void acb_poly_zeta_series(acb_poly_t res, const acb_poly_t f, const acb_t a, int deflate, slong n, slong prec) + void _acb_poly_polylog_cpx_small(acb_ptr w, const acb_t s, const acb_t z, slong len, slong prec) + void _acb_poly_polylog_cpx_zeta(acb_ptr w, const acb_t s, const acb_t z, slong len, slong prec) + void _acb_poly_polylog_cpx(acb_ptr w, const acb_t s, const acb_t z, slong len, slong prec) + void _acb_poly_polylog_series(acb_ptr w, acb_srcptr s, slong slen, const acb_t z, slong len, slong prec) + void acb_poly_polylog_series(acb_poly_t w, const acb_poly_t s, const acb_t z, slong len, slong prec) + void _acb_poly_erf_series(acb_ptr res, acb_srcptr z, slong zlen, slong n, slong prec) + void acb_poly_erf_series(acb_poly_t res, const acb_poly_t z, slong n, slong prec) + void _acb_poly_agm1_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_poly_agm1_series(acb_poly_t res, const acb_poly_t z, slong n, slong prec) + void _acb_poly_elliptic_k_series(acb_ptr res, acb_srcptr z, slong zlen, slong len, slong prec) + void acb_poly_elliptic_k_series(acb_poly_t res, const acb_poly_t z, slong n, slong prec) + void _acb_poly_elliptic_p_series(acb_ptr res, acb_srcptr z, slong zlen, const acb_t tau, slong len, slong prec) + void acb_poly_elliptic_p_series(acb_poly_t res, const acb_poly_t z, const acb_t tau, slong n, slong prec) + void _acb_poly_root_bound_fujiwara(mag_t bound, acb_srcptr poly, slong len) void acb_poly_root_bound_fujiwara(mag_t bound, acb_poly_t poly) - - void acb_poly_lambertw_series(acb_poly_t res, const acb_poly_t z, const fmpz_t k, int flags, long len, long prec) + void _acb_poly_root_inclusion(acb_t r, const acb_t m, acb_srcptr poly, acb_srcptr polyder, slong len, slong prec) + slong _acb_poly_validate_roots(acb_ptr roots, acb_srcptr poly, slong len, slong prec) + void _acb_poly_refine_roots_durand_kerner(acb_ptr roots, acb_srcptr poly, slong len, slong prec) + slong _acb_poly_find_roots(acb_ptr roots, acb_srcptr poly, acb_srcptr initial, slong len, slong maxiter, slong prec) + slong acb_poly_find_roots(acb_ptr roots, const acb_poly_t poly, acb_srcptr initial, slong maxiter, slong prec) + int _acb_poly_validate_real_roots(acb_srcptr roots, acb_srcptr poly, slong len, slong prec) + int acb_poly_validate_real_roots(acb_srcptr roots, const acb_poly_t poly, slong prec) diff --git a/src/flint/flintlib/arb_fmpz_poly.pxd b/src/flint/flintlib/arb_fmpz_poly.pxd index 3317c9af..3b9f9878 100644 --- a/src/flint/flintlib/arb_fmpz_poly.pxd +++ b/src/flint/flintlib/arb_fmpz_poly.pxd @@ -1,11 +1,25 @@ from flint.flintlib.arb cimport arb_t from flint.flintlib.acb cimport acb_t, acb_ptr from flint.flintlib.fmpz_poly cimport fmpz_poly_t -from flint.flintlib.flint cimport ulong +from flint.flintlib.flint cimport ulong, slong +from flint.flintlib.fmpz cimport fmpz_struct cdef extern from "arb_fmpz_poly.h": - void arb_fmpz_poly_evaluate_arb(arb_t res, const fmpz_poly_t poly, const arb_t x, long prec) - void arb_fmpz_poly_evaluate_acb(acb_t res, const fmpz_poly_t poly, const acb_t x, long prec) - void arb_fmpz_poly_complex_roots(acb_ptr roots, const fmpz_poly_t poly, int flags, long prec) +# from here on is parsed + void _arb_fmpz_poly_evaluate_arb_horner(arb_t res, const fmpz_struct * poly, slong len, const arb_t x, slong prec) + void arb_fmpz_poly_evaluate_arb_horner(arb_t res, const fmpz_poly_t poly, const arb_t x, slong prec) + void _arb_fmpz_poly_evaluate_arb_rectangular(arb_t res, const fmpz_struct * poly, slong len, const arb_t x, slong prec) + void arb_fmpz_poly_evaluate_arb_rectangular(arb_t res, const fmpz_poly_t poly, const arb_t x, slong prec) + void _arb_fmpz_poly_evaluate_arb(arb_t res, const fmpz_struct * poly, slong len, const arb_t x, slong prec) + void arb_fmpz_poly_evaluate_arb(arb_t res, const fmpz_poly_t poly, const arb_t x, slong prec) + void _arb_fmpz_poly_evaluate_acb_horner(acb_t res, const fmpz_struct * poly, slong len, const acb_t x, slong prec) + void arb_fmpz_poly_evaluate_acb_horner(acb_t res, const fmpz_poly_t poly, const acb_t x, slong prec) + void _arb_fmpz_poly_evaluate_acb_rectangular(acb_t res, const fmpz_struct * poly, slong len, const acb_t x, slong prec) + void arb_fmpz_poly_evaluate_acb_rectangular(acb_t res, const fmpz_poly_t poly, const acb_t x, slong prec) + void _arb_fmpz_poly_evaluate_acb(acb_t res, const fmpz_struct * poly, slong len, const acb_t x, slong prec) + void arb_fmpz_poly_evaluate_acb(acb_t res, const fmpz_poly_t poly, const acb_t x, slong prec) ulong arb_fmpz_poly_deflation(const fmpz_poly_t poly) void arb_fmpz_poly_deflate(fmpz_poly_t res, const fmpz_poly_t poly, ulong deflation) + void arb_fmpz_poly_complex_roots(acb_ptr roots, const fmpz_poly_t poly, int flags, slong prec) + void arb_fmpz_poly_cos_minpoly(fmpz_poly_t res, ulong n) + void arb_fmpz_poly_gauss_period_minpoly(fmpz_poly_t res, ulong q, ulong n) diff --git a/src/flint/flintlib/arb_hypgeom.pxd b/src/flint/flintlib/arb_hypgeom.pxd index 47bbe71d..ad13d90c 100644 --- a/src/flint/flintlib/arb_hypgeom.pxd +++ b/src/flint/flintlib/arb_hypgeom.pxd @@ -1,69 +1,139 @@ -from flint.flintlib.arb cimport arb_t, arb_srcptr +from flint.flintlib.arb cimport arb_t, arb_srcptr, arb_ptr from flint.flintlib.arb_poly cimport arb_poly_t -from flint.flintlib.fmpz cimport fmpz_t -from flint.flintlib.flint cimport ulong +from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct +from flint.flintlib.flint cimport ulong, slong +from flint.flintlib.mag cimport mag_t +from flint.flintlib.fmpq cimport fmpq_t, fmpq_struct cdef extern from "arb_hypgeom.h": - void arb_hypgeom_pfq(arb_t res, arb_srcptr a, long p, arb_srcptr b, long q, const arb_t z, int regularized, long prec) - void arb_hypgeom_0f1(arb_t res, const arb_t a, const arb_t z, int regularized, long prec) - void arb_hypgeom_m(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, long prec) - void arb_hypgeom_1f1(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, long prec) - void arb_hypgeom_u(arb_t res, const arb_t a, const arb_t b, const arb_t z, long prec) - void arb_hypgeom_2f1(arb_t res, const arb_t a, const arb_t b, const arb_t c, const arb_t z, int regularized, long prec) - - void arb_hypgeom_erf(arb_t res, const arb_t z, long prec) - void arb_hypgeom_erf_series(arb_poly_t g, const arb_poly_t h, long len, long prec) - void arb_hypgeom_erfc(arb_t res, const arb_t z, long prec) - void arb_hypgeom_erfc_series(arb_poly_t g, const arb_poly_t h, long len, long prec) - void arb_hypgeom_erfi(arb_t res, const arb_t z, long prec) - void arb_hypgeom_erfi_series(arb_poly_t g, const arb_poly_t h, long len, long prec) - void arb_hypgeom_fresnel(arb_t res1, arb_t res2, const arb_t z, int normalized, long prec) - void arb_hypgeom_fresnel_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, int normalized, long len, long prec) - - void arb_hypgeom_ei(arb_t res, const arb_t z, long prec) - void arb_hypgeom_si(arb_t res, const arb_t z, long prec) - void arb_hypgeom_ci(arb_t res, const arb_t z, long prec) - void arb_hypgeom_shi(arb_t res, const arb_t z, long prec) - void arb_hypgeom_chi(arb_t res, const arb_t z, long prec) - void arb_hypgeom_li(arb_t res, const arb_t z, int offset, long prec) - void arb_hypgeom_ei_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void arb_hypgeom_si_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void arb_hypgeom_ci_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void arb_hypgeom_shi_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void arb_hypgeom_chi_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void arb_hypgeom_li_series(arb_poly_t res, const arb_poly_t h, int offset, long n, long prec) - - void arb_hypgeom_bessel_j(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_bessel_k(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_bessel_i(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_bessel_y(arb_t res, const arb_t nu, const arb_t z, long prec) - - void arb_hypgeom_bessel_k_scaled(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_bessel_i_scaled(arb_t res, const arb_t nu, const arb_t z, long prec) - - void arb_hypgeom_airy(arb_t ai, arb_t aip, arb_t bi, arb_t bip, const arb_t z, long prec) - void arb_hypgeom_airy_series(arb_poly_t ai, arb_poly_t ai_prime, arb_poly_t bi, arb_poly_t bi_prime, const arb_poly_t z, long len, long prec) - void arb_hypgeom_airy_zero(arb_t ai, arb_t aip, arb_t bi, arb_t bip, const fmpz_t n, long prec) - - void arb_hypgeom_coulomb(arb_t F, arb_t G, const arb_t l, const arb_t eta, const arb_t z, long prec) - void arb_hypgeom_coulomb_series(arb_poly_t F, arb_poly_t G, const arb_t l, const arb_t eta, const arb_poly_t z, long len, long prec) - - void arb_hypgeom_expint(arb_t res, const arb_t s, const arb_t z, long prec) - void arb_hypgeom_gamma_upper(arb_t res, const arb_t s, const arb_t z, int modified, long prec) - void arb_hypgeom_gamma_lower(arb_t res, const arb_t s, const arb_t z, int modified, long prec) - void arb_hypgeom_beta_lower(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, long prec) - - void arb_hypgeom_gamma_upper_series(arb_poly_t g, const arb_t s, const arb_poly_t h, int regularized, long n, long prec) - void arb_hypgeom_gamma_lower_series(arb_poly_t g, const arb_t s, const arb_poly_t h, int regularized, long n, long prec) - void arb_hypgeom_beta_lower_series(arb_poly_t g, const arb_t s, const arb_t t, const arb_poly_t h, int regularized, long n, long prec) - - void arb_hypgeom_chebyshev_t(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_chebyshev_u(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_jacobi_p(arb_t res, const arb_t n, const arb_t a, const arb_t b, const arb_t z, long prec) - void arb_hypgeom_gegenbauer_c(arb_t res, const arb_t n, const arb_t m, const arb_t z, long prec) - void arb_hypgeom_laguerre_l(arb_t res, const arb_t n, const arb_t m, const arb_t z, long prec) - void arb_hypgeom_hermite_h(arb_t res, const arb_t nu, const arb_t z, long prec) - void arb_hypgeom_legendre_p(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, long prec) - void arb_hypgeom_legendre_q(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, long prec) - - void arb_hypgeom_legendre_p_ui_root(arb_t res, arb_t weight, ulong n, ulong k, long prec) +# from here on is parsed + void _arb_hypgeom_rising_coeffs_1(ulong * c, ulong k, slong n) + void _arb_hypgeom_rising_coeffs_2(ulong * c, ulong k, slong n) + void _arb_hypgeom_rising_coeffs_fmpz(fmpz_struct * c, ulong k, slong n) + void arb_hypgeom_rising_ui_forward(arb_t res, const arb_t x, ulong n, slong prec) + void arb_hypgeom_rising_ui_bs(arb_t res, const arb_t x, ulong n, slong prec) + void arb_hypgeom_rising_ui_rs(arb_t res, const arb_t x, ulong n, ulong m, slong prec) + void arb_hypgeom_rising_ui_rec(arb_t res, const arb_t x, ulong n, slong prec) + void arb_hypgeom_rising_ui(arb_t res, const arb_t x, ulong n, slong prec) + void arb_hypgeom_rising(arb_t res, const arb_t x, const arb_t n, slong prec) + void arb_hypgeom_rising_ui_jet_powsum(arb_ptr res, const arb_t x, ulong n, slong len, slong prec) + void arb_hypgeom_rising_ui_jet_bs(arb_ptr res, const arb_t x, ulong n, slong len, slong prec) + void arb_hypgeom_rising_ui_jet_rs(arb_ptr res, const arb_t x, ulong n, ulong m, slong len, slong prec) + void arb_hypgeom_rising_ui_jet(arb_ptr res, const arb_t x, ulong n, slong len, slong prec) + void _arb_hypgeom_gamma_stirling_term_bounds(slong * bound, const mag_t zinv, slong N) + void arb_hypgeom_gamma_stirling_sum_horner(arb_t res, const arb_t z, slong N, slong prec) + void arb_hypgeom_gamma_stirling_sum_improved(arb_t res, const arb_t z, slong N, slong K, slong prec) + void arb_hypgeom_gamma_stirling(arb_t res, const arb_t x, int reciprocal, slong prec) + int arb_hypgeom_gamma_taylor(arb_t res, const arb_t x, int reciprocal, slong prec) + void arb_hypgeom_gamma(arb_t res, const arb_t x, slong prec) + void arb_hypgeom_gamma_fmpq(arb_t res, const fmpq_t x, slong prec) + void arb_hypgeom_gamma_fmpz(arb_t res, const fmpz_t x, slong prec) + void arb_hypgeom_rgamma(arb_t res, const arb_t x, slong prec) + void arb_hypgeom_lgamma(arb_t res, const arb_t x, slong prec) + void arb_hypgeom_central_bin_ui(arb_t res, ulong n, slong prec) + void arb_hypgeom_pfq(arb_t res, arb_srcptr a, slong p, arb_srcptr b, slong q, const arb_t z, int regularized, slong prec) + void arb_hypgeom_0f1(arb_t res, const arb_t a, const arb_t z, int regularized, slong prec) + void arb_hypgeom_m(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void arb_hypgeom_1f1(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void arb_hypgeom_1f1_integration(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void arb_hypgeom_u(arb_t res, const arb_t a, const arb_t b, const arb_t z, slong prec) + void arb_hypgeom_u_integration(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void arb_hypgeom_2f1(arb_t res, const arb_t a, const arb_t b, const arb_t c, const arb_t z, int regularized, slong prec) + void arb_hypgeom_2f1_integration(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void arb_hypgeom_erf(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_erf_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_erf_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_erfc(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_erfc_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_erfc_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_erfi(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_erfi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_erfi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_erfinv(arb_t res, const arb_t z, slong prec) + void arb_hypgeom_erfcinv(arb_t res, const arb_t z, slong prec) + void arb_hypgeom_fresnel(arb_t res1, arb_t res2, const arb_t z, int normalized, slong prec) + void _arb_hypgeom_fresnel_series(arb_ptr res1, arb_ptr res2, arb_srcptr z, slong zlen, int normalized, slong len, slong prec) + void arb_hypgeom_fresnel_series(arb_poly_t res1, arb_poly_t res2, const arb_poly_t z, int normalized, slong len, slong prec) + void arb_hypgeom_gamma_upper(arb_t res, const arb_t s, const arb_t z, int regularized, slong prec) + void arb_hypgeom_gamma_upper_integration(arb_t res, const arb_t s, const arb_t z, int regularized, slong prec) + void _arb_hypgeom_gamma_upper_series(arb_ptr res, const arb_t s, arb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void arb_hypgeom_gamma_upper_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec) + void arb_hypgeom_gamma_lower(arb_t res, const arb_t s, const arb_t z, int regularized, slong prec) + void _arb_hypgeom_gamma_lower_series(arb_ptr res, const arb_t s, arb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void arb_hypgeom_gamma_lower_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec) + void arb_hypgeom_beta_lower(arb_t res, const arb_t a, const arb_t b, const arb_t z, int regularized, slong prec) + void _arb_hypgeom_beta_lower_series(arb_ptr res, const arb_t a, const arb_t b, arb_srcptr z, slong zlen, int regularized, slong n, slong prec) + void arb_hypgeom_beta_lower_series(arb_poly_t res, const arb_t a, const arb_t b, const arb_poly_t z, int regularized, slong n, slong prec) + void _arb_hypgeom_gamma_lower_sum_rs_1(arb_t res, ulong p, ulong q, const arb_t z, slong N, slong prec) + void _arb_hypgeom_gamma_upper_sum_rs_1(arb_t res, ulong p, ulong q, const arb_t z, slong N, slong prec) + slong _arb_hypgeom_gamma_upper_fmpq_inf_choose_N(mag_t err, const fmpq_t a, const arb_t z, const mag_t abs_tol) + void _arb_hypgeom_gamma_upper_fmpq_inf_bsplit(arb_t res, const fmpq_t a, const arb_t z, slong N, slong prec) + slong _arb_hypgeom_gamma_lower_fmpq_0_choose_N(mag_t err, const fmpq_t a, const arb_t z, const mag_t abs_tol) + void _arb_hypgeom_gamma_lower_fmpq_0_bsplit(arb_t res, const fmpq_t a, const arb_t z, slong N, slong prec) + slong _arb_hypgeom_gamma_upper_singular_si_choose_N(mag_t err, slong n, const arb_t z, const mag_t abs_tol) + void _arb_hypgeom_gamma_upper_singular_si_bsplit(arb_t res, slong n, const arb_t z, slong N, slong prec) + void _arb_gamma_upper_fmpq_step_bsplit(arb_t Gz1, const fmpq_t a, const arb_t z0, const arb_t z1, const arb_t Gz0, const arb_t expmz0, const mag_t abs_tol, slong prec) + void arb_hypgeom_expint(arb_t res, const arb_t s, const arb_t z, slong prec) + void arb_hypgeom_ei(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_ei_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_ei_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void _arb_hypgeom_si_asymp(arb_t res, const arb_t z, slong N, slong prec) + void _arb_hypgeom_si_1f2(arb_t res, const arb_t z, slong N, slong wp, slong prec) + void arb_hypgeom_si(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_si_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_si_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void _arb_hypgeom_ci_asymp(arb_t res, const arb_t z, slong N, slong prec) + void _arb_hypgeom_ci_2f3(arb_t res, const arb_t z, slong N, slong wp, slong prec) + void arb_hypgeom_ci(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_ci_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_ci_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_shi(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_shi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_shi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_chi(arb_t res, const arb_t z, slong prec) + void _arb_hypgeom_chi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_chi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_li(arb_t res, const arb_t z, int offset, slong prec) + void _arb_hypgeom_li_series(arb_ptr res, arb_srcptr z, slong zlen, int offset, slong len, slong prec) + void arb_hypgeom_li_series(arb_poly_t res, const arb_poly_t z, int offset, slong len, slong prec) + void arb_hypgeom_bessel_j(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_y(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_jy(arb_t res1, arb_t res2, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_i(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_i_scaled(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_k(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_k_scaled(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_bessel_i_integration(arb_t res, const arb_t nu, const arb_t z, int scaled, slong prec) + void arb_hypgeom_bessel_k_integration(arb_t res, const arb_t nu, const arb_t z, int scaled, slong prec) + void arb_hypgeom_airy(arb_t ai, arb_t ai_prime, arb_t bi, arb_t bi_prime, const arb_t z, slong prec) + void arb_hypgeom_airy_jet(arb_ptr ai, arb_ptr bi, const arb_t z, slong len, slong prec) + void _arb_hypgeom_airy_series(arb_ptr ai, arb_ptr ai_prime, arb_ptr bi, arb_ptr bi_prime, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_airy_series(arb_poly_t ai, arb_poly_t ai_prime, arb_poly_t bi, arb_poly_t bi_prime, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_airy_zero(arb_t a, arb_t a_prime, arb_t b, arb_t b_prime, const fmpz_t n, slong prec) + void arb_hypgeom_coulomb(arb_t F, arb_t G, const arb_t l, const arb_t eta, const arb_t z, slong prec) + void arb_hypgeom_coulomb_jet(arb_ptr F, arb_ptr G, const arb_t l, const arb_t eta, const arb_t z, slong len, slong prec) + void _arb_hypgeom_coulomb_series(arb_ptr F, arb_ptr G, const arb_t l, const arb_t eta, arb_srcptr z, slong zlen, slong len, slong prec) + void arb_hypgeom_coulomb_series(arb_poly_t F, arb_poly_t G, const arb_t l, const arb_t eta, const arb_poly_t z, slong len, slong prec) + void arb_hypgeom_chebyshev_t(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_chebyshev_u(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_jacobi_p(arb_t res, const arb_t n, const arb_t a, const arb_t b, const arb_t z, slong prec) + void arb_hypgeom_gegenbauer_c(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec) + void arb_hypgeom_laguerre_l(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec) + void arb_hypgeom_hermite_h(arb_t res, const arb_t nu, const arb_t z, slong prec) + void arb_hypgeom_legendre_p(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, slong prec) + void arb_hypgeom_legendre_q(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, slong prec) + void arb_hypgeom_legendre_p_ui_deriv_bound(mag_t dp, mag_t dp2, ulong n, const arb_t x, const arb_t x2sub1) + void arb_hypgeom_legendre_p_ui_zero(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec) + void arb_hypgeom_legendre_p_ui_one(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec) + void arb_hypgeom_legendre_p_ui_asymp(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec) + void arb_hypgeom_legendre_p_rec(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec) + void arb_hypgeom_legendre_p_ui(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec) + void arb_hypgeom_legendre_p_ui_root(arb_t res, arb_t weight, ulong n, ulong k, slong prec) + void arb_hypgeom_dilog(arb_t res, const arb_t z, slong prec) + void arb_hypgeom_sum_fmpq_arb_forward(arb_t res, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_arb_rs(arb_t res, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_arb(arb_t res, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_imag_arb_forward(arb_t res1, arb_t res2, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_imag_arb_rs(arb_t res1, arb_t res2, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_imag_arb_bs(arb_t res1, arb_t res2, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) + void arb_hypgeom_sum_fmpq_imag_arb(arb_t res1, arb_t res2, const fmpq_struct * a, slong alen, const fmpq_struct * b, slong blen, const arb_t z, int reciprocal, slong N, slong prec) diff --git a/src/flint/flintlib/arb_mat.pxd b/src/flint/flintlib/arb_mat.pxd index 4db252f8..144b09d6 100644 --- a/src/flint/flintlib/arb_mat.pxd +++ b/src/flint/flintlib/arb_mat.pxd @@ -1,10 +1,10 @@ from flint.flintlib.arb cimport arb_ptr, arb_struct from flint.flintlib.fmpz_mat cimport fmpz_mat_t from flint.flintlib.fmpq_mat cimport fmpq_mat_t -from flint.flintlib.mag cimport mag_t -from flint.flintlib.flint cimport ulong +from flint.flintlib.mag cimport mag_t, mag_srcptr +from flint.flintlib.flint cimport ulong, slong, flint_rand_t from flint.flintlib.fmpz cimport fmpz_t -from flint.flintlib.arb cimport arb_t +from flint.flintlib.arb cimport arb_t, arb_srcptr from flint.flintlib.arb_poly cimport arb_poly_t cdef extern from "arb_mat.h": @@ -15,75 +15,120 @@ cdef extern from "arb_mat.h": arb_ptr * rows ctypedef arb_mat_struct arb_mat_t[1] - +#macros arb_struct * arb_mat_entry(arb_mat_t mat, long i, long j) long arb_mat_nrows(const arb_mat_t x) long arb_mat_ncols(const arb_mat_t x) - - void arb_mat_init(arb_mat_t mat, long r, long c) +# from here on is parsed + void arb_mat_init(arb_mat_t mat, slong r, slong c) void arb_mat_clear(arb_mat_t mat) - + slong arb_mat_allocated_bytes(const arb_mat_t x) + void arb_mat_window_init(arb_mat_t window, const arb_mat_t mat, slong r1, slong c1, slong r2, slong c2) + void arb_mat_window_clear(arb_mat_t window) void arb_mat_set(arb_mat_t dest, const arb_mat_t src) void arb_mat_set_fmpz_mat(arb_mat_t dest, const fmpz_mat_t src) - void arb_mat_set_fmpq_mat(arb_mat_t dest, const fmpq_mat_t src, long prec) - void arb_mat_printd(const arb_mat_t mat, long digits) + void arb_mat_set_round_fmpz_mat(arb_mat_t dest, const fmpz_mat_t src, slong prec) + void arb_mat_set_fmpq_mat(arb_mat_t dest, const fmpq_mat_t src, slong prec) + void arb_mat_randtest(arb_mat_t mat, flint_rand_t state, slong prec, slong mag_bits) + void arb_mat_printd(const arb_mat_t mat, slong digits) int arb_mat_equal(const arb_mat_t mat1, const arb_mat_t mat2) int arb_mat_overlaps(const arb_mat_t mat1, const arb_mat_t mat2) int arb_mat_contains(const arb_mat_t mat1, const arb_mat_t mat2) - int arb_mat_contains_fmpq_mat(const arb_mat_t mat1, const fmpq_mat_t mat2) int arb_mat_contains_fmpz_mat(const arb_mat_t mat1, const fmpz_mat_t mat2) - + int arb_mat_contains_fmpq_mat(const arb_mat_t mat1, const fmpq_mat_t mat2) + int arb_mat_eq(const arb_mat_t mat1, const arb_mat_t mat2) + int arb_mat_ne(const arb_mat_t mat1, const arb_mat_t mat2) + int arb_mat_is_empty(const arb_mat_t mat) + int arb_mat_is_square(const arb_mat_t mat) + int arb_mat_is_exact(const arb_mat_t mat) + int arb_mat_is_zero(const arb_mat_t mat) + int arb_mat_is_finite(const arb_mat_t mat) + int arb_mat_is_triu(const arb_mat_t mat) + int arb_mat_is_tril(const arb_mat_t mat) + int arb_mat_is_diag(const arb_mat_t mat) void arb_mat_zero(arb_mat_t mat) void arb_mat_one(arb_mat_t mat) - + void arb_mat_ones(arb_mat_t mat) + void arb_mat_indeterminate(arb_mat_t mat) + void arb_mat_hilbert(arb_mat_t mat, slong prec) + void arb_mat_pascal(arb_mat_t mat, int triangular, slong prec) + void arb_mat_stirling(arb_mat_t mat, int kind, slong prec) + void arb_mat_dct(arb_mat_t mat, int type, slong prec) + void arb_mat_transpose(arb_mat_t dest, const arb_mat_t src) void arb_mat_bound_inf_norm(mag_t b, const arb_mat_t A) - + void arb_mat_frobenius_norm(arb_t res, const arb_mat_t A, slong prec) + void arb_mat_bound_frobenius_norm(mag_t res, const arb_mat_t A) void arb_mat_neg(arb_mat_t dest, const arb_mat_t src) - void arb_mat_add(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, long prec) - void arb_mat_sub(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, long prec) - void arb_mat_mul(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, long prec) - void arb_mat_pow_ui(arb_mat_t B, const arb_mat_t A, ulong exp, long prec) - - void arb_mat_scalar_mul_2exp_si(arb_mat_t B, const arb_mat_t A, long c) - void arb_mat_scalar_addmul_si(arb_mat_t B, const arb_mat_t A, long c, long prec) - void arb_mat_scalar_mul_si(arb_mat_t B, const arb_mat_t A, long c, long prec) - void arb_mat_scalar_div_si(arb_mat_t B, const arb_mat_t A, long c, long prec) - void arb_mat_scalar_addmul_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, long prec) - void arb_mat_scalar_mul_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, long prec) - void arb_mat_scalar_div_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, long prec) - void arb_mat_scalar_addmul_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, long prec) - void arb_mat_scalar_mul_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, long prec) - void arb_mat_scalar_div_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, long prec) - - int arb_mat_lu(long * P, arb_mat_t LU, const arb_mat_t A, long prec) - void arb_mat_solve_lu_precomp(arb_mat_t X, const long * perm, const arb_mat_t A, const arb_mat_t B, long prec) - int arb_mat_solve(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, long prec) - int arb_mat_solve_lu(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, long prec) - int arb_mat_solve_precond(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, long prec) - int arb_mat_inv(arb_mat_t X, const arb_mat_t A, long prec) - void arb_mat_det(arb_t det, const arb_mat_t A, long prec) - - void arb_mat_exp(arb_mat_t B, const arb_mat_t A, long prec) - - void _arb_mat_charpoly(arb_ptr cp, const arb_mat_t mat, long prec) - void arb_mat_charpoly(arb_poly_t cp, const arb_mat_t mat, long prec) - - void arb_mat_transpose(arb_mat_t B, const arb_mat_t A) - - void arb_mat_trace(arb_t trace, const arb_mat_t mat, long prec) - void arb_mat_ones(arb_mat_t mat) - void arb_mat_hilbert(arb_mat_t mat, long prec) - void arb_mat_pascal(arb_mat_t mat, int triangular, long prec) - void arb_mat_stirling(arb_mat_t mat, int kind, long prec) - void arb_mat_dct(arb_mat_t mat, int type, long prec) - + void arb_mat_add(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, slong prec) + void arb_mat_sub(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, slong prec) + void arb_mat_mul_classical(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong prec) + void arb_mat_mul_threaded(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong prec) + void arb_mat_mul_block(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong prec) + void arb_mat_mul(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, slong prec) + void arb_mat_mul_entrywise(arb_mat_t C, const arb_mat_t A, const arb_mat_t B, slong prec) + void arb_mat_sqr_classical(arb_mat_t B, const arb_mat_t A, slong prec) + void arb_mat_sqr(arb_mat_t res, const arb_mat_t mat, slong prec) + void arb_mat_pow_ui(arb_mat_t res, const arb_mat_t mat, ulong exp, slong prec) + void _arb_mat_addmul_rad_mag_fast(arb_mat_t C, mag_srcptr A, mag_srcptr B, slong ar, slong ac, slong bc) + void arb_mat_approx_mul(arb_mat_t res, const arb_mat_t mat1, const arb_mat_t mat2, slong prec) + void arb_mat_scalar_mul_2exp_si(arb_mat_t B, const arb_mat_t A, slong c) + void arb_mat_scalar_addmul_si(arb_mat_t B, const arb_mat_t A, slong c, slong prec) + void arb_mat_scalar_addmul_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, slong prec) + void arb_mat_scalar_addmul_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, slong prec) + void arb_mat_scalar_mul_si(arb_mat_t B, const arb_mat_t A, slong c, slong prec) + void arb_mat_scalar_mul_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, slong prec) + void arb_mat_scalar_mul_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, slong prec) + void arb_mat_scalar_div_si(arb_mat_t B, const arb_mat_t A, slong c, slong prec) + void arb_mat_scalar_div_fmpz(arb_mat_t B, const arb_mat_t A, const fmpz_t c, slong prec) + void arb_mat_scalar_div_arb(arb_mat_t B, const arb_mat_t A, const arb_t c, slong prec) + int arb_mat_lu_classical(slong * perm, arb_mat_t LU, const arb_mat_t A, slong prec) + int arb_mat_lu_recursive(slong * perm, arb_mat_t LU, const arb_mat_t A, slong prec) + int arb_mat_lu(slong * perm, arb_mat_t LU, const arb_mat_t A, slong prec) + void arb_mat_solve_tril_classical(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_tril_recursive(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_tril(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_triu_classical(arb_mat_t X, const arb_mat_t U, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_triu_recursive(arb_mat_t X, const arb_mat_t U, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_triu(arb_mat_t X, const arb_mat_t U, const arb_mat_t B, int unit, slong prec) + void arb_mat_solve_lu_precomp(arb_mat_t X, const slong * perm, const arb_mat_t LU, const arb_mat_t B, slong prec) + int arb_mat_solve(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, slong prec) + int arb_mat_solve_lu(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, slong prec) + int arb_mat_solve_precond(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, slong prec) + int arb_mat_solve_preapprox(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, const arb_mat_t R, const arb_mat_t T, slong prec) + int arb_mat_inv(arb_mat_t X, const arb_mat_t A, slong prec) + void arb_mat_det_lu(arb_t det, const arb_mat_t A, slong prec) + void arb_mat_det_precond(arb_t det, const arb_mat_t A, slong prec) + void arb_mat_det(arb_t det, const arb_mat_t A, slong prec) + void arb_mat_approx_solve_triu(arb_mat_t X, const arb_mat_t U, const arb_mat_t B, int unit, slong prec) + void arb_mat_approx_solve_tril(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, int unit, slong prec) + int arb_mat_approx_lu(slong * P, arb_mat_t LU, const arb_mat_t A, slong prec) + void arb_mat_approx_solve_lu_precomp(arb_mat_t X, const slong * perm, const arb_mat_t A, const arb_mat_t B, slong prec) + int arb_mat_approx_solve(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, slong prec) + int arb_mat_approx_inv(arb_mat_t X, const arb_mat_t A, slong prec) + int _arb_mat_cholesky_banachiewicz(arb_mat_t A, slong prec) + int arb_mat_cho(arb_mat_t L, const arb_mat_t A, slong prec) + void arb_mat_solve_cho_precomp(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, slong prec) + int arb_mat_spd_solve(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, slong prec) + void arb_mat_inv_cho_precomp(arb_mat_t X, const arb_mat_t L, slong prec) + int arb_mat_spd_inv(arb_mat_t X, const arb_mat_t A, slong prec) + int _arb_mat_ldl_inplace(arb_mat_t A, slong prec) + int _arb_mat_ldl_golub_and_van_loan(arb_mat_t A, slong prec) + int arb_mat_ldl(arb_mat_t res, const arb_mat_t A, slong prec) + void arb_mat_solve_ldl_precomp(arb_mat_t X, const arb_mat_t L, const arb_mat_t B, slong prec) + void arb_mat_inv_ldl_precomp(arb_mat_t X, const arb_mat_t L, slong prec) + void _arb_mat_charpoly(arb_ptr poly, const arb_mat_t mat, slong prec) + void arb_mat_charpoly(arb_poly_t poly, const arb_mat_t mat, slong prec) + void _arb_mat_companion(arb_mat_t mat, arb_srcptr poly, slong prec) + void arb_mat_companion(arb_mat_t mat, const arb_poly_t poly, slong prec) + void arb_mat_exp_taylor_sum(arb_mat_t S, const arb_mat_t A, slong N, slong prec) + void arb_mat_exp(arb_mat_t B, const arb_mat_t A, slong prec) + void arb_mat_trace(arb_t trace, const arb_mat_t mat, slong prec) + void _arb_mat_diag_prod(arb_t res, const arb_mat_t mat, slong a, slong b, slong prec) + void arb_mat_diag_prod(arb_t res, const arb_mat_t mat, slong prec) + void arb_mat_entrywise_is_zero(fmpz_mat_t dest, const arb_mat_t src) + void arb_mat_entrywise_not_is_zero(fmpz_mat_t dest, const arb_mat_t src) + slong arb_mat_count_is_zero(const arb_mat_t mat) + slong arb_mat_count_not_is_zero(const arb_mat_t mat) void arb_mat_get_mid(arb_mat_t B, const arb_mat_t A) - - int arb_mat_eq(const arb_mat_t mat1, const arb_mat_t mat2) - int arb_mat_ne(const arb_mat_t mat1, const arb_mat_t mat2) - int arb_mat_equal(const arb_mat_t mat1, const arb_mat_t mat2) - - void arb_mat_frobenius_norm(arb_t res, const arb_mat_t A, long prec) - - int arb_mat_approx_solve(arb_mat_t X, const arb_mat_t A, const arb_mat_t B, long prec) + void arb_mat_add_error_mag(arb_mat_t mat, const mag_t err) diff --git a/src/flint/flintlib/arb_poly.pxd b/src/flint/flintlib/arb_poly.pxd index 48f1b241..6891321b 100644 --- a/src/flint/flintlib/arb_poly.pxd +++ b/src/flint/flintlib/arb_poly.pxd @@ -1,8 +1,10 @@ -from flint.flintlib.flint cimport flint_rand_t, ulong +from flint.flintlib.flint cimport flint_rand_t, ulong, slong from flint.flintlib.arb cimport arb_ptr, arb_t, arb_srcptr from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t -from flint.flintlib.acb cimport acb_t +from flint.flintlib.acb cimport acb_t, acb_srcptr +from flint.flintlib.mag cimport mag_t +from flint.flintlib.arf cimport arf_t cdef extern from "arb_poly.h": ctypedef struct arb_poly_struct: @@ -11,203 +13,250 @@ cdef extern from "arb_poly.h": long alloc ctypedef arb_poly_struct arb_poly_t[1] + #macros + arb_ptr arb_poly_get_coeff_ptr(arb_poly_t poly, long n) + +# from here on is parsed void arb_poly_init(arb_poly_t poly) - void arb_poly_init2(arb_poly_t poly, long len) void arb_poly_clear(arb_poly_t poly) - void arb_poly_fit_length(arb_poly_t poly, long len) - void _arb_poly_set_length(arb_poly_t poly, long len) + void arb_poly_fit_length(arb_poly_t poly, slong len) + void _arb_poly_set_length(arb_poly_t poly, slong len) void _arb_poly_normalise(arb_poly_t poly) - void arb_poly_swap(arb_poly_t poly1, arb_poly_t poly2) - void arb_poly_set(arb_poly_t poly, const arb_poly_t src) - void arb_poly_set_round(arb_poly_t dest, const arb_poly_t src, long prec) - long arb_poly_length(const arb_poly_t poly) - long arb_poly_degree(const arb_poly_t poly) + slong arb_poly_allocated_bytes(const arb_poly_t x) + slong arb_poly_length(const arb_poly_t poly) + slong arb_poly_degree(const arb_poly_t poly) + int arb_poly_is_zero(const arb_poly_t poly) + int arb_poly_is_one(const arb_poly_t poly) + int arb_poly_is_x(const arb_poly_t poly) void arb_poly_zero(arb_poly_t poly) void arb_poly_one(arb_poly_t poly) - void arb_poly_set_coeff_si(arb_poly_t poly, long n, long x) - void arb_poly_set_coeff_arb(arb_poly_t poly, long n, const arb_t x) - void arb_poly_get_coeff_arb(arb_t x, const arb_poly_t poly, long n) - arb_ptr arb_poly_get_coeff_ptr(arb_poly_t poly, long n) - void _arb_poly_reverse(arb_ptr res, arb_srcptr poly, long len, long n) - void _arb_poly_shift_right(arb_ptr res, arb_srcptr poly, long len, long n) - void arb_poly_shift_right(arb_poly_t res, const arb_poly_t poly, long n) - void _arb_poly_shift_left(arb_ptr res, arb_srcptr poly, long len, long n) - void arb_poly_shift_left(arb_poly_t res, const arb_poly_t poly, long n) - void arb_poly_truncate(arb_poly_t poly, long newlen) - void arb_poly_set_fmpz_poly(arb_poly_t poly, const fmpz_poly_t src, long prec) - void arb_poly_set_fmpq_poly(arb_poly_t poly, const fmpq_poly_t src, long prec) void arb_poly_set_arb(arb_poly_t poly, const arb_t c) - void arb_poly_set_si(arb_poly_t poly, long c) + void arb_poly_set(arb_poly_t dest, const arb_poly_t src) + void arb_poly_set_round(arb_poly_t dest, const arb_poly_t src, slong prec) + void arb_poly_set_trunc(arb_poly_t dest, const arb_poly_t src, slong n) + void arb_poly_set_trunc_round(arb_poly_t dest, const arb_poly_t src, slong n, slong prec) + void arb_poly_set_coeff_si(arb_poly_t poly, slong n, slong c) + void arb_poly_set_coeff_arb(arb_poly_t poly, slong n, const arb_t c) + void arb_poly_get_coeff_arb(arb_t v, const arb_poly_t poly, slong n) + void _arb_poly_shift_right(arb_ptr res, arb_srcptr poly, slong len, slong n) + void arb_poly_shift_right(arb_poly_t res, const arb_poly_t poly, slong n) + void _arb_poly_shift_left(arb_ptr res, arb_srcptr poly, slong len, slong n) + void arb_poly_shift_left(arb_poly_t res, const arb_poly_t poly, slong n) + void arb_poly_truncate(arb_poly_t poly, slong n) + slong arb_poly_valuation(const arb_poly_t poly) + void arb_poly_set_fmpz_poly(arb_poly_t poly, const fmpz_poly_t src, slong prec) + void arb_poly_set_fmpq_poly(arb_poly_t poly, const fmpq_poly_t src, slong prec) + void arb_poly_set_si(arb_poly_t poly, slong src) + void arb_poly_printd(const arb_poly_t poly, slong digits) + void arb_poly_randtest(arb_poly_t poly, flint_rand_t state, slong len, slong prec, slong mag_bits) int arb_poly_contains(const arb_poly_t poly1, const arb_poly_t poly2) int arb_poly_contains_fmpz_poly(const arb_poly_t poly1, const fmpz_poly_t poly2) int arb_poly_contains_fmpq_poly(const arb_poly_t poly1, const fmpq_poly_t poly2) int arb_poly_equal(const arb_poly_t A, const arb_poly_t B) - int _arb_poly_overlaps(arb_srcptr poly1, long len1, arb_srcptr poly2, long len2) + int _arb_poly_overlaps(arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2) int arb_poly_overlaps(const arb_poly_t poly1, const arb_poly_t poly2) - void arb_poly_printd(const arb_poly_t poly, long digits) - void arb_poly_randtest(arb_poly_t poly, flint_rand_t state, long len, long prec, long mag_bits) - void _arb_poly_add(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long prec) - void arb_poly_add(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void _arb_poly_sub(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long prec) - void arb_poly_sub(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void arb_poly_neg(arb_poly_t res, const arb_poly_t poly) - void arb_poly_scalar_mul_2exp_si(arb_poly_t res, const arb_poly_t poly, long c) - void _arb_poly_mullow(arb_ptr C, arb_srcptr A, long lenA, arb_srcptr B, long lenB, long n, long prec) - void arb_poly_mullow(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long len, long prec) - void _arb_poly_mul(arb_ptr C, arb_srcptr A, long lenA, arb_srcptr B, long lenB, long prec) - void arb_poly_mul(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void _arb_poly_inv_series(arb_ptr Qinv, arb_srcptr Q, long Qlen, long len, long prec) - void arb_poly_inv_series(arb_poly_t Qinv, const arb_poly_t Q, long n, long prec) - void _arb_poly_div_series(arb_ptr Q, arb_srcptr A, long Alen, arb_srcptr B, long Blen, long n, long prec) - void arb_poly_div_series(arb_poly_t Q, const arb_poly_t A, const arb_poly_t B, long n, long prec) - void _arb_poly_div(arb_ptr Q, arb_srcptr A, long lenA, arb_srcptr B, long lenB, long prec) - void _arb_poly_divrem(arb_ptr Q, arb_ptr R, arb_srcptr A, long lenA, arb_srcptr B, long lenB, long prec) - void _arb_poly_rem(arb_ptr R, arb_srcptr A, long lenA, arb_srcptr B, long lenB, long prec) - int arb_poly_divrem(arb_poly_t Q, arb_poly_t R, const arb_poly_t A, const arb_poly_t B, long prec) - void _arb_poly_div_root(arb_ptr Q, arb_t R, arb_srcptr A, long len, const arb_t c, long prec) - void _arb_poly_product_roots(arb_ptr poly, arb_srcptr xs, long n, long prec) - void arb_poly_product_roots(arb_poly_t poly, arb_srcptr xs, long n, long prec) - arb_ptr * _arb_poly_tree_alloc(long len) - void _arb_poly_tree_free(arb_ptr * tree, long len) - void _arb_poly_tree_build(arb_ptr * tree, arb_srcptr roots, long len, long prec) - void _arb_poly_compose(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long prec) - void arb_poly_compose(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void _arb_poly_compose_horner(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long prec) - void arb_poly_compose_horner(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void _arb_poly_compose_divconquer(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long prec) - void arb_poly_compose_divconquer(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long prec) - void _arb_poly_compose_series_horner(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long n, long prec) - void arb_poly_compose_series_horner(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long n, long prec) - void _arb_poly_compose_series(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long n, long prec) - void arb_poly_compose_series(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long n, long prec) - void _arb_poly_revert_series_lagrange(arb_ptr Qinv, arb_srcptr Q, long Qlen, long n, long prec) - void arb_poly_revert_series_lagrange(arb_poly_t Qinv, const arb_poly_t Q, long n, long prec) - void _arb_poly_revert_series_newton(arb_ptr Qinv, arb_srcptr Q, long Qlen, long n, long prec) - void arb_poly_revert_series_newton(arb_poly_t Qinv, const arb_poly_t Q, long n, long prec) - void _arb_poly_revert_series_lagrange_fast(arb_ptr Qinv, arb_srcptr Q, long Qlen, long n, long prec) - void arb_poly_revert_series_lagrange_fast(arb_poly_t Qinv, const arb_poly_t Q, long n, long prec) - void _arb_poly_revert_series(arb_ptr Qinv, arb_srcptr Q, long Qlen, long n, long prec) - void arb_poly_revert_series(arb_poly_t Qinv, const arb_poly_t Q, long n, long prec) - - void _arb_poly_evaluate_horner(arb_t res, arb_srcptr f, long len, const arb_t a, long prec) - void arb_poly_evaluate_horner(arb_t res, const arb_poly_t f, const arb_t a, long prec) - void _arb_poly_evaluate_rectangular(arb_t y, arb_srcptr poly, long len, const arb_t x, long prec) - void arb_poly_evaluate_rectangular(arb_t res, const arb_poly_t f, const arb_t a, long prec) - void _arb_poly_evaluate(arb_t res, arb_srcptr f, long len, const arb_t a, long prec) - void arb_poly_evaluate(arb_t res, const arb_poly_t f, const arb_t a, long prec) - void _arb_poly_evaluate2_horner(arb_t y, arb_t z, arb_srcptr f, long len, const arb_t x, long prec) - void arb_poly_evaluate2_horner(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, long prec) - void _arb_poly_evaluate2_rectangular(arb_t y, arb_t z, arb_srcptr f, long len, const arb_t x, long prec) - void arb_poly_evaluate2_rectangular(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, long prec) - void _arb_poly_evaluate2(arb_t y, arb_t z, arb_srcptr f, long len, const arb_t x, long prec) - void arb_poly_evaluate2(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, long prec) - - void _arb_poly_evaluate_vec_iter(arb_ptr ys, arb_srcptr poly, long plen, arb_srcptr xs, long n, long prec) - void arb_poly_evaluate_vec_iter(arb_ptr ys, const arb_poly_t poly, arb_srcptr xs, long n, long prec) - void _arb_poly_evaluate_vec_fast_precomp(arb_ptr vs, arb_srcptr poly, long plen, arb_ptr * tree, long len, long prec) - void _arb_poly_evaluate_vec_fast(arb_ptr ys, arb_srcptr poly, long plen, arb_srcptr xs, long n, long prec) - void arb_poly_evaluate_vec_fast(arb_ptr ys, const arb_poly_t poly, arb_srcptr xs, long n, long prec) - void _arb_poly_interpolate_newton(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, long n, long prec) - void arb_poly_interpolate_newton(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, long n, long prec) - void _arb_poly_interpolate_barycentric(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, long n, long prec) - void arb_poly_interpolate_barycentric(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, long n, long prec) - void _arb_poly_interpolation_weights(arb_ptr w, arb_ptr * tree, long len, long prec) - void _arb_poly_interpolate_fast_precomp(arb_ptr poly, arb_srcptr ys, arb_ptr * tree, arb_srcptr weights, long len, long prec) - void _arb_poly_interpolate_fast(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, long len, long prec) - void arb_poly_interpolate_fast(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, long n, long prec) - - void _arb_poly_derivative(arb_ptr res, arb_srcptr poly, long len, long prec) - void arb_poly_derivative(arb_poly_t res, const arb_poly_t poly, long prec) - void _arb_poly_integral(arb_ptr res, arb_srcptr poly, long len, long prec) - void arb_poly_integral(arb_poly_t res, const arb_poly_t poly, long prec) - - void arb_poly_borel_transform(arb_poly_t res, const arb_poly_t poly, long prec) - void _arb_poly_borel_transform(arb_ptr res, arb_srcptr poly, long len, long prec) - void arb_poly_inv_borel_transform(arb_poly_t res, const arb_poly_t poly, long prec) - void _arb_poly_inv_borel_transform(arb_ptr res, arb_srcptr poly, long len, long prec) - void _arb_poly_binomial_transform_basecase(arb_ptr b, arb_srcptr a, long alen, long len, long prec) - void arb_poly_binomial_transform_basecase(arb_poly_t b, const arb_poly_t a, long len, long prec) - void _arb_poly_binomial_transform_convolution(arb_ptr b, arb_srcptr a, long alen, long len, long prec) - void arb_poly_binomial_transform_convolution(arb_poly_t b, const arb_poly_t a, long len, long prec) - void _arb_poly_binomial_transform(arb_ptr b, arb_srcptr a, long alen, long len, long prec) - void arb_poly_binomial_transform(arb_poly_t b, const arb_poly_t a, long len, long prec) - - void _arb_poly_pow_ui_trunc_binexp(arb_ptr res, arb_srcptr f, long flen, ulong exp, long len, long prec) - void arb_poly_pow_ui_trunc_binexp(arb_poly_t res, const arb_poly_t poly, ulong exp, long len, long prec) - void _arb_poly_pow_ui(arb_ptr res, arb_srcptr f, long flen, ulong exp, long prec) - void arb_poly_pow_ui(arb_poly_t res, const arb_poly_t poly, ulong exp, long prec) - void _arb_poly_pow_series(arb_ptr h, arb_srcptr f, long flen, arb_srcptr g, long glen, long len, long prec) - void arb_poly_pow_series(arb_poly_t h, const arb_poly_t f, const arb_poly_t g, long len, long prec) - void _arb_poly_pow_arb_series(arb_ptr h, arb_srcptr f, long flen, const arb_t g, long len, long prec) - void arb_poly_pow_arb_series(arb_poly_t h, const arb_poly_t f, const arb_t g, long len, long prec) - void _arb_poly_rsqrt_series(arb_ptr g, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_rsqrt_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_sqrt_series(arb_ptr g, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_sqrt_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_log_series(arb_ptr res, arb_srcptr f, long flen, long n, long prec) - void arb_poly_log_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_atan_series(arb_ptr res, arb_srcptr f, long flen, long n, long prec) - void arb_poly_atan_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_asin_series(arb_ptr res, arb_srcptr f, long flen, long n, long prec) - void arb_poly_asin_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_acos_series(arb_ptr res, arb_srcptr f, long flen, long n, long prec) - void arb_poly_acos_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_exp_series_basecase(arb_ptr f, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_exp_series_basecase(arb_poly_t f, const arb_poly_t h, long n, long prec) - void _arb_poly_exp_series(arb_ptr f, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_exp_series(arb_poly_t f, const arb_poly_t h, long n, long prec) - void _arb_poly_sin_cos_series_basecase(arb_ptr s, arb_ptr c, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_sin_cos_series_basecase(arb_poly_t s, arb_poly_t c, const arb_poly_t h, long n, long prec) - void _arb_poly_sin_cos_series_tangent(arb_ptr s, arb_ptr c, const arb_srcptr h, long hlen, long len, long prec) - void arb_poly_sin_cos_series_tangent(arb_poly_t s, arb_poly_t c, const arb_poly_t h, long n, long prec) - void _arb_poly_sin_cos_series(arb_ptr s, arb_ptr c, const arb_srcptr h, long hlen, long len, long prec) - void arb_poly_sin_cos_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, long n, long prec) - void _arb_poly_sin_series(arb_ptr g, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_sin_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_cos_series(arb_ptr g, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_cos_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_tan_series(arb_ptr g, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_tan_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_compose_series_brent_kung(arb_ptr res, arb_srcptr poly1, long len1, arb_srcptr poly2, long len2, long n, long prec) - void arb_poly_compose_series_brent_kung(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, long n, long prec) - void _arb_poly_evaluate_acb_horner(acb_t res, arb_srcptr f, long len, const acb_t x, long prec) - void arb_poly_evaluate_acb_horner(acb_t res, const arb_poly_t f, const acb_t a, long prec) - void _arb_poly_evaluate_acb_rectangular(acb_t y, arb_srcptr poly, long len, const acb_t x, long prec) - void arb_poly_evaluate_acb_rectangular(acb_t res, const arb_poly_t f, const acb_t a, long prec) - void _arb_poly_evaluate_acb(acb_t res, arb_srcptr f, long len, const acb_t x, long prec) - void arb_poly_evaluate_acb(acb_t res, const arb_poly_t f, const acb_t a, long prec) - void _arb_poly_evaluate2_acb_horner(acb_t y, acb_t z, arb_srcptr f, long len, const acb_t x, long prec) - void arb_poly_evaluate2_acb_horner(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, long prec) - void _arb_poly_evaluate2_acb_rectangular(acb_t y, acb_t z, arb_srcptr f, long len, const acb_t x, long prec) - void arb_poly_evaluate2_acb_rectangular(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, long prec) - void _arb_poly_evaluate2_acb(acb_t y, acb_t z, arb_srcptr f, long len, const acb_t x, long prec) - void arb_poly_evaluate2_acb(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, long prec) - void _arb_poly_gamma_series(arb_ptr res, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_gamma_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_rgamma_series(arb_ptr res, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_rgamma_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_lgamma_series(arb_ptr res, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_lgamma_series(arb_poly_t res, const arb_poly_t f, long n, long prec) - void _arb_poly_rising_ui_series(arb_ptr res, arb_srcptr f, long flen, ulong r, long trunc, long prec) - void arb_poly_rising_ui_series(arb_poly_t res, const arb_poly_t f, ulong r, long trunc, long prec) - void _arb_poly_zeta_series(arb_ptr res, arb_srcptr h, long hlen, const arb_t a, int deflate, long len, long prec) - void arb_poly_zeta_series(arb_poly_t res, const arb_poly_t f, const arb_t a, int deflate, long n, long prec) - void _arb_poly_riemann_siegel_theta_series(arb_ptr res, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_riemann_siegel_theta_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - void _arb_poly_riemann_siegel_z_series(arb_ptr res, arb_srcptr h, long hlen, long len, long prec) - void arb_poly_riemann_siegel_z_series(arb_poly_t res, const arb_poly_t h, long n, long prec) - - void arb_poly_swinnerton_dyer_ui(arb_poly_t poly, ulong n, long prec) - int arb_poly_get_unique_fmpz_poly(fmpz_poly_t res, const arb_poly_t src) - - void _arb_poly_sin_cos_pi_series(arb_ptr s, arb_ptr c, const arb_srcptr h, long hlen, long len, long prec) - void arb_poly_sin_cos_pi_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, long n, long prec) - void _arb_poly_sin_pi_series(arb_ptr g, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_sin_pi_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_cos_pi_series(arb_ptr g, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_cos_pi_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - void _arb_poly_cot_pi_series(arb_ptr g, arb_srcptr h, long hlen, long n, long prec) - void arb_poly_cot_pi_series(arb_poly_t g, const arb_poly_t h, long n, long prec) - - void arb_poly_lambertw_series(arb_poly_t res, const arb_poly_t z, int flags, long len, long prec) + int arb_poly_get_unique_fmpz_poly(fmpz_poly_t z, const arb_poly_t x) + void _arb_poly_majorant(arb_ptr res, arb_srcptr poly, slong len, slong prec) + void arb_poly_majorant(arb_poly_t res, const arb_poly_t poly, slong prec) + void _arb_poly_add(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + void arb_poly_add(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong prec) + void arb_poly_add_si(arb_poly_t C, const arb_poly_t A, slong B, slong prec) + void _arb_poly_sub(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + void arb_poly_sub(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong prec) + void arb_poly_add_series(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong len, slong prec) + void arb_poly_sub_series(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong len, slong prec) + void arb_poly_neg(arb_poly_t C, const arb_poly_t A) + void arb_poly_scalar_mul_2exp_si(arb_poly_t C, const arb_poly_t A, slong c) + void arb_poly_scalar_mul(arb_poly_t C, const arb_poly_t A, const arb_t c, slong prec) + void arb_poly_scalar_div(arb_poly_t C, const arb_poly_t A, const arb_t c, slong prec) + void _arb_poly_mullow_classical(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong n, slong prec) + void _arb_poly_mullow_block(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong n, slong prec) + void _arb_poly_mullow(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong n, slong prec) + void arb_poly_mullow_classical(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong n, slong prec) + void arb_poly_mullow_ztrunc(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong n, slong prec) + void arb_poly_mullow_block(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong n, slong prec) + void arb_poly_mullow(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong n, slong prec) + void _arb_poly_mul(arb_ptr C, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + void arb_poly_mul(arb_poly_t C, const arb_poly_t A, const arb_poly_t B, slong prec) + void _arb_poly_inv_series(arb_ptr Q, arb_srcptr A, slong Alen, slong len, slong prec) + void arb_poly_inv_series(arb_poly_t Q, const arb_poly_t A, slong n, slong prec) + void _arb_poly_div_series(arb_ptr Q, arb_srcptr A, slong Alen, arb_srcptr B, slong Blen, slong n, slong prec) + void arb_poly_div_series(arb_poly_t Q, const arb_poly_t A, const arb_poly_t B, slong n, slong prec) + void _arb_poly_div(arb_ptr Q, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + void _arb_poly_rem(arb_ptr R, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + void _arb_poly_divrem(arb_ptr Q, arb_ptr R, arb_srcptr A, slong lenA, arb_srcptr B, slong lenB, slong prec) + int arb_poly_divrem(arb_poly_t Q, arb_poly_t R, const arb_poly_t A, const arb_poly_t B, slong prec) + void _arb_poly_div_root(arb_ptr Q, arb_t R, arb_srcptr A, slong len, const arb_t c, slong prec) + void _arb_poly_taylor_shift_horner(arb_ptr g, const arb_t c, slong n, slong prec) + void arb_poly_taylor_shift_horner(arb_poly_t g, const arb_poly_t f, const arb_t c, slong prec) + void _arb_poly_taylor_shift_divconquer(arb_ptr g, const arb_t c, slong n, slong prec) + void arb_poly_taylor_shift_divconquer(arb_poly_t g, const arb_poly_t f, const arb_t c, slong prec) + void _arb_poly_taylor_shift_convolution(arb_ptr g, const arb_t c, slong n, slong prec) + void arb_poly_taylor_shift_convolution(arb_poly_t g, const arb_poly_t f, const arb_t c, slong prec) + void _arb_poly_taylor_shift(arb_ptr g, const arb_t c, slong n, slong prec) + void arb_poly_taylor_shift(arb_poly_t g, const arb_poly_t f, const arb_t c, slong prec) + void _arb_poly_compose_horner(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong prec) + void arb_poly_compose_horner(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong prec) + void _arb_poly_compose_divconquer(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong prec) + void arb_poly_compose_divconquer(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong prec) + void _arb_poly_compose(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong prec) + void arb_poly_compose(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong prec) + void _arb_poly_compose_series_horner(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong n, slong prec) + void arb_poly_compose_series_horner(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong n, slong prec) + void _arb_poly_compose_series_brent_kung(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong n, slong prec) + void arb_poly_compose_series_brent_kung(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong n, slong prec) + void _arb_poly_compose_series(arb_ptr res, arb_srcptr poly1, slong len1, arb_srcptr poly2, slong len2, slong n, slong prec) + void arb_poly_compose_series(arb_poly_t res, const arb_poly_t poly1, const arb_poly_t poly2, slong n, slong prec) + void _arb_poly_revert_series_lagrange(arb_ptr h, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_revert_series_lagrange(arb_poly_t h, const arb_poly_t f, slong n, slong prec) + void _arb_poly_revert_series_newton(arb_ptr h, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_revert_series_newton(arb_poly_t h, const arb_poly_t f, slong n, slong prec) + void _arb_poly_revert_series_lagrange_fast(arb_ptr h, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_revert_series_lagrange_fast(arb_poly_t h, const arb_poly_t f, slong n, slong prec) + void _arb_poly_revert_series(arb_ptr h, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_revert_series(arb_poly_t h, const arb_poly_t f, slong n, slong prec) + void _arb_poly_evaluate_horner(arb_t y, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate_horner(arb_t y, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate_rectangular(arb_t y, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate_rectangular(arb_t y, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate(arb_t y, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate(arb_t y, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate_acb_horner(acb_t y, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate_acb_horner(acb_t y, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_evaluate_acb_rectangular(acb_t y, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate_acb_rectangular(acb_t y, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_evaluate_acb(acb_t y, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate_acb(acb_t y, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_evaluate2_horner(arb_t y, arb_t z, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate2_horner(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate2_rectangular(arb_t y, arb_t z, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate2_rectangular(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate2(arb_t y, arb_t z, arb_srcptr f, slong len, const arb_t x, slong prec) + void arb_poly_evaluate2(arb_t y, arb_t z, const arb_poly_t f, const arb_t x, slong prec) + void _arb_poly_evaluate2_acb_horner(acb_t y, acb_t z, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate2_acb_horner(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_evaluate2_acb_rectangular(acb_t y, acb_t z, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate2_acb_rectangular(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_evaluate2_acb(acb_t y, acb_t z, arb_srcptr f, slong len, const acb_t x, slong prec) + void arb_poly_evaluate2_acb(acb_t y, acb_t z, const arb_poly_t f, const acb_t x, slong prec) + void _arb_poly_product_roots(arb_ptr poly, arb_srcptr xs, slong n, slong prec) + void arb_poly_product_roots(arb_poly_t poly, arb_srcptr xs, slong n, slong prec) + void _arb_poly_product_roots_complex(arb_ptr poly, arb_srcptr r, slong rn, acb_srcptr c, slong cn, slong prec) + void arb_poly_product_roots_complex(arb_poly_t poly, arb_srcptr r, slong rn, acb_srcptr c, slong cn, slong prec) + arb_ptr * _arb_poly_tree_alloc(slong len) + void _arb_poly_tree_free(arb_ptr * tree, slong len) + void _arb_poly_tree_build(arb_ptr * tree, arb_srcptr roots, slong len, slong prec) + void _arb_poly_evaluate_vec_iter(arb_ptr ys, arb_srcptr poly, slong plen, arb_srcptr xs, slong n, slong prec) + void arb_poly_evaluate_vec_iter(arb_ptr ys, const arb_poly_t poly, arb_srcptr xs, slong n, slong prec) + void _arb_poly_evaluate_vec_fast_precomp(arb_ptr vs, arb_srcptr poly, slong plen, arb_ptr * tree, slong len, slong prec) + void _arb_poly_evaluate_vec_fast(arb_ptr ys, arb_srcptr poly, slong plen, arb_srcptr xs, slong n, slong prec) + void arb_poly_evaluate_vec_fast(arb_ptr ys, const arb_poly_t poly, arb_srcptr xs, slong n, slong prec) + void _arb_poly_interpolate_newton(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, slong n, slong prec) + void arb_poly_interpolate_newton(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, slong n, slong prec) + void _arb_poly_interpolate_barycentric(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, slong n, slong prec) + void arb_poly_interpolate_barycentric(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, slong n, slong prec) + void _arb_poly_interpolation_weights(arb_ptr w, arb_ptr * tree, slong len, slong prec) + void _arb_poly_interpolate_fast_precomp(arb_ptr poly, arb_srcptr ys, arb_ptr * tree, arb_srcptr weights, slong len, slong prec) + void _arb_poly_interpolate_fast(arb_ptr poly, arb_srcptr xs, arb_srcptr ys, slong len, slong prec) + void arb_poly_interpolate_fast(arb_poly_t poly, arb_srcptr xs, arb_srcptr ys, slong n, slong prec) + void _arb_poly_derivative(arb_ptr res, arb_srcptr poly, slong len, slong prec) + void arb_poly_derivative(arb_poly_t res, const arb_poly_t poly, slong prec) + void _arb_poly_integral(arb_ptr res, arb_srcptr poly, slong len, slong prec) + void arb_poly_integral(arb_poly_t res, const arb_poly_t poly, slong prec) + void _arb_poly_borel_transform(arb_ptr res, arb_srcptr poly, slong len, slong prec) + void arb_poly_borel_transform(arb_poly_t res, const arb_poly_t poly, slong prec) + void _arb_poly_inv_borel_transform(arb_ptr res, arb_srcptr poly, slong len, slong prec) + void arb_poly_inv_borel_transform(arb_poly_t res, const arb_poly_t poly, slong prec) + void _arb_poly_binomial_transform_basecase(arb_ptr b, arb_srcptr a, slong alen, slong len, slong prec) + void arb_poly_binomial_transform_basecase(arb_poly_t b, const arb_poly_t a, slong len, slong prec) + void _arb_poly_binomial_transform_convolution(arb_ptr b, arb_srcptr a, slong alen, slong len, slong prec) + void arb_poly_binomial_transform_convolution(arb_poly_t b, const arb_poly_t a, slong len, slong prec) + void _arb_poly_binomial_transform(arb_ptr b, arb_srcptr a, slong alen, slong len, slong prec) + void arb_poly_binomial_transform(arb_poly_t b, const arb_poly_t a, slong len, slong prec) + void _arb_poly_graeffe_transform(arb_ptr b, arb_srcptr a, slong len, slong prec) + void arb_poly_graeffe_transform(arb_poly_t b, arb_poly_t a, slong prec) + void _arb_poly_pow_ui_trunc_binexp(arb_ptr res, arb_srcptr f, slong flen, ulong exp, slong len, slong prec) + void arb_poly_pow_ui_trunc_binexp(arb_poly_t res, const arb_poly_t poly, ulong exp, slong len, slong prec) + void _arb_poly_pow_ui(arb_ptr res, arb_srcptr f, slong flen, ulong exp, slong prec) + void arb_poly_pow_ui(arb_poly_t res, const arb_poly_t poly, ulong exp, slong prec) + void _arb_poly_pow_series(arb_ptr h, arb_srcptr f, slong flen, arb_srcptr g, slong glen, slong len, slong prec) + void arb_poly_pow_series(arb_poly_t h, const arb_poly_t f, const arb_poly_t g, slong len, slong prec) + void _arb_poly_pow_arb_series(arb_ptr h, arb_srcptr f, slong flen, const arb_t g, slong len, slong prec) + void arb_poly_pow_arb_series(arb_poly_t h, const arb_poly_t f, const arb_t g, slong len, slong prec) + void _arb_poly_sqrt_series(arb_ptr g, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sqrt_series(arb_poly_t g, const arb_poly_t h, slong n, slong prec) + void _arb_poly_rsqrt_series(arb_ptr g, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_rsqrt_series(arb_poly_t g, const arb_poly_t h, slong n, slong prec) + void _arb_poly_log_series(arb_ptr res, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_log_series(arb_poly_t res, const arb_poly_t f, slong n, slong prec) + void _arb_poly_log1p_series(arb_ptr res, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_log1p_series(arb_poly_t res, const arb_poly_t f, slong n, slong prec) + void _arb_poly_atan_series(arb_ptr res, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_atan_series(arb_poly_t res, const arb_poly_t f, slong n, slong prec) + void _arb_poly_asin_series(arb_ptr res, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_asin_series(arb_poly_t res, const arb_poly_t f, slong n, slong prec) + void _arb_poly_acos_series(arb_ptr res, arb_srcptr f, slong flen, slong n, slong prec) + void arb_poly_acos_series(arb_poly_t res, const arb_poly_t f, slong n, slong prec) + void _arb_poly_exp_series_basecase(arb_ptr f, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_exp_series_basecase(arb_poly_t f, const arb_poly_t h, slong n, slong prec) + void _arb_poly_exp_series(arb_ptr f, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_exp_series(arb_poly_t f, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sin_cos_series_basecase(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec, int times_pi) + void arb_poly_sin_cos_series_basecase(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec, int times_pi) + void _arb_poly_sin_cos_series_tangent(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec, int times_pi) + void arb_poly_sin_cos_series_tangent(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec, int times_pi) + void _arb_poly_sin_cos_series(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sin_cos_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sin_series(arb_ptr s, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sin_series(arb_poly_t s, const arb_poly_t h, slong n, slong prec) + void _arb_poly_cos_series(arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_cos_series(arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_tan_series(arb_ptr g, arb_srcptr h, slong hlen, slong len, slong prec) + void arb_poly_tan_series(arb_poly_t g, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sin_cos_pi_series(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sin_cos_pi_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sin_pi_series(arb_ptr s, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sin_pi_series(arb_poly_t s, const arb_poly_t h, slong n, slong prec) + void _arb_poly_cos_pi_series(arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_cos_pi_series(arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_cot_pi_series(arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_cot_pi_series(arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinh_cosh_series_basecase(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinh_cosh_series_basecase(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinh_cosh_series_exponential(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinh_cosh_series_exponential(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinh_cosh_series(arb_ptr s, arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinh_cosh_series(arb_poly_t s, arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinh_series(arb_ptr s, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinh_series(arb_poly_t s, const arb_poly_t h, slong n, slong prec) + void _arb_poly_cosh_series(arb_ptr c, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_cosh_series(arb_poly_t c, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinc_series(arb_ptr s, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinc_series(arb_poly_t s, const arb_poly_t h, slong n, slong prec) + void _arb_poly_sinc_pi_series(arb_ptr s, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_sinc_pi_series(arb_poly_t s, const arb_poly_t h, slong n, slong prec) + void _arb_poly_lambertw_series(arb_ptr res, arb_srcptr z, slong zlen, int flags, slong len, slong prec) + void arb_poly_lambertw_series(arb_poly_t res, const arb_poly_t z, int flags, slong len, slong prec) + void _arb_poly_gamma_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_gamma_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_rgamma_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_rgamma_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_lgamma_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_lgamma_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_digamma_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_digamma_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_rising_ui_series(arb_ptr res, arb_srcptr f, slong flen, ulong r, slong trunc, slong prec) + void arb_poly_rising_ui_series(arb_poly_t res, const arb_poly_t f, ulong r, slong trunc, slong prec) + void arb_poly_zeta_series(arb_poly_t res, const arb_poly_t s, const arb_t a, int deflate, slong n, slong prec) + void _arb_poly_riemann_siegel_theta_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_riemann_siegel_theta_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_riemann_siegel_z_series(arb_ptr res, arb_srcptr h, slong hlen, slong n, slong prec) + void arb_poly_riemann_siegel_z_series(arb_poly_t res, const arb_poly_t h, slong n, slong prec) + void _arb_poly_root_bound_fujiwara(mag_t bound, arb_srcptr poly, slong len) + void arb_poly_root_bound_fujiwara(mag_t bound, arb_poly_t poly) + void _arb_poly_newton_convergence_factor(arf_t convergence_factor, arb_srcptr poly, slong len, const arb_t convergence_interval, slong prec) + int _arb_poly_newton_step(arb_t xnew, arb_srcptr poly, slong len, const arb_t x, const arb_t convergence_interval, const arf_t convergence_factor, slong prec) + void _arb_poly_newton_refine_root(arb_t r, arb_srcptr poly, slong len, const arb_t start, const arb_t convergence_interval, const arf_t convergence_factor, slong eval_extra_prec, slong prec) + void _arb_poly_swinnerton_dyer_ui(arb_ptr poly, ulong n, slong trunc, slong prec) + void arb_poly_swinnerton_dyer_ui(arb_poly_t poly, ulong n, slong prec) diff --git a/src/flint/flintlib/arf.pxd b/src/flint/flintlib/arf.pxd index 22b7ea94..d78bfa3b 100644 --- a/src/flint/flintlib/arf.pxd +++ b/src/flint/flintlib/arf.pxd @@ -1,5 +1,5 @@ from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct -from flint.flintlib.flint cimport mp_limb_t, ulong, flint_rand_t +from flint.flintlib.flint cimport mp_limb_t, ulong, flint_rand_t, slong from flint.flintlib.fmpq cimport fmpq_t from flint.flintlib.mag cimport mag_t @@ -21,118 +21,153 @@ cdef extern from "arf.h": cdef arf_rnd_t ARF_RND_CEIL cdef arf_rnd_t ARF_RND_UP +# from here on is parsed void arf_init(arf_t x) void arf_clear(arf_t x) - void arf_zero(arf_t x) - void arf_pos_inf(arf_t x) - void arf_neg_inf(arf_t x) - void arf_nan(arf_t x) - int arf_is_special(const arf_t x) + slong arf_allocated_bytes(const arf_t x) + void arf_zero(arf_t res) + void arf_one(arf_t res) + void arf_pos_inf(arf_t res) + void arf_neg_inf(arf_t res) + void arf_nan(arf_t res) int arf_is_zero(const arf_t x) + int arf_is_one(const arf_t x) int arf_is_pos_inf(const arf_t x) int arf_is_neg_inf(const arf_t x) int arf_is_nan(const arf_t x) + int arf_is_inf(const arf_t x) int arf_is_normal(const arf_t x) + int arf_is_special(const arf_t x) int arf_is_finite(const arf_t x) - int arf_is_inf(const arf_t x) - void arf_one(arf_t x) - int arf_is_one(const arf_t x) - int arf_sgn(const arf_t x) + void arf_set(arf_t res, const arf_t x) +# void arf_set_mpz(arf_t res, const mpz_t x) +# void arf_set_fmpz(arf_t res, const fmpz_t x) + void arf_set_ui(arf_t res, ulong x) + void arf_set_si(arf_t res, slong x) +# void arf_set_mpfr(arf_t res, const mpfr_t x) +# void arf_set_fmpr(arf_t res, const fmpr_t x) + void arf_set_d(arf_t res, double x) + void arf_swap(arf_t x, arf_t y) + void arf_init_set_ui(arf_t res, ulong x) + void arf_init_set_si(arf_t res, slong x) + int arf_set_round(arf_t res, const arf_t x, slong prec, arf_rnd_t rnd) + int arf_set_round_si(arf_t res, slong x, slong prec, arf_rnd_t rnd) + int arf_set_round_ui(arf_t res, ulong x, slong prec, arf_rnd_t rnd) +# int arf_set_round_mpz(arf_t res, const mpz_t x, slong prec, arf_rnd_t rnd) + int arf_set_round_fmpz(arf_t res, const fmpz_t x, slong prec, arf_rnd_t rnd) + void arf_set_si_2exp_si(arf_t res, slong m, slong e) + void arf_set_ui_2exp_si(arf_t res, ulong m, slong e) + void arf_set_fmpz_2exp(arf_t res, const fmpz_t m, const fmpz_t e) + int arf_set_round_fmpz_2exp(arf_t res, const fmpz_t x, const fmpz_t e, slong prec, arf_rnd_t rnd) + void arf_get_fmpz_2exp(fmpz_t m, fmpz_t e, const arf_t x) + void arf_frexp(arf_t m, fmpz_t e, const arf_t x) + double arf_get_d(const arf_t x, arf_rnd_t rnd) + void arf_set_fmpz(arf_t x, const fmpz_t res) +# int arf_get_mpfr(mpfr_t res, const arf_t x, mpfr_rnd_t rnd) + int arf_get_fmpz(fmpz_t res, const arf_t x, arf_rnd_t rnd) + slong arf_get_si(const arf_t x, arf_rnd_t rnd) + int arf_get_fmpz_fixed_fmpz(fmpz_t res, const arf_t x, const fmpz_t e) + int arf_get_fmpz_fixed_si(fmpz_t res, const arf_t x, slong e) + void arf_floor(arf_t res, const arf_t x) + void arf_ceil(arf_t res, const arf_t x) + void arf_get_fmpq(fmpq_t res, const arf_t x) + int arf_equal(const arf_t x, const arf_t y) + int arf_equal_si(const arf_t x, slong y) + int arf_equal_ui(const arf_t x, ulong y) + int arf_equal_d(const arf_t x, double y) int arf_cmp(const arf_t x, const arf_t y) + int arf_cmp_si(const arf_t x, slong y) + int arf_cmp_ui(const arf_t x, ulong y) + int arf_cmp_d(const arf_t x, double y) int arf_cmpabs(const arf_t x, const arf_t y) - void arf_swap(arf_t y, arf_t x) - void arf_set(arf_t y, const arf_t x) - void arf_neg(arf_t y, const arf_t x) - void arf_init_set_ui(arf_t x, ulong v) - void arf_init_set_si(arf_t x, long v) - void arf_set_ui(arf_t x, ulong v) - void arf_set_si(arf_t x, long v) int arf_cmpabs_ui(const arf_t x, ulong y) + int arf_cmpabs_d(const arf_t x, double y) + int arf_cmpabs_mag(const arf_t x, const mag_t y) + int arf_cmp_2exp_si(const arf_t x, slong e) + int arf_cmpabs_2exp_si(const arf_t x, slong e) + int arf_sgn(const arf_t x) + void arf_min(arf_t res, const arf_t a, const arf_t b) + void arf_max(arf_t res, const arf_t a, const arf_t b) + slong arf_bits(const arf_t x) + int arf_is_int(const arf_t x) + int arf_is_int_2exp_si(const arf_t x, slong e) + void arf_abs_bound_lt_2exp_fmpz(fmpz_t res, const arf_t x) + void arf_abs_bound_le_2exp_fmpz(fmpz_t res, const arf_t x) + slong arf_abs_bound_lt_2exp_si(const arf_t x) + void arf_get_mag(mag_t res, const arf_t x) + void arf_get_mag_lower(mag_t res, const arf_t x) + void arf_set_mag(arf_t res, const mag_t x) + void mag_init_set_arf(mag_t res, const arf_t x) + void mag_fast_init_set_arf(mag_t res, const arf_t x) + void arf_mag_set_ulp(mag_t res, const arf_t x, slong prec) + void arf_mag_add_ulp(mag_t res, const mag_t x, const arf_t y, slong prec) + void arf_mag_fast_add_ulp(mag_t res, const mag_t x, const arf_t y, slong prec) void arf_init_set_shallow(arf_t z, const arf_t x) + void arf_init_set_mag_shallow(arf_t z, const mag_t x) void arf_init_neg_shallow(arf_t z, const arf_t x) - void arf_init_set_mag_shallow(arf_t y, const mag_t x) void arf_init_neg_mag_shallow(arf_t z, const mag_t x) - int arf_cmpabs_mag(const arf_t x, const mag_t y) - int arf_mag_cmpabs(const mag_t x, const arf_t y) - void arf_set_fmpz(arf_t y, const fmpz_t x) - int arf_set_round_ui(arf_t x, ulong v, long prec, arf_rnd_t rnd) - int arf_set_round_si(arf_t x, long v, long prec, arf_rnd_t rnd) - int arf_set_round_fmpz(arf_t y, const fmpz_t x, long prec, arf_rnd_t rnd) - int arf_set_round(arf_t y, const arf_t x, long prec, arf_rnd_t rnd) - int arf_neg_round(arf_t y, const arf_t x, long prec, arf_rnd_t rnd) - int arf_equal(const arf_t x, const arf_t y) - void arf_min(arf_t z, const arf_t a, const arf_t b) - void arf_max(arf_t z, const arf_t a, const arf_t b) - void arf_abs(arf_t y, const arf_t x) - long arf_bits(const arf_t x) - void arf_bot(fmpz_t e, const arf_t x) - int arf_is_int(const arf_t x) - int arf_is_int_2exp_si(const arf_t x, long e) - int arf_cmp_2exp_si(const arf_t x, long e) - int arf_cmpabs_2exp_si(const arf_t x, long e) - void arf_set_si_2exp_si(arf_t x, long man, long exp) - void arf_set_ui_2exp_si(arf_t x, ulong man, long exp) - void arf_mul_2exp_si(arf_t y, const arf_t x, long e) - void arf_mul_2exp_fmpz(arf_t y, const arf_t x, const fmpz_t e) - int arf_set_round_fmpz_2exp(arf_t y, const fmpz_t x, const fmpz_t exp, long prec, arf_rnd_t rnd) - void arf_abs_bound_lt_2exp_fmpz(fmpz_t b, const arf_t x) - void arf_abs_bound_le_2exp_fmpz(fmpz_t b, const arf_t x) - long arf_abs_bound_lt_2exp_si(const arf_t x) - void arf_get_fmpz_2exp(fmpz_t man, fmpz_t exp, const arf_t x) - void arf_get_fmpz(fmpz_t z, const arf_t x, arf_rnd_t rnd) - long arf_get_si(const arf_t x, arf_rnd_t rnd) - int arf_get_fmpz_fixed_fmpz(fmpz_t y, const arf_t x, const fmpz_t e) - int arf_get_fmpz_fixed_si(fmpz_t y, const arf_t x, long e) - void arf_set_fmpz_2exp(arf_t x, const fmpz_t man, const fmpz_t exp) - void arf_floor(arf_t z, const arf_t x) - void arf_ceil(arf_t z, const arf_t x) + void arf_randtest(arf_t res, flint_rand_t state, slong bits, slong mag_bits) + void arf_randtest_not_zero(arf_t res, flint_rand_t state, slong bits, slong mag_bits) + void arf_randtest_special(arf_t res, flint_rand_t state, slong bits, slong mag_bits) + void arf_urandom(arf_t res, flint_rand_t state, slong bits, arf_rnd_t rnd) void arf_debug(const arf_t x) void arf_print(const arf_t x) - void arf_printd(const arf_t y, long d) - void arf_randtest(arf_t x, flint_rand_t state, long bits, long mag_bits) - void arf_randtest_not_zero(arf_t x, flint_rand_t state, long bits, long mag_bits) - void arf_randtest_special(arf_t x, flint_rand_t state, long bits, long mag_bits) - int arf_mul(arf_t z, const arf_t x, const arf_t y, long prec, arf_rnd_t rnd) - int arf_neg_mul(arf_t z, const arf_t x, const arf_t y, long prec, arf_rnd_t rnd) - int arf_mul_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_mul_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_mul_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_add(arf_ptr z, arf_srcptr x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_add_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_add_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_add_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_add_fmpz_2exp(arf_ptr z, arf_srcptr x, const fmpz_t y, const fmpz_t exp, long prec, arf_rnd_t rnd) - int arf_sub(arf_ptr z, arf_srcptr x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_sub_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_sub_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_sub_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_addmul(arf_ptr z, arf_srcptr x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_addmul_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_addmul_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_addmul_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_submul(arf_ptr z, arf_srcptr x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_submul_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_submul_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_submul_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_div(arf_ptr z, arf_srcptr x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_div_ui(arf_ptr z, arf_srcptr x, ulong y, long prec, arf_rnd_t rnd) - int arf_ui_div(arf_ptr z, ulong x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_div_si(arf_ptr z, arf_srcptr x, long y, long prec, arf_rnd_t rnd) - int arf_si_div(arf_ptr z, long x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_div_fmpz(arf_ptr z, arf_srcptr x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_fmpz_div(arf_ptr z, const fmpz_t x, arf_srcptr y, long prec, arf_rnd_t rnd) - int arf_fmpz_div_fmpz(arf_ptr z, const fmpz_t x, const fmpz_t y, long prec, arf_rnd_t rnd) - int arf_sqrt(arf_ptr z, arf_srcptr x, long prec, arf_rnd_t rnd) - int arf_sqrt_ui(arf_t z, ulong x, long prec, arf_rnd_t rnd) - int arf_sqrt_fmpz(arf_t z, const fmpz_t x, long prec, arf_rnd_t rnd) - int arf_rsqrt(arf_ptr z, arf_srcptr x, long prec, arf_rnd_t rnd) - void arf_get_mag(mag_t y, const arf_t x) - void arf_get_mag_lower(mag_t y, const arf_t x) - void arf_set_mag(arf_t y, const mag_t x) - void mag_init_set_arf(mag_t y, const arf_t x) - void arf_mag_add_ulp(mag_t z, const mag_t x, const arf_t y, long prec) - void arf_mag_set_ulp(mag_t z, const arf_t y, long prec) - void arf_get_fmpq(fmpq_t y, const arf_t x) - int arf_set_fmpq(arf_t y, const fmpq_t x, long prec, arf_rnd_t rnd) - double arf_get_d(const arf_t x, arf_rnd_t rnd) - void arf_set_d(arf_t x, double v) + void arf_printd(const arf_t x, slong d) + char * arf_get_str(const arf_t x, slong d) + char * arf_dump_str(const arf_t x) + int arf_load_str(arf_t x, const char * str) + void arf_abs(arf_t res, const arf_t x) + void arf_neg(arf_t res, const arf_t x) + int arf_neg_round(arf_t res, const arf_t x, slong prec, arf_rnd_t rnd) + int arf_add(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_add_si(arf_t res, const arf_t x, slong y, slong prec, arf_rnd_t rnd) + int arf_add_ui(arf_t res, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_add_fmpz(arf_t res, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_add_fmpz_2exp(arf_t res, const arf_t x, const fmpz_t y, const fmpz_t e, slong prec, arf_rnd_t rnd) + int arf_sub(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_sub_si(arf_t res, const arf_t x, slong y, slong prec, arf_rnd_t rnd) + int arf_sub_ui(arf_t res, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_sub_fmpz(arf_t res, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + void arf_mul_2exp_si(arf_t res, const arf_t x, slong e) + void arf_mul_2exp_fmpz(arf_t res, const arf_t x, const fmpz_t e) + int arf_mul(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_mul_ui(arf_t res, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_mul_si(arf_t res, const arf_t x, slong y, slong prec, arf_rnd_t rnd) +# int arf_mul_mpz(arf_t res, const arf_t x, const mpz_t y, slong prec, arf_rnd_t rnd) + int arf_mul_fmpz(arf_t res, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_addmul(arf_t z, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_addmul_ui(arf_t z, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_addmul_si(arf_t z, const arf_t x, slong y, slong prec, arf_rnd_t rnd) +# int arf_addmul_mpz(arf_t z, const arf_t x, const mpz_t y, slong prec, arf_rnd_t rnd) + int arf_addmul_fmpz(arf_t z, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_submul(arf_t z, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_submul_ui(arf_t z, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_submul_si(arf_t z, const arf_t x, slong y, slong prec, arf_rnd_t rnd) +# int arf_submul_mpz(arf_t z, const arf_t x, const mpz_t y, slong prec, arf_rnd_t rnd) + int arf_submul_fmpz(arf_t z, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_fma(arf_t res, const arf_t x, const arf_t y, const arf_t z, slong prec, arf_rnd_t rnd) + int arf_sosq(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_sum(arf_t res, arf_srcptr terms, slong len, slong prec, arf_rnd_t rnd) + void arf_approx_dot(arf_t res, const arf_t initial, int subtract, arf_srcptr x, slong xstep, arf_srcptr y, slong ystep, slong len, slong prec, arf_rnd_t rnd) + int arf_div(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_div_ui(arf_t res, const arf_t x, ulong y, slong prec, arf_rnd_t rnd) + int arf_ui_div(arf_t res, ulong x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_div_si(arf_t res, const arf_t x, slong y, slong prec, arf_rnd_t rnd) + int arf_si_div(arf_t res, slong x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_div_fmpz(arf_t res, const arf_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_fmpz_div(arf_t res, const fmpz_t x, const arf_t y, slong prec, arf_rnd_t rnd) + int arf_fmpz_div_fmpz(arf_t res, const fmpz_t x, const fmpz_t y, slong prec, arf_rnd_t rnd) + int arf_sqrt(arf_t res, const arf_t x, slong prec, arf_rnd_t rnd) + int arf_sqrt_ui(arf_t res, ulong x, slong prec, arf_rnd_t rnd) + int arf_sqrt_fmpz(arf_t res, const fmpz_t x, slong prec, arf_rnd_t rnd) + int arf_rsqrt(arf_t res, const arf_t x, slong prec, arf_rnd_t rnd) + int arf_root(arf_t res, const arf_t x, ulong k, slong prec, arf_rnd_t rnd) + int arf_complex_mul(arf_t e, arf_t f, const arf_t a, const arf_t b, const arf_t c, const arf_t d, slong prec, arf_rnd_t rnd) + int arf_complex_mul_fallback(arf_t e, arf_t f, const arf_t a, const arf_t b, const arf_t c, const arf_t d, slong prec, arf_rnd_t rnd) + int arf_complex_sqr(arf_t e, arf_t f, const arf_t a, const arf_t b, slong prec, arf_rnd_t rnd) +# int _arf_get_integer_mpn(mp_ptr y, mp_srcptr xp, mp_size_t xn, slong exp) +# int _arf_set_mpn_fixed(arf_t z, mp_srcptr xp, mp_size_t xn, mp_size_t fixn, int negative, slong prec, arf_rnd_t rnd) + int _arf_set_round_ui(arf_t z, ulong x, int sgnbit, slong prec, arf_rnd_t rnd) + int _arf_set_round_uiui(arf_t z, slong * fix, mp_limb_t hi, mp_limb_t lo, int sgnbit, slong prec, arf_rnd_t rnd) +# int _arf_set_round_mpn(arf_t z, slong * exp_shift, mp_srcptr x, mp_size_t xn, int sgnbit, slong prec, arf_rnd_t rnd) + diff --git a/src/flint/flintlib/arith.pxd b/src/flint/flintlib/arith.pxd index 7ecea190..71f85137 100644 --- a/src/flint/flintlib/arith.pxd +++ b/src/flint/flintlib/arith.pxd @@ -1,23 +1,82 @@ -from flint.flintlib.flint cimport ulong -from flint.flintlib.fmpz cimport fmpz_t +from flint.flintlib.flint cimport ulong, slong, mp_limb_t +from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.fmpq_poly cimport fmpq_poly_t from flint.flintlib.fmpq cimport fmpq_t +from flint.flintlib.fmpz_mat cimport fmpz_mat_t +from flint.flintlib.nmod_vec cimport nmod_t +from flint.flintlib.fmpq cimport fmpq_struct cdef extern from "flint/arith.h": - void arith_number_of_partitions(fmpz_t res, ulong n) - int arith_moebius_mu(fmpz_t n) - void arith_divisor_sigma(fmpz_t v, ulong k, fmpz_t n) - void arith_euler_phi(fmpz_t v, fmpz_t n) - void arith_bell_number(fmpz_t v, ulong n) - void arith_euler_number(fmpz_t v, ulong n) - void arith_bernoulli_number(fmpq_t v, ulong n) - void arith_stirling_number_1(fmpz_t s, long n, long k) - void arith_stirling_number_2(fmpz_t s, long n, long k) - void arith_harmonic_number(fmpq_t v, ulong n) - void arith_bernoulli_polynomial(fmpq_poly_t v, ulong n) - void arith_euler_polynomial(fmpq_poly_t v, ulong n) +#stealth macros void arith_legendre_polynomial(fmpq_poly_t v, ulong n) void arith_chebyshev_t_polynomial(fmpz_poly_t v, ulong n) void arith_chebyshev_u_polynomial(fmpz_poly_t v, ulong n) void arith_cyclotomic_polynomial(fmpz_poly_t v, ulong n) + +# from here on is parsed + void arith_primorial(fmpz_t res, slong n) + void _arith_harmonic_number(fmpz_t num, fmpz_t den, slong n) + void arith_harmonic_number(fmpq_t x, slong n) + void arith_stirling_number_1u(fmpz_t s, ulong n, ulong k) + void arith_stirling_number_1(fmpz_t s, ulong n, ulong k) + void arith_stirling_number_2(fmpz_t s, ulong n, ulong k) + void arith_stirling_number_1u_vec(fmpz_struct * row, ulong n, slong klen) + void arith_stirling_number_1_vec(fmpz_struct * row, ulong n, slong klen) + void arith_stirling_number_2_vec(fmpz_struct * row, ulong n, slong klen) + void arith_stirling_number_1u_vec_next(fmpz_struct * row, fmpz_struct * prev, slong n, slong klen) + void arith_stirling_number_1_vec_next(fmpz_struct * row, fmpz_struct * prev, slong n, slong klen) + void arith_stirling_number_2_vec_next(fmpz_struct * row, fmpz_struct * prev, slong n, slong klen) + void arith_stirling_matrix_1u(fmpz_mat_t mat) + void arith_stirling_matrix_1(fmpz_mat_t mat) + void arith_stirling_matrix_2(fmpz_mat_t mat) + void arith_bell_number(fmpz_t b, ulong n) + void arith_bell_number_dobinski(fmpz_t res, ulong n) + void arith_bell_number_multi_mod(fmpz_t res, ulong n) + void arith_bell_number_vec(fmpz_struct * b, slong n) + void arith_bell_number_vec_recursive(fmpz_struct * b, slong n) + void arith_bell_number_vec_multi_mod(fmpz_struct * b, slong n) + mp_limb_t arith_bell_number_nmod(ulong n, nmod_t mod) + # void arith_bell_number_nmod_vec(mp_ptr b, slong n, nmod_t mod) + # void arith_bell_number_nmod_vec_recursive(mp_ptr b, slong n, nmod_t mod) + # void arith_bell_number_nmod_vec_ogf(mp_ptr b, slong n, nmod_t mod) + # int arith_bell_number_nmod_vec_series(mp_ptr b, slong n, nmod_t mod) + double arith_bell_number_size(ulong n) + void _arith_bernoulli_number(fmpz_t num, fmpz_t den, ulong n) + void arith_bernoulli_number(fmpq_t x, ulong n) + void _arith_bernoulli_number_vec(fmpz_struct * num, fmpz_struct * den, slong n) + void arith_bernoulli_number_vec(fmpq_struct * x, slong n) + void arith_bernoulli_number_denom(fmpz_t den, ulong n) + double arith_bernoulli_number_size(ulong n) + void arith_bernoulli_polynomial(fmpq_poly_t poly, ulong n) + void _arith_bernoulli_number_zeta(fmpz_t num, fmpz_t den, ulong n) + void _arith_bernoulli_number_vec_recursive(fmpz_struct * num, fmpz_struct * den, slong n) + void _arith_bernoulli_number_vec_zeta(fmpz_struct * num, fmpz_struct * den, slong n) + void _arith_bernoulli_number_vec_multi_mod(fmpz_struct * num, fmpz_struct * den, slong n) + void arith_euler_number(fmpz_t res, ulong n) + void arith_euler_number_vec(fmpz_struct * res, slong n) + double arith_euler_number_size(ulong n) + void arith_euler_polynomial(fmpq_poly_t poly, ulong n) + void _arith_euler_number_zeta(fmpz_t res, ulong n) + void arith_euler_phi(fmpz_t res, const fmpz_t n) + int arith_moebius_mu(const fmpz_t n) + void arith_divisor_sigma(fmpz_t res, ulong k, const fmpz_t n) + void arith_divisors(fmpz_poly_t res, const fmpz_t n) + void arith_ramanujan_tau(fmpz_t res, const fmpz_t n) + void arith_ramanujan_tau_series(fmpz_poly_t res, slong n) + void _arith_cos_minpoly(fmpz_struct * coeffs, slong d, ulong n) + void arith_cos_minpoly(fmpz_poly_t poly, ulong n) + void arith_landau_function_vec(fmpz_struct * res, slong len) + void arith_dedekind_sum_naive(fmpq_t s, const fmpz_t h, const fmpz_t k) + double arith_dedekind_sum_coprime_d(double h, double k) + void arith_dedekind_sum_coprime_large(fmpq_t s, const fmpz_t h, const fmpz_t k) + void arith_dedekind_sum_coprime(fmpq_t s, const fmpz_t h, const fmpz_t k) + void arith_dedekind_sum(fmpq_t s, const fmpz_t h, const fmpz_t k) + void arith_number_of_partitions_vec(fmpz_struct * res, slong len) + # void arith_number_of_partitions_nmod_vec(mp_ptr res, slong len, nmod_t mod) + # void arith_hrr_expsum_factored(trig_prod_t prod, mp_limb_t k, mp_limb_t n) + # void arith_number_of_partitions_mpfr(mpfr_t x, ulong n) + void arith_number_of_partitions(fmpz_t x, ulong n) + void arith_sum_of_squares(fmpz_t r, ulong k, const fmpz_t n) + void arith_sum_of_squares_vec(fmpz_struct * r, ulong k, slong n) + diff --git a/src/flint/flintlib/bernoulli.pxd b/src/flint/flintlib/bernoulli.pxd index a36c5ab0..154867db 100644 --- a/src/flint/flintlib/bernoulli.pxd +++ b/src/flint/flintlib/bernoulli.pxd @@ -1,6 +1,18 @@ -from flint.flintlib.flint cimport ulong -from flint.flintlib.fmpq cimport fmpq_t +from flint.flintlib.flint cimport ulong, slong +from flint.flintlib.fmpq cimport fmpq_t, fmpq_struct +from flint.flintlib.fmpz cimport fmpz_t cdef extern from "bernoulli.h": - void bernoulli_fmpq_ui(fmpq_t, ulong) - void bernoulli_cache_compute(long n) +# from here on is parsed + # void bernoulli_rev_init(bernoulli_rev_t iter, ulong n) + # void bernoulli_rev_next(fmpz_t numer, fmpz_t denom, bernoulli_rev_t iter) + # void bernoulli_rev_clear(bernoulli_rev_t iter) + void bernoulli_fmpq_vec_no_cache(fmpq_struct * res, ulong a, slong num) + void bernoulli_cache_compute(slong n) + slong bernoulli_bound_2exp_si(ulong n) + ulong bernoulli_mod_p_harvey(ulong n, ulong p) + void _bernoulli_fmpq_ui_zeta(fmpz_t num, fmpz_t den, ulong n) + void _bernoulli_fmpq_ui_multi_mod(fmpz_t num, fmpz_t den, ulong n, double alpha) + void _bernoulli_fmpq_ui(fmpz_t num, fmpz_t den, ulong n) + void bernoulli_fmpq_ui(fmpq_t b, ulong n) + diff --git a/src/flint/flintlib/dirichlet.pxd b/src/flint/flintlib/dirichlet.pxd index ca8dd6ea..f65caec8 100644 --- a/src/flint/flintlib/dirichlet.pxd +++ b/src/flint/flintlib/dirichlet.pxd @@ -1,4 +1,4 @@ -from flint.flintlib.flint cimport ulong +from flint.flintlib.flint cimport ulong, slong from flint.flintlib.nmod_vec cimport nmod_t cdef extern from "dirichlet.h": @@ -21,41 +21,48 @@ cdef extern from "dirichlet.h": ulong * log ctypedef dirichlet_char_struct dirichlet_char_t[1] - ulong dirichlet_group_size(const dirichlet_group_t G) - void dirichlet_group_init(dirichlet_group_t G, ulong q) +# from here on is parsed + int dirichlet_group_init(dirichlet_group_t G, ulong q) + void dirichlet_subgroup_init(dirichlet_group_t H, const dirichlet_group_t G, ulong h) void dirichlet_group_clear(dirichlet_group_t G) - ulong dirichlet_number_primitive(const dirichlet_group_t G) - - void dirichlet_char_init(dirichlet_char_t x, const dirichlet_group_t G) - void dirichlet_char_clear(dirichlet_char_t x) - void dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t x) - - void dirichlet_char_set(dirichlet_char_t x, const dirichlet_group_t G, const dirichlet_char_t y) - int dirichlet_char_eq(const dirichlet_char_t x, const dirichlet_char_t y) - int dirichlet_parity_char(const dirichlet_group_t G, const dirichlet_char_t x) - ulong dirichlet_conductor_char(const dirichlet_group_t G, const dirichlet_char_t x) - ulong dirichlet_order_char(const dirichlet_group_t G, const dirichlet_char_t x) - + ulong dirichlet_group_size(const dirichlet_group_t G) + ulong dirichlet_group_num_primitive(const dirichlet_group_t G) + void dirichlet_group_dlog_precompute(dirichlet_group_t G, ulong num) + void dirichlet_group_dlog_clear(dirichlet_group_t G, ulong num) + void dirichlet_char_init(dirichlet_char_t chi, const dirichlet_group_t G) + void dirichlet_char_clear(dirichlet_char_t chi) + void dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t chi) void dirichlet_char_log(dirichlet_char_t x, const dirichlet_group_t G, ulong m) ulong dirichlet_char_exp(const dirichlet_group_t G, const dirichlet_char_t x) ulong _dirichlet_char_exp(dirichlet_char_t x, const dirichlet_group_t G) - void dirichlet_char_index(dirichlet_char_t x, const dirichlet_group_t G, ulong j) - ulong dirichlet_index_char(const dirichlet_group_t G, const dirichlet_char_t x) void dirichlet_char_one(dirichlet_char_t x, const dirichlet_group_t G) void dirichlet_char_first_primitive(dirichlet_char_t x, const dirichlet_group_t G) + void dirichlet_char_set(dirichlet_char_t x, const dirichlet_group_t G, const dirichlet_char_t y) int dirichlet_char_next(dirichlet_char_t x, const dirichlet_group_t G) int dirichlet_char_next_primitive(dirichlet_char_t x, const dirichlet_group_t G) - void dirichlet_char_mul(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b) - void dirichlet_char_pow(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, ulong n) - void dirichlet_char_lower(dirichlet_char_t y, const dirichlet_group_t H, const dirichlet_char_t x, const dirichlet_group_t G) - void dirichlet_char_lift(dirichlet_char_t y, const dirichlet_group_t G, const dirichlet_char_t x, const dirichlet_group_t H) + ulong dirichlet_index_char(const dirichlet_group_t G, const dirichlet_char_t x) + void dirichlet_char_index(dirichlet_char_t x, const dirichlet_group_t G, ulong j) + int dirichlet_char_eq(const dirichlet_char_t x, const dirichlet_char_t y) + int dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t x, const dirichlet_char_t y) + int dirichlet_char_is_principal(const dirichlet_group_t G, const dirichlet_char_t chi) + ulong dirichlet_conductor_ui(const dirichlet_group_t G, ulong a) + ulong dirichlet_conductor_char(const dirichlet_group_t G, const dirichlet_char_t x) + int dirichlet_parity_ui(const dirichlet_group_t G, ulong a) + int dirichlet_parity_char(const dirichlet_group_t G, const dirichlet_char_t x) + ulong dirichlet_order_ui(const dirichlet_group_t G, ulong a) + ulong dirichlet_order_char(const dirichlet_group_t G, const dirichlet_char_t x) + int dirichlet_char_is_real(const dirichlet_group_t G, const dirichlet_char_t chi) + int dirichlet_char_is_primitive(const dirichlet_group_t G, const dirichlet_char_t chi) cdef ulong DIRICHLET_CHI_NULL ulong dirichlet_pairing(const dirichlet_group_t G, ulong m, ulong n) - ulong dirichlet_pairing_char(const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b) - - int dirichlet_char_is_principal(const dirichlet_group_t G, const dirichlet_char_t chi) - int dirichlet_char_is_real(const dirichlet_group_t G, const dirichlet_char_t chi) - int dirichlet_char_is_primitive(const dirichlet_group_t G, const dirichlet_char_t chi) + ulong dirichlet_pairing_char(const dirichlet_group_t G, const dirichlet_char_t chi, const dirichlet_char_t psi) ulong dirichlet_chi(const dirichlet_group_t G, const dirichlet_char_t chi, ulong n) + void dirichlet_chi_vec(ulong * v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv) + void dirichlet_chi_vec_order(ulong * v, const dirichlet_group_t G, const dirichlet_char_t chi, ulong order, slong nv) + void dirichlet_char_mul(dirichlet_char_t chi12, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2) + void dirichlet_char_pow(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, ulong n) + void dirichlet_char_lift(dirichlet_char_t chi_G, const dirichlet_group_t G, const dirichlet_char_t chi_H, const dirichlet_group_t H) + void dirichlet_char_lower(dirichlet_char_t chi_H, const dirichlet_group_t H, const dirichlet_char_t chi_G, const dirichlet_group_t G) + diff --git a/src/flint/flintlib/fmpq.pxd b/src/flint/flintlib/fmpq.pxd index 9457a7a7..12a5d400 100644 --- a/src/flint/flintlib/fmpq.pxd +++ b/src/flint/flintlib/fmpq.pxd @@ -1,4 +1,4 @@ -from flint.flintlib.flint cimport ulong, flint_rand_t, mp_bitcnt_t +from flint.flintlib.flint cimport ulong, flint_rand_t, mp_bitcnt_t, slong, flint_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t cdef extern from "flint/fmpq.h": @@ -8,42 +8,285 @@ cdef extern from "flint/fmpq.h": ctypedef fmpq_struct fmpq_t[1] fmpz_struct * fmpq_numref(fmpq_t x) fmpz_struct * fmpq_denref(fmpq_t x) + +# from here on is parsed void fmpq_init(fmpq_t x) void fmpq_clear(fmpq_t x) + void fmpq_canonicalise(fmpq_t res) + void _fmpq_canonicalise(fmpz_t num, fmpz_t den) + int fmpq_is_canonical(const fmpq_t x) + int _fmpq_is_canonical(const fmpz_t num, const fmpz_t den) + void fmpq_set(fmpq_t dest, const fmpq_t src) + void fmpq_swap(fmpq_t op1, fmpq_t op2) + void fmpq_neg(fmpq_t dest, const fmpq_t src) + void fmpq_abs(fmpq_t dest, const fmpq_t src) void fmpq_zero(fmpq_t res) void fmpq_one(fmpq_t res) - int fmpq_equal(fmpq_t x, fmpq_t y) - int fmpq_sgn(fmpq_t x) - int fmpq_is_zero(fmpq_t x) - int fmpq_is_one(fmpq_t x) - void fmpq_set(fmpq_t dest, fmpq_t src) - void fmpq_neg(fmpq_t dest, fmpq_t src) + int fmpq_is_zero(const fmpq_t res) + int fmpq_is_one(const fmpq_t res) + int fmpq_is_pm1(const fmpq_t res) + int fmpq_equal(const fmpq_t x, const fmpq_t y) + int fmpq_sgn(const fmpq_t x) + int fmpq_cmp(const fmpq_t x, const fmpq_t y) + int fmpq_cmp_fmpz(const fmpq_t x, const fmpz_t y) + int fmpq_cmp_ui(const fmpq_t x, ulong y) + int fmpq_cmp_si(const fmpq_t x, slong y) + int fmpq_equal_ui(const fmpq_t x, ulong y) + int fmpq_equal_si(const fmpq_t x, slong y) + void fmpq_height(fmpz_t height, const fmpq_t x) + flint_bitcnt_t fmpq_height_bits(const fmpq_t x) + void fmpq_set_fmpz_frac(fmpq_t res, const fmpz_t p, const fmpz_t q) + # void fmpq_get_mpz_frac(mpz_t a, mpz_t b, fmpq_t c) + void fmpq_set_si(fmpq_t res, slong p, ulong q) + void _fmpq_set_si(fmpz_t rnum, fmpz_t rden, slong p, ulong q) + void fmpq_set_ui(fmpq_t res, ulong p, ulong q) + void _fmpq_set_ui(fmpz_t rnum, fmpz_t rden, ulong p, ulong q) + # void fmpq_set_mpq(fmpq_t dest, const mpq_t src) + void fmpq_set_str(fmpq_t dest, const char * s, int base) + # void fmpq_init_set_mpz_frac_readonly(fmpq_t z, const mpz_t p, const mpz_t q) + double fmpq_get_d(const fmpq_t f) + # void fmpq_get_mpq(mpq_t dest, const fmpq_t src) + # int fmpq_get_mpfr(mpfr_t dest, const fmpq_t src, mpfr_rnd_t rnd) +# from here on is parsed + void fmpq_init(fmpq_t x) + void fmpq_clear(fmpq_t x) void fmpq_canonicalise(fmpq_t res) - int fmpq_is_canonical(fmpq_t x) - void fmpq_set_si(fmpq_t res, long p, ulong q) - #void fmpq_set_mpq(fmpq_t dest, mpq_t src) - #void fmpq_get_mpq(mpq_t dest, fmpq_t src) - void fmpq_print(fmpq_t x) - void fmpq_randtest(fmpq_t res, flint_rand_t state, mp_bitcnt_t bits) - void fmpq_randbits(fmpq_t res, flint_rand_t state, mp_bitcnt_t bits) - void fmpq_add(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_sub(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_mul(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_mul_fmpz(fmpq_t res, fmpq_t op, fmpz_t x) - void fmpq_addmul(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_submul(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_inv(fmpq_t dest, fmpq_t src) - void fmpq_div(fmpq_t res, fmpq_t op1, fmpq_t op2) - void fmpq_div_fmpz(fmpq_t res, fmpq_t op, fmpz_t x) - int fmpq_mod_fmpz(fmpz_t res, fmpq_t x, fmpz_t mod) + void _fmpq_canonicalise(fmpz_t num, fmpz_t den) + int fmpq_is_canonical(const fmpq_t x) + int _fmpq_is_canonical(const fmpz_t num, const fmpz_t den) + void fmpq_set(fmpq_t dest, const fmpq_t src) + void fmpq_swap(fmpq_t op1, fmpq_t op2) + void fmpq_neg(fmpq_t dest, const fmpq_t src) + void fmpq_abs(fmpq_t dest, const fmpq_t src) + void fmpq_zero(fmpq_t res) + void fmpq_one(fmpq_t res) + int fmpq_is_zero(const fmpq_t res) + int fmpq_is_one(const fmpq_t res) + int fmpq_is_pm1(const fmpq_t res) + int fmpq_equal(const fmpq_t x, const fmpq_t y) + int fmpq_sgn(const fmpq_t x) + int fmpq_cmp(const fmpq_t x, const fmpq_t y) + int fmpq_cmp_fmpz(const fmpq_t x, const fmpz_t y) + int fmpq_cmp_ui(const fmpq_t x, ulong y) + int fmpq_cmp_si(const fmpq_t x, slong y) + int fmpq_equal_ui(const fmpq_t x, ulong y) + int fmpq_equal_si(const fmpq_t x, slong y) + void fmpq_height(fmpz_t height, const fmpq_t x) + flint_bitcnt_t fmpq_height_bits(const fmpq_t x) + void fmpq_set_fmpz_frac(fmpq_t res, const fmpz_t p, const fmpz_t q) + # void fmpq_get_mpz_frac(mpz_t a, mpz_t b, fmpq_t c) + void fmpq_set_si(fmpq_t res, slong p, ulong q) + void _fmpq_set_si(fmpz_t rnum, fmpz_t rden, slong p, ulong q) + void fmpq_set_ui(fmpq_t res, ulong p, ulong q) + void _fmpq_set_ui(fmpz_t rnum, fmpz_t rden, ulong p, ulong q) + # void fmpq_set_mpq(fmpq_t dest, const mpq_t src) + void fmpq_set_str(fmpq_t dest, const char * s, int base) + # void fmpq_init_set_mpz_frac_readonly(fmpq_t z, const mpz_t p, const mpz_t q) + double fmpq_get_d(const fmpq_t f) + # void fmpq_get_mpq(mpq_t dest, const fmpq_t src) + # int fmpq_get_mpfr(mpfr_t dest, const fmpq_t src, mpfr_rnd_t rnd) + char * _fmpq_get_str(char * str, int b, const fmpz_t num, const fmpz_t den) + char * fmpq_get_str(char * str, int b, const fmpq_t x) + # void flint_mpq_init_set_readonly(mpq_t z, const fmpq_t f) + # void flint_mpq_clear_readonly(mpq_t z) + # void fmpq_init_set_readonly(fmpq_t f, const mpq_t z) + void fmpq_clear_readonly(fmpq_t f) + int fmpq_print(const fmpq_t x) + int _fmpq_print(const fmpz_t num, const fmpz_t den) + void fmpq_randtest(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void _fmpq_randtest(fmpz_t num, fmpz_t den, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_randtest_not_zero(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_randbits(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void _fmpq_randbits(fmpz_t num, fmpz_t den, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_add(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_sub(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_mul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_div(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_add(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_sub(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_mul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_div(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_add_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void _fmpq_sub_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void _fmpq_add_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void _fmpq_sub_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void _fmpq_add_fmpz(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r) + void _fmpq_sub_fmpz(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r) + void fmpq_add_si(fmpq_t res, const fmpq_t op1, slong c) + void fmpq_sub_si(fmpq_t res, const fmpq_t op1, slong c) + void fmpq_add_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_sub_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_add_fmpz(fmpq_t res, const fmpq_t op1, const fmpz_t c) + void fmpq_sub_fmpz(fmpq_t res, const fmpq_t op1, const fmpz_t c) + void _fmpq_mul_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void fmpq_mul_si(fmpq_t res, const fmpq_t op1, slong c) + void _fmpq_mul_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void fmpq_mul_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_addmul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_submul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_addmul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_submul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void fmpq_inv(fmpq_t dest, const fmpq_t src) + void _fmpq_pow_si(fmpz_t rnum, fmpz_t rden, const fmpz_t opnum, const fmpz_t opden, slong e) + void fmpq_pow_si(fmpq_t res, const fmpq_t op, slong e) int fmpq_pow_fmpz(fmpq_t a, const fmpq_t b, const fmpz_t e) - int fmpq_reconstruct_fmpz(fmpq_t res, fmpz_t a, fmpz_t m) - int fmpq_reconstruct_fmpz_2(fmpq_t res, fmpz_t a, fmpz_t m, fmpz_t N, fmpz_t D) - mp_bitcnt_t fmpq_height_bits(fmpq_t x) - void fmpq_height(fmpz_t height, fmpq_t x) - void fmpq_next_calkin_wilf(fmpq_t res, fmpq_t x) - void fmpq_next_signed_calkin_wilf(fmpq_t res, fmpq_t x) - void fmpq_next_minimal(fmpq_t res, fmpq_t x) - void fmpq_next_signed_minimal(fmpq_t res, fmpq_t x) - void fmpq_harmonic_ui(fmpq_t res, ulong n) + void fmpq_mul_fmpz(fmpq_t res, const fmpq_t op, const fmpz_t x) + void fmpq_div_fmpz(fmpq_t res, const fmpq_t op, const fmpz_t x) + void fmpq_mul_2exp(fmpq_t res, const fmpq_t x, flint_bitcnt_t exp) + void fmpq_div_2exp(fmpq_t res, const fmpq_t x, flint_bitcnt_t exp) + void _fmpq_gcd(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r, const fmpz_t s) + void fmpq_gcd(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_gcd_cofactors(fmpz_t gnum, fmpz_t gden, fmpz_t abar, fmpz_t bbar, const fmpz_t anum, const fmpz_t aden, const fmpz_t bnum, const fmpz_t bden) + void fmpq_gcd_cofactors(fmpq_t g, fmpz_t abar, fmpz_t bbar, const fmpq_t a, const fmpq_t b) + void _fmpq_add_small(fmpz_t rnum, fmpz_t rden, slong p1, ulong q1, slong p2, ulong q2) + void _fmpq_mul_small(fmpz_t rnum, fmpz_t rden, slong p1, ulong q1, slong p2, ulong q2) + int _fmpq_mod_fmpz(fmpz_t res, const fmpz_t num, const fmpz_t den, const fmpz_t mod) + int fmpq_mod_fmpz(fmpz_t res, const fmpq_t x, const fmpz_t mod) + int _fmpq_reconstruct_fmpz_2_naive(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int _fmpq_reconstruct_fmpz_2(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int fmpq_reconstruct_fmpz_2(fmpq_t res, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int _fmpq_reconstruct_fmpz(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m) + int fmpq_reconstruct_fmpz(fmpq_t res, const fmpz_t a, const fmpz_t m) + void _fmpq_next_minimal(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_minimal(fmpq_t res, const fmpq_t x) + void _fmpq_next_signed_minimal(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_signed_minimal(fmpq_t res, const fmpq_t x) + void _fmpq_next_calkin_wilf(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_calkin_wilf(fmpq_t res, const fmpq_t x) + void _fmpq_next_signed_calkin_wilf(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_signed_calkin_wilf(fmpq_t res, const fmpq_t x) + void fmpq_farey_neighbors(fmpq_t l, fmpq_t r, const fmpq_t x, const fmpz_t Q) + void fmpq_simplest_between(fmpq_t x, const fmpq_t l, const fmpq_t r) + void _fmpq_simplest_between(fmpz_t x_num, fmpz_t x_den, const fmpz_t l_num, const fmpz_t l_den, const fmpz_t r_num, const fmpz_t r_den) + slong fmpq_get_cfrac(fmpz_struct * c, fmpq_t rem, const fmpq_t x, slong n) + slong fmpq_get_cfrac_naive(fmpz_struct * c, fmpq_t rem, const fmpq_t x, slong n) + void fmpq_set_cfrac(fmpq_t x, const fmpz_struct * c, slong n) + slong fmpq_cfrac_bound(const fmpq_t x) + void _fmpq_harmonic_ui(fmpz_t num, fmpz_t den, ulong n) + void fmpq_harmonic_ui(fmpq_t x, ulong n) void fmpq_dedekind_sum(fmpq_t s, const fmpz_t h, const fmpz_t k) + void fmpq_dedekind_sum_naive(fmpq_t s, const fmpz_t h, const fmpz_t k) + char * _fmpq_get_str(char * str, int b, const fmpz_t num, const fmpz_t den) + char * fmpq_get_str(char * str, int b, const fmpq_t x) + # void flint_mpq_init_set_readonly(mpq_t z, const fmpq_t f) + # void flint_mpq_clear_readonly(mpq_t z) + # void fmpq_init_set_readonly(fmpq_t f, const mpq_t z) + void fmpq_clear_readonly(fmpq_t f) + int fmpq_print(const fmpq_t x) + int _fmpq_print(const fmpz_t num, const fmpz_t den) + void fmpq_randtest(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void _fmpq_randtest(fmpz_t num, fmpz_t den, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_randtest_not_zero(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_randbits(fmpq_t res, flint_rand_t state, flint_bitcnt_t bits) + void _fmpq_randbits(fmpz_t num, fmpz_t den, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_add(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_sub(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_mul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_div(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_add(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_sub(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_mul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_div(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_add_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void _fmpq_sub_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void _fmpq_add_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void _fmpq_sub_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void _fmpq_add_fmpz(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r) + void _fmpq_sub_fmpz(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r) + void fmpq_add_si(fmpq_t res, const fmpq_t op1, slong c) + void fmpq_sub_si(fmpq_t res, const fmpq_t op1, slong c) + void fmpq_add_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_sub_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_add_fmpz(fmpq_t res, const fmpq_t op1, const fmpz_t c) + void fmpq_sub_fmpz(fmpq_t res, const fmpq_t op1, const fmpz_t c) + void _fmpq_mul_si(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, slong r) + void fmpq_mul_si(fmpq_t res, const fmpq_t op1, slong c) + void _fmpq_mul_ui(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, ulong r) + void fmpq_mul_ui(fmpq_t res, const fmpq_t op1, ulong c) + void fmpq_addmul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void fmpq_submul(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_addmul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void _fmpq_submul(fmpz_t rnum, fmpz_t rden, const fmpz_t op1num, const fmpz_t op1den, const fmpz_t op2num, const fmpz_t op2den) + void fmpq_inv(fmpq_t dest, const fmpq_t src) + void _fmpq_pow_si(fmpz_t rnum, fmpz_t rden, const fmpz_t opnum, const fmpz_t opden, slong e) + void fmpq_pow_si(fmpq_t res, const fmpq_t op, slong e) + int fmpq_pow_fmpz(fmpq_t a, const fmpq_t b, const fmpz_t e) + void fmpq_mul_fmpz(fmpq_t res, const fmpq_t op, const fmpz_t x) + void fmpq_div_fmpz(fmpq_t res, const fmpq_t op, const fmpz_t x) + void fmpq_mul_2exp(fmpq_t res, const fmpq_t x, flint_bitcnt_t exp) + void fmpq_div_2exp(fmpq_t res, const fmpq_t x, flint_bitcnt_t exp) + void _fmpq_gcd(fmpz_t rnum, fmpz_t rden, const fmpz_t p, const fmpz_t q, const fmpz_t r, const fmpz_t s) + void fmpq_gcd(fmpq_t res, const fmpq_t op1, const fmpq_t op2) + void _fmpq_gcd_cofactors(fmpz_t gnum, fmpz_t gden, fmpz_t abar, fmpz_t bbar, const fmpz_t anum, const fmpz_t aden, const fmpz_t bnum, const fmpz_t bden) + void fmpq_gcd_cofactors(fmpq_t g, fmpz_t abar, fmpz_t bbar, const fmpq_t a, const fmpq_t b) + void _fmpq_add_small(fmpz_t rnum, fmpz_t rden, slong p1, ulong q1, slong p2, ulong q2) + void _fmpq_mul_small(fmpz_t rnum, fmpz_t rden, slong p1, ulong q1, slong p2, ulong q2) + int _fmpq_mod_fmpz(fmpz_t res, const fmpz_t num, const fmpz_t den, const fmpz_t mod) + int fmpq_mod_fmpz(fmpz_t res, const fmpq_t x, const fmpz_t mod) + int _fmpq_reconstruct_fmpz_2_naive(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int _fmpq_reconstruct_fmpz_2(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int fmpq_reconstruct_fmpz_2(fmpq_t res, const fmpz_t a, const fmpz_t m, const fmpz_t N, const fmpz_t D) + int _fmpq_reconstruct_fmpz(fmpz_t n, fmpz_t d, const fmpz_t a, const fmpz_t m) + int fmpq_reconstruct_fmpz(fmpq_t res, const fmpz_t a, const fmpz_t m) + void _fmpq_next_minimal(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_minimal(fmpq_t res, const fmpq_t x) + void _fmpq_next_signed_minimal(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_signed_minimal(fmpq_t res, const fmpq_t x) + void _fmpq_next_calkin_wilf(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_calkin_wilf(fmpq_t res, const fmpq_t x) + void _fmpq_next_signed_calkin_wilf(fmpz_t rnum, fmpz_t rden, const fmpz_t num, const fmpz_t den) + void fmpq_next_signed_calkin_wilf(fmpq_t res, const fmpq_t x) + void fmpq_farey_neighbors(fmpq_t l, fmpq_t r, const fmpq_t x, const fmpz_t Q) + void fmpq_simplest_between(fmpq_t x, const fmpq_t l, const fmpq_t r) + void _fmpq_simplest_between(fmpz_t x_num, fmpz_t x_den, const fmpz_t l_num, const fmpz_t l_den, const fmpz_t r_num, const fmpz_t r_den) + slong fmpq_get_cfrac(fmpz_struct * c, fmpq_t rem, const fmpq_t x, slong n) + slong fmpq_get_cfrac_naive(fmpz_struct * c, fmpq_t rem, const fmpq_t x, slong n) + void fmpq_set_cfrac(fmpq_t x, const fmpz_struct * c, slong n) + slong fmpq_cfrac_bound(const fmpq_t x) + void _fmpq_harmonic_ui(fmpz_t num, fmpz_t den, ulong n) + void fmpq_harmonic_ui(fmpq_t x, ulong n) + void fmpq_dedekind_sum(fmpq_t s, const fmpz_t h, const fmpz_t k) + void fmpq_dedekind_sum_naive(fmpq_t s, const fmpz_t h, const fmpz_t k) + + + + + # void fmpq_init(fmpq_t x) + # void fmpq_clear(fmpq_t x) + # void fmpq_zero(fmpq_t res) + # void fmpq_one(fmpq_t res) + # int fmpq_equal(fmpq_t x, fmpq_t y) + # int fmpq_sgn(fmpq_t x) + # int fmpq_is_zero(fmpq_t x) + # int fmpq_is_one(fmpq_t x) + # void fmpq_set(fmpq_t dest, fmpq_t src) + # void fmpq_neg(fmpq_t dest, fmpq_t src) + # void fmpq_canonicalise(fmpq_t res) + # int fmpq_is_canonical(fmpq_t x) + # void fmpq_set_si(fmpq_t res, long p, ulong q) + # #void fmpq_set_mpq(fmpq_t dest, mpq_t src) + # #void fmpq_get_mpq(mpq_t dest, fmpq_t src) + # void fmpq_print(fmpq_t x) + # void fmpq_randtest(fmpq_t res, flint_rand_t state, mp_bitcnt_t bits) + # void fmpq_randbits(fmpq_t res, flint_rand_t state, mp_bitcnt_t bits) + # void fmpq_add(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_sub(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_mul(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_mul_fmpz(fmpq_t res, fmpq_t op, fmpz_t x) + # void fmpq_addmul(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_submul(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_inv(fmpq_t dest, fmpq_t src) + # void fmpq_div(fmpq_t res, fmpq_t op1, fmpq_t op2) + # void fmpq_div_fmpz(fmpq_t res, fmpq_t op, fmpz_t x) + # int fmpq_mod_fmpz(fmpz_t res, fmpq_t x, fmpz_t mod) + # int fmpq_pow_fmpz(fmpq_t a, const fmpq_t b, const fmpz_t e) + # int fmpq_reconstruct_fmpz(fmpq_t res, fmpz_t a, fmpz_t m) + # int fmpq_reconstruct_fmpz_2(fmpq_t res, fmpz_t a, fmpz_t m, fmpz_t N, fmpz_t D) + # mp_bitcnt_t fmpq_height_bits(fmpq_t x) + # void fmpq_height(fmpz_t height, fmpq_t x) + # void fmpq_next_calkin_wilf(fmpq_t res, fmpq_t x) + # void fmpq_next_signed_calkin_wilf(fmpq_t res, fmpq_t x) + # void fmpq_next_minimal(fmpq_t res, fmpq_t x) + # void fmpq_next_signed_minimal(fmpq_t res, fmpq_t x) + # void fmpq_harmonic_ui(fmpq_t res, ulong n) + # void fmpq_dedekind_sum(fmpq_t s, const fmpz_t h, const fmpz_t k) diff --git a/src/flint/flintlib/fmpq_mat.pxd b/src/flint/flintlib/fmpq_mat.pxd index eaf72ad2..85604115 100644 --- a/src/flint/flintlib/fmpq_mat.pxd +++ b/src/flint/flintlib/fmpq_mat.pxd @@ -1,4 +1,4 @@ -from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t +from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t,slong,flint_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpq cimport fmpq_struct, fmpq_t from flint.flintlib.fmpz_mat cimport fmpz_mat_t @@ -11,50 +11,93 @@ cdef extern from "flint/fmpq_mat.h": long c fmpq_struct ** rows ctypedef fmpq_mat_struct fmpq_mat_t[1] - fmpq_struct * fmpq_mat_entry(fmpq_mat_t mat, long i, long j) - fmpz_struct * fmpq_mat_entry_num(fmpq_mat_t mat, long i, long j) - fmpz_struct * fmpq_mat_entry_den(fmpq_mat_t mat, long i, long j) - long fmpq_mat_nrows(fmpq_mat_t mat) - long fmpq_mat_ncols(fmpq_mat_t mat) - void fmpq_mat_init(fmpq_mat_t mat, long rows, long cols) + + +# from here on is parsed + void fmpq_mat_init(fmpq_mat_t mat, slong rows, slong cols) + void fmpq_mat_init_set(fmpq_mat_t mat1, const fmpq_mat_t mat2) void fmpq_mat_clear(fmpq_mat_t mat) - void fmpq_mat_print(fmpq_mat_t mat) - void fmpq_mat_randbits(fmpq_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) - void fmpq_mat_randtest(fmpq_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) - void fmpq_mat_hilbert_matrix(fmpq_mat_t mat) - void fmpq_mat_set(fmpq_mat_t dest, fmpq_mat_t src) + void fmpq_mat_swap(fmpq_mat_t mat1, fmpq_mat_t mat2) + void fmpq_mat_swap_entrywise(fmpq_mat_t mat1, fmpq_mat_t mat2) + fmpq_struct * fmpq_mat_entry(const fmpq_mat_t mat, slong i, slong j) + fmpz_struct * fmpq_mat_entry_num(const fmpq_mat_t mat, slong i, slong j) + fmpz_struct * fmpq_mat_entry_den(const fmpq_mat_t mat, slong i, slong j) + slong fmpq_mat_nrows(const fmpq_mat_t mat) + slong fmpq_mat_ncols(const fmpq_mat_t mat) + void fmpq_mat_set(fmpq_mat_t dest, const fmpq_mat_t src) void fmpq_mat_zero(fmpq_mat_t mat) void fmpq_mat_one(fmpq_mat_t mat) - void fmpq_mat_add(fmpq_mat_t mat, fmpq_mat_t mat1, fmpq_mat_t mat2) - void fmpq_mat_sub(fmpq_mat_t mat, fmpq_mat_t mat1, fmpq_mat_t mat2) - void fmpq_mat_neg(fmpq_mat_t rop, fmpq_mat_t op) - void fmpq_mat_scalar_mul_fmpz(fmpq_mat_t rop, fmpq_mat_t op, fmpz_t x) - void fmpq_mat_scalar_div_fmpz(fmpq_mat_t rop, fmpq_mat_t op, fmpz_t x) - int fmpq_mat_equal(fmpq_mat_t mat1, fmpq_mat_t mat2) - int fmpq_mat_is_integral(fmpq_mat_t mat) - int fmpq_mat_is_zero(fmpq_mat_t mat) - int fmpq_mat_is_empty(fmpq_mat_t mat) - int fmpq_mat_is_square(fmpq_mat_t mat) - int fmpq_mat_get_fmpz_mat(fmpz_mat_t dest, fmpq_mat_t mat) - void fmpq_mat_get_fmpz_mat_entrywise(fmpz_mat_t num, fmpz_mat_t den, fmpq_mat_t mat) - void fmpq_mat_get_fmpz_mat_matwise(fmpz_mat_t num, fmpz_t den, fmpq_mat_t mat) - void fmpq_mat_get_fmpz_mat_rowwise(fmpz_mat_t num, fmpz_struct * den, fmpq_mat_t mat) - void fmpq_mat_get_fmpz_mat_colwise(fmpz_mat_t num, fmpz_struct * den, fmpq_mat_t mat) - void fmpq_mat_get_fmpz_mat_rowwise_2(fmpz_mat_t num, fmpz_mat_t num2, fmpz_struct * den, fmpq_mat_t mat, fmpq_mat_t mat2) - void fmpq_mat_get_fmpz_mat_mod_fmpz(fmpz_mat_t dest, fmpq_mat_t mat, fmpz_t mod) - void fmpq_mat_set_fmpz_mat(fmpq_mat_t dest, fmpz_mat_t src) - void fmpq_mat_set_fmpz_mat_div_fmpz(fmpq_mat_t X, fmpz_mat_t Xmod, fmpz_t div) - int fmpq_mat_set_fmpz_mat_mod_fmpz(fmpq_mat_t X, fmpz_mat_t Xmod, fmpz_t mod) - void fmpq_mat_mul(fmpq_mat_t C, fmpq_mat_t A, fmpq_mat_t B) - void fmpq_mat_mul_fmpz_mat(fmpq_mat_t C, fmpq_mat_t A, fmpz_mat_t B) - void fmpq_mat_mul_r_fmpz_mat(fmpq_mat_t C, fmpz_mat_t A, fmpq_mat_t B) - void fmpq_mat_det(fmpq_t det, fmpq_mat_t mat) - int fmpq_mat_solve_fraction_free(fmpq_mat_t X, fmpq_mat_t A, fmpq_mat_t B) - int fmpq_mat_solve_dixon(fmpq_mat_t X, fmpq_mat_t A, fmpq_mat_t B) + void fmpq_mat_transpose(fmpq_mat_t rop, const fmpq_mat_t op) + void fmpq_mat_swap_rows(fmpq_mat_t mat, slong * perm, slong r, slong s) + void fmpq_mat_swap_cols(fmpq_mat_t mat, slong * perm, slong r, slong s) + void fmpq_mat_invert_rows(fmpq_mat_t mat, slong * perm) + void fmpq_mat_invert_cols(fmpq_mat_t mat, slong * perm) + void fmpq_mat_add(fmpq_mat_t mat, const fmpq_mat_t mat1, const fmpq_mat_t mat2) + void fmpq_mat_sub(fmpq_mat_t mat, const fmpq_mat_t mat1, const fmpq_mat_t mat2) + void fmpq_mat_neg(fmpq_mat_t rop, const fmpq_mat_t op) + void fmpq_mat_scalar_mul_fmpq(fmpq_mat_t rop, const fmpq_mat_t op, const fmpq_t x) + void fmpq_mat_scalar_mul_fmpz(fmpq_mat_t rop, const fmpq_mat_t op, const fmpz_t x) + void fmpq_mat_scalar_div_fmpz(fmpq_mat_t rop, const fmpq_mat_t op, const fmpz_t x) + void fmpq_mat_print(const fmpq_mat_t mat) + void fmpq_mat_randbits(fmpq_mat_t mat, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_mat_randtest(fmpq_mat_t mat, flint_rand_t state, flint_bitcnt_t bits) + void fmpq_mat_window_init(fmpq_mat_t window, const fmpq_mat_t mat, slong r1, slong c1, slong r2, slong c2) + void fmpq_mat_window_clear(fmpq_mat_t window) + void fmpq_mat_concat_vertical(fmpq_mat_t res, const fmpq_mat_t mat1, const fmpq_mat_t mat2) + void fmpq_mat_concat_horizontal(fmpq_mat_t res, const fmpq_mat_t mat1, const fmpq_mat_t mat2) + void fmpq_mat_hilbert_matrix(fmpq_mat_t mat) + int fmpq_mat_equal(const fmpq_mat_t mat1, const fmpq_mat_t mat2) + int fmpq_mat_is_integral(const fmpq_mat_t mat) + int fmpq_mat_is_zero(const fmpq_mat_t mat) + int fmpq_mat_is_one(const fmpq_mat_t mat) + int fmpq_mat_is_empty(const fmpq_mat_t mat) + int fmpq_mat_is_square(const fmpq_mat_t mat) + int fmpq_mat_get_fmpz_mat(fmpz_mat_t dest, const fmpq_mat_t mat) + void fmpq_mat_get_fmpz_mat_entrywise(fmpz_mat_t num, fmpz_mat_t den, const fmpq_mat_t mat) + void fmpq_mat_get_fmpz_mat_matwise(fmpz_mat_t num, fmpz_t den, const fmpq_mat_t mat) + void fmpq_mat_get_fmpz_mat_rowwise(fmpz_mat_t num, fmpz_struct * den, const fmpq_mat_t mat) + void fmpq_mat_get_fmpz_mat_rowwise_2(fmpz_mat_t num, fmpz_mat_t num2, fmpz_struct * den, const fmpq_mat_t mat, const fmpq_mat_t mat2) + void fmpq_mat_get_fmpz_mat_colwise(fmpz_mat_t num, fmpz_struct * den, const fmpq_mat_t mat) + void fmpq_mat_set_fmpz_mat(fmpq_mat_t dest, const fmpz_mat_t src) + void fmpq_mat_set_fmpz_mat_div_fmpz(fmpq_mat_t mat, const fmpz_mat_t num, const fmpz_t den) + void fmpq_mat_get_fmpz_mat_mod_fmpz(fmpz_mat_t dest, const fmpq_mat_t mat, const fmpz_t mod) + int fmpq_mat_set_fmpz_mat_mod_fmpz(fmpq_mat_t X, const fmpz_mat_t Xmod, const fmpz_t mod) + void fmpq_mat_mul_direct(fmpq_mat_t C, const fmpq_mat_t A, const fmpq_mat_t B) + void fmpq_mat_mul_cleared(fmpq_mat_t C, const fmpq_mat_t A, const fmpq_mat_t B) + void fmpq_mat_mul(fmpq_mat_t C, const fmpq_mat_t A, const fmpq_mat_t B) + void fmpq_mat_mul_fmpz_mat(fmpq_mat_t C, const fmpq_mat_t A, const fmpz_mat_t B) + void fmpq_mat_mul_r_fmpz_mat(fmpq_mat_t C, const fmpz_mat_t A, const fmpq_mat_t B) + void fmpq_mat_mul_fmpq_vec(fmpq_struct * c, const fmpq_mat_t A, const fmpq_struct * b, slong blen) + void fmpq_mat_mul_fmpz_vec(fmpq_struct * c, const fmpq_mat_t A, const fmpz_struct * b, slong blen) + void fmpq_mat_mul_fmpq_vec_ptr(fmpq_struct * const * c, const fmpq_mat_t A, const fmpq_struct * const * b, slong blen) + void fmpq_mat_mul_fmpz_vec_ptr(fmpq_struct * const * c, const fmpq_mat_t A, const fmpz_struct * const * b, slong blen) + void fmpq_mat_fmpq_vec_mul(fmpq_struct * c, const fmpq_struct * a, slong alen, const fmpq_mat_t B) + void fmpq_mat_fmpz_vec_mul(fmpq_struct * c, const fmpz_struct * a, slong alen, const fmpq_mat_t B) + void fmpq_mat_fmpq_vec_mul_ptr(fmpq_struct * const * c, const fmpq_struct * const * a, slong alen, const fmpq_mat_t B) + void fmpq_mat_fmpz_vec_mul_ptr(fmpq_struct * const * c, const fmpz_struct * const * a, slong alen, const fmpq_mat_t B) + void fmpq_mat_kronecker_product(fmpq_mat_t C, const fmpq_mat_t A, const fmpq_mat_t B) + void fmpq_mat_trace(fmpq_t trace, const fmpq_mat_t mat) + void fmpq_mat_det(fmpq_t det, const fmpq_mat_t mat) + int fmpq_mat_solve_fraction_free(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_solve_dixon(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_solve_multi_mod(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_solve(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_solve_fmpz_mat_fraction_free(fmpq_mat_t X, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpq_mat_solve_fmpz_mat_dixon(fmpq_mat_t X, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpq_mat_solve_fmpz_mat_multi_mod(fmpq_mat_t X, const fmpz_mat_t A, const fmpz_mat_t B) int fmpq_mat_solve_fmpz_mat(fmpq_mat_t X, const fmpz_mat_t A, const fmpz_mat_t B) - int fmpq_mat_inv(fmpq_mat_t B, fmpq_mat_t A) - long fmpq_mat_rref(fmpq_mat_t B, fmpq_mat_t A) - void fmpq_mat_transpose(fmpq_mat_t B, fmpq_mat_t A) + int fmpq_mat_can_solve_multi_mod(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_can_solve_fraction_free(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_can_solve(fmpq_mat_t X, const fmpq_mat_t A, const fmpq_mat_t B) + int fmpq_mat_inv(fmpq_mat_t B, const fmpq_mat_t A) + int fmpq_mat_pivot(slong * perm, fmpq_mat_t mat, slong r, slong c) + slong fmpq_mat_rref_classical(fmpq_mat_t B, const fmpq_mat_t A) + slong fmpq_mat_rref_fraction_free(fmpq_mat_t B, const fmpq_mat_t A) + slong fmpq_mat_rref(fmpq_mat_t B, const fmpq_mat_t A) + void fmpq_mat_gso(fmpq_mat_t B, const fmpq_mat_t A) + void fmpq_mat_similarity(fmpq_mat_t A, slong r, fmpq_t d) + void _fmpq_mat_charpoly(fmpz_struct * coeffs, fmpz_t den, const fmpq_mat_t mat) + void fmpq_mat_charpoly(fmpq_poly_t pol, const fmpq_mat_t mat) + slong _fmpq_mat_minpoly(fmpz_struct * coeffs, fmpz_t den, const fmpq_mat_t mat) + void fmpq_mat_minpoly(fmpq_poly_t pol, const fmpq_mat_t mat) - void fmpq_mat_charpoly(fmpq_poly_t cp, const fmpq_mat_t mat) - void fmpq_mat_minpoly(fmpq_poly_t cp, const fmpq_mat_t mat) diff --git a/src/flint/flintlib/fmpq_poly.pxd b/src/flint/flintlib/fmpq_poly.pxd index c1082938..14956cc8 100644 --- a/src/flint/flintlib/fmpq_poly.pxd +++ b/src/flint/flintlib/fmpq_poly.pxd @@ -1,7 +1,8 @@ -from flint.flintlib.flint cimport mp_bitcnt_t, flint_rand_t, ulong +from flint.flintlib.flint cimport mp_bitcnt_t, flint_rand_t, ulong, slong, flint_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t -from flint.flintlib.fmpq cimport fmpq_t +from flint.flintlib.fmpq cimport fmpq_t, fmpq_struct +from flint.flintlib.nmod_poly cimport nmod_poly_t cdef extern from "flint/fmpq_poly.h": ctypedef struct fmpq_poly_struct: @@ -10,110 +11,242 @@ cdef extern from "flint/fmpq_poly.h": long length fmpz_t den ctypedef fmpq_poly_struct fmpq_poly_t[1] + + +# from here on is parsed void fmpq_poly_init(fmpq_poly_t poly) - void fmpq_poly_init2(fmpq_poly_t poly, long alloc) - void fmpq_poly_realloc(fmpq_poly_t poly, long alloc) - void fmpq_poly_fit_length(fmpq_poly_t poly, long len) + void fmpq_poly_init2(fmpq_poly_t poly, slong alloc) + void fmpq_poly_realloc(fmpq_poly_t poly, slong alloc) + void fmpq_poly_fit_length(fmpq_poly_t poly, slong len) + void _fmpq_poly_set_length(fmpq_poly_t poly, slong len) void fmpq_poly_clear(fmpq_poly_t poly) void _fmpq_poly_normalise(fmpq_poly_t poly) + void _fmpq_poly_canonicalise(fmpz_struct * poly, fmpz_t den, slong len) void fmpq_poly_canonicalise(fmpq_poly_t poly) - int fmpq_poly_is_canonical(fmpq_poly_t poly) + int _fmpq_poly_is_canonical(const fmpz_struct * poly, const fmpz_t den, slong len) + int fmpq_poly_is_canonical(const fmpq_poly_t poly) + slong fmpq_poly_degree(const fmpq_poly_t poly) + slong fmpq_poly_length(const fmpq_poly_t poly) fmpz_struct * fmpq_poly_numref(fmpq_poly_t poly) - fmpz_struct * fmpq_poly_denref(fmpq_poly_t poly) - void fmpq_poly_get_numerator(fmpz_poly_t res, fmpq_poly_t poly) - long fmpq_poly_degree(fmpq_poly_t poly) - long fmpq_poly_length(fmpq_poly_t poly) - void fmpq_poly_randtest(fmpq_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits_in) - void fmpq_poly_randtest_unsigned(fmpq_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits_in) - void fmpq_poly_randtest_not_zero(fmpq_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits_in) - void fmpq_poly_set(fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_set_si(fmpq_poly_t poly, long x) + fmpz_t fmpq_poly_denref(fmpq_poly_t poly) + void fmpq_poly_get_numerator(fmpz_poly_t res, const fmpq_poly_t poly) + void fmpq_poly_get_denominator(fmpz_t den, const fmpq_poly_t poly) + void fmpq_poly_randtest(fmpq_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpq_poly_randtest_unsigned(fmpq_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpq_poly_randtest_not_zero(fmpq_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpq_poly_set(fmpq_poly_t poly1, const fmpq_poly_t poly2) + void fmpq_poly_set_si(fmpq_poly_t poly, slong x) void fmpq_poly_set_ui(fmpq_poly_t poly, ulong x) - void fmpq_poly_set_fmpz(fmpq_poly_t poly, fmpz_t x) - void fmpq_poly_set_fmpq(fmpq_poly_t poly, fmpq_t x) - #void fmpq_poly_set_mpz(fmpq_poly_t poly, mpz_t x) - #void fmpq_poly_set_mpq(fmpq_poly_t poly, mpq_t x) - void fmpq_poly_set_fmpz_poly(fmpq_poly_t rop, fmpz_poly_t op) - #void _fmpq_poly_set_array_mpq(fmpz_struct * poly, fmpz_t den, mpq_t * a, long n) - #void fmpq_poly_set_array_mpq(fmpq_poly_t poly, mpq_t * a, long n) - int fmpq_poly_set_str(fmpq_poly_t poly, char * str) - char * fmpq_poly_get_str(fmpq_poly_t poly) - char * fmpq_poly_get_str_pretty(fmpq_poly_t poly, char * var) + void fmpq_poly_set_fmpz(fmpq_poly_t poly, const fmpz_t x) + void fmpq_poly_set_fmpq(fmpq_poly_t poly, const fmpq_t x) + # void fmpq_poly_set_mpz(fmpq_poly_t poly, const mpz_t x) + # void fmpq_poly_set_mpq(fmpq_poly_t poly, const mpq_t x) + void fmpq_poly_set_fmpz_poly(fmpq_poly_t rop, const fmpz_poly_t op) + void fmpq_poly_set_nmod_poly(fmpq_poly_t rop, const nmod_poly_t op) + void fmpq_poly_get_nmod_poly(nmod_poly_t rop, const fmpq_poly_t op) + void fmpq_poly_get_nmod_poly_den(nmod_poly_t rop, const fmpq_poly_t op, int den) + # void _fmpq_poly_set_array_mpq(fmpz_struct * poly, fmpz_t den, const mpq_t * a, slong n) + # void fmpq_poly_set_array_mpq(fmpq_poly_t poly, const mpq_t * a, slong n) + int _fmpq_poly_set_str(fmpz_struct * poly, fmpz_t den, const char * str, slong len) + int fmpq_poly_set_str(fmpq_poly_t poly, const char * str) + char * fmpq_poly_get_str(const fmpq_poly_t poly) + char * fmpq_poly_get_str_pretty(const fmpq_poly_t poly, const char * var) void fmpq_poly_zero(fmpq_poly_t poly) void fmpq_poly_one(fmpq_poly_t poly) - void fmpq_poly_neg(fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_inv(fmpq_poly_t poly1, fmpq_poly_t poly2) + void fmpq_poly_neg(fmpq_poly_t poly1, const fmpq_poly_t poly2) + void fmpq_poly_inv(fmpq_poly_t poly1, const fmpq_poly_t poly2) void fmpq_poly_swap(fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_truncate(fmpq_poly_t poly, long n) - void fmpq_poly_get_coeff_fmpq(fmpq_t x, fmpq_poly_t poly, long n) - void fmpq_poly_set_coeff_si(fmpq_poly_t poly, long n, long x) - void fmpq_poly_set_coeff_ui(fmpq_poly_t poly, long n, ulong x) - void fmpq_poly_set_coeff_fmpz(fmpq_poly_t poly, long n, fmpz_t x) - void fmpq_poly_set_coeff_fmpq(fmpq_poly_t poly, long n, fmpq_t x) - #void fmpq_poly_set_coeff_mpz(fmpq_poly_t poly, long n, mpz_t x) - #void fmpq_poly_set_coeff_mpq(fmpq_poly_t poly, long n, mpq_t x) - int fmpq_poly_equal(fmpq_poly_t poly1, fmpq_poly_t poly2) - int fmpq_poly_cmp(fmpq_poly_t left, fmpq_poly_t right) - int fmpq_poly_is_zero(fmpq_poly_t poly) - int fmpq_poly_is_one(fmpq_poly_t poly) + void fmpq_poly_truncate(fmpq_poly_t poly, slong n) + void fmpq_poly_set_trunc(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void fmpq_poly_get_slice(fmpq_poly_t rop, const fmpq_poly_t op, slong i, slong j) + void fmpq_poly_reverse(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void fmpq_poly_get_coeff_fmpz(fmpz_t x, const fmpq_poly_t poly, slong n) + void fmpq_poly_get_coeff_fmpq(fmpq_t x, const fmpq_poly_t poly, slong n) + # void fmpq_poly_get_coeff_mpq(mpq_t x, const fmpq_poly_t poly, slong n) + void fmpq_poly_set_coeff_si(fmpq_poly_t poly, slong n, slong x) + void fmpq_poly_set_coeff_ui(fmpq_poly_t poly, slong n, ulong x) + void fmpq_poly_set_coeff_fmpz(fmpq_poly_t poly, slong n, const fmpz_t x) + void fmpq_poly_set_coeff_fmpq(fmpq_poly_t poly, slong n, const fmpq_t x) + # void fmpq_poly_set_coeff_mpz(fmpq_poly_t rop, slong n, const mpz_t x) + # void fmpq_poly_set_coeff_mpq(fmpq_poly_t rop, slong n, const mpq_t x) + int fmpq_poly_equal(const fmpq_poly_t poly1, const fmpq_poly_t poly2) + int _fmpq_poly_equal_trunc(const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + int fmpq_poly_equal_trunc(const fmpq_poly_t poly1, const fmpq_poly_t poly2, slong n) + int _fmpq_poly_cmp(const fmpz_struct * lpoly, const fmpz_t lden, const fmpz_struct * rpoly, const fmpz_t rden, slong len) + int fmpq_poly_cmp(const fmpq_poly_t left, const fmpq_poly_t right) + int fmpq_poly_is_one(const fmpq_poly_t poly) + int fmpq_poly_is_zero(const fmpq_poly_t poly) + int fmpq_poly_is_gen(const fmpq_poly_t poly) + void _fmpq_poly_add(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2) + void _fmpq_poly_add_can(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, int can) void fmpq_poly_add(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2) + void fmpq_poly_add_can(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, int can) + void _fmpq_poly_add_series(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void _fmpq_poly_add_series_can(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n, int can) + void fmpq_poly_add_series(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, slong n) + void fmpq_poly_add_series_can(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, slong n, int can) + void _fmpq_poly_sub(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2) + void _fmpq_poly_sub_can(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, int can) void fmpq_poly_sub(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_scalar_mul_si(fmpq_poly_t rop, fmpq_poly_t op, long c) - void fmpq_poly_scalar_mul_ui(fmpq_poly_t rop, fmpq_poly_t op, ulong c) - void fmpq_poly_scalar_mul_fmpz(fmpq_poly_t rop, fmpq_poly_t op, fmpz_t c) - #void fmpq_poly_scalar_mul_mpz(fmpq_poly_t rop, fmpq_poly_t op, mpz_t c) - void fmpq_poly_scalar_mul_fmpq(fmpq_poly_t rop, fmpq_poly_t op, fmpq_t c) - void fmpq_poly_scalar_div_si(fmpq_poly_t rop, fmpq_poly_t op, long c) - void fmpq_poly_scalar_div_ui(fmpq_poly_t rop, fmpq_poly_t op, ulong c) - void fmpq_poly_scalar_div_fmpz(fmpq_poly_t rop, fmpq_poly_t op, fmpz_t c) - #void fmpq_poly_scalar_div_mpz(fmpq_poly_t rop, fmpq_poly_t op, mpz_t c) - void fmpq_poly_scalar_div_fmpq(fmpq_poly_t rop, fmpq_poly_t op, fmpq_t c) - void fmpq_poly_mul(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_mullow(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, long n) - void fmpq_poly_addmul(fmpq_poly_t rop, fmpq_poly_t op1, fmpq_poly_t op2) - void fmpq_poly_submul(fmpq_poly_t rop, fmpq_poly_t op1, fmpq_poly_t op2) - void fmpq_poly_pow(fmpq_poly_t rpoly, fmpq_poly_t poly, ulong e) - void fmpq_poly_shift_left(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_shift_right(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_divrem(fmpq_poly_t Q, fmpq_poly_t R, fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_div(fmpq_poly_t Q, fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_gcd(fmpq_poly_t g, fmpq_poly_t a, fmpq_poly_t b) + void fmpq_poly_sub_can(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, int can) + void _fmpq_poly_sub_series(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void _fmpq_poly_sub_series_can(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n, int can) + void fmpq_poly_sub_series(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, slong n) + void fmpq_poly_sub_series_can(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, slong n, int can) + void _fmpq_poly_scalar_mul_si(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, slong c) + void _fmpq_poly_scalar_mul_ui(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, ulong c) + void _fmpq_poly_scalar_mul_fmpz(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t c) + void _fmpq_poly_scalar_mul_fmpq(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t r, const fmpz_t s) + void fmpq_poly_scalar_mul_si(fmpq_poly_t rop, const fmpq_poly_t op, slong c) + void fmpq_poly_scalar_mul_ui(fmpq_poly_t rop, const fmpq_poly_t op, ulong c) + void fmpq_poly_scalar_mul_fmpz(fmpq_poly_t rop, const fmpq_poly_t op, const fmpz_t c) + # void fmpq_poly_scalar_mul_fmpq(fmpq_poly_t rop, const fmpq_poly_t op, const mpq_t c) + # void fmpq_poly_scalar_mul_mpz(fmpq_poly_t rop, const fmpq_poly_t op, const mpz_t c) + void fmpq_poly_scalar_mul_mpq(fmpq_poly_t rop, const fmpq_poly_t op, const fmpq_t c) + void _fmpq_poly_scalar_div_fmpz(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t c) + void _fmpq_poly_scalar_div_si(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, slong c) + void _fmpq_poly_scalar_div_ui(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, ulong c) + void _fmpq_poly_scalar_div_fmpq(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t r, const fmpz_t s) + void fmpq_poly_scalar_div_si(fmpq_poly_t rop, const fmpq_poly_t op, slong c) + void fmpq_poly_scalar_div_ui(fmpq_poly_t rop, const fmpq_poly_t op, ulong c) + void fmpq_poly_scalar_div_fmpz(fmpq_poly_t rop, const fmpq_poly_t op, const fmpz_t c) + void fmpq_poly_scalar_div_fmpq(fmpq_poly_t rop, const fmpq_poly_t op, const fmpq_t c) + # void fmpq_poly_scalar_div_mpz(fmpq_poly_t rop, const fmpq_poly_t op, const mpz_t c) + # void fmpq_poly_scalar_div_mpq(fmpq_poly_t rop, const fmpq_poly_t op, const mpq_t c) + void _fmpq_poly_mul(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2) + void fmpq_poly_mul(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + void _fmpq_poly_mullow(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void fmpq_poly_mullow(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2, slong n) + void fmpq_poly_addmul(fmpq_poly_t rop, const fmpq_poly_t op1, const fmpq_poly_t op2) + void fmpq_poly_submul(fmpq_poly_t rop, const fmpq_poly_t op1, const fmpq_poly_t op2) + void _fmpq_poly_pow(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, ulong e) + void fmpq_poly_pow(fmpq_poly_t res, const fmpq_poly_t poly, ulong e) + void _fmpq_poly_pow_trunc(fmpz_struct * res, fmpz_t rden, const fmpz_struct * f, const fmpz_t fden, slong flen, ulong exp, slong len) + void fmpq_poly_pow_trunc(fmpq_poly_t res, const fmpq_poly_t poly, ulong e, slong n) + void fmpq_poly_shift_left(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void fmpq_poly_shift_right(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + # void _fmpq_poly_divrem(fmpz_struct * Q, fmpz_t q, fmpz_struct * R, fmpz_t r, const fmpz_struct * A, const fmpz_t a, slong lenA, const fmpz_struct * B, const fmpz_t b, slong lenB, const fmpz_preinvn_t inv) + void fmpq_poly_divrem(fmpq_poly_t Q, fmpq_poly_t R, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + # void _fmpq_poly_div(fmpz_struct * Q, fmpz_t q, const fmpz_struct * A, const fmpz_t a, slong lenA, const fmpz_struct * B, const fmpz_t b, slong lenB, const fmpz_preinvn_t inv) + void fmpq_poly_div(fmpq_poly_t Q, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + # void _fmpq_poly_rem(fmpz_struct * R, fmpz_t r, const fmpz_struct * A, const fmpz_t a, slong lenA, const fmpz_struct * B, const fmpz_t b, slong lenB, const fmpz_preinvn_t inv) + void fmpq_poly_rem(fmpq_poly_t R, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + fmpq_poly_struct * _fmpq_poly_powers_precompute(const fmpz_struct * B, const fmpz_t denB, slong len) + # void fmpq_poly_powers_precompute(fmpq_poly_powers_precomp_t pinv, fmpq_poly_t poly) + void _fmpq_poly_powers_clear(fmpq_poly_struct * powers, slong len) + # void fmpq_poly_powers_clear(fmpq_poly_powers_precomp_t pinv) + void _fmpq_poly_rem_powers_precomp(fmpz_struct * A, fmpz_t denA, slong m, const fmpz_struct * B, const fmpz_t denB, slong n, const fmpq_poly_struct * const powers) + # void fmpq_poly_rem_powers_precomp(fmpq_poly_t R, const fmpq_poly_t A, const fmpq_poly_t B, const fmpq_poly_powers_precomp_t B_inv) + int _fmpq_poly_divides(fmpz_struct * qpoly, fmpz_t qden, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2) + int fmpq_poly_divides(fmpq_poly_t q, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + slong fmpq_poly_remove(fmpq_poly_t q, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + void _fmpq_poly_inv_series_newton(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, slong n) + void fmpq_poly_inv_series_newton(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_inv_series(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong n) + void fmpq_poly_inv_series(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_div_series(fmpz_struct * Q, fmpz_t denQ, const fmpz_struct * A, const fmpz_t denA, slong lenA, const fmpz_struct * B, const fmpz_t denB, slong lenB, slong n) + void fmpq_poly_div_series(fmpq_poly_t Q, const fmpq_poly_t A, const fmpq_poly_t B, slong n) + void _fmpq_poly_gcd(fmpz_struct *G, fmpz_t denG, const fmpz_struct *A, slong lenA, const fmpz_struct *B, slong lenB) + void fmpq_poly_gcd(fmpq_poly_t G, const fmpq_poly_t A, const fmpq_poly_t B) + void _fmpq_poly_xgcd(fmpz_struct *G, fmpz_t denG, fmpz_struct *S, fmpz_t denS, fmpz_struct *T, fmpz_t denT, const fmpz_struct *A, const fmpz_t denA, slong lenA, const fmpz_struct *B, const fmpz_t denB, slong lenB) void fmpq_poly_xgcd(fmpq_poly_t G, fmpq_poly_t S, fmpq_poly_t T, const fmpq_poly_t A, const fmpq_poly_t B) - void fmpq_poly_rem(fmpq_poly_t R, fmpq_poly_t poly1, fmpq_poly_t poly2) - void fmpq_poly_inv_series(fmpq_poly_t Qinv, fmpq_poly_t Q, long n) - void fmpq_poly_div_series(fmpq_poly_t Q, fmpq_poly_t A, fmpq_poly_t B, long n) - void fmpq_poly_derivative(fmpq_poly_t res, fmpq_poly_t poly) - void fmpq_poly_integral(fmpq_poly_t res, fmpq_poly_t poly) - void fmpq_poly_invsqrt_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_sqrt_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_log_series(fmpq_poly_t res, fmpq_poly_t f, long n) - void fmpq_poly_exp_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_atan_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_atanh_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_asin_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_asinh_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_tan_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_sin_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_cos_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_sinh_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_cosh_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_tanh_series(fmpq_poly_t res, fmpq_poly_t poly, long n) - void fmpq_poly_evaluate_fmpz(fmpq_t res, fmpq_poly_t poly, fmpz_t a) - void fmpq_poly_evaluate_fmpq(fmpq_t res, fmpq_poly_t poly, fmpq_t a) - # void fmpq_poly_evaluate_mpq(mpq_t res, fmpq_poly_t poly, mpq_t a) - void fmpq_poly_interpolate_fmpz_vec(fmpq_poly_t poly, fmpz_struct * xs, fmpz_struct * ys, long n) - void fmpq_poly_compose(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2) - #void fmpq_poly_rescale(fmpq_poly_t res, fmpq_poly_t poly, mpq_t x) - #void fmpq_poly_content(mpq_t res, fmpq_poly_t poly) - void fmpq_poly_primitive_part(fmpq_poly_t res, fmpq_poly_t poly) - int fmpq_poly_is_monic(fmpq_poly_t poly) - void fmpq_poly_make_monic(fmpq_poly_t res, fmpq_poly_t poly) - int fmpq_poly_is_squarefree(fmpq_poly_t poly) - int fmpq_poly_debug(fmpq_poly_t poly) - #int fmpq_poly_fprint(FILE * file, fmpq_poly_t poly) - int fmpq_poly_print(fmpq_poly_t poly) - int fmpq_poly_print_pretty(fmpq_poly_t poly, char * var) - #int fmpq_poly_fread(FILE * file, fmpq_poly_t poly) + void _fmpq_poly_lcm(fmpz_struct *L, fmpz_t denL, const fmpz_struct *A, slong lenA, const fmpz_struct *B, slong lenB) + void fmpq_poly_lcm(fmpq_poly_t L, const fmpq_poly_t A, const fmpq_poly_t B) + void _fmpq_poly_resultant(fmpz_t rnum, fmpz_t rden, const fmpz_struct *poly1, const fmpz_t den1, slong len1, const fmpz_struct *poly2, const fmpz_t den2, slong len2) + void fmpq_poly_resultant(fmpq_t r, const fmpq_poly_t f, const fmpq_poly_t g) + void fmpq_poly_resultant_div(fmpq_t r, const fmpq_poly_t f, const fmpq_poly_t g, fmpz_t div, slong nbits) + void _fmpq_poly_derivative(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_derivative(fmpq_poly_t res, const fmpq_poly_t poly) + void _fmpq_poly_nth_derivative(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, ulong n, slong len) + void fmpq_poly_nth_derivative(fmpq_poly_t res, const fmpq_poly_t poly, ulong n) + void _fmpq_poly_integral(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_integral(fmpq_poly_t res, const fmpq_poly_t poly) + void _fmpq_poly_sqrt_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_sqrt_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_invsqrt_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_invsqrt_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_power_sums(fmpz_struct * res, fmpz_t rden, const fmpz_struct * poly, slong len, slong n) + void fmpq_poly_power_sums(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_power_sums_to_poly(fmpz_struct * res, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_power_sums_to_fmpz_poly(fmpz_poly_t res, const fmpq_poly_t Q) + void fmpq_poly_power_sums_to_poly(fmpq_poly_t res, const fmpq_poly_t Q) + void _fmpq_poly_log_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_log_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_exp_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * h, const fmpz_t hden, slong hlen, slong n) + void fmpq_poly_exp_series(fmpq_poly_t res, const fmpq_poly_t h, slong n) + void _fmpq_poly_exp_expinv_series(fmpz_struct * res1, fmpz_t res1den, fmpz_struct * res2, fmpz_t res2den, const fmpz_struct * h, const fmpz_t hden, slong hlen, slong n) + void fmpq_poly_exp_expinv_series(fmpq_poly_t res1, fmpq_poly_t res2, const fmpq_poly_t h, slong n) + void _fmpq_poly_atan_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_atan_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_atanh_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_atanh_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_asin_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_asin_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_asinh_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_asinh_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_tan_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_tan_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_sin_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_sin_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_cos_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_cos_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_sin_cos_series(fmpz_struct * s, fmpz_t sden, fmpz_struct * c, fmpz_t cden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_sin_cos_series(fmpq_poly_t res1, fmpq_poly_t res2, const fmpq_poly_t f, slong n) + void _fmpq_poly_sinh_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_sinh_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_cosh_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_cosh_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_sinh_cosh_series(fmpz_struct * s, fmpz_t sden, fmpz_struct * c, fmpz_t cden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_sinh_cosh_series(fmpq_poly_t res1, fmpq_poly_t res2, const fmpq_poly_t f, slong n) + void _fmpq_poly_tanh_series(fmpz_struct * g, fmpz_t gden, const fmpz_struct * f, const fmpz_t fden, slong flen, slong n) + void fmpq_poly_tanh_series(fmpq_poly_t res, const fmpq_poly_t f, slong n) + void _fmpq_poly_legendre_p(fmpq_struct * coeffs, fmpz_t den, ulong n) + void fmpq_poly_legendre_p(fmpq_poly_t poly, ulong n) + void _fmpq_poly_laguerre_l(fmpq_struct * coeffs, fmpz_t den, ulong n) + void fmpq_poly_laguerre_l(fmpq_poly_t poly, ulong n) + void _fmpq_poly_gegenbauer_c(fmpq_struct * coeffs, fmpz_t den, ulong n, const fmpq_t a) + void fmpq_poly_gegenbauer_c(fmpq_poly_t poly, ulong n, const fmpq_t a) + void _fmpq_poly_evaluate_fmpz(fmpz_t rnum, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t a) + void fmpq_poly_evaluate_fmpz(fmpq_t res, const fmpq_poly_t poly, const fmpz_t a) + void _fmpq_poly_evaluate_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t anum, const fmpz_t aden) + void fmpq_poly_evaluate_fmpq(fmpq_t res, const fmpq_poly_t poly, const fmpq_t a) + # void fmpq_poly_evaluate_mpz(mpq_t res, const fmpq_poly_t poly, const mpz_t a) + # void fmpq_poly_evaluate_mpq(mpq_t res, const fmpq_poly_t poly, const mpq_t a) + void _fmpq_poly_interpolate_fmpz_vec(fmpz_struct * poly, fmpz_t den, const fmpz_struct * xs, const fmpz_struct * ys, slong n) + void fmpq_poly_interpolate_fmpz_vec(fmpq_poly_t poly, const fmpz_struct * xs, const fmpz_struct * ys, slong n) + void _fmpq_poly_compose(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2) + void fmpq_poly_compose(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2) + void _fmpq_poly_rescale(fmpz_struct * res, fmpz_t denr, const fmpz_struct * poly, const fmpz_t den, slong len, const fmpz_t anum, const fmpz_t aden) + void fmpq_poly_rescale(fmpq_poly_t res, const fmpq_poly_t poly, const fmpq_t a) + void _fmpq_poly_compose_series_horner(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void fmpq_poly_compose_series_horner(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2, slong n) + void _fmpq_poly_compose_series_brent_kung(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void fmpq_poly_compose_series_brent_kung(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2, slong n) + void _fmpq_poly_compose_series(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, const fmpz_struct * poly2, const fmpz_t den2, slong len2, slong n) + void fmpq_poly_compose_series(fmpq_poly_t res, const fmpq_poly_t poly1, const fmpq_poly_t poly2, slong n) + void _fmpq_poly_revert_series_lagrange(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, slong n) + void fmpq_poly_revert_series_lagrange(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_revert_series_lagrange_fast(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, slong n) + void fmpq_poly_revert_series_lagrange_fast(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_revert_series_newton(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, slong n) + void fmpq_poly_revert_series_newton(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_revert_series(fmpz_struct * res, fmpz_t den, const fmpz_struct * poly1, const fmpz_t den1, slong len1, slong n) + void fmpq_poly_revert_series(fmpq_poly_t res, const fmpq_poly_t poly, slong n) + void _fmpq_poly_content(fmpq_t res, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_content(fmpq_t res, const fmpq_poly_t poly) + void _fmpq_poly_primitive_part(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_primitive_part(fmpq_poly_t res, const fmpq_poly_t poly) + int _fmpq_poly_is_monic(const fmpz_struct * poly, const fmpz_t den, slong len) + int fmpq_poly_is_monic(const fmpq_poly_t poly) + void _fmpq_poly_make_monic(fmpz_struct * rpoly, fmpz_t rden, const fmpz_struct * poly, const fmpz_t den, slong len) + void fmpq_poly_make_monic(fmpq_poly_t res, const fmpq_poly_t poly) + int fmpq_poly_is_squarefree(const fmpq_poly_t poly) + int _fmpq_poly_print(const fmpz_struct * poly, const fmpz_t den, slong len) + int fmpq_poly_print(const fmpq_poly_t poly) + int _fmpq_poly_print_pretty(const fmpz_struct *poly, const fmpz_t den, slong len, const char * x) + int fmpq_poly_print_pretty(const fmpq_poly_t poly, const char * var) + # int fmpq_poly_fprint_pretty(FILE * file, const fmpq_poly_t poly, const char * var) int fmpq_poly_read(fmpq_poly_t poly) - void fmpq_poly_compose_series(fmpq_poly_t res, fmpq_poly_t poly1, fmpq_poly_t poly2, long n) - void fmpq_poly_revert_series(fmpq_poly_t res, fmpq_poly_t poly1, long n) + + + diff --git a/src/flint/flintlib/fmpz.pxd b/src/flint/flintlib/fmpz.pxd index 69791b02..4779537d 100644 --- a/src/flint/flintlib/fmpz.pxd +++ b/src/flint/flintlib/fmpz.pxd @@ -1,103 +1,250 @@ from flint.flintlib.flint cimport fmpz_struct, ulong, mp_limb_t -from flint.flintlib.flint cimport mp_size_t, mp_bitcnt_t +from flint.flintlib.flint cimport mp_size_t, mp_bitcnt_t, slong, flint_rand_t, flint_bitcnt_t +# from flint.flintlib.nmod cimport nmod_t +# from flint.flintlib.fmpz_factor cimport fmpz_factor_t cdef extern from "flint/fmpz.h": ctypedef fmpz_struct fmpz_t[1] - int COEFF_IS_MPZ(fmpz_struct v) - void fmpz_init(fmpz_t op) - void fmpz_clear(fmpz_t op) - long fmpz_get_si(fmpz_t f) - ulong fmpz_get_ui(fmpz_t f) - void fmpz_set_si(fmpz_t f, long val) + + +# from here on is parsed + # fmpz_struct PTR_TO_COEFF(__mpz_struct * ptr) + # __mpz_struct * COEFF_TO_PTR(fmpz_struct f) + int COEFF_IS_MPZ(fmpz_struct f) + # __mpz_struct * _fmpz_new_mpz(void) + void _fmpz_clear_mpz(fmpz_struct f) + void _fmpz_cleanup_mpz_content() + void _fmpz_cleanup() + # __mpz_struct * _fmpz_promote(fmpz_t f) + # __mpz_struct * _fmpz_promote_val(fmpz_t f) + void _fmpz_demote(fmpz_t f) + void _fmpz_demote_val(fmpz_t f) + void fmpz_init(fmpz_t f) + void fmpz_init2(fmpz_t f, ulong limbs) + void fmpz_clear(fmpz_t f) + void fmpz_init_set(fmpz_t f, const fmpz_t g) + void fmpz_init_set_ui(fmpz_t f, ulong g) + void fmpz_init_set_si(fmpz_t f, slong g) + void fmpz_randbits(fmpz_t f, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_randtest(fmpz_t f, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_randtest_unsigned(fmpz_t f, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_randtest_not_zero(fmpz_t f, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_randm(fmpz_t f, flint_rand_t state, const fmpz_t m) + void fmpz_randtest_mod(fmpz_t f, flint_rand_t state, const fmpz_t m) + void fmpz_randtest_mod_signed(fmpz_t f, flint_rand_t state, const fmpz_t m) + void fmpz_randprime(fmpz_t f, flint_rand_t state, flint_bitcnt_t bits, int proved) + slong fmpz_get_si(const fmpz_t f) + ulong fmpz_get_ui(const fmpz_t f) + void fmpz_get_uiui(mp_limb_t * hi, mp_limb_t * low, const fmpz_t f) + # moved to nmod.pxd + # mp_limb_t fmpz_get_nmod(const fmpz_t f, nmod_t mod) + double fmpz_get_d(const fmpz_t f) + # void fmpz_set_mpf(fmpz_t f, const mpf_t x) + # void fmpz_get_mpf(mpf_t x, const fmpz_t f) + # void fmpz_get_mpfr(mpfr_t x, const fmpz_t f, mpfr_rnd_t rnd) + double fmpz_get_d_2exp(slong * exp, const fmpz_t f) + # void fmpz_get_mpz(mpz_t x, const fmpz_t f) + # int fmpz_get_mpn(mp_ptr *n, fmpz_t n_in) + char * fmpz_get_str(char * str, int b, const fmpz_t f) + void fmpz_set_si(fmpz_t f, slong val) void fmpz_set_ui(fmpz_t f, ulong val) - #void fmpz_get_mpz(mpz_t x, fmpz_t f) - #void fmpz_set_mpz(fmpz_t f, mpz_t x) - int fmpz_set_str(fmpz_t f, char * str, int b) - int fmpz_abs_fits_ui( fmpz_t f) - void fmpz_zero(fmpz_t f) - void fmpz_one(fmpz_t f) - int fmpz_is_zero(fmpz_t f) - int fmpz_is_one( fmpz_t f) - int fmpz_is_pm1( fmpz_t f) - void fmpz_set(fmpz_t f, fmpz_t g) - int fmpz_equal(fmpz_t f, fmpz_t g) + void fmpz_set_d(fmpz_t f, double c) + void fmpz_set_d_2exp(fmpz_t f, double d, slong exp) + void fmpz_neg_ui(fmpz_t f, ulong val) + void fmpz_set_uiui(fmpz_t f, mp_limb_t hi, mp_limb_t lo) + void fmpz_neg_uiui(fmpz_t f, mp_limb_t hi, mp_limb_t lo) + void fmpz_set_signed_uiui(fmpz_t f, ulong hi, ulong lo) + void fmpz_set_signed_uiuiui(fmpz_t f, ulong hi, ulong mid, ulong lo) + void fmpz_set_ui_array(fmpz_t out, const ulong * in_, slong n) + void fmpz_set_signed_ui_array(fmpz_t out, const ulong * in_, slong n) + void fmpz_get_ui_array(ulong * out, slong n, const fmpz_t in_) + void fmpz_get_signed_ui_array(ulong * out, slong n, const fmpz_t in_) + void fmpz_get_signed_uiui(ulong * hi, ulong * lo, const fmpz_t in_) + # void fmpz_set_mpz(fmpz_t f, const mpz_t x) + int fmpz_set_str(fmpz_t f, const char * str, int b) + void fmpz_set_ui_smod(fmpz_t f, mp_limb_t x, mp_limb_t m) + # void flint_mpz_init_set_readonly(mpz_t z, const fmpz_t f) + # void flint_mpz_clear_readonly(mpz_t z) + # void fmpz_init_set_readonly(fmpz_t f, const mpz_t z) + void fmpz_clear_readonly(fmpz_t f) int fmpz_read(fmpz_t f) int fmpz_print(fmpz_t x) - size_t fmpz_sizeinbase( fmpz_t f, int b) - char * fmpz_get_str(char * str, int b, fmpz_t f) + size_t fmpz_sizeinbase(const fmpz_t f, int b) + flint_bitcnt_t fmpz_bits(const fmpz_t f) + mp_size_t fmpz_size(const fmpz_t f) + int fmpz_sgn(const fmpz_t f) + flint_bitcnt_t fmpz_val2(const fmpz_t f) void fmpz_swap(fmpz_t f, fmpz_t g) - int fmpz_cmp( fmpz_t f, fmpz_t g) - int fmpz_cmp_ui( fmpz_t f, ulong g) - int fmpz_cmp_si( fmpz_t f, long g) - int fmpz_cmpabs( fmpz_t f, fmpz_t g) - int fmpz_equal_si(const fmpz_t f, long g) - int fmpz_is_even(fmpz_t f) - int fmpz_is_odd(fmpz_t f) - mp_size_t fmpz_size(fmpz_t f) - int fmpz_sgn(fmpz_t f) - mp_bitcnt_t fmpz_bits(fmpz_t f) - void fmpz_neg(fmpz_t f1, fmpz_t f2) - void fmpz_abs(fmpz_t f1, fmpz_t f2) - void fmpz_add(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_sub(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_mul_ui(fmpz_t f, fmpz_t g, ulong x) - void fmpz_mul_si(fmpz_t f, fmpz_t g, long x) - void fmpz_mul(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_mul_2exp(fmpz_t f, fmpz_t g, ulong exp) - void fmpz_add_ui(fmpz_t f, fmpz_t g, ulong x) - void fmpz_sub_ui(fmpz_t f, fmpz_t g, ulong x) - void fmpz_addmul_ui(fmpz_t f, fmpz_t g, ulong x) - void fmpz_submul_ui(fmpz_t f, fmpz_t g, ulong x) - void fmpz_addmul(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_submul(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_pow_ui(fmpz_t f, fmpz_t g, ulong exp) - void fmpz_powm_ui(fmpz_t f, fmpz_t g, ulong exp, fmpz_t m) - void fmpz_powm(fmpz_t f, fmpz_t g, fmpz_t e, fmpz_t m) + void fmpz_set(fmpz_t f, const fmpz_t g) + void fmpz_zero(fmpz_t f) + void fmpz_one(fmpz_t f) + int fmpz_abs_fits_ui(const fmpz_t f) + int fmpz_fits_si(const fmpz_t f) + void fmpz_setbit(fmpz_t f, ulong i) + int fmpz_tstbit(const fmpz_t f, ulong i) + mp_limb_t fmpz_abs_lbound_ui_2exp(slong * exp, const fmpz_t x, int bits) + mp_limb_t fmpz_abs_ubound_ui_2exp(slong * exp, const fmpz_t x, int bits) + int fmpz_cmp(const fmpz_t f, const fmpz_t g) + int fmpz_cmp_ui(const fmpz_t f, ulong g) + int fmpz_cmp_si(const fmpz_t f, slong g) + int fmpz_cmpabs(const fmpz_t f, const fmpz_t g) + int fmpz_cmp2abs(const fmpz_t f, const fmpz_t g) + int fmpz_equal(const fmpz_t f, const fmpz_t g) + int fmpz_equal_ui(const fmpz_t f, ulong g) + int fmpz_equal_si(const fmpz_t f, slong g) + int fmpz_is_zero(const fmpz_t f) + int fmpz_is_one(const fmpz_t f) + int fmpz_is_pm1(const fmpz_t f) + int fmpz_is_even(const fmpz_t f) + int fmpz_is_odd(const fmpz_t f) + void fmpz_neg(fmpz_t f1, const fmpz_t f2) + void fmpz_abs(fmpz_t f1, const fmpz_t f2) + void fmpz_add(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_add_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_add_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_sub(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_sub_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_sub_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_mul(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_mul_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_mul_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_mul2_uiui(fmpz_t f, const fmpz_t g, ulong x, ulong y) + void fmpz_mul_2exp(fmpz_t f, const fmpz_t g, ulong e) + void fmpz_one_2exp(fmpz_t f, ulong e) + void fmpz_addmul(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_addmul_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_addmul_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_submul(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_submul_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_submul_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_fmma(fmpz_t f, const fmpz_t a, const fmpz_t b, const fmpz_t c, const fmpz_t d) + void fmpz_fmms(fmpz_t f, const fmpz_t a, const fmpz_t b, const fmpz_t c, const fmpz_t d) + void fmpz_cdiv_qr(fmpz_t f, fmpz_t s, const fmpz_t g, const fmpz_t h) + void fmpz_fdiv_qr(fmpz_t f, fmpz_t s, const fmpz_t g, const fmpz_t h) + void fmpz_tdiv_qr(fmpz_t f, fmpz_t s, const fmpz_t g, const fmpz_t h) + void fmpz_ndiv_qr(fmpz_t f, fmpz_t s, const fmpz_t g, const fmpz_t h) + void fmpz_cdiv_q(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_fdiv_q(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_tdiv_q(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_cdiv_q_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_fdiv_q_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_tdiv_q_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_cdiv_q_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_fdiv_q_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_tdiv_q_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_cdiv_q_2exp(fmpz_t f, const fmpz_t g, ulong exp) + void fmpz_fdiv_q_2exp(fmpz_t f, const fmpz_t g, ulong exp) + void fmpz_tdiv_q_2exp(fmpz_t f, const fmpz_t g, ulong exp) + void fmpz_fdiv_r(fmpz_t s, const fmpz_t g, const fmpz_t h) + void fmpz_cdiv_r_2exp(fmpz_t s, const fmpz_t g, ulong exp) + void fmpz_fdiv_r_2exp(fmpz_t s, const fmpz_t g, ulong exp) + void fmpz_tdiv_r_2exp(fmpz_t s, const fmpz_t g, ulong exp) + ulong fmpz_cdiv_ui(const fmpz_t g, ulong h) + ulong fmpz_fdiv_ui(const fmpz_t g, ulong h) + ulong fmpz_tdiv_ui(const fmpz_t g, ulong h) + void fmpz_divexact(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_divexact_si(fmpz_t f, const fmpz_t g, slong h) + void fmpz_divexact_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_divexact2_uiui(fmpz_t f, const fmpz_t g, ulong x, ulong y) + int fmpz_divisible(const fmpz_t f, const fmpz_t g) + int fmpz_divisible_si(const fmpz_t f, slong g) + int fmpz_divides(fmpz_t q, const fmpz_t g, const fmpz_t h) + void fmpz_mod(fmpz_t f, const fmpz_t g, const fmpz_t h) + ulong fmpz_mod_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_smod(fmpz_t f, const fmpz_t g, const fmpz_t h) + # void fmpz_preinvn_init(fmpz_preinvn_t inv, const fmpz_t f) + # void fmpz_preinvn_clear(fmpz_preinvn_t inv) + # void fmpz_fdiv_qr_preinvn(fmpz_t f, fmpz_t s, const fmpz_t g, const fmpz_t h, const fmpz_preinvn_t hinv) + void fmpz_pow_ui(fmpz_t f, const fmpz_t g, ulong x) int fmpz_pow_fmpz(fmpz_t f, const fmpz_t g, const fmpz_t x) - int fmpz_sqrtmod(fmpz_t b, fmpz_t a, fmpz_t p) - void fmpz_sqrt(fmpz_t f, fmpz_t g) - void fmpz_sqrtrem(fmpz_t f, fmpz_t r, fmpz_t g) - void fmpz_root(fmpz_t r, const fmpz_t f, long n) - ulong fmpz_fdiv_ui(fmpz_t g, ulong h) - ulong fmpz_mod_ui(fmpz_t f, fmpz_t g, ulong h) - void fmpz_mod(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_gcd(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_lcm(fmpz_t f, fmpz_t g, fmpz_t h) - int fmpz_invmod(fmpz_t f, fmpz_t g, fmpz_t h) - long fmpz_remove(fmpz_t rop, fmpz_t op, fmpz_t f) - void fmpz_divexact(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_divexact_si(fmpz_t f, fmpz_t g, long h) - void fmpz_divexact_ui(fmpz_t f, fmpz_t g, ulong h) - void fmpz_cdiv_q(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_cdiv_q_si(fmpz_t f, fmpz_t g, long h) - void fmpz_cdiv_q_ui(fmpz_t f, fmpz_t g, ulong h) - void fmpz_fdiv_qr(fmpz_t f, fmpz_t s, fmpz_t g, fmpz_t h) - void fmpz_fdiv_q(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_fdiv_r(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_fdiv_q_ui(fmpz_t f, fmpz_t g, ulong h) - void fmpz_fdiv_q_si(fmpz_t f, fmpz_t g, long h) - void fmpz_fdiv_q_2exp(fmpz_t f, fmpz_t g, ulong exp) - void fmpz_tdiv_q(fmpz_t f, fmpz_t g, fmpz_t h) - void fmpz_tdiv_q_ui(fmpz_t f, fmpz_t g, ulong h) - void fmpz_tdiv_q_si(fmpz_t f, fmpz_t g, long h) - double fmpz_get_d_2exp(long * exp, fmpz_t f) - void fmpz_mul2_uiui(fmpz_t f, fmpz_t g, ulong h1, ulong h2) - void fmpz_divexact2_uiui(fmpz_t f, fmpz_t g, ulong h1, ulong h2) + void fmpz_powm_ui(fmpz_t f, const fmpz_t g, ulong e, const fmpz_t m) + void fmpz_powm(fmpz_t f, const fmpz_t g, const fmpz_t e, const fmpz_t m) + slong fmpz_clog(const fmpz_t x, const fmpz_t b) + slong fmpz_clog_ui(const fmpz_t x, ulong b) + slong fmpz_flog(const fmpz_t x, const fmpz_t b) + slong fmpz_flog_ui(const fmpz_t x, ulong b) + double fmpz_dlog(const fmpz_t x) + int fmpz_sqrtmod(fmpz_t b, const fmpz_t a, const fmpz_t p) + void fmpz_sqrt(fmpz_t f, const fmpz_t g) + void fmpz_sqrtrem(fmpz_t f, fmpz_t r, const fmpz_t g) + int fmpz_is_square(const fmpz_t f) + int fmpz_root(fmpz_t r, const fmpz_t f, slong n) + int fmpz_is_perfect_power(fmpz_t root, const fmpz_t f) void fmpz_fac_ui(fmpz_t f, ulong n) - void fmpz_bin_uiui(fmpz_t res, ulong n, ulong k) - void fmpz_CRT_ui(fmpz_t out, fmpz_t r1, fmpz_t m1, ulong r2, ulong m2) - void fmpz_CRT_ui_unsigned(fmpz_t out, fmpz_t r1, fmpz_t m1, ulong r2, ulong m2) - void fmpz_set_ui_mod(fmpz_t f, mp_limb_t x, mp_limb_t m) - int fmpz_moebius_mu(const fmpz_t f) void fmpz_fib_ui(fmpz_t f, ulong n) - void fmpz_rfac_ui(fmpz_t r, const fmpz_t x, ulong n) - void fmpz_rfac_uiui(fmpz_t r, ulong x, ulong n) - void fmpz_primorial(fmpz_t res, ulong n) - int fmpz_is_perfect_power(fmpz_t root, const fmpz_t f) - int fmpz_jacobi(const fmpz_t a, const fmpz_t p) - int fmpz_is_prime(const fmpz_t n) - int fmpz_is_probabprime(const fmpz_t n) + void fmpz_bin_uiui(fmpz_t f, ulong n, ulong k) + void _fmpz_rfac_ui(fmpz_t r, const fmpz_t x, ulong a, ulong b) + void fmpz_rfac_ui(fmpz_t r, const fmpz_t x, ulong k) + void fmpz_rfac_uiui(fmpz_t r, ulong x, ulong k) + void fmpz_mul_tdiv_q_2exp(fmpz_t f, const fmpz_t g, const fmpz_t h, ulong exp) + void fmpz_mul_si_tdiv_q_2exp(fmpz_t f, const fmpz_t g, slong x, ulong exp) + void fmpz_gcd_ui(fmpz_t f, const fmpz_t g, ulong h) + void fmpz_gcd(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_gcd3(fmpz_t f, const fmpz_t a, const fmpz_t b, const fmpz_t c) + void fmpz_lcm(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_gcdinv(fmpz_t d, fmpz_t a, const fmpz_t f, const fmpz_t g) + void fmpz_xgcd(fmpz_t d, fmpz_t a, fmpz_t b, const fmpz_t f, const fmpz_t g) + void fmpz_xgcd_canonical_bezout(fmpz_t d, fmpz_t a, fmpz_t b, const fmpz_t f, const fmpz_t g) + void fmpz_xgcd_partial(fmpz_t co2, fmpz_t co1, fmpz_t r2, fmpz_t r1, const fmpz_t L) + slong _fmpz_remove(fmpz_t x, const fmpz_t f, double finv) + slong fmpz_remove(fmpz_t rop, const fmpz_t op, const fmpz_t f) + int fmpz_invmod(fmpz_t f, const fmpz_t g, const fmpz_t h) + void fmpz_negmod(fmpz_t f, const fmpz_t g, const fmpz_t h) + int fmpz_jacobi(const fmpz_t a, const fmpz_t n) + int fmpz_kronecker(const fmpz_t a, const fmpz_t n) + void fmpz_divides_mod_list(fmpz_t xstart, fmpz_t xstride, fmpz_t xlength, const fmpz_t a, const fmpz_t b, const fmpz_t n) + int fmpz_bit_pack(mp_limb_t * arr, flint_bitcnt_t shift, flint_bitcnt_t bits, fmpz_t coeff, int negate, int borrow) + int fmpz_bit_unpack(fmpz_t coeff, mp_limb_t * arr, flint_bitcnt_t shift, flint_bitcnt_t bits, int negate, int borrow) + void fmpz_bit_unpack_unsigned(fmpz_t coeff, const mp_limb_t * arr, flint_bitcnt_t shift, flint_bitcnt_t bits) void fmpz_complement(fmpz_t r, const fmpz_t f) + void fmpz_clrbit(fmpz_t f, ulong i) + void fmpz_combit(fmpz_t f, ulong i) void fmpz_and(fmpz_t r, const fmpz_t a, const fmpz_t b) void fmpz_or(fmpz_t r, const fmpz_t a, const fmpz_t b) void fmpz_xor(fmpz_t r, const fmpz_t a, const fmpz_t b) + int fmpz_popcnt(const fmpz_t a) + void fmpz_CRT_ui(fmpz_t out, fmpz_t r1, fmpz_t m1, ulong r2, ulong m2, int sign) + void fmpz_CRT(fmpz_t out, const fmpz_t r1, const fmpz_t m1, fmpz_t r2, fmpz_t m2, int sign) + # void fmpz_multi_mod_ui(mp_limb_t * out, const fmpz_t in_, const fmpz_comb_t comb, fmpz_comb_temp_t temp) + # void fmpz_multi_CRT_ui(fmpz_t output, mp_srcptr residues, const fmpz_comb_t comb, fmpz_comb_temp_t ctemp, int sign) + # void fmpz_comb_init(fmpz_comb_t comb, mp_srcptr primes, slong num_primes) + # void fmpz_comb_temp_init(fmpz_comb_temp_t temp, const fmpz_comb_t comb) + # void fmpz_comb_clear(fmpz_comb_t comb) + # void fmpz_comb_temp_clear(fmpz_comb_temp_t temp) + # void fmpz_multi_crt_init(fmpz_multi_crt_t CRT) + # int fmpz_multi_crt_precompute(fmpz_multi_crt_t CRT, const fmpz_struct * moduli, slong len) + # int fmpz_multi_crt_precompute_p(fmpz_multi_crt_t CRT, const fmpz_struct * const * moduli, slong len) + # void fmpz_multi_crt_precomp(fmpz_t output, const fmpz_multi_crt_t P, const fmpz_struct * inputs) + # void fmpz_multi_crt_precomp_p(fmpz_t output, const fmpz_multi_crt_t P, const fmpz_struct * const * inputs) + int fmpz_multi_crt(fmpz_t output, const fmpz_struct * moduli, const fmpz_struct * values, slong len) + # void fmpz_multi_crt_clear(fmpz_multi_crt_t P) + # slong _nmod_poly_crt_local_size(const nmod_poly_crt_t CRT) + # void _fmpz_multi_crt_run(fmpz_struct * outputs, const fmpz_multi_crt_t CRT, const fmpz_struct * inputs) + # void _fmpz_multi_crt_run_p(fmpz_struct * outputs, const fmpz_multi_crt_t CRT, const fmpz_struct * const * inputs) + int fmpz_is_strong_probabprime(const fmpz_t n, const fmpz_t a) + int fmpz_is_probabprime_lucas(const fmpz_t n) + int fmpz_is_probabprime_BPSW(const fmpz_t n) + int fmpz_is_probabprime(const fmpz_t p) + int fmpz_is_prime_pseudosquare(const fmpz_t n) + # int fmpz_is_prime_pocklington(fmpz_t F, fmpz_t R, const fmpz_t n, mp_ptr pm1, slong num_pm1) + # void _fmpz_nm1_trial_factors(const fmpz_t n, mp_ptr pm1, slong * num_pm1, ulong limit) + # int fmpz_is_prime_morrison(fmpz_t F, fmpz_t R, const fmpz_t n, mp_ptr pp1, slong num_pp1) + # void _fmpz_np1_trial_factors(const fmpz_t n, mp_ptr pp1, slong * num_pp1, ulong limit) + int fmpz_is_prime(const fmpz_t n) + void fmpz_lucas_chain(fmpz_t Vm, fmpz_t Vm1, const fmpz_t A, const fmpz_t m, const fmpz_t n) + void fmpz_lucas_chain_full(fmpz_t Vm, fmpz_t Vm1, const fmpz_t A, const fmpz_t B, const fmpz_t m, const fmpz_t n) + void fmpz_lucas_chain_double(fmpz_t U2m, fmpz_t U2m1, const fmpz_t Um, const fmpz_t Um1, const fmpz_t A, const fmpz_t B, const fmpz_t n) + void fmpz_lucas_chain_add(fmpz_t Umn, fmpz_t Umn1, const fmpz_t Um, const fmpz_t Um1, const fmpz_t Un, const fmpz_t Un1, const fmpz_t A, const fmpz_t B, const fmpz_t n) + void fmpz_lucas_chain_mul(fmpz_t Ukm, fmpz_t Ukm1, const fmpz_t Um, const fmpz_t Um1, const fmpz_t A, const fmpz_t B, const fmpz_t k, const fmpz_t n) + void fmpz_lucas_chain_VtoU(fmpz_t Um, fmpz_t Um1, const fmpz_t Vm, const fmpz_t Vm1, const fmpz_t A, const fmpz_t B, const fmpz_t Dinv, const fmpz_t n) + int fmpz_divisor_in_residue_class_lenstra(fmpz_t fac, const fmpz_t n, const fmpz_t r, const fmpz_t s) + void fmpz_nextprime(fmpz_t res, const fmpz_t n, int proved) + void fmpz_primorial(fmpz_t res, ulong n) + # void fmpz_factor_euler_phi(fmpz_t res, const fmpz_factor_t fac) + void fmpz_euler_phi(fmpz_t res, const fmpz_t n) + # int fmpz_factor_moebius_mu(const fmpz_factor_t fac) + int fmpz_moebius_mu(const fmpz_t n) + # void fmpz_factor_divisor_sigma(fmpz_t res, ulong k, const fmpz_factor_t fac) + void fmpz_divisor_sigma(fmpz_t res, ulong k, const fmpz_t n) + + diff --git a/src/flint/flintlib/fmpz_factor.pxd b/src/flint/flintlib/fmpz_factor.pxd index 272a55c9..f7618faa 100644 --- a/src/flint/flintlib/fmpz_factor.pxd +++ b/src/flint/flintlib/fmpz_factor.pxd @@ -1,4 +1,4 @@ -from flint.flintlib.flint cimport fmpz_struct, ulong +from flint.flintlib.flint cimport fmpz_struct, ulong, mp_limb_t, slong, flint_rand_t from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/fmpz_factor.h": @@ -9,10 +9,39 @@ cdef extern from "flint/fmpz_factor.h": long alloc long num ctypedef fmpz_factor_struct fmpz_factor_t[1] + +# from here on is parsed void fmpz_factor_init(fmpz_factor_t factor) void fmpz_factor_clear(fmpz_factor_t factor) - void fmpz_factor(fmpz_factor_t factor, fmpz_t n) + void _fmpz_factor_append_ui(fmpz_factor_t factor, mp_limb_t p, ulong exp) + void _fmpz_factor_append(fmpz_factor_t factor, const fmpz_t p, ulong exp) + void fmpz_factor(fmpz_factor_t factor, const fmpz_t n) + int fmpz_factor_smooth(fmpz_factor_t factor, const fmpz_t n, slong bits, int proved) + void fmpz_factor_si(fmpz_factor_t factor, slong n) int fmpz_factor_trial_range(fmpz_factor_t factor, const fmpz_t n, ulong start, ulong num_primes) + int fmpz_factor_trial(fmpz_factor_t factor, const fmpz_t n, slong num_primes) + void fmpz_factor_refine(fmpz_factor_t res, const fmpz_factor_t f) + void fmpz_factor_expand_iterative(fmpz_t n, const fmpz_factor_t factor) + int fmpz_factor_pp1(fmpz_t factor, const fmpz_t n, ulong B1, ulong B2_sqrt, ulong c) + int fmpz_factor_pollard_brent_single(fmpz_t p_factor, fmpz_t n_in, fmpz_t yi, fmpz_t ai, mp_limb_t max_iters) + int fmpz_factor_pollard_brent(fmpz_t factor, flint_rand_t state, fmpz_t n, mp_limb_t max_tries, mp_limb_t max_iters) + # void fmpz_factor_ecm_init(ecm_t ecm_inf, mp_limb_t sz) + # void fmpz_factor_ecm_clear(ecm_t ecm_inf) + # void fmpz_factor_ecm_addmod(mp_ptr a, mp_ptr b, mp_ptr c, mp_ptr n, mp_limb_t n_size) + # void fmpz_factor_ecm_submod(mp_ptr x, mp_ptr a, mp_ptr b, mp_ptr n, mp_limb_t n_size) + # void fmpz_factor_ecm_double(mp_ptr x, mp_ptr z, mp_ptr x0, mp_ptr z0, mp_ptr n, ecm_t ecm_inf) + # void fmpz_factor_ecm_add(mp_ptr x, mp_ptr z, mp_ptr x1, mp_ptr z1, mp_ptr x2, mp_ptr z2, mp_ptr x0, mp_ptr z0, mp_ptr n, ecm_t ecm_inf) + # void fmpz_factor_ecm_mul_montgomery_ladder(mp_ptr x, mp_ptr z, mp_ptr x0, mp_ptr z0, mp_limb_t k, mp_ptr n, ecm_t ecm_inf) + # int fmpz_factor_ecm_select_curve(mp_ptr f, mp_ptr sigma, mp_ptr n, ecm_t ecm_inf) + # int fmpz_factor_ecm_stage_I(mp_ptr f, const mp_limb_t *prime_array, mp_limb_t num, mp_limb_t B1, mp_ptr n, ecm_t ecm_inf) + # int fmpz_factor_ecm_stage_II(mp_ptr f, mp_limb_t B1, mp_limb_t B2, mp_limb_t P, mp_ptr n, ecm_t ecm_inf) + # int fmpz_factor_ecm(fmpz_t f, mp_limb_t curves, mp_limb_t B1, mp_limb_t B2, flint_rand_t state, fmpz_t n_in) + + +# this function wasn't in the doc void fmpz_factor_expand(fmpz_t n, const fmpz_factor_t factor) - void _fmpz_factor_append(fmpz_factor_t factor, const fmpz_t p, ulong exp) - void fmpz_factor_smooth(fmpz_factor_t factor, fmpz_t n, long bits, int proved) + +cdef extern from "flint/fmpz.h": + void fmpz_factor_euler_phi(fmpz_t res, const fmpz_factor_t fac) + int fmpz_factor_moebius_mu(const fmpz_factor_t fac) + void fmpz_factor_divisor_sigma(fmpz_t res, ulong k, const fmpz_factor_t fac) diff --git a/src/flint/flintlib/fmpz_lll.pxd b/src/flint/flintlib/fmpz_lll.pxd index 864c2810..7da0e42b 100644 --- a/src/flint/flintlib/fmpz_lll.pxd +++ b/src/flint/flintlib/fmpz_lll.pxd @@ -1,4 +1,6 @@ from flint.flintlib.fmpz_mat cimport fmpz_mat_t +from flint.flintlib.flint cimport flint_rand_t, slong, flint_bitcnt_t +from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/fmpz_lll.h": ctypedef struct fmpz_lll_struct: @@ -8,6 +10,39 @@ cdef extern from "flint/fmpz_lll.h": int gt ctypedef fmpz_lll_struct fmpz_lll_t[1] + ctypedef int gram_type + ctypedef int rep_type - void fmpz_lll_context_init(fmpz_lll_t fl, double delta, double eta, int rt, int gt) +# from here on is parsed + void fmpz_lll_context_init_default(fmpz_lll_t fl) + void fmpz_lll_context_init(fmpz_lll_t fl, double delta, double eta, rep_type rt, gram_type gt) + void fmpz_lll_randtest(fmpz_lll_t fl, flint_rand_t state) + double fmpz_lll_heuristic_dot(const double * vec1, const double * vec2, slong len2, const fmpz_mat_t B, slong k, slong j, slong exp_adj) + # int fmpz_lll_check_babai(int kappa, fmpz_mat_t B, fmpz_mat_t U, d_mat_t mu, d_mat_t r, double *s, d_mat_t appB, int *expo, fmpz_gram_t A, int a, int zeros, int kappamax, int n, const fmpz_lll_t fl) + # int fmpz_lll_check_babai_heuristic_d(int kappa, fmpz_mat_t B, fmpz_mat_t U, d_mat_t mu, d_mat_t r, double *s, d_mat_t appB, int *expo, fmpz_gram_t A, int a, int zeros, int kappamax, int n, const fmpz_lll_t fl) + # int fmpz_lll_check_babai_heuristic(int kappa, fmpz_mat_t B, fmpz_mat_t U, mpf_mat_t mu, mpf_mat_t r, mpf *s, mpf_mat_t appB, fmpz_gram_t A, int a, int zeros, int kappamax, int n, mpf_t tmp, mpf_t rtmp, flint_bitcnt_t prec, const fmpz_lll_t fl) + # int fmpz_lll_advance_check_babai(int cur_kappa, int kappa, fmpz_mat_t B, fmpz_mat_t U, d_mat_t mu, d_mat_t r, double *s, d_mat_t appB, int *expo, fmpz_gram_t A, int a, int zeros, int kappamax, int n, const fmpz_lll_t fl) + # int fmpz_lll_advance_check_babai_heuristic_d(int cur_kappa, int kappa, fmpz_mat_t B, fmpz_mat_t U, d_mat_t mu, d_mat_t r, double *s, d_mat_t appB, int *expo, fmpz_gram_t A, int a, int zeros, int kappamax, int n, const fmpz_lll_t fl) + int fmpz_lll_shift(const fmpz_mat_t B) + int fmpz_lll_d(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl) + int fmpz_lll_d_heuristic(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl) + int fmpz_lll_mpf2(fmpz_mat_t B, fmpz_mat_t U, flint_bitcnt_t prec, const fmpz_lll_t fl) + int fmpz_lll_mpf(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl) + int fmpz_lll_wrapper(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl) + int fmpz_lll_d_with_removal(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_d_heuristic_with_removal(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_mpf2_with_removal(fmpz_mat_t B, fmpz_mat_t U, flint_bitcnt_t prec, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_mpf_with_removal(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_wrapper_with_removal(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_d_with_removal_knapsack(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_wrapper_with_removal_knapsack(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_with_removal_ulll(fmpz_mat_t FM, fmpz_mat_t UM, slong new_size, const fmpz_t gs_B, const fmpz_lll_t fl) + int fmpz_lll_is_reduced_d(const fmpz_mat_t B, const fmpz_lll_t fl) + int fmpz_lll_is_reduced_mpfr(const fmpz_mat_t B, const fmpz_lll_t fl, flint_bitcnt_t prec) + int fmpz_lll_is_reduced_d_with_removal(const fmpz_mat_t B, const fmpz_lll_t fl, const fmpz_t gs_B, int newd) + int fmpz_lll_is_reduced_mpfr_with_removal(const fmpz_mat_t B, const fmpz_lll_t fl, const fmpz_t gs_B, int newd, flint_bitcnt_t prec) + int fmpz_lll_is_reduced(const fmpz_mat_t B, const fmpz_lll_t fl, flint_bitcnt_t prec) + int fmpz_lll_is_reduced_with_removal(const fmpz_mat_t B, const fmpz_lll_t fl, const fmpz_t gs_B, int newd, flint_bitcnt_t prec) + void fmpz_lll_storjohann_ulll(fmpz_mat_t FM, slong new_size, const fmpz_lll_t fl) void fmpz_lll(fmpz_mat_t B, fmpz_mat_t U, const fmpz_lll_t fl) + int fmpz_lll_with_removal(fmpz_mat_t B, fmpz_mat_t U, const fmpz_t gs_B, const fmpz_lll_t fl) diff --git a/src/flint/flintlib/fmpz_mat.pxd b/src/flint/flintlib/fmpz_mat.pxd index 421eb418..b8cd22f6 100644 --- a/src/flint/flintlib/fmpz_mat.pxd +++ b/src/flint/flintlib/fmpz_mat.pxd @@ -1,7 +1,8 @@ -from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t, ulong +from flint.flintlib.flint cimport flint_rand_t, mp_bitcnt_t, ulong, slong, flint_bitcnt_t, mp_limb_t from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t from flint.flintlib.nmod_mat cimport nmod_mat_t +from flint.flintlib.fmpq cimport fmpq_t cdef extern from "flint/fmpz_mat.h": ctypedef struct fmpz_mat_struct: @@ -10,49 +11,211 @@ cdef extern from "flint/fmpz_mat.h": long c fmpz_struct ** rows ctypedef fmpz_mat_struct fmpz_mat_t[1] - fmpz_struct * fmpz_mat_entry(fmpz_mat_t mat, long i, long j) long fmpz_mat_nrows(fmpz_mat_t mat) long fmpz_mat_ncols(fmpz_mat_t mat) - void fmpz_mat_init(fmpz_mat_t mat, long rows, long cols) - void fmpz_mat_init_set(fmpz_mat_t mat, fmpz_mat_t src) - void fmpz_mat_swap(fmpz_mat_t mat1, fmpz_mat_t mat2) - void fmpz_mat_set(fmpz_mat_t mat1, fmpz_mat_t mat2) + +# from here on is parsed + void fmpz_mat_init(fmpz_mat_t mat, slong rows, slong cols) void fmpz_mat_clear(fmpz_mat_t mat) - int fmpz_mat_equal(fmpz_mat_t mat1, fmpz_mat_t mat2) - int fmpz_mat_is_zero( fmpz_mat_t mat) - int fmpz_mat_is_empty( fmpz_mat_t mat) - int fmpz_mat_is_square( fmpz_mat_t mat) + void fmpz_mat_set(fmpz_mat_t mat1, const fmpz_mat_t mat2) + void fmpz_mat_init_set(fmpz_mat_t mat, const fmpz_mat_t src) + void fmpz_mat_swap(fmpz_mat_t mat1, fmpz_mat_t mat2) + void fmpz_mat_swap_entrywise(fmpz_mat_t mat1, fmpz_mat_t mat2) + fmpz_struct * fmpz_mat_entry(fmpz_mat_t mat, slong i, slong j) void fmpz_mat_zero(fmpz_mat_t mat) void fmpz_mat_one(fmpz_mat_t mat) - void fmpz_mat_get_nmod_mat(nmod_mat_t mat, fmpz_mat_t mat2) - void fmpz_mat_randbits(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) - void fmpz_mat_randtest(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) - void fmpz_mat_randtest_unsigned(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) - void fmpz_mat_randrank(fmpz_mat_t mat, flint_rand_t state, long rank, mp_bitcnt_t bits) - int fmpz_mat_print_pretty( fmpz_mat_t mat) - void fmpz_mat_transpose(fmpz_mat_t B, fmpz_mat_t A) - void fmpz_mat_add(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) - void fmpz_mat_sub(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) - void fmpz_mat_neg(fmpz_mat_t B, fmpz_mat_t A) - void fmpz_mat_scalar_mul_fmpz(fmpz_mat_t B, fmpz_mat_t A, fmpz_t c) - void fmpz_mat_scalar_mul_si(fmpz_mat_t B, fmpz_mat_t A, long c) - void fmpz_mat_scalar_mul_ui(fmpz_mat_t B, fmpz_mat_t A, ulong c) - void fmpz_mat_mul(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) - void fmpz_mat_det(fmpz_t det, fmpz_mat_t A) - long fmpz_mat_rank(fmpz_mat_t A) - long fmpz_mat_rref(fmpz_mat_t R, fmpz_t den, fmpz_mat_t A) - void fmpz_mat_inv(fmpz_mat_t B, fmpz_t den, fmpz_mat_t A) - int fmpz_mat_solve(fmpz_mat_t X, fmpz_t den, fmpz_mat_t A, fmpz_mat_t B) - long fmpz_mat_nullspace(fmpz_mat_t res, fmpz_mat_t mat) - void fmpz_mat_pow(fmpz_mat_t A, fmpz_mat_t B, ulong e) - int fmpz_mat_is_hadamard(const fmpz_mat_t A) - int fmpz_mat_hadamard(fmpz_mat_t A) - + void fmpz_mat_swap_rows(fmpz_mat_t mat, slong * perm, slong r, slong s) + void fmpz_mat_swap_cols(fmpz_mat_t mat, slong * perm, slong r, slong s) + void fmpz_mat_invert_rows(fmpz_mat_t mat, slong * perm) + void fmpz_mat_invert_cols(fmpz_mat_t mat, slong * perm) + void fmpz_mat_window_init(fmpz_mat_t window, const fmpz_mat_t mat, slong r1, slong c1, slong r2, slong c2) + void fmpz_mat_window_clear(fmpz_mat_t window) + void fmpz_mat_randbits(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_mat_randtest(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_mat_randintrel(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits) + void fmpz_mat_randsimdioph(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits, flint_bitcnt_t bits2) + void fmpz_mat_randntrulike(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits, ulong q) + void fmpz_mat_randntrulike2(fmpz_mat_t mat, flint_rand_t state, flint_bitcnt_t bits, ulong q) + void fmpz_mat_randajtai(fmpz_mat_t mat, flint_rand_t state, double alpha) + int fmpz_mat_randpermdiag(fmpz_mat_t mat, flint_rand_t state, const fmpz_struct * diag, slong n) + void fmpz_mat_randrank(fmpz_mat_t mat, flint_rand_t state, slong rank, flint_bitcnt_t bits) + void fmpz_mat_randdet(fmpz_mat_t mat, flint_rand_t state, const fmpz_t det) + void fmpz_mat_randops(fmpz_mat_t mat, flint_rand_t state, slong count) + int fmpz_mat_print(const fmpz_mat_t mat) + int fmpz_mat_print_pretty(const fmpz_mat_t mat) + int fmpz_mat_read(fmpz_mat_t mat) + int fmpz_mat_equal(const fmpz_mat_t mat1, const fmpz_mat_t mat2) + int fmpz_mat_is_zero(const fmpz_mat_t mat) + int fmpz_mat_is_one(const fmpz_mat_t mat) + int fmpz_mat_is_empty(const fmpz_mat_t mat) + int fmpz_mat_is_square(const fmpz_mat_t mat) + int fmpz_mat_is_zero_row(const fmpz_mat_t mat, slong i) + int fmpz_mat_col_equal(fmpz_mat_t M, slong m, slong n) + int fmpz_mat_row_equal(fmpz_mat_t M, slong m, slong n) + void fmpz_mat_transpose(fmpz_mat_t B, const fmpz_mat_t A) + void fmpz_mat_concat_vertical(fmpz_mat_t res, const fmpz_mat_t mat1, const fmpz_mat_t mat2) + void fmpz_mat_concat_horizontal(fmpz_mat_t res, const fmpz_mat_t mat1, const fmpz_mat_t mat2) + void fmpz_mat_get_nmod_mat(nmod_mat_t Amod, const fmpz_mat_t A) + void fmpz_mat_set_nmod_mat(fmpz_mat_t A, const nmod_mat_t Amod) + void fmpz_mat_set_nmod_mat_unsigned(fmpz_mat_t A, const nmod_mat_t Amod) + void fmpz_mat_CRT_ui(fmpz_mat_t res, const fmpz_mat_t mat1, const fmpz_t m1, const nmod_mat_t mat2, int sign) + # void fmpz_mat_multi_mod_ui_precomp(nmod_mat_t * residues, slong nres, const fmpz_mat_t mat, fmpz_comb_t comb, fmpz_comb_temp_t temp) + void fmpz_mat_multi_mod_ui(nmod_mat_t * residues, slong nres, const fmpz_mat_t mat) + # void fmpz_mat_multi_CRT_ui_precomp(fmpz_mat_t mat, nmod_mat_t * const residues, slong nres, fmpz_comb_t comb, fmpz_comb_temp_t temp, int sign) + void fmpz_mat_multi_CRT_ui(fmpz_mat_t mat, nmod_mat_t * const residues, slong nres, int sign) + void fmpz_mat_add(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_sub(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_neg(fmpz_mat_t B, const fmpz_mat_t A) + void fmpz_mat_scalar_mul_si(fmpz_mat_t B, const fmpz_mat_t A, slong c) + void fmpz_mat_scalar_mul_ui(fmpz_mat_t B, const fmpz_mat_t A, ulong c) + void fmpz_mat_scalar_mul_fmpz(fmpz_mat_t B, const fmpz_mat_t A, const fmpz_t c) + void fmpz_mat_scalar_addmul_si(fmpz_mat_t B, const fmpz_mat_t A, slong c) + void fmpz_mat_scalar_addmul_ui(fmpz_mat_t B, const fmpz_mat_t A, ulong c) + void fmpz_mat_scalar_addmul_fmpz(fmpz_mat_t B, const fmpz_mat_t A, const fmpz_t c) + void fmpz_mat_scalar_submul_si(fmpz_mat_t B, const fmpz_mat_t A, slong c) + void fmpz_mat_scalar_submul_ui(fmpz_mat_t B, const fmpz_mat_t A, ulong c) + void fmpz_mat_scalar_submul_fmpz(fmpz_mat_t B, const fmpz_mat_t A, const fmpz_t c) + void fmpz_mat_scalar_addmul_nmod_mat_ui(fmpz_mat_t B, const nmod_mat_t A, ulong c) + void fmpz_mat_scalar_addmul_nmod_mat_fmpz(fmpz_mat_t B, const nmod_mat_t A, const fmpz_t c) + void fmpz_mat_scalar_divexact_si(fmpz_mat_t B, const fmpz_mat_t A, slong c) + void fmpz_mat_scalar_divexact_ui(fmpz_mat_t B, const fmpz_mat_t A, ulong c) + void fmpz_mat_scalar_divexact_fmpz(fmpz_mat_t B, const fmpz_mat_t A, const fmpz_t c) + void fmpz_mat_scalar_mul_2exp(fmpz_mat_t B, const fmpz_mat_t A, ulong exp) + void fmpz_mat_scalar_tdiv_q_2exp(fmpz_mat_t B, const fmpz_mat_t A, ulong exp) + void fmpz_mat_scalar_smod(fmpz_mat_t B, const fmpz_mat_t A, const fmpz_t P) + void fmpz_mat_mul(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_mul_classical(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_mul_strassen(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void _fmpz_mat_mul_multi_mod(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B, int sign, flint_bitcnt_t bits) + void fmpz_mat_mul_multi_mod(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_mul_blas(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_mul_fft(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_sqr(fmpz_mat_t B, const fmpz_mat_t A) + void fmpz_mat_sqr_bodrato(fmpz_mat_t B, const fmpz_mat_t A) + void fmpz_mat_pow(fmpz_mat_t B, const fmpz_mat_t A, ulong e) + int _fmpz_mat_mul_small(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void _fmpz_mat_mul_double_word(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_mul_fmpz_vec(fmpz_struct * c, const fmpz_mat_t A, const fmpz_struct * b, slong blen) + void fmpz_mat_mul_fmpz_vec_ptr(fmpz_struct * const * c, const fmpz_mat_t A, const fmpz_struct * const * b, slong blen) + void fmpz_mat_fmpz_vec_mul(fmpz_struct * c, const fmpz_struct * a, slong alen, const fmpz_mat_t B) + void fmpz_mat_fmpz_vec_mul_ptr(fmpz_struct * const * c, const fmpz_struct * const * a, slong alen, const fmpz_mat_t B) + int fmpz_mat_inv(fmpz_mat_t Ainv, fmpz_t den, const fmpz_mat_t A) + void fmpz_mat_kronecker_product(fmpz_mat_t C, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_content(fmpz_t mat_gcd, const fmpz_mat_t A) + void fmpz_mat_trace(fmpz_t trace, const fmpz_mat_t mat) + void fmpz_mat_det(fmpz_t det, const fmpz_mat_t A) + void fmpz_mat_det_cofactor(fmpz_t det, const fmpz_mat_t A) + void fmpz_mat_det_bareiss(fmpz_t det, const fmpz_mat_t A) + void fmpz_mat_det_modular(fmpz_t det, const fmpz_mat_t A, int proved) + void fmpz_mat_det_modular_accelerated(fmpz_t det, const fmpz_mat_t A, int proved) + void fmpz_mat_det_modular_given_divisor(fmpz_t det, const fmpz_mat_t A, const fmpz_t d, int proved) + void fmpz_mat_det_bound(fmpz_t bound, const fmpz_mat_t A) + void fmpz_mat_det_divisor(fmpz_t d, const fmpz_mat_t A) + void fmpz_mat_similarity(fmpz_mat_t A, slong r, fmpz_t d) + void _fmpz_mat_charpoly_berkowitz(fmpz_struct * cp, const fmpz_mat_t mat) + void fmpz_mat_charpoly_berkowitz(fmpz_poly_t cp, const fmpz_mat_t mat) + void _fmpz_mat_charpoly_modular(fmpz_struct * cp, const fmpz_mat_t mat) + void fmpz_mat_charpoly_modular(fmpz_poly_t cp, const fmpz_mat_t mat) + void _fmpz_mat_charpoly(fmpz_struct * cp, const fmpz_mat_t mat) + void fmpz_mat_charpoly(fmpz_poly_t cp, const fmpz_mat_t mat) + slong _fmpz_mat_minpoly_modular(fmpz_struct * cp, const fmpz_mat_t mat) + void fmpz_mat_minpoly_modular(fmpz_poly_t cp, const fmpz_mat_t mat) + slong _fmpz_mat_minpoly(fmpz_struct * cp, const fmpz_mat_t mat) + void fmpz_mat_minpoly(fmpz_poly_t cp, const fmpz_mat_t mat) + slong fmpz_mat_rank(const fmpz_mat_t A) + int fmpz_mat_col_partition(slong * part, fmpz_mat_t M, int short_circuit) + int fmpz_mat_solve(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_solve_fflu(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_solve_fflu_precomp(fmpz_mat_t X, const slong * perm, const fmpz_mat_t FFLU, const fmpz_mat_t B) + int fmpz_mat_solve_cramer(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_solve_bound(fmpz_t N, fmpz_t D, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_solve_dixon(fmpz_mat_t X, fmpz_t M, const fmpz_mat_t A, const fmpz_mat_t B) + void _fmpz_mat_solve_dixon_den(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B, const nmod_mat_t Ainv, mp_limb_t p, const fmpz_t N, const fmpz_t D) + int fmpz_mat_solve_dixon_den(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_solve_multi_mod_den(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_can_solve_multi_mod_den(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + void fmpz_mat_can_solve_fflu(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + int fmpz_mat_can_solve(fmpz_mat_t X, fmpz_t den, const fmpz_mat_t A, const fmpz_mat_t B) + slong fmpz_mat_find_pivot_any(const fmpz_mat_t mat, slong start_row, slong end_row, slong c) + slong fmpz_mat_fflu(fmpz_mat_t B, fmpz_t den, slong * perm, const fmpz_mat_t A, int rank_check) + slong fmpz_mat_rref(fmpz_mat_t B, fmpz_t den, const fmpz_mat_t A) + slong fmpz_mat_rref_fflu(fmpz_mat_t B, fmpz_t den, const fmpz_mat_t A) + slong fmpz_mat_rref_mul(fmpz_mat_t B, fmpz_t den, const fmpz_mat_t A) + int fmpz_mat_is_in_rref_with_rank(const fmpz_mat_t A, const fmpz_t den, slong rank) + slong fmpz_mat_rref_mod(slong * perm, fmpz_mat_t A, const fmpz_t p) + void fmpz_mat_strong_echelon_form_mod(fmpz_mat_t A, const fmpz_t mod) + slong fmpz_mat_howell_form_mod(nmod_mat_t A, const fmpz_t mod) + slong fmpz_mat_nullspace(fmpz_mat_t B, const fmpz_mat_t A) + slong fmpz_mat_rref_fraction_free(slong * perm, fmpz_mat_t B, fmpz_t den, const fmpz_mat_t A) void fmpz_mat_hnf(fmpz_mat_t H, const fmpz_mat_t A) - void fmpz_mat_hnf_transform(fmpz_mat_t H, fmpz_mat_t U, const fmpz_mat_t A) + void fmpz_mat_hnf_transform(fmpz_mat_t H, fmpz_mat_t U, const fmpz_mat_t A) + void fmpz_mat_hnf_classical(fmpz_mat_t H, const fmpz_mat_t A) + void fmpz_mat_hnf_xgcd(fmpz_mat_t H, const fmpz_mat_t A) + void fmpz_mat_hnf_modular(fmpz_mat_t H, const fmpz_mat_t A, const fmpz_t D) + void fmpz_mat_hnf_modular_eldiv(fmpz_mat_t A, const fmpz_t D) + void fmpz_mat_hnf_minors(fmpz_mat_t H, const fmpz_mat_t A) + void fmpz_mat_hnf_pernet_stein(fmpz_mat_t H, const fmpz_mat_t A, flint_rand_t state) int fmpz_mat_is_in_hnf(const fmpz_mat_t A) void fmpz_mat_snf(fmpz_mat_t S, const fmpz_mat_t A) + void fmpz_mat_snf_diagonal(fmpz_mat_t S, const fmpz_mat_t A) + void fmpz_mat_snf_kannan_bachem(fmpz_mat_t S, const fmpz_mat_t A) + void fmpz_mat_snf_iliopoulos(fmpz_mat_t S, const fmpz_mat_t A, const fmpz_t mod) int fmpz_mat_is_in_snf(const fmpz_mat_t A) + void fmpz_mat_gram(fmpz_mat_t B, const fmpz_mat_t A) + int fmpz_mat_is_hadamard(const fmpz_mat_t H) + int fmpz_mat_hadamard(fmpz_mat_t H) + # int fmpz_mat_get_d_mat(d_mat_t B, const fmpz_mat_t A) + # int fmpz_mat_get_d_mat_transpose(d_mat_t B, const fmpz_mat_t A) + # void fmpz_mat_get_mpf_mat(mpf_mat_t B, const fmpz_mat_t A) + # void fmpz_mat_chol_d(d_mat_t R, const fmpz_mat_t A) + int fmpz_mat_is_reduced(const fmpz_mat_t A, double delta, double eta) + int fmpz_mat_is_reduced_gram(const fmpz_mat_t A, double delta, double eta) + int fmpz_mat_is_reduced_with_removal(const fmpz_mat_t A, double delta, double eta, const fmpz_t gs_B, int newd) + int fmpz_mat_is_reduced_gram_with_removal(const fmpz_mat_t A, double delta, double eta, const fmpz_t gs_B, int newd) + void fmpz_mat_lll_original(fmpz_mat_t A, const fmpq_t delta, const fmpq_t eta) + void fmpz_mat_lll_storjohann(fmpz_mat_t A, const fmpq_t delta, const fmpq_t eta) - void fmpz_mat_charpoly(fmpz_poly_t cp, const fmpz_mat_t mat) - void fmpz_mat_minpoly(fmpz_poly_t cp, const fmpz_mat_t mat) + # fmpz_struct * fmpz_mat_entry(fmpz_mat_t mat, long i, long j) + # void fmpz_mat_init(fmpz_mat_t mat, long rows, long cols) + # void fmpz_mat_init_set(fmpz_mat_t mat, fmpz_mat_t src) + # void fmpz_mat_swap(fmpz_mat_t mat1, fmpz_mat_t mat2) + # void fmpz_mat_set(fmpz_mat_t mat1, fmpz_mat_t mat2) + # void fmpz_mat_clear(fmpz_mat_t mat) + # int fmpz_mat_equal(fmpz_mat_t mat1, fmpz_mat_t mat2) + # int fmpz_mat_is_zero( fmpz_mat_t mat) + # int fmpz_mat_is_empty( fmpz_mat_t mat) + # int fmpz_mat_is_square( fmpz_mat_t mat) + # void fmpz_mat_zero(fmpz_mat_t mat) + # void fmpz_mat_one(fmpz_mat_t mat) + # void fmpz_mat_get_nmod_mat(nmod_mat_t mat, fmpz_mat_t mat2) + # void fmpz_mat_randbits(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) + # void fmpz_mat_randtest(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) + # void fmpz_mat_randtest_unsigned(fmpz_mat_t mat, flint_rand_t state, mp_bitcnt_t bits) + # void fmpz_mat_randrank(fmpz_mat_t mat, flint_rand_t state, long rank, mp_bitcnt_t bits) + # int fmpz_mat_print_pretty( fmpz_mat_t mat) + # void fmpz_mat_transpose(fmpz_mat_t B, fmpz_mat_t A) + # void fmpz_mat_add(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) + # void fmpz_mat_sub(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) + # void fmpz_mat_neg(fmpz_mat_t B, fmpz_mat_t A) + # void fmpz_mat_scalar_mul_fmpz(fmpz_mat_t B, fmpz_mat_t A, fmpz_t c) + # void fmpz_mat_scalar_mul_si(fmpz_mat_t B, fmpz_mat_t A, long c) + # void fmpz_mat_scalar_mul_ui(fmpz_mat_t B, fmpz_mat_t A, ulong c) + # void fmpz_mat_mul(fmpz_mat_t C, fmpz_mat_t A, fmpz_mat_t B) + # void fmpz_mat_det(fmpz_t det, fmpz_mat_t A) + # long fmpz_mat_rank(fmpz_mat_t A) + # long fmpz_mat_rref(fmpz_mat_t R, fmpz_t den, fmpz_mat_t A) + # void fmpz_mat_inv(fmpz_mat_t B, fmpz_t den, fmpz_mat_t A) + # int fmpz_mat_solve(fmpz_mat_t X, fmpz_t den, fmpz_mat_t A, fmpz_mat_t B) + # long fmpz_mat_nullspace(fmpz_mat_t res, fmpz_mat_t mat) + # void fmpz_mat_pow(fmpz_mat_t A, fmpz_mat_t B, ulong e) + # int fmpz_mat_is_hadamard(const fmpz_mat_t A) + # int fmpz_mat_hadamard(fmpz_mat_t A) + + # void fmpz_mat_hnf(fmpz_mat_t H, const fmpz_mat_t A) + # void fmpz_mat_hnf_transform(fmpz_mat_t H, fmpz_mat_t U, const fmpz_mat_t A) + # int fmpz_mat_is_in_hnf(const fmpz_mat_t A) + # void fmpz_mat_snf(fmpz_mat_t S, const fmpz_mat_t A) + # int fmpz_mat_is_in_snf(const fmpz_mat_t A) + + # void fmpz_mat_charpoly(fmpz_poly_t cp, const fmpz_mat_t mat) + # void fmpz_mat_minpoly(fmpz_poly_t cp, const fmpz_mat_t mat) diff --git a/src/flint/flintlib/fmpz_mpoly.pxd b/src/flint/flintlib/fmpz_mpoly.pxd index b723d6d9..d74f2df1 100644 --- a/src/flint/flintlib/fmpz_mpoly.pxd +++ b/src/flint/flintlib/fmpz_mpoly.pxd @@ -1,6 +1,6 @@ from flint.flintlib.mpoly cimport mpoly_ctx_t, ordering_t from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct -from flint.flintlib.flint cimport ulong, slong, flint_bitcnt_t, flint_rand_t +from flint.flintlib.flint cimport ulong, slong, flint_bitcnt_t, flint_rand_t, mp_limb_t from flint.flintlib.fmpz_poly cimport fmpz_poly_t, fmpz_poly_struct cdef extern from "flint/fmpz_mpoly.h": @@ -18,26 +18,28 @@ cdef extern from "flint/fmpz_mpoly.h": ctypedef fmpz_mpoly_struct fmpz_mpoly_t[1] +# from here on is parsed void fmpz_mpoly_ctx_init(fmpz_mpoly_ctx_t ctx, slong nvars, const ordering_t ord) - void fmpz_mpoly_ctx_init_rand(fmpz_mpoly_ctx_t mctx, flint_rand_t state, slong max_nvars) - void fmpz_mpoly_ctx_clear(fmpz_mpoly_ctx_t ctx) - slong fmpz_mpoly_ctx_nvars(const fmpz_mpoly_ctx_t ctx) + slong fmpz_mpoly_ctx_nvars(fmpz_mpoly_ctx_t ctx) ordering_t fmpz_mpoly_ctx_ord(const fmpz_mpoly_ctx_t ctx) - + void fmpz_mpoly_ctx_clear(fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_init(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_init2(fmpz_mpoly_t A, slong alloc, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_init3(fmpz_mpoly_t A, slong alloc, flint_bitcnt_t bits, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_fit_length(fmpz_mpoly_t A, slong len, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_fit_bits(fmpz_mpoly_t A, flint_bitcnt_t bits, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_realloc(fmpz_mpoly_t A, slong alloc, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_clear(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - - int fmpz_mpoly_set_str_pretty(fmpz_mpoly_t A, const char * str, const char ** x, const fmpz_mpoly_ctx_t ctx) char * fmpz_mpoly_get_str_pretty(const fmpz_mpoly_t A, const char ** x, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_gen(fmpz_mpoly_t poly, slong i, const fmpz_mpoly_ctx_t ctx) - int fmpz_mpoly_is_gen(const fmpz_mpoly_t poly, slong k, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_print_pretty(const fmpz_mpoly_t A, const char ** x, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_set_str_pretty(fmpz_mpoly_t A, const char * str, const char ** x, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_gen(fmpz_mpoly_t A, slong var, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_is_gen(const fmpz_mpoly_t A, slong var, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_set(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) - int fmpz_mpoly_equal(const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_swap(fmpz_mpoly_t A, fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) - + int fmpz_mpoly_equal(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_swap(fmpz_mpoly_t poly1, fmpz_mpoly_t poly2, const fmpz_mpoly_ctx_t ctx) + int _fmpz_mpoly_fits_small(const fmpz_struct * poly, slong len) slong fmpz_mpoly_max_bits(const fmpz_mpoly_t A) - int fmpz_mpoly_is_fmpz(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_get_fmpz(fmpz_t c, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_set_fmpz(fmpz_mpoly_t A, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) @@ -45,125 +47,152 @@ cdef extern from "flint/fmpz_mpoly.h": void fmpz_mpoly_set_si(fmpz_mpoly_t A, slong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_zero(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_one(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - int fmpz_mpoly_equal_fmpz(const fmpz_mpoly_t A, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_equal_fmpz(const fmpz_mpoly_t A, fmpz_t c, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_equal_ui(const fmpz_mpoly_t A, ulong c, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_equal_si(const fmpz_mpoly_t A, slong c, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_is_zero(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_is_one(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - int fmpz_mpoly_degrees_fit_si(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_degrees_fmpz(fmpz_struct ** degs, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_degrees_si(slong * degs, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_degree_fmpz(fmpz_t deg, const fmpz_mpoly_t A, slong var, const fmpz_mpoly_ctx_t ctx) slong fmpz_mpoly_degree_si(const fmpz_mpoly_t A, slong var, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_total_degree_fits_si(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_total_degree_fmpz(fmpz_t td, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_total_degree_fmpz(fmpz_t tdeg, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) slong fmpz_mpoly_total_degree_si(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - + void fmpz_mpoly_used_vars(int * used, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_get_coeff_fmpz_monomial(fmpz_t c, const fmpz_mpoly_t A, const fmpz_mpoly_t M, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_fmpz_monomial(fmpz_mpoly_t A, const fmpz_t c, const fmpz_mpoly_t M, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_fmpz_monomial(fmpz_mpoly_t poly, const fmpz_t c, const fmpz_mpoly_t poly2, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_get_coeff_fmpz_fmpz(fmpz_t c, const fmpz_mpoly_t A, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) ulong fmpz_mpoly_get_coeff_ui_fmpz(const fmpz_mpoly_t A, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) slong fmpz_mpoly_get_coeff_si_fmpz(const fmpz_mpoly_t A, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_get_coeff_fmpz_ui(fmpz_t c, const fmpz_mpoly_t A, const ulong * exp, const fmpz_mpoly_ctx_t ctx) ulong fmpz_mpoly_get_coeff_ui_ui(const fmpz_mpoly_t A, const ulong * exp, const fmpz_mpoly_ctx_t ctx) - slong fmpz_mpoly_get_coeff_si_ui(const fmpz_mpoly_t A, - const ulong * exp, const fmpz_mpoly_ctx_t ctx) - void _fmpz_mpoly_set_coeff_fmpz_fmpz(fmpz_mpoly_t A, - const fmpz_t c, const fmpz_struct * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_fmpz_fmpz(fmpz_mpoly_t A, - const fmpz_t c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_ui_fmpz(fmpz_mpoly_t A, - const ulong c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_si_fmpz(fmpz_mpoly_t A, - const slong c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_fmpz_ui(fmpz_mpoly_t A, - const fmpz_t c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_ui_ui(fmpz_mpoly_t A, - const ulong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_set_coeff_si_ui(fmpz_mpoly_t A, - const slong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_get_coeff_vars_ui(fmpz_mpoly_t C, - const fmpz_mpoly_t A, slong * vars, ulong * exps, slong length, - const fmpz_mpoly_ctx_t ctx) - + slong fmpz_mpoly_get_coeff_si_ui(const fmpz_mpoly_t A, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_fmpz_fmpz(fmpz_mpoly_t A, const fmpz_t c, const fmpz_struct ** exp, fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_ui_fmpz(fmpz_mpoly_t A, ulong c, const fmpz_struct ** exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_si_fmpz(fmpz_mpoly_t A, slong c, const fmpz_struct ** exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_fmpz_ui(fmpz_mpoly_t A, const fmpz_t c, const ulong * exp, fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_ui_ui(fmpz_mpoly_t A, ulong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_coeff_si_ui(fmpz_mpoly_t A, slong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_coeff_vars_ui(fmpz_mpoly_t C, const fmpz_mpoly_t A, const slong * vars, const ulong * exps, slong length, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_cmp(const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) - + fmpz_struct * fmpz_mpoly_term_coeff_ref(fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_is_canonical(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) slong fmpz_mpoly_length(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) - + void fmpz_mpoly_resize(fmpz_mpoly_t A, slong new_length, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_get_term_coeff_fmpz(fmpz_t c, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_get_term_exp_fmpz(fmpz_struct ** exp, const fmpz_mpoly_t A, - slong i, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_get_term_exp_ui(ulong * exp, const fmpz_mpoly_t A, - slong i, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_get_term_exp_si(slong * exp, const fmpz_mpoly_t A, - slong i, const fmpz_mpoly_ctx_t ctx) - - ulong fmpz_mpoly_get_term_var_exp_ui(const fmpz_mpoly_t A, slong i, - slong var, const fmpz_mpoly_ctx_t ctx) - - slong fmpz_mpoly_get_term_var_exp_si(const fmpz_mpoly_t A, slong i, - slong var, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_set_term_exp_fmpz(fmpz_mpoly_t A, - slong i, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_set_term_exp_ui(fmpz_mpoly_t A, - slong i, const ulong * exp, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_get_term(fmpz_mpoly_t M, const fmpz_mpoly_t A, - slong i, const fmpz_mpoly_ctx_t ctx) - - void fmpz_mpoly_get_term_monomial(fmpz_mpoly_t M, const fmpz_mpoly_t A, - slong i, const fmpz_mpoly_ctx_t ctx) - - # Addition/Subtraction - void fmpz_mpoly_add_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) + ulong fmpz_mpoly_get_term_coeff_ui(const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + slong fmpz_mpoly_get_term_coeff_si(const fmpz_mpoly_t poly, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_term_coeff_fmpz(fmpz_mpoly_t A, slong i, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_term_coeff_ui(fmpz_mpoly_t A, slong i, ulong c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_term_coeff_si(fmpz_mpoly_t A, slong i, slong c, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_term_exp_fits_si(const fmpz_mpoly_t poly, slong i, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_term_exp_fits_ui(const fmpz_mpoly_t poly, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_term_exp_fmpz(fmpz_struct ** exp, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_term_exp_ui(ulong * exp, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_term_exp_si(slong * exp, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + ulong fmpz_mpoly_get_term_var_exp_ui(const fmpz_mpoly_t A, slong i, slong var, const fmpz_mpoly_ctx_t ctx) + slong fmpz_mpoly_get_term_var_exp_si(const fmpz_mpoly_t A, slong i, slong var, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_term_exp_fmpz(fmpz_mpoly_t A, slong i, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_set_term_exp_ui(fmpz_mpoly_t A, slong i, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_term(fmpz_mpoly_t M, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_get_term_monomial(fmpz_mpoly_t M, const fmpz_mpoly_t A, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_fmpz_fmpz(fmpz_mpoly_t A, const fmpz_t c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_ui_fmpz(fmpz_mpoly_t A, ulong c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_si_fmpz(fmpz_mpoly_t A, slong c, fmpz_struct * const * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_fmpz_ui(fmpz_mpoly_t A, const fmpz_t c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_ui_ui(fmpz_mpoly_t A, ulong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_push_term_si_ui(fmpz_mpoly_t A, slong c, const ulong * exp, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_sort_terms(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_combine_like_terms(fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_reverse(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_randtest_bound(fmpz_mpoly_t A, flint_rand_t state, slong length, mp_limb_t coeff_bits, ulong exp_bound, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_randtest_bounds(fmpz_mpoly_t A, flint_rand_t state, slong length, mp_limb_t coeff_bits, ulong * exp_bounds, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_randtest_bits(fmpz_mpoly_t A, flint_rand_t state, slong length, mp_limb_t coeff_bits, mp_limb_t exp_bits, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_add_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, fmpz_t c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_add_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_add_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_sub_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_sub_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, fmpz_t c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_sub_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_sub_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_add(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_sub(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) - - # Scalar operations void fmpz_mpoly_neg(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_scalar_mul_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_scalar_mul_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_scalar_mul_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_scalar_mul_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_scalar_fmma(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_t D, const fmpz_t e, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_scalar_divexact_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) - void fmpz_mpoly_scalar_divexact_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_scalar_divexact_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong c, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_scalar_divexact_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_scalar_divides_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t c, const fmpz_mpoly_ctx_t ctx) - int fmpz_mpoly_scalar_divides_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_scalar_divides_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong c, const fmpz_mpoly_ctx_t ctx) - - # Differentiation/Integration + int fmpz_mpoly_scalar_divides_si(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong c, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_derivative(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong var, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_integral(fmpz_mpoly_t A, fmpz_t scale, const fmpz_mpoly_t B, slong var, const fmpz_mpoly_ctx_t ctx) - - # Evaluation int fmpz_mpoly_evaluate_all_fmpz(fmpz_t ev, const fmpz_mpoly_t A, fmpz_struct * const * vals, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_evaluate_one_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, slong var, const fmpz_t val, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_compose_fmpz_poly(fmpz_poly_t A, const fmpz_mpoly_t B, fmpz_poly_struct * const * C, const fmpz_mpoly_ctx_t ctxB) + int fmpz_mpoly_compose_fmpz_mpoly_geobucket(fmpz_mpoly_t A, const fmpz_mpoly_t B, fmpz_mpoly_struct * const * C, const fmpz_mpoly_ctx_t ctxB, const fmpz_mpoly_ctx_t ctxAC) + int fmpz_mpoly_compose_fmpz_mpoly_horner(fmpz_mpoly_t A, const fmpz_mpoly_t B, fmpz_mpoly_struct * const * C, const fmpz_mpoly_ctx_t ctxB, const fmpz_mpoly_ctx_t ctxAC) int fmpz_mpoly_compose_fmpz_mpoly(fmpz_mpoly_t A, const fmpz_mpoly_t B, fmpz_mpoly_struct * const * C, const fmpz_mpoly_ctx_t ctxB, const fmpz_mpoly_ctx_t ctxAC) void fmpz_mpoly_compose_fmpz_mpoly_gen(fmpz_mpoly_t A, const fmpz_mpoly_t B, const slong * c, const fmpz_mpoly_ctx_t ctxB, const fmpz_mpoly_ctx_t ctxAC) - - # Multiplication void fmpz_mpoly_mul(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) - - # Powering + void fmpz_mpoly_mul_threaded(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx, slong thread_limit) + void fmpz_mpoly_mul_johnson(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_mul_heap_threaded(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_mul_array(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_mul_array_threaded(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_mul_dense(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_t C, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_pow_fmpz(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_t k, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_pow_ui(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong k, const fmpz_mpoly_ctx_t ctx) - - # Division int fmpz_mpoly_divides(fmpz_mpoly_t Q, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_divrem(fmpz_mpoly_t Q, fmpz_mpoly_t R, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_quasidivrem(fmpz_t scale, fmpz_mpoly_t Q, fmpz_mpoly_t R, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_div(fmpz_mpoly_t Q, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_quasidiv(fmpz_t scale, fmpz_mpoly_t Q, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_divrem_ideal(fmpz_mpoly_struct ** Q, fmpz_mpoly_t R, const fmpz_mpoly_t A, fmpz_mpoly_struct * const * B, slong len, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_quasidivrem_ideal(fmpz_t scale, fmpz_mpoly_struct ** Q, fmpz_mpoly_t R, const fmpz_mpoly_t A, fmpz_mpoly_struct * const * B, slong len, const fmpz_mpoly_ctx_t ctx) void fmpz_mpoly_term_content(fmpz_mpoly_t M, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_content_vars(fmpz_mpoly_t g, const fmpz_mpoly_t A, slong * vars, slong vars_length, const fmpz_mpoly_ctx_t ctx) int fmpz_mpoly_gcd(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_cofactors(fmpz_mpoly_t G, fmpz_mpoly_t Abar, fmpz_mpoly_t Bbar, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_brown(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_hensel(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_subresultant(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_zippel(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_gcd_zippel2(fmpz_mpoly_t G, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_resultant(fmpz_mpoly_t R, const fmpz_mpoly_t A, const fmpz_mpoly_t B, slong var, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_discriminant(fmpz_mpoly_t D, const fmpz_mpoly_t A, slong var, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_sqrt_heap(fmpz_mpoly_t Q, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx, int check) + int fmpz_mpoly_sqrt(fmpz_mpoly_t q, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_is_square(const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_univar_init(fmpz_mpoly_univar_t A, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_univar_clear(fmpz_mpoly_univar_t A, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_univar_swap(fmpz_mpoly_univar_t A, fmpz_mpoly_univar_t B, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_to_univar(fmpz_mpoly_univar_t A, const fmpz_mpoly_t B, slong var, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_from_univar(fmpz_mpoly_t A, const fmpz_mpoly_univar_t B, slong var, const fmpz_mpoly_ctx_t ctx) + # int fmpz_mpoly_univar_degree_fits_si(const fmpz_mpoly_univar_t A, const fmpz_mpoly_ctx_t ctx) + # slong fmpz_mpoly_univar_length(const fmpz_mpoly_univar_t A, const fmpz_mpoly_ctx_t ctx) + # slong fmpz_mpoly_univar_get_term_exp_si(fmpz_mpoly_univar_t A, slong i, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_univar_get_term_coeff(fmpz_mpoly_t c, const fmpz_mpoly_univar_t A, slong i, const fmpz_mpoly_ctx_t ctx) + # void fmpz_mpoly_univar_swap_term_coeff(fmpz_mpoly_t c, fmpz_mpoly_univar_t A, slong i, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_inflate(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_struct * shift, const fmpz_struct * stride, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_deflate(fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_struct * shift, const fmpz_struct * stride, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_deflation(fmpz_struct * shift, fmpz_struct * stride, const fmpz_mpoly_t A, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_pow_fps(fmpz_mpoly_t A, const fmpz_mpoly_t B, ulong k, const fmpz_mpoly_ctx_t ctx) + slong _fmpz_mpoly_divides_array(fmpz_struct ** poly1, ulong ** exp1, slong * alloc, const fmpz_struct * poly2, const ulong * exp2, slong len2, const fmpz_struct * poly3, const ulong * exp3, slong len3, slong * mults, slong num, slong bits) + int fmpz_mpoly_divides_array(fmpz_mpoly_t poly1, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + slong _fmpz_mpoly_divides_monagan_pearce(fmpz_struct ** poly1, ulong ** exp1, slong * alloc, const fmpz_struct * poly2, const ulong * exp2, slong len2, const fmpz_struct * poly3, const ulong * exp3, slong len3, slong bits, slong N) + int fmpz_mpoly_divides_monagan_pearce(fmpz_mpoly_t poly1, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + int fmpz_mpoly_divides_heap_threaded(fmpz_mpoly_t Q, const fmpz_mpoly_t A, const fmpz_mpoly_t B, const fmpz_mpoly_ctx_t ctx, slong thread_limit) + slong _fmpz_mpoly_div_monagan_pearce(fmpz_struct ** polyq, ulong ** expq, slong * allocq, const fmpz_struct * poly2, const ulong * exp2, slong len2, const fmpz_struct * poly3, const ulong * exp3, slong len3, slong bits, slong N) + void fmpz_mpoly_div_monagan_pearce(fmpz_mpoly_t polyq, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + slong _fmpz_mpoly_divrem_monagan_pearce(slong * lenr, fmpz_struct ** polyq, ulong ** expq, slong * allocq, fmpz_struct ** polyr, ulong ** expr, slong * allocr, const fmpz_struct * poly2, const ulong * exp2, slong len2, const fmpz_struct * poly3, const ulong * exp3, slong len3, slong bits, slong N) + void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + slong _fmpz_mpoly_divrem_array(slong * lenr, fmpz_struct ** polyq, ulong ** expq, slong * allocq, fmpz_struct ** polyr, ulong ** expr, slong * allocr, const fmpz_struct * poly2, const ulong * exp2, slong len2, const fmpz_struct * poly3, const ulong * exp3, slong len3, slong * mults, slong num, slong bits) + int fmpz_mpoly_divrem_array(fmpz_mpoly_t q, fmpz_mpoly_t r, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_quasidivrem_heap(fmpz_t scale, fmpz_mpoly_t q, fmpz_mpoly_t r, const fmpz_mpoly_t poly2, const fmpz_mpoly_t poly3, const fmpz_mpoly_ctx_t ctx) + slong _fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** polyq, fmpz_struct ** polyr, ulong ** expr, slong * allocr, const fmpz_struct * poly2, const ulong * exp2, slong len2, fmpz_mpoly_struct * const * poly3, ulong * const * exp3, slong len, slong N, slong bits, const fmpz_mpoly_ctx_t ctx) + void fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** q, fmpz_mpoly_t r, const fmpz_mpoly_t poly2, fmpz_mpoly_struct * const * poly3, slong len, const fmpz_mpoly_ctx_t ctx) diff --git a/src/flint/flintlib/fmpz_poly.pxd b/src/flint/flintlib/fmpz_poly.pxd index dc3c5157..4d6c75e6 100644 --- a/src/flint/flintlib/fmpz_poly.pxd +++ b/src/flint/flintlib/fmpz_poly.pxd @@ -1,6 +1,8 @@ -from flint.flintlib.flint cimport ulong, mp_limb_t +from flint.flintlib.flint cimport ulong, mp_limb_t, slong, flint_rand_t, flint_bitcnt_t from flint.flintlib.fmpz cimport fmpz_struct,fmpz_t +from flint.flintlib.fmpq cimport fmpq_struct,fmpq_t from flint.flintlib.nmod_poly cimport nmod_poly_t +from flint.flintlib.nmod_poly_factor cimport nmod_poly_factor_t cdef extern from "flint/fmpz_poly.h": ctypedef struct fmpz_poly_struct: @@ -17,98 +19,395 @@ cdef extern from "flint/fmpz_poly.h": long alloc ctypedef fmpz_poly_factor_struct fmpz_poly_factor_t[1] + +# from here on is parsed void fmpz_poly_init(fmpz_poly_t poly) - void fmpz_poly_init2(fmpz_poly_t poly, long alloc) - void fmpz_poly_realloc(fmpz_poly_t poly, long alloc) - void fmpz_poly_fit_length(fmpz_poly_t poly, long len) + void fmpz_poly_init2(fmpz_poly_t poly, slong alloc) + void fmpz_poly_realloc(fmpz_poly_t poly, slong alloc) + void fmpz_poly_fit_length(fmpz_poly_t poly, slong len) void fmpz_poly_clear(fmpz_poly_t poly) void _fmpz_poly_normalise(fmpz_poly_t poly) - void _fmpz_poly_set_length(fmpz_poly_t poly, long newlen) - long fmpz_poly_length(fmpz_poly_t poly) - long fmpz_poly_degree(fmpz_poly_t poly) - ulong fmpz_poly_max_limbs(fmpz_poly_t poly) - long fmpz_poly_max_bits(fmpz_poly_t poly) - void fmpz_poly_set(fmpz_poly_t poly1, fmpz_poly_t poly2) + void _fmpz_poly_set_length(fmpz_poly_t poly, slong newlen) + void fmpz_poly_attach_truncate(fmpz_poly_t trunc, fmpz_poly_t poly, slong n) + void fmpz_poly_attach_shift(fmpz_poly_t trunc, fmpz_poly_t poly, slong n) + slong fmpz_poly_length(const fmpz_poly_t poly) + slong fmpz_poly_degree(const fmpz_poly_t poly) + void fmpz_poly_set(fmpz_poly_t poly1, const fmpz_poly_t poly2) + void fmpz_poly_set_si(fmpz_poly_t poly, slong c) void fmpz_poly_set_ui(fmpz_poly_t poly, ulong c) - void fmpz_poly_set_si(fmpz_poly_t poly, long c) - void fmpz_poly_set_fmpz(fmpz_poly_t poly, fmpz_t c) - #void fmpz_poly_set_mpz(fmpz_poly_t poly, mpz_t c) - int fmpz_poly_set_str(fmpz_poly_t poly, char * str) - char * fmpz_poly_get_str(fmpz_poly_t poly) - char * fmpz_poly_get_str_pretty(fmpz_poly_t poly, char * x) - fmpz_struct * fmpz_poly_get_coeff_ptr(fmpz_poly_t poly, long n) + void fmpz_poly_set_fmpz(fmpz_poly_t poly, const fmpz_t c) + # void fmpz_poly_set_mpz(fmpz_poly_t poly, const mpz_t c) + int _fmpz_poly_set_str(fmpz_struct * poly, const char * str) + int fmpz_poly_set_str(fmpz_poly_t poly, const char * str) + char * _fmpz_poly_get_str(const fmpz_struct * poly, slong len) + char * fmpz_poly_get_str(const fmpz_poly_t poly) + char * _fmpz_poly_get_str_pretty(const fmpz_struct * poly, slong len, const char * x) + char * fmpz_poly_get_str_pretty(const fmpz_poly_t poly, const char * x) void fmpz_poly_zero(fmpz_poly_t poly) void fmpz_poly_one(fmpz_poly_t poly) - void fmpz_poly_zero_coeffs(fmpz_poly_t poly, long i, long j) + void fmpz_poly_zero_coeffs(fmpz_poly_t poly, slong i, slong j) void fmpz_poly_swap(fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_reverse(fmpz_poly_t res, fmpz_poly_t poly, long n) - void fmpz_poly_truncate(fmpz_poly_t poly, long newlen) - #void fmpz_poly_randtest(fmpz_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits) - #void fmpz_poly_randtest_unsigned(fmpz_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits) - #void fmpz_poly_randtest_not_zero(fmpz_poly_t f, flint_rand_t state, long len, mp_bitcnt_t bits) - long fmpz_poly_get_coeff_si(fmpz_poly_t poly, long n) - void fmpz_poly_set_coeff_si(fmpz_poly_t poly, long n, long x) - ulong fmpz_poly_get_coeff_ui(fmpz_poly_t poly, long n) - void fmpz_poly_set_coeff_ui(fmpz_poly_t poly, long n, ulong x) - void fmpz_poly_set_coeff_fmpz(fmpz_poly_t poly, long n, fmpz_t x) - void fmpz_poly_get_coeff_fmpz(fmpz_t x, fmpz_poly_t poly, long n) - int fmpz_poly_equal(fmpz_poly_t poly1, fmpz_poly_t poly2) - int fmpz_poly_is_zero(fmpz_poly_t poly) - int fmpz_poly_is_one(fmpz_poly_t op) - int fmpz_poly_is_unit(fmpz_poly_t op) - void fmpz_poly_add(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_sub(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_neg(fmpz_poly_t res, fmpz_poly_t poly) + void _fmpz_poly_reverse(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_reverse(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void fmpz_poly_truncate(fmpz_poly_t poly, slong newlen) + void fmpz_poly_set_trunc(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void fmpz_poly_randtest(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpz_poly_randtest_unsigned(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpz_poly_randtest_not_zero(fmpz_poly_t f, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpz_poly_randtest_no_real_root(fmpz_poly_t p, flint_rand_t state, slong len, flint_bitcnt_t bits) + void fmpz_poly_get_coeff_fmpz(fmpz_t x, const fmpz_poly_t poly, slong n) + slong fmpz_poly_get_coeff_si(const fmpz_poly_t poly, slong n) + ulong fmpz_poly_get_coeff_ui(const fmpz_poly_t poly, slong n) + fmpz_struct * fmpz_poly_get_coeff_ptr(const fmpz_poly_t poly, slong n) + fmpz_struct * fmpz_poly_lead(const fmpz_poly_t poly) + void fmpz_poly_set_coeff_fmpz(fmpz_poly_t poly, slong n, const fmpz_t x) + void fmpz_poly_set_coeff_si(fmpz_poly_t poly, slong n, slong x) + void fmpz_poly_set_coeff_ui(fmpz_poly_t poly, slong n, ulong x) + int fmpz_poly_equal(const fmpz_poly_t poly1, const fmpz_poly_t poly2) + int fmpz_poly_equal_trunc(const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + int fmpz_poly_is_zero(const fmpz_poly_t poly) + int fmpz_poly_is_one(const fmpz_poly_t poly) + int fmpz_poly_is_unit(const fmpz_poly_t poly) + int fmpz_poly_is_gen(const fmpz_poly_t poly) + void _fmpz_poly_add(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_add(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void fmpz_poly_add_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong n) + void _fmpz_poly_sub(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_sub(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void fmpz_poly_sub_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong n) + void fmpz_poly_neg(fmpz_poly_t res, const fmpz_poly_t poly) + void fmpz_poly_scalar_abs(fmpz_poly_t res, const fmpz_poly_t poly) + void fmpz_poly_scalar_mul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + # void fmpz_poly_scalar_mul_mpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const mpz_t x) + void fmpz_poly_scalar_mul_si(fmpz_poly_t poly1, fmpz_poly_t poly2, slong x) void fmpz_poly_scalar_mul_ui(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) - void fmpz_poly_scalar_mul_si(fmpz_poly_t poly1, fmpz_poly_t poly2, long x) - void fmpz_poly_scalar_mul_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) - void fmpz_poly_scalar_addmul_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) - void fmpz_poly_scalar_submul_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) + void fmpz_poly_scalar_mul_2exp(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong exp) + void fmpz_poly_scalar_addmul_si(fmpz_poly_t poly1, const fmpz_poly_t poly2, slong x) + void fmpz_poly_scalar_addmul_ui(fmpz_poly_t poly1, const fmpz_poly_t poly2, ulong x) + void fmpz_poly_scalar_addmul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + void fmpz_poly_scalar_submul_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + void fmpz_poly_scalar_fdiv_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + # void fmpz_poly_scalar_fdiv_mpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const mpz_t x) + void fmpz_poly_scalar_fdiv_si(fmpz_poly_t poly1, fmpz_poly_t poly2, slong x) void fmpz_poly_scalar_fdiv_ui(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) - void fmpz_poly_scalar_fdiv_si(fmpz_poly_t poly1, fmpz_poly_t poly2, long x) - void fmpz_poly_scalar_fdiv_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) + void fmpz_poly_scalar_fdiv_2exp(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) + void fmpz_poly_scalar_tdiv_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + void fmpz_poly_scalar_tdiv_si(fmpz_poly_t poly1, fmpz_poly_t poly2, slong x) void fmpz_poly_scalar_tdiv_ui(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) - void fmpz_poly_scalar_tdiv_si(fmpz_poly_t poly1, fmpz_poly_t poly2, long x) - void fmpz_poly_scalar_tdiv_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) + void fmpz_poly_scalar_tdiv_2exp(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) + void fmpz_poly_scalar_divexact_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t x) + # void fmpz_poly_scalar_divexact_mpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const mpz_t x) + void fmpz_poly_scalar_divexact_si(fmpz_poly_t poly1, fmpz_poly_t poly2, slong x) void fmpz_poly_scalar_divexact_ui(fmpz_poly_t poly1, fmpz_poly_t poly2, ulong x) - void fmpz_poly_scalar_divexact_si(fmpz_poly_t poly1, fmpz_poly_t poly2, long x) - void fmpz_poly_scalar_divexact_fmpz(fmpz_poly_t poly1, fmpz_poly_t poly2, fmpz_t x) - void fmpz_poly_mul(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_mullow(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2, long n) - void fmpz_poly_mulhigh_n(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2, long n) - void fmpz_poly_pow(fmpz_poly_t res, fmpz_poly_t poly, ulong e) - void fmpz_poly_pow_trunc(fmpz_poly_t res, fmpz_poly_t poly, ulong e, long n) - void fmpz_poly_shift_left(fmpz_poly_t res, fmpz_poly_t poly, long n) - void fmpz_poly_shift_right(fmpz_poly_t res, fmpz_poly_t poly, long n) - void fmpz_poly_2norm(fmpz_t res, fmpz_poly_t poly) - void fmpz_poly_gcd(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_xgcd(fmpz_t r, fmpz_poly_t s, fmpz_poly_t t, fmpz_poly_t poly1, fmpz_poly_t poly2) - void fmpz_poly_content(fmpz_t res, fmpz_poly_t poly) - void fmpz_poly_primitive_part(fmpz_poly_t res, fmpz_poly_t poly) - void fmpz_poly_divrem(fmpz_poly_t Q, fmpz_poly_t R, fmpz_poly_t A, fmpz_poly_t B) - void fmpz_poly_div(fmpz_poly_t Q, fmpz_poly_t A, fmpz_poly_t B) - void fmpz_poly_rem(fmpz_poly_t R, fmpz_poly_t A, fmpz_poly_t B) - fmpz_poly_inv_series(fmpz_poly_t Qinv, fmpz_poly_t Q, long n) - void fmpz_poly_div_series(fmpz_poly_t Q, fmpz_poly_t A, fmpz_poly_t B, long n) - int fmpz_poly_divides(fmpz_poly_t q, fmpz_poly_t a, fmpz_poly_t b) - void fmpz_poly_derivative(fmpz_poly_t res, fmpz_poly_t poly) - void fmpz_poly_evaluate_fmpz(fmpz_t res, fmpz_poly_t f, fmpz_t a) - #void fmpz_poly_evaluate_mpq(mpq_t res, fmpz_poly_t f, mpq_t a) - mp_limb_t fmpz_poly_evaluate_mod(fmpz_poly_t poly, mp_limb_t a, mp_limb_t n) - void fmpz_poly_compose(fmpz_poly_t res, fmpz_poly_t poly1, fmpz_poly_t poly2) - - void fmpz_poly_compose_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, long n) - void fmpz_poly_revert_series(fmpz_poly_t Qinv, const fmpz_poly_t Q, long n) - - void fmpz_poly_signature(long * r1, long * r2, fmpz_poly_t poly) - int fmpz_poly_print(fmpz_poly_t poly) - int fmpz_poly_print_pretty(fmpz_poly_t poly, char * x) - void fmpz_poly_evaluate_fmpz_vec(fmpz_struct * res, fmpz_poly_t f, fmpz_struct * a, long n) - void fmpz_poly_interpolate_fmpz_vec(fmpz_poly_t poly, fmpz_struct * xs, fmpz_struct * ys, long n) - void fmpz_poly_get_nmod_poly(nmod_poly_t res, fmpz_poly_t poly) - void fmpz_poly_set_nmod_poly(fmpz_poly_t res, nmod_poly_t poly) - void fmpz_poly_set_nmod_poly_unsigned(fmpz_poly_t res, nmod_poly_t poly) - void fmpz_poly_cyclotomic(fmpz_poly_t, ulong) - void fmpz_poly_cos_minpoly(fmpz_poly_t, ulong) - void fmpz_poly_swinnerton_dyer(fmpz_poly_t, ulong) + void fmpz_poly_scalar_mod_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t p) + void fmpz_poly_scalar_smod_fmpz(fmpz_poly_t poly1, const fmpz_poly_t poly2, const fmpz_t p) + slong _fmpz_poly_remove_content_2exp(fmpz_struct * pol, slong len) + void _fmpz_poly_scale_2exp(fmpz_struct * pol, slong len, slong k) + # void _fmpz_poly_bit_pack(mp_ptr arr, const fmpz_struct * poly, slong len, flint_bitcnt_t bit_size, int negate) + # int _fmpz_poly_bit_unpack(fmpz_struct * poly, slong len, mp_srcptr arr, flint_bitcnt_t bit_size, int negate) + # void _fmpz_poly_bit_unpack_unsigned(fmpz_struct * poly, slong len, mp_srcptr_t arr, flint_bitcnt_t bit_size) + void fmpz_poly_bit_pack(fmpz_t f, const fmpz_poly_t poly, flint_bitcnt_t bit_size) + void fmpz_poly_bit_unpack(fmpz_poly_t poly, const fmpz_t f, flint_bitcnt_t bit_size) + void fmpz_poly_bit_unpack_unsigned(fmpz_poly_t poly, const fmpz_t f, flint_bitcnt_t bit_size) + void _fmpz_poly_mul_classical(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_mul_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mullow_classical(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_mullow_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_mulhigh_classical(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong start) + void fmpz_poly_mulhigh_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong start) + void _fmpz_poly_mulmid_classical(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_mulmid_classical(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mul_karatsuba(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_mul_karatsuba(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mullow_karatsuba_n(fmpz_struct * res, const fmpz_struct * poly1, const fmpz_struct * poly2, slong n) + void fmpz_poly_mullow_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_mulhigh_karatsuba_n(fmpz_struct * res, const fmpz_struct * poly1, const fmpz_struct * poly2, slong len) + void fmpz_poly_mulhigh_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong len) + void _fmpz_poly_mul_KS(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_mul_KS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mullow_KS(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_mullow_KS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_mul_SS(fmpz_struct * output, const fmpz_struct * input1, slong length1, const fmpz_struct * input2, slong length2) + void fmpz_poly_mul_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mullow_SS(fmpz_struct * output, const fmpz_struct * input1, slong length1, const fmpz_struct * input2, slong length2, slong n) + void fmpz_poly_mullow_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_mul(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_mul(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_mullow(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_mullow(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void fmpz_poly_mulhigh_n(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_mulhigh(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong start) + # void fmpz_poly_mul_SS_precache_init(fmpz_poly_mul_precache_t pre, slong len1, slong bits1, const fmpz_poly_t poly2) + # void fmpz_poly_mul_precache_clear(fmpz_poly_mul_precache_t pre) + # void _fmpz_poly_mullow_SS_precache(fmpz_struct * output, const fmpz_struct * input1, slong len1, fmpz_poly_mul_precache_t pre, slong trunc) + # void fmpz_poly_mullow_SS_precache(fmpz_poly_t res, const fmpz_poly_t poly1, fmpz_poly_mul_precache_t pre, slong n) + # void fmpz_poly_mul_SS_precache(fmpz_poly_t res, const fmpz_poly_t poly1, fmpz_poly_precache_t pre) + void _fmpz_poly_sqr_KS(fmpz_struct * rop, const fmpz_struct * op, slong len) + void fmpz_poly_sqr_KS(fmpz_poly_t rop, const fmpz_poly_t op) + void _fmpz_poly_sqr_karatsuba(fmpz_struct * rop, const fmpz_struct * op, slong len) + void fmpz_poly_sqr_karatsuba(fmpz_poly_t rop, const fmpz_poly_t op) + void _fmpz_poly_sqr_classical(fmpz_struct * rop, const fmpz_struct * op, slong len) + void fmpz_poly_sqr_classical(fmpz_poly_t rop, const fmpz_poly_t op) + void _fmpz_poly_sqr(fmpz_struct * rop, const fmpz_struct * op, slong len) + void fmpz_poly_sqr(fmpz_poly_t rop, const fmpz_poly_t op) + void _fmpz_poly_sqrlow_KS(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_sqrlow_KS(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_sqrlow_karatsuba_n(fmpz_struct * res, const fmpz_struct * poly, slong n) + void fmpz_poly_sqrlow_karatsuba_n(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_sqrlow_classical(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_sqrlow_classical(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_sqrlow(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_sqrlow(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_pow_multinomial(fmpz_struct * res, const fmpz_struct * poly, slong len, ulong e) + void fmpz_poly_pow_multinomial(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) + void _fmpz_poly_pow_binomial(fmpz_struct * res, const fmpz_struct * poly, ulong e) + void fmpz_poly_pow_binomial(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) + void _fmpz_poly_pow_addchains(fmpz_struct * res, const fmpz_struct * poly, slong len, const int * a, int n) + void fmpz_poly_pow_addchains(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) + void _fmpz_poly_pow_binexp(fmpz_struct * res, const fmpz_struct * poly, slong len, ulong e) + void fmpz_poly_pow_binexp(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) + void _fmpz_poly_pow_small(fmpz_struct * res, const fmpz_struct * poly, slong len, ulong e) + void _fmpz_poly_pow(fmpz_struct * res, const fmpz_struct * poly, slong len, ulong e) + void fmpz_poly_pow(fmpz_poly_t res, const fmpz_poly_t poly, ulong e) + void _fmpz_poly_pow_trunc(fmpz_struct * res, const fmpz_struct * poly, ulong e, slong n) + void fmpz_poly_pow_trunc(fmpz_poly_t res, const fmpz_poly_t poly, ulong e, slong n) + void _fmpz_poly_shift_left(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_shift_left(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_shift_right(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_shift_right(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + ulong fmpz_poly_max_limbs(const fmpz_poly_t poly) + slong fmpz_poly_max_bits(const fmpz_poly_t poly) + void fmpz_poly_height(fmpz_t height, const fmpz_poly_t poly) + void _fmpz_poly_2norm(fmpz_t res, const fmpz_struct * poly, slong len) + void fmpz_poly_2norm(fmpz_t res, const fmpz_poly_t poly) + mp_limb_t _fmpz_poly_2norm_normalised_bits(const fmpz_struct * poly, slong len) + void _fmpz_poly_gcd_subresultant(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_gcd_subresultant(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + int _fmpz_poly_gcd_heuristic(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + int fmpz_poly_gcd_heuristic(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_gcd_modular(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_gcd_modular(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_gcd(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_gcd(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_xgcd_modular(fmpz_t r, fmpz_struct * s, fmpz_struct * t, const fmpz_struct * f, slong len1, const fmpz_struct * g, slong len2) + 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) + void _fmpz_poly_xgcd(fmpz_t r, fmpz_struct * s, fmpz_struct * t, const fmpz_struct * f, slong len1, const fmpz_struct * g, slong len2) + 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) + void _fmpz_poly_lcm(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_lcm(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_resultant_modular(fmpz_t res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_resultant_modular(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + 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) + void _fmpz_poly_resultant_euclidean(fmpz_t res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_resultant_euclidean(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_resultant(fmpz_t res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_resultant(fmpz_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_discriminant(fmpz_t res, const fmpz_struct * poly, slong len) + void fmpz_poly_discriminant(fmpz_t res, const fmpz_poly_t poly) + void _fmpz_poly_content(fmpz_t res, const fmpz_struct * poly, slong len) + void fmpz_poly_content(fmpz_t res, const fmpz_poly_t poly) + void _fmpz_poly_primitive_part(fmpz_struct * res, const fmpz_struct * poly, slong len) + void fmpz_poly_primitive_part(fmpz_poly_t res, const fmpz_poly_t poly) + int _fmpz_poly_is_squarefree(const fmpz_struct * poly, slong len) + int fmpz_poly_is_squarefree(const fmpz_poly_t poly) + int _fmpz_poly_divrem_basecase(fmpz_struct * Q, fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_divrem_basecase(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + int _fmpz_poly_divrem_divconquer_recursive(fmpz_struct * Q, fmpz_struct * BQ, fmpz_struct * W, const fmpz_struct * A, const fmpz_struct * B, slong lenB, int exact) + int _fmpz_poly_divrem_divconquer(fmpz_struct * Q, fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_divrem_divconquer(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + int _fmpz_poly_divrem(fmpz_struct * Q, fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_divrem(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + int _fmpz_poly_div_basecase(fmpz_struct * Q, fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_div_basecase(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) + int _fmpz_poly_divremlow_divconquer_recursive(fmpz_struct * Q, fmpz_struct * BQ, const fmpz_struct * A, const fmpz_struct * B, slong lenB, int exact) + int _fmpz_poly_div_divconquer_recursive(fmpz_struct * Q, fmpz_struct * temp, const fmpz_struct * A, const fmpz_struct * B, slong lenB, int exact) + int _fmpz_poly_div_divconquer(fmpz_struct * Q, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_div_divconquer(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) + int _fmpz_poly_div(fmpz_struct * Q, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, int exact) + void fmpz_poly_div(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) + void _fmpz_poly_rem_basecase(fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB) + void fmpz_poly_rem_basecase(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + void _fmpz_poly_rem(fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB) + void fmpz_poly_rem(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + void _fmpz_poly_div_root(fmpz_struct * Q, const fmpz_struct * A, slong len, const fmpz_t c) + void fmpz_poly_div_root(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_t c) + void _fmpz_poly_preinvert(fmpz_struct * B_inv, const fmpz_struct * B, slong n) + void fmpz_poly_preinvert(fmpz_poly_t B_inv, const fmpz_poly_t B) + void _fmpz_poly_div_preinv(fmpz_struct * Q, const fmpz_struct * A, slong len1, const fmpz_struct * B, const fmpz_struct * B_inv, slong len2) + 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) + void _fmpz_poly_divrem_preinv(fmpz_struct * Q, fmpz_struct * A, slong len1, const fmpz_struct * B, const fmpz_struct * B_inv, slong len2) + 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) + fmpz_struct ** _fmpz_poly_powers_precompute(const fmpz_struct * B, slong len) + # void fmpz_poly_powers_precompute(fmpz_poly_powers_precomp_t pinv, fmpz_poly_t poly) + # void _fmpz_poly_powers_clear(fmpz_struct ** powers, slong len) + # void fmpz_poly_powers_clear(fmpz_poly_powers_precomp_t pinv) + # void _fmpz_poly_rem_powers_precomp(fmpz_struct * A, slong m, const fmpz_struct * B, slong n, fmpz_struct ** const powers) + # 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) + int _fmpz_poly_divides(fmpz_struct * Q, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB) + int fmpz_poly_divides(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B) + slong fmpz_poly_remove(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void fmpz_poly_divlow_smodp(fmpz_struct * res, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_t p, slong n) + void fmpz_poly_divhigh_smodp(fmpz_struct * res, const fmpz_poly_t f, const fmpz_poly_t g, const fmpz_t p, slong n) + void _fmpz_poly_inv_series_basecase(fmpz_struct * Qinv, const fmpz_struct * Q, slong Qlen, slong n) + void fmpz_poly_inv_series_basecase(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + void _fmpz_poly_inv_series_newton(fmpz_struct * Qinv, const fmpz_struct * Q, slong n) + void fmpz_poly_inv_series_newton(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong Qlen, slong n) + void _fmpz_poly_inv_series(fmpz_struct * Qinv, const fmpz_struct * Q, slong n) + void fmpz_poly_inv_series(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + void _fmpz_poly_div_series_basecase(fmpz_struct * Q, const fmpz_struct * A, slong Alen, const fmpz_struct * B, slong Blen, slong n) + void _fmpz_poly_div_series_divconquer(fmpz_struct * Q, const fmpz_struct * A, slong Alen, const fmpz_struct * B, slong Blen, slong n) + void _fmpz_poly_div_series(fmpz_struct * Q, const fmpz_struct * A, slong Alen, const fmpz_struct * B, slong Blen, slong n) + void fmpz_poly_div_series_basecase(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) + void fmpz_poly_div_series_divconquer(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) + void fmpz_poly_div_series(fmpz_poly_t Q, const fmpz_poly_t A, const fmpz_poly_t B, slong n) + # void _fmpz_poly_pseudo_divrem_basecase(fmpz_struct * Q, fmpz_struct * R, ulong * d, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, const fmpz_preinvn_t inv) + 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) + # void _fmpz_poly_pseudo_divrem_divconquer(fmpz_struct * Q, fmpz_struct * R, ulong * d, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, const fmpz_preinvn_t inv) + 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) + void _fmpz_poly_pseudo_divrem_cohen(fmpz_struct * Q, fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB) + void fmpz_poly_pseudo_divrem_cohen(fmpz_poly_t Q, fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + void _fmpz_poly_pseudo_rem_cohen(fmpz_struct * R, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB) + void fmpz_poly_pseudo_rem_cohen(fmpz_poly_t R, const fmpz_poly_t A, const fmpz_poly_t B) + # void _fmpz_poly_pseudo_divrem(fmpz_struct * Q, fmpz_struct * R, ulong * d, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, const fmpz_preinvn_t inv) + 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) + # void _fmpz_poly_pseudo_div(fmpz_struct * Q, ulong * d, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, const fmpz_preinvn_t inv) + void fmpz_poly_pseudo_div(fmpz_poly_t Q, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) + # void _fmpz_poly_pseudo_rem(fmpz_struct * R, ulong * d, const fmpz_struct * A, slong lenA, const fmpz_struct * B, slong lenB, const fmpz_preinvn_t inv) + void fmpz_poly_pseudo_rem(fmpz_poly_t R, ulong * d, const fmpz_poly_t A, const fmpz_poly_t B) + void _fmpz_poly_derivative(fmpz_struct * rpoly, const fmpz_struct * poly, slong len) + void fmpz_poly_derivative(fmpz_poly_t res, const fmpz_poly_t poly) + void _fmpz_poly_nth_derivative(fmpz_struct * rpoly, const fmpz_struct * poly, ulong n, slong len) + void fmpz_poly_nth_derivative(fmpz_poly_t res, const fmpz_poly_t poly, ulong n) + void _fmpz_poly_evaluate_divconquer_fmpz(fmpz_t res, const fmpz_struct * poly, slong len, const fmpz_t a) + void fmpz_poly_evaluate_divconquer_fmpz(fmpz_t res, const fmpz_poly_t poly, const fmpz_t a) + void _fmpz_poly_evaluate_horner_fmpz(fmpz_t res, const fmpz_struct * f, slong len, const fmpz_t a) + void fmpz_poly_evaluate_horner_fmpz(fmpz_t res, const fmpz_poly_t f, const fmpz_t a) + void _fmpz_poly_evaluate_fmpz(fmpz_t res, const fmpz_struct * f, slong len, const fmpz_t a) + void fmpz_poly_evaluate_fmpz(fmpz_t res, const fmpz_poly_t f, const fmpz_t a) + void _fmpz_poly_evaluate_divconquer_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz_struct * f, slong len, const fmpz_t anum, const fmpz_t aden) + void fmpz_poly_evaluate_divconquer_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) + void _fmpz_poly_evaluate_horner_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz_struct * f, slong len, const fmpz_t anum, const fmpz_t aden) + void fmpz_poly_evaluate_horner_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) + void _fmpz_poly_evaluate_fmpq(fmpz_t rnum, fmpz_t rden, const fmpz_struct * f, slong len, const fmpz_t anum, const fmpz_t aden) + void fmpz_poly_evaluate_fmpq(fmpq_t res, const fmpz_poly_t f, const fmpq_t a) + # void fmpz_poly_evaluate_mpq(mpq_t res, const fmpz_poly_t f, const mpq_t a) + mp_limb_t _fmpz_poly_evaluate_mod(const fmpz_struct * poly, slong len, mp_limb_t a, mp_limb_t n, mp_limb_t ninv) + mp_limb_t fmpz_poly_evaluate_mod(const fmpz_poly_t poly, mp_limb_t a, mp_limb_t n) + void fmpz_poly_evaluate_fmpz_vec(fmpz_struct * res, const fmpz_poly_t f, const fmpz_struct * a, slong n) + double _fmpz_poly_evaluate_horner_d(const fmpz_struct * poly, slong n, double d) + double fmpz_poly_evaluate_horner_d(const fmpz_poly_t poly, double d) + double _fmpz_poly_evaluate_horner_d_2exp(slong * exp, const fmpz_struct * poly, slong n, double d) + double fmpz_poly_evaluate_horner_d_2exp(slong * exp, const fmpz_poly_t poly, double d) + double _fmpz_poly_evaluate_horner_d_2exp2(slong * exp, const fmpz_struct * poly, slong n, double d, slong dexp) + void _fmpz_poly_monomial_to_newton(fmpz_struct * poly, const fmpz_struct * roots, slong n) + void _fmpz_poly_newton_to_monomial(fmpz_struct * poly, const fmpz_struct * roots, slong n) + void fmpz_poly_interpolate_fmpz_vec(fmpz_poly_t poly, const fmpz_struct * xs, const fmpz_struct * ys, slong n) + void _fmpz_poly_compose_horner(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_compose_horner(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_compose_divconquer(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_compose_divconquer(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void _fmpz_poly_compose(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2) + void fmpz_poly_compose(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2) + void fmpz_poly_inflate(fmpz_poly_t result, const fmpz_poly_t input, ulong inflation) + void fmpz_poly_deflate(fmpz_poly_t result, const fmpz_poly_t input, ulong deflation) + ulong fmpz_poly_deflation(const fmpz_poly_t input) + void _fmpz_poly_taylor_shift_horner(fmpz_struct * poly, const fmpz_t c, slong n) + void fmpz_poly_taylor_shift_horner(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) + void _fmpz_poly_taylor_shift_divconquer(fmpz_struct * poly, const fmpz_t c, slong n) + void fmpz_poly_taylor_shift_divconquer(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) + void _fmpz_poly_taylor_shift_multi_mod(fmpz_struct * poly, const fmpz_t c, slong n) + void fmpz_poly_taylor_shift_multi_mod(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) + void _fmpz_poly_taylor_shift(fmpz_struct * poly, const fmpz_t c, slong n) + void fmpz_poly_taylor_shift(fmpz_poly_t g, const fmpz_poly_t f, const fmpz_t c) + void _fmpz_poly_compose_series_horner(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_compose_series_horner(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_compose_series_brent_kung(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_compose_series_brent_kung(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_compose_series(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_struct * poly2, slong len2, slong n) + void fmpz_poly_compose_series(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n) + void _fmpz_poly_revert_series_lagrange(fmpz_struct * Qinv, const fmpz_struct * Q, slong Qlen, slong n) + void fmpz_poly_revert_series_lagrange(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + void _fmpz_poly_revert_series_lagrange_fast(fmpz_struct * Qinv, const fmpz_struct * Q, slong Qlen, slong n) + void fmpz_poly_revert_series_lagrange_fast(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + void _fmpz_poly_revert_series_newton(fmpz_struct * Qinv, const fmpz_struct * Q, slong Qlen, slong n) + void fmpz_poly_revert_series_newton(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + void _fmpz_poly_revert_series(fmpz_struct * Qinv, const fmpz_struct * Q, slong Qlen, slong n) + void fmpz_poly_revert_series(fmpz_poly_t Qinv, const fmpz_poly_t Q, slong n) + int _fmpz_poly_sqrtrem_classical(fmpz_struct * res, fmpz_struct * r, const fmpz_struct * poly, slong len) + int fmpz_poly_sqrtrem_classical(fmpz_poly_t b, fmpz_poly_t r, const fmpz_poly_t a) + int _fmpz_poly_sqrtrem_divconquer(fmpz_struct * res, fmpz_struct * r, const fmpz_struct * poly, slong len, fmpz_struct * temp) + int fmpz_poly_sqrtrem_divconquer(fmpz_poly_t b, fmpz_poly_t r, const fmpz_poly_t a) + int _fmpz_poly_sqrt_classical(fmpz_struct * res, const fmpz_struct * poly, slong len, int exact) + int fmpz_poly_sqrt_classical(fmpz_poly_t b, const fmpz_poly_t a) + int _fmpz_poly_sqrt_KS(fmpz_struct * res, const fmpz_struct * poly, slong len) + int fmpz_poly_sqrt_KS(fmpz_poly_t b, const fmpz_poly_t a) + int _fmpz_poly_sqrt_divconquer(fmpz_struct * res, const fmpz_struct * poly, slong len, int exact) + int fmpz_poly_sqrt_divconquer(fmpz_poly_t b, const fmpz_poly_t a) + int _fmpz_poly_sqrt(fmpz_struct * res, const fmpz_struct * poly, slong len) int fmpz_poly_sqrt(fmpz_poly_t b, const fmpz_poly_t a) + int _fmpz_poly_sqrt_series(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + int fmpz_poly_sqrt_series(fmpz_poly_t b, const fmpz_poly_t a, slong n) + void _fmpz_poly_power_sums_naive(fmpz_struct * res, const fmpz_struct * poly, slong len, slong n) + void fmpz_poly_power_sums_naive(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void fmpz_poly_power_sums(fmpz_poly_t res, const fmpz_poly_t poly, slong n) + void _fmpz_poly_power_sums_to_poly(fmpz_struct * res, const fmpz_struct * poly, slong len) + void fmpz_poly_power_sums_to_poly(fmpz_poly_t res, const fmpz_poly_t Q) + void _fmpz_poly_signature(slong * r1, slong * r2, const fmpz_struct * poly, slong len) + void fmpz_poly_signature(slong * r1, slong * r2, const fmpz_poly_t poly) + void fmpz_poly_hensel_build_tree(slong * link, fmpz_poly_t *v, fmpz_poly_t *w, const nmod_poly_factor_t fac) + 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) + 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) + 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) + 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) + 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) + 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) + 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) + 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) + int _fmpz_poly_print(const fmpz_struct * poly, slong len) + int fmpz_poly_print(const fmpz_poly_t poly) + int _fmpz_poly_print_pretty(const fmpz_struct * poly, slong len, const char * x) + int fmpz_poly_print_pretty(const fmpz_poly_t poly, const char * x) + int fmpz_poly_read(fmpz_poly_t poly) + int fmpz_poly_read_pretty(fmpz_poly_t poly, char **x) + void fmpz_poly_get_nmod_poly(nmod_poly_t Amod, fmpz_poly_t A) + void fmpz_poly_set_nmod_poly(fmpz_poly_t A, const nmod_poly_t Amod) + void fmpz_poly_set_nmod_poly_unsigned(fmpz_poly_t A, const nmod_poly_t Amod) + # void _fmpz_poly_CRT_ui_precomp(fmpz_struct * res, const fmpz_struct * 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) + # void _fmpz_poly_CRT_ui(fmpz_struct * res, const fmpz_struct * poly1, slong len1, const fmpz_t m1, mp_srcptr poly2, slong len2, mp_limb_t m2, mp_limb_t m2inv, int sign) + 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) + void _fmpz_poly_product_roots_fmpz_vec(fmpz_struct * poly, const fmpz_struct * xs, slong n) + void fmpz_poly_product_roots_fmpz_vec(fmpz_poly_t poly, const fmpz_struct * xs, slong n) + void _fmpz_poly_product_roots_fmpq_vec(fmpz_struct * poly, const fmpq_struct * xs, slong n) + void fmpz_poly_product_roots_fmpq_vec(fmpz_poly_t poly, const fmpq_struct * xs, slong n) + void _fmpz_poly_bound_roots(fmpz_t bound, const fmpz_struct * poly, slong len) + void fmpz_poly_bound_roots(fmpz_t bound, const fmpz_poly_t poly) + void _fmpz_poly_num_real_roots_sturm(slong * n_neg, slong * n_pos, const fmpz_struct * pol, slong len) + slong fmpz_poly_num_real_roots_sturm(const fmpz_poly_t pol) + slong _fmpz_poly_num_real_roots(const fmpz_struct * pol, slong len) + slong fmpz_poly_num_real_roots(const fmpz_poly_t pol) + # void _fmpz_poly_cyclotomic(fmpz_struct * a, ulong n, mp_ptr factors, slong num_factors, ulong phi) + void fmpz_poly_cyclotomic(fmpz_poly_t poly, ulong n) + ulong _fmpz_poly_is_cyclotomic(const fmpz_struct * poly, slong len) + ulong fmpz_poly_is_cyclotomic(fmpz_poly_t poly) + void _fmpz_poly_cos_minpoly(fmpz_struct * coeffs, ulong n) + void fmpz_poly_cos_minpoly(fmpz_poly_t poly, ulong n) + void _fmpz_poly_swinnerton_dyer(fmpz_struct * coeffs, ulong n) + void fmpz_poly_swinnerton_dyer(fmpz_poly_t poly, ulong n) + void _fmpz_poly_chebyshev_t(fmpz_struct * coeffs, ulong n) + void fmpz_poly_chebyshev_t(fmpz_poly_t poly, ulong n) + void _fmpz_poly_chebyshev_u(fmpz_struct * coeffs, ulong n) + void fmpz_poly_chebyshev_u(fmpz_poly_t poly, ulong n) + void _fmpz_poly_legendre_pt(fmpz_struct * coeffs, ulong n) + void fmpz_poly_legendre_pt(fmpz_poly_t poly, ulong n) + void _fmpz_poly_hermite_h(fmpz_struct * coeffs, ulong n) + void fmpz_poly_hermite_h(fmpz_poly_t poly, ulong n) + void _fmpz_poly_hermite_he(fmpz_struct * coeffs, ulong n) + void fmpz_poly_hermite_he(fmpz_poly_t poly, ulong n) + void _fmpz_poly_fibonacci(fmpz_struct * coeffs, ulong n) + void fmpz_poly_fibonacci(fmpz_poly_t poly, ulong n) + void arith_eulerian_polynomial(fmpz_poly_t res, ulong n) + void _fmpz_poly_eta_qexp(fmpz_struct * f, slong r, slong len) + void fmpz_poly_eta_qexp(fmpz_poly_t f, slong r, slong n) + void _fmpz_poly_theta_qexp(fmpz_struct * f, slong r, slong len) + void fmpz_poly_theta_qexp(fmpz_poly_t f, slong r, slong n) + void fmpz_poly_CLD_bound(fmpz_t res, const fmpz_poly_t f, slong n) diff --git a/src/flint/flintlib/fmpz_poly_factor.pxd b/src/flint/flintlib/fmpz_poly_factor.pxd index ccced4e4..c1e2ba43 100644 --- a/src/flint/flintlib/fmpz_poly_factor.pxd +++ b/src/flint/flintlib/fmpz_poly_factor.pxd @@ -1,8 +1,22 @@ +from flint.flintlib.flint cimport slong +from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct from flint.flintlib.fmpz_poly cimport fmpz_poly_t, fmpz_poly_factor_t cdef extern from "flint/fmpz_poly_factor.h": +# from here on is parsed void fmpz_poly_factor_init(fmpz_poly_factor_t fac) + void fmpz_poly_factor_init2(fmpz_poly_factor_t fac, slong alloc) + void fmpz_poly_factor_realloc(fmpz_poly_factor_t fac, slong alloc) + void fmpz_poly_factor_fit_length(fmpz_poly_factor_t fac, slong len) void fmpz_poly_factor_clear(fmpz_poly_factor_t fac) - void fmpz_poly_factor_zassenhaus(fmpz_poly_factor_t fac, fmpz_poly_t G) - void fmpz_poly_factor(fmpz_poly_factor_t fac, fmpz_poly_t G) - void fmpz_poly_factor_squarefree(fmpz_poly_factor_t fac, fmpz_poly_t G) + void fmpz_poly_factor_set(fmpz_poly_factor_t res, const fmpz_poly_factor_t fac) + void fmpz_poly_factor_insert(fmpz_poly_factor_t fac, const fmpz_poly_t p, slong e) + void fmpz_poly_factor_concat(fmpz_poly_factor_t res, const fmpz_poly_factor_t fac) + void fmpz_poly_factor_print(const fmpz_poly_factor_t fac) + void fmpz_poly_factor_squarefree(fmpz_poly_factor_t fac, fmpz_poly_t F) + void fmpz_poly_factor_zassenhaus_recombination(fmpz_poly_factor_t final_fac, const fmpz_poly_factor_t lifted_fac, const fmpz_poly_t F, const fmpz_t P, slong exp) + void _fmpz_poly_factor_zassenhaus(fmpz_poly_factor_t final_fac, slong exp, fmpz_poly_t f, slong cutoff, int use_van_hoeij) + void fmpz_poly_factor_zassenhaus(fmpz_poly_factor_t final_fac, fmpz_poly_t F) + void _fmpz_poly_factor_quadratic(fmpz_poly_factor_t fac, const fmpz_poly_t f, slong exp) + void _fmpz_poly_factor_cubic(fmpz_poly_factor_t fac, const fmpz_poly_t f, slong exp) + void fmpz_poly_factor(fmpz_poly_factor_t final_fac, fmpz_poly_t F) diff --git a/src/flint/flintlib/mag.pxd b/src/flint/flintlib/mag.pxd index c12efd50..b89e5634 100644 --- a/src/flint/flintlib/mag.pxd +++ b/src/flint/flintlib/mag.pxd @@ -1,5 +1,6 @@ -from flint.flintlib.flint cimport ulong, mp_limb_t -from flint.flintlib.fmpz cimport fmpz_struct +from flint.flintlib.flint cimport ulong, mp_limb_t, slong, flint_rand_t +from flint.flintlib.fmpz cimport fmpz_struct, fmpz_t +from flint.flintlib.fmpq cimport fmpq_struct, fmpq_t cdef extern from "mag.h": ctypedef struct mag_struct: @@ -9,9 +10,115 @@ cdef extern from "mag.h": ctypedef mag_struct * mag_ptr ctypedef const mag_struct * mag_srcptr +# from here on is parsed void mag_init(mag_t x) void mag_clear(mag_t x) - void mag_zero(mag_t x) - void mag_set(mag_t x, const mag_t y) - void mag_set_ui_2exp_si(mag_t x, ulong v, long e) - void mag_hypot(mag_t x, const mag_t y, const mag_t z) + void mag_swap(mag_t x, mag_t y) + mag_ptr _mag_vec_init(slong n) + void _mag_vec_clear(mag_ptr v, slong n) + slong mag_allocated_bytes(const mag_t x) + void mag_zero(mag_t res) + void mag_one(mag_t res) + void mag_inf(mag_t res) + int mag_is_special(const mag_t x) + int mag_is_zero(const mag_t x) + int mag_is_inf(const mag_t x) + int mag_is_finite(const mag_t x) + void mag_init_set(mag_t res, const mag_t x) + void mag_set(mag_t res, const mag_t x) + void mag_set_d(mag_t res, double x) + # void mag_set_fmpr(mag_t res, const fmpr_t x) + void mag_set_ui(mag_t res, ulong x) + void mag_set_fmpz(mag_t res, const fmpz_t x) + void mag_set_d_lower(mag_t res, double x) + void mag_set_ui_lower(mag_t res, ulong x) + void mag_set_fmpz_lower(mag_t res, const fmpz_t x) + void mag_set_d_2exp_fmpz(mag_t res, double x, const fmpz_t y) + void mag_set_fmpz_2exp_fmpz(mag_t res, const fmpz_t x, const fmpz_t y) + void mag_set_ui_2exp_si(mag_t res, ulong x, slong y) + void mag_set_d_2exp_fmpz_lower(mag_t res, double x, const fmpz_t y) + void mag_set_fmpz_2exp_fmpz_lower(mag_t res, const fmpz_t x, const fmpz_t y) + double mag_get_d(const mag_t x) + double mag_get_d_log2_approx(const mag_t x) + # void mag_get_fmpr(fmpr_t res, const mag_t x) + void mag_get_fmpq(fmpq_t res, const mag_t x) + void mag_get_fmpz(fmpz_t res, const mag_t x) + void mag_get_fmpz_lower(fmpz_t res, const mag_t x) + int mag_equal(const mag_t x, const mag_t y) + int mag_cmp(const mag_t x, const mag_t y) + int mag_cmp_2exp_si(const mag_t x, slong y) + void mag_min(mag_t res, const mag_t x, const mag_t y) + void mag_max(mag_t res, const mag_t x, const mag_t y) + void mag_print(const mag_t x) + char * mag_dump_str(const mag_t x) + int mag_load_str(mag_t x, const char * str) + void mag_randtest(mag_t res, flint_rand_t state, slong expbits) + void mag_randtest_special(mag_t res, flint_rand_t state, slong expbits) + void mag_add(mag_t res, const mag_t x, const mag_t y) + void mag_add_ui(mag_t res, const mag_t x, ulong y) + void mag_add_lower(mag_t res, const mag_t x, const mag_t y) + void mag_add_ui_lower(mag_t res, const mag_t x, ulong y) + void mag_add_2exp_fmpz(mag_t res, const mag_t x, const fmpz_t e) + void mag_add_ui_2exp_si(mag_t res, const mag_t x, ulong y, slong e) + void mag_sub(mag_t res, const mag_t x, const mag_t y) + void mag_sub_lower(mag_t res, const mag_t x, const mag_t y) + void mag_mul_2exp_si(mag_t res, const mag_t x, slong y) + void mag_mul_2exp_fmpz(mag_t res, const mag_t x, const fmpz_t y) + void mag_mul(mag_t res, const mag_t x, const mag_t y) + void mag_mul_ui(mag_t res, const mag_t x, ulong y) + void mag_mul_fmpz(mag_t res, const mag_t x, const fmpz_t y) + void mag_mul_lower(mag_t res, const mag_t x, const mag_t y) + void mag_mul_ui_lower(mag_t res, const mag_t x, ulong y) + void mag_mul_fmpz_lower(mag_t res, const mag_t x, const fmpz_t y) + void mag_addmul(mag_t z, const mag_t x, const mag_t y) + void mag_div(mag_t res, const mag_t x, const mag_t y) + void mag_div_ui(mag_t res, const mag_t x, ulong y) + void mag_div_fmpz(mag_t res, const mag_t x, const fmpz_t y) + void mag_div_lower(mag_t res, const mag_t x, const mag_t y) + void mag_inv(mag_t res, const mag_t x) + void mag_inv_lower(mag_t res, const mag_t x) + void mag_fast_init_set(mag_t x, const mag_t y) + void mag_fast_zero(mag_t res) + int mag_fast_is_zero(const mag_t x) + void mag_fast_mul(mag_t res, const mag_t x, const mag_t y) + void mag_fast_addmul(mag_t z, const mag_t x, const mag_t y) + void mag_fast_add_2exp_si(mag_t res, const mag_t x, slong e) + void mag_fast_mul_2exp_si(mag_t res, const mag_t x, slong e) + void mag_pow_ui(mag_t res, const mag_t x, ulong e) + void mag_pow_fmpz(mag_t res, const mag_t x, const fmpz_t e) + void mag_pow_ui_lower(mag_t res, const mag_t x, ulong e) + void mag_pow_fmpz_lower(mag_t res, const mag_t x, const fmpz_t e) + void mag_sqrt(mag_t res, const mag_t x) + void mag_sqrt_lower(mag_t res, const mag_t x) + void mag_rsqrt(mag_t res, const mag_t x) + void mag_rsqrt_lower(mag_t res, const mag_t x) + void mag_hypot(mag_t res, const mag_t x, const mag_t y) + void mag_root(mag_t res, const mag_t x, ulong n) + void mag_log(mag_t res, const mag_t x) + void mag_log_lower(mag_t res, const mag_t x) + void mag_neg_log(mag_t res, const mag_t x) + void mag_neg_log_lower(mag_t res, const mag_t x) + void mag_log_ui(mag_t res, ulong n) + void mag_log1p(mag_t res, const mag_t x) + void mag_exp(mag_t res, const mag_t x) + void mag_exp_lower(mag_t res, const mag_t x) + void mag_expinv(mag_t res, const mag_t x) + void mag_expinv_lower(mag_t res, const mag_t x) + void mag_expm1(mag_t res, const mag_t x) + void mag_exp_tail(mag_t res, const mag_t x, ulong N) + void mag_binpow_uiui(mag_t res, ulong m, ulong n) + void mag_geom_series(mag_t res, const mag_t x, ulong N) + void mag_const_pi(mag_t res) + void mag_const_pi_lower(mag_t res) + void mag_atan(mag_t res, const mag_t x) + void mag_atan_lower(mag_t res, const mag_t x) + void mag_cosh(mag_t res, const mag_t x) + void mag_cosh_lower(mag_t res, const mag_t x) + void mag_sinh(mag_t res, const mag_t x) + void mag_sinh_lower(mag_t res, const mag_t x) + void mag_fac_ui(mag_t res, ulong n) + void mag_rfac_ui(mag_t res, ulong n) + void mag_bin_uiui(mag_t res, ulong n, ulong k) + void mag_bernoulli_div_fac_ui(mag_t res, ulong n) + void mag_polylog_tail(mag_t res, const mag_t z, slong s, ulong d, ulong N) + void mag_hurwitz_zeta_uiui(mag_t res, ulong s, ulong a) diff --git a/src/flint/flintlib/nmod.pxd b/src/flint/flintlib/nmod.pxd new file mode 100644 index 00000000..b748f90f --- /dev/null +++ b/src/flint/flintlib/nmod.pxd @@ -0,0 +1,31 @@ +from flint.flintlib.flint cimport mp_limb_t, mp_bitcnt_t, ulong +from flint.flintlib.fmpz cimport fmpz_t + +cdef extern from "flint/nmod.h": + ctypedef struct nmod_t: + mp_limb_t n + mp_limb_t ninv + mp_bitcnt_t norm +# TODO add macros + +# from here on is parsed + void nmod_init(nmod_t * mod, mp_limb_t n) + mp_limb_t _nmod_add(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t nmod_add(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t _nmod_sub(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t nmod_sub(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t nmod_neg(mp_limb_t a, nmod_t mod) + mp_limb_t nmod_mul(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t _nmod_mul_fullword(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t nmod_inv(mp_limb_t a, nmod_t mod) + mp_limb_t nmod_div(mp_limb_t a, mp_limb_t b, nmod_t mod) + mp_limb_t nmod_pow_ui(mp_limb_t a, ulong e, nmod_t mod) + mp_limb_t nmod_pow_fmpz(mp_limb_t a, const fmpz_t e, nmod_t mod) + # void nmod_discrete_log_pohlig_hellman_init(nmod_discrete_log_pohlig_hellman_t L) + # void nmod_discrete_log_pohlig_hellman_clear(nmod_discrete_log_pohlig_hellman_t L) + # double nmod_discrete_log_pohlig_hellman_precompute_prime(nmod_discrete_log_pohlig_hellman_t L, mp_limb_t p) + # mp_limb_t nmod_discrete_log_pohlig_hellman_primitive_root(const nmod_discrete_log_pohlig_hellman_t L) + # ulong nmod_discrete_log_pohlig_hellman_run(const nmod_discrete_log_pohlig_hellman_t L, mp_limb_t y) + +cdef extern from "flint/fmpz.h": + mp_limb_t fmpz_get_nmod(const fmpz_t f, nmod_t mod) diff --git a/src/flint/flintlib/nmod_mat.pxd b/src/flint/flintlib/nmod_mat.pxd index 673cda32..925f9647 100644 --- a/src/flint/flintlib/nmod_mat.pxd +++ b/src/flint/flintlib/nmod_mat.pxd @@ -1,7 +1,8 @@ from flint.flintlib.flint cimport mp_limb_t, flint_rand_t, mp_ptr -from flint.flintlib.flint cimport mp_srcptr +from flint.flintlib.flint cimport mp_srcptr, slong, ulong from flint.flintlib.nmod_vec cimport nmod_t from flint.flintlib.nmod_poly cimport nmod_poly_t +from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/nmod_mat.h": ctypedef struct nmod_mat_struct: @@ -11,43 +12,92 @@ cdef extern from "flint/nmod_mat.h": mp_limb_t ** rows nmod_t mod ctypedef nmod_mat_struct nmod_mat_t[1] - mp_limb_t nmod_mat_entry(nmod_mat_t mat, long i, long j) - long nmod_mat_nrows(nmod_mat_t mat) - long nmod_mat_ncols(nmod_mat_t mat) - void _nmod_mat_set_mod(nmod_mat_t mat, mp_limb_t n) - void nmod_mat_init(nmod_mat_t mat, long rows, long cols, mp_limb_t n) + +# from here on is parsed + void nmod_mat_init(nmod_mat_t mat, slong rows, slong cols, mp_limb_t n) void nmod_mat_init_set(nmod_mat_t mat, nmod_mat_t src) void nmod_mat_clear(nmod_mat_t mat) + void nmod_mat_set(nmod_mat_t mat, nmod_mat_t src) + void nmod_mat_swap(nmod_mat_t mat1, nmod_mat_t mat2) + void nmod_mat_swap_entrywise(nmod_mat_t mat1, nmod_mat_t mat2) + mp_limb_t nmod_mat_entry(nmod_mat_t mat, long i, long j) + # MACRO nmod_mat_entry(nmod_mat_t mat, slong i, slong j) + mp_limb_t nmod_mat_get_entry(const nmod_mat_t mat, slong i, slong j) + mp_limb_t * nmod_mat_entry_ptr(const nmod_mat_t mat, slong i, slong j) + void nmod_mat_set_entry(nmod_mat_t mat, slong i, slong j, mp_limb_t x) + slong nmod_mat_nrows(nmod_mat_t mat) + slong nmod_mat_ncols(nmod_mat_t mat) + void nmod_mat_zero(nmod_mat_t mat) + int nmod_mat_is_zero(nmod_mat_t mat) + void nmod_mat_window_init(nmod_mat_t window, const nmod_mat_t mat, slong r1, slong c1, slong r2, slong c2) + void nmod_mat_window_clear(nmod_mat_t window) + void nmod_mat_concat_vertical(nmod_mat_t res, const nmod_mat_t mat1, const nmod_mat_t mat2) + void nmod_mat_concat_horizontal(nmod_mat_t res, const nmod_mat_t mat1, const nmod_mat_t mat2) + void nmod_mat_print_pretty(nmod_mat_t mat) void nmod_mat_randtest(nmod_mat_t mat, flint_rand_t state) void nmod_mat_randfull(nmod_mat_t mat, flint_rand_t state) - void nmod_mat_randrank(nmod_mat_t, flint_rand_t state, long rank) - void nmod_mat_randops(nmod_mat_t mat, long count, flint_rand_t state) + int nmod_mat_randpermdiag(nmod_mat_t mat, mp_limb_t * diag, slong n, flint_rand_t state) + void nmod_mat_randrank(nmod_mat_t mat, slong rank, flint_rand_t state) + void nmod_mat_randops(nmod_mat_t mat, slong count, flint_rand_t state) void nmod_mat_randtril(nmod_mat_t mat, flint_rand_t state, int unit) void nmod_mat_randtriu(nmod_mat_t mat, flint_rand_t state, int unit) - void nmod_mat_print_pretty(nmod_mat_t mat) int nmod_mat_equal(nmod_mat_t mat1, nmod_mat_t mat2) - int nmod_mat_is_zero(nmod_mat_t mat) - int nmod_mat_is_empty(nmod_mat_t mat) - int nmod_mat_is_square(nmod_mat_t mat) - void nmod_mat_zero(nmod_mat_t mat) - void nmod_mat_set(nmod_mat_t B, nmod_mat_t A) + int nmod_mat_is_zero_row(const nmod_mat_t mat, slong i) void nmod_mat_transpose(nmod_mat_t B, nmod_mat_t A) + void nmod_mat_swap_rows(nmod_mat_t mat, slong * perm, slong r, slong s) + void nmod_mat_swap_cols(nmod_mat_t mat, slong * perm, slong r, slong s) + void nmod_mat_invert_rows(nmod_mat_t mat, slong * perm) + void nmod_mat_invert_cols(nmod_mat_t mat, slong * perm) void nmod_mat_add(nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) void nmod_mat_sub(nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - void nmod_mat_neg(nmod_mat_t B, nmod_mat_t A) - void nmod_mat_scalar_mul(nmod_mat_t B, nmod_mat_t A, mp_limb_t c) - void nmod_mat_mul(nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - void nmod_mat_mul_classical(nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - void nmod_mat_mul_strassen(nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - void nmod_mat_addmul(nmod_mat_t D, nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - void nmod_mat_submul(nmod_mat_t D, nmod_mat_t C, nmod_mat_t A, nmod_mat_t B) - mp_limb_t nmod_mat_det(nmod_mat_t A) - long nmod_mat_rank(nmod_mat_t A) + void nmod_mat_neg(nmod_mat_t A, nmod_mat_t B) + void nmod_mat_scalar_mul(nmod_mat_t B, const nmod_mat_t A, mp_limb_t c) + void nmod_mat_scalar_addmul_ui(nmod_mat_t dest, const nmod_mat_t X, const nmod_mat_t Y, const mp_limb_t b) + void nmod_mat_scalar_mul_fmpz(nmod_mat_t res, const nmod_mat_t M, const fmpz_t c) + void nmod_mat_mul(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + void _nmod_mat_mul_classical_op(nmod_mat_t D, const nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B, int op) + void nmod_mat_mul_classical(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + # void _nmod_mat_mul_classical_threaded_pool_op(nmod_mat_t D, const nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B, int op, thread_pool_handle * threads, slong num_threads) + void _nmod_mat_mul_classical_threaded_op(nmod_mat_t D, const nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B, int op) + void nmod_mat_mul_classical_threaded(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + void nmod_mat_mul_strassen(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + int nmod_mat_mul_blas(nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + void nmod_mat_addmul(nmod_mat_t D, const nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + void nmod_mat_submul(nmod_mat_t D, const nmod_mat_t C, const nmod_mat_t A, const nmod_mat_t B) + void nmod_mat_mul_nmod_vec(mp_limb_t * c, const nmod_mat_t A, const mp_limb_t * b, slong blen) + void nmod_mat_mul_nmod_vec_ptr(mp_limb_t * const * c, const nmod_mat_t A, const mp_limb_t * const * b, slong blen) + void nmod_mat_nmod_vec_mul(mp_limb_t * c, const mp_limb_t * a, slong alen, const nmod_mat_t B) + void nmod_mat_nmod_vec_mul_ptr(mp_limb_t * const * c, const mp_limb_t * const * a, slong alen, const nmod_mat_t B) + void _nmod_mat_pow(nmod_mat_t dest, const nmod_mat_t mat, ulong pow) + void nmod_mat_pow(nmod_mat_t dest, nmod_mat_t mat, ulong pow) + mp_limb_t nmod_mat_trace(const nmod_mat_t mat) + mp_limb_t nmod_mat_det_howell(const nmod_mat_t A) + mp_limb_t nmod_mat_det(const nmod_mat_t A) + slong nmod_mat_rank(const nmod_mat_t A) int nmod_mat_inv(nmod_mat_t B, nmod_mat_t A) - void nmod_mat_solve_tril(nmod_mat_t X, nmod_mat_t L, nmod_mat_t B, int unit) - void nmod_mat_solve_triu(nmod_mat_t X, nmod_mat_t U, nmod_mat_t B, int unit) - long nmod_mat_lu(long * P, nmod_mat_t A, int rank_check) + void nmod_mat_solve_tril(nmod_mat_t X, const nmod_mat_t L, const nmod_mat_t B, int unit) + void nmod_mat_solve_tril_classical(nmod_mat_t X, const nmod_mat_t L, const nmod_mat_t B, int unit) + void nmod_mat_solve_tril_recursive(nmod_mat_t X, const nmod_mat_t L, const nmod_mat_t B, int unit) + void nmod_mat_solve_triu(nmod_mat_t X, const nmod_mat_t U, const nmod_mat_t B, int unit) + void nmod_mat_solve_triu_classical(nmod_mat_t X, const nmod_mat_t U, const nmod_mat_t B, int unit) + void nmod_mat_solve_triu_recursive(nmod_mat_t X, const nmod_mat_t U, const nmod_mat_t B, int unit) int nmod_mat_solve(nmod_mat_t X, nmod_mat_t A, nmod_mat_t B) - int nmod_mat_solve_vec(mp_ptr x, nmod_mat_t A, mp_srcptr b) - long nmod_mat_rref(nmod_mat_t A) - long nmod_mat_nullspace(nmod_mat_t X, nmod_mat_t A) + int nmod_mat_can_solve_inner(slong * rank, slong * perm, slong * pivots, nmod_mat_t X, const nmod_mat_t A, const nmod_mat_t B) + int nmod_mat_can_solve(nmod_mat_t X, nmod_mat_t A, nmod_mat_t B) + int nmod_mat_solve_vec(mp_limb_t * x, nmod_mat_t A, mp_limb_t * b) + slong nmod_mat_lu(slong * P, nmod_mat_t A, int rank_check) + slong nmod_mat_lu_classical(slong * P, nmod_mat_t A, int rank_check) + slong nmod_mat_lu_classical_delayed(slong * P, nmod_mat_t A, int rank_check) + slong nmod_mat_lu_recursive(slong * P, nmod_mat_t A, int rank_check) + slong nmod_mat_rref(nmod_mat_t A) + slong nmod_mat_reduce_row(nmod_mat_t A, slong * P, slong * L, slong n) + slong nmod_mat_nullspace(nmod_mat_t X, const nmod_mat_t A) + void nmod_mat_similarity(nmod_mat_t M, slong r, ulong d) + void nmod_mat_charpoly_berkowitz(nmod_poly_t p, const nmod_mat_t M) + void nmod_mat_charpoly_danilevsky(nmod_poly_t p, const nmod_mat_t M) + void nmod_mat_charpoly(nmod_poly_t p, const nmod_mat_t M) + void nmod_mat_minpoly(nmod_poly_t p, const nmod_mat_t M) + void nmod_mat_strong_echelon_form(nmod_mat_t A) + slong nmod_mat_howell_form(nmod_mat_t A) + # not in doc + int nmod_mat_is_square(nmod_mat_t mat) diff --git a/src/flint/flintlib/nmod_poly.pxd b/src/flint/flintlib/nmod_poly.pxd index 32b300c5..e0f10153 100644 --- a/src/flint/flintlib/nmod_poly.pxd +++ b/src/flint/flintlib/nmod_poly.pxd @@ -1,6 +1,7 @@ -from flint.flintlib.flint cimport mp_ptr, mp_limb_t, mp_bitcnt_t +from flint.flintlib.flint cimport mp_ptr, mp_limb_t, mp_bitcnt_t, mp_srcptr, slong, flint_bitcnt_t from flint.flintlib.flint cimport flint_rand_t, ulong from flint.flintlib.nmod_vec cimport nmod_t +from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/nmod_poly.h": ctypedef struct nmod_poly_struct: @@ -10,76 +11,422 @@ cdef extern from "flint/nmod_poly.h": nmod_t mod ctypedef nmod_poly_struct nmod_poly_t[1] - ctypedef struct nmod_poly_factor_struct: - nmod_poly_struct *p - long *exp - long num - long alloc - ctypedef nmod_poly_factor_struct nmod_poly_factor_t[1] - +# from here on is parsed + # int signed_mpn_sub_n(mp_ptr res, mp_srcptr op1, mp_srcptr op2, slong n) void nmod_poly_init(nmod_poly_t poly, mp_limb_t n) void nmod_poly_init_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv) - void nmod_poly_init2(nmod_poly_t poly, mp_limb_t n, long alloc) - void nmod_poly_init2_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv, long alloc) - void nmod_poly_realloc(nmod_poly_t poly, long alloc) + void nmod_poly_init_mod(nmod_poly_t poly, const nmod_t mod) + void nmod_poly_init2(nmod_poly_t poly, mp_limb_t n, slong alloc) + void nmod_poly_init2_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv, slong alloc) + void nmod_poly_realloc(nmod_poly_t poly, slong alloc) void nmod_poly_clear(nmod_poly_t poly) - void nmod_poly_fit_length(nmod_poly_t poly, long alloc) - long nmod_poly_length(nmod_poly_t poly) - long nmod_poly_degree(nmod_poly_t poly) - mp_limb_t nmod_poly_modulus(nmod_poly_t poly) - mp_bitcnt_t nmod_poly_max_bits(nmod_poly_t poly) - void nmod_poly_set(nmod_poly_t a, nmod_poly_t b) + void nmod_poly_fit_length(nmod_poly_t poly, slong alloc) + void _nmod_poly_normalise(nmod_poly_t poly) + slong nmod_poly_length(const nmod_poly_t poly) + slong nmod_poly_degree(const nmod_poly_t poly) + mp_limb_t nmod_poly_modulus(const nmod_poly_t poly) + flint_bitcnt_t nmod_poly_max_bits(const nmod_poly_t poly) + void nmod_poly_set(nmod_poly_t a, const nmod_poly_t b) void nmod_poly_swap(nmod_poly_t poly1, nmod_poly_t poly2) void nmod_poly_zero(nmod_poly_t res) - void nmod_poly_truncate(nmod_poly_t poly, long len) - void nmod_poly_reverse(nmod_poly_t output, nmod_poly_t input, long m) - void nmod_poly_randtest(nmod_poly_t poly, flint_rand_t state, long len) - ulong nmod_poly_get_coeff_ui(nmod_poly_t poly, ulong j) - void nmod_poly_set_coeff_ui(nmod_poly_t poly, ulong j, ulong c) - char * nmod_poly_get_str(nmod_poly_t poly) - int nmod_poly_set_str(char * s, nmod_poly_t poly) - int nmod_poly_print(nmod_poly_t a) - int nmod_poly_equal(nmod_poly_t a, nmod_poly_t b) - int nmod_poly_is_zero(nmod_poly_t poly) - void nmod_poly_shift_left(nmod_poly_t res, nmod_poly_t poly, long k) - void nmod_poly_shift_right(nmod_poly_t res, nmod_poly_t poly, long k) - void nmod_poly_add(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) - void nmod_poly_sub(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) - void nmod_poly_neg(nmod_poly_t res, nmod_poly_t poly1) - void nmod_poly_scalar_mul_nmod(nmod_poly_t res, nmod_poly_t poly1, mp_limb_t c) - void nmod_poly_make_monic(nmod_poly_t output, nmod_poly_t input) - void nmod_poly_mul(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) - void nmod_poly_mullow(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, long trunc) - void nmod_poly_pow(nmod_poly_t res, nmod_poly_t poly, ulong e) - void nmod_poly_pow_trunc(nmod_poly_t res, nmod_poly_t poly, ulong e, long trunc) - void nmod_poly_divrem(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B) - void nmod_poly_div(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B) - void nmod_poly_inv_series(nmod_poly_t Qinv, nmod_poly_t Q, long n) - void nmod_poly_div_series(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B, long n) - void nmod_poly_derivative(nmod_poly_t x_prime, nmod_poly_t x) - void nmod_poly_integral(nmod_poly_t x_int, nmod_poly_t x) + void nmod_poly_truncate(nmod_poly_t poly, slong len) + void nmod_poly_set_trunc(nmod_poly_t res, const nmod_poly_t poly, slong n) + void _nmod_poly_reverse(mp_ptr output, mp_srcptr input, slong len, slong m) + void nmod_poly_reverse(nmod_poly_t output, const nmod_poly_t input, slong m) + void nmod_poly_randtest(nmod_poly_t poly, flint_rand_t state, slong len) + void nmod_poly_randtest_irreducible(nmod_poly_t poly, flint_rand_t state, slong len) + void nmod_poly_randtest_monic(nmod_poly_t poly, flint_rand_t state, slong len) + void nmod_poly_randtest_monic_irreducible(nmod_poly_t poly, flint_rand_t state, slong len) + void nmod_poly_randtest_monic_primitive(nmod_poly_t poly, flint_rand_t state, slong len) + void nmod_poly_randtest_trinomial(nmod_poly_t poly, flint_rand_t state, slong len) + int nmod_poly_randtest_trinomial_irreducible(nmod_poly_t poly, flint_rand_t state, slong len, slong max_attempts) + void nmod_poly_randtest_pentomial(nmod_poly_t poly, flint_rand_t state, slong len) + int nmod_poly_randtest_pentomial_irreducible(nmod_poly_t poly, flint_rand_t state, slong len, slong max_attempts) + void nmod_poly_randtest_sparse_irreducible(nmod_poly_t poly, flint_rand_t state, slong len) + ulong nmod_poly_get_coeff_ui(const nmod_poly_t poly, slong j) + void nmod_poly_set_coeff_ui(nmod_poly_t poly, slong j, ulong c) + char * nmod_poly_get_str(const nmod_poly_t poly) + char * nmod_poly_get_str_pretty(const nmod_poly_t poly, const char * x) + int nmod_poly_set_str(nmod_poly_t poly, const char * s) + int nmod_poly_print(const nmod_poly_t a) + int nmod_poly_print_pretty(const nmod_poly_t a, const char * x) + int nmod_poly_read(nmod_poly_t poly) + int nmod_poly_equal(const nmod_poly_t a, const nmod_poly_t b) + int nmod_poly_equal_trunc(const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + int nmod_poly_is_zero(const nmod_poly_t poly) + int nmod_poly_is_one(const nmod_poly_t poly) + void _nmod_poly_shift_left(mp_ptr res, mp_srcptr poly, slong len, slong k) + void nmod_poly_shift_left(nmod_poly_t res, const nmod_poly_t poly, slong k) + void _nmod_poly_shift_right(mp_ptr res, mp_srcptr poly, slong len, slong k) + void nmod_poly_shift_right(nmod_poly_t res, const nmod_poly_t poly, slong k) + void _nmod_poly_add(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_add(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void nmod_poly_add_series(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void _nmod_poly_sub(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_sub(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void nmod_poly_sub_series(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void nmod_poly_neg(nmod_poly_t res, const nmod_poly_t poly) + void nmod_poly_scalar_mul_nmod(nmod_poly_t res, const nmod_poly_t poly, ulong c) + void _nmod_poly_make_monic(mp_ptr output, mp_srcptr input, slong len, nmod_t mod) + void nmod_poly_make_monic(nmod_poly_t output, const nmod_poly_t input) + void _nmod_poly_bit_pack(mp_ptr res, mp_srcptr poly, slong len, flint_bitcnt_t bits) + void _nmod_poly_bit_unpack(mp_ptr res, slong len, mp_srcptr mpn, ulong bits, nmod_t mod) + void nmod_poly_bit_pack(fmpz_t f, const nmod_poly_t poly, flint_bitcnt_t bit_size) + void nmod_poly_bit_unpack(nmod_poly_t poly, const fmpz_t f, flint_bitcnt_t bit_size) + void _nmod_poly_KS2_pack1(mp_ptr res, mp_srcptr op, slong n, slong s, ulong b, ulong k, slong r) + void _nmod_poly_KS2_pack(mp_ptr res, mp_srcptr op, slong n, slong s, ulong b, ulong k, slong r) + void _nmod_poly_KS2_unpack1(mp_ptr res, mp_srcptr op, slong n, ulong b, ulong k) + void _nmod_poly_KS2_unpack2(mp_ptr res, mp_srcptr op, slong n, ulong b, ulong k) + void _nmod_poly_KS2_unpack3(mp_ptr res, mp_srcptr op, slong n, ulong b, ulong k) + void _nmod_poly_KS2_unpack(mp_ptr res, mp_srcptr op, slong n, ulong b, ulong k) + void _nmod_poly_KS2_reduce(mp_ptr res, slong s, mp_srcptr op, slong n, ulong w, nmod_t mod) + void _nmod_poly_KS2_recover_reduce1(mp_ptr res, slong s, mp_srcptr op1, mp_srcptr op2, slong n, ulong b, nmod_t mod) + void _nmod_poly_KS2_recover_reduce2(mp_ptr res, slong s, mp_srcptr op1, mp_srcptr op2, slong n, ulong b, nmod_t mod) + void _nmod_poly_KS2_recover_reduce2b(mp_ptr res, slong s, mp_srcptr op1, mp_srcptr op2, slong n, ulong b, nmod_t mod) + void _nmod_poly_KS2_recover_reduce3(mp_ptr res, slong s, mp_srcptr op1, mp_srcptr op2, slong n, ulong b, nmod_t mod) + void _nmod_poly_KS2_recover_reduce(mp_ptr res, slong s, mp_srcptr op1, mp_srcptr op2, slong n, ulong b, nmod_t mod) + void _nmod_poly_mul_classical(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_mul_classical(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_mullow_classical(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong trunc, nmod_t mod) + void nmod_poly_mullow_classical(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong trunc) + void _nmod_poly_mulhigh_classical(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong start, nmod_t mod) + void nmod_poly_mulhigh_classical(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong start) + void _nmod_poly_mul_KS(mp_ptr out, mp_srcptr in1, slong len1, mp_srcptr in2, slong len2, flint_bitcnt_t bits, nmod_t mod) + void nmod_poly_mul_KS(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, flint_bitcnt_t bits) + void _nmod_poly_mul_KS2(mp_ptr res, mp_srcptr op1, slong n1, mp_srcptr op2, slong n2, nmod_t mod) + void nmod_poly_mul_KS2(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_mul_KS4(mp_ptr res, mp_srcptr op1, slong n1, mp_srcptr op2, slong n2, nmod_t mod) + void nmod_poly_mul_KS4(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_mullow_KS(mp_ptr out, mp_srcptr in1, slong len1, mp_srcptr in2, slong len2, flint_bitcnt_t bits, slong n, nmod_t mod) + void nmod_poly_mullow_KS(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, flint_bitcnt_t bits, slong n) + void _nmod_poly_mul(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_mul(nmod_poly_t res, const nmod_poly_t poly, const nmod_poly_t poly2) + void _nmod_poly_mullow(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong n, nmod_t mod) + void nmod_poly_mullow(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong trunc) + void _nmod_poly_mulhigh(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong n, nmod_t mod) + void nmod_poly_mulhigh(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void _nmod_poly_mulmod(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, mp_srcptr f, slong lenf, nmod_t mod) + void nmod_poly_mulmod(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, const nmod_poly_t f) + void _nmod_poly_mulmod_preinv(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + void nmod_poly_mulmod_preinv(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, const nmod_poly_t f, const nmod_poly_t finv) + void _nmod_poly_pow_binexp(mp_ptr res, mp_srcptr poly, slong len, ulong e, nmod_t mod) + void nmod_poly_pow_binexp(nmod_poly_t res, const nmod_poly_t poly, ulong e) + void _nmod_poly_pow(mp_ptr res, mp_srcptr poly, slong len, ulong e, nmod_t mod) + void nmod_poly_pow(nmod_poly_t res, const nmod_poly_t poly, ulong e) + void _nmod_poly_pow_trunc_binexp(mp_ptr res, mp_srcptr poly, ulong e, slong trunc, nmod_t mod) + void nmod_poly_pow_trunc_binexp(nmod_poly_t res, const nmod_poly_t poly, ulong e, slong trunc) + void _nmod_poly_pow_trunc(mp_ptr res, mp_srcptr poly, ulong e, slong trunc, nmod_t mod) + void nmod_poly_pow_trunc(nmod_poly_t res, const nmod_poly_t poly, ulong e, slong trunc) + void _nmod_poly_powmod_ui_binexp(mp_ptr res, mp_srcptr poly, ulong e, mp_srcptr f, slong lenf, nmod_t mod) + void nmod_poly_powmod_ui_binexp(nmod_poly_t res, const nmod_poly_t poly, ulong e, const nmod_poly_t f) + # void _nmod_poly_powmod_mpz_binexp(mp_ptr res, mp_srcptr poly, mpz_srcptr e, mp_srcptr f, slong lenf, nmod_t mod) + # void nmod_poly_powmod_mpz_binexp(nmod_poly_t res, const nmod_poly_t poly, mpz_srcptr e, const nmod_poly_t f) + void _nmod_poly_powmod_fmpz_binexp(mp_ptr res, mp_srcptr poly, fmpz_t e, mp_srcptr f, slong lenf, nmod_t mod) + void nmod_poly_powmod_fmpz_binexp(nmod_poly_t res, const nmod_poly_t poly, fmpz_t e, const nmod_poly_t f) + void _nmod_poly_powmod_ui_binexp_preinv (mp_ptr res, mp_srcptr poly, ulong e, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + void nmod_poly_powmod_ui_binexp_preinv(nmod_poly_t res, const nmod_poly_t poly, ulong e, const nmod_poly_t f, const nmod_poly_t finv) + # void _nmod_poly_powmod_mpz_binexp_preinv (mp_ptr res, mp_srcptr poly, mpz_srcptr e, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + # void nmod_poly_powmod_mpz_binexp_preinv(nmod_poly_t res, const nmod_poly_t poly, mpz_srcptr e, const nmod_poly_t f, const nmod_poly_t finv) + void _nmod_poly_powmod_fmpz_binexp_preinv (mp_ptr res, mp_srcptr poly, fmpz_t e, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + void nmod_poly_powmod_fmpz_binexp_preinv(nmod_poly_t res, const nmod_poly_t poly, fmpz_t e, const nmod_poly_t f, const nmod_poly_t finv) + void _nmod_poly_powmod_x_ui_preinv (mp_ptr res, ulong e, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + void nmod_poly_powmod_x_ui_preinv(nmod_poly_t res, ulong e, const nmod_poly_t f, const nmod_poly_t finv) + void _nmod_poly_powmod_x_fmpz_preinv (mp_ptr res, fmpz_t e, mp_srcptr f, slong lenf, mp_srcptr finv, slong lenfinv, nmod_t mod) + void nmod_poly_powmod_x_fmpz_preinv(nmod_poly_t res, fmpz_t e, const nmod_poly_t f, const nmod_poly_t finv) + void _nmod_poly_powers_mod_preinv_naive(mp_ptr * res, mp_srcptr f, slong flen, slong n, mp_srcptr g, slong glen, mp_srcptr ginv, slong ginvlen, const nmod_t mod) + void nmod_poly_powers_mod_naive(nmod_poly_struct * res, const nmod_poly_t f, slong n, const nmod_poly_t g) + # void _nmod_poly_powers_mod_preinv_threaded_pool(mp_ptr * res, mp_srcptr f, slong flen, slong n, mp_srcptr g, slong glen, mp_srcptr ginv, slong ginvlen, const nmod_t mod, thread_pool_handle * threads, slong num_threads) + void _nmod_poly_powers_mod_preinv_threaded(mp_ptr * res, mp_srcptr f, slong flen, slong n, mp_srcptr g, slong glen, mp_srcptr ginv, slong ginvlen, const nmod_t mod) + void nmod_poly_powers_mod_bsgs(nmod_poly_struct * res, const nmod_poly_t f, slong n, const nmod_poly_t g) + void _nmod_poly_divrem_basecase(mp_ptr Q, mp_ptr R, mp_ptr W, mp_srcptr A, slong A_len, mp_srcptr B, slong B_len, nmod_t mod) + void nmod_poly_divrem_basecase(nmod_poly_t Q, nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_div_basecase(mp_ptr Q, mp_ptr W, mp_srcptr A, slong A_len, mp_srcptr B, slong B_len, nmod_t mod) + void nmod_poly_div_basecase(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_divrem_divconquer_recursive(mp_ptr Q, mp_ptr BQ, mp_ptr W, mp_ptr V, mp_srcptr A, mp_srcptr B, slong lenB, nmod_t mod) + void _nmod_poly_divrem_divconquer(mp_ptr Q, mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_divrem_divconquer(nmod_poly_t Q, nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_divrem_q0(mp_ptr Q, mp_ptr R, mp_srcptr A, mp_srcptr B, slong lenA, nmod_t mod) + void _nmod_poly_divrem_q1(mp_ptr Q, mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void _nmod_poly_divrem(mp_ptr Q, mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_divrem(nmod_poly_t Q, nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_div_divconquer_recursive(mp_ptr Q, mp_ptr W, mp_ptr V, mp_srcptr A, mp_srcptr B, slong lenB, nmod_t mod) + void _nmod_poly_div_divconquer(mp_ptr Q, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_div_divconquer(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_div(mp_ptr Q, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_div(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_rem_basecase(mp_ptr R, mp_ptr W, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_rem_basecase(nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_rem_q1(mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void _nmod_poly_rem(mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_rem(nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_inv_series_basecase(mp_ptr Qinv, mp_srcptr Q, slong Qlen, slong n, nmod_t mod) + void nmod_poly_inv_series_basecase(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_inv_series_newton(mp_ptr Qinv, mp_srcptr Q, slong Qlen, slong n, nmod_t mod) + void nmod_poly_inv_series_newton(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_inv_series(mp_ptr Qinv, mp_srcptr Q, slong Qlen, slong n, nmod_t mod) + void nmod_poly_inv_series(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_div_series_basecase(mp_ptr Q, mp_srcptr A, slong Alen, mp_srcptr B, slong Blen, slong n, nmod_t mod) + void nmod_poly_div_series_basecase(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B, slong n) + void _nmod_poly_div_series(mp_ptr Q, mp_srcptr A, slong Alen, mp_srcptr B, slong Blen, slong n, nmod_t mod) + void nmod_poly_div_series(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B, slong n) + void _nmod_poly_div_newton(mp_ptr Q, mp_srcptr A, slong Alen, mp_srcptr B, slong Blen, nmod_t mod) + void nmod_poly_div_newton(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_div_newton_n_preinv (mp_ptr Q, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, mp_srcptr Binv, slong lenBinv, nmod_t mod) + void nmod_poly_div_newton_n_preinv (nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B, const nmod_poly_t Binv) + void _nmod_poly_divrem_newton(mp_ptr Q, mp_ptr R, mp_srcptr A, slong Alen, mp_srcptr B, slong Blen, nmod_t mod) + void nmod_poly_divrem_newton(nmod_poly_t Q, nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_divrem_newton_n_preinv (mp_ptr Q, mp_ptr R, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, mp_srcptr Binv, slong lenBinv, nmod_t mod) + void nmod_poly_divrem_newton_n_preinv(nmod_poly_t Q, nmod_poly_t R, const nmod_poly_t A, const nmod_poly_t B, const nmod_poly_t Binv) + mp_limb_t _nmod_poly_div_root(mp_ptr Q, mp_srcptr A, slong len, mp_limb_t c, nmod_t mod) + mp_limb_t nmod_poly_div_root(nmod_poly_t Q, const nmod_poly_t A, mp_limb_t c) + int _nmod_poly_divides_classical(mp_ptr Q, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + int nmod_poly_divides_classical(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + int _nmod_poly_divides(mp_ptr Q, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + int nmod_poly_divides(nmod_poly_t Q, const nmod_poly_t A, const nmod_poly_t B) + void _nmod_poly_derivative(mp_ptr x_prime, mp_srcptr x, slong len, nmod_t mod) + void nmod_poly_derivative(nmod_poly_t x_prime, const nmod_poly_t x) + void _nmod_poly_integral(mp_ptr x_int, mp_srcptr x, slong len, nmod_t mod) + void nmod_poly_integral(nmod_poly_t x_int, const nmod_poly_t x) + mp_limb_t _nmod_poly_evaluate_nmod(mp_srcptr poly, slong len, mp_limb_t c, nmod_t mod) mp_limb_t nmod_poly_evaluate_nmod(nmod_poly_t poly, mp_limb_t c) - void nmod_poly_compose(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) - void nmod_poly_gcd(nmod_poly_t G, nmod_poly_t A, nmod_poly_t B) - void nmod_poly_xgcd(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, nmod_poly_t A, nmod_poly_t B) - void nmod_poly_invsqrt_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_sqrt_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_atan_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_tan_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_asin_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_sin_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_cos_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_asinh_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_atanh_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_sinh_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_cosh_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_tanh_series(nmod_poly_t g, nmod_poly_t h, long n) - void nmod_poly_log_series(nmod_poly_t res, nmod_poly_t f, long n) - void nmod_poly_exp_series(nmod_poly_t f, nmod_poly_t h, long n) + # void nmod_poly_evaluate_mat_horner(nmod_mat_t dest, const nmod_poly_t poly, const nmod_mat_t c) + # void nmod_poly_evaluate_mat_paterson_stockmeyer(nmod_mat_t dest, const nmod_poly_t poly, const nmod_mat_t c) + # void nmod_poly_evaluate_mat(nmod_mat_t dest, const nmod_poly_t poly, const nmod_mat_t c) + void _nmod_poly_evaluate_nmod_vec_iter(mp_ptr ys, mp_srcptr poly, slong len, mp_srcptr xs, slong n, nmod_t mod) + void nmod_poly_evaluate_nmod_vec_iter(mp_ptr ys, const nmod_poly_t poly, mp_srcptr xs, slong n) + void _nmod_poly_evaluate_nmod_vec_fast_precomp(mp_ptr vs, mp_srcptr poly, slong plen, const mp_ptr * tree, slong len, nmod_t mod) + void _nmod_poly_evaluate_nmod_vec_fast(mp_ptr ys, mp_srcptr poly, slong len, mp_srcptr xs, slong n, nmod_t mod) + void nmod_poly_evaluate_nmod_vec_fast(mp_ptr ys, const nmod_poly_t poly, mp_srcptr xs, slong n) + void _nmod_poly_evaluate_nmod_vec(mp_ptr ys, mp_srcptr poly, slong len, mp_srcptr xs, slong n, nmod_t mod) + void nmod_poly_evaluate_nmod_vec(mp_ptr ys, const nmod_poly_t poly, mp_srcptr xs, slong n) + void _nmod_poly_interpolate_nmod_vec(mp_ptr poly, mp_srcptr xs, mp_srcptr ys, slong n, nmod_t mod) + void nmod_poly_interpolate_nmod_vec(nmod_poly_t poly, mp_srcptr xs, mp_srcptr ys, slong n) + void _nmod_poly_interpolation_weights(mp_ptr w, const mp_ptr * tree, slong len, nmod_t mod) + void _nmod_poly_interpolate_nmod_vec_fast_precomp(mp_ptr poly, mp_srcptr ys, const mp_ptr * tree, mp_srcptr weights, slong len, nmod_t mod) + void _nmod_poly_interpolate_nmod_vec_fast(mp_ptr poly, mp_srcptr xs, mp_srcptr ys, slong n, nmod_t mod) + void nmod_poly_interpolate_nmod_vec_fast(nmod_poly_t poly, mp_srcptr xs, mp_srcptr ys, slong n) + void _nmod_poly_interpolate_nmod_vec_newton(mp_ptr poly, mp_srcptr xs, mp_srcptr ys, slong n, nmod_t mod) + void nmod_poly_interpolate_nmod_vec_newton(nmod_poly_t poly, mp_srcptr xs, mp_srcptr ys, slong n) + void _nmod_poly_interpolate_nmod_vec_barycentric(mp_ptr poly, mp_srcptr xs, mp_srcptr ys, slong n, nmod_t mod) + void nmod_poly_interpolate_nmod_vec_barycentric(nmod_poly_t poly, mp_srcptr xs, mp_srcptr ys, slong n) + void _nmod_poly_compose_horner(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_compose_horner(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_compose_divconquer(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_compose_divconquer(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_compose(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + void nmod_poly_compose(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2) + void _nmod_poly_taylor_shift_horner(mp_ptr poly, mp_limb_t c, slong len, nmod_t mod) + void nmod_poly_taylor_shift_horner(nmod_poly_t g, const nmod_poly_t f, mp_limb_t c) + void _nmod_poly_taylor_shift_convolution(mp_ptr poly, mp_limb_t c, slong len, nmod_t mod) + void nmod_poly_taylor_shift_convolution(nmod_poly_t g, const nmod_poly_t f, mp_limb_t c) + void _nmod_poly_taylor_shift(mp_ptr poly, mp_limb_t c, slong len, nmod_t mod) + void nmod_poly_taylor_shift(nmod_poly_t g, const nmod_poly_t f, mp_limb_t c) + void _nmod_poly_compose_mod_horner(mp_ptr res, mp_srcptr f, slong lenf, mp_srcptr g, mp_srcptr h, slong lenh, nmod_t mod) + void nmod_poly_compose_mod_horner(nmod_poly_t res, const nmod_poly_t f, const nmod_poly_t g, const nmod_poly_t h) + void _nmod_poly_compose_mod_brent_kung(mp_ptr res, mp_srcptr f, slong lenf, mp_srcptr g, mp_srcptr h, slong lenh, nmod_t mod) + void nmod_poly_compose_mod_brent_kung(nmod_poly_t res, const nmod_poly_t f, const nmod_poly_t g, const nmod_poly_t h) + void _nmod_poly_compose_mod_brent_kung_preinv(mp_ptr res, mp_srcptr f, slong lenf, mp_srcptr g, mp_srcptr h, slong lenh, mp_srcptr hinv, slong lenhinv, nmod_t mod) + void nmod_poly_compose_mod_brent_kung_preinv(nmod_poly_t res, const nmod_poly_t f, const nmod_poly_t g, const nmod_poly_t h, const nmod_poly_t hinv) + # void _nmod_poly_reduce_matrix_mod_poly (nmod_mat_t A, const nmod_mat_t B, const nmod_poly_t f) + void _nmod_poly_precompute_matrix_worker (void * arg_ptr) + # void _nmod_poly_precompute_matrix (nmod_mat_t A, mp_srcptr f, mp_srcptr g, slong leng, mp_srcptr ginv, slong lenginv, nmod_t mod) + # void nmod_poly_precompute_matrix (nmod_mat_t A, const nmod_poly_t f, const nmod_poly_t g, const nmod_poly_t ginv) + void _nmod_poly_compose_mod_brent_kung_precomp_preinv_worker(void * arg_ptr) + # void _nmod_poly_compose_mod_brent_kung_precomp_preinv(mp_ptr res, mp_srcptr f, slong lenf, const nmod_mat_t A, mp_srcptr h, slong lenh, mp_srcptr hinv, slong lenhinv, nmod_t mod) + # void nmod_poly_compose_mod_brent_kung_precomp_preinv(nmod_poly_t res, const nmod_poly_t f, const nmod_mat_t A, const nmod_poly_t h, const nmod_poly_t hinv) + void _nmod_poly_compose_mod_brent_kung_vec_preinv(nmod_poly_struct * res, const nmod_poly_struct * polys, slong len1, slong l, mp_srcptr g, slong leng, mp_srcptr h, slong lenh, mp_srcptr hinv, slong lenhinv, nmod_t mod) + void nmod_poly_compose_mod_brent_kung_vec_preinv(nmod_poly_struct * res, const nmod_poly_struct * polys, slong len1, slong n, const nmod_poly_t g, const nmod_poly_t h, const nmod_poly_t hinv) + # void _nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(nmod_poly_struct * res, const nmod_poly_struct * polys, slong lenpolys, slong l, mp_srcptr g, slong glen, mp_srcptr poly, slong len, mp_srcptr polyinv, slong leninv, nmod_t mod, thread_pool_handle * threads, slong num_threads) + # void nmod_poly_compose_mod_brent_kung_vec_preinv_threaded_pool(nmod_poly_struct * res, const nmod_poly_struct * polys, slong len1, slong n, const nmod_poly_t g, const nmod_poly_t poly, const nmod_poly_t polyinv, thread_pool_handle * threads, slong num_threads) + void nmod_poly_compose_mod_brent_kung_vec_preinv_threaded(nmod_poly_struct * res, const nmod_poly_struct * polys, slong len1, slong n, const nmod_poly_t g, const nmod_poly_t poly, const nmod_poly_t polyinv) + void _nmod_poly_compose_mod(mp_ptr res, mp_srcptr f, slong lenf, mp_srcptr g, mp_srcptr h, slong lenh, nmod_t mod) + void nmod_poly_compose_mod(nmod_poly_t res, const nmod_poly_t f, const nmod_poly_t g, const nmod_poly_t h) + slong _nmod_poly_gcd_euclidean(mp_ptr G, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_gcd_euclidean(nmod_poly_t G, const nmod_poly_t A, const nmod_poly_t B) + slong _nmod_poly_hgcd(mp_ptr *M, slong *lenM, mp_ptr A, slong *lenA, mp_ptr B, slong *lenB, mp_srcptr a, slong lena, mp_srcptr b, slong lenb, nmod_t mod) + slong _nmod_poly_gcd_hgcd(mp_ptr G, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_gcd_hgcd(nmod_poly_t G, const nmod_poly_t A, const nmod_poly_t B) + slong _nmod_poly_gcd(mp_ptr G, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_gcd(nmod_poly_t G, const nmod_poly_t A, const nmod_poly_t B) + slong _nmod_poly_xgcd_euclidean(mp_ptr G, mp_ptr S, mp_ptr T, mp_srcptr A, slong A_len, mp_srcptr B, slong B_len, nmod_t mod) + void nmod_poly_xgcd_euclidean(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, const nmod_poly_t A, const nmod_poly_t B) + slong _nmod_poly_xgcd_hgcd(mp_ptr G, mp_ptr S, mp_ptr T, mp_srcptr A, slong A_len, mp_srcptr B, slong B_len, nmod_t mod) + void nmod_poly_xgcd_hgcd(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, const nmod_poly_t A, const nmod_poly_t B) + slong _nmod_poly_xgcd(mp_ptr G, mp_ptr S, mp_ptr T, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, nmod_t mod) + void nmod_poly_xgcd(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, const nmod_poly_t A, const nmod_poly_t B) + mp_limb_t _nmod_poly_resultant_euclidean(mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + mp_limb_t nmod_poly_resultant_euclidean(const nmod_poly_t f, const nmod_poly_t g) + mp_limb_t _nmod_poly_resultant_hgcd(mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + mp_limb_t nmod_poly_resultant_hgcd(const nmod_poly_t f, const nmod_poly_t g) + mp_limb_t _nmod_poly_resultant(mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, nmod_t mod) + mp_limb_t nmod_poly_resultant(const nmod_poly_t f, const nmod_poly_t g) + slong _nmod_poly_gcdinv(mp_ptr G, mp_ptr S, mp_srcptr A, slong lenA, mp_srcptr B, slong lenB, const nmod_t mod) + void nmod_poly_gcdinv(nmod_poly_t G, nmod_poly_t S, const nmod_poly_t A, const nmod_poly_t B) + int _nmod_poly_invmod(mp_ptr A, mp_srcptr B, slong lenB, mp_srcptr P, slong lenP, const nmod_t mod) + int nmod_poly_invmod(nmod_poly_t A, const nmod_poly_t B, const nmod_poly_t P) + mp_limb_t _nmod_poly_discriminant(mp_srcptr poly, slong len, nmod_t mod) + mp_limb_t nmod_poly_discriminant(const nmod_poly_t f) + void _nmod_poly_compose_series_horner(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong n) + void nmod_poly_compose_series_horner(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void _nmod_poly_compose_series_brent_kung(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong n) + void nmod_poly_compose_series_brent_kung(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void _nmod_poly_compose_series_divconquer(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong N, nmod_t mod) + void nmod_poly_compose_series_divconquer(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong N) + void _nmod_poly_compose_series(mp_ptr res, mp_srcptr poly1, slong len1, mp_srcptr poly2, slong len2, slong n) + void nmod_poly_compose_series(nmod_poly_t res, const nmod_poly_t poly1, const nmod_poly_t poly2, slong n) + void _nmod_poly_revert_series_lagrange(mp_ptr Qinv, mp_srcptr Q, slong n, nmod_t mod) + void nmod_poly_revert_series_lagrange(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_revert_series_lagrange_fast(mp_ptr Qinv, mp_srcptr Q, slong n, nmod_t mod) + void nmod_poly_revert_series_lagrange_fast(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_revert_series_newton(mp_ptr Qinv, mp_srcptr Q, slong n, nmod_t mod) + void nmod_poly_revert_series_newton(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_revert_series(mp_ptr Qinv, mp_srcptr Q, slong n, nmod_t mod) + void nmod_poly_revert_series(nmod_poly_t Qinv, const nmod_poly_t Q, slong n) + void _nmod_poly_invsqrt_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_invsqrt_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_sqrt_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_sqrt_series(nmod_poly_t g, const nmod_poly_t h, slong n) + int _nmod_poly_sqrt(mp_ptr s, mp_srcptr p, slong n, nmod_t mod) + int nmod_poly_sqrt(nmod_poly_t s, const nmod_poly_t p) + void _nmod_poly_power_sums_naive(mp_ptr res, mp_srcptr poly, slong len, slong n, nmod_t mod) + void nmod_poly_power_sums_naive(nmod_poly_t res, const nmod_poly_t poly, slong n) + void _nmod_poly_power_sums_schoenhage(mp_ptr res, mp_srcptr poly, slong len, slong n, nmod_t mod) + void nmod_poly_power_sums_schoenhage(nmod_poly_t res, const nmod_poly_t poly, slong n) + void _nmod_poly_power_sums(mp_ptr res, mp_srcptr poly, slong len, slong n, nmod_t mod) + void nmod_poly_power_sums(nmod_poly_t res, const nmod_poly_t poly, slong n) + void _nmod_poly_power_sums_to_poly_naive(mp_ptr res, mp_srcptr poly, slong len, nmod_t mod) + void nmod_poly_power_sums_to_poly_naive(nmod_poly_t res, const nmod_poly_t Q) + void _nmod_poly_power_sums_to_poly_schoenhage(mp_ptr res, mp_srcptr poly, slong len, nmod_t mod) + void nmod_poly_power_sums_to_poly_schoenhage(nmod_poly_t res, const nmod_poly_t Q) + void _nmod_poly_power_sums_to_poly(mp_ptr res, mp_srcptr poly, slong len, nmod_t mod) + void nmod_poly_power_sums_to_poly(nmod_poly_t res, const nmod_poly_t Q) + void _nmod_poly_log_series_monomial_ui(mp_ptr g, mp_limb_t c, ulong r, slong n, nmod_t mod) + void nmod_poly_log_series_monomial_ui(nmod_poly_t g, mp_limb_t c, ulong r, slong n) + void _nmod_poly_log_series(mp_ptr g, mp_srcptr h, slong hlen, slong n, nmod_t mod) + void nmod_poly_log_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_exp_series_monomial_ui(mp_ptr g, mp_limb_t c, ulong r, slong n, nmod_t mod) + void nmod_poly_exp_series_monomial_ui(nmod_poly_t g, mp_limb_t c, ulong r, slong n) + void _nmod_poly_exp_series_basecase(mp_ptr g, mp_srcptr h, slong hlen, slong n, nmod_t mod) + void nmod_poly_exp_series_basecase(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_exp_series(mp_ptr f, mp_srcptr h, slong hlen, slong n, nmod_t mod) + void _nmod_poly_exp_expinv_series(mp_ptr f, mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_exp_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_atan_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_atan_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_atanh_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_atanh_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_asin_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_asin_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_asinh_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_asinh_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_sin_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_sin_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_cos_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_cos_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_tan_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_tan_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_sinh_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_sinh_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_cosh_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_cosh_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_tanh_series(mp_ptr g, mp_srcptr h, slong n, nmod_t mod) + void nmod_poly_tanh_series(nmod_poly_t g, const nmod_poly_t h, slong n) + void _nmod_poly_product_roots_nmod_vec(mp_ptr poly, mp_srcptr xs, slong n, nmod_t mod) + void nmod_poly_product_roots_nmod_vec(nmod_poly_t poly, mp_srcptr xs, slong n) + int nmod_poly_find_distinct_nonzero_roots(mp_limb_t * roots, const nmod_poly_t A) + mp_ptr * _nmod_poly_tree_alloc(slong len) + void _nmod_poly_tree_free(mp_ptr * tree, slong len) + void _nmod_poly_tree_build(mp_ptr * tree, mp_srcptr roots, slong len, nmod_t mod) + void nmod_poly_inflate(nmod_poly_t result, const nmod_poly_t input, ulong inflation) + void nmod_poly_deflate(nmod_poly_t result, const nmod_poly_t input, ulong deflation) + ulong nmod_poly_deflation(const nmod_poly_t input) + # void nmod_poly_multi_crt_init(nmod_poly_multi_crt_t CRT) + # int nmod_poly_multi_crt_precompute(nmod_poly_multi_crt_t CRT, const nmod_poly_struct * moduli, slong len) + # int nmod_poly_multi_crt_precompute_p(nmod_poly_multi_crt_t CRT, const nmod_poly_struct * const * moduli, slong len) + # void nmod_poly_multi_crt_precomp(nmod_poly_t output, const nmod_poly_multi_crt_t CRT, const nmod_poly_struct * values) + # void nmod_poly_multi_crt_precomp_p(nmod_poly_t output, const nmod_poly_multi_crt_t CRT, const nmod_poly_struct * const * values) + int nmod_poly_multi_crt(nmod_poly_t output, const nmod_poly_struct * moduli, const nmod_poly_struct * values, slong len) + # void nmod_poly_multi_crt_clear(nmod_poly_multi_crt_t CRT) + # slong _nmod_poly_multi_crt_local_size(const nmod_poly_multi_crt_t CRT) + # void _nmod_poly_multi_crt_run(nmod_poly_struct * outputs, const nmod_poly_multi_crt_t CRT, const nmod_poly_struct * inputs) + # void _nmod_poly_multi_crt_run_p(nmod_poly_struct * outputs, const nmod_poly_multi_crt_t CRT, const nmod_poly_struct * const * inputs) + # void nmod_berlekamp_massey_init(nmod_berlekamp_massey_t B, mp_limb_t p) + # void nmod_berlekamp_massey_clear(nmod_berlekamp_massey_t B) + # void nmod_berlekamp_massey_start_over(nmod_berlekamp_massey_t B) + # void nmod_berlekamp_massey_set_prime(nmod_berlekamp_massey_t B, mp_limb_t p) + # void nmod_berlekamp_massey_add_points(nmod_berlekamp_massey_t B, const mp_limb_t * a, slong count) + # void nmod_berlekamp_massey_add_zeros(nmod_berlekamp_massey_t B, slong count) + # void nmod_berlekamp_massey_add_point(nmod_berlekamp_massey_t B, mp_limb_t a) + # int nmod_berlekamp_massey_reduce(nmod_berlekamp_massey_t B) + # slong nmod_berlekamp_massey_point_count(const nmod_berlekamp_massey_t B) + # const mp_limb_t * nmod_berlekamp_massey_points(const nmod_berlekamp_massey_t B) + # const nmod_poly_struct * nmod_berlekamp_massey_V_poly(const nmod_berlekamp_massey_t B) + # const nmod_poly_struct * nmod_berlekamp_massey_R_poly(const nmod_berlekamp_massey_t B) + + + # void nmod_poly_init(nmod_poly_t poly, mp_limb_t n) + # void nmod_poly_init_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv) + # void nmod_poly_init2(nmod_poly_t poly, mp_limb_t n, long alloc) + # void nmod_poly_init2_preinv(nmod_poly_t poly, mp_limb_t n, mp_limb_t ninv, long alloc) + # void nmod_poly_realloc(nmod_poly_t poly, long alloc) + # void nmod_poly_clear(nmod_poly_t poly) + # void nmod_poly_fit_length(nmod_poly_t poly, long alloc) + # long nmod_poly_length(nmod_poly_t poly) + # long nmod_poly_degree(nmod_poly_t poly) + # mp_limb_t nmod_poly_modulus(nmod_poly_t poly) + # mp_bitcnt_t nmod_poly_max_bits(nmod_poly_t poly) + # void nmod_poly_set(nmod_poly_t a, nmod_poly_t b) + # void nmod_poly_swap(nmod_poly_t poly1, nmod_poly_t poly2) + # void nmod_poly_zero(nmod_poly_t res) + # void nmod_poly_truncate(nmod_poly_t poly, long len) + # void nmod_poly_reverse(nmod_poly_t output, nmod_poly_t input, long m) + # void nmod_poly_randtest(nmod_poly_t poly, flint_rand_t state, long len) + # ulong nmod_poly_get_coeff_ui(nmod_poly_t poly, ulong j) + # void nmod_poly_set_coeff_ui(nmod_poly_t poly, ulong j, ulong c) + # char * nmod_poly_get_str(nmod_poly_t poly) + # int nmod_poly_set_str(char * s, nmod_poly_t poly) + # int nmod_poly_print(nmod_poly_t a) + # int nmod_poly_equal(nmod_poly_t a, nmod_poly_t b) + # int nmod_poly_is_zero(nmod_poly_t poly) + # void nmod_poly_shift_left(nmod_poly_t res, nmod_poly_t poly, long k) + # void nmod_poly_shift_right(nmod_poly_t res, nmod_poly_t poly, long k) + # void nmod_poly_add(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) + # void nmod_poly_sub(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) + # void nmod_poly_neg(nmod_poly_t res, nmod_poly_t poly1) + # void nmod_poly_scalar_mul_nmod(nmod_poly_t res, nmod_poly_t poly1, mp_limb_t c) + # void nmod_poly_make_monic(nmod_poly_t output, nmod_poly_t input) + # void nmod_poly_mul(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) + # void nmod_poly_mullow(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2, long trunc) + # void nmod_poly_pow(nmod_poly_t res, nmod_poly_t poly, ulong e) + # void nmod_poly_pow_trunc(nmod_poly_t res, nmod_poly_t poly, ulong e, long trunc) + # void nmod_poly_divrem(nmod_poly_t Q, nmod_poly_t R, nmod_poly_t A, nmod_poly_t B) + # void nmod_poly_div(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B) + # void nmod_poly_inv_series(nmod_poly_t Qinv, nmod_poly_t Q, long n) + # void nmod_poly_div_series(nmod_poly_t Q, nmod_poly_t A, nmod_poly_t B, long n) + # void nmod_poly_derivative(nmod_poly_t x_prime, nmod_poly_t x) + # void nmod_poly_integral(nmod_poly_t x_int, nmod_poly_t x) + # mp_limb_t nmod_poly_evaluate_nmod(nmod_poly_t poly, mp_limb_t c) + # void nmod_poly_compose(nmod_poly_t res, nmod_poly_t poly1, nmod_poly_t poly2) + # void nmod_poly_gcd(nmod_poly_t G, nmod_poly_t A, nmod_poly_t B) + # void nmod_poly_xgcd(nmod_poly_t G, nmod_poly_t S, nmod_poly_t T, nmod_poly_t A, nmod_poly_t B) + # void nmod_poly_invsqrt_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_sqrt_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_atan_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_tan_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_asin_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_sin_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_cos_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_asinh_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_atanh_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_sinh_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_cosh_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_tanh_series(nmod_poly_t g, nmod_poly_t h, long n) + # void nmod_poly_log_series(nmod_poly_t res, nmod_poly_t f, long n) + # void nmod_poly_exp_series(nmod_poly_t f, nmod_poly_t h, long n) - int nmod_poly_is_irreducible(nmod_poly_t f) - mp_limb_t nmod_poly_factor_with_berlekamp(nmod_poly_factor_t result, nmod_poly_t poly) - mp_limb_t nmod_poly_factor_with_cantor_zassenhaus(nmod_poly_factor_t result, nmod_poly_t poly) - mp_limb_t nmod_poly_factor(nmod_poly_factor_t result, nmod_poly_t input) - void nmod_poly_factor_init(nmod_poly_factor_t fac) - void nmod_poly_factor_clear(nmod_poly_factor_t fac) + # int nmod_poly_is_irreducible(nmod_poly_t f) + # mp_limb_t nmod_poly_factor_with_berlekamp(nmod_poly_factor_t result, nmod_poly_t poly) + # mp_limb_t nmod_poly_factor_with_cantor_zassenhaus(nmod_poly_factor_t result, nmod_poly_t poly) + # mp_limb_t nmod_poly_factor(nmod_poly_factor_t result, nmod_poly_t input) + # void nmod_poly_factor_init(nmod_poly_factor_t fac) + # void nmod_poly_factor_clear(nmod_poly_factor_t fac) diff --git a/src/flint/flintlib/nmod_poly_factor.pxd b/src/flint/flintlib/nmod_poly_factor.pxd new file mode 100644 index 00000000..1b7dda89 --- /dev/null +++ b/src/flint/flintlib/nmod_poly_factor.pxd @@ -0,0 +1,42 @@ +from flint.flintlib.flint cimport slong, ulong, mp_srcptr, flint_rand_t, mp_limb_t +from flint.flintlib.nmod cimport nmod_t +from flint.flintlib.nmod_poly cimport nmod_poly_t, nmod_poly_struct + +cdef extern from "flint/nmod_poly_factor.h": + + ctypedef struct nmod_poly_factor_struct: + nmod_poly_struct *p + long *exp + long num + long alloc + ctypedef nmod_poly_factor_struct nmod_poly_factor_t[1] + +# from here on is parsed + void nmod_poly_factor_init(nmod_poly_factor_t fac) + void nmod_poly_factor_clear(nmod_poly_factor_t fac) + void nmod_poly_factor_realloc(nmod_poly_factor_t fac, slong alloc) + void nmod_poly_factor_fit_length(nmod_poly_factor_t fac, slong len) + void nmod_poly_factor_set(nmod_poly_factor_t res, const nmod_poly_factor_t fac) + void nmod_poly_factor_print(const nmod_poly_factor_t fac) + void nmod_poly_factor_insert(nmod_poly_factor_t fac, const nmod_poly_t poly, slong exp) + void nmod_poly_factor_concat(nmod_poly_factor_t res, const nmod_poly_factor_t fac) + void nmod_poly_factor_pow(nmod_poly_factor_t fac, slong exp) + ulong nmod_poly_remove(nmod_poly_t f, const nmod_poly_t p) + int nmod_poly_is_irreducible(const nmod_poly_t f) + int nmod_poly_is_irreducible_ddf(const nmod_poly_t f) + int nmod_poly_is_irreducible_rabin(const nmod_poly_t f) + int _nmod_poly_is_squarefree(mp_srcptr f, slong len, nmod_t mod) + int nmod_poly_is_squarefree(const nmod_poly_t f) + void nmod_poly_factor_squarefree(nmod_poly_factor_t res, const nmod_poly_t f) + int nmod_poly_factor_equal_deg_prob(nmod_poly_t factor, flint_rand_t state, const nmod_poly_t pol, slong d) + void nmod_poly_factor_equal_deg(nmod_poly_factor_t factors, const nmod_poly_t pol, slong d) + void nmod_poly_factor_distinct_deg(nmod_poly_factor_t res, const nmod_poly_t poly, slong * const *degs) + void nmod_poly_factor_distinct_deg_threaded(nmod_poly_factor_t res, const nmod_poly_t poly, slong * const *degs) + void nmod_poly_factor_cantor_zassenhaus(nmod_poly_factor_t res, const nmod_poly_t f) + void nmod_poly_factor_berlekamp(nmod_poly_factor_t res, const nmod_poly_t f) + void nmod_poly_factor_kaltofen_shoup(nmod_poly_factor_t res, const nmod_poly_t poly) + mp_limb_t nmod_poly_factor_with_berlekamp(nmod_poly_factor_t res, const nmod_poly_t f) + mp_limb_t nmod_poly_factor_with_cantor_zassenhaus(nmod_poly_factor_t res, const nmod_poly_t f) + mp_limb_t nmod_poly_factor_with_kaltofen_shoup(nmod_poly_factor_t res, const nmod_poly_t f) + mp_limb_t nmod_poly_factor(nmod_poly_factor_t res, const nmod_poly_t f) + void _nmod_poly_interval_poly_worker(void* arg_ptr) diff --git a/src/flint/flintlib/nmod_vec.pxd b/src/flint/flintlib/nmod_vec.pxd index e5059ce4..fd9760b9 100644 --- a/src/flint/flintlib/nmod_vec.pxd +++ b/src/flint/flintlib/nmod_vec.pxd @@ -1,10 +1,7 @@ from flint.flintlib.flint cimport mp_limb_t, mp_bitcnt_t +from flint.flintlib.nmod cimport nmod_t cdef extern from "flint/nmod_vec.h": - ctypedef struct nmod_t: - mp_limb_t n - mp_limb_t ninv - mp_bitcnt_t norm void nmod_init(nmod_t * mod, mp_limb_t n) mp_limb_t nmod_add(mp_limb_t a, mp_limb_t b, nmod_t mod) mp_limb_t nmod_sub(mp_limb_t a, mp_limb_t b, nmod_t mod) diff --git a/src/flint/flintlib/partitions.pxd b/src/flint/flintlib/partitions.pxd index ac523b55..7c01d6c6 100644 --- a/src/flint/flintlib/partitions.pxd +++ b/src/flint/flintlib/partitions.pxd @@ -1,4 +1,13 @@ +from flint.flintlib.flint cimport ulong, slong from flint.flintlib.fmpz cimport fmpz_t +from flint.flintlib.arf cimport arf_t +from flint.flintlib.arb cimport arb_t cdef extern from "partitions.h": - void partitions_fmpz_fmpz(fmpz_t, const fmpz_t, int) +# from here on is parsed + void partitions_rademacher_bound(arf_t b, const fmpz_t n, ulong N) + void partitions_hrr_sum_arb(arb_t x, const fmpz_t n, slong N0, slong N, int use_doubles) + void partitions_fmpz_fmpz(fmpz_t p, const fmpz_t n, int use_doubles) + void partitions_fmpz_ui(fmpz_t p, ulong n) + void partitions_fmpz_ui_using_doubles(fmpz_t p, ulong n) + void partitions_leading_fmpz(arb_t res, const fmpz_t n, slong prec) diff --git a/src/flint/flintlib/ulong_extras.pxd b/src/flint/flintlib/ulong_extras.pxd index e4952d80..37ae0327 100644 --- a/src/flint/flintlib/ulong_extras.pxd +++ b/src/flint/flintlib/ulong_extras.pxd @@ -1,5 +1,130 @@ -from flint.flintlib.flint cimport ulong +from flint.flintlib.flint cimport ulong, flint_rand_t, slong, mp_limb_t +from flint.flintlib.fmpz cimport fmpz_t cdef extern from "flint/ulong_extras.h": - ulong n_gcd(ulong n, ulong k) +# ulong n_gcd(ulong n, ulong k) +# int n_is_prime(ulong n) + +# from here on is parsed + ulong n_randlimb(flint_rand_t state) + ulong n_randbits(flint_rand_t state, unsigned int bits) + ulong n_randtest_bits(flint_rand_t state, int bits) + ulong n_randint(flint_rand_t state, ulong limit) + ulong n_urandint(flint_rand_t state, ulong limit) + ulong n_randtest(flint_rand_t state) + ulong n_randtest_not_zero(flint_rand_t state) + ulong n_randprime(flint_rand_t state, ulong bits, int proved) + ulong n_randtest_prime(flint_rand_t state, int proved) + ulong n_pow(ulong n, ulong exp) + ulong n_flog(ulong n, ulong b) + ulong n_clog(ulong n, ulong b) + ulong n_clog_2exp(ulong n, ulong b) + ulong n_revbin(ulong n, ulong b) + int n_sizeinbase(ulong n, int base) + ulong n_preinvert_limb(ulong n) + double n_precompute_inverse(ulong n) + ulong n_mod_precomp(ulong a, ulong n, double ninv) + ulong n_mod2_precomp(ulong a, ulong n, double ninv) + ulong n_divrem2_preinv(ulong * q, ulong a, ulong n, ulong ninv) + ulong n_div2_preinv(ulong a, ulong n, ulong ninv) + ulong n_mod2_preinv(ulong a, ulong n, ulong ninv) + ulong n_divrem2_precomp(ulong * q, ulong a, ulong n, double npre) + ulong n_ll_mod_preinv(ulong a_hi, ulong a_lo, ulong n, ulong ninv) + ulong n_lll_mod_preinv(ulong a_hi, ulong a_mi, ulong a_lo, ulong n, ulong ninv) + ulong n_mulmod_precomp(ulong a, ulong b, ulong n, double ninv) + ulong n_mulmod2_preinv(ulong a, ulong b, ulong n, ulong ninv) + ulong n_mulmod2(ulong a, ulong b, ulong n) + ulong n_mulmod_preinv(ulong a, ulong b, ulong n, ulong ninv, ulong norm) + ulong n_gcd(ulong x, ulong y) + ulong n_gcdinv(ulong * a, ulong x, ulong y) + ulong n_xgcd(ulong * a, ulong * b, ulong x, ulong y) + # int n_jacobi(mp_limb_signed_t x, ulong y) + int n_jacobi_unsigned(ulong x, ulong y) + ulong n_addmod(ulong a, ulong b, ulong n) + ulong n_submod(ulong a, ulong b, ulong n) + ulong n_invmod(ulong x, ulong y) + # ulong n_powmod_precomp(ulong a, mp_limb_signed_t exp, ulong n, double npre) + ulong n_powmod_ui_precomp(ulong a, ulong exp, ulong n, double npre) + # ulong n_powmod(ulong a, mp_limb_signed_t exp, ulong n) + # ulong n_powmod2_preinv(ulong a, mp_limb_signed_t exp, ulong n, ulong ninv) + # ulong n_powmod2(ulong a, mp_limb_signed_t exp, ulong n) + ulong n_powmod2_ui_preinv(ulong a, ulong exp, ulong n, ulong ninv) + ulong n_powmod2_fmpz_preinv(ulong a, const fmpz_t exp, ulong n, ulong ninv) + ulong n_sqrtmod(ulong a, ulong p) + slong n_sqrtmod_2pow(ulong ** sqrt, ulong a, slong exp) + slong n_sqrtmod_primepow(ulong ** sqrt, ulong a, ulong p, slong exp) + # slong n_sqrtmodn(ulong ** sqrt, ulong a, n_factor_t * fac) + mp_limb_t n_mulmod_shoup(mp_limb_t w, mp_limb_t t, mp_limb_t w_precomp, mp_limb_t p) + mp_limb_t n_mulmod_precomp_shoup(mp_limb_t w, mp_limb_t p) + int n_divides(mp_limb_t * q, mp_limb_t n, mp_limb_t p) + # void n_primes_init(n_primes_t iter) + # void n_primes_clear(n_primes_t iter) + # ulong n_primes_next(n_primes_t iter) + # void n_primes_jump_after(n_primes_t iter, ulong n) + # void n_primes_extend_small(n_primes_t iter, ulong bound) + # void n_primes_sieve_range(n_primes_t iter, ulong a, ulong b) + void n_compute_primes(ulong num_primes) + const ulong * n_primes_arr_readonly(ulong num_primes) + const double * n_prime_inverses_arr_readonly(ulong n) + void n_cleanup_primes() + ulong n_nextprime(ulong n, int proved) + ulong n_prime_pi(ulong n) + void n_prime_pi_bounds(ulong *lo, ulong *hi, ulong n) + ulong n_nth_prime(ulong n) + void n_nth_prime_bounds(ulong *lo, ulong *hi, ulong n) + int n_is_oddprime_small(ulong n) + int n_is_oddprime_binary(ulong n) + int n_is_prime_pocklington(ulong n, ulong iterations) + int n_is_prime_pseudosquare(ulong n) int n_is_prime(ulong n) + int n_is_strong_probabprime_precomp(ulong n, double npre, ulong a, ulong d) + int n_is_strong_probabprime2_preinv(ulong n, ulong ninv, ulong a, ulong d) + int n_is_probabprime_fermat(ulong n, ulong i) + int n_is_probabprime_fibonacci(ulong n) + int n_is_probabprime_BPSW(ulong n) + int n_is_probabprime_lucas(ulong n) + int n_is_probabprime(ulong n) + ulong n_CRT(ulong r1, ulong m1, ulong r2, ulong m2) + ulong n_sqrt(ulong a) + ulong n_sqrtrem(ulong * r, ulong a) + int n_is_square(ulong x) + int n_is_perfect_power235(ulong n) + int n_is_perfect_power(ulong * root, ulong n) + ulong n_rootrem(ulong* remainder, ulong n, ulong root) + ulong n_cbrt(ulong n) + ulong n_cbrt_newton_iteration(ulong n) + ulong n_cbrt_binary_search(ulong n) + ulong n_cbrt_chebyshev_approx(ulong n) + ulong n_cbrtrem(ulong* remainder, ulong n) + int n_remove(ulong * n, ulong p) + int n_remove2_precomp(ulong * n, ulong p, double ppre) + # void n_factor_insert(n_factor_t * factors, ulong p, ulong exp) + # ulong n_factor_trial_range(n_factor_t * factors, ulong n, ulong start, ulong num_primes) + # ulong n_factor_trial(n_factor_t * factors, ulong n, ulong num_primes) + ulong n_factor_power235(ulong *exp, ulong n) + ulong n_factor_one_line(ulong n, ulong iters) + ulong n_factor_lehman(ulong n) + ulong n_factor_SQUFOF(ulong n, ulong iters) + # void n_factor(n_factor_t * factors, ulong n, int proved) + # ulong n_factor_trial_partial(n_factor_t * factors, ulong n, ulong * prod, ulong num_primes, ulong limit) + # ulong n_factor_partial(n_factor_t * factors, ulong n, ulong limit, int proved) + ulong n_factor_pp1(ulong n, ulong B1, ulong c) + ulong n_factor_pp1_wrapper(ulong n) + int n_factor_pollard_brent_single(mp_limb_t *factor, mp_limb_t n, mp_limb_t ninv, mp_limb_t ai, mp_limb_t xi, mp_limb_t normbits, mp_limb_t max_iters) + int n_factor_pollard_brent(mp_limb_t *factor, flint_rand_t state, mp_limb_t n_in, mp_limb_t max_tries, mp_limb_t max_iters) + int n_moebius_mu(ulong n) + void n_moebius_mu_vec(int * mu, ulong len) + int n_is_squarefree(ulong n) + ulong n_euler_phi(ulong n) + ulong n_factorial_fast_mod2_preinv(ulong n, ulong p, ulong pinv) + ulong n_factorial_mod2_preinv(ulong n, ulong p, ulong pinv) + # ulong n_primitive_root_prime_prefactor(ulong p, n_factor_t * factors) + ulong n_primitive_root_prime(ulong p) + ulong n_discrete_log_bsgs(ulong b, ulong a, ulong n) + # void n_factor_ecm_double(mp_limb_t *x, mp_limb_t *z, mp_limb_t x0, mp_limb_t z0, mp_limb_t n, n_ecm_t n_ecm_inf) + # void n_factor_ecm_add(mp_limb_t *x, mp_limb_t *z, mp_limb_t x1, mp_limb_t z1, mp_limb_t x2, mp_limb_t z2, mp_limb_t x0, mp_limb_t z0, mp_limb_t n, n_ecm_t n_ecm_inf) + # void n_factor_ecm_mul_montgomery_ladder(mp_limb_t *x, mp_limb_t *z, mp_limb_t x0, mp_limb_t z0, mp_limb_t k, mp_limb_t n, n_ecm_t n_ecm_inf) + # int n_factor_ecm_select_curve(mp_limb_t *f, mp_limb_t sigma, mp_limb_t n, n_ecm_t n_ecm_inf) + # int n_factor_ecm_stage_I(mp_limb_t *f, const mp_limb_t *prime_array, mp_limb_t num, mp_limb_t B1, mp_limb_t n, n_ecm_t n_ecm_inf) + # int n_factor_ecm_stage_II(mp_limb_t *f, mp_limb_t B1, mp_limb_t B2, mp_limb_t P, mp_limb_t n, n_ecm_t n_ecm_inf) + # int n_factor_ecm(mp_limb_t *f, mp_limb_t curves, mp_limb_t B1, mp_limb_t B2, flint_rand_t state, mp_limb_t n) diff --git a/src/flint/types/nmod_poly.pyx b/src/flint/types/nmod_poly.pyx index 6128eca9..8c7b297b 100644 --- a/src/flint/types/nmod_poly.pyx +++ b/src/flint/types/nmod_poly.pyx @@ -8,6 +8,7 @@ from flint.types.nmod cimport nmod from flint.flintlib.nmod_vec cimport * from flint.flintlib.nmod_poly cimport * +from flint.flintlib.nmod_poly_factor cimport * from flint.flintlib.fmpz_poly cimport fmpz_poly_get_nmod_poly cdef any_as_nmod_poly(obj, nmod_t mod):