diff --git a/src/sage/libs/flint/flint.pxd b/src/sage/libs/flint/flint.pxd index 434e4d624ad..cd64c98a2da 100644 --- a/src/sage/libs/flint/flint.pxd +++ b/src/sage/libs/flint/flint.pxd @@ -19,8 +19,8 @@ cdef extern from "flint_wrap.h": void * flint_realloc(void * ptr, size_t size) noexcept void * flint_calloc(size_t num, size_t size) noexcept void flint_free(void * ptr) noexcept - flint_rand_s * flint_rand_alloc() noexcept - void flint_rand_free(flint_rand_s * state) noexcept + flint_rand_struct * flint_rand_alloc() noexcept + void flint_rand_free(flint_rand_struct * state) noexcept void flint_randinit(flint_rand_t state) noexcept void flint_randclear(flint_rand_t state) noexcept void flint_set_num_threads(int num_threads) noexcept diff --git a/src/sage/libs/flint/flint_wrap.h b/src/sage/libs/flint/flint_wrap.h index 2cd39eb1441..c8199366e21 100644 --- a/src/sage/libs/flint/flint_wrap.h +++ b/src/sage/libs/flint/flint_wrap.h @@ -30,6 +30,10 @@ #pragma push_macro("I") #define I Iv +/* flint 3.2 will rename flint_rand_s to flint_rand_struct + * the following line can be removed when flint 3.1 is gone */ +#define flint_rand_s flint_rand_struct + #include /* If flint was already previously included via another header (e.g. diff --git a/src/sage/libs/flint/types.pxd b/src/sage/libs/flint/types.pxd index b9f3e55a2ac..c087c0abb57 100644 --- a/src/sage/libs/flint/types.pxd +++ b/src/sage/libs/flint/types.pxd @@ -266,9 +266,9 @@ cdef extern from "flint_wrap.h": # flint/flint.h - ctypedef struct flint_rand_s: + ctypedef struct flint_rand_struct: pass - ctypedef flint_rand_s flint_rand_t[1] + ctypedef flint_rand_struct flint_rand_t[1] cdef long FLINT_BITS cdef long FLINT_D_BITS diff --git a/src/sage/rings/complex_arb.pyx b/src/sage/rings/complex_arb.pyx index c6e4a64e611..b6f3ed191e8 100644 --- a/src/sage/rings/complex_arb.pyx +++ b/src/sage/rings/complex_arb.pyx @@ -788,27 +788,28 @@ class ComplexBallField(UniqueRepresentation, sage.rings.abc.ComplexBallField): ... ValueError: polynomial with interval coefficients, use multiplicities=False - sage: (x^4 - 1/3).roots(multiplicities=False) # indirect doctest - [[-0.759835685651593 +/- ...e-16] + [+/- ...e-16]*I, - [0.759835685651593 +/- ...e-16] + [+/- ...e-16]*I, - [+/- ...e-16] + [0.759835685651593 +/- ...e-16]*I, - [+/- ...e-16] + [-0.759835685651593 +/- ...e-16]*I] + sage: set((x^4 - 1/3).roots(multiplicities=False)) # indirect doctest + {[+/- 1.27e-16] + [-0.759835685651593 +/- 5.90e-16]*I, + [+/- 1.27e-16] + [0.759835685651593 +/- 5.90e-16]*I, + [-0.759835685651593 +/- 5.90e-16] + [+/- 1.27e-16]*I, + [0.759835685651593 +/- 5.90e-16] + [+/- 1.27e-16]*I} - sage: (x^4 - 1/3).roots(RBF, multiplicities=False) - [[-0.759835685651593 +/- ...e-16], [0.759835685651593 +/- ...e-16]] + sage: set((x^4 - 1/3).roots(RBF, multiplicities=False)) + {[-0.759835685651593 +/- 5.90e-16], [0.759835685651593 +/- 5.90e-16]} - sage: (x^4 - 3).roots(RealBallField(100), multiplicities=False) - [[-1.316074012952492460819218901797 +/- ...e-34], - [1.316074012952492460819218901797 +/- ...e-34]] + sage: set((x^4 - 3).roots(RealBallField(100), multiplicities=False)) + {[-1.316074012952492460819218901797 +/- 9.7e-34], + [1.316074012952492460819218901797 +/- 9.7e-34]} - sage: (x^4 - 3).roots(ComplexIntervalField(100), multiplicities=False) + sage: sorted((x^4 - 3).roots(ComplexIntervalField(100), + ....: multiplicities=False), key=repr) [-1.31607401295249246081921890180? + 0.?e-37*I, - 1.31607401295249246081921890180? + 0.?e-37*I, 0.?e-37 + 1.31607401295249246081921890180?*I, - 0.?e-37 - 1.31607401295249246081921890180?*I] + 0.?e-37 - 1.31607401295249246081921890180?*I, + 1.31607401295249246081921890180? + 0.?e-37*I] - sage: (x^2 - i/3).roots(ComplexBallField(2), multiplicities=False) - [[+/- 0.409] + [+/- 0.409]*I, [+/- 0.409] + [+/- 0.409]*I] + sage: set((x^2 - i/3).roots(ComplexBallField(2), multiplicities=False)) + {[+/- 0.409] + [+/- 0.409]*I, [+/- 0.409] + [+/- 0.409]*I} sage: ((x - 1)^2).roots(multiplicities=False) Traceback (most recent call last): @@ -818,8 +819,8 @@ class ComplexBallField(UniqueRepresentation, sage.rings.abc.ComplexBallField): sage: ((x - 1)^2).roots(multiplicities=False, proof=False) doctest:... UserWarning: roots may have been lost... - [[1.00000000000 +/- ...e-12] + [+/- ...e-11]*I, - [1.0000000000 +/- ...e-12] + [+/- ...e-12]*I] + [[1.000000000... +/- ...] + [+/- ...]*I, + [1.000000000... +/- ...] + [+/- ...]*I] sage: pol = x^7 - 2*(1000*x - 1)^2 # Mignotte polynomial sage: pol.roots(multiplicities=False) @@ -844,7 +845,7 @@ class ComplexBallField(UniqueRepresentation, sage.rings.abc.ComplexBallField): sage: ((x - 1)^2 + 2^(-70)*i/3).roots(RBF, multiplicities=False) Traceback (most recent call last): ... - ValueError: unable to determine which roots are real + ValueError: ... TESTS:: @@ -4261,14 +4262,14 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).Ei() - [1.76462598556385 +/- ...e-15] + [2.38776985151052 +/- ...e-15]*I + sage: CBF(1, 1).Ei() # abs tol 6e-15 + [1.76462598556385 +/- 6.03e-15] + [2.38776985151052 +/- 4.23e-15]*I sage: CBF(0).Ei() - nan + nan... TESTS: - sage: CBF(Ei(I)) # abs tol 1e-16 # needs sage.symbolic + sage: CBF(Ei(I)) # abs tol 2e-15 # needs sage.symbolic [0.337403922900968 +/- 3.76e-16] + [2.51687939716208 +/- 2.01e-15]*I """ cdef ComplexBall result = self._new() @@ -4283,14 +4284,14 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).Si() - [1.10422265823558 +/- ...e-15] + [0.88245380500792 +/- ...e-15]*I + sage: CBF(1, 1).Si() # abs tol 3e-15 + [1.10422265823558 +/- 2.48e-15] + [0.88245380500792 +/- 3.36e-15]*I sage: CBF(0).Si() 0 TESTS: - sage: CBF(Si(I)) # needs sage.symbolic + sage: CBF(Si(I)) # abs tol 3e-15 # needs sage.symbolic [1.05725087537573 +/- 2.77e-15]*I """ cdef ComplexBall result = self._new() @@ -4307,14 +4308,14 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).Ci() - [0.882172180555936 +/- ...e-16] + [0.287249133519956 +/- ...e-16]*I + sage: CBF(1, 1).Ci() # abs tol 5e-16 + [0.882172180555936 +/- 5.89e-16] + [0.287249133519956 +/- 3.37e-16]*I sage: CBF(0).Ci() nan + nan*I TESTS: - sage: CBF(Ci(I)) # abs tol 1e-17 # needs sage.symbolic + sage: CBF(Ci(I)) # abs tol 5e-16 # needs sage.symbolic [0.837866940980208 +/- 4.72e-16] + [1.570796326794897 +/- 5.54e-16]*I """ cdef ComplexBall result = self._new() @@ -4331,8 +4332,8 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).Shi() - [0.88245380500792 +/- ...e-15] + [1.10422265823558 +/- ...e-15]*I + sage: CBF(1, 1).Shi() # abs tol 3e-15 + [0.88245380500792 +/- 3.36e-15] + [1.10422265823558 +/- 2.48e-15]*I sage: CBF(0).Shi() 0 @@ -4355,14 +4356,14 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).Chi() - [0.882172180555936 +/- ...e-16] + [1.28354719327494 +/- ...e-15]*I + sage: CBF(1, 1).Chi() # abs tol 1e-15 + [0.882172180555936 +/- 5.89e-16] + [1.28354719327494 +/- 1.01e-15]*I sage: CBF(0).Chi() nan + nan*I TESTS: - sage: CBF(Chi(I)) # abs tol 1e-16 # needs sage.symbolic + sage: CBF(Chi(I)) # abs tol 5e-16 # needs sage.symbolic [0.337403922900968 +/- 3.25e-16] + [1.570796326794897 +/- 5.54e-16]*I """ cdef ComplexBall result = self._new() @@ -4381,8 +4382,8 @@ cdef class ComplexBall(RingElement): EXAMPLES:: - sage: CBF(1, 1).li() - [0.61391166922120 +/- ...e-15] + [2.05958421419258 +/- ...e-15]*I + sage: CBF(1, 1).li() # abs tol 6e-15 + [0.61391166922120 +/- 6.23e-15] + [2.05958421419258 +/- 5.59e-15]*I sage: CBF(0).li() 0 sage: CBF(0).li(offset=True) diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 9181fb9ae3e..67a61701ddd 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -8451,19 +8451,19 @@ cdef class Polynomial(CommutativePolynomial): sage: # needs sage.libs.flint sage: Pol. = CBF[] - sage: (x^2 + 2).roots(multiplicities=False) - [[+/- ...e-19] + [-1.414213562373095 +/- ...e-17]*I, - [+/- ...e-19] + [1.414213562373095 +/- ...e-17]*I] + sage: set((x^2 + 2).roots(multiplicities=False)) + {[+/- ...e-19] + [-1.414213562373095 +/- ...e-17]*I, + [+/- ...e-19] + [1.414213562373095 +/- ...e-17]*I} sage: (x^3 - 1/2).roots(RBF, multiplicities=False) [[0.7937005259840997 +/- ...e-17]] sage: ((x - 1)^2).roots(multiplicities=False, proof=False) doctest:... UserWarning: roots may have been lost... - [[1.00000000000 +/- ...e-12] + [+/- ...e-11]*I, - [1.0000000000 +/- ...e-12] + [+/- ...e-12]*I] + [[1.000000000... +/- ...] + [+/- ...]*I, + [1.000000000... +/- ...] + [+/- ...]*I] sage: ((x - 1)^2).roots(multiplicities=False, proof=False, warn=False) - [[1.00000000000 +/- ...e-12] + [+/- ...e-11]*I, - [1.0000000000 +/- ...e-12] + [+/- ...e-12]*I] + [[1.000000000... +/- ...] + [+/- ...]*I, + [1.000000000... +/- ...] + [+/- ...]*I] Note that coefficients in a number field with defining polynomial `x^2 + 1` are considered to be Gaussian rationals (with the diff --git a/src/sage/rings/real_arb.pyx b/src/sage/rings/real_arb.pyx index 280e08ea1d7..7d7469658fd 100644 --- a/src/sage/rings/real_arb.pyx +++ b/src/sage/rings/real_arb.pyx @@ -3531,12 +3531,12 @@ cdef class RealBall(RingElement): EXAMPLES:: - sage: RBF(1).Ei() # abs tol 5e-16 + sage: RBF(1).Ei() # abs tol 5e-15 [1.89511781635594 +/- 4.94e-15] TESTS:: - sage: RBF(Ei(1)) # abs tol 5e-16 # needs sage.symbolic + sage: RBF(Ei(1)) # abs tol 5e-15 # needs sage.symbolic [1.89511781635594 +/- 4.94e-15] """ cdef RealBall res = self._new() @@ -3595,12 +3595,12 @@ cdef class RealBall(RingElement): EXAMPLES:: - sage: RBF(1).Shi() + sage: RBF(1).Shi() # abs tol 5e-15 [1.05725087537573 +/- 2.77e-15] TESTS:: - sage: RBF(Shi(1)) # needs sage.symbolic + sage: RBF(Shi(1)) # abs tol 5e-15 # needs sage.symbolic [1.05725087537573 +/- 2.77e-15] """ cdef RealBall res = self._new() @@ -3617,12 +3617,12 @@ cdef class RealBall(RingElement): EXAMPLES:: - sage: RBF(1).Chi() # abs tol 1e-17 + sage: RBF(1).Chi() # abs tol 5e-16 [0.837866940980208 +/- 4.72e-16] TESTS:: - sage: RBF(Chi(1)) # abs tol 1e-17 # needs sage.symbolic + sage: RBF(Chi(1)) # abs tol 5e-16 # needs sage.symbolic [0.837866940980208 +/- 4.72e-16] """ cdef RealBall res = self._new() @@ -3639,14 +3639,14 @@ cdef class RealBall(RingElement): EXAMPLES:: - sage: RBF(3).li() # abs tol 1e-15 + sage: RBF(3).li() # abs tol 5e-15 [2.16358859466719 +/- 4.72e-15] TESTS:: sage: RBF(li(0)) # needs sage.symbolic 0 - sage: RBF(Li(0)) # needs sage.symbolic + sage: RBF(Li(0)) # abs tol 5e-15 # needs sage.symbolic [-1.04516378011749 +/- 4.23e-15] """ cdef RealBall res = self._new() @@ -3663,7 +3663,7 @@ cdef class RealBall(RingElement): EXAMPLES:: - sage: RBF(3).Li() # abs tol 1e-15 + sage: RBF(3).Li() # abs tol 5e-15 [1.11842481454970 +/- 7.61e-15] """ cdef RealBall res = self._new() diff --git a/src/sage/symbolic/ginac/numeric.cpp b/src/sage/symbolic/ginac/numeric.cpp index 02b07296193..463d1f12f20 100644 --- a/src/sage/symbolic/ginac/numeric.cpp +++ b/src/sage/symbolic/ginac/numeric.cpp @@ -51,6 +51,7 @@ #define PY_SSIZE_T_CLEAN #include +#include "gmp.h" #include "flint/fmpz.h" #include "flint/fmpz_factor.h" diff --git a/src/sage_setup/autogen/flint/templates/flint_wrap.h.template b/src/sage_setup/autogen/flint/templates/flint_wrap.h.template index ec58aa2f602..53b42e683ff 100644 --- a/src/sage_setup/autogen/flint/templates/flint_wrap.h.template +++ b/src/sage_setup/autogen/flint/templates/flint_wrap.h.template @@ -30,6 +30,10 @@ #pragma push_macro("I") #define I Iv +/* flint 3.2 will rename flint_rand_s to flint_rand_struct + * the following line can be removed when flint 3.1 is gone */ +#define flint_rand_s flint_rand_struct + #include /* If flint was already previously included via another header (e.g. diff --git a/src/sage_setup/autogen/flint/templates/types.pxd.template b/src/sage_setup/autogen/flint/templates/types.pxd.template index 4b9d982c7fa..115fb4dc1ff 100644 --- a/src/sage_setup/autogen/flint/templates/types.pxd.template +++ b/src/sage_setup/autogen/flint/templates/types.pxd.template @@ -269,9 +269,9 @@ cdef extern from "flint_wrap.h": # flint/flint.h - ctypedef struct flint_rand_s: + ctypedef struct flint_rand_struct: pass - ctypedef flint_rand_s flint_rand_t[1] + ctypedef flint_rand_struct flint_rand_t[1] ctypedef enum flint_err_t: # flint_autogen.py does not support parsing .. enum:: yet FLINT_ERROR