From a9d1700a48b0122d472285777b3fae914ddfea6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Thu, 30 Jan 2025 18:06:17 -0300 Subject: [PATCH] sagemath: update to 10.6. --- .../sagemath/patches/38749-pari_2.17.patch | 2297 ----------------- .../38940-fix_flaky_simplicial_set_test.patch | 73 - .../patches/38962-eclib_20241112.patch | 70 - .../patches/39145-python_3.13_re.sub.patch | 39 - .../patches/39147-python_3.13_doctest.patch | 58 - .../patches/39178-giac_1.9.0.998.patch | 20 - .../patches/39182-python_3.13_iter.patch | 28 - ...9184-python_3.13_produce_latex_macro.patch | 54 - .../39185-python_3.13_find_replacements.patch | 22 - .../39187-python_3.13_tests_output.patch | 142 - .../39201-python_3.13_fix_spyx_tmp.patch | 36 - .../sagemath/patches/39261-scipy_1.15.patch | 36 - .../patches/39368-singular_4.4.1.patch | 715 ----- srcpkgs/sagemath/patches/get_patches | 27 +- srcpkgs/sagemath/patches/zz-32bit-test.patch | 30 - .../patches/zz-fix-doctest-order.patch | 17 - srcpkgs/sagemath/template | 10 +- 17 files changed, 11 insertions(+), 3663 deletions(-) delete mode 100644 srcpkgs/sagemath/patches/38749-pari_2.17.patch delete mode 100644 srcpkgs/sagemath/patches/38940-fix_flaky_simplicial_set_test.patch delete mode 100644 srcpkgs/sagemath/patches/38962-eclib_20241112.patch delete mode 100644 srcpkgs/sagemath/patches/39145-python_3.13_re.sub.patch delete mode 100644 srcpkgs/sagemath/patches/39147-python_3.13_doctest.patch delete mode 100644 srcpkgs/sagemath/patches/39178-giac_1.9.0.998.patch delete mode 100644 srcpkgs/sagemath/patches/39182-python_3.13_iter.patch delete mode 100644 srcpkgs/sagemath/patches/39184-python_3.13_produce_latex_macro.patch delete mode 100644 srcpkgs/sagemath/patches/39185-python_3.13_find_replacements.patch delete mode 100644 srcpkgs/sagemath/patches/39187-python_3.13_tests_output.patch delete mode 100644 srcpkgs/sagemath/patches/39201-python_3.13_fix_spyx_tmp.patch delete mode 100644 srcpkgs/sagemath/patches/39261-scipy_1.15.patch delete mode 100644 srcpkgs/sagemath/patches/39368-singular_4.4.1.patch delete mode 100644 srcpkgs/sagemath/patches/zz-32bit-test.patch delete mode 100644 srcpkgs/sagemath/patches/zz-fix-doctest-order.patch diff --git a/srcpkgs/sagemath/patches/38749-pari_2.17.patch b/srcpkgs/sagemath/patches/38749-pari_2.17.patch deleted file mode 100644 index 9229b8f9a60..00000000000 --- a/srcpkgs/sagemath/patches/38749-pari_2.17.patch +++ /dev/null @@ -1,2297 +0,0 @@ -diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py -index 637ed9192bd..12f1760b67f 100644 ---- a/src/sage/arith/misc.py -+++ b/src/sage/arith/misc.py -@@ -2691,9 +2691,10 @@ def factor(n, proof=None, int_=False, algorithm='pari', verbose=0, **kwds): - - Any object which has a factor method can be factored like this:: - -- sage: K. = QuadraticField(-1) # needs sage.rings.number_field -- sage: factor(122 - 454*i) # needs sage.rings.number_field -- (-i) * (-i - 2)^3 * (i + 1)^3 * (-2*i + 3) * (i + 4) -+ sage: # needs sage.rings.number_field -+ sage: K. = QuadraticField(-1) -+ sage: f = factor(122 - 454*i); f -+ (-1) * (i - 1)^3 * (2*i - 1)^3 * (3*i + 2) * (i + 4) - - To access the data in a factorization:: - -@@ -2776,7 +2777,7 @@ def radical(n, *args, **kwds): - ArithmeticError: radical of 0 is not defined - sage: K. = QuadraticField(-1) # needs sage.rings.number_field - sage: radical(K(2)) # needs sage.rings.number_field -- i + 1 -+ i - 1 - - Tests with numpy and gmpy2 numbers:: - -@@ -3031,7 +3032,7 @@ def is_squarefree(n): - sage: is_squarefree(O(2)) - False - sage: O(2).factor() -- (-I) * (I + 1)^2 -+ (I) * (I - 1)^2 - - This method fails on domains which are not Unique Factorization Domains:: - -diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py -index 64881aba812..cae93ef8bcd 100644 ---- a/src/sage/calculus/calculus.py -+++ b/src/sage/calculus/calculus.py -@@ -794,8 +794,7 @@ def nintegral(ex, x, a, b, - to high precision:: - - sage: gp.eval('intnum(x=17,42,exp(-x^2)*log(x))') -- '2.565728500561051474934096410 E-127' # 32-bit -- '2.5657285005610514829176211363206621657 E-127' # 64-bit -+ '2.5657285005610514829176211363206621657 E-127' - sage: old_prec = gp.set_real_precision(50) - sage: gp.eval('intnum(x=17,42,exp(-x^2)*log(x))') - '2.5657285005610514829173563961304957417746108003917 E-127' -diff --git a/src/sage/categories/quotient_fields.py b/src/sage/categories/quotient_fields.py -index 76f0570a819..0e4d13ef889 100644 ---- a/src/sage/categories/quotient_fields.py -+++ b/src/sage/categories/quotient_fields.py -@@ -100,7 +100,7 @@ def gcd(self, other): - sage: R = ZZ.extension(x^2 + 1, names='i') - sage: i = R.1 - sage: gcd(5, 3 + 4*i) -- -i - 2 -+ 2*i - 1 - sage: P. = R[] - sage: gcd(t, i) - Traceback (most recent call last): -diff --git a/src/sage/doctest/sources.py b/src/sage/doctest/sources.py -index 7589f62922b..9807c1d5e12 100644 ---- a/src/sage/doctest/sources.py -+++ b/src/sage/doctest/sources.py -@@ -766,11 +766,11 @@ def create_doctests(self, namespace): - - sage: import sys - sage: bitness = '64' if sys.maxsize > (1 << 32) else '32' -- sage: gp.get_precision() == 38 # needs sage.libs.pari -+ sage: sys.maxsize == 2^63 - 1 - False # 32-bit - True # 64-bit - sage: ex = doctests[20].examples[11] -- sage: ((bitness == '64' and ex.want == 'True \n') # needs sage.libs.pari -+ sage: ((bitness == '64' and ex.want == 'True \n') - ....: or (bitness == '32' and ex.want == 'False \n')) - True - -diff --git a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py -index 9734b3767ac..4de0e8f6158 100644 ---- a/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py -+++ b/src/sage/dynamics/arithmetic_dynamics/berkovich_ds.py -@@ -690,10 +690,10 @@ def conjugate(self, M, adjugate=False, new_ideal=None): - - sage: # needs sage.rings.number_field - sage: ideal = A.ideal(5).factor()[1][0]; ideal -- Fractional ideal (2*a + 1) -+ Fractional ideal (-2*a - 1) - sage: g = f.conjugate(conj, new_ideal=ideal) - sage: g.domain().ideal() -- Fractional ideal (2*a + 1) -+ Fractional ideal (-2*a - 1) - """ - if self.domain().is_padic_base(): - return DynamicalSystem_Berkovich(self._system.conjugate(M, adjugate=adjugate)) -diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py -index 591693e5af8..fa9d808fd33 100644 ---- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py -+++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py -@@ -1791,7 +1791,7 @@ def primes_of_bad_reduction(self, check=True): - sage: P. = ProjectiveSpace(K,1) - sage: f = DynamicalSystem_projective([1/3*x^2+1/a*y^2, y^2]) - sage: f.primes_of_bad_reduction() # needs sage.rings.function_field -- [Fractional ideal (a), Fractional ideal (3)] -+ [Fractional ideal (-a), Fractional ideal (3)] - - This is an example where ``check=False`` returns extra primes:: - -diff --git a/src/sage/interfaces/gp.py b/src/sage/interfaces/gp.py -index b98c050d889..712a37a6dc6 100644 ---- a/src/sage/interfaces/gp.py -+++ b/src/sage/interfaces/gp.py -@@ -48,11 +48,9 @@ - :: - - sage: gp("a = intnum(x=0,6,sin(x))") -- 0.03982971334963397945434770208 # 32-bit -- 0.039829713349633979454347702077075594548 # 64-bit -+ 0.039829713349633979454347702077075594548 - sage: gp("a") -- 0.03982971334963397945434770208 # 32-bit -- 0.039829713349633979454347702077075594548 # 64-bit -+ 0.039829713349633979454347702077075594548 - sage: gp.kill("a") - sage: gp("a") - a -@@ -375,8 +373,7 @@ def get_precision(self): - EXAMPLES:: - - sage: gp.get_precision() -- 28 # 32-bit -- 38 # 64-bit -+ 38 - """ - return self.get_default('realprecision') - -@@ -396,15 +393,13 @@ def set_precision(self, prec): - EXAMPLES:: - - sage: old_prec = gp.set_precision(53); old_prec -- 28 # 32-bit -- 38 # 64-bit -+ 38 - sage: gp.get_precision() - 57 - sage: gp.set_precision(old_prec) - 57 - sage: gp.get_precision() -- 28 # 32-bit -- 38 # 64-bit -+ 38 - """ - return self.set_default('realprecision', prec) - -@@ -520,8 +515,7 @@ def set_default(self, var, value): - sage: gp.set_default('realprecision', old_prec) - 115 - sage: gp.get_default('realprecision') -- 28 # 32-bit -- 38 # 64-bit -+ 38 - """ - old = self.get_default(var) - self._eval_line('default(%s,%s)' % (var, value)) -@@ -547,8 +541,7 @@ def get_default(self, var): - sage: gp.get_default('seriesprecision') - 16 - sage: gp.get_default('realprecision') -- 28 # 32-bit -- 38 # 64-bit -+ 38 - """ - return eval(self._eval_line('default(%s)' % var)) - -@@ -773,8 +766,7 @@ def _exponent_symbol(self): - :: - - sage: repr(gp(10.^80)).replace(gp._exponent_symbol(), 'e') -- '1.0000000000000000000000000000000000000e80' # 64-bit -- '1.000000000000000000000000000e80' # 32-bit -+ '1.0000000000000000000000000000000000000e80' - """ - return ' E' - -@@ -800,18 +792,15 @@ def new_with_bits_prec(self, s, precision=0): - - sage: # needs sage.symbolic - sage: pi_def = gp(pi); pi_def -- 3.141592653589793238462643383 # 32-bit -- 3.1415926535897932384626433832795028842 # 64-bit -+ 3.1415926535897932384626433832795028842 - sage: pi_def.precision() -- 28 # 32-bit -- 38 # 64-bit -+ 38 - sage: pi_150 = gp.new_with_bits_prec(pi, 150) - sage: new_prec = pi_150.precision(); new_prec - 48 # 32-bit - 57 # 64-bit - sage: old_prec = gp.set_precision(new_prec); old_prec -- 28 # 32-bit -- 38 # 64-bit -+ 38 - sage: pi_150 - 3.14159265358979323846264338327950288419716939938 # 32-bit - 3.14159265358979323846264338327950288419716939937510582098 # 64-bit -@@ -819,8 +808,7 @@ def new_with_bits_prec(self, s, precision=0): - 48 # 32-bit - 57 # 64-bit - sage: gp.get_precision() -- 28 # 32-bit -- 38 # 64-bit -+ 38 - """ - if precision: - old_prec = self.get_real_precision() -@@ -856,11 +844,9 @@ class GpElement(ExpectElement, sage.interfaces.abc.GpElement): - sage: loads(dumps(x)) == x - False - sage: x -- 1.047197551196597746154214461 # 32-bit -- 1.0471975511965977461542144610931676281 # 64-bit -+ 1.0471975511965977461542144610931676281 - sage: loads(dumps(x)) -- 1.047197551196597746154214461 # 32-bit -- 1.0471975511965977461542144610931676281 # 64-bit -+ 1.0471975511965977461542144610931676281 - - The two elliptic curves look the same, but internally the floating - point numbers are slightly different. -diff --git a/src/sage/interfaces/interface.py b/src/sage/interfaces/interface.py -index bd1095e8c70..2656b56e7f6 100644 ---- a/src/sage/interfaces/interface.py -+++ b/src/sage/interfaces/interface.py -@@ -1045,8 +1045,7 @@ def _sage_repr(self): - :: - - sage: gp(10.^80)._sage_repr() -- '1.0000000000000000000000000000000000000e80' # 64-bit -- '1.000000000000000000000000000e80' # 32-bit -+ '1.0000000000000000000000000000000000000e80' - sage: mathematica('10.^80')._sage_repr() # optional - mathematica - '1.e80' - -diff --git a/src/sage/interfaces/mathematica.py b/src/sage/interfaces/mathematica.py -index 488a1fb1af5..fb8eebd8118 100644 ---- a/src/sage/interfaces/mathematica.py -+++ b/src/sage/interfaces/mathematica.py -@@ -187,8 +187,7 @@ - Note that this agrees with what the PARI interpreter gp produces:: - - sage: gp('solve(x=1,2,exp(x)-3*x)') -- 1.512134551657842473896739678 # 32-bit -- 1.5121345516578424738967396780720387046 # 64-bit -+ 1.5121345516578424738967396780720387046 - - Next we find the minimum of a polynomial using the two different - ways of accessing Mathematica:: -diff --git a/src/sage/interfaces/mathics.py b/src/sage/interfaces/mathics.py -index 58a376b9c72..b2cbbb152bc 100644 ---- a/src/sage/interfaces/mathics.py -+++ b/src/sage/interfaces/mathics.py -@@ -196,8 +196,7 @@ - Note that this agrees with what the PARI interpreter gp produces:: - - sage: gp('solve(x=1,2,exp(x)-3*x)') -- 1.512134551657842473896739678 # 32-bit -- 1.5121345516578424738967396780720387046 # 64-bit -+ 1.5121345516578424738967396780720387046 - - Next we find the minimum of a polynomial using the two different - ways of accessing Mathics:: -diff --git a/src/sage/interfaces/maxima_abstract.py b/src/sage/interfaces/maxima_abstract.py -index b8df280857c..234e9373fca 100644 ---- a/src/sage/interfaces/maxima_abstract.py -+++ b/src/sage/interfaces/maxima_abstract.py -@@ -1489,8 +1489,7 @@ def nintegral(self, var='x', a=0, b=1, - high precision very quickly:: - - sage: gp('intnum(x=0,1,exp(-sqrt(x)))') -- 0.5284822353142307136179049194 # 32-bit -- 0.52848223531423071361790491935415653022 # 64-bit -+ 0.52848223531423071361790491935415653022 - sage: _ = gp.set_precision(80) - sage: gp('intnum(x=0,1,exp(-sqrt(x)))') - 0.52848223531423071361790491935415653021675547587292866196865279321015401702040079 -diff --git a/src/sage/libs/pari/__init__.py b/src/sage/libs/pari/__init__.py -index b5bc281db4d..2c4f8fa4b24 100644 ---- a/src/sage/libs/pari/__init__.py -+++ b/src/sage/libs/pari/__init__.py -@@ -165,12 +165,11 @@ - sage: e = pari([0,0,0,-82,0]).ellinit() - sage: eta1 = e.elleta(precision=50)[0] - sage: eta1.sage() -- 3.6054636014326520859158205642077267748 # 64-bit -- 3.605463601432652085915820564 # 32-bit -+ 3.6054636014326520859158205642077267748 - sage: eta1 = e.elleta(precision=150)[0] - sage: eta1.sage() - 3.605463601432652085915820564207726774810268996598024745444380641429820491740 # 64-bit -- 3.60546360143265208591582056420772677481026899659802474544 # 32-bit -+ 3.605463601432652085915820564207726774810268996598024745444380641430 # 32-bit - """ - - -diff --git a/src/sage/libs/pari/convert_sage.pyx b/src/sage/libs/pari/convert_sage.pyx -index e26238d7c38..48338e0279c 100644 ---- a/src/sage/libs/pari/convert_sage.pyx -+++ b/src/sage/libs/pari/convert_sage.pyx -@@ -573,17 +573,16 @@ cpdef list pari_prime_range(long c_start, long c_stop, bint py_ints=False): - sage: pari_prime_range(2, 19) - [2, 3, 5, 7, 11, 13, 17] - """ -- cdef long p = 0 -- cdef byteptr pari_prime_ptr = diffptr -+ cdef ulong i = 1 - res = [] -- while p < c_start: -- NEXT_PRIME_VIADIFF(p, pari_prime_ptr) -- while p < c_stop: -+ while pari_PRIMES[i] < c_start: -+ i+=1 -+ while pari_PRIMES[i] < c_stop: - if py_ints: -- res.append(p) -+ res.append(pari_PRIMES[i]) - else: - z = PY_NEW(Integer) -- mpz_set_ui(z.value, p) -+ mpz_set_ui(z.value, pari_PRIMES[i]) - res.append(z) -- NEXT_PRIME_VIADIFF(p, pari_prime_ptr) -+ i+=1 - return res -diff --git a/src/sage/libs/pari/convert_sage_real_mpfr.pyx b/src/sage/libs/pari/convert_sage_real_mpfr.pyx -index 98db6023dc9..5fd7fba1c47 100644 ---- a/src/sage/libs/pari/convert_sage_real_mpfr.pyx -+++ b/src/sage/libs/pari/convert_sage_real_mpfr.pyx -@@ -28,7 +28,7 @@ cpdef Gen new_gen_from_real_mpfr_element(RealNumber self): - - # We round up the precision to the nearest multiple of wordsize. - cdef int rounded_prec -- rounded_prec = (self.prec() + wordsize - 1) & ~(wordsize - 1) -+ rounded_prec = nbits2prec(self.prec()) - - # Yes, assigning to self works fine, even in Cython. - if rounded_prec > prec: -@@ -48,7 +48,7 @@ cpdef Gen new_gen_from_real_mpfr_element(RealNumber self): - exponent = mpfr_get_z_exp(mantissa, self.value) - - # Create a PARI REAL -- pari_float = cgetr(2 + rounded_prec / wordsize) -+ pari_float = cgetr(rounded_prec) - pari_float[1] = evalexpo(exponent + rounded_prec - 1) + evalsigne(mpfr_sgn(self.value)) - mpz_export(&pari_float[2], NULL, 1, wordsize // 8, 0, 0, mantissa) - mpz_clear(mantissa) -diff --git a/src/sage/libs/pari/tests.py b/src/sage/libs/pari/tests.py -index 1ed571cd4b9..38fee89202b 100644 ---- a/src/sage/libs/pari/tests.py -+++ b/src/sage/libs/pari/tests.py -@@ -94,8 +94,7 @@ - [4, 2] - - sage: int(pari(RealField(63)(2^63 - 1))) # needs sage.rings.real_mpfr -- 9223372036854775807 # 32-bit -- 9223372036854775807 # 64-bit -+ 9223372036854775807 - sage: int(pari(RealField(63)(2^63 + 2))) # needs sage.rings.real_mpfr - 9223372036854775810 - -@@ -1231,8 +1230,7 @@ - sage: e.ellheight([1,0]) - 0.476711659343740 - sage: e.ellheight([1,0], precision=128).sage() -- 0.47671165934373953737948605888465305945902294218 # 32-bit -- 0.476711659343739537379486058884653059459022942211150879336 # 64-bit -+ 0.476711659343739537379486058884653059459022942211150879336 - sage: e.ellheight([1, 0], [-1, 1]) - 0.418188984498861 - -@@ -1502,7 +1500,7 @@ - sage: pari(-104).quadclassunit() - [6, [6], [Qfb(5, -4, 6)], 1] - sage: pari(109).quadclassunit() -- [1, [], [], 5.56453508676047] -+ [1, [], [], 5.56453508676047, -1] - sage: pari(10001).quadclassunit() # random generators - [16, [16], [Qfb(10, 99, -5, 0.E-38)], 5.29834236561059] - sage: pari(10001).quadclassunit()[0] -@@ -1749,13 +1747,13 @@ - sage: y = QQ['yy'].0; _ = pari(y) # pari has variable ordering rules - sage: x = QQ['zz'].0; nf = pari(x^2 + 2).nfinit() - sage: nf.nfroots(y^2 + 2) -- [Mod(-zz, zz^2 + 2), Mod(zz, zz^2 + 2)] -+ [Mod(-zz, zz^2 + 2), Mod(zz, zz^2 + 2)]~ - sage: nf = pari(x^3 + 2).nfinit() - sage: nf.nfroots(y^3 + 2) -- [Mod(zz, zz^3 + 2)] -+ [Mod(zz, zz^3 + 2)]~ - sage: nf = pari(x^4 + 2).nfinit() - sage: nf.nfroots(y^4 + 2) -- [Mod(-zz, zz^4 + 2), Mod(zz, zz^4 + 2)] -+ [Mod(-zz, zz^4 + 2), Mod(zz, zz^4 + 2)]~ - - sage: nf = pari('x^2 + 1').nfinit() - sage: nf.nfrootsof1() -@@ -1806,12 +1804,11 @@ - sage: e = pari([0,0,0,-82,0]).ellinit() - sage: eta1 = e.elleta(precision=50)[0] - sage: eta1.sage() -- 3.6054636014326520859158205642077267748 # 64-bit -- 3.605463601432652085915820564 # 32-bit -+ 3.6054636014326520859158205642077267748 - sage: eta1 = e.elleta(precision=150)[0] - sage: eta1.sage() - 3.605463601432652085915820564207726774810268996598024745444380641429820491740 # 64-bit -- 3.60546360143265208591582056420772677481026899659802474544 # 32-bit -+ 3.605463601432652085915820564207726774810268996598024745444380641430 # 32-bit - sage: from cypari2 import Pari - sage: pari = Pari() - -diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx -index dec25a76e54..481fa70bebe 100644 ---- a/src/sage/matrix/matrix2.pyx -+++ b/src/sage/matrix/matrix2.pyx -@@ -16584,7 +16584,7 @@ cdef class Matrix(Matrix1): - ....: -2*a^2 + 4*a - 2, -2*a^2 + 1, 2*a, a^2 - 6, 3*a^2 - a ]) - sage: r,s,p = m._echelon_form_PID() - sage: s[2] -- (0, 0, -3*a^2 - 18*a + 34, -68*a^2 + 134*a - 53, -111*a^2 + 275*a - 90) -+ (0, 0, 3*a^2 + 18*a - 34, 68*a^2 - 134*a + 53, 111*a^2 - 275*a + 90) - sage: r * m == s and r.det() == 1 - True - -diff --git a/src/sage/modular/cusps_nf.py b/src/sage/modular/cusps_nf.py -index 4d120c075da..f3a3ff7e65b 100644 ---- a/src/sage/modular/cusps_nf.py -+++ b/src/sage/modular/cusps_nf.py -@@ -1184,9 +1184,9 @@ def NFCusps_ideal_reps_for_levelN(N, nlists=1): - sage: from sage.modular.cusps_nf import NFCusps_ideal_reps_for_levelN - sage: NFCusps_ideal_reps_for_levelN(N) - [(Fractional ideal (1), -- Fractional ideal (67, a + 17), -- Fractional ideal (127, a + 48), -- Fractional ideal (157, a - 19))] -+ Fractional ideal (67, -4/7*a^3 + 13/7*a^2 + 39/7*a - 43), -+ Fractional ideal (127, -4/7*a^3 + 13/7*a^2 + 39/7*a - 42), -+ Fractional ideal (157, -4/7*a^3 + 13/7*a^2 + 39/7*a + 48))] - sage: L = NFCusps_ideal_reps_for_levelN(N, 5) - sage: all(len(L[i]) == k.class_number() for i in range(len(L))) - True -@@ -1244,7 +1244,7 @@ def units_mod_ideal(I): - sage: I = k.ideal(5, a + 1) - sage: units_mod_ideal(I) - [1, -- -2*a^2 - 4*a + 1, -+ 2*a^2 + 4*a - 1, - ...] - - :: -diff --git a/src/sage/modular/dirichlet.py b/src/sage/modular/dirichlet.py -index c261a84e8de..8ca797b5f16 100644 ---- a/src/sage/modular/dirichlet.py -+++ b/src/sage/modular/dirichlet.py -@@ -2398,13 +2398,13 @@ class DirichletGroupFactory(UniqueFactory): - sage: parent(val) - Gaussian Integers generated by zeta4 in Cyclotomic Field of order 4 and degree 2 - sage: r4_29_0 = r4.residue_field(K(29).factor()[0][0]); r4_29_0(val) -- 17 -+ 12 - sage: r4_29_0(val) * GF(29)(3) -- 22 -+ 7 - sage: r4_29_0(G.gens()[2].values_on_gens()[2]) * 3 -- 22 -+ 7 - sage: parent(r4_29_0(G.gens()[2].values_on_gens()[2]) * 3) -- Residue field of Fractional ideal (-2*zeta4 + 5) -+ Residue field of Fractional ideal (-2*zeta4 - 5) - - :: - -diff --git a/src/sage/modular/modsym/p1list_nf.py b/src/sage/modular/modsym/p1list_nf.py -index 86d33071974..00bb0979ea4 100644 ---- a/src/sage/modular/modsym/p1list_nf.py -+++ b/src/sage/modular/modsym/p1list_nf.py -@@ -61,7 +61,7 @@ - - sage: alpha = MSymbol(N, a + 2, 3*a^2) - sage: alpha.lift_to_sl2_Ok() -- [-1, 4*a^2 - 13*a + 23, a + 2, 5*a^2 + 3*a - 3] -+ [-a - 1, 15*a^2 - 38*a + 86, a + 2, -a^2 + 9*a - 19] - sage: Ok = k.ring_of_integers() - sage: M = Matrix(Ok, 2, alpha.lift_to_sl2_Ok()) - sage: det(M) -@@ -977,11 +977,11 @@ def apply_J_epsilon(self, i, e1, e2=1): - sage: N = k.ideal(5, a + 1) - sage: P = P1NFList(N) - sage: u = k.unit_group().gens_values(); u -- [-1, -2*a^2 - 4*a + 1] -+ [-1, 2*a^2 + 4*a - 1] - sage: P.apply_J_epsilon(4, -1) - 2 - sage: P.apply_J_epsilon(4, u[0], u[1]) -- 5 -+ 1 - - :: - -@@ -1122,7 +1122,7 @@ def lift_to_sl2_Ok(N, c, d): - sage: M = Matrix(Ok, 2, lift_to_sl2_Ok(N, 0, 7)) - Traceback (most recent call last): - ... -- ValueError: <0> + <7> and the Fractional ideal (7, a) are not coprime. -+ ValueError: <0> + <7> and the Fractional ideal (7, -4/7*a^3 + 13/7*a^2 + 39/7*a - 19) are not coprime. - """ - k = N.number_field() - # check the input -diff --git a/src/sage/quadratic_forms/binary_qf.py b/src/sage/quadratic_forms/binary_qf.py -index 202da0652ff..083bdee237d 100644 ---- a/src/sage/quadratic_forms/binary_qf.py -+++ b/src/sage/quadratic_forms/binary_qf.py -@@ -1646,7 +1646,7 @@ def solve_integer(self, n, *, algorithm='general', _flag=2): - sage: Q = BinaryQF([1, 0, 12345]) - sage: n = 2^99 + 5273 - sage: Q.solve_integer(n) # needs sage.libs.pari -- (-67446480057659, 7139620553488) -+ (67446480057659, 7139620553488) - sage: Q.solve_integer(n, algorithm='cornacchia') # needs sage.libs.pari - (67446480057659, 7139620553488) - sage: timeit('Q.solve_integer(n)') # not tested -@@ -1661,7 +1661,7 @@ def solve_integer(self, n, *, algorithm='general', _flag=2): - sage: Qs - [x^2 + x*y + 6*y^2, 2*x^2 - x*y + 3*y^2, 2*x^2 + x*y + 3*y^2] - sage: [Q.solve_integer(3) for Q in Qs] -- [None, (0, -1), (0, -1)] -+ [None, (0, 1), (0, 1)] - sage: [Q.solve_integer(5) for Q in Qs] - [None, None, None] - sage: [Q.solve_integer(6) for Q in Qs] -@@ -1741,11 +1741,11 @@ def solve_integer(self, n, *, algorithm='general', _flag=2): - sage: # needs sage.libs.pari - sage: Q = BinaryQF([1, 0, 5]) - sage: Q.solve_integer(126, _flag=1) -- [(11, -1), (-1, -5), (-1, 5), (-11, -1)] -+ [(-11, -1), (-1, -5), (-1, 5), (11, -1)] - sage: Q.solve_integer(126, _flag=2) - (11, -1) - sage: Q.solve_integer(126, _flag=3) -- [(11, -1), (-1, -5), (-1, 5), (-11, -1), (-9, -3), (9, -3)] -+ [(-11, -1), (-9, -3), (-1, -5), (-1, 5), (9, -3), (11, -1)] - """ - if self.is_negative_definite(): # not supported by PARI - return (-self).solve_integer(-n) -diff --git a/src/sage/rings/finite_rings/finite_field_prime_modn.py b/src/sage/rings/finite_rings/finite_field_prime_modn.py -index d94b0a4335a..0978c7328fe 100644 ---- a/src/sage/rings/finite_rings/finite_field_prime_modn.py -+++ b/src/sage/rings/finite_rings/finite_field_prime_modn.py -@@ -114,9 +114,9 @@ def _coerce_map_from_(self, S): - sage: RF13 = K.residue_field(pp) - sage: RF13.hom([GF(13)(1)]) - Ring morphism: -- From: Residue field of Fractional ideal (-w - 18) -- To: Finite Field of size 13 -- Defn: 1 |--> 1 -+ From: Residue field of Fractional ideal (w + 18) -+ To: Finite Field of size 13 -+ Defn: 1 |--> 1 - - Check that :issue:`19573` is resolved:: - -diff --git a/src/sage/rings/finite_rings/residue_field.pyx b/src/sage/rings/finite_rings/residue_field.pyx -index f6f8c08666f..5c6f41b63c5 100644 ---- a/src/sage/rings/finite_rings/residue_field.pyx -+++ b/src/sage/rings/finite_rings/residue_field.pyx -@@ -22,14 +22,13 @@ monogenic (i.e., 2 is an essential discriminant divisor):: - sage: # needs sage.rings.number_field - sage: K. = NumberField(x^3 + x^2 - 2*x + 8) - sage: F = K.factor(2); F -- (Fractional ideal (-1/2*a^2 + 1/2*a - 1)) * (Fractional ideal (-a^2 + 2*a - 3)) -- * (Fractional ideal (3/2*a^2 - 5/2*a + 4)) -+ (Fractional ideal (-1/2*a^2 + 1/2*a - 1)) * (Fractional ideal (a^2 - 2*a + 3)) * (Fractional ideal (-3/2*a^2 + 5/2*a - 4)) - sage: F[0][0].residue_field() - Residue field of Fractional ideal (-1/2*a^2 + 1/2*a - 1) - sage: F[1][0].residue_field() -- Residue field of Fractional ideal (-a^2 + 2*a - 3) -+ Residue field of Fractional ideal (a^2 - 2*a + 3) - sage: F[2][0].residue_field() -- Residue field of Fractional ideal (3/2*a^2 - 5/2*a + 4) -+ Residue field of Fractional ideal (-3/2*a^2 + 5/2*a - 4) - - We can also form residue fields from `\ZZ`:: - -@@ -126,10 +125,10 @@ First over a small non-prime field:: - sage: I = ideal([ubar*X + Y]); I - Ideal (ubar*X + Y) of Multivariate Polynomial Ring in X, Y over - Residue field in ubar of Fractional ideal -- (47, 517/55860*u^5 + 235/3724*u^4 + 9829/13965*u^3 -- + 54106/13965*u^2 + 64517/27930*u + 755696/13965) -+ (47, 4841/93100*u^5 + 34451/139650*u^4 + 303697/69825*u^3 -+ + 297893/27930*u^2 + 1649764/23275*u + 2633506/69825) - sage: I.groebner_basis() # needs sage.libs.singular -- [X + (-19*ubar^2 - 5*ubar - 17)*Y] -+ [X + (-15*ubar^2 + 3*ubar - 2)*Y] - - And now over a large prime field:: - -@@ -496,9 +495,9 @@ class ResidueField_generic(Field): - - sage: # needs sage.rings.number_field - sage: I = QQ[i].factor(2)[0][0]; I -- Fractional ideal (I + 1) -+ Fractional ideal (I - 1) - sage: k = I.residue_field(); k -- Residue field of Fractional ideal (I + 1) -+ Residue field of Fractional ideal (I - 1) - sage: type(k) - - -@@ -1008,7 +1007,7 @@ cdef class ReductionMap(Map): - sage: cr - Partially defined reduction map: - From: Number Field in a with defining polynomial x^2 + 1 -- To: Residue field of Fractional ideal (a + 1) -+ To: Residue field of Fractional ideal (a - 1) - sage: cr == r # not implemented - True - sage: r(2 + a) == cr(2 + a) -@@ -1039,7 +1038,7 @@ cdef class ReductionMap(Map): - sage: cr - Partially defined reduction map: - From: Number Field in a with defining polynomial x^2 + 1 -- To: Residue field of Fractional ideal (a + 1) -+ To: Residue field of Fractional ideal (a - 1) - sage: cr == r # not implemented - True - sage: r(2 + a) == cr(2 + a) -@@ -1071,7 +1070,7 @@ cdef class ReductionMap(Map): - sage: r = F.reduction_map(); r - Partially defined reduction map: - From: Number Field in a with defining polynomial x^2 + 1 -- To: Residue field of Fractional ideal (a + 1) -+ To: Residue field of Fractional ideal (a - 1) - - We test that calling the function also works after copying:: - -@@ -1083,7 +1082,7 @@ cdef class ReductionMap(Map): - Traceback (most recent call last): - ... - ZeroDivisionError: Cannot reduce field element 1/2*a -- modulo Fractional ideal (a + 1): it has negative valuation -+ modulo Fractional ideal (a - 1): it has negative valuation - - sage: # needs sage.rings.finite_rings - sage: R. = GF(2)[]; h = t^5 + t^2 + 1 -@@ -1105,11 +1104,11 @@ cdef class ReductionMap(Map): - sage: # needs sage.rings.number_field - sage: K. = NumberField(x^2 + 1) - sage: P1, P2 = [g[0] for g in K.factor(5)]; P1, P2 -- (Fractional ideal (-i - 2), Fractional ideal (2*i + 1)) -+ (Fractional ideal (2*i - 1), Fractional ideal (-2*i - 1)) - sage: a = 1/(1+2*i) - sage: F1, F2 = [g.residue_field() for g in [P1,P2]]; F1, F2 -- (Residue field of Fractional ideal (-i - 2), -- Residue field of Fractional ideal (2*i + 1)) -+ (Residue field of Fractional ideal (2*i - 1), -+ Residue field of Fractional ideal (-2*i - 1)) - sage: a.valuation(P1) - 0 - sage: F1(i/7) -@@ -1122,7 +1121,7 @@ cdef class ReductionMap(Map): - Traceback (most recent call last): - ... - ZeroDivisionError: Cannot reduce field element -2/5*i + 1/5 -- modulo Fractional ideal (2*i + 1): it has negative valuation -+ modulo Fractional ideal (-2*i - 1): it has negative valuation - """ - # The reduction map is just x |--> F(to_vs(x) * (PB**(-1))) if - # either x is integral or the denominator of x is coprime to -@@ -1188,8 +1187,7 @@ cdef class ReductionMap(Map): - sage: f = k.convert_map_from(K) - sage: s = f.section(); s - Lifting map: -- From: Residue field in abar of -- Fractional ideal (-14*a^4 + 24*a^3 + 26*a^2 - 58*a + 15) -+ From: Residue field in abar of Fractional ideal (14*a^4 - 24*a^3 - 26*a^2 + 58*a - 15) - To: Number Field in a with defining polynomial x^5 - 5*x + 2 - sage: s(k.gen()) - a -@@ -1424,8 +1422,7 @@ cdef class ResidueFieldHomomorphism_global(RingHomomorphism): - sage: f = k.coerce_map_from(K.ring_of_integers()) - sage: s = f.section(); s - Lifting map: -- From: Residue field in abar of -- Fractional ideal (-14*a^4 + 24*a^3 + 26*a^2 - 58*a + 15) -+ From: Residue field in abar of Fractional ideal (14*a^4 - 24*a^3 - 26*a^2 + 58*a - 15) - To: Maximal Order generated by a in Number Field in a with defining polynomial x^5 - 5*x + 2 - sage: s(k.gen()) - a -@@ -1678,7 +1675,7 @@ cdef class LiftingMap(Section): - sage: F. = K.factor(7)[0][0].residue_field() - sage: F.lift_map() #indirect doctest - Lifting map: -- From: Residue field in tmod of Fractional ideal (theta_12^2 + 2) -+ From: Residue field in tmod of Fractional ideal (2*theta_12^3 + theta_12) - To: Maximal Order generated by theta_12 in Cyclotomic Field of order 12 and degree 4 - """ - return "Lifting" -diff --git a/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx b/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx -index e9962c3ccde..90a68c619f6 100644 ---- a/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx -+++ b/src/sage/rings/finite_rings/residue_field_pari_ffelt.pyx -@@ -103,7 +103,7 @@ class ResidueFiniteField_pari_ffelt(ResidueField_generic, FiniteField_pari_ffelt - sage: P.residue_class_degree() - 2 - sage: ff. = P.residue_field(); ff -- Residue field in alpha of Fractional ideal (-12*aa^2 + 189*aa - 475) -+ Residue field in alpha of Fractional ideal (12*aa^2 - 189*aa + 475) - sage: type(ff) - - sage: ff(alpha^2 + 1) -diff --git a/src/sage/rings/number_field/S_unit_solver.py b/src/sage/rings/number_field/S_unit_solver.py -index 0ffac369720..836edae5464 100644 ---- a/src/sage/rings/number_field/S_unit_solver.py -+++ b/src/sage/rings/number_field/S_unit_solver.py -@@ -12,10 +12,10 @@ - sage: x = polygen(ZZ, 'x') - sage: K. = NumberField(x^2 + x + 1) - sage: S = K.primes_above(3) -- sage: expected = [((0, 1), (4, 0), xi + 2, -xi - 1), -- ....: ((1, -1), (0, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), -+ sage: expected = [((4, 1), (4, 0), xi + 2, -xi - 1), -+ ....: ((3, -1), (2, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), - ....: ((1, 0), (5, 0), xi + 1, -xi), -- ....: ((2, 0), (5, 1), xi, -xi + 1)] -+ ....: ((2, 0), (3, 1), xi, -xi + 1)] - sage: sols = solve_S_unit_equation(K, S, 200) - sage: eq_up_to_order(sols, expected) - True -@@ -1381,7 +1381,7 @@ def defining_polynomial_for_Kp(prime, prec=106): - sage: from sage.rings.number_field.S_unit_solver import defining_polynomial_for_Kp - sage: K. = QuadraticField(2) - sage: p2 = K.prime_above(7); p2 -- Fractional ideal (-2*a + 1) -+ Fractional ideal (2*a - 1) - sage: defining_polynomial_for_Kp(p2, 10) - x + 266983762 - -@@ -1448,7 +1448,7 @@ def embedding_to_Kp(a, prime, prec): - sage: from sage.rings.number_field.S_unit_solver import embedding_to_Kp - sage: K. = QuadraticField(17) - sage: p = K.prime_above(13); p -- Fractional ideal (-a + 2) -+ Fractional ideal (a - 2) - sage: embedding_to_Kp(a-3, p, 15) - -20542890112375827 - -@@ -1791,10 +1791,10 @@ def sieve_ordering(SUK, q): - Residue field of Fractional ideal (2*xi + 1)) - - sage: sieve_data[2] -- ([18, 12, 16, 8], [18, 16, 10, 4], [18, 10, 12, 10]) -+ ([18, 9, 16, 8], [18, 7, 10, 4], [18, 3, 12, 10]) - - sage: sieve_data[3] -- (648, 2916, 3888) -+ (972, 972, 3888) - """ - - K = SUK.number_field() -@@ -2170,23 +2170,23 @@ def construct_complement_dictionaries(split_primes_list, SUK, verbose=False): - sage: SUK = K.S_unit_group(S=K.primes_above(H)) - sage: split_primes_list = [3, 7] - sage: actual = construct_complement_dictionaries(split_primes_list, SUK) -- sage: expected = {3: {(0, 1, 0): [(1, 0, 0), (0, 1, 0)], -- ....: (1, 0, 0): [(1, 0, 0), (0, 1, 0)]}, -- ....: 7: {(0, 1, 0): [(1, 0, 0), (1, 4, 4), (1, 2, 2)], -+ sage: expected = {3: {(0, 1, 0): [(0, 1, 0), (1, 0, 0)], -+ ....: (1, 0, 0): [(0, 1, 0), (1, 0, 0)]}, -+ ....: 7: {(0, 1, 0): [(1, 0, 0), (1, 2, 2), (1, 4, 4)], - ....: (0, 1, 2): [(0, 1, 2), (0, 3, 4), (0, 5, 0)], -- ....: (0, 3, 2): [(1, 0, 0), (1, 4, 4), (1, 2, 2)], -+ ....: (0, 3, 2): [(1, 0, 0), (1, 2, 2), (1, 4, 4)], - ....: (0, 3, 4): [(0, 1, 2), (0, 3, 4), (0, 5, 0)], - ....: (0, 5, 0): [(0, 1, 2), (0, 3, 4), (0, 5, 0)], -- ....: (0, 5, 4): [(1, 0, 0), (1, 4, 4), (1, 2, 2)], -- ....: (1, 0, 0): [(0, 5, 4), (0, 3, 2), (0, 1, 0)], -- ....: (1, 0, 2): [(1, 0, 4), (1, 4, 2), (1, 2, 0)], -- ....: (1, 0, 4): [(1, 2, 4), (1, 4, 0), (1, 0, 2)], -- ....: (1, 2, 0): [(1, 2, 4), (1, 4, 0), (1, 0, 2)], -- ....: (1, 2, 2): [(0, 5, 4), (0, 3, 2), (0, 1, 0)], -- ....: (1, 2, 4): [(1, 0, 4), (1, 4, 2), (1, 2, 0)], -- ....: (1, 4, 0): [(1, 0, 4), (1, 4, 2), (1, 2, 0)], -- ....: (1, 4, 2): [(1, 2, 4), (1, 4, 0), (1, 0, 2)], -- ....: (1, 4, 4): [(0, 5, 4), (0, 3, 2), (0, 1, 0)]}} -+ ....: (0, 5, 4): [(1, 0, 0), (1, 2, 2), (1, 4, 4)], -+ ....: (1, 0, 0): [(0, 1, 0), (0, 3, 2), (0, 5, 4)], -+ ....: (1, 0, 2): [(1, 0, 4), (1, 2, 0), (1, 4, 2)], -+ ....: (1, 0, 4): [(1, 0, 2), (1, 2, 4), (1, 4, 0)], -+ ....: (1, 2, 0): [(1, 0, 2), (1, 2, 4), (1, 4, 0)], -+ ....: (1, 2, 2): [(0, 1, 0), (0, 3, 2), (0, 5, 4)], -+ ....: (1, 2, 4): [(1, 0, 4), (1, 2, 0), (1, 4, 2)], -+ ....: (1, 4, 0): [(1, 0, 4), (1, 2, 0), (1, 4, 2)], -+ ....: (1, 4, 2): [(1, 0, 2), (1, 2, 4), (1, 4, 0)], -+ ....: (1, 4, 4): [(0, 1, 0), (0, 3, 2), (0, 5, 4)]}} - sage: all(set(actual[p][vec]) == set(expected[p][vec]) - ....: for p in [3, 7] for vec in expected[p]) - True -@@ -2693,9 +2693,9 @@ def sieve_below_bound(K, S, bound=10, bump=10, split_primes_list=[], verbose=Fal - sage: SUK = UnitGroup(K, S=tuple(K.primes_above(3))) - sage: S = SUK.primes() - sage: sols = sieve_below_bound(K, S, 10) -- sage: expected = [((1, -1), (0, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), -- ....: ((0, 1), (4, 0), xi + 2, -xi - 1), -- ....: ((2, 0), (5, 1), xi, -xi + 1), -+ sage: expected = [((3, -1), (2, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), -+ ....: ((4, 1), (4, 0), xi + 2, -xi - 1), -+ ....: ((2, 0), (3, 1), xi, -xi + 1), - ....: ((1, 0), (5, 0), xi + 1, -xi)] - sage: eq_up_to_order(sols, expected) - True -@@ -2758,10 +2758,10 @@ def solve_S_unit_equation(K, S, prec=106, include_exponents=True, include_bound= - sage: K. = NumberField(x^2 + x + 1) - sage: S = K.primes_above(3) - sage: sols = solve_S_unit_equation(K, S, 200) -- sage: expected = [((0, 1), (4, 0), xi + 2, -xi - 1), -- ....: ((1, -1), (0, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), -+ sage: expected = [((4, 1), (4, 0), xi + 2, -xi - 1), -+ ....: ((3, -1), (2, -1), 1/3*xi + 2/3, -1/3*xi + 1/3), - ....: ((1, 0), (5, 0), xi + 1, -xi), -- ....: ((2, 0), (5, 1), xi, -xi + 1)] -+ ....: ((2, 0), (3, 1), xi, -xi + 1)] - sage: eq_up_to_order(sols, expected) - True - -@@ -2769,7 +2769,7 @@ def solve_S_unit_equation(K, S, prec=106, include_exponents=True, include_bound= - - sage: solutions, bound = solve_S_unit_equation(K, S, 100, include_bound=True) - sage: bound -- 7 -+ 6 - - You can omit the exponent vectors:: - -diff --git a/src/sage/rings/number_field/class_group.py b/src/sage/rings/number_field/class_group.py -index 34a48931f8e..046209ad314 100644 ---- a/src/sage/rings/number_field/class_group.py -+++ b/src/sage/rings/number_field/class_group.py -@@ -524,9 +524,9 @@ def gens_ideals(self): - Class group of order 68 with structure C34 x C2 of Number Field - in a with defining polynomial x^2 + x + 23899 - sage: C.gens() -- (Fractional ideal class (7, a + 5), Fractional ideal class (5, a + 3)) -+ (Fractional ideal class (83, a + 21), Fractional ideal class (15, a + 8)) - sage: C.gens_ideals() -- (Fractional ideal (7, a + 5), Fractional ideal (5, a + 3)) -+ (Fractional ideal (83, a + 21), Fractional ideal (15, a + 8)) - """ - return self.gens_values() - -diff --git a/src/sage/rings/number_field/galois_group.py b/src/sage/rings/number_field/galois_group.py -index c974c3df6ff..ee53ca6d674 100644 ---- a/src/sage/rings/number_field/galois_group.py -+++ b/src/sage/rings/number_field/galois_group.py -@@ -995,8 +995,8 @@ def artin_symbol(self, P): - sage: K. = NumberField(x^4 - 2*x^2 + 2, 'a').galois_closure() - sage: G = K.galois_group() - sage: [G.artin_symbol(P) for P in K.primes_above(7)] -- [(1,4)(2,3)(5,8)(6,7), (1,4)(2,3)(5,8)(6,7), -- (1,5)(2,6)(3,7)(4,8), (1,5)(2,6)(3,7)(4,8)] -+ [(1,5)(2,6)(3,7)(4,8), (1,5)(2,6)(3,7)(4,8), -+ (1,4)(2,3)(5,8)(6,7), (1,4)(2,3)(5,8)(6,7)] - sage: G.artin_symbol(17) - Traceback (most recent call last): - ... -diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py -index dbd8e7e2edf..8a3a3300534 100644 ---- a/src/sage/rings/number_field/number_field.py -+++ b/src/sage/rings/number_field/number_field.py -@@ -3627,7 +3627,7 @@ def fractional_ideal(self, *gens, **kwds): - sage: L. = K.extension(x^2 - 3, x^2 + 1) - sage: M. = L.extension(x^2 + 1) - sage: L.ideal(K.ideal(2, a)) -- Fractional ideal (a) -+ Fractional ideal (-a) - sage: M.ideal(K.ideal(2, a)) == M.ideal(a*(b - c)/2) - True - -@@ -3670,35 +3670,37 @@ def ideals_of_bdd_norm(self, bound): - ....: print(n) - ....: for I in sorted(d[n]): - ....: print(I) -- 1 -- Fractional ideal (1) -- 2 -- Fractional ideal (2, 1/2*a - 1/2) -- Fractional ideal (2, 1/2*a + 1/2) -- 3 -- Fractional ideal (3, 1/2*a - 1/2) -- Fractional ideal (3, 1/2*a + 1/2) -- 4 -- Fractional ideal (2) -- Fractional ideal (4, 1/2*a + 3/2) -- Fractional ideal (4, 1/2*a + 5/2) -- 5 -- 6 -- Fractional ideal (1/2*a - 1/2) -- Fractional ideal (1/2*a + 1/2) -- Fractional ideal (6, 1/2*a + 5/2) -- Fractional ideal (6, 1/2*a + 7/2) -- 7 -- 8 -- Fractional ideal (4, a - 1) -- Fractional ideal (4, a + 1) -- Fractional ideal (1/2*a + 3/2) -- Fractional ideal (1/2*a - 3/2) -- 9 -- Fractional ideal (3) -- Fractional ideal (9, 1/2*a + 7/2) -- Fractional ideal (9, 1/2*a + 11/2) -- 10 -+ 1 -+ Fractional ideal (1) -+ 2 -+ Fractional ideal (2, 1/2*a - 1/2) -+ Fractional ideal (2, 1/2*a + 1/2) -+ 3 -+ Fractional ideal (3, 1/2*a - 1/2) -+ Fractional ideal (3, 1/2*a + 1/2) -+ 4 -+ Fractional ideal (2) -+ Fractional ideal (4, 1/2*a + 3/2) -+ Fractional ideal (4, 1/2*a + 5/2) -+ 5 -+ 6 -+ Fractional ideal (-1/2*a + 1/2) -+ Fractional ideal (1/2*a + 1/2) -+ Fractional ideal (6, 1/2*a + 5/2) -+ Fractional ideal (6, 1/2*a + 7/2) -+ 7 -+ 8 -+ Fractional ideal (4, a - 1) -+ Fractional ideal (4, a + 1) -+ Fractional ideal (-1/2*a - 3/2) -+ Fractional ideal (1/2*a - 3/2) -+ 9 -+ Fractional ideal (3) -+ Fractional ideal (9, 1/2*a + 7/2) -+ Fractional ideal (9, 1/2*a + 11/2) -+ 10 -+ sage: [[I.norm() for I in sorted(d[n])] for n in d] -+ [[1], [2, 2], [3, 3], [4, 4, 4], [], [6, 6, 6, 6], [], [8, 8, 8, 8], [9, 9, 9], []] - """ - hnf_ideals = self.pari_nf().ideallist(bound) - d = {} -@@ -3926,8 +3928,10 @@ def primes_of_bounded_norm(self, B): - - sage: K. = QuadraticField(-1) - sage: K.primes_of_bounded_norm(10) -- [Fractional ideal (i + 1), Fractional ideal (-i - 2), -- Fractional ideal (2*i + 1), Fractional ideal (3)] -+ [Fractional ideal (i - 1), -+ Fractional ideal (2*i - 1), -+ Fractional ideal (-2*i - 1), -+ Fractional ideal (3)] - sage: K.primes_of_bounded_norm(1) - [] - sage: x = polygen(QQ, 'x') -@@ -3936,10 +3940,10 @@ def primes_of_bounded_norm(self, B): - sage: P - [Fractional ideal (a), - Fractional ideal (a + 1), -- Fractional ideal (-a^2 - 1), -+ Fractional ideal (a^2 + 1), - Fractional ideal (a^2 + a - 1), - Fractional ideal (2*a + 1), -- Fractional ideal (-2*a^2 - a - 1), -+ Fractional ideal (2*a^2 + a + 1), - Fractional ideal (a^2 - 2*a - 1), - Fractional ideal (a + 3)] - sage: [p.norm() for p in P] -@@ -3989,10 +3993,10 @@ def primes_of_bounded_norm_iter(self, B): - sage: K. = QuadraticField(-1) - sage: it = K.primes_of_bounded_norm_iter(10) - sage: list(it) -- [Fractional ideal (i + 1), -+ [Fractional ideal (i - 1), - Fractional ideal (3), -- Fractional ideal (-i - 2), -- Fractional ideal (2*i + 1)] -+ Fractional ideal (2*i - 1), -+ Fractional ideal (-2*i - 1)] - sage: list(K.primes_of_bounded_norm_iter(1)) - [] - """ -@@ -4317,7 +4321,7 @@ def pari_nf(self, important=True): - sage: k. = NumberField(x^4 - 3/2*x + 5/3); k - Number Field in a with defining polynomial x^4 - 3/2*x + 5/3 - sage: k.pari_nf() -- [y^4 - 324*y + 2160, [0, 2], 48918708, 216, ..., [36, 36*y, y^3 + 6*y^2 - 252, 6*y^2], [1, 0, 0, 252; 0, 1, 0, 0; 0, 0, 0, 36; 0, 0, 6, -36], [1, 0, 0, 0, 0, 0, -18, 42, 0, -18, -46, -60, 0, 42, -60, -60; 0, 1, 0, 0, 1, 0, 2, 0, 0, 2, -11, -1, 0, 0, -1, 9; 0, 0, 1, 0, 0, 0, 6, 6, 1, 6, -5, 0, 0, 6, 0, 0; 0, 0, 0, 1, 0, 6, -6, -6, 0, -6, -1, 2, 1, -6, 2, 0]] -+ [y^4 - 324*y + 2160, [0, 2], 48918708, 216, ..., [36, 36*y, y^3 + 6*y^2 - 252, -6*y^2], [1, 0, 0, 252; 0, 1, 0, 0; 0, 0, 0, 36; 0, 0, -6, 36], [1, 0, 0, 0, 0, 0, -18, -42, 0, -18, -46, 60, 0, -42, 60, -60; 0, 1, 0, 0, 1, 0, 2, 0, 0, 2, -11, 1, 0, 0, 1, 9; 0, 0, 1, 0, 0, 0, 6, -6, 1, 6, -5, 0, 0, -6, 0, 0; 0, 0, 0, 1, 0, -6, 6, -6, 0, 6, 1, 2, 1, -6, 2, 0]] - sage: pari(k) - [y^4 - 324*y + 2160, [0, 2], 48918708, 216, ...] - sage: gp(k) -@@ -4444,10 +4448,14 @@ def pari_bnf(self, proof=None, units=True): - bnf = self._pari_bnf - except AttributeError: - f = self.pari_polynomial("y") -+ _saved_rand = pari.getrand() -+ # make this deterministic, it affects printing of ideals -+ pari.setrand(1) - if units: - self._pari_bnf = f.bnfinit(1) - else: - self._pari_bnf = f.bnfinit() -+ pari.setrand(_saved_rand) - bnf = self._pari_bnf - # Certify if needed - if proof and not getattr(self, "_pari_bnf_certified", False): -@@ -4807,7 +4815,7 @@ def _S_class_group_and_units(self, S, proof=True): - 1/13*a^2 + 7/13*a - 332/13, - -1/13*a^2 + 6/13*a + 345/13, - -1, -- -2/13*a^2 - 1/13*a + 755/13] -+ 1/13*a^2 - 19/13*a - 7/13] - sage: units[5] in (1/13*a^2 - 19/13*a - 7/13, 1/13*a^2 + 20/13*a - 7/13) - True - sage: len(units) == 6 -@@ -4818,7 +4826,7 @@ def _S_class_group_and_units(self, S, proof=True): - - sage: K. = NumberField(2*x^2 - 1/3) - sage: K._S_class_group_and_units(tuple(K.primes_above(2) + K.primes_above(3))) -- ([6*a + 2, 6*a + 3, -1, -12*a + 5], []) -+ ([6*a + 2, -6*a + 3, -1, -12*a - 5], []) - """ - K_pari = self.pari_bnf(proof=proof) - S_pari = [p.pari_prime() for p in sorted(set(S))] -@@ -4996,7 +5004,7 @@ def selmer_generators(self, S, m, proof=True, orders=False): - 1/13*a^2 + 7/13*a - 332/13, - -1/13*a^2 + 6/13*a + 345/13, - -1, -- -2/13*a^2 - 1/13*a + 755/13] -+ 1/13*a^2 - 19/13*a - 7/13] - sage: gens[5] in (1/13*a^2 - 19/13*a - 7/13, 1/13*a^2 + 20/13*a - 7/13) - True - sage: gens[6] in (-1/13*a^2 + 45/13*a - 97/13, 1/13*a^2 - 45/13*a + 97/13) -@@ -5160,9 +5168,7 @@ def selmer_space(self, S, p, proof=None): - - sage: [K.ideal(g).factor() for g in gens] - [(Fractional ideal (2, a + 1)) * (Fractional ideal (3, a + 1)), -- Fractional ideal (a), -- (Fractional ideal (2, a + 1))^2, -- 1] -+ Fractional ideal (-a), (Fractional ideal (2, a + 1))^2, 1] - - sage: toKS2(10) - (0, 0, 1, 1) -@@ -5640,7 +5646,7 @@ def different(self): - sage: k. = NumberField(x^2 + 23) - sage: d = k.different() - sage: d -- Fractional ideal (-a) -+ Fractional ideal (a) - sage: d.norm() - 23 - sage: k.disc() -@@ -5760,7 +5766,7 @@ def elements_of_norm(self, n, proof=None) -> list: - sage: K.elements_of_norm(3) - [] - sage: K.elements_of_norm(50) -- [-a - 7, 5*a - 5, 7*a + 1] -+ [7*a - 1, 5*a - 5, -7*a - 1] - - TESTS: - -@@ -5872,10 +5878,9 @@ def factor(self, n): - sage: K.factor(1/3) - (Fractional ideal (3))^-1 - sage: K.factor(1+a) -- Fractional ideal (a + 1) -+ Fractional ideal (a - 1) - sage: K.factor(1+a/5) -- (Fractional ideal (a + 1)) * (Fractional ideal (-a - 2))^-1 -- * (Fractional ideal (2*a + 1))^-1 * (Fractional ideal (-2*a + 3)) -+ (Fractional ideal (a - 1)) * (Fractional ideal (2*a - 1))^-1 * (Fractional ideal (-2*a - 1))^-1 * (Fractional ideal (3*a + 2)) - - An example over a relative number field:: - -@@ -5908,9 +5913,9 @@ def factor(self, n): - sage: (fi, fj) = f[::] - sage: (fi[1], fj[1]) - (1, 1) -- sage: fi[0] == L.fractional_ideal(1/2*a*b - a + 1/2) -+ sage: fi[0] == L.fractional_ideal(-1/2*a*b - a + 1/2) - True -- sage: fj[0] == L.fractional_ideal(-1/2*a*b - a + 1/2) -+ sage: fj[0] == L.fractional_ideal(1/2*a*b - a + 1/2) - True - """ - return self.ideal(n).factor() -@@ -6524,13 +6529,15 @@ def reduced_basis(self, prec=None): - # the inner product on the Minkowski embedding, which is - # faster than computing all the conjugates, etc ... - -+ # flag to disable FLATTER, which is much more unstable than fplll -+ flag = 1 if pari.version() >= (2,17) else 0 - if self.is_totally_real(): - from sage.matrix.constructor import matrix - M = matrix(ZZ, d, d, [[(x*y).trace() for x in ZK] for y in ZK]) -- T = pari(M).qflllgram() -+ T = pari(M).qflllgram(flag=flag) - else: - M = self.minkowski_embedding(ZK, prec=prec) -- T = pari(M).qflll() -+ T = pari(M).qflll(flag=flag) - - return [sum([ZZ(T[i][j]) * ZK[j] for j in range(d)]) for i in range(d)] - -@@ -7107,14 +7114,14 @@ def units(self, proof=None): - sage: K.units(proof=True) # takes forever, not tested - ... - sage: K.units(proof=False) # result not independently verified -- (-a^9 - a + 1, -+ (a^9 + a - 1, -+ -a^15 + a^12 - a^10 + a^9 + 2*a^8 - 3*a^7 - a^6 + 3*a^5 - a^4 - 4*a^3 + 3*a^2 + 2*a - 2, -+ a^15 + a^14 + a^13 + a^12 + a^10 - a^7 - a^6 - a^2 - 1, -+ 2*a^16 - 3*a^15 + 3*a^14 - 3*a^13 + 3*a^12 - a^11 + a^9 - 3*a^8 + 4*a^7 - 5*a^6 + 6*a^5 - 4*a^4 + 3*a^3 - 2*a^2 - 2*a + 4, - -a^16 + a^15 - a^14 + a^12 - a^11 + a^10 + a^8 - a^7 + 2*a^6 - a^4 + 3*a^3 - 2*a^2 + 2*a - 1, -- 2*a^16 - a^14 - a^13 + 3*a^12 - 2*a^10 + a^9 + 3*a^8 - 3*a^6 + 3*a^5 + 3*a^4 - 2*a^3 - 2*a^2 + 3*a + 4, -- a^15 + a^14 + 2*a^11 + a^10 - a^9 + a^8 + 2*a^7 - a^5 + 2*a^3 - a^2 - 3*a + 1, -- -a^16 - a^15 - a^14 - a^13 - a^12 - a^11 - a^10 - a^9 - a^8 - a^7 - a^6 - a^5 - a^4 - a^3 - a^2 + 2, -- -2*a^16 + 3*a^15 - 3*a^14 + 3*a^13 - 3*a^12 + a^11 - a^9 + 3*a^8 - 4*a^7 + 5*a^6 - 6*a^5 + 4*a^4 - 3*a^3 + 2*a^2 + 2*a - 4, -- a^15 - a^12 + a^10 - a^9 - 2*a^8 + 3*a^7 + a^6 - 3*a^5 + a^4 + 4*a^3 - 3*a^2 - 2*a + 2, -- 2*a^16 + a^15 - a^11 - 3*a^10 - 4*a^9 - 4*a^8 - 4*a^7 - 5*a^6 - 7*a^5 - 8*a^4 - 6*a^3 - 5*a^2 - 6*a - 7) -+ a^16 - 2*a^15 - 2*a^13 - a^12 - a^11 - 2*a^10 + a^9 - 2*a^8 + 2*a^7 - 3*a^6 - 3*a^4 - 2*a^3 - a^2 - 4*a + 2, -+ -a^15 - a^14 - 2*a^11 - a^10 + a^9 - a^8 - 2*a^7 + a^5 - 2*a^3 + a^2 + 3*a - 1, -+ -3*a^16 - 3*a^15 - 3*a^14 - 3*a^13 - 3*a^12 - 2*a^11 - 2*a^10 - 2*a^9 - a^8 + a^7 + 2*a^6 + 3*a^5 + 3*a^4 + 4*a^3 + 6*a^2 + 8*a + 8) - - TESTS: - -@@ -7123,7 +7130,7 @@ def units(self, proof=None): - - sage: K. = NumberField(1/2*x^2 - 1/6) - sage: K.units() -- (3*a - 2,) -+ (3*a + 2,) - """ - proof = proof_flag(proof) - -@@ -7205,14 +7212,14 @@ def unit_group(self, proof=None): - (u0, u1, u2, u3, u4, u5, u6, u7, u8) - sage: U.gens_values() # result not independently verified - [-1, -- -a^9 - a + 1, -+ a^9 + a - 1, -+ -a^15 + a^12 - a^10 + a^9 + 2*a^8 - 3*a^7 - a^6 + 3*a^5 - a^4 - 4*a^3 + 3*a^2 + 2*a - 2, -+ a^15 + a^14 + a^13 + a^12 + a^10 - a^7 - a^6 - a^2 - 1, -+ 2*a^16 - 3*a^15 + 3*a^14 - 3*a^13 + 3*a^12 - a^11 + a^9 - 3*a^8 + 4*a^7 - 5*a^6 + 6*a^5 - 4*a^4 + 3*a^3 - 2*a^2 - 2*a + 4, - -a^16 + a^15 - a^14 + a^12 - a^11 + a^10 + a^8 - a^7 + 2*a^6 - a^4 + 3*a^3 - 2*a^2 + 2*a - 1, -- 2*a^16 - a^14 - a^13 + 3*a^12 - 2*a^10 + a^9 + 3*a^8 - 3*a^6 + 3*a^5 + 3*a^4 - 2*a^3 - 2*a^2 + 3*a + 4, -- a^15 + a^14 + 2*a^11 + a^10 - a^9 + a^8 + 2*a^7 - a^5 + 2*a^3 - a^2 - 3*a + 1, -- -a^16 - a^15 - a^14 - a^13 - a^12 - a^11 - a^10 - a^9 - a^8 - a^7 - a^6 - a^5 - a^4 - a^3 - a^2 + 2, -- -2*a^16 + 3*a^15 - 3*a^14 + 3*a^13 - 3*a^12 + a^11 - a^9 + 3*a^8 - 4*a^7 + 5*a^6 - 6*a^5 + 4*a^4 - 3*a^3 + 2*a^2 + 2*a - 4, -- a^15 - a^12 + a^10 - a^9 - 2*a^8 + 3*a^7 + a^6 - 3*a^5 + a^4 + 4*a^3 - 3*a^2 - 2*a + 2, -- 2*a^16 + a^15 - a^11 - 3*a^10 - 4*a^9 - 4*a^8 - 4*a^7 - 5*a^6 - 7*a^5 - 8*a^4 - 6*a^3 - 5*a^2 - 6*a - 7] -+ a^16 - 2*a^15 - 2*a^13 - a^12 - a^11 - 2*a^10 + a^9 - 2*a^8 + 2*a^7 - 3*a^6 - 3*a^4 - 2*a^3 - a^2 - 4*a + 2, -+ -a^15 - a^14 - 2*a^11 - a^10 + a^9 - a^8 - 2*a^7 + a^5 - 2*a^3 + a^2 + 3*a - 1, -+ -3*a^16 - 3*a^15 - 3*a^14 - 3*a^13 - 3*a^12 - 2*a^11 - 2*a^10 - 2*a^9 - a^8 + a^7 + 2*a^6 + 3*a^5 + 3*a^4 + 4*a^3 + 6*a^2 + 8*a + 8] - """ - proof = proof_flag(proof) - -@@ -7261,8 +7268,8 @@ def S_unit_group(self, proof=None, S=None): - sage: U = K.S_unit_group(S=a); U - S-unit group with structure C10 x Z x Z x Z of - Number Field in a with defining polynomial x^4 - 10*x^3 + 100*x^2 - 375*x + 1375 -- with S = (Fractional ideal (5, 1/275*a^3 + 4/55*a^2 - 5/11*a + 5), -- Fractional ideal (11, 1/275*a^3 + 4/55*a^2 - 5/11*a + 9)) -+ with S = (Fractional ideal (5, -7/275*a^3 + 1/11*a^2 - 9/11*a), -+ Fractional ideal (11, -7/275*a^3 + 1/11*a^2 - 9/11*a + 3)) - sage: U.gens() - (u0, u1, u2, u3) - sage: U.gens_values() # random -@@ -7273,8 +7280,8 @@ def S_unit_group(self, proof=None, S=None): - sage: [u.multiplicative_order() for u in U.gens()] - [10, +Infinity, +Infinity, +Infinity] - sage: U.primes() -- (Fractional ideal (5, 1/275*a^3 + 4/55*a^2 - 5/11*a + 5), -- Fractional ideal (11, 1/275*a^3 + 4/55*a^2 - 5/11*a + 9)) -+ (Fractional ideal (5, -7/275*a^3 + 1/11*a^2 - 9/11*a), -+ Fractional ideal (11, -7/275*a^3 + 1/11*a^2 - 9/11*a + 3)) - - With the default value of `S`, the S-unit group is the same as - the global unit group:: -@@ -7427,7 +7434,7 @@ def S_unit_solutions(self, S=[], prec=106, include_exponents=False, include_boun - sage: # needs sage.rings.padics - sage: solutions, bound = K.S_unit_solutions(S, prec=100, include_bound=True) - sage: bound -- 7 -+ 6 - """ - from .S_unit_solver import solve_S_unit_equation - return solve_S_unit_equation(self, S, prec, include_exponents, include_bound, proof) -@@ -8782,7 +8789,7 @@ def subfields(self, degree=0, name=None): - (Number Field in a1 with defining polynomial x^2 - 2, Ring morphism: - From: Number Field in a1 with defining polynomial x^2 - 2 - To: Number Field in a with defining polynomial 2*x^4 + 6*x^2 + 1/2 -- Defn: a1 |--> a^2 + 3/2, None), -+ Defn: a1 |--> -a^2 - 3/2, None), - (Number Field in a2 with defining polynomial x^2 + 4, Ring morphism: - From: Number Field in a2 with defining polynomial x^2 + 4 - To: Number Field in a with defining polynomial 2*x^4 + 6*x^2 + 1/2 -@@ -8790,14 +8797,14 @@ def subfields(self, degree=0, name=None): - (Number Field in a3 with defining polynomial x^2 + 2, Ring morphism: - From: Number Field in a3 with defining polynomial x^2 + 2 - To: Number Field in a with defining polynomial 2*x^4 + 6*x^2 + 1/2 -- Defn: a3 |--> 2*a^3 + 5*a, None), -+ Defn: a3 |--> -2*a^3 - 5*a, None), - (Number Field in a4 with defining polynomial x^4 + 1, Ring morphism: - From: Number Field in a4 with defining polynomial x^4 + 1 - To: Number Field in a with defining polynomial 2*x^4 + 6*x^2 + 1/2 -- Defn: a4 |--> a^3 + 1/2*a^2 + 5/2*a + 3/4, Ring morphism: -+ Defn: a4 |--> -a^3 - 1/2*a^2 - 5/2*a - 3/4, Ring morphism: - From: Number Field in a with defining polynomial 2*x^4 + 6*x^2 + 1/2 - To: Number Field in a4 with defining polynomial x^4 + 1 -- Defn: a |--> -1/2*a4^3 + a4^2 - 1/2*a4) -+ Defn: a |--> 1/2*a4^3 + a4^2 + 1/2*a4) - ] - """ - return self._subfields_helper(degree=degree, name=name, -@@ -12729,12 +12736,12 @@ def _splitting_classes_gens_(K, m, d): - sage: L = K.subfields(20)[0][0] - sage: L.conductor() # needs sage.groups - 101 -- sage: _splitting_classes_gens_(L,101,20) # needs sage.libs.gap # optional - gap_package_polycyclic -+ sage: _splitting_classes_gens_(L,101,20) # optional - gap_package_polycyclic, needs sage.libs.gap - [95] - - sage: K = CyclotomicField(44) - sage: L = K.subfields(4)[0][0] -- sage: _splitting_classes_gens_(L,44,4) # needs sage.libs.gap # optional - gap_package_polycyclic -+ sage: _splitting_classes_gens_(L,44,4) # optional - gap_package_polycyclic, needs sage.libs.gap - [37] - - sage: K = CyclotomicField(44) -@@ -12746,7 +12753,7 @@ def _splitting_classes_gens_(K, m, d): - with zeta44_0 = 3.837971894457990? - sage: L.conductor() # needs sage.groups - 11 -- sage: _splitting_classes_gens_(L,11,5) # needs sage.libs.gap # optional - gap_package_polycyclic -+ sage: _splitting_classes_gens_(L,11,5) # optional - gap_package_polycyclic, needs sage.libs.gap - [10] - """ - from sage.groups.abelian_gps.abelian_group import AbelianGroup -diff --git a/src/sage/rings/number_field/number_field_element.pyx b/src/sage/rings/number_field/number_field_element.pyx -index 27432813b2b..a22b68e6093 100644 ---- a/src/sage/rings/number_field/number_field_element.pyx -+++ b/src/sage/rings/number_field/number_field_element.pyx -@@ -1954,14 +1954,14 @@ cdef class NumberFieldElement(NumberFieldElement_base): - sage: x = polygen(ZZ, 'x') - sage: K. = NumberField(x^2 + 1) - sage: (6*i + 6).factor() -- (-i) * (i + 1)^3 * 3 -+ (i - 1)^3 * 3 - - In the following example, the class number is 2. If a factorization - in prime elements exists, we will find it:: - - sage: K. = NumberField(x^2 - 10) - sage: factor(169*a + 531) -- (-6*a - 19) * (-3*a - 1) * (-2*a + 9) -+ (-6*a - 19) * (2*a - 9) * (3*a + 1) - sage: factor(K(3)) - Traceback (most recent call last): - ... -@@ -2043,7 +2043,7 @@ cdef class NumberFieldElement(NumberFieldElement_base): - 0 - sage: R = K.maximal_order() - sage: R(i+1).gcd(2) -- i + 1 -+ i - 1 - sage: R = K.order(2*i) - sage: R(1).gcd(R(4*i)) - 1 -@@ -4238,7 +4238,7 @@ cdef class NumberFieldElement(NumberFieldElement_base): - - sage: P5s = F(5).support() - sage: P5s -- [Fractional ideal (-t^2 - 1), Fractional ideal (t^2 - 2*t - 1)] -+ [Fractional ideal (t^2 + 1), Fractional ideal (t^2 - 2*t - 1)] - sage: all(5 in P5 for P5 in P5s) - True - sage: all(P5.is_prime() for P5 in P5s) -@@ -4487,7 +4487,7 @@ cdef class NumberFieldElement(NumberFieldElement_base): - sage: f = Qi.embeddings(K)[0] - sage: a = f(2+3*i) * (2-zeta)^2 - sage: a.descend_mod_power(Qi,2) -- [-2*i + 3, 3*i + 2] -+ [3*i + 2, 2*i - 3] - - An absolute example:: - -diff --git a/src/sage/rings/number_field/number_field_ideal.py b/src/sage/rings/number_field/number_field_ideal.py -index 171fba9af6e..c053118ab94 100644 ---- a/src/sage/rings/number_field/number_field_ideal.py -+++ b/src/sage/rings/number_field/number_field_ideal.py -@@ -75,7 +75,7 @@ class NumberFieldIdeal(Ideal_generic): - Fractional ideal (3) - sage: F = pari(K).idealprimedec(5) - sage: K.ideal(F[0]) -- Fractional ideal (2*i + 1) -+ Fractional ideal (-2*i - 1) - - TESTS: - -@@ -236,7 +236,7 @@ def _richcmp_(self, other, op): - sage: K. = NumberField(x^2 + 3); K - Number Field in a with defining polynomial x^2 + 3 - sage: f = K.factor(15); f -- (Fractional ideal (1/2*a + 3/2))^2 * (Fractional ideal (5)) -+ (Fractional ideal (-a))^2 * (Fractional ideal (5)) - sage: (f[0][0] < f[1][0]) - True - sage: (f[0][0] == f[0][0]) -@@ -273,7 +273,7 @@ def _mul_(self, other): - sage: A = K.ideal([5, 2 + I]) - sage: B = K.ideal([13, 5 + 12*I]) - sage: A*B -- Fractional ideal (4*I - 7) -+ Fractional ideal (-4*I + 7) - sage: (K.ideal(3 + I) * K.ideal(7 + I)).gens() - (10*I + 20,) - -@@ -683,17 +683,17 @@ def free_module(self): - sage: I.free_module() - Free module of degree 4 and rank 4 over Integer Ring - User basis matrix: -- [ 4 0 0 0] -- [ -3 7 -1 1] -- [ 3 7 1 1] -- [ 0 -10 0 -2] -+ [ 4 0 0 0] -+ [ 3 7 1 1] -+ [ 0 10 0 2] -+ [ 3 -7 1 -1] - sage: J = I^(-1); J.free_module() - Free module of degree 4 and rank 4 over Integer Ring - User basis matrix: - [ 1/4 0 0 0] -- [-3/16 7/16 -1/16 1/16] - [ 3/16 7/16 1/16 1/16] -- [ 0 -5/8 0 -1/8] -+ [ 0 5/8 0 1/8] -+ [ 3/16 -7/16 1/16 -1/16] - - An example of intersecting ideals by intersecting free modules.:: - -@@ -790,7 +790,7 @@ def gens_reduced(self, proof=None): - sage: J.is_principal() - False - sage: J.gens_reduced() -- (5, a) -+ (5, -a) - sage: all(j.parent() is K for j in J.gens()) - True - sage: all(j.parent() is K for j in J.gens_reduced()) -@@ -2417,9 +2417,9 @@ def denominator(self): - sage: I = K.ideal((3+4*i)/5); I - Fractional ideal (4/5*i + 3/5) - sage: I.denominator() -- Fractional ideal (2*i + 1) -+ Fractional ideal (-2*i - 1) - sage: I.numerator() -- Fractional ideal (-i - 2) -+ Fractional ideal (2*i - 1) - sage: I.numerator().is_integral() and I.denominator().is_integral() - True - sage: I.numerator() + I.denominator() == K.unit_ideal() -@@ -2448,9 +2448,9 @@ def numerator(self): - sage: I = K.ideal((3+4*i)/5); I - Fractional ideal (4/5*i + 3/5) - sage: I.denominator() -- Fractional ideal (2*i + 1) -+ Fractional ideal (-2*i - 1) - sage: I.numerator() -- Fractional ideal (-i - 2) -+ Fractional ideal (2*i - 1) - sage: I.numerator().is_integral() and I.denominator().is_integral() - True - sage: I.numerator() + I.denominator() == K.unit_ideal() -@@ -3165,11 +3165,11 @@ def _p_quotient(self, p): - Partially defined quotient map - from Number Field in i with defining polynomial x^2 + 1 - to an explicit vector space representation for the quotient of -- the ring of integers by (p,I) for the ideal I=Fractional ideal (-i - 2). -+ the ring of integers by (p,I) for the ideal I=Fractional ideal (2*i - 1). - sage: lift - Lifting map - to Gaussian Integers generated by i in Number Field in i with defining polynomial x^2 + 1 -- from quotient of integers by Fractional ideal (-i - 2) -+ from quotient of integers by Fractional ideal (2*i - 1) - """ - return quotient_char_p(self, p) - -@@ -3214,11 +3214,11 @@ def residue_field(self, names=None): - - sage: K. = NumberField(x^2 + 1) - sage: P1, P2 = [g[0] for g in K.factor(5)]; P1, P2 -- (Fractional ideal (-i - 2), Fractional ideal (2*i + 1)) -+ (Fractional ideal (2*i - 1), Fractional ideal (-2*i - 1)) - sage: a = 1/(1+2*i) - sage: F1, F2 = [g.residue_field() for g in [P1, P2]]; F1, F2 -- (Residue field of Fractional ideal (-i - 2), -- Residue field of Fractional ideal (2*i + 1)) -+ (Residue field of Fractional ideal (2*i - 1), -+ Residue field of Fractional ideal (-2*i - 1)) - sage: a.valuation(P1) - 0 - sage: F1(i/7) -@@ -3231,7 +3231,7 @@ def residue_field(self, names=None): - Traceback (most recent call last): - ... - ZeroDivisionError: Cannot reduce field element -2/5*i + 1/5 -- modulo Fractional ideal (2*i + 1): it has negative valuation -+ modulo Fractional ideal (-2*i - 1): it has negative valuation - - An example with a relative number field:: - -@@ -3492,7 +3492,7 @@ def quotient_char_p(I, p): - [] - - sage: I = K.factor(13)[0][0]; I -- Fractional ideal (-2*i + 3) -+ Fractional ideal (3*i + 2) - sage: I.residue_class_degree() - 1 - sage: quotient_char_p(I, 13)[0] -diff --git a/src/sage/rings/number_field/number_field_ideal_rel.py b/src/sage/rings/number_field/number_field_ideal_rel.py -index 7f6cfd9b1b7..129d0288024 100644 ---- a/src/sage/rings/number_field/number_field_ideal_rel.py -+++ b/src/sage/rings/number_field/number_field_ideal_rel.py -@@ -11,7 +11,7 @@ - sage: G = [from_A(z) for z in I.gens()]; G - [7, -2*b*a - 1] - sage: K.fractional_ideal(G) -- Fractional ideal ((1/2*b + 2)*a - 1/2*b + 2) -+ Fractional ideal ((-1/2*b + 2)*a - 1/2*b - 2) - sage: K.fractional_ideal(G).absolute_norm().factor() - 7^2 - -@@ -189,7 +189,7 @@ def absolute_ideal(self, names='a'): - sage: J.absolute_norm() - 2 - sage: J.ideal_below() -- Fractional ideal (b) -+ Fractional ideal (-b) - sage: J.ideal_below().norm() - 2 - """ -@@ -277,7 +277,7 @@ def gens_reduced(self): - sage: L. = K.extension(5*x^2 + 1) - sage: P = L.primes_above(2)[0] - sage: P.gens_reduced() -- (2, -15*a*b + 3*a + 1) -+ (2, -15*a*b - 3*a + 1) - """ - try: - # Compute the single generator, if it exists -@@ -548,14 +548,12 @@ def factor(self): - sage: x = polygen(ZZ, 'x') - sage: K. = QQ.extension([x^2 + 11, x^2 - 5]) - sage: K.factor(5) -- (Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 3/4))^2 -- * (Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 7/4))^2 -+ (Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 3/4))^2 * (Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 7/4))^2 - sage: K.ideal(5).factor() -- (Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 3/4))^2 -- * (Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 7/4))^2 -+ (Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 3/4))^2 * (Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 7/4))^2 - sage: K.ideal(5).prime_factors() -- [Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 3/4), -- Fractional ideal (5, (-1/4*b - 1/4)*a + 1/4*b - 7/4)] -+ [Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 3/4), -+ Fractional ideal (5, (1/4*b - 1/4)*a + 1/4*b + 7/4)] - - sage: PQ. = QQ[] - sage: F. = NumberFieldTower([X^2 - 2, X^2 - 3]) -diff --git a/src/sage/rings/number_field/number_field_rel.py b/src/sage/rings/number_field/number_field_rel.py -index 7ea070b113e..a1d5ab38176 100644 ---- a/src/sage/rings/number_field/number_field_rel.py -+++ b/src/sage/rings/number_field/number_field_rel.py -@@ -233,21 +233,21 @@ def __init__(self, base, polynomial, name, - sage: l. = k.extension(5*x^2 + 3); l - Number Field in b with defining polynomial 5*x^2 + 3 over its base field - sage: l.pari_rnf() -- [x^2 + (-y^3 + 1/2*y^2 - 6*y + 3/2)*x + (-3/4*y^3 - 1/4*y^2 - 17/4*y - 19/4), ..., y^4 + 6*y^2 + 1, x^2 + (-y^3 + 1/2*y^2 - 6*y + 3/2)*x + (-3/4*y^3 - 1/4*y^2 - 17/4*y - 19/4)], [0, 0]] -+ [x^2 + (5/4*y^3 - 1/4*y^2 + 27/4*y - 3/4)*x + (-9/4*y^3 - 1/4*y^2 - 47/4*y - 7/4), ..., y^4 + 6*y^2 + 1, x^2 + (5/4*y^3 - 1/4*y^2 + 27/4*y - 3/4)*x + (-9/4*y^3 - 1/4*y^2 - 47/4*y - 7/4)], [0, 0]] - sage: b - b - - sage: l. = k.extension(x^2 + 3/5); l - Number Field in b with defining polynomial x^2 + 3/5 over its base field - sage: l.pari_rnf() -- [x^2 + (-y^3 + 1/2*y^2 - 6*y + 3/2)*x + (-3/4*y^3 - 1/4*y^2 - 17/4*y - 19/4), ..., y^4 + 6*y^2 + 1, x^2 + (-y^3 + 1/2*y^2 - 6*y + 3/2)*x + (-3/4*y^3 - 1/4*y^2 - 17/4*y - 19/4)], [0, 0]] -+ [x^2 + (5/4*y^3 - 1/4*y^2 + 27/4*y - 3/4)*x + (-9/4*y^3 - 1/4*y^2 - 47/4*y - 7/4), ..., y^4 + 6*y^2 + 1, x^2 + (5/4*y^3 - 1/4*y^2 + 27/4*y - 3/4)*x + (-9/4*y^3 - 1/4*y^2 - 47/4*y - 7/4)], [0, 0]] - sage: b - b - - sage: l. = k.extension(x - 1/a0); l - Number Field in b with defining polynomial x + 1/2*a0 over its base field - sage: l.pari_rnf() -- [x, [4, -x^3 - x^2 - 7*x - 3, -x^3 + x^2 - 7*x + 3, 2*x^3 + 10*x], ..., [x^4 + 6*x^2 + 1, -x, -1, y^4 + 6*y^2 + 1, x], [0, 0]] -+ [x, [4, -x^3 + x^2 - 7*x + 3, -2*x^3 - 10*x, x^3 + x^2 + 7*x + 3], ..., [x^4 + 6*x^2 + 1, -x, -1, y^4 + 6*y^2 + 1, x], [0, 0]] - sage: b - -1/2*a0 - -@@ -1635,9 +1635,9 @@ def _pari_relative_structure(self): - sage: K. = NumberField(x^2 + 1) - sage: L. = K.extension(x^2 - 1/2) - sage: L._pari_relative_structure() -- (x^2 + Mod(-y, y^2 + 1), -- Mod(Mod(1/2*y - 1/2, y^2 + 1)*x, x^2 + Mod(-y, y^2 + 1)), -- Mod(Mod(-y - 1, y^2 + 1)*x, Mod(1, y^2 + 1)*x^2 + Mod(-1/2, y^2 + 1))) -+ (x^2 + Mod(y, y^2 + 1), -+ Mod(Mod(-1/2*y - 1/2, y^2 + 1)*x, x^2 + Mod(y, y^2 + 1)), -+ Mod(Mod(y - 1, y^2 + 1)*x, x^2 + Mod(-1/2, y^2 + 1))) - - An example where both fields are defined by non-integral or - non-monic polynomials:: -@@ -1937,7 +1937,7 @@ def absolute_polynomial(self): - sage: k.relative_polynomial() - x^2 + 1/3 - sage: k.pari_relative_polynomial() -- x^2 + Mod(y, y^2 + 1)*x - 1 -+ x^2 + Mod(-y, y^2 + 1)*x - 1 - """ - return QQ['x'](self._pari_rnfeq()[0]) - -@@ -2724,7 +2724,7 @@ def uniformizer(self, P, others='positive'): - sage: x = polygen(ZZ, 'x') - sage: K. = NumberField([x^2 + 23, x^2 - 3]) - sage: P = K.prime_factors(5)[0]; P -- Fractional ideal (5, 1/2*a + b - 5/2) -+ Fractional ideal (5, -1/2*a + b + 5/2) - sage: u = K.uniformizer(P) - sage: u.valuation(P) - 1 -diff --git a/src/sage/rings/number_field/order.py b/src/sage/rings/number_field/order.py -index fd5662048df..d1c055bf549 100644 ---- a/src/sage/rings/number_field/order.py -+++ b/src/sage/rings/number_field/order.py -@@ -2935,7 +2935,7 @@ def GaussianIntegers(names='I', latex_name='i'): - sage: ZZI - Gaussian Integers generated by I in Number Field in I with defining polynomial x^2 + 1 with I = 1*I - sage: factor(3 + I) -- (-I) * (I + 1) * (2*I + 1) -+ (-2*I - 1) * (I - 1) - sage: CC(I) - 1.00000000000000*I - sage: I.minpoly() -@@ -2966,7 +2966,7 @@ def EisensteinIntegers(names='omega'): - with defining polynomial x^2 + x + 1 - with omega = -0.50000000000000000? + 0.866025403784439?*I - sage: factor(3 + omega) -- (-1) * (-omega - 3) -+ (omega) * (-3*omega - 2) - sage: CC(omega) - -0.500000000000000 + 0.866025403784439*I - sage: omega.minpoly() -diff --git a/src/sage/rings/number_field/selmer_group.py b/src/sage/rings/number_field/selmer_group.py -index 283db17c84e..a940c95731d 100644 ---- a/src/sage/rings/number_field/selmer_group.py -+++ b/src/sage/rings/number_field/selmer_group.py -@@ -71,7 +71,7 @@ def _ideal_generator(I): - - sage: K. = QuadraticField(-11) - sage: [_ideal_generator(K.prime_above(p)) for p in primes(25)] -- [2, 1/2*a - 1/2, -1/2*a - 3/2, 7, -a, 13, 17, 19, 1/2*a + 9/2] -+ [2, 1/2*a - 1/2, -1/2*a - 3/2, 7, a, 13, 17, 19, 1/2*a + 9/2] - """ - try: - return I.gens_reduced()[0] -@@ -489,9 +489,9 @@ def pSelmerGroup(K, S, p, proof=None, debug=False): - - sage: [K.ideal(g).factor() for g in gens] - [(Fractional ideal (2, a + 1)) * (Fractional ideal (3, a + 1)), -- Fractional ideal (a), -- (Fractional ideal (2, a + 1))^2, -- 1] -+ Fractional ideal (-a), -+ (Fractional ideal (2, a + 1))^2, -+ 1] - - sage: toKS2(10) - (0, 0, 1, 1) -diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py -index 7275a122c06..67caf77dc11 100644 ---- a/src/sage/rings/polynomial/polynomial_quotient_ring.py -+++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py -@@ -1430,13 +1430,13 @@ def S_class_group(self, S, proof=True): - sage: R. = K[] - sage: S. = R.quotient(x^2 + 23) - sage: S.S_class_group([]) -- [((2, -a + 1, 1/2*xbar + 1/2, -1/2*a*xbar + 1/2*a + 1), 6)] -+ [((2, a + 1, -1/2*xbar + 3/2, 1/2*a*xbar - 1/2*a + 1), 6)] - sage: S.S_class_group([K.ideal(3, a-1)]) - [] - sage: S.S_class_group([K.ideal(2, a+1)]) - [] - sage: S.S_class_group([K.ideal(a)]) -- [((2, -a + 1, 1/2*xbar + 1/2, -1/2*a*xbar + 1/2*a + 1), 6)] -+ [((2, a + 1, -1/2*xbar + 3/2, 1/2*a*xbar - 1/2*a + 1), 6)] - - Now we take an example over a nontrivial base with two factors, each - contributing to the class group:: -@@ -1496,14 +1496,14 @@ def S_class_group(self, S, proof=True): - sage: C = S.S_class_group([]) - sage: C[:2] - [((1/4*xbar^2 + 31/4, -- (-1/8*a + 1/8)*xbar^2 - 31/8*a + 31/8, -- 1/16*xbar^3 + 1/16*xbar^2 + 31/16*xbar + 31/16, -- -1/16*a*xbar^3 + (1/16*a + 1/8)*xbar^2 - 31/16*a*xbar + 31/16*a + 31/8), -+ (1/8*a + 1/8)*xbar^2 + 31/8*a + 31/8, -+ -1/16*xbar^3 + 3/16*xbar^2 - 31/16*xbar + 93/16, -+ 1/16*a*xbar^3 + (-1/16*a + 1/8)*xbar^2 + 31/16*a*xbar - 31/16*a + 31/8), - 6), - ((-1/4*xbar^2 - 23/4, -- (1/8*a - 1/8)*xbar^2 + 23/8*a - 23/8, -- -1/16*xbar^3 - 1/16*xbar^2 - 23/16*xbar - 23/16, -- 1/16*a*xbar^3 + (-1/16*a - 1/8)*xbar^2 + 23/16*a*xbar - 23/16*a - 23/8), -+ (-1/8*a - 1/8)*xbar^2 - 23/8*a - 23/8, -+ 1/16*xbar^3 + 1/16*xbar^2 + 23/16*xbar + 23/16, -+ -1/16*a*xbar^3 + (1/16*a - 1/8)*xbar^2 - 23/16*a*xbar + 23/16*a - 23/8), - 6)] - sage: C[2][1] - 2 -@@ -1515,11 +1515,11 @@ def S_class_group(self, S, proof=True): - ....: 1/16*a*xbar^3 - 1/16*a*xbar^2 + 23/16*a*xbar - 23/16*a) - sage: gens[0] == expected_gens[0] - True -- sage: gens[1] in (expected_gens[1], expected_gens[1]/2 + expected_gens[0]/2) -+ sage: gens[1] in (expected_gens[1], expected_gens[1]/2 + expected_gens[0]/2, -expected_gens[1]/2 + expected_gens[0]/2) - True -- sage: gens[2] in (expected_gens[2], expected_gens[2] + expected_gens[0]/2) -+ sage: gens[2] in (expected_gens[2], expected_gens[2] + expected_gens[0]/2, -expected_gens[2] + expected_gens[0]/2) - True -- sage: gens[3] in (expected_gens[3], expected_gens[3] + expected_gens[0]/2) -+ sage: gens[3] in (expected_gens[3], expected_gens[3] + expected_gens[0]/2, -expected_gens[3] + expected_gens[0]/2) - True - """ - fields, isos, iso_classes = self._S_decomposition(tuple(S)) -@@ -1612,7 +1612,7 @@ def class_group(self, proof=True): - sage: R. = K[] - sage: S. = R.quotient(x^2 + 23) - sage: S.class_group() -- [((2, -a + 1, 1/2*xbar + 1/2, -1/2*a*xbar + 1/2*a + 1), 6)] -+ [((2, a + 1, -1/2*xbar + 3/2, 1/2*a*xbar - 1/2*a + 1), 6)] - - Here is an example of a product of number fields, both of which - contribute to the class group:: -@@ -1712,19 +1712,19 @@ def S_units(self, S, proof=True): - with defining polynomial x^2 + 3 with a = 1.732050807568878?*I - with modulus y^3 + 5 - sage: [u for u, o in L.S_units([]) if o is Infinity] -- [(-1/3*a - 1)*b^2 - 4/3*a*b - 5/6*a + 7/2, -- 2/3*a*b^2 + (2/3*a - 2)*b - 5/6*a - 7/2] -+ [(-1/3*a - 1)*b^2 - 4/3*a*b - 4/3*a + 3, -+ (-1/3*a - 1)*b^2 + (2/3*a - 2)*b + 13/6*a - 1/2] - sage: [u for u, o in L.S_units([K.ideal(1/2*a - 3/2)]) - ....: if o is Infinity] - [(-1/6*a - 1/2)*b^2 + (1/3*a - 1)*b + 4/3*a, -- (-1/3*a - 1)*b^2 - 4/3*a*b - 5/6*a + 7/2, -- 2/3*a*b^2 + (2/3*a - 2)*b - 5/6*a - 7/2] -+ (-1/3*a - 1)*b^2 - 4/3*a*b - 4/3*a + 3, -+ (-1/3*a - 1)*b^2 + (2/3*a - 2)*b + 13/6*a - 1/2] - sage: [u for u, o in L.S_units([K.ideal(2)]) if o is Infinity] - [(1/2*a - 1/2)*b^2 + (a + 1)*b + 3, -- (1/6*a + 1/2)*b^2 + (-1/3*a + 1)*b - 5/6*a + 1/2, - (1/6*a + 1/2)*b^2 + (-1/3*a + 1)*b - 5/6*a - 1/2, -- (-1/3*a - 1)*b^2 - 4/3*a*b - 5/6*a + 7/2, -- 2/3*a*b^2 + (2/3*a - 2)*b - 5/6*a - 7/2] -+ 1/3*a*b^2 + (1/3*a + 1)*b - 1/6*a + 3/2, -+ (-1/3*a - 1)*b^2 - 4/3*a*b - 4/3*a + 3, -+ (-1/3*a - 1)*b^2 + (2/3*a - 2)*b + 13/6*a - 1/2] - - Note that all the returned values live where we expect them to:: - -@@ -1809,8 +1809,8 @@ def units(self, proof=True): - with defining polynomial x^2 + 3 with a = 1.732050807568878?*I - with modulus y^3 + 5 - sage: [u for u, o in L.units() if o is Infinity] -- [(-1/3*a - 1)*b^2 - 4/3*a*b - 5/6*a + 7/2, -- 2/3*a*b^2 + (2/3*a - 2)*b - 5/6*a - 7/2] -+ [(-1/3*a - 1)*b^2 - 4/3*a*b - 4/3*a + 3, -+ (-1/3*a - 1)*b^2 + (2/3*a - 2)*b + 13/6*a - 1/2] - sage: L. = K.extension(y^3 + 5) - sage: L.unit_group() - Unit group with structure C6 x Z x Z of -@@ -1818,8 +1818,8 @@ def units(self, proof=True): - sage: L.unit_group().gens() # abstract generators - (u0, u1, u2) - sage: L.unit_group().gens_values()[1:] -- [(-1/3*a - 1)*b^2 - 4/3*a*b - 5/6*a + 7/2, -- 2/3*a*b^2 + (2/3*a - 2)*b - 5/6*a - 7/2] -+ [(-1/3*a - 1)*b^2 - 4/3*a*b - 4/3*a + 3, -+ (-1/3*a - 1)*b^2 + (2/3*a - 2)*b + 13/6*a - 1/2] - - Note that all the returned values live where we expect them to:: - -@@ -1877,7 +1877,7 @@ def selmer_generators(self, S, m, proof=True): - sage: D.selmer_generators([K.ideal(2, -a + 1), - ....: K.ideal(3, a + 1), - ....: K.ideal(a)], 3) -- [2, a + 1, -a] -+ [2, a + 1, a] - """ - fields, isos, iso_classes = self._S_decomposition(tuple(S)) - n = len(fields) -diff --git a/src/sage/rings/qqbar.py b/src/sage/rings/qqbar.py -index 3806663eaf0..b7dbede3f97 100644 ---- a/src/sage/rings/qqbar.py -+++ b/src/sage/rings/qqbar.py -@@ -2777,11 +2777,12 @@ def number_field_elements_from_algebraics(numbers, minimal=False, - To: Algebraic Real Field - Defn: a |--> 1.732050807568878?) - sage: number_field_elements_from_algebraics((rt2,qqI)) # needs sage.symbolic -- (Number Field in a with defining polynomial y^4 + 1, [-a^3 + a, a^2], -+ (Number Field in a with defining polynomial y^4 + 1, -+ [a^3 - a, a^2], - Ring morphism: -- From: Number Field in a with defining polynomial y^4 + 1 -- To: Algebraic Field -- Defn: a |--> 0.7071067811865475? + 0.7071067811865475?*I) -+ From: Number Field in a with defining polynomial y^4 + 1 -+ To: Algebraic Field -+ Defn: a |--> -0.7071067811865475? - 0.7071067811865475?*I) - - Note that for the first example, where \sage does not realize that - the number is real, we get a homomorphism to ``QQbar``:: -@@ -4660,8 +4661,7 @@ def _exact_field(self): - Number Field in a with defining polynomial y^4 - 20*y^2 + 81 - with a in -3.789313782671036? - sage: (QQbar(7)^(3/5))._exact_field() -- Number Field in a with defining polynomial -- y^5 - 2*y^4 - 18*y^3 + 38*y^2 + 82*y - 181 with a in 2.554256611698490? -+ Number Field in a with defining polynomial y^5 - 7 with a in 1.475773161594552? - """ - sd = self._descr - if isinstance(sd, (ANRational, ANExtensionElement)): -@@ -4681,7 +4681,7 @@ def _exact_value(self): - sage: (sqrt(QQbar(2)) + sqrt(QQbar(19)))._exact_value() - -1/9*a^3 + a^2 + 11/9*a - 10 where a^4 - 20*a^2 + 81 = 0 and a in -3.789313782671036? - sage: (QQbar(7)^(3/5))._exact_value() -- 2*a^4 + 2*a^3 - 34*a^2 - 17*a + 150 where a^5 - 2*a^4 - 18*a^3 + 38*a^2 + 82*a - 181 = 0 and a in 2.554256611698490? -+ a^3 where a^5 - 7 = 0 and a in 1.475773161594552? - """ - sd = self._descr - if isinstance(sd, (ANRational, ANExtensionElement)): -@@ -7925,8 +7925,8 @@ def handle_sage_input(self, sib, coerce, is_qqbar): - sage: sage_input(v, verify=True) - # Verified - R. = QQ[] -- v = QQbar.polynomial_root(AA.common_polynomial(y^8 - y^7 + y^5 - y^4 + y^3 - y + 1), CIF(RIF(RR(0.91354545764260087), RR(0.91354545764260098)), RIF(RR(0.40673664307580015), RR(0.40673664307580021)))) -- v^5 + v^3 -+ v = QQbar.polynomial_root(AA.common_polynomial(y^8 - y^7 + y^5 - y^4 + y^3 - y + 1), CIF(RIF(RR(0.66913060635885813), RR(0.66913060635885824)), RIF(-RR(0.74314482547739424), -RR(0.74314482547739413)))) -+ v^6 + v^5 - sage: v = QQbar(sqrt(AA(2))) - sage: v.exactify() - sage: sage_input(v, verify=True) -diff --git a/src/sage/rings/rational.pyx b/src/sage/rings/rational.pyx -index 68ee004a251..d1def05ac18 100644 ---- a/src/sage/rings/rational.pyx -+++ b/src/sage/rings/rational.pyx -@@ -1558,7 +1558,7 @@ cdef class Rational(sage.structure.element.FieldElement): - EXAMPLES:: - - sage: QQ(2)._bnfisnorm(QuadraticField(-1, 'i')) # needs sage.rings.number_field -- (i + 1, 1) -+ (i - 1, 1) - sage: x = polygen(QQ, 'x') - sage: 7._bnfisnorm(NumberField(x^3 - 2, 'b')) # needs sage.rings.number_field - (1, 7) -diff --git a/src/sage/schemes/affine/affine_morphism.py b/src/sage/schemes/affine/affine_morphism.py -index 0eba4c662ec..2208cefca1d 100644 ---- a/src/sage/schemes/affine/affine_morphism.py -+++ b/src/sage/schemes/affine/affine_morphism.py -@@ -1158,13 +1158,11 @@ def reduce_base_field(self): - sage: H = End(A) - sage: f = H([QQbar(3^(1/3))*x^2 + QQbar(sqrt(-2))]) # needs sage.symbolic - sage: f.reduce_base_field() # needs sage.symbolic -- Scheme endomorphism of Affine Space of dimension 1 over Number -- Field in a with defining polynomial y^6 + 6*y^4 - 6*y^3 + 12*y^2 + 36*y + 17 -- with a = 1.442249570307409? + 1.414213562373095?*I -+ Scheme endomorphism of Affine Space of dimension 1 over Number Field in a with defining polynomial y^6 + 6*y^4 - 6*y^3 + 12*y^2 + 36*y + 17 with a = 1.442249570307409? - 1.414213562373095?*I - Defn: Defined on coordinates by sending (x) to - ((-48/269*a^5 + 27/269*a^4 - 320/269*a^3 + 468/269*a^2 - 772/269*a -- - 1092/269)*x^2 + (48/269*a^5 - 27/269*a^4 + 320/269*a^3 - 468/269*a^2 -- + 1041/269*a + 1092/269)) -+ - 1092/269)*x^2 + (-48/269*a^5 + 27/269*a^4 - 320/269*a^3 + 468/269*a^2 -+ - 1041/269*a - 1092/269)) - - :: - -diff --git a/src/sage/schemes/berkovich/berkovich_space.py b/src/sage/schemes/berkovich/berkovich_space.py -index f5455937b43..1330c408f4a 100644 ---- a/src/sage/schemes/berkovich/berkovich_space.py -+++ b/src/sage/schemes/berkovich/berkovich_space.py -@@ -201,7 +201,7 @@ def ideal(self): - sage: ideal = A.prime_above(5) - sage: B = Berkovich_Cp_Projective(A, ideal) - sage: B.ideal() -- Fractional ideal (-a - 2) -+ Fractional ideal (2*a - 1) - - :: - -diff --git a/src/sage/schemes/elliptic_curves/ell_field.py b/src/sage/schemes/elliptic_curves/ell_field.py -index 3ff2826f3e7..2fecf7e4696 100644 ---- a/src/sage/schemes/elliptic_curves/ell_field.py -+++ b/src/sage/schemes/elliptic_curves/ell_field.py -@@ -902,7 +902,7 @@ def division_field(self, n, names='t', map=False, **kwds): - by y^2 = x^3 + 5*a0*x^2 + (-200*a0^2)*x + (-42000*a0^2+42000*a0+126000) - over Number Field in a0 with defining polynomial x^3 - 3*x^2 + 3*x + 9 - sage: K. = E.division_field(3, simplify_all=True); K -- Number Field in b with defining polynomial x^12 - 25*x^10 + 130*x^8 + 645*x^6 + 1050*x^4 + 675*x^2 + 225 -+ Number Field in b with defining polynomial x^12 + 5*x^10 + 40*x^8 + 315*x^6 + 750*x^4 + 675*x^2 + 2025 - - Some higher-degree examples:: - -diff --git a/src/sage/schemes/elliptic_curves/ell_local_data.py b/src/sage/schemes/elliptic_curves/ell_local_data.py -index 7434659b5a2..df076ed62b6 100644 ---- a/src/sage/schemes/elliptic_curves/ell_local_data.py -+++ b/src/sage/schemes/elliptic_curves/ell_local_data.py -@@ -1161,7 +1161,7 @@ def check_prime(K, P): - sage: check_prime(K, a + 1) - Fractional ideal (a + 1) - sage: [check_prime(K, P) for P in K.primes_above(31)] -- [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] -+ [Fractional ideal (-5/2*a - 1/2), Fractional ideal (-5/2*a + 1/2)] - sage: L. = NumberField(x^2 + 3) - sage: check_prime(K, L.ideal(5)) - Traceback (most recent call last): -diff --git a/src/sage/schemes/elliptic_curves/ell_number_field.py b/src/sage/schemes/elliptic_curves/ell_number_field.py -index 8af221880b6..62bbd71e809 100644 ---- a/src/sage/schemes/elliptic_curves/ell_number_field.py -+++ b/src/sage/schemes/elliptic_curves/ell_number_field.py -@@ -229,9 +229,9 @@ def simon_two_descent(self, verbose=0, lim1=2, lim3=4, limtriv=2, - sage: E == loads(dumps(E)) - True - sage: E.simon_two_descent() -- (2, 2, [(0 : 0 : 1), (1/18*a + 7/18 : -5/54*a - 17/54 : 1)]) -+ (2, 2, [(0 : 0 : 1), (1/8*a + 5/8 : -3/16*a - 7/16 : 1)]) - sage: E.simon_two_descent(lim1=5, lim3=5, limtriv=10, maxprob=7, limbigprime=10) -- (2, 2, [(-1 : 0 : 1), (-2 : -1/2*a - 1/2 : 1)]) -+ (2, 2, [(-1 : 0 : 1), (1/2*a - 5/2 : -1/2*a - 13/2 : 1)]) - - :: - -@@ -277,7 +277,7 @@ def simon_two_descent(self, verbose=0, lim1=2, lim3=4, limtriv=2, - sage: E.simon_two_descent() # long time (4s on sage.math, 2013) - (3, - 3, -- [(1/8*zeta43_0^2 - 3/8*zeta43_0 - 1/4 : -5/16*zeta43_0^2 + 7/16*zeta43_0 + 1/8 : 1), -+ [(-1/2*zeta43_0^2 - 1/2*zeta43_0 + 7 : -3/2*zeta43_0^2 - 5/2*zeta43_0 + 18 : 1), - (0 : 0 : 1)]) - """ - verbose = int(verbose) -@@ -872,7 +872,7 @@ def local_data(self, P=None, proof=None, algorithm='pari', globally=False): - sage: K. = NumberField(x^2 + 1) - sage: E = EllipticCurve([1 + i, 0, 1, 0, 0]) - sage: E.local_data() -- [Local data at Fractional ideal (2*i + 1): -+ [Local data at Fractional ideal (-2*i - 1): - Reduction type: bad non-split multiplicative - Local minimal model: Elliptic Curve defined by y^2 + (i+1)*x*y + y = x^3 - over Number Field in i with defining polynomial x^2 + 1 -@@ -880,7 +880,7 @@ def local_data(self, P=None, proof=None, algorithm='pari', globally=False): - Conductor exponent: 1 - Kodaira Symbol: I1 - Tamagawa Number: 1, -- Local data at Fractional ideal (-2*i + 3): -+ Local data at Fractional ideal (3*i + 2): - Reduction type: bad split multiplicative - Local minimal model: Elliptic Curve defined by y^2 + (i+1)*x*y + y = x^3 - over Number Field in i with defining polynomial x^2 + 1 -@@ -898,7 +898,7 @@ def local_data(self, P=None, proof=None, algorithm='pari', globally=False): - Kodaira Symbol: I0 - Tamagawa Number: 1 - sage: E.local_data(2*i + 1) -- Local data at Fractional ideal (2*i + 1): -+ Local data at Fractional ideal (-2*i - 1): - Reduction type: bad non-split multiplicative - Local minimal model: Elliptic Curve defined by y^2 + (i+1)*x*y + y = x^3 - over Number Field in i with defining polynomial x^2 + 1 -@@ -1456,8 +1456,10 @@ def kodaira_symbol(self, P, proof=None): - sage: K. = NumberField(x^2 - 5) - sage: E = EllipticCurve([20, 225, 750, 625*a + 6875, 31250*a + 46875]) - sage: bad_primes = E.discriminant().support(); bad_primes -- [Fractional ideal (-a), Fractional ideal (7/2*a - 81/2), -- Fractional ideal (-a - 52), Fractional ideal (2)] -+ [Fractional ideal (-a), -+ Fractional ideal (-7/2*a + 81/2), -+ Fractional ideal (-a - 52), -+ Fractional ideal (2)] - sage: [E.kodaira_symbol(P) for P in bad_primes] - [I0, I1, I1, II] - sage: K. = QuadraticField(-11) -@@ -1483,10 +1485,10 @@ def conductor(self): - - sage: K. = NumberField(x^2 + 1) - sage: EllipticCurve([i, i - 1, i + 1, 24*i + 15, 14*i + 35]).conductor() -- Fractional ideal (21*i - 3) -+ Fractional ideal (3*i + 21) - sage: K. = NumberField(x^2 - x + 3) - sage: EllipticCurve([1 + a, -1 + a, 1 + a, -11 + a, 5 - 9*a]).conductor() -- Fractional ideal (-6*a) -+ Fractional ideal (6*a) - - A not so well known curve with everywhere good reduction:: - -@@ -2584,8 +2586,8 @@ def isogeny_class(self, reducible_primes=None, algorithm='Billerey', minimal_mod - sage: [E1.ainvs() for E1 in C] - [(0, 0, 0, 0, -27), - (0, 0, 0, 0, 1), -- (i + 1, i, i + 1, -i + 3, 4*i), -- (i + 1, i, i + 1, -i + 33, -58*i)] -+ (i + 1, i, 0, 3, -i), -+ (i + 1, i, 0, 33, 91*i)] - - The matrix of degrees of cyclic isogenies between curves:: - -@@ -2616,13 +2618,13 @@ class :class:`EllipticCurveIsogeny` allowed composition. In - sage: [((i,j), isogs[i][j].x_rational_map()) - ....: for i in range(4) for j in range(4) if isogs[i][j] != 0] - [((0, 1), (1/9*x^3 - 12)/x^2), -- ((0, 3), (-1/2*i*x^2 + i*x - 12*i)/(x - 3)), -+ ((0, 3), (1/2*i*x^2 - 2*i*x + 15*i)/(x - 3)), - ((1, 0), (x^3 + 4)/x^2), -- ((1, 2), (-1/2*i*x^2 - i*x - 2*i)/(x + 1)), -- ((2, 1), (1/2*i*x^2 - x)/(x + 3/2*i)), -- ((2, 3), (x^3 + 4*i*x^2 - 10*x - 10*i)/(x^2 + 4*i*x - 4)), -- ((3, 0), (1/2*i*x^2 + x + 4*i)/(x - 5/2*i)), -- ((3, 2), (1/9*x^3 - 4/3*i*x^2 - 34/3*x + 226/9*i)/(x^2 - 8*i*x - 16))] -+ ((1, 2), (1/2*i*x^2 + i)/(x + 1)), -+ ((2, 1), (-1/2*i*x^2 - 1/2*i)/(x - 1/2*i)), -+ ((2, 3), (x^3 - 2*i*x^2 - 7*x + 4*i)/(x^2 - 2*i*x - 1)), -+ ((3, 0), (-1/2*i*x^2 + 2*x - 5/2*i)/(x + 7/2*i)), -+ ((3, 2), (1/9*x^3 + 2/3*i*x^2 - 13/3*x - 116/9*i)/(x^2 + 10*i*x - 25))] - - The isogeny class may be visualized by obtaining its graph and - plotting it:: -@@ -3103,10 +3105,10 @@ def is_isogenous(self, other, proof=True, maxnorm=100): - sage: K. = QuadraticField(-1) - sage: E1 = EllipticCurve([i + 1, 0, 1, -240*i - 400, -2869*i - 2627]) - sage: E1.conductor() -- Fractional ideal (-4*i - 7) -+ Fractional ideal (4*i + 7) - sage: E2 = EllipticCurve([1+i,0,1,0,0]) - sage: E2.conductor() -- Fractional ideal (-4*i - 7) -+ Fractional ideal (4*i + 7) - sage: E1.is_isogenous(E2) # long time - True - sage: E1.is_isogenous(E2, proof=False) # faster (~170ms) -@@ -3433,8 +3435,8 @@ def lll_reduce(self, points, height_matrix=None, precision=None): - sage: Q = E(0,-1) - sage: E.lll_reduce([P,Q]) - ( -- [0 1] -- [(0 : -1 : 1), (-2 : -1/2*a - 1/2 : 1)], [1 0] -+ [ 0 -1] -+ [(0 : -1 : 1), (-2 : 1/2*a - 1/2 : 1)], [ 1 0] - ) - - :: -@@ -3445,9 +3447,10 @@ def lll_reduce(self, points, height_matrix=None, precision=None): - ....: E.point([-17/18*a - 1/9, -109/108*a - 277/108])] - sage: E.lll_reduce(points) - ( -- [(-a + 4 : -3*a + 7 : 1), (-17/18*a - 1/9 : 109/108*a + 277/108 : 1)], -- [ 1 0] -- [ 1 -1] -+ [(-a + 4 : -3*a + 7 : 1), (-17/18*a - 1/9 : -109/108*a - 277/108 : 1)], -+ -+ [1 0] -+ [1 1] - ) - """ - r = len(points) -diff --git a/src/sage/schemes/elliptic_curves/ell_point.py b/src/sage/schemes/elliptic_curves/ell_point.py -index d05196240a1..5b4cdab67e9 100644 ---- a/src/sage/schemes/elliptic_curves/ell_point.py -+++ b/src/sage/schemes/elliptic_curves/ell_point.py -@@ -3054,9 +3054,9 @@ def has_good_reduction(self, P=None): - sage: E = EllipticCurve(K, [0,1,0,-160,308]) - sage: P = E(26, -120) - sage: E.discriminant().support() -- [Fractional ideal (i + 1), -- Fractional ideal (-i - 2), -- Fractional ideal (2*i + 1), -+ [Fractional ideal (i - 1), -+ Fractional ideal (2*i - 1), -+ Fractional ideal (-2*i - 1), - Fractional ideal (3)] - sage: [E.tamagawa_exponent(p) for p in E.discriminant().support()] - [1, 4, 4, 4] -diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py -index 134531ad1a5..27b33b46e67 100644 ---- a/src/sage/schemes/elliptic_curves/ell_rational_field.py -+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py -@@ -1863,7 +1863,7 @@ def simon_two_descent(self, verbose=0, lim1=5, lim3=50, limtriv=3, - sage: E = EllipticCurve('389a1') - sage: E._known_points = [] # clear cached points - sage: E.simon_two_descent() -- (2, 2, [(5/4 : 5/8 : 1), (-3/4 : 7/8 : 1)]) -+ (2, 2, [(-3/4 : 7/8 : 1), (5/4 : 5/8 : 1)]) - sage: E = EllipticCurve('5077a1') - sage: E.simon_two_descent() - (3, 3, [(1 : 0 : 1), (2 : 0 : 1), (0 : 2 : 1)]) -diff --git a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py -index 7824893b05f..609aab5f4bf 100644 ---- a/src/sage/schemes/elliptic_curves/gal_reps_number_field.py -+++ b/src/sage/schemes/elliptic_curves/gal_reps_number_field.py -@@ -800,17 +800,17 @@ def deg_one_primes_iter(K, principal_only=False): - [Fractional ideal (2, a + 1), - Fractional ideal (3, a + 1), - Fractional ideal (3, a + 2), -- Fractional ideal (a), -+ Fractional ideal (-a), - Fractional ideal (7, a + 3), - Fractional ideal (7, a + 4)] - sage: it = deg_one_primes_iter(K, True) - sage: [next(it) for _ in range(6)] -- [Fractional ideal (a), -- Fractional ideal (-2*a + 3), -- Fractional ideal (2*a + 3), -+ [Fractional ideal (-a), -+ Fractional ideal (2*a - 3), -+ Fractional ideal (-2*a - 3), - Fractional ideal (a + 6), - Fractional ideal (a - 6), -- Fractional ideal (-3*a + 4)] -+ Fractional ideal (3*a - 4)] - """ - # imaginary quadratic fields have no principal primes of norm < disc / 4 - start = K.discriminant().abs() // 4 if principal_only and K.signature() == (0,1) else 2 -diff --git a/src/sage/schemes/elliptic_curves/gp_simon.py b/src/sage/schemes/elliptic_curves/gp_simon.py -index 6be377e2f74..4134ae1b7a6 100644 ---- a/src/sage/schemes/elliptic_curves/gp_simon.py -+++ b/src/sage/schemes/elliptic_curves/gp_simon.py -@@ -49,7 +49,7 @@ def simon_two_descent(E, verbose=0, lim1=None, lim3=None, limtriv=None, - doctest:warning...: - DeprecationWarning: please use the 2-descent algorithm over QQ inside pari - See https://github.com/sagemath/sage/issues/38461 for details. -- (2, 2, [(5/4 : 5/8 : 1), (-3/4 : 7/8 : 1)]) -+ (2, 2, [(-3/4 : 7/8 : 1), (5/4 : 5/8 : 1)]) - - TESTS:: - -diff --git a/src/sage/schemes/elliptic_curves/isogeny_class.py b/src/sage/schemes/elliptic_curves/isogeny_class.py -index 13edc68a022..a83fd8705ac 100644 ---- a/src/sage/schemes/elliptic_curves/isogeny_class.py -+++ b/src/sage/schemes/elliptic_curves/isogeny_class.py -@@ -223,8 +223,8 @@ def _repr_(self): - sage: C.curves - [Elliptic Curve defined by y^2 = x^3 + (-27) over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, - Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, -- Elliptic Curve defined by y^2 + (i+1)*x*y + (i+1)*y = x^3 + i*x^2 + (-i+3)*x + 4*i over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, -- Elliptic Curve defined by y^2 + (i+1)*x*y + (i+1)*y = x^3 + i*x^2 + (-i+33)*x + (-58*i) over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] -+ Elliptic Curve defined by y^2 + (i+1)*x*y = x^3 + i*x^2 + 3*x + (-i) over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, -+ Elliptic Curve defined by y^2 + (i+1)*x*y = x^3 + i*x^2 + 33*x + 91*i over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] - """ - if self._label: - return "Elliptic curve isogeny class %s" % (self._label) -@@ -615,8 +615,8 @@ def __init__(self, E, reducible_primes=None, algorithm='Billerey', minimal_model - sage: [E1.ainvs() for E1 in C] - [(0, 0, 0, 0, -27), - (0, 0, 0, 0, 1), -- (i + 1, i, i + 1, -i + 3, 4*i), -- (i + 1, i, i + 1, -i + 33, -58*i)] -+ (i + 1, i, 0, 3, -i), -+ (i + 1, i, 0, 33, 91*i)] - - The matrix of degrees of cyclic isogenies between curves:: - -@@ -647,13 +647,13 @@ class :class:`EllipticCurveIsogeny` allowed composition. In - sage: [((i,j), isogs[i][j].x_rational_map()) - ....: for i in range(4) for j in range(4) if isogs[i][j] != 0] - [((0, 1), (1/9*x^3 - 12)/x^2), -- ((0, 3), (-1/2*i*x^2 + i*x - 12*i)/(x - 3)), -+ ((0, 3), (1/2*i*x^2 - 2*i*x + 15*i)/(x - 3)), - ((1, 0), (x^3 + 4)/x^2), -- ((1, 2), (-1/2*i*x^2 - i*x - 2*i)/(x + 1)), -- ((2, 1), (1/2*i*x^2 - x)/(x + 3/2*i)), -- ((2, 3), (x^3 + 4*i*x^2 - 10*x - 10*i)/(x^2 + 4*i*x - 4)), -- ((3, 0), (1/2*i*x^2 + x + 4*i)/(x - 5/2*i)), -- ((3, 2), (1/9*x^3 - 4/3*i*x^2 - 34/3*x + 226/9*i)/(x^2 - 8*i*x - 16))] -+ ((1, 2), (1/2*i*x^2 + i)/(x + 1)), -+ ((2, 1), (-1/2*i*x^2 - 1/2*i)/(x - 1/2*i)), -+ ((2, 3), (x^3 - 2*i*x^2 - 7*x + 4*i)/(x^2 - 2*i*x - 1)), -+ ((3, 0), (-1/2*i*x^2 + 2*x - 5/2*i)/(x + 7/2*i)), -+ ((3, 2), (1/9*x^3 + 2/3*i*x^2 - 13/3*x - 116/9*i)/(x^2 + 10*i*x - 25))] - - sage: K. = QuadraticField(-1) - sage: E = EllipticCurve([1+i, -i, i, 1, 0]) -diff --git a/src/sage/schemes/elliptic_curves/isogeny_small_degree.py b/src/sage/schemes/elliptic_curves/isogeny_small_degree.py -index 6a0194fb0f9..90f7382a94e 100644 ---- a/src/sage/schemes/elliptic_curves/isogeny_small_degree.py -+++ b/src/sage/schemes/elliptic_curves/isogeny_small_degree.py -@@ -886,15 +886,15 @@ def isogenies_5_0(E, minimal_models=True): - from Elliptic Curve defined by y^2 + y = x^3 - over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 - to Elliptic Curve defined by -- y^2 + y = x^3 + (241565/32*a^5-362149/48*a^4+180281/24*a^3-9693307/4*a^2+14524871/6*a-7254985/3)*x -- + (1660391123/192*a^5-829315373/96*a^4+77680504/9*a^3-66622345345/24*a^2+33276655441/12*a-24931615912/9) -+ y^2 + y = x^3 + (643/8*a^5-15779/48*a^4-32939/24*a^3-71989/2*a^2+214321/6*a-112115/3)*x -+ + (2901961/96*a^5+4045805/48*a^4+12594215/18*a^3-30029635/6*a^2+15341626/3*a-38944312/9) - over Number Field in a with defining polynomial x^6 - 320*x^3 - 320, - Isogeny of degree 5 - from Elliptic Curve defined by y^2 + y = x^3 - over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 - to Elliptic Curve defined by -- y^2 + y = x^3 + (47519/32*a^5-72103/48*a^4+32939/24*a^3-1909753/4*a^2+2861549/6*a-1429675/3)*x -- + (-131678717/192*a^5+65520419/96*a^4-12594215/18*a^3+5280985135/24*a^2-2637787519/12*a+1976130088/9) -+ y^2 + y = x^3 + (-1109/8*a^5-53873/48*a^4-180281/24*a^3-14491/2*a^2+35899/6*a-43745/3)*x -+ + (-17790679/96*a^5-60439571/48*a^4-77680504/9*a^3+1286245/6*a^2-4961854/3*a-73854632/9) - over Number Field in a with defining polynomial x^6 - 320*x^3 - 320] - """ - F = E.base_field() -diff --git a/src/sage/schemes/plane_conics/con_number_field.py b/src/sage/schemes/plane_conics/con_number_field.py -index e09a1f60262..2b084b57dc6 100644 ---- a/src/sage/schemes/plane_conics/con_number_field.py -+++ b/src/sage/schemes/plane_conics/con_number_field.py -@@ -121,7 +121,7 @@ def has_rational_point(self, point=False, obstruction=False, - sage: K. = QuadraticField(-1) - sage: C = Conic(K, [1, 3, -5]) - sage: C.has_rational_point(point=True, obstruction=True) -- (False, Fractional ideal (-i - 2)) -+ (False, Fractional ideal (2*i - 1)) - sage: C.has_rational_point(algorithm='rnfisnorm') - False - sage: C.has_rational_point(algorithm='rnfisnorm', obstruction=True, -@@ -135,7 +135,7 @@ def has_rational_point(self, point=False, obstruction=False, - sage: L. = NumberField(x^3 - 5) - sage: C = Conic(L, [1, 2, -3]) - sage: C.has_rational_point(point=True, algorithm='rnfisnorm') -- (True, (5/3 : -1/3 : 1)) -+ (True, (-5/3 : 1/3 : 1)) - - sage: K. = NumberField(x^4+2) - sage: Conic(QQ, [4,5,6]).has_rational_point() -diff --git a/src/sage/schemes/projective/projective_morphism.py b/src/sage/schemes/projective/projective_morphism.py -index 20031e81a41..fcbb0c01e82 100644 ---- a/src/sage/schemes/projective/projective_morphism.py -+++ b/src/sage/schemes/projective/projective_morphism.py -@@ -928,7 +928,7 @@ def normalize_coordinates(self, **kwds): - Dynamical System of Projective Space of dimension 1 over - Number Field in a with defining polynomial 3*x^2 + 1 - Defn: Defined on coordinates by sending (z : w) to -- ((-3/2*a + 1/2)*z^2 + (-3/2*a + 1/2)*w^2 : (-3/2*a - 3/2)*z*w) -+ ((3/2*a + 1/2)*z^2 + (3/2*a + 1/2)*w^2 : (-3/2*a + 3/2)*z*w) - - :: - -@@ -1728,11 +1728,11 @@ def _number_field_from_algebraics(self): - sage: f._number_field_from_algebraics() # needs sage.symbolic - Scheme endomorphism of Projective Space of dimension 1 over Number - Field in a with defining polynomial y^6 + 6*y^4 - 6*y^3 + 12*y^2 + 36*y + 17 -- with a = 1.442249570307409? + 1.414213562373095?*I -+ with a = 1.442249570307409? - 1.414213562373095?*I - Defn: Defined on coordinates by sending (x : y) to - ((-48/269*a^5 + 27/269*a^4 - 320/269*a^3 + 468/269*a^2 - 772/269*a -- - 1092/269)*x^2 + (48/269*a^5 - 27/269*a^4 + 320/269*a^3 - 468/269*a^2 -- + 1041/269*a + 1092/269)*y^2 : y^2) -+ - 1092/269)*x^2 + (-48/269*a^5 + 27/269*a^4 - 320/269*a^3 + 468/269*a^2 -+ - 1041/269*a - 1092/269)*y^2 : y^2) - - :: - -@@ -1745,12 +1745,12 @@ def _number_field_from_algebraics(self): - Scheme morphism: - From: Projective Space of dimension 1 over Number Field in a - with defining polynomial y^4 + 3*y^2 + 1 -- with a = 0.?e-113 + 0.618033988749895?*I -+ with a = 0.?e-166 + 1.618033988749895?*I - To: Projective Space of dimension 2 over Number Field in a - with defining polynomial y^4 + 3*y^2 + 1 -- with a = 0.?e-113 + 0.618033988749895?*I -+ with a = 0.?e-166 + 1.618033988749895?*I - Defn: Defined on coordinates by sending (x : y) to -- (x^2 + (a^3 + 2*a)*x*y + 3*y^2 : y^2 : (2*a^2 + 3)*x*y) -+ (x^2 + (-a^3 - 2*a)*x*y + 3*y^2 : y^2 : (-2*a^2 - 3)*x*y) - - The following was fixed in :issue:`23808`:: - -diff --git a/src/sage/schemes/projective/projective_point.py b/src/sage/schemes/projective/projective_point.py -index 88ab4eadcfc..95ee97a7d19 100644 ---- a/src/sage/schemes/projective/projective_point.py -+++ b/src/sage/schemes/projective/projective_point.py -@@ -1246,10 +1246,10 @@ def _number_field_from_algebraics(self): - sage: P. = ProjectiveSpace(QQbar, 1) - sage: Q = P([-1/2*QQbar(sqrt(2)) + QQbar(I), 1]) - sage: S = Q._number_field_from_algebraics(); S -- (1/2*a^3 + a^2 - 1/2*a : 1) -+ (-1/2*a^3 + a^2 + 1/2*a : 1) - sage: S.codomain() - Projective Space of dimension 1 over Number Field in a with defining -- polynomial y^4 + 1 with a = 0.7071067811865475? + 0.7071067811865475?*I -+ polynomial y^4 + 1 with a = -0.7071067811865475? - 0.7071067811865475?*I - - The following was fixed in :issue:`23808`:: - -@@ -1259,7 +1259,7 @@ def _number_field_from_algebraics(self): - sage: Q = P([-1/2*QQbar(sqrt(2)) + QQbar(I), 1]);Q - (-0.7071067811865475? + 1*I : 1) - sage: S = Q._number_field_from_algebraics(); S -- (1/2*a^3 + a^2 - 1/2*a : 1) -+ (-1/2*a^3 + a^2 + 1/2*a : 1) - sage: T = S.change_ring(QQbar) # Used to fail - sage: T - (-0.7071067811865475? + 1.000000000000000?*I : 1) -diff --git a/src/sage/structure/factorization.py b/src/sage/structure/factorization.py -index ab3fa717031..b16822791dc 100644 ---- a/src/sage/structure/factorization.py -+++ b/src/sage/structure/factorization.py -@@ -143,17 +143,17 @@ - sage: K. = NumberField(x^2 + 3); K - Number Field in a with defining polynomial x^2 + 3 - sage: f = K.factor(15); f -- (Fractional ideal (1/2*a + 3/2))^2 * (Fractional ideal (5)) -+ (Fractional ideal (-a))^2 * (Fractional ideal (5)) - sage: f.universe() - Monoid of ideals of Number Field in a with defining polynomial x^2 + 3 - sage: f.unit() - Fractional ideal (1) - sage: g = K.factor(9); g -- (Fractional ideal (1/2*a + 3/2))^4 -+ (Fractional ideal (-a))^4 - sage: f.lcm(g) -- (Fractional ideal (1/2*a + 3/2))^4 * (Fractional ideal (5)) -+ (Fractional ideal (-a))^4 * (Fractional ideal (5)) - sage: f.gcd(g) -- (Fractional ideal (1/2*a + 3/2))^2 -+ (Fractional ideal (-a))^2 - sage: f.is_integral() - True - -diff --git a/src/sage/symbolic/constants.py b/src/sage/symbolic/constants.py -index 20a293fbb7b..dac8c4bc833 100644 ---- a/src/sage/symbolic/constants.py -+++ b/src/sage/symbolic/constants.py -@@ -38,8 +38,7 @@ - sage: gap(pi) - pi - sage: gp(pi) -- 3.141592653589793238462643383 # 32-bit -- 3.1415926535897932384626433832795028842 # 64-bit -+ 3.1415926535897932384626433832795028842 - sage: pari(pi) - 3.14159265358979 - sage: kash(pi) # optional - kash -@@ -63,8 +62,7 @@ - sage: RealField(15)(a) # 15 *bits* of precision - 5.316 - sage: gp(a) -- 5.316218116357029426750873360 # 32-bit -- 5.3162181163570294267508733603616328824 # 64-bit -+ 5.3162181163570294267508733603616328824 - sage: print(mathematica(a)) # optional - mathematica - 4 E - --- + Pi -@@ -882,8 +880,7 @@ class Log2(Constant): - sage: maxima(log2).float() - 0.6931471805599453 - sage: gp(log2) -- 0.6931471805599453094172321215 # 32-bit -- 0.69314718055994530941723212145817656807 # 64-bit -+ 0.69314718055994530941723212145817656807 - sage: RealField(150)(2).log() - 0.69314718055994530941723212145817656807550013 - """ -diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx -index da4d5db908f..3c2f93e3355 100644 ---- a/src/sage/symbolic/expression.pyx -+++ b/src/sage/symbolic/expression.pyx -@@ -9799,8 +9799,7 @@ cdef class Expression(Expression_abc): - :: - - sage: gp('gamma(1+I)') -- 0.4980156681183560427136911175 - 0.1549498283018106851249551305*I # 32-bit -- 0.49801566811835604271369111746219809195 - 0.15494982830181068512495513048388660520*I # 64-bit -+ 0.49801566811835604271369111746219809195 - 0.15494982830181068512495513048388660520*I - - We plot the familiar plot of this log-convex function:: - diff --git a/srcpkgs/sagemath/patches/38940-fix_flaky_simplicial_set_test.patch b/srcpkgs/sagemath/patches/38940-fix_flaky_simplicial_set_test.patch deleted file mode 100644 index 1ad003d5d48..00000000000 --- a/srcpkgs/sagemath/patches/38940-fix_flaky_simplicial_set_test.patch +++ /dev/null @@ -1,73 +0,0 @@ -diff --git a/src/sage/categories/simplicial_sets.py b/src/sage/categories/simplicial_sets.py -index 76030be831b..f30ed0ffeb2 100644 ---- a/src/sage/categories/simplicial_sets.py -+++ b/src/sage/categories/simplicial_sets.py -@@ -444,29 +444,31 @@ def covering_map(self, character): - - sage: # needs sage.graphs sage.groups - sage: S1 = simplicial_sets.Sphere(1) -- sage: W = S1.wedge(S1) -+ sage: S1_ = simplicial_sets.Sphere(1) -+ sage: S1_.n_cells(1)[0].rename("sigma_1'") -+ sage: W = S1.wedge(S1_) - sage: G = CyclicPermutationGroup(3) - sage: a, b = W.n_cells(1) - sage: C = W.covering_map({a : G.gen(0), b : G.one()}); C - Simplicial set morphism: - From: Simplicial set with 9 non-degenerate simplices - To: Wedge: (S^1 v S^1) -- Defn: [(*, ()), (*, (1,2,3)), (*, (1,3,2)), (sigma_1, ()), -- (sigma_1, ()), (sigma_1, (1,2,3)), (sigma_1, (1,2,3)), -- (sigma_1, (1,3,2)), (sigma_1, (1,3,2))] -- --> [*, *, *, sigma_1, sigma_1, sigma_1, sigma_1, sigma_1, sigma_1] -+ Defn: [(*, ()), (*, (1,2,3)), (*, (1,3,2)), (sigma_1', ()), -+ (sigma_1', (1,2,3)), (sigma_1', (1,3,2)), (sigma_1, ()), -+ (sigma_1, (1,2,3)), (sigma_1, (1,3,2))] -+ --> [*, *, *, sigma_1', sigma_1', sigma_1', sigma_1, sigma_1, sigma_1] - sage: C.domain() - Simplicial set with 9 non-degenerate simplices - sage: C.domain().face_data() - {(*, ()): None, - (*, (1,2,3)): None, - (*, (1,3,2)): None, -+ (sigma_1', ()): ((*, ()), (*, ())), -+ (sigma_1', (1,2,3)): ((*, (1,2,3)), (*, (1,2,3))), -+ (sigma_1', (1,3,2)): ((*, (1,3,2)), (*, (1,3,2))), - (sigma_1, ()): ((*, (1,2,3)), (*, ())), -- (sigma_1, ()): ((*, ()), (*, ())), - (sigma_1, (1,2,3)): ((*, (1,3,2)), (*, (1,2,3))), -- (sigma_1, (1,2,3)): ((*, (1,2,3)), (*, (1,2,3))), -- (sigma_1, (1,3,2)): ((*, ()), (*, (1,3,2))), -- (sigma_1, (1,3,2)): ((*, (1,3,2)), (*, (1,3,2)))} -+ (sigma_1, (1,3,2)): ((*, ()), (*, (1,3,2)))} - """ - from sage.topology.simplicial_set import AbstractSimplex, SimplicialSet - from sage.topology.simplicial_set_morphism import SimplicialSetMorphism -@@ -530,7 +532,9 @@ def cover(self, character): - - sage: # needs sage.graphs sage.groups - sage: S1 = simplicial_sets.Sphere(1) -- sage: W = S1.wedge(S1) -+ sage: S1_ = simplicial_sets.Sphere(1) -+ sage: S1_.n_cells(1)[0].rename("sigma_1'") -+ sage: W = S1.wedge(S1_) - sage: G = CyclicPermutationGroup(3) - sage: (a, b) = W.n_cells(1) - sage: C = W.cover({a : G.gen(0), b : G.gen(0)^2}) -@@ -538,12 +542,12 @@ def cover(self, character): - {(*, ()): None, - (*, (1,2,3)): None, - (*, (1,3,2)): None, -+ (sigma_1', ()): ((*, (1,3,2)), (*, ())), -+ (sigma_1', (1,2,3)): ((*, ()), (*, (1,2,3))), -+ (sigma_1', (1,3,2)): ((*, (1,2,3)), (*, (1,3,2))), - (sigma_1, ()): ((*, (1,2,3)), (*, ())), -- (sigma_1, ()): ((*, (1,3,2)), (*, ())), - (sigma_1, (1,2,3)): ((*, (1,3,2)), (*, (1,2,3))), -- (sigma_1, (1,2,3)): ((*, ()), (*, (1,2,3))), -- (sigma_1, (1,3,2)): ((*, ()), (*, (1,3,2))), -- (sigma_1, (1,3,2)): ((*, (1,2,3)), (*, (1,3,2)))} -+ (sigma_1, (1,3,2)): ((*, ()), (*, (1,3,2)))} - sage: C.homology(1) # needs sage.modules - Z x Z x Z x Z - sage: C.fundamental_group() diff --git a/srcpkgs/sagemath/patches/38962-eclib_20241112.patch b/srcpkgs/sagemath/patches/38962-eclib_20241112.patch deleted file mode 100644 index a6eb5ed1d47..00000000000 --- a/srcpkgs/sagemath/patches/38962-eclib_20241112.patch +++ /dev/null @@ -1,70 +0,0 @@ -diff --git a/src/sage/libs/eclib/__init__.pxd b/src/sage/libs/eclib/__init__.pxd -index d44d4fba865..2673af0613f 100644 ---- a/src/sage/libs/eclib/__init__.pxd -+++ b/src/sage/libs/eclib/__init__.pxd -@@ -55,7 +55,6 @@ cdef extern from "eclib/matrix.h": - cdef cppclass mat: - mat() - mat(mat m) -- scalar* get_entries() - scalar sub(long, long) - long nrows() - long ncols() -@@ -67,7 +66,6 @@ cdef extern from "eclib/smatrix.h": - cdef cppclass smat: - smat() - smat(smat m) -- scalar* get_entries() - scalar sub(long, long) - long nrows() - long ncols() -diff --git a/src/sage/libs/eclib/mat.pyx b/src/sage/libs/eclib/mat.pyx -index bfdeb6ae5c1..989d9d1a70c 100644 ---- a/src/sage/libs/eclib/mat.pyx -+++ b/src/sage/libs/eclib/mat.pyx -@@ -11,7 +11,6 @@ from sage.matrix.matrix_integer_sparse cimport Matrix_integer_sparse - from sage.matrix.matrix_integer_dense cimport Matrix_integer_dense - from sage.rings.integer cimport Integer - -- - cdef class Matrix: - """ - A Cremona Matrix. -@@ -212,8 +211,7 @@ cdef class Matrix: - - """ - cdef long n = self.nrows() -- cdef long i, j, k -- cdef scalar* v = self.M.get_entries() # coercion needed to deal with const -+ cdef long i, j - - cdef Matrix_integer_dense Td - cdef Matrix_integer_sparse Ts -@@ -221,21 +219,19 @@ cdef class Matrix: - # Ugly code... - if sparse: - Ts = MatrixSpace(ZZ, n, sparse=sparse).zero_matrix().__copy__() -- k = 0 - for i from 0 <= i < n: - for j from 0 <= j < n: -- if v[k]: -- Ts.set_unsafe(i, j, Integer(v[k])) -- k += 1 -+ Mij = Integer(self.M.sub(i+1,j+1)) -+ if Mij: -+ Ts.set_unsafe(i, j, Mij) - return Ts - else: - Td = MatrixSpace(ZZ, n, sparse=sparse).zero_matrix().__copy__() -- k = 0 - for i from 0 <= i < n: - for j from 0 <= j < n: -- if v[k]: -- Td.set_unsafe(i, j, Integer(v[k])) -- k += 1 -+ Mij = Integer(self.M.sub(i+1,j+1)) -+ if Mij: -+ Td.set_unsafe(i, j, Mij) - return Td - - diff --git a/srcpkgs/sagemath/patches/39145-python_3.13_re.sub.patch b/srcpkgs/sagemath/patches/39145-python_3.13_re.sub.patch deleted file mode 100644 index 283ef66751f..00000000000 --- a/srcpkgs/sagemath/patches/39145-python_3.13_re.sub.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py -index d02ae43149f..447b548c1b8 100644 ---- a/src/sage/interfaces/singular.py -+++ b/src/sage/interfaces/singular.py -@@ -1401,7 +1401,7 @@ def _repr_(self): - # this is our cue that singular uses `rp` instead of `ip` - if singular_name_mapping['invlex'] == 'rp' and 'doctest' in str(get_display_manager()): - s = re.sub('^(// .*block.* : ordering )rp$', '\\1ip', -- s, 0, re.MULTILINE) -+ s, flags=re.MULTILINE) - return s - - def __copy__(self): -diff --git a/src/sage/misc/cython.py b/src/sage/misc/cython.py -index c542e0d1919..241078d5f2c 100644 ---- a/src/sage/misc/cython.py -+++ b/src/sage/misc/cython.py -@@ -380,7 +380,7 @@ def cython(filename, verbose=0, compile_message=False, - cython_messages = re.sub( - "^.*The keyword 'nogil' should appear at the end of the function signature line. " - "Placing it before 'except' or 'noexcept' will be disallowed in a future version of Cython.\n", -- "", cython_messages, 0, re.MULTILINE) -+ "", cython_messages, flags=re.MULTILINE) - - sys.stderr.write(cython_messages) - sys.stderr.flush() -diff --git a/src/sage/rings/ring_extension_morphism.pyx b/src/sage/rings/ring_extension_morphism.pyx -index d4aad7f8253..7294e90c319 100644 ---- a/src/sage/rings/ring_extension_morphism.pyx -+++ b/src/sage/rings/ring_extension_morphism.pyx -@@ -461,7 +461,7 @@ cdef class RingExtensionHomomorphism(RingMap): - if self.base_map() is not None: - s += "with map on base ring" - ss = self.base_map()._repr_defn() -- ss = re.sub('\nwith map on base ring:?$', '', ss, 0, re.MULTILINE) -+ ss = re.sub('\nwith map on base ring:?$', '', ss, flags=re.MULTILINE) - if ss != "": s += ":\n" + ss - if s != "" and s[-1] == "\n": - s = s[:-1] diff --git a/srcpkgs/sagemath/patches/39147-python_3.13_doctest.patch b/srcpkgs/sagemath/patches/39147-python_3.13_doctest.patch deleted file mode 100644 index fcd7f537dd6..00000000000 --- a/srcpkgs/sagemath/patches/39147-python_3.13_doctest.patch +++ /dev/null @@ -1,58 +0,0 @@ -diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py -index bf6d49906de..6c36ab47baf 100644 ---- a/src/sage/doctest/forker.py -+++ b/src/sage/doctest/forker.py -@@ -553,6 +553,8 @@ def __init__(self, *args, **kwds): - self.total_walltime_skips = 0 - self.total_performed_tests = 0 - self.total_walltime = 0 -+ if sys.version_info < (3,13): -+ self._stats = self._name2ft - - def _run(self, test, compileflags, out): - """ -@@ -830,7 +832,10 @@ def compiler(example): - self.optionflags = original_optionflags - - # Record and return the number of failures and tries. -- self._DocTestRunner__record_outcome(test, failures, tries) -+ if sys.version_info < (3,13): -+ self._DocTestRunner__record_outcome(test, failures, tries) -+ else: -+ self._DocTestRunner__record_outcome(test, failures, tries, walltime_skips) - self.total_walltime_skips += walltime_skips - self.total_performed_tests += tries - return TestResults(failures, tries) -@@ -931,7 +936,7 @@ def summarize(self, verbose=None): - sage: from sage.doctest.control import DocTestDefaults; DD = DocTestDefaults() - sage: import doctest, sys, os - sage: DTR = SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS) -- sage: DTR._name2ft['sage.doctest.forker'] = (1,120) -+ sage: DTR._stats['sage.doctest.forker'] = (1,120) - sage: results = DTR.summarize() - ********************************************************************** - 1 item had failures: -@@ -946,8 +951,8 @@ def summarize(self, verbose=None): - passed = [] - failed = [] - totalt = totalf = 0 -- for x in self._name2ft.items(): -- name, (f, t) = x -+ for x in self._stats.items(): -+ name, (f, t, *_) = x - assert f <= t - totalt += t - totalf += f -@@ -972,10 +977,10 @@ def summarize(self, verbose=None): - print(self.DIVIDER, file=m) - print(count_noun(len(failed), "item"), "had failures:", file=m) - failed.sort() -- for thing, (f, t) in failed: -+ for thing, (f, t, *_) in failed: - print(" %3d of %3d in %s" % (f, t, thing), file=m) - if verbose: -- print(count_noun(totalt, "test") + " in " + count_noun(len(self._name2ft), "item") + ".", file=m) -+ print(count_noun(totalt, "test") + " in " + count_noun(len(self._stats), "item") + ".", file=m) - print("%s passed and %s failed." % (totalt - totalf, totalf), file=m) - if totalf: - print("***Test Failed***", file=m) diff --git a/srcpkgs/sagemath/patches/39178-giac_1.9.0.998.patch b/srcpkgs/sagemath/patches/39178-giac_1.9.0.998.patch deleted file mode 100644 index 194afc279ab..00000000000 --- a/srcpkgs/sagemath/patches/39178-giac_1.9.0.998.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/src/sage/libs/giac/giac.pyx b/src/sage/libs/giac/giac.pyx -index 65279b16504..7c32771bee8 100644 ---- a/src/sage/libs/giac/giac.pyx -+++ b/src/sage/libs/giac/giac.pyx -@@ -382,13 +382,8 @@ def _giac(s): - sage: (1+2*sin(3*x)).solve(x).simplify() - ...list[-pi/18,7*pi/18] - -- sage: libgiac.solve('sin(3*x)>2*sin(x)',x) -- Traceback (most recent call last): -- ... -- RuntimeError: Unable to find numeric values solving equation. For -- trigonometric equations this may be solved using assumptions, e.g. -- assume(x>-pi && xx',x) -+ list[((x>(-sqrt(2))) and (x<0)),x>(sqrt(2))] - - You can also add some hypothesis to a giac symbol:: - diff --git a/srcpkgs/sagemath/patches/39182-python_3.13_iter.patch b/srcpkgs/sagemath/patches/39182-python_3.13_iter.patch deleted file mode 100644 index feb3267c7ec..00000000000 --- a/srcpkgs/sagemath/patches/39182-python_3.13_iter.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/src/sage/matroids/extension.pyx b/src/sage/matroids/extension.pyx -index 778e6d6ef70..83b792e8d2b 100644 ---- a/src/sage/matroids/extension.pyx -+++ b/src/sage/matroids/extension.pyx -@@ -211,6 +211,9 @@ cdef class LinearSubclassesIter: - - self._nodes = [first_cut] - -+ def __iter__(self): -+ return self -+ - def __next__(self): - """ - Return the next linear subclass. -diff --git a/src/sage/matroids/set_system.pyx b/src/sage/matroids/set_system.pyx -index d9a2f631fbf..0bf9cb2b7fa 100644 ---- a/src/sage/matroids/set_system.pyx -+++ b/src/sage/matroids/set_system.pyx -@@ -772,6 +772,9 @@ cdef class SetSystemIterator: - self._pointer = -1 - self._len = len(H) - -+ def __iter__(self): -+ return self -+ - def __next__(self): - """ - Return the next subset of a SetSystem. diff --git a/srcpkgs/sagemath/patches/39184-python_3.13_produce_latex_macro.patch b/srcpkgs/sagemath/patches/39184-python_3.13_produce_latex_macro.patch deleted file mode 100644 index 2ae7639faa0..00000000000 --- a/srcpkgs/sagemath/patches/39184-python_3.13_produce_latex_macro.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/src/sage/misc/latex_macros.py b/src/sage/misc/latex_macros.py -index fc389b32a72..1cce2fa6f14 100644 ---- a/src/sage/misc/latex_macros.py -+++ b/src/sage/misc/latex_macros.py -@@ -43,6 +43,8 @@ - contain '\newcommand' lines for each of the entries in ``macros``. - """ - -+import importlib -+ - - def produce_latex_macro(name, *sample_args): - r""" -@@ -69,7 +71,7 @@ def produce_latex_macro(name, *sample_args): - sage: produce_latex_macro('GF', 37) - '\\newcommand{\\GF}[1]{\\Bold{F}_{#1}}' - -- If the Sage object is not in the global name space, describe it -+ If the Sage object is not in the global namespace, describe it - like so:: - - sage: produce_latex_macro('sage.rings.finite_rings.finite_field_constructor.FiniteField', 3) -@@ -84,22 +86,16 @@ def produce_latex_macro(name, *sample_args): - else: - module, real_name = names_split - newcommand = '\\newcommand{\\' + real_name + '}' -- count = 0 -- args = "(" -- for x in sample_args: -- count += 1 -- args += str(x) + ',' -- args += ')' -- exec('from ' + module + ' import ' + real_name) -- if count: -- defn = '[' + str(count) + ']{' -- defn += eval('str(LatexCall()(' + real_name + args + '))') + '}' -+ sage_object = getattr(importlib.import_module(module), real_name) -+ if sample_args: -+ defn = '[' + str(len(sample_args)) + ']{' -+ defn += str(LatexCall()(sage_object(*sample_args))) + '}' - else: -- defn = '{' + eval('str(LatexCall()(' + real_name + '))') + '}' -- count = 0 -- for x in sample_args: -- count += 1 -- defn = defn.replace(str(x), "#" + str(count)) -+ defn = '{' + str(LatexCall()(sage_object)) + '}' -+ for i, x in enumerate(sample_args): -+ s = str(x) -+ assert s in defn -+ defn = defn.replace(s, "#" + str(i+1)) - return newcommand + defn - - diff --git a/srcpkgs/sagemath/patches/39185-python_3.13_find_replacements.patch b/srcpkgs/sagemath/patches/39185-python_3.13_find_replacements.patch deleted file mode 100644 index 35b4ee7a442..00000000000 --- a/srcpkgs/sagemath/patches/39185-python_3.13_find_replacements.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/sage/misc/replace_dot_all.py b/src/sage/misc/replace_dot_all.py -index ea51a9b3159..a43d6c0a929 100644 ---- a/src/sage/misc/replace_dot_all.py -+++ b/src/sage/misc/replace_dot_all.py -@@ -194,14 +194,15 @@ def find_replacements(location, package_regex=None, verbose=False): - to_exec = to_exec.replace("'", '').replace('"', '') - if (to_exec[-1] == ','): - to_exec = to_exec[:-1] -- exec(to_exec) -+ glob = dict() -+ exec(to_exec, glob) - except ModuleNotFoundError as err: - print(f'ModuleNotFoundError: {err} found when trying to execute {to_exec}') - except ImportError as err: - print(f'ImportError: {err} found when trying to execute {to_exec}') - - try: # try to evaluate the list of module names to get a list of the modules themselves which we can call import_statements on -- modules = eval(to_eval) -+ modules = eval(to_eval, glob) - except NameError as err: - print(f'NameError: {err} found when trying to evaluate {to_eval} at {location}:{row_index + 1}') - except SyntaxError as err: diff --git a/srcpkgs/sagemath/patches/39187-python_3.13_tests_output.patch b/srcpkgs/sagemath/patches/39187-python_3.13_tests_output.patch deleted file mode 100644 index 53591e7a3d4..00000000000 --- a/srcpkgs/sagemath/patches/39187-python_3.13_tests_output.patch +++ /dev/null @@ -1,142 +0,0 @@ -diff --git a/src/sage/categories/map.pyx b/src/sage/categories/map.pyx -index 43e476847d0..0007555326a 100644 ---- a/src/sage/categories/map.pyx -+++ b/src/sage/categories/map.pyx -@@ -275,7 +275,7 @@ cdef class Map(Element): - maps:: - - sage: phi.domain # needs sage.rings.number_field -- -+ - sage: phi._make_strong_references() # needs sage.rings.number_field - sage: print(phi.domain) # needs sage.rings.number_field - The constant function (...) -> Number Field in a -@@ -343,7 +343,7 @@ cdef class Map(Element): - maps:: - - sage: phi.domain # needs sage.rings.number_field -- -+ - sage: phi._make_strong_references() # needs sage.rings.number_field - sage: print(phi.domain) # needs sage.rings.number_field - The constant function (...) -> Number Field in a -diff --git a/src/sage/misc/bindable_class.py b/src/sage/misc/bindable_class.py -index 743b5a19da6..c23ba0c2c43 100644 ---- a/src/sage/misc/bindable_class.py -+++ b/src/sage/misc/bindable_class.py -@@ -113,7 +113,7 @@ class BindableClass(metaclass=ClasscallMetaclass): - Still, documentation works as usual:: - - sage: outer.Inner.__doc__ -- ' some documentation ' -+ '...some documentation ' - - TESTS:: - -diff --git a/src/sage/misc/sagedoc.py b/src/sage/misc/sagedoc.py -index 0505f6039a9..6147ec4983b 100644 ---- a/src/sage/misc/sagedoc.py -+++ b/src/sage/misc/sagedoc.py -@@ -694,7 +694,7 @@ def format(s, embedded=False): - We check that the todo Sphinx extension is correctly activated:: - - sage: sage.misc.sagedoc.format(sage.combinat.ranker.on_fly.__doc__) # needs sphinx -- " Return ... Todo: add tests as in combinat::rankers\n" -+ "...Return ...Todo: add tests as in combinat::rankers\n" - - In the following use case, the ``nodetex`` directive would have been ignored prior - to :issue:`11815`:: -@@ -1135,10 +1135,11 @@ def search_src(string, extra1='', extra2='', extra3='', extra4='', - The following produces an error because the string 'fetch(' is a - malformed regular expression:: - -- sage: print(search_src(" fetch(", "def", interact=False)) -- Traceback (most recent call last): -- ... -- error: missing ), unterminated subpattern at position 6 -+ sage: try: -+ ....: print(search_src(" fetch(", "def", interact=False)) -+ ....: except Exception as e: -+ ....: print(e) -+ missing ), unterminated subpattern at position 6 - - To fix this, *escape* the parenthesis with a backslash:: - -@@ -1186,7 +1187,6 @@ def search_src(string, extra1='', extra2='', extra3='', extra4='', - misc/sagedoc.py:... len(search_src("matrix", interact=False).splitlines())... - misc/sagedoc.py:... len(search_src("matrix", module="sage.calculus", interact=False).splitlines())... - misc/sagedoc.py:... len(search_src("matrix", path_re="calc"... -- misc/sagedoc.py:... print(search_src(" fetch(", "def", interact=False))... - misc/sagedoc.py:... print(search_src(r" fetch\(", "def", interact=False))... - misc/sagedoc.py:... print(search_src(r" fetch\(", "def", "pyx", interact=False))... - misc/sagedoc.py:... s = search_src('Matrix', path_re='matrix', interact=False); s.find('x') > 0... -@@ -1456,7 +1456,7 @@ class _sage_doc: - sage: browse_sage_doc._open("reference", testing=True)[0] # needs sagemath_doc_html - 'http://localhost:8000/doc/live/reference/index.html' - sage: browse_sage_doc(identity_matrix, 'rst')[-107:-47] # needs sage.modules -- 'Full MatrixSpace of 3 by 3 sparse matrices over Integer Ring' -+ '...Full MatrixSpace of 3 by 3 sparse matrices...' - """ - def __init__(self): - """ -diff --git a/src/sage/misc/sageinspect.py b/src/sage/misc/sageinspect.py -index 585112b5061..12f319fc8e3 100644 ---- a/src/sage/misc/sageinspect.py -+++ b/src/sage/misc/sageinspect.py -@@ -1986,7 +1986,7 @@ def sage_getdoc(obj, obj_name='', embedded=False): - - sage: from sage.misc.sageinspect import sage_getdoc - sage: sage_getdoc(identity_matrix)[87:124] # needs sage.modules -- 'Return the n x n identity matrix over' -+ '...the n x n identity matrix...' - sage: def f(a, b, c, d=1): return a+b+c+d - ... - sage: import functools -diff --git a/src/sage/modular/modsym/modsym.py b/src/sage/modular/modsym/modsym.py -index fb46d0edafa..ed7c9285169 100644 ---- a/src/sage/modular/modsym/modsym.py -+++ b/src/sage/modular/modsym/modsym.py -@@ -369,7 +369,7 @@ def ModularSymbols(group=1, - {} - sage: M = ModularSymbols(11,use_cache=True) - sage: sage.modular.modsym.modsym._cache -- {(Congruence Subgroup Gamma0(11), 2, 0, Rational Field): } -+ {(Congruence Subgroup Gamma0(11), 2, 0, Rational Field): } - sage: M is ModularSymbols(11,use_cache=True) - True - sage: M is ModularSymbols(11,use_cache=False) -diff --git a/src/sage/repl/attach.py b/src/sage/repl/attach.py -index b3e20fe61d8..b9997d8f2df 100644 ---- a/src/sage/repl/attach.py -+++ b/src/sage/repl/attach.py -@@ -40,7 +40,7 @@ - ....: traceback.print_exc(file=sys.stdout) - Traceback (most recent call last): - ... -- exec(preparse_file(f.read()) + "\n", globals) -+ exec(preparse_file(f.read()) + "\n", globals)... - File "", line 3, in - ValueError: third - sage: detach(src) -@@ -52,7 +52,7 @@ - ....: traceback.print_exc(file=sys.stdout) - Traceback (most recent call last): - ... -- exec(code, globals) -+ exec(code, globals)... - File ".../foobar...sage.py", line ..., in - raise ValueError("third") # this should appear in the source snippet... - ValueError: third -diff --git a/src/sage/repl/rich_output/pretty_print.py b/src/sage/repl/rich_output/pretty_print.py -index 93833e01cd8..8e00e3d70e4 100644 ---- a/src/sage/repl/rich_output/pretty_print.py -+++ b/src/sage/repl/rich_output/pretty_print.py -@@ -160,7 +160,7 @@ def pretty_print(self): - sage: seq._concatenate_graphs().show(edge_labels=True) # needs sage.graphs sage.plot - Traceback (most recent call last): - ... -- TypeError: ...matplotlib() got an unexpected keyword argument 'edge_labels' -+ TypeError: ...matplotlib() got an unexpected keyword argument 'edge_labels'... - """ - try: - from sage.plot.plot import Graphics diff --git a/srcpkgs/sagemath/patches/39201-python_3.13_fix_spyx_tmp.patch b/srcpkgs/sagemath/patches/39201-python_3.13_fix_spyx_tmp.patch deleted file mode 100644 index d7107e719e3..00000000000 --- a/srcpkgs/sagemath/patches/39201-python_3.13_fix_spyx_tmp.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/src/sage/misc/temporary_file.py b/src/sage/misc/temporary_file.py -index 998260be8eb..820d5cf2e95 100644 ---- a/src/sage/misc/temporary_file.py -+++ b/src/sage/misc/temporary_file.py -@@ -32,7 +32,9 @@ - # as the parent for all temporary files & directories created by them. - # This lets us clean up after those two functions when sage exits normally - # using an atexit hook --TMP_DIR_FILENAME_BASE = tempfile.TemporaryDirectory() -+# Note that `TemporaryDirectory()` will cleanup on program exit; -+# we keep the atexit hook to be redundant, in case that fails. -+TMP_DIR_FILENAME_BASE = tempfile.TemporaryDirectory(prefix='sage_') - atexit.register(lambda: TMP_DIR_FILENAME_BASE.cleanup()) - - -@@ -533,14 +535,15 @@ def spyx_tmp() -> str: - We cache the result of this function "by hand" so that the same - temporary directory will always be returned. A function is used to - delay creating a directory until (if) it is needed. The temporary -- directory is removed when sage terminates by way of an atexit -- hook. -+ directory is automatically removed when sage terminates. - """ - global _spyx_tmp - if _spyx_tmp: - return _spyx_tmp - -- d = tempfile.TemporaryDirectory() -- _spyx_tmp = os.path.join(d.name, 'spyx') -- atexit.register(lambda: d.cleanup()) -+ # We don't use `tempfile.TemporaryDirectory()` here because it -+ # will be cleaned up on child exit (e.g. for parallel testing) -+ # For some reason this doesn't affect the `TemporaryDirectory` -+ # stored in the global `TMP_DIR_FILENAME_BASE`. -+ _spyx_tmp = tmp_dir(name='spyx_') - return _spyx_tmp diff --git a/srcpkgs/sagemath/patches/39261-scipy_1.15.patch b/srcpkgs/sagemath/patches/39261-scipy_1.15.patch deleted file mode 100644 index 02ad169c070..00000000000 --- a/srcpkgs/sagemath/patches/39261-scipy_1.15.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/src/sage/functions/special.py b/src/sage/functions/special.py -index 308171af3cd..f511190aeff 100644 ---- a/src/sage/functions/special.py -+++ b/src/sage/functions/special.py -@@ -216,11 +216,16 @@ class SphericalHarmonic(BuiltinFunction): - - sage: spherical_harmonic(1, 1, pi/2, pi).n() # abs tol 1e-14 # needs sage.symbolic - 0.345494149471335 -- sage: from scipy.special import sph_harm # NB: arguments x and y are swapped # needs scipy - sage: import numpy as np # needs scipy - sage: if int(np.version.short_version[0]) > 1: # needs scipy - ....: np.set_printoptions(legacy="1.25") # needs scipy -- sage: sph_harm(1, 1, pi.n(), (pi/2).n()) # abs tol 1e-14 # needs scipy sage.symbolic -+ sage: import scipy.version -+ sage: if scipy.version.version < '1.15.0': -+ ....: from scipy.special import sph_harm # NB: arguments x and y are swapped # needs scipy -+ ....: sph_harm(1, 1, pi.n(), (pi/2).n()) # abs tol 1e-14 # needs scipy sage.symbolic -+ ....: else: -+ ....: from scipy.special import sph_harm_y # needs scipy -+ ....: sph_harm_y(1, 1, (pi/2).n(), pi.n()).item() # abs tol 1e-9 # needs scipy sage.symbolic - (0.3454941494713355-4.231083042742082e-17j) - - Note that this convention differs from the one in Maxima, as revealed by -diff --git a/src/sage/matrix/matrix2.pyx b/src/sage/matrix/matrix2.pyx -index dec25a76e54..31aaf8b8234 100644 ---- a/src/sage/matrix/matrix2.pyx -+++ b/src/sage/matrix/matrix2.pyx -@@ -15901,7 +15901,7 @@ cdef class Matrix(Matrix1): - sage: a.exp() # needs sage.symbolic - [ 1/11882424341266*((11*sqrt(227345670387496707609) + 5941212170633)*e^(3/1275529100*sqrt(227345670387496707609)) - 11*sqrt(227345670387496707609) + 5941212170633)*e^(-3/2551058200*sqrt(227345670387496707609) + 101/200) 445243650/75781890129165569203*(sqrt(227345670387496707609)*e^(3/1275529100*sqrt(227345670387496707609)) - sqrt(227345670387496707609))*e^(-3/2551058200*sqrt(227345670387496707609) + 101/200)] - [ 10000/53470909535697*(sqrt(227345670387496707609)*e^(3/1275529100*sqrt(227345670387496707609)) - sqrt(227345670387496707609))*e^(-3/2551058200*sqrt(227345670387496707609) + 101/200) -1/11882424341266*((11*sqrt(227345670387496707609) - 5941212170633)*e^(3/1275529100*sqrt(227345670387496707609)) - 11*sqrt(227345670387496707609) - 5941212170633)*e^(-3/2551058200*sqrt(227345670387496707609) + 101/200)] -- sage: a.change_ring(RDF).exp() # rel tol 6e-14 # needs sage.symbolic -+ sage: a.change_ring(RDF).exp() # rel tol 1e-13 # needs sage.symbolic - [42748127.31532951 7368259.244159399] - [234538976.1381042 40426191.45156228] - diff --git a/srcpkgs/sagemath/patches/39368-singular_4.4.1.patch b/srcpkgs/sagemath/patches/39368-singular_4.4.1.patch deleted file mode 100644 index aba16fa1d7a..00000000000 --- a/srcpkgs/sagemath/patches/39368-singular_4.4.1.patch +++ /dev/null @@ -1,715 +0,0 @@ -diff --git a/src/sage/categories/pushout.py b/src/sage/categories/pushout.py -index a2b5e910257..17f059f967f 100644 ---- a/src/sage/categories/pushout.py -+++ b/src/sage/categories/pushout.py -@@ -3925,8 +3925,8 @@ class BlackBoxConstructionFunctor(ConstructionFunctor): - sage: FS = BlackBoxConstructionFunctor(singular) - sage: FS(QQ['t']) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names t - // block 2 : ordering C -diff --git a/src/sage/interfaces/expect.py b/src/sage/interfaces/expect.py -index 91f8efcf651..ff424335d56 100644 ---- a/src/sage/interfaces/expect.py -+++ b/src/sage/interfaces/expect.py -@@ -1328,8 +1328,8 @@ def _synchronize(self, cmd='1+%s;\n'): - sage: R. = QQ[]; f = x^3 + x + 1; g = x^3 - x - 1; r = f.resultant(g); gap(ZZ); singular(R) - Integers - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -diff --git a/src/sage/interfaces/interface.py b/src/sage/interfaces/interface.py -index bd1095e8c70..22fb4b8487c 100644 ---- a/src/sage/interfaces/interface.py -+++ b/src/sage/interfaces/interface.py -@@ -817,8 +817,8 @@ def __reduce__(self): - sage: S = singular.ring(0, ('x')) - sage: loads(dumps(S)) - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py -index d110c17bf16..59d01f4493d 100644 ---- a/src/sage/interfaces/singular.py -+++ b/src/sage/interfaces/singular.py -@@ -39,8 +39,8 @@ - sage: R1 = singular.ring(0, '(x,y)', 'dp') - sage: R1 - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 2 -+ // coefficients: QQ... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -220,12 +220,12 @@ - - sage: singular.lib('polylib.lib') - sage: singular.ring(32003, '(a,b,c,d,e,f)', 'lp') -- polynomial ring, over a field, global ordering -- // coefficients: ZZ/32003 -- // number of vars : 6 -- // block 1 : ordering lp -- // : names a b c d e f -- // block 2 : ordering C -+ polynomial ring, over a field, global ordering -+ // coefficients: ZZ/32003... -+ // number of vars : 6 -+ // block 1 : ordering lp -+ // : names a b c d e f -+ // block 2 : ordering C - sage: I = singular.ideal('cyclic(6)') - sage: g = singular('groebner(I)') - Traceback (most recent call last): -@@ -1074,8 +1074,8 @@ def ring(self, char=0, vars='(x)', order='lp', check=None): - sage: R = singular.ring(0, '(x,y,z)', 'dp') - sage: R - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 3 -+ // coefficients: QQ... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -@@ -1153,16 +1153,16 @@ def set_ring(self, R): - sage: S = singular.ring('real', '(a,b)', 'lp') - sage: singular.current_ring() - polynomial ring, over a field, global ordering -- // coefficients: Float() -- // number of vars : 2 -+ // coefficients: Float()... -+ // number of vars : 2 - // block 1 : ordering lp - // : names a b - // block 2 : ordering C - sage: singular.set_ring(R) - sage: singular.current_ring() - polynomial ring, over a field, local ordering -- // coefficients: ZZ/7 -- // number of vars : 2 -+ // coefficients: ZZ/7... -+ // number of vars : 2 - // block 1 : ordering ds - // : names a b - // block 2 : ordering C -@@ -1203,15 +1203,15 @@ def current_ring(self): - sage: r = PolynomialRing(GF(127),3,'xyz', order='invlex') - sage: r._singular_() - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 3 -+ // coefficients: ZZ/127... -+ // number of vars : 3 - // block 1 : ordering ip - // : names x y z - // block 2 : ordering C - sage: singular.current_ring() - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 3 -+ // coefficients: ZZ/127... -+ // number of vars : 3 - // block 1 : ordering ip - // : names x y z - // block 2 : ordering C -@@ -1430,8 +1430,8 @@ def __copy__(self): - sage: cpQ.set_ring() - sage: cpQ - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 2 -+ // coefficients: QQ... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -1996,8 +1996,8 @@ def _sage_(self, R=None): - - sage: singular('basering') - polynomial ring, over a domain, global ordering -- // coefficients: ZZ -- // number of vars : 3 -+ // coefficients: ZZ... -+ // number of vars : 3 - // block 1 : ordering lp - // : names x y z - // block 2 : ordering C -@@ -2087,16 +2087,16 @@ def set_ring(self): - sage: S = singular.ring('real', '(a,b)', 'lp') - sage: singular.current_ring() - polynomial ring, over a field, global ordering -- // coefficients: Float() -- // number of vars : 2 -+ // coefficients: Float()... -+ // number of vars : 2 - // block 1 : ordering lp - // : names a b - // block 2 : ordering C - sage: R.set_ring() - sage: singular.current_ring() - polynomial ring, over a field, local ordering -- // coefficients: ZZ/7 -- // number of vars : 2 -+ // coefficients: ZZ/7... -+ // number of vars : 2 - // block 1 : ordering ds - // : names a b - // block 2 : ordering C -diff --git a/src/sage/libs/singular/function.pyx b/src/sage/libs/singular/function.pyx -index 67cadf5d35c..87f0b7bab69 100644 ---- a/src/sage/libs/singular/function.pyx -+++ b/src/sage/libs/singular/function.pyx -@@ -276,8 +276,8 @@ cdef class RingWrap: - sage: l = ringlist(P) - sage: ring = singular_function("ring") - sage: ring(l, ring=P)._output() -- // coefficients: QQ -- // number of vars : 3 -+ // coefficients: QQ... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -diff --git a/src/sage/libs/singular/ring.pyx b/src/sage/libs/singular/ring.pyx -index 1d8dd844385..4f7e288e2ad 100644 ---- a/src/sage/libs/singular/ring.pyx -+++ b/src/sage/libs/singular/ring.pyx -@@ -159,8 +159,13 @@ cdef ring *singular_ring_new(base_ring, n, names, term_order) except NULL: - sage: R. = F[] - sage: from sage.libs.singular.function import singular_function - sage: sing_print = singular_function('print') -- sage: sing_print(R) -- 'polynomial ring, over a field, global ordering\n// coefficients: ZZ/7(a, b)\n// number of vars : 3\n// block 1 : ordering dp\n// : names x y z\n// block 2 : ordering C' -+ sage: print(sing_print(R)) -+ polynomial ring, over a field, global ordering -+ // coefficients: ZZ/7(a, b)... -+ // number of vars : 3 -+ // block 1 : ordering dp -+ // : names x y z -+ // block 2 : ordering C - - :: - -@@ -168,8 +173,13 @@ cdef ring *singular_ring_new(base_ring, n, names, term_order) except NULL: - sage: R. = F[] - sage: from sage.libs.singular.function import singular_function - sage: sing_print = singular_function('print') -- sage: sing_print(R) -- 'polynomial ring, over a field, global ordering\n// coefficients: QQ(s, t)\n// number of vars : 3\n// block 1 : ordering dp\n// : names x y z\n// block 2 : ordering C' -+ sage: print(sing_print(R)) -+ polynomial ring, over a field, global ordering -+ // coefficients: QQ(s, t)... -+ // number of vars : 3 -+ // block 1 : ordering dp -+ // : names x y z -+ // block 2 : ordering C - """ - cdef long cexponent - cdef GFInfo* _param -diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -index adf3df1cf95..bab5935004b 100644 ---- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx -@@ -619,8 +619,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - - sage: P._singular_() - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 3 -+ // coefficients: QQ... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -@@ -1182,8 +1182,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: P. = QQ[] - sage: P._singular_() - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 3 -+ // coefficients: QQ... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -@@ -1198,8 +1198,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: P. = PolynomialRing(k, 3) # needs sage.rings.finite_rings - sage: P._singular_() # needs sage.rings.finite_rings - polynomial ring, over a field, global ordering -- // coefficients: ZZ/3[a]/(a^3-a+1) -- // number of vars : 3 -+ // coefficients: ZZ/3[a]/(a^3-a+1)... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -@@ -1215,8 +1215,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: P. = QQ[] - sage: P._singular_() - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -1257,8 +1257,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: P. = QQ[] - sage: P._singular_init_() - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 3 -+ // coefficients: QQ... -+ // number of vars : 3 - // block 1 : ordering dp - // : names x y z - // block 2 : ordering C -@@ -1272,8 +1272,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R. = PolynomialRing(NumberField(w^2 + 1,'s')) # needs sage.rings.number_field - sage: singular(R) # needs sage.rings.number_field - polynomial ring, over a field, global ordering -- // coefficients: QQ[s]/(s^2+1) -- // number of vars : 2 -+ // coefficients: QQ[s]/(s^2+1)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -1281,8 +1281,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(GF(2**8,'a'),10,'x', order='invlex') # needs sage.rings.finite_rings - sage: singular(R) # needs sage.rings.finite_rings - polynomial ring, over a field, global ordering -- // coefficients: ZZ/2[a]/(a^8+a^4+a^3+a^2+1) -- // number of vars : 10 -+ // coefficients: ZZ/2[a]/(a^8+a^4+a^3+a^2+1)... -+ // number of vars : 10 - // block 1 : ordering ip - // : names x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 - // block 2 : ordering C -@@ -1290,8 +1290,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(GF(127),2,'x', order='invlex') - sage: singular(R) # needs sage.rings.finite_rings - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 2 -+ // coefficients: ZZ/127... -+ // number of vars : 2 - // block 1 : ordering ip - // : names x0 x1 - // block 2 : ordering C -@@ -1299,8 +1299,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(QQ,2,'x', order='invlex') - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 2 -+ // coefficients: QQ... -+ // number of vars : 2 - // block 1 : ordering ip - // : names x0 x1 - // block 2 : ordering C -@@ -1308,8 +1308,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(QQ,2,'x', order='degneglex') - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 2 -+ // coefficients: QQ... -+ // number of vars : 2 - // block 1 : ordering a - // : names x0 x1 - // : weights 1 1 -@@ -1320,8 +1320,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(QQ,'x') - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -1329,8 +1329,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = PolynomialRing(GF(127),'x') - sage: singular(R) # needs sage.rings.finite_rings - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 1 -+ // coefficients: ZZ/127... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -1338,8 +1338,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = ZZ['x,y'] - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a domain, global ordering -- // coefficients: ZZ -- // number of vars : 2 -+ // coefficients: ZZ... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -1347,8 +1347,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = IntegerModRing(1024)['x,y'] - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a ring (with zero-divisors), global ordering -- // coefficients: ZZ/(2^10) -- // number of vars : 2 -+ // coefficients: ZZ/(2^10)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -1356,8 +1356,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: R = IntegerModRing(15)['x,y'] - sage: singular(R) # needs sage.rings.function_field - polynomial ring, over a ring (with zero-divisors), global ordering -- // coefficients: ZZ/...(15) -- // number of vars : 2 -+ // coefficients: ZZ/(15)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -1367,8 +1367,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base): - sage: P. = QQ[] - sage: P._singular_init_() - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -diff --git a/src/sage/rings/polynomial/pbori/pbori.pyx b/src/sage/rings/polynomial/pbori/pbori.pyx -index 14a929c3238..404771a2c85 100644 ---- a/src/sage/rings/polynomial/pbori/pbori.pyx -+++ b/src/sage/rings/polynomial/pbori/pbori.pyx -@@ -1425,8 +1425,8 @@ cdef class BooleanPolynomialRing(BooleanPolynomialRing_base): - sage: B. = BooleanPolynomialRing(2) - sage: B._singular_() # indirect doctest - polynomial ring, over a field, global ordering -- // coefficients: ZZ/2 -- // number of vars : 2 -+ // coefficients: ZZ/2... -+ // number of vars : 2 - // block 1 : ordering lp - // : names x y - // block 2 : ordering C -diff --git a/src/sage/rings/polynomial/polynomial_quotient_ring.py b/src/sage/rings/polynomial/polynomial_quotient_ring.py -index 115647adadf..627765cf8f0 100644 ---- a/src/sage/rings/polynomial/polynomial_quotient_ring.py -+++ b/src/sage/rings/polynomial/polynomial_quotient_ring.py -@@ -749,8 +749,8 @@ def _singular_init_(self, S=None): - sage: Q = P.quo([(x^2 + 1)]) - sage: singular(Q) # indirect doctest # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names xbar - // block 2 : ordering C -diff --git a/src/sage/rings/polynomial/polynomial_singular_interface.py b/src/sage/rings/polynomial/polynomial_singular_interface.py -index 60d2dd74b52..10bbc6d6ec0 100644 ---- a/src/sage/rings/polynomial/polynomial_singular_interface.py -+++ b/src/sage/rings/polynomial/polynomial_singular_interface.py -@@ -62,7 +62,7 @@ def _do_singular_init_(singular, base_ring, char, _vars, order): - sage: from sage.rings.polynomial.polynomial_singular_interface import _do_singular_init_ - sage: _do_singular_init_(singular, ZZ, 0, 'X', 'dp') # needs sage.libs.singular - (polynomial ring, over a domain, global ordering -- // coefficients: ZZ -+ // coefficients: ZZ... - // number of vars : 1 - // block 1 : ordering dp - // : names X -@@ -196,7 +196,7 @@ def _singular_(self, singular=None): - sage: R. = PolynomialRing(CC) # needs sage.rings.real_mpfr - sage: singular(R) # needs sage.libs.singular sage.rings.real_mpfr - polynomial ring, over a field, global ordering -- // coefficients: real[I](complex:15 digits, additional 0 digits)/(I^2+1) -+ // coefficients: real[I](complex:15 digits, additional 0 digits)/(I^2+1)... - // number of vars : 2 - // block 1 : ordering dp - // : names x y -@@ -205,7 +205,7 @@ def _singular_(self, singular=None): - sage: R. = PolynomialRing(RealField(100)) # needs sage.rings.real_mpfr - sage: singular(R) # needs sage.libs.singular sage.rings.real_mpfr - polynomial ring, over a field, global ordering -- // coefficients: Float() -+ // coefficients: Float()... - // number of vars : 2 - // block 1 : ordering dp - // : names x y -@@ -215,8 +215,8 @@ def _singular_(self, singular=None): - sage: R. = PolynomialRing(NumberField(w^2 + 1, 's')) # needs sage.rings.number_field - sage: singular(R) # needs sage.libs.singular sage.rings.number_field - polynomial ring, over a field, global ordering -- // coefficients: QQ[s]/(s^2+1) -- // number of vars : 1 -+ // coefficients: QQ[s]/(s^2+1)... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -224,8 +224,8 @@ def _singular_(self, singular=None): - sage: R = PolynomialRing(GF(127), 'x', implementation='singular') # needs sage.libs.singular - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 1 -+ // coefficients: ZZ/127... -+ // number of vars : 1 - // block 1 : ordering dp - // : names x - // block 2 : ordering C -@@ -233,8 +233,8 @@ def _singular_(self, singular=None): - sage: R = PolynomialRing(QQ, 'x', implementation='singular') # needs sage.libs.singular - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering dp - // : names x - // block 2 : ordering C -@@ -242,8 +242,8 @@ def _singular_(self, singular=None): - sage: R = PolynomialRing(QQ,'x') - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -251,8 +251,8 @@ def _singular_(self, singular=None): - sage: R = PolynomialRing(GF(127), 'x') - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 1 -+ // coefficients: ZZ/127... -+ // number of vars : 1 - // block 1 : ordering lp - // : names x - // block 2 : ordering C -@@ -260,8 +260,8 @@ def _singular_(self, singular=None): - sage: R = Frac(ZZ['a,b'])['x,y'] - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ(a, b) -- // number of vars : 2 -+ // coefficients: QQ(a, b)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -270,8 +270,8 @@ def _singular_(self, singular=None): - sage: R = IntegerModRing(1024)['x,y'] - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a ring (with zero-divisors), global ordering -- // coefficients: ZZ/(2^10) -- // number of vars : 2 -+ // coefficients: ZZ/(2^10)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -279,8 +279,8 @@ def _singular_(self, singular=None): - sage: R = IntegerModRing(15)['x,y'] - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a ring (with zero-divisors), global ordering -- // coefficients: ZZ/...(15) -- // number of vars : 2 -+ // coefficients: ZZ/(15)... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -288,8 +288,8 @@ def _singular_(self, singular=None): - sage: R = ZZ['x,y'] - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a domain, global ordering -- // coefficients: ZZ -- // number of vars : 2 -+ // coefficients: ZZ... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -@@ -297,7 +297,7 @@ def _singular_(self, singular=None): - sage: R = ZZ['x'] - sage: singular(R) # needs sage.libs.singular - polynomial ring, over a domain, global ordering -- // coefficients: ZZ -+ // coefficients: ZZ... - // number of vars : 1 - // block 1 : ordering lp - // : names x -@@ -310,8 +310,8 @@ def _singular_(self, singular=None): - sage: S = K['y'] - sage: singular(S) # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: ZZ/5(x) -- // number of vars : 2 -+ // coefficients: ZZ/5(x)... -+ // number of vars : 2 - // block 1 : ordering lp - // : names a y - // block 2 : ordering C -@@ -353,8 +353,8 @@ def _singular_init_(self, singular=None): - - sage: PolynomialRing(QQ,'u_ba')._singular_init_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 1 -+ // coefficients: QQ... -+ // number of vars : 1 - // block 1 : ordering lp - // : names u_ba - // block 2 : ordering C -diff --git a/src/sage/rings/polynomial/term_order.py b/src/sage/rings/polynomial/term_order.py -index a88568248ce..f8ddd0a9652 100644 ---- a/src/sage/rings/polynomial/term_order.py -+++ b/src/sage/rings/polynomial/term_order.py -@@ -660,7 +660,7 @@ def __init__(self, name='lex', n=0, force=False): - sage: R. = PolynomialRing(QQ, order=T) - sage: R._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 3 - // block 1 : ordering dp - // : names x y z -@@ -676,7 +676,7 @@ def __init__(self, name='lex', n=0, force=False): - False - sage: S._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 3 - // block 1 : ordering C - // block 2 : ordering dp -@@ -1661,8 +1661,8 @@ def singular_str(self): - '(lp(3),Dp(5),lp(2))' - sage: P._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: ZZ/127 -- // number of vars : 10 -+ // coefficients: ZZ/127... -+ // number of vars : 10 - // block 1 : ordering lp - // : names x0 x1 x2 - // block 2 : ordering Dp -@@ -1687,8 +1687,8 @@ def singular_str(self): - '(a(1:2),ls(2),a(1:2),ls(2))' - sage: P._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 4 -+ // coefficients: QQ... -+ // number of vars : 4 - // block 1 : ordering a - // : names x0 x1 - // : weights 1 1 -@@ -1709,7 +1709,7 @@ def singular_str(self): - sage: P = PolynomialRing(QQ, 4, names='x', order=T) - sage: P._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 4 - // block 1 : ordering C - // block 2 : ordering a -@@ -1727,7 +1727,7 @@ def singular_str(self): - sage: P = PolynomialRing(QQ, 4, names='y', order=T) - sage: P._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 4 - // block 1 : ordering c - // block 2 : ordering a -@@ -1745,7 +1745,7 @@ def singular_str(self): - sage: P = PolynomialRing(QQ, 4, names='z', order=T) - sage: P._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 4 - // block 1 : ordering a - // : names z0 z1 -@@ -2183,7 +2183,7 @@ def termorder_from_singular(S): - sage: # needs sage.libs.singular - sage: singular.ring(0, '(x,y,z,w)', '(C,dp(2),lp(2))') - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 4 - // block 1 : ordering C - // block 2 : ordering dp -@@ -2201,7 +2201,7 @@ def termorder_from_singular(S): - sage: # needs sage.libs.singular - sage: singular.ring(0, '(x,y,z,w)', '(c,dp(2),lp(2))') - polynomial ring, over a field, global ordering -- // coefficients: QQ -+ // coefficients: QQ... - // number of vars : 4 - // block 1 : ordering c - // block 2 : ordering dp -diff --git a/src/sage/rings/quotient_ring.py b/src/sage/rings/quotient_ring.py -index 1043333a63e..45f8147cde9 100644 ---- a/src/sage/rings/quotient_ring.py -+++ b/src/sage/rings/quotient_ring.py -@@ -1268,8 +1268,8 @@ def _singular_(self, singular=None): - sage: S = R.quotient_ring(x^2 + y^2) - sage: S._singular_() # needs sage.libs.singular - polynomial ring, over a field, global ordering -- // coefficients: QQ -- // number of vars : 2 -+ // coefficients: QQ... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C -diff --git a/src/sage/rings/quotient_ring_element.py b/src/sage/rings/quotient_ring_element.py -index 6699ae9f74b..9f05c54f21c 100644 ---- a/src/sage/rings/quotient_ring_element.py -+++ b/src/sage/rings/quotient_ring_element.py -@@ -813,8 +813,8 @@ def _singular_(self, singular=None): - sage: Q = P.quo(I) - sage: Q._singular_() - polynomial ring, over a field, global ordering -- // coefficients: ZZ/2 -- // number of vars : 2 -+ // coefficients: ZZ/2... -+ // number of vars : 2 - // block 1 : ordering dp - // : names x y - // block 2 : ordering C diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches index c617fe7e216..c93b07701bc 100755 --- a/srcpkgs/sagemath/patches/get_patches +++ b/srcpkgs/sagemath/patches/get_patches @@ -19,7 +19,10 @@ get_pr() { echo "curl -sL \"$url\" | filterdiff ... > \"$pr-$desc.patch\"" if [ -z "$dry" ]; then curl -sL "$url" | - filterdiff -p1 -x src/setup.py -x build/* -x src/doc/* | + filterdiff -p1 -i src/* -x src/.* -x src/setup.py -x src/sage/meson.build \ + -x src/sage/libs/meson.build -x src/sage/libs/giac/meson.build \ + -x src/sage_setup/autogen/giacpy-mkkeywords.py \ + -x src/sage_setup/autogen/flint/* -x src/doc/* | cat > "$pr-$desc.patch" fi } @@ -27,23 +30,5 @@ get_pr() { # run from patches dir cd $(dirname "$0") -#get_pr 37645 "fix doctest" -#get_pr 37885 "cython warnings" - -get_pr 39145 "python 3.13 re.sub" -get_pr 39147 "python 3.13 doctest" -get_pr 39182 "python 3.13 iter" -get_pr 39184 "python 3.13 produce_latex_macro" -get_pr 39185 "python 3.13 find_replacements" -get_pr 39187 "python 3.13 tests output" -get_pr 39201 "python 3.13 fix spyx_tmp" - -get_pr 38749 "pari 2.17" -get_pr 38962 "eclib 20241112" -get_pr 39178 "giac 1.9.0.998" -get_pr 39261 "scipy 1.15" -get_pr 39368 "singular 4.4.1" - -get_pr 38940 "fix flaky simplicial set test" - -#get_pr 39142 "fix alarm tests" +#get_pr 39015 "sage cli" +#get_pr 39616 "ipython 9.0" diff --git a/srcpkgs/sagemath/patches/zz-32bit-test.patch b/srcpkgs/sagemath/patches/zz-32bit-test.patch deleted file mode 100644 index 03f56d8c3bf..00000000000 --- a/srcpkgs/sagemath/patches/zz-32bit-test.patch +++ /dev/null @@ -1,30 +0,0 @@ -A couple of tests that give different (correct) output on 32-bit - -diff --git a/src/sage/rings/number_field/bdd_height.py b/src/sage/rings/number_field/bdd_height.py -index 45f08aa4711..b88b315fd01 100644 ---- a/src/sage/rings/number_field/bdd_height.py -+++ b/src/sage/rings/number_field/bdd_height.py -@@ -236,7 +236,8 @@ def bdd_norm_pr_ideal_gens(K, norm_list): - sage: from sage.rings.number_field.bdd_height import bdd_norm_pr_ideal_gens - sage: K. = QuadraticField(123) - sage: bdd_norm_pr_ideal_gens(K, range(5)) -- {0: [0], 1: [1], 2: [g + 11], 3: [], 4: [2]} -+ {0: [0], 1: [1], 2: [g + 11], 3: [], 4: [2]} # 64-bit -+ {0: [0], 1: [1], 2: [g - 11], 3: [], 4: [2]} # 32-bit - - :: - -diff --git a/src/sage/rings/number_field/number_field.py b/src/sage/rings/number_field/number_field.py -index 61d0b98509a..dab3186cea4 100644 ---- a/src/sage/rings/number_field/number_field.py -+++ b/src/sage/rings/number_field/number_field.py -@@ -4827,7 +4827,8 @@ class NumberField_generic(WithEqualityById, number_field_base.NumberField): - - sage: K. = NumberField(2*x^2 - 1/3) - sage: K._S_class_group_and_units(tuple(K.primes_above(2) + K.primes_above(3))) -- ([6*a + 2, -6*a + 3, -1, -12*a - 5], []) -+ ([6*a + 2, -6*a + 3, -1, -12*a - 5], []) # 64-bit -+ ([6*a + 2, -6*a - 3, -1, -12*a - 5], []) # 32-bit - """ - K_pari = self.pari_bnf(proof=proof) - S_pari = [p.pari_prime() for p in sorted(set(S))] diff --git a/srcpkgs/sagemath/patches/zz-fix-doctest-order.patch b/srcpkgs/sagemath/patches/zz-fix-doctest-order.patch deleted file mode 100644 index 7fb8a4ac672..00000000000 --- a/srcpkgs/sagemath/patches/zz-fix-doctest-order.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/src/sage/rings/number_field/galois_group.py -+++ b/src/sage/rings/number_field/galois_group.py -@@ -994,9 +994,11 @@ class GaloisGroup_v2(GaloisGroup_perm): - sage: x = polygen(ZZ, 'x') - sage: K. = NumberField(x^4 - 2*x^2 + 2, 'a').galois_closure() - sage: G = K.galois_group() -- sage: [G.artin_symbol(P) for P in K.primes_above(7)] -- [(1,5)(2,6)(3,7)(4,8), (1,5)(2,6)(3,7)(4,8), -- (1,4)(2,3)(5,8)(6,7), (1,4)(2,3)(5,8)(6,7)] -+ sage: sorted([G.artin_symbol(P) for P in K.primes_above(7)]) -+ [(1,4)(2,3)(5,8)(6,7), -+ (1,4)(2,3)(5,8)(6,7), -+ (1,5)(2,6)(3,7)(4,8), -+ (1,5)(2,6)(3,7)(4,8)] - sage: G.artin_symbol(17) - Traceback (most recent call last): - ... diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template index 44706ee3541..6a43be1527e 100644 --- a/srcpkgs/sagemath/template +++ b/srcpkgs/sagemath/template @@ -1,7 +1,7 @@ # Template file for 'sagemath' pkgname=sagemath -version=10.5 -revision=2 +version=10.6 +revision=1 _pypi_version=${version/.beta/b} _pypi_version=${_pypi_version/.rc/rc} build_style=python3-pep517 @@ -10,14 +10,14 @@ hostmakedepends="pkg-config python3-Cython python3-Jinja2 python3-gmpy2 python3-memory_allocator python3-numpy ecl python3-cypari2 python3-cysignals python3-devel" makedepends="boost-devel brial-devel cliquer-devel ecl eclib-devel - ecm-devel fflas-ffpack flintlib-devel gap-devel gd-devel giac-devel glpk-devel + ecm-devel fflas-ffpack flintlib-devel gap-devel gd-devel glpk-devel gsl-devel iml-devel lcalc-devel libbraiding-devel libhomfly-devel libmpc-devel libpng-devel linbox-devel m4ri-devel m4rie-devel mpfi-devel mpfr-devel ntl-devel openblas-devel pari-devel planarity-devel python3-cypari2 python3-cysignals python3-devel python3-gmpy2 python3-memory_allocator python3-numpy rankwidth-devel singular symmetrica-devel" depends="eclib-devel fflas-ffpack flintlib-devel gcc-fortran meson gd-devel - gfan giac gsl-devel gzip libpng-devel linbox-devel m4ri-devel maxima-ecl + gfan gsl-devel gzip libpng-devel linbox-devel m4ri-devel maxima-ecl mpfr-devel nauty ntl-devel palp pari-devel pari-elldata-small pari-galdata pari-galpol-small pari-seadata-small pkg-config python3-Cython python3-cypari2 python3-cysignals python3-devel python3-fpylll python3-ipython python3-lrcalc @@ -36,7 +36,7 @@ license="GPL-2.0-or-later" homepage="https://www.sagemath.org/" changelog="https://github.com/sagemath/sage/releases" distfiles="${PYPI_SITE}/s/sagemath-standard/sagemath_standard-${_pypi_version}.tar.gz" -checksum=fa0e91cc12754db3cbdf843dbe30252b4378c030825530bc6858ddbcac701096 +checksum=0405b9d9f52657969418fc47488ec0cb12fd62c538e50616b11fc9d5c507f9d2 nocross="due to ntl (eclib, singular), fflas-ffpack, givaro, linbox, sympow, maxima" # main repo `.../src/sage/` is `.../sage/` here