diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in index f2e197b45ed..7d56a605907 100644 --- a/pkgs/sage-conf/_sage_conf/_conf.py.in +++ b/pkgs/sage-conf/_sage_conf/_conf.py.in @@ -19,8 +19,6 @@ MAXIMA_FAS = "@SAGE_MAXIMA_FAS@".replace('${prefix}', SAGE_LOCAL) # Delete this line if your ECL can load Kenzo without further prodding. KENZO_FAS = "@SAGE_KENZO_FAS@".replace('${prefix}', SAGE_LOCAL) -ARB_LIBRARY = "@SAGE_ARB_LIBRARY@" - NTL_INCDIR = "@NTL_INCDIR@" NTL_LIBDIR = "@NTL_LIBDIR@" diff --git a/src/sage/env.py b/src/sage/env.py index f4899639a6d..f6459313fd4 100644 --- a/src/sage/env.py +++ b/src/sage/env.py @@ -223,7 +223,6 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st FOURTITWO_PPI = var("FOURTITWO_PPI") FOURTITWO_CIRCUITS = var("FOURTITWO_CIRCUITS") FOURTITWO_GROEBNER = var("FOURTITWO_GROEBNER") -ARB_LIBRARY = var("ARB_LIBRARY", "arb") CBLAS_PC_MODULES = var("CBLAS_PC_MODULES", "cblas:openblas:blas") ECL_CONFIG = var("ECL_CONFIG", "ecl-config") NTL_INCDIR = var("NTL_INCDIR") @@ -356,8 +355,7 @@ def cython_aliases(required_modules=None, sage: cython_aliases() {...} sage: sorted(cython_aliases().keys()) - ['ARB_LIBRARY', - 'CBLAS_CFLAGS', + ['CBLAS_CFLAGS', ..., 'ZLIB_LIBRARIES'] sage: cython_aliases(required_modules=('module-that-is-assumed-to-not-exist')) @@ -475,8 +473,6 @@ def uname_specific(name, value, alternative): if "LINBOX_CFLAGS" in aliases: aliases["LINBOX_CFLAGS"].append("-std=gnu++11") - aliases["ARB_LIBRARY"] = ARB_LIBRARY - # TODO: Remove Cygwin hack by installing a suitable cblas.pc if os.path.exists('/usr/lib/libblas.dll.a'): aliases["CBLAS_LIBS"] = ['gslcblas'] diff --git a/src/sage/libs/arb/acb.pxd b/src/sage/libs/arb/acb.pxd index 5148dc43991..3f53b96d331 100644 --- a/src/sage/libs/arb/acb.pxd +++ b/src/sage/libs/arb/acb.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/acb_calc.pxd b/src/sage/libs/arb/acb_calc.pxd index a5dbf360b5e..67bd2ed57dc 100644 --- a/src/sage/libs/arb/acb_calc.pxd +++ b/src/sage/libs/arb/acb_calc.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb_calc.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/acb_elliptic.pxd b/src/sage/libs/arb/acb_elliptic.pxd index 176f68df00e..e3480e9f73b 100644 --- a/src/sage/libs/arb/acb_elliptic.pxd +++ b/src/sage/libs/arb/acb_elliptic.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb_elliptic.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/acb_hypgeom.pxd b/src/sage/libs/arb/acb_hypgeom.pxd index 418e766f10d..c43e5c0623b 100644 --- a/src/sage/libs/arb/acb_hypgeom.pxd +++ b/src/sage/libs/arb/acb_hypgeom.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb_hypgeom.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/acb_modular.pxd b/src/sage/libs/arb/acb_modular.pxd index c708e9bf97d..cdc413c92da 100644 --- a/src/sage/libs/arb/acb_modular.pxd +++ b/src/sage/libs/arb/acb_modular.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb_modular.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/acb_poly.pxd b/src/sage/libs/arb/acb_poly.pxd index 69f4320055b..ae02757ffd9 100644 --- a/src/sage/libs/arb/acb_poly.pxd +++ b/src/sage/libs/arb/acb_poly.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = acb_poly.h from sage.libs.arb.types cimport * @@ -79,24 +79,10 @@ cdef extern from "arb_wrap.h": void _acb_poly_divrem(acb_ptr Q, acb_ptr R, acb_srcptr A, long lenA, acb_srcptr B, long lenB, long prec) bint 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_taylor_shift_horner(acb_ptr g, const acb_t c, long n, long prec) - void acb_poly_taylor_shift_horner(acb_poly_t g, const acb_poly_t f, const acb_t c, long prec) - void _acb_poly_taylor_shift_divconquer(acb_ptr g, const acb_t c, long n, long prec) - void acb_poly_taylor_shift_divconquer(acb_poly_t g, const acb_poly_t f, const acb_t c, long prec) - void _acb_poly_taylor_shift_convolution(acb_ptr g, const acb_t c, long n, long prec) - void acb_poly_taylor_shift_convolution(acb_poly_t g, const acb_poly_t f, const acb_t c, long prec) void _acb_poly_taylor_shift(acb_ptr g, const acb_t c, long n, long prec) void acb_poly_taylor_shift(acb_poly_t g, const acb_poly_t f, const acb_t c, 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(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_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 h, acb_srcptr f, long flen, long n, long prec) @@ -161,10 +147,6 @@ cdef extern from "arb_wrap.h": 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, int times_pi) - void acb_poly_sin_cos_series_basecase(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec, int times_pi) - void _acb_poly_sin_cos_series_tangent(acb_ptr s, acb_ptr c, acb_srcptr h, long hlen, long n, long prec, int times_pi) - void acb_poly_sin_cos_series_tangent(acb_poly_t s, acb_poly_t c, const acb_poly_t h, long n, long prec, int times_pi) void _acb_poly_sin_cos_series(acb_ptr s, acb_ptr c, acb_srcptr h, long hlen, long n, 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 s, acb_srcptr h, long hlen, long n, long prec) diff --git a/src/sage/libs/arb/arb.pxd b/src/sage/libs/arb/arb.pxd index c82b94de30f..33083fc125f 100644 --- a/src/sage/libs/arb/arb.pxd +++ b/src/sage/libs/arb/arb.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = arb.h from sage.libs.arb.types cimport * diff --git a/src/sage/libs/arb/arb_fmpz_poly.pxd b/src/sage/libs/arb/arb_fmpz_poly.pxd index 079f76e9d9e..55daa705238 100644 --- a/src/sage/libs/arb/arb_fmpz_poly.pxd +++ b/src/sage/libs/arb/arb_fmpz_poly.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = arb_fmpz_poly.h from sage.libs.arb.types cimport * @@ -22,5 +22,4 @@ cdef extern from "arb_wrap.h": unsigned long arb_fmpz_poly_deflation(const fmpz_poly_t poly) void arb_fmpz_poly_deflate(fmpz_poly_t res, const fmpz_poly_t poly, unsigned long deflation) void arb_fmpz_poly_complex_roots(acb_ptr roots, const fmpz_poly_t poly, int flags, long prec) - void arb_fmpz_poly_cos_minpoly(fmpz_poly_t res, unsigned long n) void arb_fmpz_poly_gauss_period_minpoly(fmpz_poly_t res, unsigned long q, unsigned long n) diff --git a/src/sage/libs/arb/arb_hypgeom.pxd b/src/sage/libs/arb/arb_hypgeom.pxd index fb1c40ddaa8..139b987d669 100644 --- a/src/sage/libs/arb/arb_hypgeom.pxd +++ b/src/sage/libs/arb/arb_hypgeom.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = arb_hypgeom.h from sage.libs.flint.types cimport fmpz_t diff --git a/src/sage/libs/arb/arb_wrap.h b/src/sage/libs/arb/arb_wrap.h index 49997075ee5..f51c89ffe38 100644 --- a/src/sage/libs/arb/arb_wrap.h +++ b/src/sage/libs/arb/arb_wrap.h @@ -11,19 +11,19 @@ #define ulong mp_limb_t #define slong mp_limb_signed_t -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #undef ulong #undef slong diff --git a/src/sage/libs/arb/arf.pxd b/src/sage/libs/arb/arf.pxd index b8b83fefcdc..84778fe9f09 100644 --- a/src/sage/libs/arb/arf.pxd +++ b/src/sage/libs/arb/arf.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = arf.h from sage.libs.arb.types cimport * @@ -30,7 +30,6 @@ cdef extern from "arb_wrap.h": void arf_set_ui(arf_t y, unsigned long x) void arf_set_si(arf_t y, long x) void arf_set_mpfr(arf_t y, const mpfr_t x) - # void arf_set_fmpr(arf_t y, const fmpr_t x) void arf_set_d(arf_t y, double x) void arf_swap(arf_t y, arf_t x) void arf_init_set_ui(arf_t y, unsigned long x) @@ -46,7 +45,6 @@ cdef extern from "arb_wrap.h": int arf_set_round_fmpz_2exp(arf_t y, const fmpz_t x, const fmpz_t e, long prec, arf_rnd_t rnd) void arf_get_fmpz_2exp(fmpz_t m, fmpz_t e, const arf_t x) double arf_get_d(const arf_t x, arf_rnd_t rnd) - # void arf_get_fmpr(fmpr_t y, const arf_t x) int arf_get_mpfr(mpfr_t y, const arf_t x, mpfr_rnd_t rnd) 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) diff --git a/src/sage/libs/arb/bernoulli.pxd b/src/sage/libs/arb/bernoulli.pxd index 375b2b9bbcf..ea9340f4b15 100644 --- a/src/sage/libs/arb/bernoulli.pxd +++ b/src/sage/libs/arb/bernoulli.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = bernoulli.h from ..flint.types cimport fmpq_t, ulong diff --git a/src/sage/libs/arb/mag.pxd b/src/sage/libs/arb/mag.pxd index d5d8693ea8f..69dfb990ae0 100644 --- a/src/sage/libs/arb/mag.pxd +++ b/src/sage/libs/arb/mag.pxd @@ -1,4 +1,4 @@ -# distutils: libraries = gmp flint ARB_LIBRARY +# distutils: libraries = gmp flint # distutils: depends = mag.h from sage.libs.arb.types cimport * @@ -27,13 +27,11 @@ cdef extern from "arb_wrap.h": # void mag_randtest(mag_t x, flint_rand_t state, long expbits) # void mag_randtest_special(mag_t x, flint_rand_t state, long expbits) void mag_set_d(mag_t y, double x) - # void mag_set_fmpr(mag_t y, const fmpr_t x) void mag_set_ui(mag_t y, unsigned long x) void mag_set_fmpz(mag_t y, const fmpz_t x) void mag_set_d_2exp_fmpz(mag_t z, double x, const fmpz_t y) void mag_set_fmpz_2exp_fmpz(mag_t z, const fmpz_t x, const fmpz_t y) void mag_set_ui_2exp_si(mag_t z, unsigned long x, long y) - # void mag_get_fmpr(fmpr_t y, const mag_t x) void mag_get_fmpq(fmpq_t y, const mag_t x) void mag_set_ui_lower(mag_t z, unsigned long x) void mag_set_fmpz_lower(mag_t z, const fmpz_t x) diff --git a/src/sage/libs/flint/flint_wrap.h b/src/sage/libs/flint/flint_wrap.h index 266535c3835..a416d5b53db 100644 --- a/src/sage/libs/flint/flint_wrap.h +++ b/src/sage/libs/flint/flint_wrap.h @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include diff --git a/src/sage/libs/flint/fmpq.pxd b/src/sage/libs/flint/fmpq.pxd index 5e64c82102f..0616c0a7408 100644 --- a/src/sage/libs/flint/fmpq.pxd +++ b/src/sage/libs/flint/fmpq.pxd @@ -12,6 +12,8 @@ cdef extern from "flint_wrap.h": fmpz * fmpq_denref(fmpq_t) void fmpq_init(fmpq_t) void fmpq_clear(fmpq_t) + void fmpq_init_set_readonly(fmpq_t, const mpq_t) + void fmpq_clear_readonly(fmpq_t) void fmpq_one(fmpq_t) void fmpq_zero(fmpq_t) bint fmpq_is_zero(fmpq_t) diff --git a/src/sage/libs/flint/fmpq_poly.pxd b/src/sage/libs/flint/fmpq_poly.pxd index 20a797c0197..516f9e84cfc 100644 --- a/src/sage/libs/flint/fmpq_poly.pxd +++ b/src/sage/libs/flint/fmpq_poly.pxd @@ -30,6 +30,9 @@ cdef extern from "flint_wrap.h": void fmpq_poly_canonicalise(fmpq_poly_t) int fmpq_poly_is_canonical(const fmpq_poly_t) + void _fmpq_poly_set_length(fmpq_poly_t, slong) + void _fmpq_poly_normalise(fmpq_poly_t) + # Polynomial parameters slong fmpq_poly_degree(const fmpq_poly_t) ulong fmpq_poly_length(const fmpq_poly_t) @@ -46,10 +49,7 @@ cdef extern from "flint_wrap.h": void fmpq_poly_set_ui(fmpq_poly_t, ulong) void fmpq_poly_set_fmpz(fmpq_poly_t, const fmpz_t) void fmpq_poly_set_fmpq(fmpq_poly_t, const fmpq_t) - void fmpq_poly_set_mpz(fmpq_poly_t, const mpz_t) - void fmpq_poly_set_mpq(fmpq_poly_t, const mpq_t) void fmpq_poly_set_fmpz_poly(fmpq_poly_t, const fmpz_poly_t) - void fmpq_poly_set_array_mpq(fmpq_poly_t, const mpq_t *, slong) void fmpq_poly_set_str(fmpq_poly_t, const char *) char *fmpq_poly_get_str(const fmpq_poly_t) @@ -67,7 +67,6 @@ cdef extern from "flint_wrap.h": void fmpq_poly_reverse(fmpq_poly_t, const fmpq_poly_t, slong) void fmpq_poly_get_coeff_fmpq(fmpq_t, const fmpq_poly_t, slong) - void fmpq_poly_get_coeff_mpq(mpq_t, const fmpq_poly_t, slong) void fmpq_poly_get_coeff_si(slong, const fmpq_poly_t, slong) void fmpq_poly_get_coeff_ui(ulong, const fmpq_poly_t, slong) @@ -75,8 +74,6 @@ cdef extern from "flint_wrap.h": void fmpq_poly_set_coeff_ui(fmpq_poly_t, slong, ulong) void fmpq_poly_set_coeff_fmpz(fmpq_poly_t, slong, const fmpz_t) void fmpq_poly_set_coeff_fmpq(fmpq_poly_t, slong, const fmpq_t) - void fmpq_poly_set_coeff_mpz(fmpq_poly_t, slong, const mpz_t) - void fmpq_poly_set_coeff_mpq(fmpq_poly_t, slong, const mpq_t) # Comparison int fmpq_poly_equal(const fmpq_poly_t, const fmpq_poly_t) @@ -100,8 +97,6 @@ cdef extern from "flint_wrap.h": fmpq_poly_t, const fmpq_poly_t, const fmpz_t) void fmpq_poly_scalar_mul_fmpq( fmpq_poly_t, const fmpq_poly_t, const fmpq_t) - void fmpq_poly_scalar_mul_mpz(fmpq_poly_t, const fmpq_poly_t, const mpz_t) - void fmpq_poly_scalar_mul_mpq(fmpq_poly_t, const fmpq_poly_t, const mpq_t) void fmpq_poly_scalar_div_si(fmpq_poly_t, const fmpq_poly_t, slong) void fmpq_poly_scalar_div_ui(fmpq_poly_t, const fmpq_poly_t, ulong) @@ -109,8 +104,6 @@ cdef extern from "flint_wrap.h": fmpq_poly_t, const fmpq_poly_t, const fmpz_t) void fmpq_poly_scalar_div_fmpq( fmpq_poly_t, const fmpq_poly_t, const fmpq_t) - void fmpq_poly_scalar_div_mpz(fmpq_poly_t, const fmpq_poly_t, const mpz_t) - void fmpq_poly_scalar_div_mpq(fmpq_poly_t, const fmpq_poly_t, const mpq_t) # Multiplication void fmpq_poly_mul(fmpq_poly_t, const fmpq_poly_t, const fmpq_poly_t) @@ -155,8 +148,6 @@ cdef extern from "flint_wrap.h": # Evaluation void fmpq_poly_evaluate_fmpz(fmpq_t, const fmpq_poly_t, const fmpz_t) void fmpq_poly_evaluate_fmpq(fmpq_t, const fmpq_poly_t, const fmpq_t) - void fmpq_poly_evaluate_mpz(mpq_t, const fmpq_poly_t, const mpz_t) - void fmpq_poly_evaluate_mpq(mpq_t, const fmpq_poly_t, const mpq_t) # Composition void fmpq_poly_compose(fmpq_poly_t, const fmpq_poly_t, const fmpq_poly_t) @@ -189,3 +180,11 @@ cdef extern from "flint_wrap.h": # since the fmpq_poly header seems to be lacking this inline function cdef inline sage_fmpq_poly_max_limbs(const fmpq_poly_t poly): return _fmpz_vec_max_limbs(fmpq_poly_numref(poly), fmpq_poly_length(poly)) + +# functions removed from flint but still needed in sage +cdef void fmpq_poly_scalar_mul_mpz(fmpq_poly_t, const fmpq_poly_t, const mpz_t) +cdef void fmpq_poly_scalar_mul_mpq(fmpq_poly_t, const fmpq_poly_t, const mpq_t) +cdef void fmpq_poly_set_coeff_mpq(fmpq_poly_t, slong, const mpq_t) +cdef void fmpq_poly_get_coeff_mpq(mpq_t, const fmpq_poly_t, slong) +cdef void fmpq_poly_set_mpz(fmpq_poly_t, const mpz_t) +cdef void fmpq_poly_set_mpq(fmpq_poly_t, const mpq_t) diff --git a/src/sage/libs/flint/fmpz.pxd b/src/sage/libs/flint/fmpz.pxd index 01058d0f130..b97fbe1eae0 100644 --- a/src/sage/libs/flint/fmpz.pxd +++ b/src/sage/libs/flint/fmpz.pxd @@ -16,6 +16,9 @@ cdef extern from "flint_wrap.h": void fmpz_init_set(fmpz_t, fmpz_t) void fmpz_init_set_ui(fmpz_t, ulong) + void fmpz_init_set_readonly(fmpz_t, const mpz_t) + void fmpz_clear_readonly(fmpz_t) + # Conversion void fmpz_set(fmpz_t f, fmpz_t g) void fmpz_set_ui(fmpz_t, ulong) diff --git a/src/sage/libs/flint/fmpz_mod_poly.pxd b/src/sage/libs/flint/fmpz_mod_poly.pxd index 24b653eb3b7..2727246da98 100644 --- a/src/sage/libs/flint/fmpz_mod_poly.pxd +++ b/src/sage/libs/flint/fmpz_mod_poly.pxd @@ -67,13 +67,6 @@ cdef extern from "flint_wrap.h": void fmpz_mod_poly_get_coeff_fmpz(fmpz_t x, const fmpz_mod_poly_t poly, slong n, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_set_coeff_mpz(fmpz_mod_poly_t poly, - slong n, const mpz_t x, const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_get_coeff_mpz(mpz_t x, - const fmpz_mod_poly_t poly, slong n, const fmpz_mod_ctx_t ctx) - - void _fmpz_mod_poly_shift_left(fmpz * res, const fmpz * poly, slong len, slong n) @@ -194,14 +187,6 @@ cdef extern from "flint_wrap.h": const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_div_basecase(fmpz_mod_poly_t Q, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_div_newton_n_preinv(fmpz_mod_poly_t Q, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_poly_t Binv, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_divrem_newton_n_preinv(fmpz_mod_poly_t Q, fmpz_mod_poly_t R, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_poly_t Binv, const fmpz_mod_ctx_t ctx) @@ -213,10 +198,6 @@ cdef extern from "flint_wrap.h": const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_divrem_divconquer(fmpz_mod_poly_t Q, - fmpz_mod_poly_t R, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_divrem(fmpz_mod_poly_t Q, fmpz_mod_poly_t R, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) @@ -254,40 +235,13 @@ cdef extern from "flint_wrap.h": void fmpz_mod_poly_make_monic_f(fmpz_t f, fmpz_mod_poly_t res, const fmpz_mod_poly_t poly, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_gcd_euclidean(fmpz_mod_poly_t G, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_gcd_euclidean_f(fmpz_t f, fmpz_mod_poly_t G, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_gcd_f(fmpz_t f, fmpz_mod_poly_t G, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_gcd_hgcd(fmpz_mod_poly_t G, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_gcd(fmpz_mod_poly_t G, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_xgcd_euclidean(fmpz_mod_poly_t G, - fmpz_mod_poly_t S, fmpz_mod_poly_t T, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_xgcd_euclidean_f(fmpz_t f, fmpz_mod_poly_t G, - fmpz_mod_poly_t S, fmpz_mod_poly_t T, - const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_xgcd_hgcd(fmpz_mod_poly_t G, fmpz_mod_poly_t S, - fmpz_mod_poly_t T, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, - const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_xgcd(fmpz_mod_poly_t G, fmpz_mod_poly_t S, fmpz_mod_poly_t T, const fmpz_mod_poly_t A, const fmpz_mod_poly_t B, const fmpz_mod_ctx_t ctx) @@ -361,14 +315,6 @@ cdef extern from "flint_wrap.h": const fmpz_mod_poly_t poly, const fmpz * xs, slong n, const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_compose_horner(fmpz_mod_poly_t res, - const fmpz_mod_poly_t poly1, const fmpz_mod_poly_t poly2, - const fmpz_mod_ctx_t ctx) - - void fmpz_mod_poly_compose_divconquer(fmpz_mod_poly_t res, - const fmpz_mod_poly_t poly1, const fmpz_mod_poly_t poly2, - const fmpz_mod_ctx_t ctx) - void fmpz_mod_poly_compose(fmpz_mod_poly_t res, const fmpz_mod_poly_t poly1, const fmpz_mod_poly_t poly2, const fmpz_mod_ctx_t ctx) diff --git a/src/sage/libs/flint/fmpz_poly.pxd b/src/sage/libs/flint/fmpz_poly.pxd index 18b36672d30..c8bc6d3ca0a 100644 --- a/src/sage/libs/flint/fmpz_poly.pxd +++ b/src/sage/libs/flint/fmpz_poly.pxd @@ -28,7 +28,6 @@ cdef extern from "flint_wrap.h": void fmpz_poly_set_ui(fmpz_poly_t, ulong) void fmpz_poly_set_si(fmpz_poly_t, slong) void fmpz_poly_set_fmpz(fmpz_poly_t, const fmpz_t) - void fmpz_poly_set_mpz(fmpz_poly_t, const mpz_t) int fmpz_poly_set_str(fmpz_poly_t, const char *) char *fmpz_poly_get_str(const fmpz_poly_t) @@ -70,7 +69,6 @@ cdef extern from "flint_wrap.h": # Scalar multiplication and division void fmpz_poly_scalar_mul_fmpz( fmpz_poly_t, const fmpz_poly_t, const fmpz_t) - void fmpz_poly_scalar_mul_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) void fmpz_poly_scalar_mul_si(fmpz_poly_t, const fmpz_poly_t, slong) void fmpz_poly_scalar_mul_ui(fmpz_poly_t, const fmpz_poly_t, ulong) void fmpz_poly_scalar_mul_2exp(fmpz_poly_t, const fmpz_poly_t, ulong) @@ -310,12 +308,14 @@ cdef extern from "flint_wrap.h": fmpz_poly_t, const fmpz_poly_t, const fmpz_t, const nmod_poly_t, int) - # Some functions for backwards compatibility - void fmpz_poly_scalar_mul_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) - void fmpz_poly_scalar_divexact_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) - void fmpz_poly_scalar_fdiv_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) - void fmpz_poly_set_coeff_mpz(fmpz_poly_t, slong, const mpz_t) - void fmpz_poly_get_coeff_mpz(mpz_t, const fmpz_poly_t, slong) + +# functions removed from flint but still needed in sage +cdef void fmpz_poly_scalar_mul_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) +cdef void fmpz_poly_scalar_divexact_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) +cdef void fmpz_poly_scalar_fdiv_mpz(fmpz_poly_t, const fmpz_poly_t, const mpz_t) +cdef void fmpz_poly_set_coeff_mpz(fmpz_poly_t, slong, const mpz_t) +cdef void fmpz_poly_get_coeff_mpz(mpz_t, const fmpz_poly_t, slong) +cdef void fmpz_poly_set_mpz(fmpz_poly_t, const mpz_t) # Wrapper Cython class diff --git a/src/sage/libs/flint/fmpz_poly.pyx b/src/sage/libs/flint/fmpz_poly.pyx index 8811ccf3a51..d3893aa8a39 100644 --- a/src/sage/libs/flint/fmpz_poly.pyx +++ b/src/sage/libs/flint/fmpz_poly.pyx @@ -27,7 +27,7 @@ from sage.arith.long cimport pyobject_to_long from sage.cpython.string cimport char_to_str, str_to_bytes from sage.structure.sage_object cimport SageObject from sage.rings.integer cimport Integer -from sage.libs.flint.fmpz_poly cimport * +from sage.libs.flint.fmpz cimport * cdef class Fmpz_poly(SageObject): @@ -455,3 +455,44 @@ cdef class Fmpz_poly(SageObject): """ from sage.rings.integer_ring import ZZ return ZZ[var](self.list()) + + +# Functions removed from flint but still needed in Sage. Code adapted from +# earlier versions of flint. + +cdef void fmpz_poly_scalar_mul_mpz(fmpz_poly_t rop, const fmpz_poly_t op, const mpz_t c): + cdef fmpz_t f; + fmpz_init_set_readonly(f, c); + fmpz_poly_scalar_mul_fmpz(rop, op, f); + fmpz_clear_readonly(f); + +cdef void fmpz_poly_scalar_divexact_mpz(fmpz_poly_t rop, const fmpz_poly_t op, const mpz_t c): + cdef fmpz_t f; + fmpz_init_set_readonly(f, c); + fmpz_poly_scalar_divexact_fmpz(rop, op, f); + fmpz_clear_readonly(f); + +cdef void fmpz_poly_scalar_fdiv_mpz(fmpz_poly_t rop, const fmpz_poly_t op, const mpz_t c): + cdef fmpz_t f; + fmpz_init_set_readonly(f, c); + fmpz_poly_scalar_divexact_fmpz(rop, op, f); + fmpz_clear_readonly(f); + +cdef void fmpz_poly_set_coeff_mpz(fmpz_poly_t poly, slong n, const mpz_t x): + cdef fmpz_t t; + fmpz_init_set_readonly(t, x); + fmpz_poly_set_coeff_fmpz(poly, n, t); + fmpz_clear_readonly(t); + +cdef void fmpz_poly_get_coeff_mpz(mpz_t x, const fmpz_poly_t poly, slong n): + cdef fmpz_t t; + fmpz_init(t); + fmpz_poly_get_coeff_fmpz(t, poly, n); + fmpz_get_mpz(x, t); + fmpz_clear(t); + +cdef void fmpz_poly_set_mpz(fmpz_poly_t poly, const mpz_t x): + fmpz_poly_fit_length(poly, 1); + fmpz_set_mpz(poly.coeffs, x); + _fmpz_poly_set_length(poly, 1); + _fmpz_poly_normalise(poly); diff --git a/src/sage/libs/flint/fmpz_poly_q.pxd b/src/sage/libs/flint/fmpz_poly_q.pxd index 846542dc0d8..63c13355bf6 100644 --- a/src/sage/libs/flint/fmpz_poly_q.pxd +++ b/src/sage/libs/flint/fmpz_poly_q.pxd @@ -49,11 +49,7 @@ cdef extern from "flint_wrap.h": #* Scalar multiplication and division ****************************************/ void fmpz_poly_q_scalar_mul_si(fmpz_poly_q_t rop, const fmpz_poly_q_t op, long x) - void fmpz_poly_q_scalar_mul_mpz(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const mpz_t x) - void fmpz_poly_q_scalar_mul_mpq(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const mpq_t x) void fmpz_poly_q_scalar_div_si(fmpz_poly_q_t rop, const fmpz_poly_q_t op, long x) - void fmpz_poly_q_scalar_div_mpz(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const mpz_t x) - void fmpz_poly_q_scalar_div_mpq(fmpz_poly_q_t rop, const fmpz_poly_q_t op, const mpq_t x) #* Multiplication and division ***********************************************/ void fmpz_poly_q_mul(fmpz_poly_q_t rop, @@ -67,9 +63,6 @@ cdef extern from "flint_wrap.h": #* Derivative ****************************************************************/ void fmpz_poly_q_derivative(fmpz_poly_q_t rop, const fmpz_poly_q_t op) - #* Evaluation ****************************************************************/ - int fmpz_poly_q_evaluate(mpq_t rop, const fmpz_poly_q_t f, const mpq_t a) - #* Input and output **********************************************************/ int fmpz_poly_q_set_str(fmpz_poly_q_t rop, const char *s) char * fmpz_poly_q_get_str(const fmpz_poly_q_t op) diff --git a/src/sage/libs/linbox/linbox_flint_interface.pyx b/src/sage/libs/linbox/linbox_flint_interface.pyx index 415cd473947..4f44c22f631 100644 --- a/src/sage/libs/linbox/linbox_flint_interface.pyx +++ b/src/sage/libs/linbox/linbox_flint_interface.pyx @@ -33,6 +33,7 @@ and C. Pernet. The functions available are: # https://www.gnu.org/licenses/ # **************************************************************************** +from sage.libs.gmp.types cimport mpz_t from sage.libs.flint.types cimport fmpz_t from sage.libs.flint.fmpz cimport fmpz_get_mpz, fmpz_set_mpz from sage.libs.flint.fmpz_mat cimport fmpz_mat_entry, fmpz_mat_nrows, fmpz_mat_ncols @@ -80,11 +81,13 @@ cdef void fmpz_poly_set_linbox(fmpz_poly_t p, PolynomialRing_integer.Element& q) (the .pxd file) in order to keep the header C-compatible """ cdef size_t i + cdef mpz_t tmp fmpz_poly_fit_length(p, q.size()) for i in range(q.size()): - fmpz_poly_set_coeff_mpz(p, i, q[i].get_mpz_const()) + tmp = q[i].get_mpz_const() + fmpz_poly_set_coeff_mpz(p, i, tmp) _fmpz_poly_set_length(p, q.size()) diff --git a/src/sage/matrix/matrix_complex_ball_dense.pyx b/src/sage/matrix/matrix_complex_ball_dense.pyx index ad57de71deb..dc275dd0204 100644 --- a/src/sage/matrix/matrix_complex_ball_dense.pyx +++ b/src/sage/matrix/matrix_complex_ball_dense.pyx @@ -1,4 +1,4 @@ -# distutils: libraries = ARB_LIBRARY +# distutils: libraries = flint r""" Arbitrary precision complex ball matrices using Arb diff --git a/src/sage/matrix/matrix_integer_sparse.pyx b/src/sage/matrix/matrix_integer_sparse.pyx index 49ed3403fca..6b5ac5d8f99 100644 --- a/src/sage/matrix/matrix_integer_sparse.pyx +++ b/src/sage/matrix/matrix_integer_sparse.pyx @@ -849,6 +849,7 @@ cdef class Matrix_integer_sparse(Matrix_sparse): sage: matrix(ZZ, 1, 1, sparse=True)._charpoly_linbox() x """ + cdef mpz_t tmp if self._nrows != self._ncols: raise ArithmeticError('only valid for square matrix') @@ -871,7 +872,8 @@ cdef class Matrix_integer_sparse(Matrix_sparse): cdef size_t i fmpz_poly_fit_length(g.__poly, p.size()) for i in range(p.size()): - fmpz_poly_set_coeff_mpz(g.__poly, i, p[0][i].get_mpz_const()) + tmp = p[0][i].get_mpz_const() + fmpz_poly_set_coeff_mpz(g.__poly, i, tmp) _fmpz_poly_set_length(g.__poly, p.size()) del M @@ -968,9 +970,11 @@ cdef class Matrix_integer_sparse(Matrix_sparse): sig_off() cdef size_t i + cdef mpz_t tmp fmpz_poly_fit_length(g.__poly, p.size()) for i in range(p.size()): - fmpz_poly_set_coeff_mpz(g.__poly, i, p[0][i].get_mpz_const()) + tmp = p[0][i].get_mpz_const() + fmpz_poly_set_coeff_mpz(g.__poly, i, tmp) _fmpz_poly_set_length(g.__poly, p.size()) del M diff --git a/src/sage/rings/polynomial/polynomial_rational_flint.pyx b/src/sage/rings/polynomial/polynomial_rational_flint.pyx index 8dbe789a410..789289a461b 100644 --- a/src/sage/rings/polynomial/polynomial_rational_flint.pyx +++ b/src/sage/rings/polynomial/polynomial_rational_flint.pyx @@ -222,7 +222,7 @@ cdef class Polynomial_rational_flint(Polynomial): cdef unsigned long n cdef Rational c cdef list L1 - cdef mpq_t * L2 + cdef fmpq_t q Polynomial.__init__(self, parent, is_gen=is_gen) @@ -253,14 +253,11 @@ cdef class Polynomial_rational_flint(Polynomial): L1 = [e if isinstance(e, Rational) else Rational(e) for e in x] n = len(x) sig_on() - L2 = check_allocarray(n, sizeof(mpq_t)) + fmpq_poly_fit_length(self.__poly, n) for deg from 0 <= deg < n: - mpq_init(L2[deg]) - mpq_set(L2[deg], ( L1[deg]).value) - fmpq_poly_set_array_mpq(self.__poly, L2, n) - for deg from 0 <= deg < n: - mpq_clear(L2[deg]) - sig_free(L2) + fmpq_init_set_readonly(q, ( L1[deg]).value) + fmpq_poly_set_coeff_fmpq(self.__poly, deg, q) + fmpq_clear_readonly(q) sig_off() # deg = 0 @@ -435,6 +432,7 @@ cdef class Polynomial_rational_flint(Polynomial): utmost care. """ cdef bint do_sig = _do_sig(self.__poly) + cdef fmpz_t tmpfz if isinstance(value, int): if do_sig: sig_str("FLINT exception") @@ -442,7 +440,9 @@ cdef class Polynomial_rational_flint(Polynomial): if do_sig: sig_off() elif isinstance(value, Integer): if do_sig: sig_str("FLINT exception") - fmpq_poly_set_coeff_mpz(self.__poly, n, ( value).value) + fmpz_init_set_readonly(tmpfz, ( value).value) + fmpq_poly_set_coeff_fmpz(self.__poly, n, tmpfz) + fmpz_clear_readonly(tmpfz) if do_sig: sig_off() elif isinstance(value, Rational): if do_sig: sig_str("FLINT exception") @@ -492,7 +492,7 @@ cdef class Polynomial_rational_flint(Polynomial): cdef Polynomial_rational_flint f cdef Rational r cdef fmpz_t tmpfz - cdef fmpq_t tmpfq + cdef fmpq_t tmpfq, tmpfq1 cdef RealBall arb_a, arb_z cdef ComplexBall acb_a, acb_z @@ -508,13 +508,23 @@ cdef class Polynomial_rational_flint(Polynomial): elif isinstance(a, Rational): r = Rational.__new__(Rational) sig_str("FLINT exception") - fmpq_poly_evaluate_mpq(r.value, self.__poly, ( a).value) + fmpq_init_set_readonly(tmpfq, ( a).value) + fmpq_init(tmpfq1) + fmpq_poly_evaluate_fmpq(tmpfq1, self.__poly, tmpfq) + fmpq_get_mpq(r.value, tmpfq1) + fmpq_clear(tmpfq1) + fmpq_clear_readonly(tmpfq) sig_off() return r elif isinstance(a, Integer): r = Rational.__new__(Rational) sig_str("FLINT exception") - fmpq_poly_evaluate_mpz(r.value, self.__poly, ( a).value) + fmpz_init_set_readonly(tmpfz, ( a).value) + fmpq_init(tmpfq) + fmpq_poly_evaluate_fmpz(tmpfq, self.__poly, tmpfz) + fmpq_get_mpq(r.value, tmpfq) + fmpq_clear(tmpfq1) + fmpz_clear_readonly(tmpfz) sig_off() return r elif isinstance(a, int): @@ -1321,6 +1331,7 @@ cdef class Polynomial_rational_flint(Polynomial): """ cdef Polynomial_rational_flint res cdef bint do_sig + cdef fmpq_t tmpfq if right == 0: raise ZeroDivisionError("division by zero polynomial") @@ -1331,8 +1342,9 @@ cdef class Polynomial_rational_flint(Polynomial): do_sig = _do_sig(self.__poly) if do_sig: sig_str("FLINT exception") - fmpq_poly_scalar_div_mpq(res.__poly, self.__poly, - ( QQ(right)).value) + fmpq_init_set_readonly(tmpfq, ( QQ(right)).value) + fmpq_poly_scalar_div_fmpq(res.__poly, self.__poly, tmpfq) + fmpq_clear_readonly(tmpfq) if do_sig: sig_off() return res diff --git a/src/sage/symbolic/ginac/inifcns_orthopoly.cpp b/src/sage/symbolic/ginac/inifcns_orthopoly.cpp index a591cb4cd7c..a90f2050c59 100644 --- a/src/sage/symbolic/ginac/inifcns_orthopoly.cpp +++ b/src/sage/symbolic/ginac/inifcns_orthopoly.cpp @@ -20,6 +20,7 @@ #include "utils.h" #include "gmp.h" +#include "flint/fmpz_poly.h" #include "flint/fmpq_poly.h" #include "flint/fmpq.h" @@ -63,7 +64,7 @@ static ex chebyt_eval(const ex& n_, const ex& x) for (int i = 0; i