summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Rojas2021-03-24 08:41:15 +0100
committerAntonio Rojas2021-03-24 08:41:15 +0100
commit0ebcb979ea76a6c57cdfd0f958a27b9c53e0b5ab (patch)
tree30c35646adb29e1888a1383e032271399537a090
parentfd266d2b5f941793863e7153647cea20ba6755e1 (diff)
downloadaur-0ebcb979ea76a6c57cdfd0f958a27b9c53e0b5ab.tar.gz
Rebase patches
-rw-r--r--.SRCINFO6
-rw-r--r--PKGBUILD8
-rw-r--r--sagemath-eclib-20210310.patch126
-rw-r--r--sagemath-singular-4.2.patch1076
4 files changed, 91 insertions, 1125 deletions
diff --git a/.SRCINFO b/.SRCINFO
index e59fced4d48c..8a958467cdf6 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = sagemath-git
pkgdesc = Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab
- pkgver = 9.3.beta9.r0.g5cb72aade9
+ pkgver = 9.3.rc0.r0.g2c25f07cfd
pkgrel = 1
url = http://www.sagemath.org
arch = x86_64
@@ -96,7 +96,6 @@ pkgbase = sagemath-git
source = sagemath-optional-packages.patch
source = latte-count.patch
source = test-optional.patch
- source = sagemath-singular-4.2.patch
source = sagemath-pari-2.13.patch
source = sagemath-lrcalc2.patch
source = sagemath-eclib-20210310.patch
@@ -104,10 +103,9 @@ pkgbase = sagemath-git
sha256sums = 4fdf318ec9a54567877b93af8c668ad925f2a82370048db158d134b58b064204
sha256sums = af922e1f978821a9a1f6c9a56130d71e5011c84a7aee7bf66a591bee658af30b
sha256sums = 7da0dbcda15a327c21dc33853cb8f98cb86a283139f8735e3b20a71d49458a88
- sha256sums = 9896486aae7c9903012275bb53980049382424457e7edb2ebf9b186e23135bcc
sha256sums = 33907a0681900b9580b8aa5b3d2ddb2d609977076c38fdbc47279ecef4104ed1
sha256sums = 240ac4c29d96d56407a20e1b7f9846e342a7eb2bb4edd6e5c86b3b5a8ff462f9
- sha256sums = a79f1165fd262fcb52ac7a6afc33aa8d75182fa16595aa9ba1aaa0b2ebb45c19
+ sha256sums = e7b31f5e7ea88681c6eda41e5a74a2859a12dd128e75c00db3cfbd1d8ddf080d
pkgname = sagemath-git
optdepends = cython: to compile cython code
diff --git a/PKGBUILD b/PKGBUILD
index 8588939e6421..4dca55f08553 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -7,7 +7,7 @@
pkgbase=sagemath-git
pkgname=(sagemath-git sagemath-jupyter-git)
-pkgver=9.3.beta9.r0.g5cb72aade9
+pkgver=9.3.rc0.r0.g2c25f07cfd
pkgrel=1
pkgdesc="Open Source Mathematics Software, free alternative to Magma, Maple, Mathematica, and Matlab"
arch=(x86_64)
@@ -39,7 +39,6 @@ source=(git://git.sagemath.org/sage.git#branch=develop
sagemath-optional-packages.patch
latte-count.patch
test-optional.patch
- sagemath-singular-4.2.patch
sagemath-pari-2.13.patch
sagemath-lrcalc2.patch
sagemath-eclib-20210310.patch)
@@ -47,10 +46,9 @@ sha256sums=('SKIP'
'4fdf318ec9a54567877b93af8c668ad925f2a82370048db158d134b58b064204'
'af922e1f978821a9a1f6c9a56130d71e5011c84a7aee7bf66a591bee658af30b'
'7da0dbcda15a327c21dc33853cb8f98cb86a283139f8735e3b20a71d49458a88'
- '9896486aae7c9903012275bb53980049382424457e7edb2ebf9b186e23135bcc'
'33907a0681900b9580b8aa5b3d2ddb2d609977076c38fdbc47279ecef4104ed1'
'240ac4c29d96d56407a20e1b7f9846e342a7eb2bb4edd6e5c86b3b5a8ff462f9'
- 'a79f1165fd262fcb52ac7a6afc33aa8d75182fa16595aa9ba1aaa0b2ebb45c19')
+ 'e7b31f5e7ea88681c6eda41e5a74a2859a12dd128e75c00db3cfbd1d8ddf080d')
pkgver() {
cd sage
@@ -61,8 +59,6 @@ prepare(){
cd sage
# Upstream patches
-# Fixes for singular 4.2 https://trac.sagemath.org/ticket/25993
- patch -p1 -i ../sagemath-singular-4.2.patch
# Port to PARI 2.13 https://trac.sagemath.org/ticket/30801
patch -p1 -i ../sagemath-pari-2.13.patch
# Replace lrcalc.pyx with a wrapper over lrcalc's python bindings https://trac.sagemath.org/ticket/31355
diff --git a/sagemath-eclib-20210310.patch b/sagemath-eclib-20210310.patch
index 3ee99da7acb4..bea233239119 100644
--- a/sagemath-eclib-20210310.patch
+++ b/sagemath-eclib-20210310.patch
@@ -1,25 +1,5 @@
-diff --git a/build/pkgs/eclib/checksums.ini b/build/pkgs/eclib/checksums.ini
-index 4daaf05d8b..b37bff93c0 100644
---- a/build/pkgs/eclib/checksums.ini
-+++ b/build/pkgs/eclib/checksums.ini
-@@ -1,4 +1,4 @@
--tarball=eclib-20190909.tar.bz2
--sha1=0e994c0de95ef03ef19ad5030a2cacbb83c76bbd
--md5=1a67217a7fa762646d43c7bec8a73028
--cksum=4240278408
-+tarball=eclib-20210310.tar.bz2
-+sha1=73437ac8deae94f00e7713405b3251d9c81f95e4
-+md5=4ac988bc46869866f076f7bea0fdaa6b
-+cksum=2130748042
-diff --git a/build/pkgs/eclib/package-version.txt b/build/pkgs/eclib/package-version.txt
-index 4defdea11f..3384f6c732 100644
---- a/build/pkgs/eclib/package-version.txt
-+++ b/build/pkgs/eclib/package-version.txt
-@@ -1 +1 @@
--20190909
-+20210310
diff --git a/src/sage/libs/eclib/__init__.pxd b/src/sage/libs/eclib/__init__.pxd
-index 3f99f998a5..d44d4fba86 100644
+index 3f99f99..d44d4fb 100644
--- a/src/sage/libs/eclib/__init__.pxd
+++ b/src/sage/libs/eclib/__init__.pxd
@@ -12,9 +12,11 @@ from libcpp.pair cimport pair
@@ -38,7 +18,7 @@ index 3f99f998a5..d44d4fba86 100644
cdef extern from "eclib/xmod.h": pass
cdef extern from "eclib/svector.h": pass
diff --git a/src/sage/libs/eclib/interface.py b/src/sage/libs/eclib/interface.py
-index e898456720..493b5f1347 100644
+index e898456..493b5f1 100644
--- a/src/sage/libs/eclib/interface.py
+++ b/src/sage/libs/eclib/interface.py
@@ -21,17 +21,16 @@ Check that ``eclib`` is imported as needed::
@@ -738,7 +718,7 @@ index e898456720..493b5f1347 100644
- return [[Integer(x), Integer(y), Integer(z)] for (x,y,z) in L]
+ return self.__mw.getbasis()
diff --git a/src/sage/libs/eclib/mwrank.pyx b/src/sage/libs/eclib/mwrank.pyx
-index b82831dc5f..ce5090c80d 100644
+index b82831d..ce5090c 100644
--- a/src/sage/libs/eclib/mwrank.pyx
+++ b/src/sage/libs/eclib/mwrank.pyx
@@ -28,6 +28,7 @@ from cysignals.signals cimport sig_on, sig_off
@@ -1156,22 +1136,24 @@ index b82831dc5f..ce5090c80d 100644
def getbasis(self):
diff --git a/src/sage/libs/eclib/newforms.pyx b/src/sage/libs/eclib/newforms.pyx
-index b50b6061aa..90846347e2 100644
+index b50b606..96263cd 100644
--- a/src/sage/libs/eclib/newforms.pyx
+++ b/src/sage/libs/eclib/newforms.pyx
-@@ -215,6 +216,7 @@ cdef class ECModularSymbol:
- self.sign = sign
+@@ -140,6 +140,7 @@ cdef class ECModularSymbol:
- self.nfs = new newforms(n, 0)
-+ nap = 500 # eclib will increase this to 100*sqrt(N) if necessary
- self.nfs.createfromcurve(sign, CR, nap)
- sig_off()
+ - ``nap`` - (int, default 1000): the number of ap of E to use
+ in determining the normalisation of the modular symbols.
++ Note that eclib will increase this to 100*sqrt(N) if necessary.
+
+ EXAMPLES::
diff --git a/src/sage/libs/eclib/t b/src/sage/libs/eclib/t
new file mode 100644
-index 0000000000..e69de29bb2
+index 00000000..e69de29
+--- /dev/null
++++ b/src/sage/libs/eclib/t
diff --git a/src/sage/libs/eclib/wrap.cpp b/src/sage/libs/eclib/wrap.cpp
-index 58c18ab67b..28e6da869b 100644
+index 58c18ab..28e6da8 100644
--- a/src/sage/libs/eclib/wrap.cpp
+++ b/src/sage/libs/eclib/wrap.cpp
@@ -178,11 +178,11 @@ int mw_rank(struct mw* m)
@@ -1201,8 +1183,43 @@ index 58c18ab67b..28e6da869b 100644
}
double two_descent_regulator(struct two_descent* t)
+diff --git a/src/sage/schemes/elliptic_curves/ell_modular_symbols.py b/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
+index a32f64e..30a61e1 100644
+--- a/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
++++ b/src/sage/schemes/elliptic_curves/ell_modular_symbols.py
+@@ -298,19 +298,27 @@ class ModularSymbolECLIB(ModularSymbol):
+ sage: m(0)
+ 1/5
+
+- If ``nap`` is too small, the normalization in eclib may be incorrect. See :trac:`31317`::
++ If ``nap`` is too small, the normalization in eclib used to be
++ incorrect (see :trac:`31317`), but since ``eclib`` version
++ v20210310 the value of ``nap`` is increased automatically by
++ ``eclib``::
+
+ sage: from sage.schemes.elliptic_curves.ell_modular_symbols import ModularSymbolECLIB
+ sage: E = EllipticCurve('1590g1')
+ sage: m = ModularSymbolECLIB(E, sign=+1, nap=300)
+ sage: [m(a/5) for a in [1..4]]
+- [1001/153, -1001/153, -1001/153, 1001/153]
++ [13/2, -13/2, -13/2, 13/2]
+
+- Those values are incorrect. The correct values are::
++ These values are correct, and increasing ``nap`` has no
++ effect. The correct values may verified by the numerical
++ implementation::
+
+ sage: m = ModularSymbolECLIB(E, sign=+1, nap=400)
+ sage: [m(a/5) for a in [1..4]]
+ [13/2, -13/2, -13/2, 13/2]
++ sage: m = E.modular_symbol(implementation='num')
++ sage: [m(a/5) for a in [1..4]]
++ [13/2, -13/2, -13/2, 13/2]
+
+ """
+ from sage.libs.eclib.newforms import ECModularSymbol
diff --git a/src/sage/schemes/elliptic_curves/ell_rational_field.py b/src/sage/schemes/elliptic_curves/ell_rational_field.py
-index a792afce8d..c894cbc766 100644
+index a792afc..5a56389 100644
--- a/src/sage/schemes/elliptic_curves/ell_rational_field.py
+++ b/src/sage/schemes/elliptic_curves/ell_rational_field.py
@@ -779,7 +779,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
@@ -1214,7 +1231,38 @@ index a792afce8d..c894cbc766 100644
sage: type(EE)
<class 'sage.libs.eclib.interface.mwrank_EllipticCurve'>
sage: EE.isogeny_class()
-@@ -2525,7 +2525,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -1283,22 +1283,21 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+ sage: [Mminus(1/i) for i in [1..11]]
+ [0, 0, 1/2, 1/2, 0, 0, -1/2, -1/2, 0, 0, 0]
+
+- With the default 'eclib' implementation, if ``nap`` is too
+- small, the normalization may be computed incorrectly. See
+- :trac:`31317`::
++ With older version of eclib, in the default 'eclib'
++ implementation, if ``nap`` is too small, the normalization may
++ be computed incorrectly (see :trac:`31317`). This was fixed
++ in eclib version v20210310, since now eclib increase ``nap``
++ automatically. The following used to give incorrect results.
++ See :trac:`31443`::
+
+ sage: E = EllipticCurve('1590g1')
+ sage: m = E.modular_symbol(nap=300)
+ sage: [m(a/5) for a in [1..4]]
+- [1001/153, -1001/153, -1001/153, 1001/153]
++ [13/2, -13/2, -13/2, 13/2]
+
+- Those values are incorrect. The correct values may be
+- obtained by increasing ``nap``, as verified by the numerical
++ These values are correct, as verified by the numerical
+ implementation::
+
+- sage: m = E.modular_symbol(nap=400)
+- sage: [m(a/5) for a in [1..4]]
+- [13/2, -13/2, -13/2, 13/2]
+ sage: m = E.modular_symbol(implementation='num')
+ sage: [m(a/5) for a in [1..4]]
+ [13/2, -13/2, -13/2, 13/2]
+@@ -2525,7 +2524,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
assert reg.parent() is R
return reg
@@ -1223,7 +1271,7 @@ index a792afce8d..c894cbc766 100644
"""
Given a list of rational points on E, compute the saturation in
E(Q) of the subgroup they generate.
-@@ -2538,17 +2538,24 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -2538,17 +2537,24 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
- ``verbose (bool)`` - (default: ``False``), if ``True``, give
verbose output
@@ -1255,7 +1303,7 @@ index a792afce8d..c894cbc766 100644
- ``saturation (list)`` - points that form a basis for
the saturation
-@@ -2559,12 +2566,32 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -2559,12 +2565,32 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
- ``regulator (real with default precision)`` -
regulator of saturated points.
@@ -1293,7 +1341,7 @@ index a792afce8d..c894cbc766 100644
EXAMPLES::
-@@ -2577,7 +2604,9 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -2577,7 +2603,9 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
TESTS:
@@ -1304,7 +1352,7 @@ index a792afce8d..c894cbc766 100644
sage: E = EllipticCurve([1, 0, 1, -977842, -372252745])
sage: P = E([-192128125858676194585718821667542660822323528626273/336995568430319276695106602174283479617040716649, 70208213492933395764907328787228427430477177498927549075405076353624188436/195630373799784831667835900062564586429333568841391304129067339731164107, 1])
-@@ -2585,7 +2614,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -2585,7 +2613,7 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
113.302910926080
sage: E.saturation([P])
([(-192128125858676194585718821667542660822323528626273/336995568430319276695106602174283479617040716649 : 70208213492933395764907328787228427430477177498927549075405076353624188436/195630373799784831667835900062564586429333568841391304129067339731164107 : 1)], 1, 113.302910926080)
@@ -1313,7 +1361,7 @@ index a792afce8d..c894cbc766 100644
sage: 2*Q == 2*P
True
sage: ind
-@@ -2634,36 +2663,16 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
+@@ -2634,36 +2662,16 @@ class EllipticCurve_rational_field(EllipticCurve_number_field):
c = Emin.mwrank_curve()
from sage.libs.eclib.all import mwrank_MordellWeil
mw = mwrank_MordellWeil(c, verbose)
diff --git a/sagemath-singular-4.2.patch b/sagemath-singular-4.2.patch
deleted file mode 100644
index 132f6496ceac..000000000000
--- a/sagemath-singular-4.2.patch
+++ /dev/null
@@ -1,1076 +0,0 @@
-diff --git a/build/pkgs/singular/checksums.ini b/build/pkgs/singular/checksums.ini
-index 55751d3429..ff4ab29cbe 100644
---- a/build/pkgs/singular/checksums.ini
-+++ b/build/pkgs/singular/checksums.ini
-@@ -1,4 +1,5 @@
- tarball=singular-VERSION.tar.gz
--sha1=5c6b6c3d2b5ebaca164967eec67e59ebb4e6142f
--md5=cb50d64ab1b2b49a0c3f519e5c87639e
--cksum=4294037094
-+sha1=3f85ab3e099928af4f1a44693ad425e4861d1b21
-+md5=cd8ee869421ca225b4c469a0ea74c5ee
-+cksum=3689677991
-+upstream_url=ftp://jim.mathematik.uni-kl.de/pub/Math/Singular/SOURCES/4-2-0/singular-VERSION.tar.gz
-diff --git a/build/pkgs/singular/package-version.txt b/build/pkgs/singular/package-version.txt
-index dc3219d462..78a1780baf 100644
---- a/build/pkgs/singular/package-version.txt
-+++ b/build/pkgs/singular/package-version.txt
-@@ -1 +1 @@
--4.1.1p2.p0
-+4.2.0p1
-diff --git a/build/pkgs/singular/patches/configure-no-ntl-header-check.patch b/build/pkgs/singular/patches/configure-no-ntl-header-check.patch
-index 3109e57f4b..b4ec33fc05 100644
---- a/build/pkgs/singular/patches/configure-no-ntl-header-check.patch
-+++ b/build/pkgs/singular/patches/configure-no-ntl-header-check.patch
-@@ -49,30 +49,4 @@ index db6423d..c0a2260 100755
- +## fi
- done
-
-- if test "x$ntl_found" = "xyes" ; then
--diff --git a/libpolys/configure b/libpolys/configure
--index 41b0928..9a4b9f5 100755
----- a/libpolys/configure
--+++ b/libpolys/configure
--@@ -20660,7 +20660,7 @@ fi
--
-- for NTL_HOME in ${NTL_HOME_PATH}
-- do
---if test -r "$NTL_HOME/include/NTL/ZZ.h"; then
--+## if test -r "$NTL_HOME/include/NTL/ZZ.h"; then
--
-- if test "x$NTL_HOME" != "x/usr"; then
-- NTL_CPPFLAGS="-I${NTL_HOME}/include"
--@@ -20731,9 +20731,9 @@ else
-- fi
-- rm -f core conftest.err conftest.$ac_objext \
-- conftest$ac_exeext conftest.$ac_ext
---else
--- ntl_found="no"
---fi
--+## else
--+## ntl_found="no"
--+## fi
-- done
--
- if test "x$ntl_found" = "xyes" ; then
-diff --git a/build/pkgs/singular/patches/fix-building-with-nodebug.patch b/build/pkgs/singular/patches/fix-building-with-nodebug.patch
-deleted file mode 100644
-index 46b8ab83ce..0000000000
---- a/build/pkgs/singular/patches/fix-building-with-nodebug.patch
-+++ /dev/null
-@@ -1,31 +0,0 @@
--From 80a9ffc773542e3329935e5377f6906628be16e6 Mon Sep 17 00:00:00 2001
--From: Yue Ren <yue.ren.kl@gmail.com>
--Date: Thu, 15 Nov 2018 10:48:24 -0500
--Subject: [PATCH] fix: building with NDEBUG=1, trac ticket 840
--
-----
-- Singular/dyn_modules/gfanlib/groebnerCone.h | 6 +++++-
-- 1 file changed, 5 insertions(+), 1 deletion(-)
--
--diff --git a/Singular/dyn_modules/gfanlib/groebnerCone.h b/Singular/dyn_modules/gfanlib/groebnerCone.h
--index cb067250a0..8a212a7b7f 100644
----- a/Singular/dyn_modules/gfanlib/groebnerCone.h
--+++ b/Singular/dyn_modules/gfanlib/groebnerCone.h
--@@ -99,12 +99,16 @@ class groebnerCone
-- */
-- groebnerCones tropicalNeighbours() const;
--
--+ /**
--+ * Return 1 if w points is in the dual of the polyhedral cone, 0 otherwise
--+ */
--+ bool pointsOutwards(const gfan::ZVector w) const;
--+
-- /**
-- * Debug tools.
-- */
-- #ifndef NDEBUG
-- bool checkFlipConeInput(const gfan::ZVector interiorPoint, const gfan::ZVector facetNormal) const;
--- bool pointsOutwards(const gfan::ZVector) const;
-- #endif
-- };
--
-diff --git a/build/pkgs/singular/patches/singular-ntl-error-handler.patch b/build/pkgs/singular/patches/singular-ntl-error-handler.patch
-deleted file mode 100644
-index 3d49529323..0000000000
---- a/build/pkgs/singular/patches/singular-ntl-error-handler.patch
-+++ /dev/null
-@@ -1,75 +0,0 @@
--Move NTL error handler out of libsingular, otherwise it takes over Sage's error handler and makes it quit on NTL errors.
--See https://www.singular.uni-kl.de/forum/viewtopic.php?f=10&t=2769 and https://trac.sagemath.org/ticket/24735#comment:29
--Rebased from upstream commit https://github.com/Singular/Sources/commit/502cf86d0bb2a96715be6764774b64a69c1ca34c
--
--From 502cf86d0bb2a96715be6764774b64a69c1ca34c Mon Sep 17 00:00:00 2001
--From: Hans Schoenemann <hannes@mathematik.uni-kl.de>
--Date: Wed, 25 Jul 2018 11:03:32 +0200
--Subject: [PATCH] move error handler for factory,NTL to the non-libSingular part
--
--(see forum: "NTL error handling", for SAGE)
--
--diff --git a/Singular/cntrlc.cc b/Singular/cntrlc.cc
--index 622495490c..874a5deb79 100644
----- a/Singular/cntrlc.cc
--+++ b/Singular/cntrlc.cc
--@@ -20,6 +20,14 @@
-- #include "Singular/links/silink.h"
-- #include "Singular/links/ssiLink.h"
--
--+#ifdef HAVE_NTL
--+#include <NTL/version.h>
--+#include <NTL/tools.h>
--+#ifdef NTL_CLIENT
--+NTL_CLIENT
--+#endif
--+#endif
--+
-- /* undef, if you don't want GDB to come up on error */
--
-- #define CALL_GDB
--@@ -549,11 +557,20 @@ static void stack_trace (char *const*args)
--
-- # endif /* !__OPTIMIZE__ */
--
---/*2
---* init signal handlers
---*/
--+/// init signal handlers and error handling for libraries: NTL, factory
-- void init_signals()
-- {
--+// NTL error handling (>= 9.3.0) ----------------------------------------
--+#ifdef HAVE_NTL
--+#if (((NTL_MAJOR_VERSION==9)&&(NTL_MINOR_VERSION>=3))||(NTL_MAJOR_VERSION>=10))
--+ ErrorMsgCallback=WerrorS;
--+ ErrorCallback=HALT;
--+#endif
--+#endif
--+// factory error handling: -----------------------------------------------
--+ factoryError=WerrorS;
--+
--+// signal handler -------------------------------------------------------
-- #ifdef SIGSEGV
-- si_set_signal(SIGSEGV,(si_hdl_typ)sigsegv_handler);
-- #endif
--diff --git a/Singular/misc_ip.cc b/Singular/misc_ip.cc
--index 49eddaae6f..3d5775edd7 100644
----- a/Singular/misc_ip.cc
--+++ b/Singular/misc_ip.cc
--@@ -1316,16 +1316,6 @@ static BOOLEAN iiCrossProd(leftv res, leftv args)
-- On(SW_USE_EZGCD_P);
-- On(SW_USE_QGCD);
-- Off(SW_USE_NTL_SORT); // may be changed by an command line option
--- factoryError=WerrorS;
---
---// NTL error handling (>= 9.3.0)
---#ifdef HAVE_NTL
---#if (((NTL_MAJOR_VERSION==9)&&(NTL_MINOR_VERSION>=3))||(NTL_MAJOR_VERSION>=10))
--- ErrorMsgCallback=WerrorS;
--- ErrorCallback=HALT;
---#endif
---#endif
---
-- // memory initialization: -----------------------------------------------
-- om_Opts.OutOfMemoryFunc = omSingOutOfMemoryFunc;
-- #ifndef OM_NDEBUG
-diff --git a/src/doc/en/constructions/algebraic_geometry.rst b/src/doc/en/constructions/algebraic_geometry.rst
-index 3933bf0839..76b173d80a 100644
---- a/src/doc/en/constructions/algebraic_geometry.rst
-+++ b/src/doc/en/constructions/algebraic_geometry.rst
-@@ -139,7 +139,7 @@ Other methods
-
- sage: singular.lib("brnoeth.lib")
- sage: s = singular.ring(2,'(x,y)','lp')
-- sage: I = singular.ideal('[x^4+x, y^4+y]')
-+ sage: I = singular.ideal('x^4+x', 'y^4+y')
- sage: L = singular.closed_points(I)
- sage: # Here you have all the points :
- sage: L # random
-@@ -329,7 +329,7 @@ Singular itself to help an understanding of how the wrapper works.
- sage: X = Curve(f); pts = X.rational_points()
- sage: D = X.divisor([ (3, pts[0]), (-1,pts[1]), (10, pts[5]) ])
- sage: X.riemann_roch_basis(D)
-- [(-x - 2*y)/(-2*x - 2*y), (-x + z)/(x + y)]
-+ [(-2*x + y)/(x + y), (-x + z)/(x + y)]
-
- - Using Singular's ``BrillNoether`` command (for details see the section
- Brill-Noether in the Singular online documentation
-diff --git a/src/sage/algebras/free_algebra.py b/src/sage/algebras/free_algebra.py
-index 9e846158d1..b3dc47ba3f 100644
---- a/src/sage/algebras/free_algebra.py
-+++ b/src/sage/algebras/free_algebra.py
-@@ -39,7 +39,15 @@ two-sided ideals, and thus provide ideal containment tests::
- Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
- sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
- sage: I.groebner_basis(degbound=4)
-- Twosided Ideal (y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z, y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z, y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z, y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z, y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (x*y + y*z,
-+ x*x - y*x - y*y - y*z,
-+ y*y*y - y*y*z + y*z*y - y*z*z,
-+ y*y*x + y*y*z + y*z*x + y*z*z,
-+ y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
-+ y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
-+ y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
-+ y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative Unital
-+ Algebra on 3 generators (x, y, z) over Rational Field
- sage: y*z*y*y*z*z + 2*y*z*y*z*z*x + y*z*y*z*z*z - y*z*z*y*z*x + y*z*z*z*z*x in I
- True
-
-@@ -232,7 +240,7 @@ class FreeAlgebraFactory(UniqueFactory):
- a*b^2*c^3
- """
- def create_key(self, base_ring, arg1=None, arg2=None,
-- sparse=None, order='degrevlex',
-+ sparse=None, order=None,
- names=None, name=None,
- implementation=None, degrees=None):
- """
-@@ -263,6 +271,8 @@ class FreeAlgebraFactory(UniqueFactory):
- return tuple(degrees),base_ring
- # test if we can use libSingular/letterplace
- if implementation == "letterplace":
-+ if order is None:
-+ order = 'degrevlex' if degrees is None else 'deglex'
- args = [arg for arg in (arg1, arg2) if arg is not None]
- kwds = dict(sparse=sparse, order=order, implementation="singular")
- if name is not None:
-@@ -273,7 +283,7 @@ class FreeAlgebraFactory(UniqueFactory):
- if degrees is None:
- return (PolRing,)
- from sage.all import TermOrder
-- T = PolRing.term_order() + TermOrder('lex',1)
-+ T = TermOrder(PolRing.term_order(), PolRing.ngens() + 1)
- varnames = list(PolRing.variable_names())
- newname = 'x'
- while newname in varnames:
-diff --git a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
-index e7fed21ada..e9c1c9d908 100644
---- a/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
-+++ b/src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx
-@@ -17,6 +17,7 @@ AUTHOR:
- # https://www.gnu.org/licenses/
- # ****************************************************************************
-
-+from sage.groups.perm_gps.all import CyclicPermutationGroup
- from sage.libs.singular.function import lib, singular_function
- from sage.misc.repr import repr_lincomb
- from sage.rings.polynomial.multi_polynomial_ideal import MPolynomialIdeal
-@@ -25,7 +26,6 @@ from cpython.object cimport PyObject_RichCompare
- # Define some singular functions
- lib("freegb.lib")
- poly_reduce = singular_function("NF")
--singular_system=singular_function("system")
-
- #####################
- # Free algebra elements
-@@ -445,9 +445,10 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
- cdef int i
- if P.monomial_divides(s_poly,p_poly):
- return True
-+ realngens = A._commutative_ring.ngens()
-+ CG = CyclicPermutationGroup(P.ngens())
- for i from 0 <= i < p_d-s_d:
-- s_poly = singular_system("stest",s_poly,1,
-- A._degbound,A.__ngens,ring=P)
-+ s_poly = s_poly * CG[realngens]
- if P.monomial_divides(s_poly,p_poly):
- return True
- return False
-@@ -601,7 +602,9 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
- # we must put the polynomials into the same ring
- left._poly = A._current_ring(left._poly)
- right._poly = A._current_ring(right._poly)
-- rshift = singular_system("stest",right._poly,left._poly.degree(),A._degbound,A.__ngens, ring=A._current_ring)
-+ realngens = A._commutative_ring.ngens()
-+ CG = CyclicPermutationGroup(A._current_ring.ngens())
-+ rshift = right._poly * CG[left._poly.degree() * realngens]
- return FreeAlgebraElement_letterplace(A,left._poly*rshift, check=False)
-
- def __pow__(FreeAlgebraElement_letterplace self, int n, k):
-@@ -627,10 +630,11 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
- self._poly = A._current_ring(self._poly)
- cdef int d = self._poly.degree()
- q = p = self._poly
-+ realngens = A._commutative_ring.ngens()
- cdef int i
-+ CG = CyclicPermutationGroup(A._current_ring.ngens())
- for i from 0<i<n:
-- q = singular_system("stest",q,d,A._degbound,A.__ngens,
-- ring=A._current_ring)
-+ q = q * CG[d * realngens]
- p *= q
- return FreeAlgebraElement_letterplace(A, p, check=False)
-
-diff --git a/src/sage/algebras/letterplace/free_algebra_letterplace.pxd b/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
-index 7e5f2bbe97..d1d162c3b4 100644
---- a/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
-+++ b/src/sage/algebras/letterplace/free_algebra_letterplace.pxd
-@@ -13,8 +13,15 @@ from sage.rings.ring cimport Algebra
- from sage.structure.element cimport AlgebraElement, ModuleElement, RingElement, Element
- from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomialRing_libsingular, MPolynomial_libsingular
- from sage.algebras.letterplace.free_algebra_element_letterplace cimport FreeAlgebraElement_letterplace
-+from sage.libs.singular.decl cimport ring
-
-
-+cdef class FreeAlgebra_letterplace_libsingular():
-+ cdef ring* _lp_ring
-+ cdef MPolynomialRing_libsingular _commutative_ring
-+ cdef MPolynomialRing_libsingular _lp_ring_internal
-+ cdef object __ngens
-+
- cdef class FreeAlgebra_letterplace(Algebra):
- cdef MPolynomialRing_libsingular _commutative_ring
- cdef MPolynomialRing_libsingular _current_ring
-diff --git a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
-index 39cfa4dfed..b520c4cab8 100644
---- a/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
-+++ b/src/sage/algebras/letterplace/free_algebra_letterplace.pyx
-@@ -37,7 +37,15 @@ The preceding containment test is based on the computation of Groebner
- bases with degree bound::
-
- sage: I.groebner_basis(degbound=4)
-- Twosided Ideal (y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z, y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z, y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z, y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z, y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (x*y + y*z,
-+ x*x - y*x - y*y - y*z,
-+ y*y*y - y*y*z + y*z*y - y*z*z,
-+ y*y*x + y*y*z + y*z*x + y*z*z,
-+ y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
-+ y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
-+ y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
-+ y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative Unital
-+ Algebra on 3 generators (x, y, z) over Rational Field
-
- When reducing an element by `I`, the original generators are chosen::
-
-@@ -67,7 +75,13 @@ different normal form::
- Lexicographic term order
- sage: J = L*[a*b+b*c,a^2+a*b-b*c-c^2]*L
- sage: J.groebner_basis(4)
-- Twosided Ideal (2*b*c*b - b*c*c + c*c*b, a*c*c - 2*b*c*a - 2*b*c*c - c*c*a, a*b + b*c, a*a - 2*b*c - c*c) of Free Associative Unital Algebra on 3 generators (a, b, c) over Rational Field
-+ Twosided Ideal (2*b*c*b - b*c*c + c*c*b,
-+ a*b + b*c,
-+ -a*c*c + 2*b*c*a + 2*b*c*c + c*c*a,
-+ a*c*c*b - 2*b*c*c*b + b*c*c*c,
-+ a*a - 2*b*c - c*c,
-+ a*c*c*a - 2*b*c*c*a - 4*b*c*c*c - c*c*c*c) of Free Associative Unital
-+ Algebra on 3 generators (a, b, c) over Rational Field
- sage: (b*c*b*b).normal_form(J)
- 1/2*b*c*c*b - 1/2*c*c*b*b
-
-@@ -105,15 +119,16 @@ TESTS::
- from sage.misc.misc_c import prod
- from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
- from sage.libs.singular.function import lib, singular_function
--from sage.rings.polynomial.term_order import TermOrder
-+from sage.libs.singular.function cimport RingWrap
-+from sage.libs.singular.ring cimport singular_ring_delete, singular_ring_reference
- from sage.categories.algebras import Algebras
- from sage.rings.noncommutative_ideals import IdealMonoid_nc
-+from sage.rings.polynomial.plural cimport new_CRing
-
- #####################
- # Define some singular functions
- lib("freegb.lib")
--poly_reduce = singular_function("NF")
--singular_system=singular_function("system")
-+freeAlgebra = singular_function("freeAlgebra")
-
- # unfortunately we cannot set Singular attributes for MPolynomialRing_libsingular
- # Hence, we must constantly work around Letterplace's sanity checks,
-@@ -242,7 +257,7 @@ cdef class FreeAlgebra_letterplace(Algebra):
- sage: F.<a,b,c> = FreeAlgebra(K, implementation='letterplace')
- sage: TestSuite(F).run()
- """
-- if not isinstance(R,MPolynomialRing_libsingular):
-+ if not isinstance(R, MPolynomialRing_libsingular):
- raise TypeError("A letterplace algebra must be provided by a polynomial ring of type %s" % MPolynomialRing_libsingular)
- self.__ngens = R.ngens()
- if degrees is None:
-@@ -260,7 +275,9 @@ cdef class FreeAlgebra_letterplace(Algebra):
- if degrees is None:
- self._degrees = tuple([int(1)]*self.__ngens)
- else:
-- if (not isinstance(degrees,(tuple,list))) or len(degrees)!=self.__ngens-1 or any(i <= 0 for i in degrees):
-+ if (not isinstance(degrees, (tuple, list))) \
-+ or len(degrees) != self.__ngens - self._nb_slackvars \
-+ or any(i <= 0 for i in degrees):
- raise TypeError("The generator degrees must be given by a list or tuple of %d positive integers" % (self.__ngens-1))
- self._degrees = tuple([int(i) for i in degrees])
- self.set_degbound(max(self._degrees))
-@@ -662,7 +679,7 @@ cdef class FreeAlgebra_letterplace(Algebra):
- Sage, since it does the reductions in a different order
- compared to Singular. Therefore, we call the original Singular
- reduction method, and prevent a warning message by asserting
-- that `G` is a Groebner basis.
-+ that `G` is a Groebner basis. ::
-
- sage: from sage.libs.singular.function import singular_function
- sage: poly_reduce = singular_function("NF")
-@@ -678,8 +695,10 @@ cdef class FreeAlgebra_letterplace(Algebra):
- ngens = self.__ngens
- degbound = self._degbound
- cdef list G = [C(x._poly) for x in g]
-+ from sage.groups.perm_gps.all import CyclicPermutationGroup
-+ CG = CyclicPermutationGroup(C.ngens())
- for y in G:
-- out.extend([y]+[singular_system("stest",y,n+1,degbound,ngens,ring=C) for n in xrange(d-y.degree())])
-+ out.extend([y]+[y * CG[ngens*(n+1)] for n in xrange(d-y.degree())])
- return C.ideal(out)
-
- ###########################
-@@ -875,3 +894,28 @@ cdef class FreeAlgebra_letterplace(Algebra):
- PNames[P.ngens(): len(PNames): P.ngens()+1] = list(Names[self.ngens(): len(Names): self.ngens()+1])[:P.degbound()]
- x = Ppoly.hom([Gens[Names.index(asdf)] for asdf in PNames])(x.letterplace_polynomial())
- return FreeAlgebraElement_letterplace(self,self._current_ring(x))
-+
-+cdef class FreeAlgebra_letterplace_libsingular():
-+ """
-+ Internally used wrapper around a Singular Letterplace polynomial ring.
-+ """
-+
-+ def __cinit__(self, MPolynomialRing_libsingular commutative_ring,
-+ int degbound):
-+ cdef RingWrap rw = freeAlgebra(commutative_ring, degbound)
-+ self._lp_ring = singular_ring_reference(rw._ring)
-+ # `_lp_ring` viewed as `MPolynomialRing_libsingular` with additional
-+ # letterplace attributes set (for internal use only)
-+ self._lp_ring_internal = new_CRing(rw, commutative_ring.base_ring())
-+ self._commutative_ring = commutative_ring
-+
-+ def __init__(self, commutative_ring, degbound):
-+ self.__ngens = commutative_ring.ngens() * degbound
-+
-+ def __dealloc__(self):
-+ r"""
-+ Carefully deallocate the ring, without changing ``currRing``
-+ (since this method can be at unpredictable times due to garbage
-+ collection).
-+ """
-+ singular_ring_delete(self._lp_ring)
-diff --git a/src/sage/algebras/letterplace/letterplace_ideal.pyx b/src/sage/algebras/letterplace/letterplace_ideal.pyx
-index f1430ee77c..c16803280b 100644
---- a/src/sage/algebras/letterplace/letterplace_ideal.pyx
-+++ b/src/sage/algebras/letterplace/letterplace_ideal.pyx
-@@ -18,7 +18,11 @@ One can compute Groebner bases out to a finite degree, can compute normal
- forms and can test containment in the ideal::
-
- sage: I.groebner_basis(degbound=3)
-- Twosided Ideal (y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (x*y + y*z,
-+ x*x - y*x - y*y - y*z,
-+ y*y*y - y*y*z + y*z*y - y*z*z,
-+ y*y*x + y*y*z + y*z*x + y*z*z) of Free Associative Unital Algebra
-+ on 3 generators (x, y, z) over Rational Field
- sage: (x*y*z*y*x).normal_form(I)
- y*z*z*y*z + y*z*z*z*x + y*z*z*z*z
- sage: x*y*z*y*x - (x*y*z*y*x).normal_form(I) in I
-@@ -42,14 +46,14 @@ AUTHOR:
-
- from sage.rings.noncommutative_ideals import Ideal_nc
- from sage.libs.singular.function import lib, singular_function
--from sage.algebras.letterplace.free_algebra_letterplace cimport FreeAlgebra_letterplace
-+from sage.algebras.letterplace.free_algebra_letterplace cimport FreeAlgebra_letterplace, FreeAlgebra_letterplace_libsingular
- from sage.algebras.letterplace.free_algebra_element_letterplace cimport FreeAlgebraElement_letterplace
- from sage.rings.infinity import Infinity
-
- #####################
- # Define some singular functions
- lib("freegb.lib")
--singular_system=singular_function("system")
-+singular_twostd=singular_function("twostd")
- poly_reduce=singular_function("NF")
-
- class LetterplaceIdeal(Ideal_nc):
-@@ -69,14 +73,22 @@ class LetterplaceIdeal(Ideal_nc):
- sage: I.groebner_basis(2)
- Twosided Ideal (x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
- sage: I.groebner_basis(4)
-- Twosided Ideal (y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z, y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z, y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z, y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z, y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (x*y + y*z,
-+ x*x - y*x - y*y - y*z,
-+ y*y*y - y*y*z + y*z*y - y*z*z,
-+ y*y*x + y*y*z + y*z*x + y*z*z,
-+ y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
-+ y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
-+ y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
-+ y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative Unital
-+ Algebra on 3 generators (x, y, z) over Rational Field
-
- Groebner bases are cached. If one has computed a Groebner basis
- out to a high degree then it will also be returned if a Groebner
- basis with a lower degree bound is requested::
-
-- sage: I.groebner_basis(2)
-- Twosided Ideal (y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z, y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z, y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z, y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z, y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ sage: I.groebner_basis(2) is I.groebner_basis(4)
-+ True
-
- Of course, the normal form of any element has to satisfy the following::
-
-@@ -116,8 +128,11 @@ class LetterplaceIdeal(Ideal_nc):
- sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace',degrees=[1,2,3])
- sage: I = F*[x*y+z-y*x,x*y*z-x^6+y^3]*F
- sage: I.groebner_basis(Infinity)
-- Twosided Ideal (x*z*z - y*x*x*z - y*x*y*y + y*x*z*x + y*y*y*x + z*x*z + z*y*y - z*z*x,
-- x*y - y*x + z,
-+ Twosided Ideal (x*y - y*x + z,
-+ x*x*x*x*x*x - y*x*z - y*y*y + z*z,
-+ x*z*z - y*x*x*z + y*x*z*x + y*y*z + y*z*y + z*x*z + z*y*y - z*z*x,
-+ x*x*x*x*x*z + x*x*x*x*z*x + x*x*x*z*x*x + x*x*z*x*x*x + x*z*x*x*x*x +
-+ y*x*z*y - y*y*x*z + y*z*z + z*x*x*x*x*x - z*z*y,
- x*x*x*x*z*y*y + x*x*x*z*y*y*x - x*x*x*z*y*z - x*x*z*y*x*z + x*x*z*y*y*x*x +
- x*x*z*y*y*y - x*x*z*y*z*x - x*z*y*x*x*z - x*z*y*x*z*x +
- x*z*y*y*x*x*x + 2*x*z*y*y*y*x - 2*x*z*y*y*z - x*z*y*z*x*x -
-@@ -135,10 +150,7 @@ class LetterplaceIdeal(Ideal_nc):
- z*y*y*y*y - 3*z*y*y*z*x - z*y*z*x*x*x - 2*z*y*z*y*x +
- 2*z*y*z*z - z*z*x*x*x*x*x + 4*z*z*x*x*z + 4*z*z*x*z*x -
- 4*z*z*y*x*x*x - 3*z*z*y*y*x + 4*z*z*y*z + 4*z*z*z*x*x +
-- 2*z*z*z*y,
-- x*x*x*x*x*z + x*x*x*x*z*x + x*x*x*z*x*x + x*x*z*x*x*x + x*z*x*x*x*x +
-- y*x*z*y - y*y*x*z + y*z*z + z*x*x*x*x*x - z*z*y,
-- x*x*x*x*x*x - y*x*z - y*y*y + z*z)
-+ 2*z*z*z*y)
- of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-
- Again, we can compute normal forms::
-@@ -226,7 +238,15 @@ class LetterplaceIdeal(Ideal_nc):
- sage: I.groebner_basis() # not tested
- Twosided Ideal (y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
- sage: I.groebner_basis(4)
-- Twosided Ideal (y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z, y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z, y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z, y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z, y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (x*y + y*z,
-+ x*x - y*x - y*y - y*z,
-+ y*y*y - y*y*z + y*z*y - y*z*z,
-+ y*y*x + y*y*z + y*z*x + y*z*z,
-+ y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
-+ y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
-+ y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
-+ y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative
-+ Unital Algebra on 3 generators (x, y, z) over Rational Field
- sage: I.groebner_basis(2) is I.groebner_basis(4)
- True
- sage: G = I.groebner_basis(4)
-@@ -238,7 +258,14 @@ class LetterplaceIdeal(Ideal_nc):
-
- sage: I = F*[x*y-y*x,x*z-z*x,y*z-z*y,x^2*y-z^3,x*y^2+z*x^2]*F
- sage: I.groebner_basis(Infinity)
-- Twosided Ideal (z*z*z*y*y + z*z*z*z*x, z*x*x*x + z*z*z*y, y*z - z*y, y*y*x + z*x*x, y*x*x - z*z*z, x*z - z*x, x*y - y*x) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
-+ Twosided Ideal (-y*z + z*y,
-+ -x*z + z*x,
-+ -x*y + y*x,
-+ x*x*z + x*y*y,
-+ x*x*y - z*z*z,
-+ x*x*x*z + y*z*z*z,
-+ x*z*z*z*z + y*y*z*z*z) of Free Associative Unital Algebra
-+ on 3 generators (x, y, z) over Rational Field
-
- Since the commutators of the generators are contained in the ideal,
- we can verify the above result by a computation in a polynomial ring
-@@ -275,9 +302,32 @@ class LetterplaceIdeal(Ideal_nc):
- libsingular_options['redSB'] = True
- A.set_degbound(degbound)
- P = A._current_ring
-- out = [FreeAlgebraElement_letterplace(A,X,check=False) for X in
-- singular_system("freegb",P.ideal([x._poly for x in self.__GB.gens()]),
-- degbound,A.__ngens, ring = P)]
-+
-+ # note that degbound might be smaller than A._degbound due to caching,
-+ # but degbound must be large enough to map all generators to the
-+ # letterplace ring L
-+ if degbound < A._degbound:
-+ max_deg = max([x._poly.degree() for x in self.__GB.gens()])
-+ if degbound < max_deg:
-+ degbound = max_deg
-+
-+ # The following is a workaround for calling Singular's new Letterplace
-+ # API (see :trac:`25993`). We construct a temporary polynomial ring L
-+ # with letterplace attributes set as required by the API. As L has
-+ # duplicate variable names, we need to handle this ring carefully; in
-+ # particular, we cannot coerce to and from L, so we use homomorphisms
-+ # for the conversion.
-+
-+ cdef FreeAlgebra_letterplace_libsingular lp_ring = \
-+ FreeAlgebra_letterplace_libsingular(A._commutative_ring, degbound)
-+ L = lp_ring._lp_ring_internal
-+ to_L = P.hom(L.gens(), L, check=False)
-+ from_L = L.hom(P.gens(), P, check=False)
-+ I = L.ideal([to_L(x._poly) for x in self.__GB.gens()])
-+ gb = singular_twostd(I)
-+ out = [FreeAlgebraElement_letterplace(A, from_L(X), check=False)
-+ for X in gb]
-+
- libsingular_options['redTail'] = bck[0]
- libsingular_options['redSB'] = bck[1]
- self.__GB = A.ideal(out,side='twosided',coerce=False)
-diff --git a/src/sage/combinat/root_system/hecke_algebra_representation.py b/src/sage/combinat/root_system/hecke_algebra_representation.py
-index 51f4113706..ba42ed1524 100644
---- a/src/sage/combinat/root_system/hecke_algebra_representation.py
-+++ b/src/sage/combinat/root_system/hecke_algebra_representation.py
-@@ -746,7 +746,7 @@ class HeckeAlgebraRepresentation(WithEqualityById, SageObject):
- -2121 + 212,
- (q2/(q1-q2))*2121 + (q2/(-q1+q2))*121 + (q2/(-q1+q2))*212 - 12 + ((-q2)/(-q1+q2))*21 + 2,
- ((-q2^2)/(-q1^2+q1*q2-q2^2))*2121 - 121 + (q2^2/(-q1^2+q1*q2-q2^2))*212 + 21,
-- ((q1^2+q2^2)/(-q1^2+q1*q2-q2^2))*2121 + ((-q1^2-q2^2)/(-q1^2+q1*q2-q2^2))*121 + ((-q2^2)/(-q1^2+q1*q2-q2^2))*212 + (q2^2/(-q1^2+q1*q2-q2^2))*12 - 21 + 1,
-+ ((-q1^2-q2^2)/(q1^2-q1*q2+q2^2))*2121 + ((-q1^2-q2^2)/(-q1^2+q1*q2-q2^2))*121 + ((-q2^2)/(-q1^2+q1*q2-q2^2))*212 + (q2^2/(-q1^2+q1*q2-q2^2))*12 - 21 + 1,
- 2121,
- (q2/(-q1+q2))*2121 + ((-q2)/(-q1+q2))*121 - 212 + 12,
- -2121 + 121]
-diff --git a/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py b/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
-index 35377724c9..ee8ddec7dd 100644
---- a/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
-+++ b/src/sage/combinat/root_system/non_symmetric_macdonald_polynomials.py
-@@ -555,8 +555,7 @@ class NonSymmetricMacdonaldPolynomials(CherednikOperatorsEigenvectors):
- B[(1, 0, 0)]
-
- sage: E[-omega[1]]
-- B[(-1, 0, 0)] + ((-q*q1^6-q*q1^5*q2-q1*q2^5-q2^6)/(-q^3*q1^6-q^2*q1^5*q2-q*q1*q2^5-q2^6))*B[(1, 0, 0)] + ((-q1-q2)/(-q*q1-q2))*B[(0, -1, 0)]
-- + ((q1+q2)/(q*q1+q2))*B[(0, 1, 0)] + ((-q1-q2)/(-q*q1-q2))*B[(0, 0, -1)] + ((-q1-q2)/(-q*q1-q2))*B[(0, 0, 1)]
-+ B[(-1, 0, 0)] + ((q*q1^6+q*q1^5*q2+q1*q2^5+q2^6)/(q^3*q1^6+q^2*q1^5*q2+q*q1*q2^5+q2^6))*B[(1, 0, 0)] + ((q1+q2)/(q*q1+q2))*B[(0, -1, 0)] + ((q1+q2)/(q*q1+q2))*B[(0, 1, 0)] + ((q1+q2)/(q*q1+q2))*B[(0, 0, -1)] + ((q1+q2)/(q*q1+q2))*B[(0, 0, 1)]
-
- sage: E[omega[2]]
- ((-q1*q2^3-q2^4)/(q*q1^4-q2^4))*B[(1, 0, 0)] + B[(0, 1, 0)]
-@@ -567,14 +566,7 @@ class NonSymmetricMacdonaldPolynomials(CherednikOperatorsEigenvectors):
- + ((-q1*q2-q2^2)/(q*q1^2-q2^2))*B[(0, 0, -1)] + ((q1*q2+q2^2)/(-q*q1^2+q2^2))*B[(0, 0, 1)]
-
- sage: E[-omega[1]-omega[2]]
-- ((-q^3*q1^6-q^3*q1^5*q2-2*q^2*q1^6-3*q^2*q1^5*q2+q^2*q1^4*q2^2+2*q^2*q1^3*q2^3+q*q1^5*q2+2*q*q1^4*q2^2-q*q1^3*q2^3-2*q*q1^2*q2^4+q*q1*q2^5+q*q2^6-q1^3*q2^3-q1^2*q2^4+2*q1*q2^5+2*q2^6)/(-q^4*q1^6-q^3*q1^5*q2+q^3*q1^4*q2^2-q*q1^2*q2^4+q*q1*q2^5+q2^6))*B[(0, 0, 0)] + B[(-1, -1, 0)]
-- + ((q*q1^4+q*q1^3*q2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(-1, 1, 0)] + ((q1+q2)/(q*q1+q2))*B[(-1, 0, -1)] + ((-q1-q2)/(-q*q1-q2))*B[(-1, 0, 1)]
-- + ((q*q1^4+q*q1^3*q2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(1, -1, 0)]
-- + ((-q^2*q1^6-q^2*q1^5*q2-q*q1^5*q2+q*q1^3*q2^3+q1^5*q2+q1^4*q2^2-q1^3*q2^3-q1^2*q2^4+q1*q2^5+q2^6)/(-q^4*q1^6-q^3*q1^5*q2+q^3*q1^4*q2^2-q*q1^2*q2^4+q*q1*q2^5+q2^6))*B[(1, 1, 0)]
-- + ((-q*q1^4-2*q*q1^3*q2-q*q1^2*q2^2+q1^3*q2+q1^2*q2^2-q1*q2^3-q2^4)/(-q^3*q1^4-q^2*q1^3*q2-q*q1*q2^3-q2^4))*B[(1, 0, -1)]
-- + ((-q*q1^4-2*q*q1^3*q2-q*q1^2*q2^2+q1^3*q2+q1^2*q2^2-q1*q2^3-q2^4)/(-q^3*q1^4-q^2*q1^3*q2-q*q1*q2^3-q2^4))*B[(1, 0, 1)] + ((q1+q2)/(q*q1+q2))*B[(0, -1, -1)]
-- + ((-q1-q2)/(-q*q1-q2))*B[(0, -1, 1)] + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(0, 1, -1)]
-- + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(0, 1, 1)]
-+ ((q^3*q1^6+q^3*q1^5*q2+2*q^2*q1^6+3*q^2*q1^5*q2-q^2*q1^4*q2^2-2*q^2*q1^3*q2^3-q*q1^5*q2-2*q*q1^4*q2^2+q*q1^3*q2^3+2*q*q1^2*q2^4-q*q1*q2^5-q*q2^6+q1^3*q2^3+q1^2*q2^4-2*q1*q2^5-2*q2^6)/(q^4*q1^6+q^3*q1^5*q2-q^3*q1^4*q2^2+q*q1^2*q2^4-q*q1*q2^5-q2^6))*B[(0, 0, 0)] + B[(-1, -1, 0)] + ((q*q1^4+q*q1^3*q2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(-1, 1, 0)] + ((q1+q2)/(q*q1+q2))*B[(-1, 0, -1)] + ((-q1-q2)/(-q*q1-q2))*B[(-1, 0, 1)] + ((q*q1^4+q*q1^3*q2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(1, -1, 0)] + ((q^2*q1^6+q^2*q1^5*q2+q*q1^5*q2-q*q1^3*q2^3-q1^5*q2-q1^4*q2^2+q1^3*q2^3+q1^2*q2^4-q1*q2^5-q2^6)/(q^4*q1^6+q^3*q1^5*q2-q^3*q1^4*q2^2+q*q1^2*q2^4-q*q1*q2^5-q2^6))*B[(1, 1, 0)] + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(1, 0, -1)] + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(1, 0, 1)] + ((q1+q2)/(q*q1+q2))*B[(0, -1, -1)] + ((q1+q2)/(q*q1+q2))*B[(0, -1, 1)] + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(0, 1, -1)] + ((q*q1^4+2*q*q1^3*q2+q*q1^2*q2^2-q1^3*q2-q1^2*q2^2+q1*q2^3+q2^4)/(q^3*q1^4+q^2*q1^3*q2+q*q1*q2^3+q2^4))*B[(0, 1, 1)]
-
- sage: E[omega[1]-omega[2]]
- ((q^3*q1^7+q^3*q1^6*q2-q*q1*q2^6-q*q2^7)/(q^3*q1^7-q^2*q1^5*q2^2+q*q1^2*q2^5-q2^7))*B[(0, 0, 0)] + B[(1, -1, 0)]
-@@ -812,7 +804,7 @@ class NonSymmetricMacdonaldPolynomials(CherednikOperatorsEigenvectors):
- ((-q*q1*q2^3-q*q2^4)/(q^2*q1^4-q2^4))*B[(0, 0)] + B[(1, 0)]
-
- sage: E[2*omega[2]] # long time # not checked against Bogdan's notes, but a good self-consistency test
-- ((-q^12*q1^6-q^12*q1^5*q2+2*q^10*q1^5*q2+5*q^10*q1^4*q2^2+3*q^10*q1^3*q2^3+2*q^8*q1^5*q2+4*q^8*q1^4*q2^2+q^8*q1^3*q2^3-q^8*q1^2*q2^4+q^8*q1*q2^5+q^8*q2^6-q^6*q1^3*q2^3+q^6*q1^2*q2^4+4*q^6*q1*q2^5+2*q^6*q2^6+q^4*q1^3*q2^3+3*q^4*q1^2*q2^4+4*q^4*q1*q2^5+2*q^4*q2^6)/(-q^12*q1^6-q^10*q1^5*q2-q^8*q1^3*q2^3+q^6*q1^4*q2^2-q^6*q1^2*q2^4+q^4*q1^3*q2^3+q^2*q1*q2^5+q2^6))*B[(0, 0)] + ((q^7*q1^2*q2+2*q^7*q1*q2^2+q^7*q2^3+q^5*q1^2*q2+2*q^5*q1*q2^2+q^5*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(-1, 0)] + ((q^6*q1*q2+q^6*q2^2)/(-q^6*q1^2+q2^2))*B[(-1, -1)] + ((q^6*q1^2*q2+2*q^6*q1*q2^2+q^6*q2^3+q^4*q1^2*q2+2*q^4*q1*q2^2+q^4*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(-1, 1)] + ((q^3*q1*q2+q^3*q2^2)/(-q^6*q1^2+q2^2))*B[(-1, 2)] + ((-q^7*q1^3-q^7*q1^2*q2+q^7*q1*q2^2+q^7*q2^3+2*q^5*q1^2*q2+4*q^5*q1*q2^2+2*q^5*q2^3+2*q^3*q1^2*q2+4*q^3*q1*q2^2+2*q^3*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(1, 0)] + ((-q^6*q1^2*q2-2*q^6*q1*q2^2-q^6*q2^3-q^4*q1^2*q2-2*q^4*q1*q2^2-q^4*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(1, -1)] + ((q^8*q1^3+q^8*q1^2*q2+q^6*q1^3+q^6*q1^2*q2-q^6*q1*q2^2-q^6*q2^3-2*q^4*q1^2*q2-4*q^4*q1*q2^2-2*q^4*q2^3-q^2*q1^2*q2-3*q^2*q1*q2^2-2*q^2*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(1, 1)] + ((-q^5*q1^2-q^5*q1*q2+q^3*q1*q2+q^3*q2^2+q*q1*q2+q*q2^2)/(-q^6*q1^2+q2^2))*B[(1, 2)] + ((-q^6*q1^2-q^6*q1*q2+q^4*q1*q2+q^4*q2^2+q^2*q1*q2+q^2*q2^2)/(-q^6*q1^2+q2^2))*B[(2, 0)] + ((q^3*q1*q2+q^3*q2^2)/(-q^6*q1^2+q2^2))*B[(2, -1)] + ((-q^5*q1^2-q^5*q1*q2+q^3*q1*q2+q^3*q2^2+q*q1*q2+q*q2^2)/(-q^6*q1^2+q2^2))*B[(2, 1)] + B[(2, 2)] + ((-q^7*q1^2*q2-2*q^7*q1*q2^2-q^7*q2^3-q^5*q1^2*q2-2*q^5*q1*q2^2-q^5*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(0, -1)] + ((q^7*q1^3+q^7*q1^2*q2-q^7*q1*q2^2-q^7*q2^3-2*q^5*q1^2*q2-4*q^5*q1*q2^2-2*q^5*q2^3-2*q^3*q1^2*q2-4*q^3*q1*q2^2-2*q^3*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(0, 1)] + ((-q^6*q1^2-q^6*q1*q2+q^4*q1*q2+q^4*q2^2+q^2*q1*q2+q^2*q2^2)/(-q^6*q1^2+q2^2))*B[(0, 2)]
-+ ((-q^12*q1^6-q^12*q1^5*q2+2*q^10*q1^5*q2+5*q^10*q1^4*q2^2+3*q^10*q1^3*q2^3+2*q^8*q1^5*q2+4*q^8*q1^4*q2^2+q^8*q1^3*q2^3-q^8*q1^2*q2^4+q^8*q1*q2^5+q^8*q2^6-q^6*q1^3*q2^3+q^6*q1^2*q2^4+4*q^6*q1*q2^5+2*q^6*q2^6+q^4*q1^3*q2^3+3*q^4*q1^2*q2^4+4*q^4*q1*q2^5+2*q^4*q2^6)/(-q^12*q1^6-q^10*q1^5*q2-q^8*q1^3*q2^3+q^6*q1^4*q2^2-q^6*q1^2*q2^4+q^4*q1^3*q2^3+q^2*q1*q2^5+q2^6))*B[(0, 0)] + ((q^7*q1^2*q2+2*q^7*q1*q2^2+q^7*q2^3+q^5*q1^2*q2+2*q^5*q1*q2^2+q^5*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(-1, 0)] + ((-q^6*q1*q2-q^6*q2^2)/(q^6*q1^2-q2^2))*B[(-1, -1)] + ((q^6*q1^2*q2+2*q^6*q1*q2^2+q^6*q2^3+q^4*q1^2*q2+2*q^4*q1*q2^2+q^4*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(-1, 1)] + ((-q^3*q1*q2-q^3*q2^2)/(q^6*q1^2-q2^2))*B[(-1, 2)] + ((q^7*q1^3+q^7*q1^2*q2-q^7*q1*q2^2-q^7*q2^3-2*q^5*q1^2*q2-4*q^5*q1*q2^2-2*q^5*q2^3-2*q^3*q1^2*q2-4*q^3*q1*q2^2-2*q^3*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(1, 0)] + ((q^6*q1^2*q2+2*q^6*q1*q2^2+q^6*q2^3+q^4*q1^2*q2+2*q^4*q1*q2^2+q^4*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(1, -1)] + ((q^8*q1^3+q^8*q1^2*q2+q^6*q1^3+q^6*q1^2*q2-q^6*q1*q2^2-q^6*q2^3-2*q^4*q1^2*q2-4*q^4*q1*q2^2-2*q^4*q2^3-q^2*q1^2*q2-3*q^2*q1*q2^2-2*q^2*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(1, 1)] + ((q^5*q1^2+q^5*q1*q2-q^3*q1*q2-q^3*q2^2-q*q1*q2-q*q2^2)/(q^6*q1^2-q2^2))*B[(1, 2)] + ((-q^6*q1^2-q^6*q1*q2+q^4*q1*q2+q^4*q2^2+q^2*q1*q2+q^2*q2^2)/(-q^6*q1^2+q2^2))*B[(2, 0)] + ((-q^3*q1*q2-q^3*q2^2)/(q^6*q1^2-q2^2))*B[(2, -1)] + ((-q^5*q1^2-q^5*q1*q2+q^3*q1*q2+q^3*q2^2+q*q1*q2+q*q2^2)/(-q^6*q1^2+q2^2))*B[(2, 1)] + B[(2, 2)] + ((q^7*q1^2*q2+2*q^7*q1*q2^2+q^7*q2^3+q^5*q1^2*q2+2*q^5*q1*q2^2+q^5*q2^3)/(-q^8*q1^3-q^6*q1^2*q2+q^2*q1*q2^2+q2^3))*B[(0, -1)] + ((q^7*q1^3+q^7*q1^2*q2-q^7*q1*q2^2-q^7*q2^3-2*q^5*q1^2*q2-4*q^5*q1*q2^2-2*q^5*q2^3-2*q^3*q1^2*q2-4*q^3*q1*q2^2-2*q^3*q2^3)/(q^8*q1^3+q^6*q1^2*q2-q^2*q1*q2^2-q2^3))*B[(0, 1)] + ((q^6*q1^2+q^6*q1*q2-q^4*q1*q2-q^4*q2^2-q^2*q1*q2-q^2*q2^2)/(q^6*q1^2-q2^2))*B[(0, 2)]
- sage: E.recursion(2*omega[2])
- [0, 1, 0, 2, 1, 0, 2, 1, 0]
-
-@@ -997,7 +989,7 @@ class NonSymmetricMacdonaldPolynomials(CherednikOperatorsEigenvectors):
- sage: L0 = E.keys()
- sage: omega = L0.fundamental_weights()
- sage: E[2*omega[2]]
-- ((q*q1+q*q2)/(q*q1+q2))*B[(1, 2, 1)] + ((q*q1+q*q2)/(q*q1+q2))*B[(2, 1, 1)] + B[(2, 2, 0)]
-+ ((-q*q1-q*q2)/(-q*q1-q2))*B[(1, 2, 1)] + ((-q*q1-q*q2)/(-q*q1-q2))*B[(2, 1, 1)] + B[(2, 2, 0)]
- sage: for d in range(4): # long time (9s)
- ....: for weight in IntegerVectors(d,3).map(list).map(L0):
- ....: eigenvalues = E.eigenvalues(E[L0(weight)])
-diff --git a/src/sage/combinat/sf/macdonald.py b/src/sage/combinat/sf/macdonald.py
-index 49a42e2786..53750a6341 100644
---- a/src/sage/combinat/sf/macdonald.py
-+++ b/src/sage/combinat/sf/macdonald.py
-@@ -482,7 +482,7 @@ class Macdonald(UniqueRepresentation):
- sage: Ht = Sym.macdonald().Ht()
- sage: s = Sym.schur()
- sage: Ht(s([2,1]))
-- ((-q)/(-q*t^2+t^3+q^2-q*t))*McdHt[1, 1, 1] + ((q^2+q*t+t^2)/(-q^2*t^2+q^3+t^3-q*t))*McdHt[2, 1] + (t/(-q^3+q^2*t+q*t-t^2))*McdHt[3]
-+ (q/(q*t^2-t^3-q^2+q*t))*McdHt[1, 1, 1] + ((-q^2-q*t-t^2)/(q^2*t^2-q^3-t^3+q*t))*McdHt[2, 1] + (t/(-q^3+q^2*t+q*t-t^2))*McdHt[3]
- sage: Ht(s([2]))
- ((-q)/(-q+t))*McdHt[1, 1] + (t/(-q+t))*McdHt[2]
- """
-@@ -900,7 +900,7 @@ class MacdonaldPolynomials_generic(sfa.SymmetricFunctionAlgebra_generic):
- sage: Q.product(Q[1],Q[2])
- McdQ[2, 1] + ((q^2*t-q^2+q*t-q+t-1)/(q^2*t-1))*McdQ[3]
- sage: Ht.product(Ht[1],Ht[2])
-- ((-q^2+1)/(-q^2+t))*McdHt[2, 1] + ((-t+1)/(q^2-t))*McdHt[3]
-+ ((q^2-1)/(q^2-t))*McdHt[2, 1] + ((t-1)/(-q^2+t))*McdHt[3]
- """
- return self(self._s(left) * self._s(right))
-
-diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py
-index 88ea467d9e..7a9f224e9c 100644
---- a/src/sage/interfaces/singular.py
-+++ b/src/sage/interfaces/singular.py
-@@ -191,13 +191,21 @@ The 1x1 and 2x2 minors::
- 6*y+2*x^3-6*x^2*y,
- 6*x^2*y-6*x*y^2,
- 6*x^2*y-6*x*y^2,
-- 6*x+6*x*y^2-2*y^3
-+ 6*x+6*x*y^2-2*y^3,
-+ 0,
-+ 0,
-+ 0,
-+ 0
- sage: H.minor(2)
- 12*y+4*x^3-12*x^2*y,
- 12*x^2*y-12*x*y^2,
- 12*x^2*y-12*x*y^2,
- 12*x+12*x*y^2-4*y^3,
-- -36*x*y-12*x^4+36*x^3*y-36*x*y^3+12*y^4+24*x^4*y^2-32*x^3*y^3+24*x^2*y^4
-+ -36*x*y-12*x^4+36*x^3*y-36*x*y^3+12*y^4+24*x^4*y^2-32*x^3*y^3+24*x^2*y^4,
-+ 0,
-+ 0,
-+ 0,
-+ 0
-
- ::
-
-@@ -240,7 +248,7 @@ Groebner basis for some ideal, using Singular through Sage.
-
- ::
-
-- sage: singular.lib('poly.lib')
-+ 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
-@@ -260,7 +268,7 @@ We restart everything and try again, but correctly.
- ::
-
- sage: singular.quit()
-- sage: singular.lib('poly.lib'); R = singular.ring(32003, '(a,b,c,d,e,f)', 'lp')
-+ sage: singular.lib('polylib.lib'); R = singular.ring(32003, '(a,b,c,d,e,f)', 'lp')
- sage: I = singular.ideal('cyclic(6)')
- sage: I.groebner()
- f^48-2554*f^42-15674*f^36+12326*f^30-12326*f^18+15674*f^12+2554*f^6-1,
-diff --git a/src/sage/libs/singular/function.pyx b/src/sage/libs/singular/function.pyx
-index bf03efe222..8a9b771f26 100644
---- a/src/sage/libs/singular/function.pyx
-+++ b/src/sage/libs/singular/function.pyx
-@@ -938,7 +938,7 @@ cdef class Converter(SageObject):
- sage: C = Curve((x-y)*(y-z)*(z-x))
- sage: I = C.defining_ideal()
- sage: import sage.libs.singular.function_factory
-- sage: freerank = sage.libs.singular.function_factory.ff.poly__lib.freerank
-+ sage: freerank = sage.libs.singular.function_factory.ff.polylib__lib.freerank
- sage: freerank(I, true)
- [-1, [x^2*y - x*y^2 - x^2*z + y^2*z + x*z^2 - y*z^2]]
-
-@@ -1257,7 +1257,7 @@ cdef class SingularFunction(SageObject):
- Traceback (most recent call last):
- ...
- RuntimeError: error in Singular function call 'size':
-- Wrong number of arguments (got 2 arguments, arity code is 300)
-+ Wrong number of arguments (got 2 arguments, arity code is 302)
- sage: size('foobar', ring=P)
- 6
-
-@@ -1308,7 +1308,7 @@ cdef class SingularFunction(SageObject):
- ...
- RuntimeError: error in Singular function call 'triangL':
- The input is no groebner basis.
-- leaving triang.lib::triangL
-+ leaving triang.lib::triangL (0)
-
- Flush any stray output -- see :trac:`28622`::
-
-@@ -1671,17 +1671,17 @@ def singular_function(name):
- Traceback (most recent call last):
- ...
- RuntimeError: error in Singular function call 'factorize':
-- Wrong number of arguments (got 0 arguments, arity code is 303)
-+ Wrong number of arguments (got 0 arguments, arity code is 305)
- sage: factorize(f, 1, 2)
- Traceback (most recent call last):
- ...
- RuntimeError: error in Singular function call 'factorize':
-- Wrong number of arguments (got 3 arguments, arity code is 303)
-+ Wrong number of arguments (got 3 arguments, arity code is 305)
- sage: factorize(f, 1, 2, 3)
- Traceback (most recent call last):
- ...
- RuntimeError: error in Singular function call 'factorize':
-- Wrong number of arguments (got 4 arguments, arity code is 303)
-+ Wrong number of arguments (got 4 arguments, arity code is 305)
-
- The Singular function ``list`` can be called with any number of
- arguments::
-diff --git a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
-index 4a2a6de5f6..1975374e2a 100644
---- a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
-+++ b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
-@@ -1578,7 +1578,7 @@ class FractionWithFactoredDenominator(RingElement):
- (1, [(x*y + x + y - 1, 2)])
- sage: alpha = [4, 3]
- sage: decomp = F.asymptotic_decomposition(alpha); decomp
-- (0, []) + (-3/2*r*(1/y + 1) - 1/2/y - 1/2, [(x*y + x + y - 1, 1)])
-+ (0, []) + (-2*r*(1/x + 1) - 1/2/x - 1/2, [(x*y + x + y - 1, 1)])
- sage: F1 = decomp[1]
- sage: p = {y: 1/3, x: 1/2}
- sage: asy = F1.asymptotics(p, alpha, 2, verbose=True)
-@@ -1612,7 +1612,7 @@ class FractionWithFactoredDenominator(RingElement):
- sage: alpha = [3, 3, 2]
- sage: decomp = F.asymptotic_decomposition(alpha); decomp
- (0, []) +
-- (-16*r*(3/y - 4/z) - 16/y + 32/z,
-+ (16*r*(3/x - 2/z) + 16/x - 16/z,
- [(x + 2*y + z - 4, 1), (2*x + y + z - 4, 1)])
- sage: F1 = decomp[1]
- sage: p = {x: 1, y: 1, z: 1}
-diff --git a/src/sage/rings/ideal.py b/src/sage/rings/ideal.py
-index 72548769de..53076ac62e 100644
---- a/src/sage/rings/ideal.py
-+++ b/src/sage/rings/ideal.py
-@@ -1709,7 +1709,7 @@ def Cyclic(R, n=None, homog=False, singular=None):
- from sage.interfaces.singular import singular as singular_default
- singular = singular_default
-
-- singular.lib("poly")
-+ singular.lib("polylib")
- R2 = R.change_ring(RationalField())
- R2._singular_().set_ring()
-
-@@ -1760,7 +1760,7 @@ def Katsura(R, n=None, homog=False, singular=None):
- if singular is None:
- from sage.interfaces.singular import singular as singular_default
- singular = singular_default
-- singular.lib("poly")
-+ singular.lib("polylib")
- R2 = R.change_ring(RationalField())
- R2._singular_().set_ring()
-
-diff --git a/src/sage/rings/polynomial/laurent_polynomial_ideal.py b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
-index 886458ff1e..ec8e83ea80 100644
---- a/src/sage/rings/polynomial/laurent_polynomial_ideal.py
-+++ b/src/sage/rings/polynomial/laurent_polynomial_ideal.py
-@@ -470,8 +470,8 @@ class LaurentPolynomialIdeal( Ideal_generic ):
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = P.ideal((p*q^2, y-z^2))
- sage: I.associated_primes()
-- (Ideal (y + 1, z^2 + 1) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^2 - y, y*z + 2, y^2 + 2*z) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
-+ (Ideal (z^2 - y, y*z + 2, y^2 + 2*z) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (y + 1, z^2 + 1) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
- """
- l = self.polynomial_ideal(saturate=False).associated_primes()
- l2 = [self.ring().ideal(I.gens(), hint=I) for I in l]
-@@ -490,8 +490,8 @@ class LaurentPolynomialIdeal( Ideal_generic ):
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = P.ideal((p*q^2, y-z^2))
- sage: I.minimal_associated_primes()
-- (Ideal (z^2 + 1, -z^2 + y) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^3 + 2, -z^2 + y) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
-+ (Ideal (z^3 + 2, -z^2 + y) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, -z^2 + y) of Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
- """
- l = self.polynomial_ideal(saturate=saturate).minimal_associated_primes()
- l2 = [self.ring().ideal(I.gens(), hint=I) for I in l]
-diff --git a/src/sage/rings/polynomial/multi_polynomial_element.py b/src/sage/rings/polynomial/multi_polynomial_element.py
-index 43e93b823f..1bd3696c73 100644
---- a/src/sage/rings/polynomial/multi_polynomial_element.py
-+++ b/src/sage/rings/polynomial/multi_polynomial_element.py
-@@ -2230,7 +2230,7 @@ def degree_lowest_rational_function(r, x):
- ::
-
- sage: r = f/g; r
-- (-b*c^2 + 2)/(a*b^3*c^6 - 2*a*c)
-+ (-2*b*c^2 - 1)/(2*a*b^3*c^6 + a*c)
- sage: degree_lowest_rational_function(r,a)
- -1
- sage: degree_lowest_rational_function(r,b)
-diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py
-index 130d8317a7..8e76b06313 100644
---- a/src/sage/rings/polynomial/multi_polynomial_ideal.py
-+++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py
-@@ -154,7 +154,7 @@ when the system has no solutions over the rationals.
- which is not 1. ::
-
- sage: I.groebner_basis()
-- [x + 130433*y + 59079*z, y^2 + 3*y + 17220, y*z + 5*y + 14504, 2*y + 158864, z^2 + 17223, 2*z + 41856, 164878]
-+ [x + y + 57119*z + 4, y^2 + 3*y + 17220, y*z + y + 26532, 2*y + 158864, z^2 + 17223, 2*z + 41856, 164878]
-
- Now for each prime `p` dividing this integer 164878, the Groebner
- basis of I modulo `p` will be non-trivial and will thus give a
-@@ -711,16 +711,16 @@ class MPolynomialIdeal_singular_repr(
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = (p*q^2, y-z^2)*R
- sage: pd = I.complete_primary_decomposition(); pd
-- [(Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field),
-- (Ideal (z^6 + 4*z^3 + 4, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^3 + 2, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field)]
--
-- sage: I.primary_decomposition_complete(algorithm = 'gtz')
- [(Ideal (z^6 + 4*z^3 + 4, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
- Ideal (z^3 + 2, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field),
-- (Ideal (z^2 + 1, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^2 + 1, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field)]
-+ (Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field)]
-+
-+ sage: I.primary_decomposition_complete(algorithm = 'gtz')
-+ [(Ideal (z^2 + 1, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field),
-+ (Ideal (z^6 + 4*z^3 + 4, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^3 + 2, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field)]
-
- sage: from functools import reduce
- sage: reduce(lambda Qi,Qj: Qi.intersection(Qj), [Qi for (Qi,radQi) in pd]) == I
-@@ -823,8 +823,8 @@ class MPolynomialIdeal_singular_repr(
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = (p*q^2, y-z^2)*R
- sage: pd = I.primary_decomposition(); pd
-- [Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^6 + 4*z^3 + 4, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field]
-+ [Ideal (z^6 + 4*z^3 + 4, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field]
-
- ::
-
-@@ -895,8 +895,8 @@ class MPolynomialIdeal_singular_repr(
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = (p*q^2, y-z^2)*R
- sage: pd = I.associated_primes(); pd
-- [Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-- Ideal (z^3 + 2, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field]
-+ [Ideal (z^3 + 2, y - z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, y + 1) of Multivariate Polynomial Ring in x, y, z over Rational Field]
-
- ALGORITHM:
-
-@@ -1566,8 +1566,8 @@ class MPolynomialIdeal_singular_repr(
- sage: I2 = y*R
- sage: I3 = (x, y)*R
- sage: I4 = (x^2 + x*y*z, y^2 - z^3*y, z^3 + y^5*x*z)*R
-- sage: I1.intersection(I2, I3, I4)
-- Ideal (x*y*z^20 - x*y*z^3, x*y^2 - x*y*z^3, x^2*y + x*y*z^4) of Multivariate Polynomial Ring in x, y, z over Rational Field
-+ sage: I1.intersection(I2, I3, I4).groebner_basis()
-+ [x^2*y + x*y*z^4, x*y^2 - x*y*z^3, x*y*z^20 - x*y*z^3]
-
- The ideals must share the same ring::
-
-@@ -1617,10 +1617,8 @@ class MPolynomialIdeal_singular_repr(
- sage: p = z^2 + 1; q = z^3 + 2
- sage: I = (p*q^2, y-z^2)*R
- sage: I.minimal_associated_primes ()
-- [Ideal (z^2 + 1, -z^2 + y) of Multivariate Polynomial Ring
-- in x, y, z over Rational Field, Ideal (z^3 + 2, -z^2 + y)
-- of Multivariate Polynomial Ring in x, y, z over Rational
-- Field]
-+ [Ideal (z^3 + 2, -z^2 + y) of Multivariate Polynomial Ring in x, y, z over Rational Field,
-+ Ideal (z^2 + 1, -z^2 + y) of Multivariate Polynomial Ring in x, y, z over Rational Field]
-
- ALGORITHM:
-
-@@ -2698,7 +2696,7 @@ class MPolynomialIdeal_singular_repr(
- return out
- elif algorithm == 'singular':
- from sage.libs.singular.function_factory import ff
-- hilbPoly = ff.poly__lib.hilbPoly
-+ hilbPoly = ff.polylib__lib.hilbPoly
-
- hp = hilbPoly(self)
- t = ZZ['t'].gen()
-@@ -4010,7 +4008,7 @@ class MPolynomialIdeal( MPolynomialIdeal_singular_repr, \
-
- sage: J.groebner_basis.set_cache(gb)
- sage: ideal(J.transformed_basis()).change_ring(P).interreduced_basis() # testing trac 21884
-- [a - 60*c^3 + 158/7*c^2 + 8/7*c - 1, b + 30*c^3 - 79/7*c^2 + 3/7*c, c^4 - 10/21*c^3 + 1/84*c^2 + 1/84*c]
-+ ...[a - 60*c^3 + 158/7*c^2 + 8/7*c - 1, b + 30*c^3 - 79/7*c^2 + 3/7*c, c^4 - 10/21*c^3 + 1/84*c^2 + 1/84*c]
-
- Giac's gbasis over `\QQ` can benefit from a probabilistic lifting and
- multi threaded operations::
-@@ -4113,9 +4111,9 @@ class MPolynomialIdeal( MPolynomialIdeal_singular_repr, \
- sage: P.<a,b,c> = PolynomialRing(ZZ,3)
- sage: I = P * (a + 2*b + 2*c - 1, a^2 - a + 2*b^2 + 2*c^2, 2*a*b + 2*b*c - b)
- sage: I.groebner_basis()
-- [b^3 - 181*b*c^2 + 222*c^3 - 26*b*c - 146*c^2 + 19*b + 24*c,
-- 2*b*c^2 - 48*c^3 + 3*b*c + 22*c^2 - 2*b - 2*c,
-- 42*c^3 + 45*b^2 + 54*b*c + 22*c^2 - 13*b - 12*c,
-+ [b^3 + b*c^2 + 12*c^3 + b^2 + b*c - 4*c^2,
-+ 2*b*c^2 - 6*c^3 - b^2 - b*c + 2*c^2,
-+ 42*c^3 + b^2 + 2*b*c - 14*c^2 + b,
- 2*b^2 + 6*b*c + 6*c^2 - b - 2*c,
- 10*b*c + 12*c^2 - b - 4*c,
- a + 2*b + 2*c - 1]
-diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-index b3bb733d7a..831113a5c9 100644
---- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-@@ -1337,7 +1337,7 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
- sage: R = IntegerModRing(15)['x,y']
- sage: singular(R)
- polynomial ring, over a ring (with zero-divisors), global ordering
-- // coefficients: ZZ/bigint(15)
-+ // coefficients: ZZ/...(15)
- // number of vars : 2
- // block 1 : ordering dp
- // : names x y
-diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx
-index 08b2ed7211..349871f508 100644
---- a/src/sage/rings/polynomial/plural.pyx
-+++ b/src/sage/rings/polynomial/plural.pyx
-@@ -392,28 +392,30 @@ cdef class NCPolynomialRing_plural(Ring):
- TESTS:
-
- This example caused a segmentation fault with a previous version
-- of this method::
-+ of this method. This doctest still results in a segmentation fault
-+ occasionally which is difficult to isolate, so this test is partially
-+ disabled (:trac:`29528`)::
-
- sage: import gc
- sage: from sage.rings.polynomial.plural import NCPolynomialRing_plural
- sage: from sage.algebras.free_algebra import FreeAlgebra
- sage: A1.<x,y,z> = FreeAlgebra(QQ, 3)
- sage: R1 = A1.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2))
-- sage: A2.<x,y,z> = FreeAlgebra(GF(5), 3)
-- sage: R2 = A2.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2))
-- sage: A3.<x,y,z> = FreeAlgebra(GF(11), 3)
-- sage: R3 = A3.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2))
-- sage: A4.<x,y,z> = FreeAlgebra(GF(13), 3)
-- sage: R4 = A4.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2))
-+ sage: A2.<x,y,z> = FreeAlgebra(GF(5), 3) # not tested
-+ sage: R2 = A2.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2)) # not tested
-+ sage: A3.<x,y,z> = FreeAlgebra(GF(11), 3) # not tested
-+ sage: R3 = A3.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2)) # not tested
-+ sage: A4.<x,y,z> = FreeAlgebra(GF(13), 3) # not tested
-+ sage: R4 = A4.g_algebra({y*x:x*y-z, z*x:x*z+2*x, z*y:y*z-2*y}, order=TermOrder('degrevlex', 2)) # not tested
- sage: _ = gc.collect()
- sage: foo = R1.gen(0)
- sage: del foo
- sage: del R1
- sage: _ = gc.collect()
-- sage: del R2
-- sage: _ = gc.collect()
-- sage: del R3
-- sage: _ = gc.collect()
-+ sage: del R2 # not tested
-+ sage: _ = gc.collect() # not tested
-+ sage: del R3 # not tested
-+ sage: _ = gc.collect() # not tested
- """
- singular_ring_delete(self._ring)
-
-@@ -2888,7 +2890,8 @@ cpdef MPolynomialRing_libsingular new_CRing(RingWrap rw, base_ring):
- self.__ngens = rw.ngens()
- self.__term_order = TermOrder(rw.ordering_string(), force=True)
-
-- ParentWithGens.__init__(self, base_ring, rw.var_names())
-+ ParentWithGens.__init__(self, base_ring, tuple(rw.var_names()),
-+ normalize=False)
- # self._populate_coercion_lists_() # ???
-
- #MPolynomialRing_generic.__init__(self, base_ring, n, names, order)
-diff --git a/src/sage/rings/polynomial/polynomial_singular_interface.py b/src/sage/rings/polynomial/polynomial_singular_interface.py
-index 37f131b585..d9c33d9c2b 100644
---- a/src/sage/rings/polynomial/polynomial_singular_interface.py
-+++ b/src/sage/rings/polynomial/polynomial_singular_interface.py
-@@ -165,7 +165,7 @@ class PolynomialRing_singular_repr:
- sage: R = IntegerModRing(15)['x,y']
- sage: singular(R)
- polynomial ring, over a ring (with zero-divisors), global ordering
-- // coefficients: ZZ/bigint(15)
-+ // coefficients: ZZ/...(15)
- // number of vars : 2
- // block 1 : ordering dp
- // : names x y
-diff --git a/src/sage/schemes/curves/projective_curve.py b/src/sage/schemes/curves/projective_curve.py
-index 2a9772da51..4c84a932bc 100644
---- a/src/sage/schemes/curves/projective_curve.py
-+++ b/src/sage/schemes/curves/projective_curve.py
-@@ -2000,7 +2000,7 @@ class ProjectivePlaneCurve_finite_field(ProjectivePlaneCurve_field):
- sage: C = Curve(f); pts = C.rational_points()
- sage: D = C.divisor([ (3, pts[0]), (-1,pts[1]), (10, pts[5]) ])
- sage: C.riemann_roch_basis(D)
-- [(-x - 2*y)/(-2*x - 2*y), (-x + z)/(x + y)]
-+ [(-2*x + y)/(x + y), (-x + z)/(x + y)]
-
- .. NOTE::
-