Github messages for voidlinux
 help / color / mirror / Atom feed
From: tornaria <tornaria@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] [RFC] sagemath: update to 10.0.rc0.
Date: Sat, 29 Apr 2023 04:20:07 +0200	[thread overview]
Message-ID: <20230429022007.koAC11MZMwR_WZpFaYu3DQewiY5eb_FyUFISZr4Nkdg@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-43659@inbox.vuxu.org>

[-- Attachment #1: Type: text/plain, Size: 1700 bytes --]

There is an updated pull request by tornaria against master on the void-packages repository

https://github.com/tornaria/void-packages sagemath-next
https://github.com/void-linux/void-packages/pull/43659

[RFC] sagemath: update to 10.0.rc0.
<!-- Uncomment relevant sections and delete options which are not applicable -->

This builds on top of #43225 for convenience.

#### Testing the changes
- I tested the changes in this PR: **briefly**

I've been following beta releases and now rc0 includes all of our patches :muscle:

All doctests pass with the version of packages in void except for `python-Babel` which must be updated (as in #43497) and is included  here as part of #43225.

I've switched my system sagemath to this version as everything seems to be working ok. The testsuite is 10-15% faster.

@dkwo: enjoy.

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->


A patch file from https://github.com/void-linux/void-packages/pull/43659.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-sagemath-next-43659.patch --]
[-- Type: text/x-diff, Size: 159862 bytes --]

From bcd09894152c6db0b95460127cedd256cb88de36 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Mon, 27 Mar 2023 00:31:35 -0300
Subject: [PATCH 1/4] singular: update to 4.3.2.

---
 common/shlibs             | 10 +++++-----
 srcpkgs/singular/template |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/common/shlibs b/common/shlibs
index e282bbd1f588..08dac21a5b3e 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -4099,11 +4099,11 @@ libumfpack.so.6 SuiteSparse-6.0.1_1
 libecl.so.21.2 ecl-21.2.1_1
 libecm.so.1 ecm-7.0.4_3
 libcliquer.so.1 cliquer-1.22_1
-libSingular-4.3.1.so singular-4.3.1p2_1
-libfactory-4.3.1.so singular-4.3.1p2_1
-libpolys-4.3.1.so singular-4.3.1p2_1
-libomalloc-0.9.6.so singular-4.3.1p2_1
-libsingular_resources-4.3.1.so singular-4.3.1p2_1
+libomalloc-0.9.6.so singular-4.2.1_1
+libSingular-4.3.2.so singular-4.3.2_1
+libfactory-4.3.2.so singular-4.3.2_1
+libpolys-4.3.2.so singular-4.3.2_1
+libsingular_resources-4.3.2.so singular-4.3.2_1
 libbrial.so.3 brial-1.2.10_1
 libbrial_groebner.so.3 brial-1.2.10_1
 libm4ri-0.0.20200125.so m4ri-20200125_1
diff --git a/srcpkgs/singular/template b/srcpkgs/singular/template
index c73a020dcf15..0481f6cb1e11 100644
--- a/srcpkgs/singular/template
+++ b/srcpkgs/singular/template
@@ -1,6 +1,6 @@
 # Template file for 'singular'
 pkgname=singular
-version=4.3.1p3
+version=4.3.2
 revision=1
 _majver=${version%p*}
 build_style=gnu-configure
@@ -20,7 +20,7 @@ maintainer="dkwo <npiazza@disroot.org>"
 license="GPL-2.0-or-later"
 homepage="https://www.singular.uni-kl.de"
 distfiles="https://www.singular.uni-kl.de/ftp/pub/Math/Singular/SOURCES/${_majver//./-}/singular-${version}.tar.gz"
-checksum=66cfaeee7ab909272fd81050a09cae3ec115652a01adde014a5128a54b97397a
+checksum=3fd565d1bd4265fa8ba7cc189137a36d9daf9939b5bb411466c2028d9191f6db
 
 if [ -z "$CROSS_BUILD" ]; then
 	makedepends+=" ntl-devel"

From 3171129c048430254672b4b0828bd37bab9c1e7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Wed, 15 Mar 2023 09:27:58 -0300
Subject: [PATCH 2/4] sagemath: rebuild for singular update

Also fix doctests for pkg updates:
 - matplotlib 3.7
 - ipython 8.12
 - nauty 2.8.6
 - pythran 0.12.1

And add support for:
 - networkx 3.1

We use patches from upstream sagemath to fix all of these.

We also add pythran and sphinx to checkdepends to make sure doctests
pass when they are installed.
---
 ...support_singular_4.3.1.p3-5e5737a0c.patch} |  0
 .../34980-avoid_factoring_in_is_prime.patch   | 16 ++--
 .../patches/35177-matplotlib_3.7.patch        | 95 +++++++++++++++++++
 .../patches/35195-workaround_ecl_race.patch   | 56 +++++++++++
 .../patches/35204-fix_sage-cleaner.patch      | 28 ++++++
 .../sagemath/patches/35250-nauty_2.8.6.patch  | 35 +++++++
 .../sagemath/patches/35423-ipython_8.12.patch | 51 ++++++++++
 .../patches/35438-pythran_0.12.1.patch        | 41 ++++++++
 .../sagemath/patches/35584-networkx_3.1.patch | 81 ++++++++++++++++
 srcpkgs/sagemath/patches/get_patches          | 32 ++++++-
 srcpkgs/sagemath/template                     |  4 +-
 11 files changed, 425 insertions(+), 14 deletions(-)
 rename srcpkgs/sagemath/patches/{trac-34851-support_singular_4.3.1.p3-5e5737a0c.patch => 34851-support_singular_4.3.1.p3-5e5737a0c.patch} (100%)
 create mode 100644 srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
 create mode 100644 srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
 create mode 100644 srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
 create mode 100644 srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
 create mode 100644 srcpkgs/sagemath/patches/35423-ipython_8.12.patch
 create mode 100644 srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch
 create mode 100644 srcpkgs/sagemath/patches/35584-networkx_3.1.patch

diff --git a/srcpkgs/sagemath/patches/trac-34851-support_singular_4.3.1.p3-5e5737a0c.patch b/srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch
similarity index 100%
rename from srcpkgs/sagemath/patches/trac-34851-support_singular_4.3.1.p3-5e5737a0c.patch
rename to srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch
diff --git a/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch b/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
index ca61a2ada4eb..ee0f0e656b28 100644
--- a/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
+++ b/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
@@ -1,8 +1,8 @@
 diff --git a/src/sage/rings/number_field/number_field_ideal.py b/src/sage/rings/number_field/number_field_ideal.py
-index d5f7157217f..1a9d11aec68 100644
+index d5f7157217f..8ca1f958039 100644
 --- a/src/sage/rings/number_field/number_field_ideal.py
 +++ b/src/sage/rings/number_field/number_field_ideal.py
-@@ -996,16 +996,36 @@ def is_prime(self):
+@@ -996,16 +996,38 @@ def is_prime(self):
              False
              sage: K.ideal(17).is_prime()  # ramified
              False
@@ -33,13 +33,15 @@ index d5f7157217f..1a9d11aec68 100644
 +        K = self.number_field().pari_nf()
 +        I = self.pari_hnf()
 +
-+        self._pari_prime = K.idealismaximal(I) or None
++        candidate = K.idealismaximal(I) or None
 +
 +        # PARI uses probabilistic primality testing inside idealismaximal().
-+        if self._pari_prime \
-+                and get_flag(None, 'arithmetic') \
-+                and not self._pari_prime[0].isprime():
-+            self._pari_prime = None
++        if get_flag(None, 'arithmetic'):
++            # proof required, check using isprime()
++            if candidate and not candidate[0].isprime():
++                candidate = None
++
++        self._pari_prime = candidate
 +
 +        return self._pari_prime is not None
  
diff --git a/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch b/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
new file mode 100644
index 000000000000..007f3324cfe4
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
@@ -0,0 +1,95 @@
+diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
+index b77c69b2f77..0586a96ae55 100644
+--- a/src/sage/plot/complex_plot.pyx
++++ b/src/sage/plot/complex_plot.pyx
+@@ -563,7 +563,7 @@ def complex_to_cmap_rgb(z_values, cmap='turbo', contoured=False, tiled=False,
+     import matplotlib as mpl
+ 
+     if isinstance(cmap, str):
+-        cmap = mpl.cm.get_cmap(cmap)
++        cmap = mpl.colormaps[cmap]
+ 
+     if contour_base is None:
+         if contour_type == "linear":
+@@ -1206,11 +1206,11 @@ def complex_plot(f, x_range, y_range, contoured=False, tiled=False, cmap=None,
+                 domain = np.linspace(0, 1, 256)
+                 shifted_domain = np.roll(domain, 128)
+                 default_cmap = mpl.colors.LinearSegmentedColormap.from_list(
+-                    "sage_default", mpl.cm.get_cmap('hsv')(shifted_domain)
++                    "sage_default", mpl.colormaps['hsv'](shifted_domain)
+                 )
+                 cmap = default_cmap
+             else:
+-                cmap = mpl.cm.get_cmap(cmap)
++                cmap = mpl.colormaps[cmap]
+         rgbs = complex_to_cmap_rgb(
+             z_values, cmap=cmap, contoured=contoured, tiled=tiled,
+             contour_type=contour_type, contour_base=contour_base,
+diff --git a/src/sage/plot/contour_plot.py b/src/sage/plot/contour_plot.py
+index c0cab456686..4accb309580 100644
+--- a/src/sage/plot/contour_plot.py
++++ b/src/sage/plot/contour_plot.py
+@@ -848,9 +848,7 @@ def f(x,y): return cos(x) + sin(y)
+ 
+         sage: contour_plot(lambda x,y: 0, (-1,1), (-1,1),
+         ....:              contours=[0], fill=False, cmap=['blue'])
+-        ...
+-        UserWarning: No contour levels were found within the data range.
+-        Graphics object consisting of 1 graphics primitive
++        ...Graphics object consisting of 1 graphics primitive
+ 
+     .. PLOT::
+ 
+@@ -874,8 +872,7 @@ def f(x,y): return cos(x) + sin(y)
+     Check that :trac:`18074` is fixed::
+ 
+         sage: contour_plot(0, (0,1), (0,1))
+-        ... UserWarning: No contour levels were found within the data range.
+-        Graphics object consisting of 1 graphics primitive
++        ...Graphics object consisting of 1 graphics primitive
+ 
+     Domain points in :trac:`11648` with complex output are now skipped::
+ 
+diff --git a/src/sage/plot/graphics.py b/src/sage/plot/graphics.py
+index 64ea1a7e10f..cdc99ced263 100644
+--- a/src/sage/plot/graphics.py
++++ b/src/sage/plot/graphics.py
+@@ -2341,7 +2341,7 @@ def _matplotlib_tick_formatter(self, subplot, base=(10, 10),
+             sage: subplot = Figure().add_subplot(111)
+             sage: p._objects[0]._render_on_subplot(subplot)
+             sage: p._matplotlib_tick_formatter(subplot, **d)
+-            (<AxesSubplot:...>,
++            (<Axes...>,
+             <matplotlib.ticker.MaxNLocator object at ...>,
+             <matplotlib.ticker.MaxNLocator object at ...>,
+             <matplotlib.ticker.ScalarFormatter object at ...>,
+diff --git a/src/sage/plot/multigraphics.py b/src/sage/plot/multigraphics.py
+index 99c817f03a6..ae85183dc93 100644
+--- a/src/sage/plot/multigraphics.py
++++ b/src/sage/plot/multigraphics.py
+@@ -1207,7 +1207,7 @@ def _add_subplot(self, figure, index, **options):
+             sage: fig = Figure()
+             sage: ax1 = G._add_subplot(fig, 0)
+             sage: type(ax1)
+-            <class 'matplotlib.axes._subplots.AxesSubplot'>
++            <class 'matplotlib.axes...'>
+             sage: ax2 = G._add_subplot(fig, 1)
+             sage: fig.get_axes() == [ax1, ax2]
+             True
+diff --git a/src/sage/plot/plot3d/plot_field3d.py b/src/sage/plot/plot3d/plot_field3d.py
+index bdf39391d3e..fe10e27f58f 100644
+--- a/src/sage/plot/plot3d/plot_field3d.py
++++ b/src/sage/plot/plot3d/plot_field3d.py
+@@ -126,9 +126,9 @@ def plot_vector_field3d(functions, xrange, yrange, zrange,
+     vectors = [vector((ff(*point), gg(*point), hh(*point))) for point in points]
+ 
+     try:
+-        from matplotlib.cm import get_cmap
+-        cm = get_cmap(colors)
+-    except (TypeError, ValueError):
++        import matplotlib as mpl
++        cm = mpl.colormaps[colors]
++    except (TypeError, KeyError):
+         cm = None
+     if cm is None:
+         if isinstance(colors, (list, tuple)):
diff --git a/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch b/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
new file mode 100644
index 000000000000..1e0a708e8068
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
@@ -0,0 +1,56 @@
+diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py
+index c9ca5e30939..9459cb70334 100644
+--- a/src/sage/interfaces/maxima_lib.py
++++ b/src/sage/interfaces/maxima_lib.py
+@@ -77,6 +77,26 @@
+     sage: bar == foo
+     True
+ 
++TESTS:
++
++Check our workaround for a race in ecl works, see :trac:`26968`.
++We use a temporary `MAXIMA_USERDIR` so it's empty; we place it
++in `DOT_SAGE` since we expect it to have more latency than `/tmp`.
++
++    sage: import tempfile, subprocess
++    sage: tmpdir = tempfile.TemporaryDirectory(dir=DOT_SAGE)
++    sage: _ = subprocess.run(['sage', '-c',  # long time
++    ....: f'''
++    ....: import os
++    ....: os.environ["MAXIMA_USERDIR"] = "{tmpdir.name}"
++    ....: if not os.fork():
++    ....:     import sage.interfaces.maxima_lib
++    ....: else:
++    ....:     import sage.interfaces.maxima_lib
++    ....:     os.wait()
++    ....: '''])
++    sage: tmpdir.cleanup()
++
+ """
+ 
+ # ****************************************************************************
+@@ -116,7 +136,23 @@
+ ecl_eval("(setq $nolabels t))")
+ ecl_eval("(defvar *MAXIMA-LANG-SUBDIR* NIL)")
+ ecl_eval("(set-locale-subdir)")
+-ecl_eval("(set-pathnames)")
++
++try:
++    ecl_eval("(set-pathnames)")
++except RuntimeError:
++    # Recover from :trac:`26968` by creating `*maxima-objdir*` here.
++    # This cannot be done before calling `(set-pathnames)` since
++    # `*maxima-objdir*` is computed there.
++    # We use python `os.makedirs()` which is immune to the race.
++    # Using `(ensure-directories-exist ...)` in lisp would be
++    # subject to the same race condition and since `*maxima-objdir*`
++    # has multiple components this is quite plausible to happen.
++    maxima_objdir = ecl_eval("*maxima-objdir*").python()[1:-1]
++    import os
++    os.makedirs(maxima_objdir, exist_ok=True)
++    # Call `(set-pathnames)` again to complete its job.
++    ecl_eval("(set-pathnames)")
++
+ ecl_eval("(defun add-lineinfo (x) x)")
+ ecl_eval('(defun principal nil (cond ($noprincipal (diverg)) ((not pcprntd) (merror "Divergent Integral"))))')
+ ecl_eval("(remprop 'mfactorial 'grind)")  # don't use ! for factorials (#11539)
diff --git a/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch b/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
new file mode 100644
index 000000000000..fc3e40da2a88
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
@@ -0,0 +1,28 @@
+diff --git a/src/bin/sage-cleaner b/src/bin/sage-cleaner
+index e2e578eec60..dc7d8f0482e 100755
+--- a/src/bin/sage-cleaner
++++ b/src/bin/sage-cleaner
+@@ -99,6 +99,15 @@ def cleanup():
+ 
+     return len(pid_list)
+ 
++def cleanup_cruft():
++    """ remove directories leftover from improper shutdown """
++    tmp_dirs = os.listdir(SAGE_TMP_ROOT)
++    for dir_entry in tmp_dirs:
++        baddir = os.path.join(SAGE_TMP_ROOT, dir_entry)
++        if os.path.isdir(baddir):
++            logger.warning('Removing old directory %s from SAGE_TMP_ROOT', baddir)
++            rm_rf(baddir)
++
+ def kill_spawned_jobs(jobfile, parent_pid):
+     logger.info("Killing %s's spawned jobs", parent_pid)
+     killed_them_all = True
+@@ -193,6 +202,7 @@ if __name__ == '__main__':
+     setup_daemon()
+     fix_old_mistakes()
+     logger.info("Starting sage-cleaner with PID %s", os.getpid())
++    cleanup_cruft()
+ 
+     if len(sys.argv) > 1:
+         wait = int(sys.argv[1])
diff --git a/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch b/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
new file mode 100644
index 000000000000..ea210e20ae52
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
@@ -0,0 +1,35 @@
+diff --git a/src/sage/graphs/generators/families.py b/src/sage/graphs/generators/families.py
+index ec6a5c19e60..9dd7bc1cb1e 100644
+--- a/src/sage/graphs/generators/families.py
++++ b/src/sage/graphs/generators/families.py
+@@ -3660,7 +3660,7 @@ def nauty_gentreeg(options="", debug=False):
+ 
+         sage: gen = graphs.nauty_gentreeg("4", debug=True)
+         sage: print(next(gen))
+-        >A ...gentreeg Z=2:3 D=3 n=4
++        >A ...gentreeg ...
+         sage: gen = graphs.nauty_gentreeg("4 -q", debug=True)
+         sage: next(gen)
+         ''
+@@ -3687,7 +3687,7 @@ def nauty_gentreeg(options="", debug=False):
+         sage: list(graphs.nauty_gentreeg("3 -x", debug=True))
+         ['>E Usage: ...gentreeg [-D#] [-Z#:#] [-ulps] [-q] n [res/mod] ...
+         sage: list(graphs.nauty_gentreeg("3", debug=True))
+-        ['>A ...gentreeg Z=2:2 D=2 n=3\n', Graph on 3 vertices]
++        ['>A ...gentreeg ...\n', Graph on 3 vertices]
+     """
+     import shlex
+     from sage.features.nauty import NautyExecutable
+diff --git a/src/sage/graphs/graph_generators.py b/src/sage/graphs/graph_generators.py
+index df88bbe2713..1a8016976c2 100644
+--- a/src/sage/graphs/graph_generators.py
++++ b/src/sage/graphs/graph_generators.py
+@@ -966,7 +966,7 @@ def nauty_geng(self, options="", debug=False):
+             ...
+             ValueError: wrong format of parameter option
+             sage: list(graphs.nauty_geng("-c3", debug=True))
+-            ['>E Usage: ...geng [-cCmtfbd#D#] [-uygsnh] [-lvq] ...
++            ['>E Usage: ...geng ...\n']
+             sage: list(graphs.nauty_geng("-c 3", debug=True))
+             ['>A ...geng -cd1D2 n=3 e=2-3\n', Graph on 3 vertices, Graph on 3 vertices]
+         """
diff --git a/srcpkgs/sagemath/patches/35423-ipython_8.12.patch b/srcpkgs/sagemath/patches/35423-ipython_8.12.patch
new file mode 100644
index 000000000000..46bda084e48e
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35423-ipython_8.12.patch
@@ -0,0 +1,51 @@
+diff --git a/src/sage/repl/inputhook.py b/src/sage/repl/inputhook.py
+index da5df0268c0..7f7894f6dcf 100644
+--- a/src/sage/repl/inputhook.py
++++ b/src/sage/repl/inputhook.py
+@@ -17,6 +17,8 @@
+ 
+ import select
+ import errno
++import contextlib
++import io
+ 
+ from IPython import get_ipython
+ from IPython.terminal.pt_inputhooks import register
+@@ -47,15 +49,27 @@ def install():
+     """
+     Install the Sage input hook
+ 
+-    EXAMPLES::
++    EXAMPLES:
++
++    Make sure ipython is running so we really test this function::
++
++        sage: from sage.repl.interpreter import get_test_shell
++        sage: get_test_shell()
++        <sage.repl.interpreter.SageTestShell object at ...>
++
++    Run the function twice, to check it is idempotent (see :trac:`35235`)::
+ 
+         sage: from sage.repl.inputhook import install
+         sage: install()
++        sage: install()
+     """
+     ip = get_ipython()
+     if not ip:
+         return   # Not running in ipython, e.g. doctests
+-    ip.enable_gui('sage')
++    if ip._inputhook != sage_inputhook:
++        # silence `ip.enable_gui()` useless output
++        with contextlib.redirect_stdout(io.StringIO()):
++            ip.enable_gui('sage')
+ 
+ 
+ def uninstall():
+@@ -71,4 +85,6 @@ def uninstall():
+     if not ip:
+         return
+     if ip._inputhook == sage_inputhook:
+-        ip.enable_gui(None)
++        # silence `ip.enable_gui()` useless output
++        with contextlib.redirect_stdout(io.StringIO()):
++            ip.enable_gui(None)
diff --git a/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch b/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch
new file mode 100644
index 000000000000..2cdc674d4f9e
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch
@@ -0,0 +1,41 @@
+From 532fbbaf71bb41c73920b584108eb2a09d6deeb1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
+Date: Tue, 4 Apr 2023 12:56:57 -0300
+Subject: [PATCH] Ignore deprecation warnings triggered by pythran 0.12.1
+
+These happen with python 3.11, setuptools 67.6.1, numpy 1.24.2.
+When pythran 0.12.1 is installed, I get 24 doctest failures due to
+deprecation warnings; they are all gone with this commit.
+
+[backported from 839a6e928c264a9863bd42860c78ae95a6d9f3e0]
+---
+ src/sage/all.py | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/sage/all.py b/src/sage/all.py
+index 93588df1b93..ee775aad0e9 100644
+--- a/src/sage/all.py
++++ b/src/sage/all.py
+@@ -96,9 +96,17 @@ warnings.filterwarnings('ignore', category=DeprecationWarning,
+ warnings.filterwarnings('ignore', category=DeprecationWarning,
+     module='(.*[.]_vendor[.])?packaging')
+ 
+-# Ignore numpy warnings triggered by pythran
++# Ignore a few warnings triggered by pythran 0.12.1
+ warnings.filterwarnings('ignore', category=DeprecationWarning,
+-                        module='pythran')
++    message='\n\n  `numpy.distutils` is deprecated since NumPy 1.23.0',
++    module='pythran.dist')
++warnings.filterwarnings('ignore', category=DeprecationWarning,
++    message='pkg_resources is deprecated as an API|'
++            'Deprecated call to `pkg_resources.declare_namespace(.*)`',
++    module='pkg_resources')
++warnings.filterwarnings('ignore', category=DeprecationWarning,
++    message='msvccompiler is deprecated and slated to be removed',
++    module='distutils.msvccompiler')
+ 
+ warnings.filterwarnings('ignore', category=DeprecationWarning,
+                         message='The distutils(.sysconfig module| package) is deprecated',
+-- 
+2.40.0
+
diff --git a/srcpkgs/sagemath/patches/35584-networkx_3.1.patch b/srcpkgs/sagemath/patches/35584-networkx_3.1.patch
new file mode 100644
index 000000000000..66eedecff7c6
--- /dev/null
+++ b/srcpkgs/sagemath/patches/35584-networkx_3.1.patch
@@ -0,0 +1,81 @@
+diff --git a/src/sage/graphs/graph.py b/src/sage/graphs/graph.py
+index c2e42bcbd3..b6a10efbf4 100644
+--- a/src/sage/graphs/graph.py
++++ b/src/sage/graphs/graph.py
+@@ -6786,13 +6786,21 @@ def cliques_number_of(self, vertices=None, cliques=None):
+             {(0, 0): 2, (0, 1): 3, (0, 2): 2, (1, 0): 2, (1, 1): 3, (1, 2): 2}
+             sage: F.cliques_number_of(vertices=[(0, 1), (1, 2)])
+             {(0, 1): 3, (1, 2): 2}
++            sage: F.cliques_number_of(vertices=(0, 1))
++            3
+             sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
+             sage: G.show(figsize=[2,2])
+             sage: G.cliques_number_of()
+             {0: 2, 1: 2, 2: 1, 3: 1}
+         """
+-        import networkx
+-        return networkx.number_of_cliques(self.networkx_graph(), vertices, cliques)
++        if cliques is None:
++            cliques = self.cliques_maximal()
++
++        if vertices in self: # single vertex
++            return sum(1 for c in cliques if vertices in c)
++        else:
++            return { v : sum(1 for c in cliques if v in c)
++                     for v in vertices or self }
+ 
+     @doc_index("Clique-related methods")
+     def cliques_get_max_clique_graph(self):
+@@ -7493,17 +7501,32 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
+ 
+             sage: C = Graph('DJ{')
+             sage: C.cliques_containing_vertex()
+-            {0: [[4, 0]], 1: [[4, 1, 2, 3]], 2: [[4, 1, 2, 3]], 3: [[4, 1, 2, 3]], 4: [[4, 0], [4, 1, 2, 3]]}
++            {0: [[0, 4]],
++             1: [[1, 2, 3, 4]],
++             2: [[1, 2, 3, 4]],
++             3: [[1, 2, 3, 4]],
++             4: [[0, 4], [1, 2, 3, 4]]}
++            sage: C.cliques_containing_vertex(4)
++            [[0, 4], [1, 2, 3, 4]]
++            sage: C.cliques_containing_vertex([0, 1])
++            {0: [[0, 4]], 1: [[1, 2, 3, 4]]}
+             sage: E = C.cliques_maximal()
+             sage: E
+             [[0, 4], [1, 2, 3, 4]]
+             sage: C.cliques_containing_vertex(cliques=E)
+-            {0: [[0, 4]], 1: [[1, 2, 3, 4]], 2: [[1, 2, 3, 4]], 3: [[1, 2, 3, 4]], 4: [[0, 4], [1, 2, 3, 4]]}
++            {0: [[0, 4]],
++             1: [[1, 2, 3, 4]],
++             2: [[1, 2, 3, 4]],
++             3: [[1, 2, 3, 4]],
++             4: [[0, 4], [1, 2, 3, 4]]}
+ 
+             sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
+             sage: G.show(figsize=[2,2])
+             sage: G.cliques_containing_vertex()
+-            {0: [[0, 1, 2], [0, 1, 3]], 1: [[0, 1, 2], [0, 1, 3]], 2: [[0, 1, 2]], 3: [[0, 1, 3]]}
++            {0: [[0, 1, 2], [0, 1, 3]],
++             1: [[0, 1, 2], [0, 1, 3]],
++             2: [[0, 1, 2]],
++             3: [[0, 1, 3]]}
+ 
+         Since each clique of a 2 dimensional grid corresponds to an edge, the
+         number of cliques in which a vertex is involved equals its degree::
+@@ -7518,8 +7541,14 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
+             sage: sorted(sorted(x for x in L) for L in d[(0, 1)])
+             [[(0, 0), (0, 1)], [(0, 1), (0, 2)], [(0, 1), (1, 1)]]
+         """
+-        import networkx
+-        return networkx.cliques_containing_node(self.networkx_graph(), vertices, cliques)
++        if cliques is None:
++            cliques = self.cliques_maximal()
++
++        if vertices in self: # single vertex
++            return [c for c in cliques if vertices in c]
++        else:
++            return { v : [c for c in cliques if v in c]
++                     for v in vertices or self }
+ 
+     @doc_index("Clique-related methods")
+     def clique_complex(self):
diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches
index c98da68683cc..871ae38577fd 100755
--- a/srcpkgs/sagemath/patches/get_patches
+++ b/srcpkgs/sagemath/patches/get_patches
@@ -19,7 +19,7 @@ get_trac() {
 	ticket=$1
 	desc=$(echo "$2" | sed -e 's/ /_/g')
 	commit=$3
-	$DO wget "$URL_BASE_COMPARE$commit.diff" -O "trac-$ticket-$desc-$commit.patch"
+	$DO wget "$URL_BASE_COMPARE$commit.diff" -O "$ticket-$desc-$commit.patch"
 }
 
 # run from patches dir
@@ -29,13 +29,35 @@ cd $(dirname "$0")
 get_trac 34851 "support singular 4.3.1.p3" 5e5737a0c
 get_pr 35068 "fix tests giac 1.9.0.35" patch
 
-# positive review
+# merged in 10.0.beta1
+get_pr 35058 "skip unstable tests klyachko"
+
+# merged in 10.0.beta2
 get_pr 34994 "fix tests numpy 1.24"
 get_pr 34997 "fix edge case of integer_check"
-get_pr 35058 "skip unstable tests klyachko"
-get_pr 35094 "support gap 4.12"					# includes PR 35093
 
-# needs review 
+# merged in 10.0.beta3
 get_pr 34995 "support tachyon 0.99.2"
+
+# merged in 10.0.beta4
 get_pr 34980 "avoid factoring in is_prime"
+
+# merged in 10.0.beta5
+get_pr 35094 "support gap 4.12"					# includes PR 35093
+
+# merged in 10.0.beta6
 get_pr 35127 "fix very slow test stream.py"
+get_pr 35177 "matplotlib 3.7"
+get_pr 35195 "workaround ecl race"
+get_pr 35204 "fix sage-cleaner"
+
+# merged in 10.0.beta7
+get_pr 35250 "nauty 2.8.6"
+
+# merged in 10.0.beta8
+#get_pr 35337 "ipython 8.11"
+get_pr 35423 "ipython 8.12"						# includes PR 35337
+get_pr 35438 "pythran 0.12.1"
+
+# needs review
+get_pr 35584 "networkx 3.1"
diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template
index 75695f0e5f87..66a543efd21d 100644
--- a/srcpkgs/sagemath/template
+++ b/srcpkgs/sagemath/template
@@ -1,7 +1,7 @@
 # Template file for 'sagemath'
 pkgname=sagemath
 version=9.8
-revision=1
+revision=2
 build_wrksrc=pkgs/sagemath-standard
 build_style=python3-module
 _bindir=/usr/lib/sagemath/$version/bin
@@ -26,7 +26,7 @@ depends="FlintQS eclib-devel fflas-ffpack flintlib-devel gcc-fortran gd-devel
  python3-sympy python3-traitlets sage-data-combinatorial_designs
  sage-data-conway_polynomials sage-data-elliptic_curves sage-data-graphs
  sage-data-polytopes_db sympow tachyon threejs-sage"
-checkdepends="$depends"
+checkdepends="$depends pythran python3-Sphinx"
 short_desc="Open source mathematics software"
 maintainer="Gonzalo Tornaría <tornaria@cmat.edu.uy>"
 license="GPL-2.0-or-later"

From 09713264ff96b25e7f8e00b02770e7f0bf9891ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Fri, 28 Apr 2023 19:38:50 -0300
Subject: [PATCH 3/4] python3-networkx: update to 3.1.

---
 srcpkgs/python3-networkx/template | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/python3-networkx/template b/srcpkgs/python3-networkx/template
index 83e21291feb8..526f4c5e259a 100644
--- a/srcpkgs/python3-networkx/template
+++ b/srcpkgs/python3-networkx/template
@@ -1,6 +1,6 @@
 # Template file for 'python3-networkx'
 pkgname=python3-networkx
-version=2.8.8
+version=3.1
 revision=1
 build_style=python3-module
 # failing in i686
@@ -10,12 +10,12 @@ depends="python3"
 checkdepends="python3-numpy python3-scipy python3-matplotlib python3-pandas
  python3-lxml python3-sympy python3-pytest-xdist"
 short_desc="Python3 package for creating and manipulating graphs and networks"
-maintainer="Orphaned <orphan@voidlinux.org>"
+maintainer="Gonzalo Tornaría <tornaria@cmat.edu.uy>"
 license="BSD-3-Clause"
 homepage="https://networkx.org"
-changelog="https://networkx.org/documentation/stable/release/"
+changelog="https://github.com/networkx/networkx/raw/main/doc/release/release_${version}.rst"
 distfiles="${PYPI_SITE}/n/networkx/networkx-${version}.tar.gz"
-checksum=230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e
+checksum=de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61
 
 post_install() {
 	vlicense LICENSE.txt

From c04d7c667a67f73ab9b48214b3f8715aea2fbc44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Tue, 25 Apr 2023 13:20:47 -0300
Subject: [PATCH 4/4] sagemath: update to 10.0.rc0.

---
 srcpkgs/sagemath/files/sage_conf.py           |    1 -
 srcpkgs/sagemath/files/timings2.json          |  405 ++---
 ...-support_singular_4.3.1.p3-5e5737a0c.patch |  205 ---
 .../34980-avoid_factoring_in_is_prime.patch   |   49 -
 .../patches/34994-fix_tests_numpy_1.24.patch  |   58 -
 .../34995-support_tachyon_0.99.2.patch        |   57 -
 ...34997-fix_edge_case_of_integer_check.patch |   36 -
 .../35058-skip_unstable_tests_klyachko.patch  |   22 -
 .../35068-fix_tests_giac_1.9.0.35.patch       |   62 -
 .../patches/35094-support_gap_4.12.patch      | 1303 -----------------
 .../35127-fix_very_slow_test_stream.py.patch  |   15 -
 .../patches/35177-matplotlib_3.7.patch        |   95 --
 .../patches/35195-workaround_ecl_race.patch   |   56 -
 .../patches/35204-fix_sage-cleaner.patch      |   28 -
 .../sagemath/patches/35250-nauty_2.8.6.patch  |   35 -
 .../sagemath/patches/35423-ipython_8.12.patch |   51 -
 .../patches/35438-pythran_0.12.1.patch        |   41 -
 srcpkgs/sagemath/patches/get_patches          |   43 +-
 srcpkgs/sagemath/template                     |    6 +-
 19 files changed, 111 insertions(+), 2457 deletions(-)
 delete mode 100644 srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch
 delete mode 100644 srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
 delete mode 100644 srcpkgs/sagemath/patches/34994-fix_tests_numpy_1.24.patch
 delete mode 100644 srcpkgs/sagemath/patches/34995-support_tachyon_0.99.2.patch
 delete mode 100644 srcpkgs/sagemath/patches/34997-fix_edge_case_of_integer_check.patch
 delete mode 100644 srcpkgs/sagemath/patches/35058-skip_unstable_tests_klyachko.patch
 delete mode 100644 srcpkgs/sagemath/patches/35068-fix_tests_giac_1.9.0.35.patch
 delete mode 100644 srcpkgs/sagemath/patches/35094-support_gap_4.12.patch
 delete mode 100644 srcpkgs/sagemath/patches/35127-fix_very_slow_test_stream.py.patch
 delete mode 100644 srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
 delete mode 100644 srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
 delete mode 100644 srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
 delete mode 100644 srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
 delete mode 100644 srcpkgs/sagemath/patches/35423-ipython_8.12.patch
 delete mode 100644 srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch

diff --git a/srcpkgs/sagemath/files/sage_conf.py b/srcpkgs/sagemath/files/sage_conf.py
index 00de40f1ee4f..bc5388de8956 100644
--- a/srcpkgs/sagemath/files/sage_conf.py
+++ b/srcpkgs/sagemath/files/sage_conf.py
@@ -1,4 +1,3 @@
 # configuration for sage on void linux
 SAGE_SHARE = "/usr/share/sagemath"
 GAP_SHARE_DIR = "/usr/share/gap"
-GAP_LIB_DIR = "/usr/lib/gap"
diff --git a/srcpkgs/sagemath/files/timings2.json b/srcpkgs/sagemath/files/timings2.json
index bb3098680502..b2b3fe818a20 100644
--- a/srcpkgs/sagemath/files/timings2.json
+++ b/srcpkgs/sagemath/files/timings2.json
@@ -1,281 +1,152 @@
 {
-  "doc.ca.intro.index": {"walltime": 8},
-  "doc.en.constructions.calculus": {"walltime": 64},
-  "doc.en.constructions.plotting": {"walltime": 32},
-  "doc.en.prep.Advanced-2DPlotting": {"walltime": 16},
-  "doc.en.prep.Calculus": {"walltime": 8},
-  "doc.en.prep.Symbolics-and-Basic-Plotting": {"walltime": 8},
-  "doc.en.thematic_tutorials.explicit_methods_in_number_theory.birds_other": {"walltime": 8},
-  "doc.en.thematic_tutorials.explicit_methods_in_number_theory.elliptic_curves": {"walltime": 8},
-  "doc.en.thematic_tutorials.geometry.polyhedra_tutorial": {"walltime": 16},
-  "doc.en.thematic_tutorials.sandpile": {"walltime": 16},
-  "doc.en.thematic_tutorials.vector_calculus.vector_calc_advanced": {"walltime": 32},
-  "doc.en.thematic_tutorials.vector_calculus.vector_calc_cartesian": {"walltime": 32},
-  "doc.en.thematic_tutorials.vector_calculus.vector_calc_change": {"walltime": 32},
-  "doc.en.thematic_tutorials.vector_calculus.vector_calc_curvilinear": {"walltime": 32},
-  "doc.en.thematic_tutorials.vector_calculus.vector_calc_plane": {"walltime": 16},
-  "doc.ja.tutorial.tour_plotting": {"walltime": 8},
-  "sage.algebras.cluster_algebra": {"walltime": 8},
   "sage.algebras.commutative_dga": {"walltime": 16},
-  "sage.algebras.hecke_algebras.ariki_koike_algebra": {"walltime": 8},
-  "sage.algebras.iwahori_hecke_algebra": {"walltime": 8},
-  "sage.algebras.lie_algebras.classical_lie_algebra": {"walltime": 128},
-  "sage.algebras.lie_algebras.nilpotent_lie_algebra": {"walltime": 16},
-  "sage.algebras.quantum_clifford": {"walltime": 16},
-  "sage.algebras.quantum_groups.fock_space": {"walltime": 8},
-  "sage.algebras.quatalg.quaternion_algebra": {"walltime": 8},
-  "sage.algebras.steenrod.steenrod_algebra": {"walltime": 64},
-  "sage.algebras.steenrod.steenrod_algebra_bases": {"walltime": 8},
-  "sage.algebras.yangian": {"walltime": 8},
-  "sage.arith.misc": {"walltime": 32},
+  "sage.algebras.fusion_rings.f_matrix": {"walltime": 16},
+  "sage.algebras.fusion_rings.fusion_ring": {"walltime": 16},
+  "sage.algebras.hecke_algebras.cubic_hecke_algebra": {"walltime": 8},
+  "sage.algebras.lie_conformal_algebras.n2_lie_conformal_algebra": {"walltime": 8},
+  "sage.algebras.quantum_clifford": {"walltime": 8},
+  "sage.algebras.steenrod.steenrod_algebra": {"walltime": 8},
   "sage.calculus.calculus": {"walltime": 16},
   "sage.calculus.desolvers": {"walltime": 8},
-  "sage.calculus.functional": {"walltime": 8},
-  "sage.calculus.riemann": {"walltime": 64},
-  "sage.calculus.tests": {"walltime": 16},
-  "sage.calculus.transforms.dwt": {"walltime": 16},
+  "sage.calculus.riemann": {"walltime": 8},
   "sage.calculus.transforms.fft": {"walltime": 8},
   "sage.categories.coxeter_groups": {"walltime": 8},
-  "sage.categories.finite_monoids": {"walltime": 16},
-  "sage.categories.lie_conformal_algebras": {"walltime": 8},
+  "sage.categories.finite_monoids": {"walltime": 8},
   "sage.categories.loop_crystals": {"walltime": 8},
-  "sage.categories.pushout": {"walltime": 8},
-  "sage.categories.super_hopf_algebras_with_basis": {"walltime": 32},
-  "sage.categories.super_lie_conformal_algebras": {"walltime": 8},
-  "sage.coding.ag_code": {"walltime": 64},
-  "sage.coding.ag_code_decoders": {"walltime": 128},
-  "sage.coding.binary_code": {"walltime": 8},
-  "sage.coding.linear_code": {"walltime": 16},
-  "sage.combinat.backtrack": {"walltime": 32},
-  "sage.combinat.chas.wqsym": {"walltime": 32},
-  "sage.combinat.cluster_algebra_quiver.cluster_seed": {"walltime": 64},
-  "sage.combinat.cluster_algebra_quiver.quiver": {"walltime": 128},
-  "sage.combinat.crystals.affine_factorization": {"walltime": 16},
-  "sage.combinat.crystals.alcove_path": {"walltime": 32},
-  "sage.combinat.crystals.highest_weight_crystals": {"walltime": 8},
-  "sage.combinat.crystals.kirillov_reshetikhin": {"walltime": 16},
-  "sage.combinat.crystals.letters": {"walltime": 8},
-  "sage.combinat.crystals.littelmann_path": {"walltime": 16},
-  "sage.combinat.crystals.mv_polytopes": {"walltime": 16},
-  "sage.combinat.crystals.pbw_crystal": {"walltime": 16},
-  "sage.combinat.crystals.star_crystal": {"walltime": 8},
-  "sage.combinat.designs.bibd": {"walltime": 8},
-  "sage.combinat.designs.database": {"walltime": 16},
+  "sage.coding.ag_code": {"walltime": 32},
+  "sage.coding.ag_code_decoders": {"walltime": 32},
+  "sage.coding.linear_code": {"walltime": 32},
+  "sage.combinat.designs.database": {"walltime": 8},
   "sage.combinat.designs.difference_family": {"walltime": 8},
-  "sage.combinat.designs.gen_quadrangles_with_spread": {"walltime": 128},
-  "sage.combinat.designs.orthogonal_arrays_build_recursive": {"walltime": 16},
-  "sage.combinat.designs.orthogonal_arrays_find_recursive": {"walltime": 8},
-  "sage.combinat.diagram_algebras": {"walltime": 64},
-  "sage.combinat.fqsym": {"walltime": 32},
-  "sage.combinat.free_prelie_algebra": {"walltime": 8},
-  "sage.combinat.fully_commutative_elements": {"walltime": 8},
-  "sage.combinat.grossman_larson_algebras": {"walltime": 8},
-  "sage.combinat.interval_posets": {"walltime": 8},
+  "sage.combinat.designs.orthogonal_arrays_build_recursive": {"walltime": 8},
   "sage.combinat.k_regular_sequence": {"walltime": 8},
   "sage.combinat.k_tableau": {"walltime": 16},
   "sage.combinat.matrices.hadamard_matrix": {"walltime": 8},
   "sage.combinat.multiset_partition_into_sets_ordered": {"walltime": 8},
-  "sage.combinat.ncsf_qsym.ncsf": {"walltime": 16},
-  "sage.combinat.ncsf_qsym.qsym": {"walltime": 16},
-  "sage.combinat.partition": {"walltime": 16},
-  "sage.combinat.partition_kleshchev": {"walltime": 16},
+  "sage.combinat.ncsf_qsym.ncsf": {"walltime": 8},
+  "sage.combinat.ncsf_qsym.qsym": {"walltime": 8},
+  "sage.combinat.partition": {"walltime": 8},
   "sage.combinat.partition_tuple": {"walltime": 8},
-  "sage.combinat.posets.moebius_algebra": {"walltime": 16},
+  "sage.combinat.permutation": {"walltime": 8},
   "sage.combinat.posets.posets": {"walltime": 8},
-  "sage.combinat.rigged_configurations.kr_tableaux": {"walltime": 32},
-  "sage.combinat.rigged_configurations.rigged_configurations": {"walltime": 16},
-  "sage.combinat.rigged_configurations.tensor_product_kr_tableaux": {"walltime": 16},
+  "sage.combinat.rigged_configurations.kr_tableaux": {"walltime": 8},
   "sage.combinat.root_system.associahedron": {"walltime": 8},
-  "sage.combinat.root_system.branching_rules": {"walltime": 8},
-  "sage.combinat.root_system.fusion_ring": {"walltime": 8},
-  "sage.combinat.root_system.integrable_representations": {"walltime": 16},
-  "sage.combinat.root_system.non_symmetric_macdonald_polynomials": {"walltime": 16},
-  "sage.combinat.root_system.pieri_factors": {"walltime": 8},
-  "sage.combinat.root_system.plot": {"walltime": 32},
-  "sage.combinat.root_system.root_lattice_realization_algebras": {"walltime": 16},
-  "sage.combinat.root_system.root_lattice_realizations": {"walltime": 16},
-  "sage.combinat.root_system.root_system": {"walltime": 8},
-  "sage.combinat.root_system.weyl_group": {"walltime": 8},
-  "sage.combinat.rsk": {"walltime": 32},
-  "sage.combinat.sf.classical": {"walltime": 16},
-  "sage.combinat.sf.jack": {"walltime": 16},
-  "sage.combinat.sf.k_dual": {"walltime": 16},
-  "sage.combinat.sf.llt": {"walltime": 16},
-  "sage.combinat.sf.macdonald": {"walltime": 64},
-  "sage.combinat.sf.new_kschur": {"walltime": 8},
-  "sage.combinat.sf.sfa": {"walltime": 32},
-  "sage.combinat.shifted_primed_tableau": {"walltime": 16},
+  "sage.combinat.root_system.non_symmetric_macdonald_polynomials": {"walltime": 8},
+  "sage.combinat.root_system.plot": {"walltime": 16},
+  "sage.combinat.root_system.root_lattice_realizations": {"walltime": 8},
+  "sage.combinat.rsk": {"walltime": 8},
+  "sage.combinat.sf.k_dual": {"walltime": 8},
+  "sage.combinat.sf.sf": {"walltime": 8},
+  "sage.combinat.sf.sfa": {"walltime": 8},
+  "sage.combinat.shifted_primed_tableau": {"walltime": 8},
   "sage.combinat.skew_tableau": {"walltime": 8},
-  "sage.combinat.symmetric_group_algebra": {"walltime": 16},
-  "sage.combinat.tableau": {"walltime": 32},
-  "sage.combinat.tableau_tuple": {"walltime": 32},
-  "sage.combinat.tiling": {"walltime": 16},
-  "sage.combinat.tutorial": {"walltime": 16},
-  "sage.combinat.words.paths": {"walltime": 64},
-  "sage.crypto.block_cipher.des": {"walltime": 16},
-  "sage.crypto.mq.sr": {"walltime": 64},
-  "sage.crypto.sbox": {"walltime": 16},
+  "sage.combinat.species.generating_series": {"walltime": 8},
+  "sage.combinat.tableau": {"walltime": 8},
+  "sage.combinat.tableau_tuple": {"walltime": 8},
+  "sage.combinat.tiling": {"walltime": 8},
+  "sage.combinat.tutorial": {"walltime": 8},
   "sage.crypto.sboxes": {"walltime": 8},
   "sage.doctest.forker": {"walltime": 16},
-  "sage.doctest.sources": {"walltime": 64},
-  "sage.doctest.test": {"walltime": 128},
-  "sage.dynamics.arithmetic_dynamics.projective_ds": {"walltime": 64},
-  "sage.dynamics.arithmetic_dynamics.wehlerK3": {"walltime": 8},
-  "sage.dynamics.cellular_automata.glca": {"walltime": 8},
+  "sage.dynamics.arithmetic_dynamics.projective_ds": {"walltime": 32},
   "sage.dynamics.cellular_automata.solitons": {"walltime": 8},
-  "sage.dynamics.complex_dynamics.mandel_julia": {"walltime": 16},
   "sage.functions.bessel": {"walltime": 16},
-  "sage.functions.exp_integral": {"walltime": 8},
   "sage.functions.hypergeometric": {"walltime": 8},
+  "sage.functions.orthogonal_polys": {"walltime": 8},
   "sage.functions.other": {"walltime": 16},
   "sage.functions.piecewise": {"walltime": 8},
-  "sage.games.quantumino": {"walltime": 8},
-  "sage.geometry.cone": {"walltime": 32},
-  "sage.geometry.fan": {"walltime": 8},
   "sage.geometry.hyperbolic_space.hyperbolic_geodesic": {"walltime": 8},
-  "sage.geometry.hyperplane_arrangement.arrangement": {"walltime": 16},
-  "sage.geometry.hyperplane_arrangement.library": {"walltime": 8},
+  "sage.geometry.hyperplane_arrangement.arrangement": {"walltime": 8},
   "sage.geometry.hyperplane_arrangement.plot": {"walltime": 8},
-  "sage.geometry.lattice_polytope": {"walltime": 16},
-  "sage.geometry.polyhedral_complex": {"walltime": 8},
-  "sage.geometry.polyhedron.base": {"walltime": 32},
-  "sage.geometry.polyhedron.library": {"walltime": 32},
-  "sage.geometry.polyhedron.plot": {"walltime": 8},
+  "sage.geometry.polyhedron.base": {"walltime": 8},
+  "sage.geometry.polyhedron.base5": {"walltime": 8},
+  "sage.geometry.polyhedron.base6": {"walltime": 16},
+  "sage.geometry.polyhedron.library": {"walltime": 16},
   "sage.geometry.riemannian_manifolds.parametrized_surface3d": {"walltime": 16},
-  "sage.geometry.triangulation.base": {"walltime": 32},
-  "sage.geometry.triangulation.point_configuration": {"walltime": 16},
-  "sage.graphs.chrompoly": {"walltime": 8},
-  "sage.graphs.connectivity": {"walltime": 16},
-  "sage.graphs.generators.basic": {"walltime": 16},
-  "sage.graphs.generators.classical_geometries": {"walltime": 32},
-  "sage.graphs.generators.distance_regular": {"walltime": 256},
-  "sage.graphs.generators.families": {"walltime": 32},
-  "sage.graphs.generators.smallgraphs": {"walltime": 16},
-  "sage.graphs.generic_graph": {"walltime": 32},
-  "sage.graphs.genus": {"walltime": 16},
+  "sage.graphs.connectivity": {"walltime": 8},
+  "sage.graphs.generators.classical_geometries": {"walltime": 8},
+  "sage.graphs.generators.distance_regular": {"walltime": 32},
+  "sage.graphs.generators.smallgraphs": {"walltime": 8},
+  "sage.graphs.generic_graph": {"walltime": 16},
   "sage.graphs.graph": {"walltime": 16},
-  "sage.graphs.graph_generators": {"walltime": 8},
   "sage.graphs.graph_list": {"walltime": 8},
   "sage.graphs.graph_plot": {"walltime": 8},
-  "sage.graphs.strongly_regular_db": {"walltime": 16},
-  "sage.groups.cubic_braid": {"walltime": 16},
-  "sage.groups.fqf_orthogonal": {"walltime": 16},
-  "sage.groups.libgap_mixin": {"walltime": 8},
-  "sage.groups.libgap_morphism": {"walltime": 8},
-  "sage.groups.lie_gps.nilpotent_lie_group": {"walltime": 16},
-  "sage.groups.matrix_gps.finitely_generated": {"walltime": 8},
-  "sage.groups.matrix_gps.heisenberg": {"walltime": 32},
-  "sage.groups.matrix_gps.linear": {"walltime": 8},
-  "sage.groups.perm_gps.cubegroup": {"walltime": 16},
-  "sage.groups.perm_gps.partn_ref.refinement_graphs": {"walltime": 8},
+  "sage.graphs.strongly_regular_db": {"walltime": 8},
+  "sage.groups.cactus_group": {"walltime": 8},
+  "sage.groups.cubic_braid": {"walltime": 8},
+  "sage.groups.lie_gps.nilpotent_lie_group": {"walltime": 8},
+  "sage.groups.matrix_gps.finitely_generated_gap": {"walltime": 8},
   "sage.groups.perm_gps.permgroup": {"walltime": 8},
   "sage.groups.perm_gps.permgroup_named": {"walltime": 8},
-  "sage.homology.hochschild_complex": {"walltime": 8},
   "sage.homology.homology_vector_space_with_basis": {"walltime": 8},
-  "sage.interacts.test_jupyter": {"walltime": 16},
-  "sage.interfaces.ecm": {"walltime": 8},
-  "sage.interfaces.expect": {"walltime": 8},
-  "sage.interfaces.gap": {"walltime": 16},
-  "sage.interfaces.maxima": {"walltime": 8},
-  "sage.interfaces.maxima_abstract": {"walltime": 64},
-  "sage.interfaces.psage": {"walltime": 8},
-  "sage.interfaces.sage0": {"walltime": 8},
-  "sage.lfunctions.zero_sums": {"walltime": 8},
-  "sage.libs.eclib.interface": {"walltime": 16},
+  "sage.interfaces.gap": {"walltime": 8},
+  "sage.interfaces.gap_workspace": {"walltime": 8},
+  "sage.interfaces.sage0": {"walltime": 16},
+  "sage.libs.eclib.interface": {"walltime": 32},
   "sage.libs.eclib.mwrank": {"walltime": 16},
-  "sage.libs.gap.test_long": {"walltime": 32},
-  "sage.libs.giac": {"walltime": 32},
   "sage.manifolds.catalog": {"walltime": 8},
-  "sage.manifolds.chart": {"walltime": 32},
+  "sage.manifolds.chart": {"walltime": 16},
   "sage.manifolds.chart_func": {"walltime": 8},
   "sage.manifolds.continuous_map": {"walltime": 8},
-  "sage.manifolds.differentiable.affine_connection": {"walltime": 128},
+  "sage.manifolds.differentiable.affine_connection": {"walltime": 32},
   "sage.manifolds.differentiable.automorphismfield": {"walltime": 32},
-  "sage.manifolds.differentiable.automorphismfield_group": {"walltime": 8},
   "sage.manifolds.differentiable.bundle_connection": {"walltime": 8},
-  "sage.manifolds.differentiable.characteristic_cohomology_class": {"walltime": 64},
+  "sage.manifolds.differentiable.characteristic_cohomology_class": {"walltime": 8},
   "sage.manifolds.differentiable.curve": {"walltime": 16},
-  "sage.manifolds.differentiable.degenerate": {"walltime": 32},
-  "sage.manifolds.differentiable.degenerate_submanifold": {"walltime": 16},
-  "sage.manifolds.differentiable.diff_form": {"walltime": 64},
+  "sage.manifolds.differentiable.degenerate": {"walltime": 16},
+  "sage.manifolds.differentiable.degenerate_submanifold": {"walltime": 8},
+  "sage.manifolds.differentiable.diff_form": {"walltime": 32},
   "sage.manifolds.differentiable.diff_map": {"walltime": 8},
   "sage.manifolds.differentiable.examples.euclidean": {"walltime": 32},
   "sage.manifolds.differentiable.examples.sphere": {"walltime": 32},
   "sage.manifolds.differentiable.integrated_curve": {"walltime": 32},
-  "sage.manifolds.differentiable.levi_civita_connection": {"walltime": 32},
-  "sage.manifolds.differentiable.manifold": {"walltime": 16},
-  "sage.manifolds.differentiable.manifold_homset": {"walltime": 16},
+  "sage.manifolds.differentiable.levi_civita_connection": {"walltime": 16},
+  "sage.manifolds.differentiable.manifold": {"walltime": 8},
+  "sage.manifolds.differentiable.manifold_homset": {"walltime": 8},
   "sage.manifolds.differentiable.metric": {"walltime": 64},
   "sage.manifolds.differentiable.mixed_form": {"walltime": 16},
-  "sage.manifolds.differentiable.mixed_form_algebra": {"walltime": 8},
   "sage.manifolds.differentiable.multivectorfield": {"walltime": 64},
-  "sage.manifolds.differentiable.pseudo_riemannian": {"walltime": 16},
-  "sage.manifolds.differentiable.pseudo_riemannian_submanifold": {"walltime": 128},
-  "sage.manifolds.differentiable.scalarfield": {"walltime": 16},
+  "sage.manifolds.differentiable.pseudo_riemannian": {"walltime": 8},
+  "sage.manifolds.differentiable.pseudo_riemannian_submanifold": {"walltime": 32},
+  "sage.manifolds.differentiable.scalarfield": {"walltime": 8},
   "sage.manifolds.differentiable.scalarfield_algebra": {"walltime": 8},
-  "sage.manifolds.differentiable.tangent_vector": {"walltime": 16},
+  "sage.manifolds.differentiable.tangent_vector": {"walltime": 8},
   "sage.manifolds.differentiable.tensorfield": {"walltime": 128},
   "sage.manifolds.differentiable.tensorfield_paral": {"walltime": 16},
-  "sage.manifolds.differentiable.vector_bundle": {"walltime": 16},
-  "sage.manifolds.differentiable.vectorfield": {"walltime": 64},
-  "sage.manifolds.differentiable.vectorframe": {"walltime": 8},
+  "sage.manifolds.differentiable.vectorfield": {"walltime": 16},
   "sage.manifolds.point": {"walltime": 16},
   "sage.manifolds.scalarfield": {"walltime": 16},
-  "sage.manifolds.scalarfield_algebra": {"walltime": 8},
-  "sage.manifolds.section": {"walltime": 32},
-  "sage.manifolds.trivialization": {"walltime": 8},
-  "sage.manifolds.vector_bundle": {"walltime": 8},
-  "sage.matrix.benchmark": {"walltime": 8},
+  "sage.manifolds.section": {"walltime": 16},
   "sage.matrix.matrix2": {"walltime": 16},
-  "sage.matrix.matrix_integer_dense": {"walltime": 16},
-  "sage.matrix.matrix_integer_dense_hnf": {"walltime": 32},
-  "sage.matrix.matrix_mod2_dense": {"walltime": 8},
   "sage.matrix.matrix_rational_dense": {"walltime": 8},
   "sage.matrix.special": {"walltime": 8},
-  "sage.matroids.catalog": {"walltime": 64},
   "sage.misc.cachefunc": {"walltime": 16},
-  "sage.misc.cython": {"walltime": 8},
   "sage.misc.functional": {"walltime": 8},
   "sage.misc.randstate": {"walltime": 16},
-  "sage.misc.sagedoc": {"walltime": 64},
-  "sage.misc.sageinspect": {"walltime": 32},
-  "sage.modular.abvar.abvar": {"walltime": 16},
+  "sage.misc.sagedoc": {"walltime": 16},
+  "sage.misc.sageinspect": {"walltime": 16},
+  "sage.misc.trace": {"walltime": 8},
+  "sage.modular.abvar.abvar": {"walltime": 8},
   "sage.modular.abvar.homspace": {"walltime": 8},
-  "sage.modular.abvar.lseries": {"walltime": 8},
-  "sage.modular.arithgroup.arithgroup_perm": {"walltime": 8},
-  "sage.modular.arithgroup.tests": {"walltime": 8},
-  "sage.modular.btquotients.pautomorphicform": {"walltime": 32},
-  "sage.modular.hypergeometric_motive": {"walltime": 16},
-  "sage.modular.local_comp.local_comp": {"walltime": 32},
-  "sage.modular.local_comp.type_space": {"walltime": 16},
-  "sage.modular.modform.ambient_R": {"walltime": 16},
-  "sage.modular.modform.constructor": {"walltime": 8},
-  "sage.modular.modform.cuspidal_submodule": {"walltime": 16},
-  "sage.modular.modform.element": {"walltime": 64},
-  "sage.modular.modform.ring": {"walltime": 64},
-  "sage.modular.modform.space": {"walltime": 8},
+  "sage.modular.btquotients.btquotient": {"walltime": 8},
+  "sage.modular.btquotients.pautomorphicform": {"walltime": 16},
+  "sage.modular.hecke.submodule": {"walltime": 8},
+  "sage.modular.hypergeometric_motive": {"walltime": 8},
+  "sage.modular.local_comp.local_comp": {"walltime": 16},
+  "sage.modular.local_comp.type_space": {"walltime": 8},
+  "sage.modular.modform.element": {"walltime": 32},
   "sage.modular.modform_hecketriangle.abstract_space": {"walltime": 16},
   "sage.modular.modform_hecketriangle.graded_ring_element": {"walltime": 16},
   "sage.modular.modform_hecketriangle.hecke_triangle_group_element": {"walltime": 32},
   "sage.modular.modform_hecketriangle.readme": {"walltime": 16},
-  "sage.modular.modform_hecketriangle.space": {"walltime": 8},
   "sage.modular.modsym.ambient": {"walltime": 16},
   "sage.modular.modsym.space": {"walltime": 8},
-  "sage.modular.pollack_stevens.modsym": {"walltime": 64},
-  "sage.modular.pollack_stevens.padic_lseries": {"walltime": 32},
-  "sage.modules.finite_submodule_iter": {"walltime": 16},
-  "sage.modules.free_module": {"walltime": 16},
-  "sage.modules.free_module_element": {"walltime": 8},
-  "sage.modules.free_module_integer": {"walltime": 32},
-  "sage.modules.free_quadratic_module_integer_symmetric": {"walltime": 8},
-  "sage.modules.torsion_quadratic_module": {"walltime": 16},
+  "sage.modular.overconvergent.genus0": {"walltime": 8},
+  "sage.modular.pollack_stevens.modsym": {"walltime": 8},
+  "sage.modules.fp_graded.morphism": {"walltime": 8},
+  "sage.modules.free_module": {"walltime": 8},
   "sage.parallel.map_reduce": {"walltime": 8},
-  "sage.plot.animate": {"walltime": 16},
-  "sage.plot.arrow": {"walltime": 8},
-  "sage.plot.circle": {"walltime": 8},
-  "sage.plot.complex_plot": {"walltime": 8},
+  "sage.plot.complex_plot": {"walltime": 16},
   "sage.plot.contour_plot": {"walltime": 32},
-  "sage.plot.density_plot": {"walltime": 8},
   "sage.plot.graphics": {"walltime": 32},
   "sage.plot.line": {"walltime": 8},
   "sage.plot.matrix_plot": {"walltime": 16},
@@ -283,115 +154,53 @@
   "sage.plot.plot": {"walltime": 64},
   "sage.plot.plot3d.base": {"walltime": 8},
   "sage.plot.plot3d.implicit_plot3d": {"walltime": 16},
-  "sage.plot.plot3d.implicit_surface": {"walltime": 8},
-  "sage.plot.plot3d.parametric_plot3d": {"walltime": 8},
+  "sage.plot.plot3d.parametric_plot3d": {"walltime": 16},
   "sage.plot.plot3d.parametric_surface": {"walltime": 8},
   "sage.plot.plot3d.plot3d": {"walltime": 16},
-  "sage.plot.plot3d.tachyon": {"walltime": 8},
-  "sage.plot.plot3d.transform": {"walltime": 32},
   "sage.plot.point": {"walltime": 8},
   "sage.plot.polygon": {"walltime": 8},
   "sage.plot.streamline_plot": {"walltime": 8},
-  "sage.quadratic_forms.genera.genus": {"walltime": 16},
-  "sage.quadratic_forms.quadratic_form__automorphisms": {"walltime": 8},
-  "sage.quadratic_forms.quadratic_form__local_representation_conditions": {"walltime": 64},
-  "sage.quadratic_forms.quadratic_form__neighbors": {"walltime": 8},
-  "sage.quadratic_forms.quadratic_form__siegel_product": {"walltime": 8},
   "sage.repl.ipython_extension": {"walltime": 8},
-  "sage.rings.asymptotic.asymptotic_expansion_generators": {"walltime": 64},
+  "sage.rings.asymptotic.asymptotic_expansion_generators": {"walltime": 16},
   "sage.rings.asymptotic.asymptotic_ring": {"walltime": 8},
-  "sage.rings.asymptotic.asymptotics_multivariate_generating_functions": {"walltime": 32},
-  "sage.rings.asymptotic.term_monoid": {"walltime": 8},
-  "sage.rings.continued_fraction": {"walltime": 8},
+  "sage.rings.asymptotic.asymptotics_multivariate_generating_functions": {"walltime": 8},
   "sage.rings.finite_rings.finite_field_base": {"walltime": 8},
-  "sage.rings.function_field.function_field": {"walltime": 128},
-  "sage.rings.function_field.function_field_valuation": {"walltime": 64},
+  "sage.rings.function_field.function_field": {"walltime": 8},
   "sage.rings.function_field.ideal": {"walltime": 8},
-  "sage.rings.function_field.place": {"walltime": 8},
-  "sage.rings.integer": {"walltime": 64},
-  "sage.rings.invariants.invariant_theory": {"walltime": 8},
-  "sage.rings.number_field.bdd_height": {"walltime": 8},
-  "sage.rings.number_field.number_field": {"walltime": 64},
-  "sage.rings.number_field.number_field_element": {"walltime": 16},
-  "sage.rings.number_field.splitting_field": {"walltime": 8},
-  "sage.rings.number_field.totallyreal": {"walltime": 16},
-  "sage.rings.number_field.totallyreal_rel": {"walltime": 8},
-  "sage.rings.padics.padic_base_leaves": {"walltime": 64},
-  "sage.rings.padics.padic_extension_leaves": {"walltime": 64},
-  "sage.rings.padics.padic_generic_element": {"walltime": 16},
-  "sage.rings.padics.padic_lattice_element": {"walltime": 32},
-  "sage.rings.padics.relative_extension_leaves": {"walltime": 32},
+  "sage.rings.lazy_series": {"walltime": 8},
+  "sage.rings.lazy_series_ring": {"walltime": 32},
+  "sage.rings.number_field.number_field": {"walltime": 32},
+  "sage.rings.number_field.number_field_element": {"walltime": 8},
+  "sage.rings.padics.padic_base_leaves": {"walltime": 8},
+  "sage.rings.padics.padic_generic_element": {"walltime": 8},
   "sage.rings.polynomial.multi_polynomial_ideal": {"walltime": 8},
-  "sage.rings.polynomial.multi_polynomial_sequence": {"walltime": 8},
-  "sage.rings.polynomial.ore_function_element": {"walltime": 8},
   "sage.rings.polynomial.polynomial_element": {"walltime": 16},
-  "sage.rings.polynomial.polynomial_rational_flint": {"walltime": 8},
   "sage.rings.qqbar": {"walltime": 16},
-  "sage.rings.tests": {"walltime": 16},
-  "sage.rings.valuation.augmented_valuation": {"walltime": 32},
-  "sage.rings.valuation.mapped_valuation": {"walltime": 64},
-  "sage.rings.valuation.valuation": {"walltime": 8},
-  "sage.sandpiles.sandpile": {"walltime": 16},
+  "sage.sandpiles.sandpile": {"walltime": 8},
   "sage.schemes.curves.affine_curve": {"walltime": 16},
   "sage.schemes.curves.closed_point": {"walltime": 8},
   "sage.schemes.curves.projective_curve": {"walltime": 32},
-  "sage.schemes.cyclic_covers.cycliccover_finite_field": {"walltime": 64},
   "sage.schemes.elliptic_curves.BSD": {"walltime": 8},
   "sage.schemes.elliptic_curves.Qcurves": {"walltime": 8},
-  "sage.schemes.elliptic_curves.constructor": {"walltime": 32},
-  "sage.schemes.elliptic_curves.ell_curve_isogeny": {"walltime": 16},
-  "sage.schemes.elliptic_curves.ell_egros": {"walltime": 32},
-  "sage.schemes.elliptic_curves.ell_finite_field": {"walltime": 8},
+  "sage.schemes.elliptic_curves.ell_curve_isogeny": {"walltime": 8},
   "sage.schemes.elliptic_curves.ell_generic": {"walltime": 8},
-  "sage.schemes.elliptic_curves.ell_modular_symbols": {"walltime": 16},
-  "sage.schemes.elliptic_curves.ell_number_field": {"walltime": 128},
+  "sage.schemes.elliptic_curves.ell_modular_symbols": {"walltime": 8},
   "sage.schemes.elliptic_curves.ell_point": {"walltime": 8},
-  "sage.schemes.elliptic_curves.ell_rational_field": {"walltime": 128},
-  "sage.schemes.elliptic_curves.gal_reps_number_field": {"walltime": 32},
-  "sage.schemes.elliptic_curves.gp_simon": {"walltime": 16},
-  "sage.schemes.elliptic_curves.heegner": {"walltime": 32},
-  "sage.schemes.elliptic_curves.height": {"walltime": 64},
-  "sage.schemes.elliptic_curves.isogeny_class": {"walltime": 32},
-  "sage.schemes.elliptic_curves.isogeny_small_degree": {"walltime": 64},
-  "sage.schemes.elliptic_curves.kraus": {"walltime": 16},
+  "sage.schemes.elliptic_curves.ell_rational_field": {"walltime": 32},
+  "sage.schemes.elliptic_curves.height": {"walltime": 8},
+  "sage.schemes.elliptic_curves.isogeny_small_degree": {"walltime": 16},
   "sage.schemes.elliptic_curves.mod_sym_num": {"walltime": 8},
   "sage.schemes.elliptic_curves.padic_lseries": {"walltime": 8},
-  "sage.schemes.elliptic_curves.padics": {"walltime": 16},
-  "sage.schemes.elliptic_curves.saturation": {"walltime": 16},
-  "sage.schemes.elliptic_curves.sha_tate": {"walltime": 32},
-  "sage.schemes.hyperelliptic_curves.hyperelliptic_finite_field": {"walltime": 64},
-  "sage.schemes.hyperelliptic_curves.hyperelliptic_generic": {"walltime": 8},
-  "sage.schemes.hyperelliptic_curves.hyperelliptic_padic_field": {"walltime": 32},
-  "sage.schemes.hyperelliptic_curves.monsky_washnitzer": {"walltime": 8},
-  "sage.schemes.projective.projective_rational_point": {"walltime": 8},
-  "sage.schemes.riemann_surfaces.riemann_surface": {"walltime": 64},
+  "sage.schemes.elliptic_curves.padics": {"walltime": 8},
+  "sage.schemes.elliptic_curves.sha_tate": {"walltime": 16},
+  "sage.schemes.hyperelliptic_curves.hyperelliptic_padic_field": {"walltime": 16},
+  "sage.schemes.riemann_surfaces.riemann_surface": {"walltime": 32},
   "sage.schemes.toric.chow_group": {"walltime": 8},
-  "sage.schemes.toric.sheaf.klyachko": {"walltime": 8},
-  "sage.stats.distributions.discrete_gaussian_integer": {"walltime": 8},
-  "sage.stats.time_series": {"walltime": 8},
-  "sage.structure.coerce_dict": {"walltime": 32},
   "sage.structure.element": {"walltime": 16},
-  "sage.structure.sage_object": {"walltime": 8},
   "sage.symbolic.expression": {"walltime": 32},
-  "sage.symbolic.integration.integral": {"walltime": 32},
-  "sage.symbolic.random_tests": {"walltime": 32},
+  "sage.symbolic.integration.integral": {"walltime": 16},
   "sage.symbolic.relation": {"walltime": 8},
-  "sage.tests.book_schilling_zabrocki_kschur_primer": {"walltime": 32},
-  "sage.tests.book_stein_ent": {"walltime": 16},
-  "sage.tests.books.computational-mathematics-with-sagemath.combinat_doctest": {"walltime": 32},
-  "sage.tests.books.computational-mathematics-with-sagemath.float_doctest": {"walltime": 16},
-  "sage.tests.books.computational-mathematics-with-sagemath.graphique_doctest": {"walltime": 32},
-  "sage.tests.books.computational-mathematics-with-sagemath.graphtheory_doctest": {"walltime": 8},
-  "sage.tests.books.computational-mathematics-with-sagemath.integration_doctest": {"walltime": 32},
-  "sage.tests.books.computational-mathematics-with-sagemath.mpoly_doctest": {"walltime": 8},
-  "sage.tests.books.computational-mathematics-with-sagemath.nonlinear_doctest": {"walltime": 8},
-  "sage.tests.books.computational-mathematics-with-sagemath.recequadiff_doctest": {"walltime": 8},
-  "sage.tests.books.computational-mathematics-with-sagemath.sol.graphique_doctest": {"walltime": 16},
-  "sage.tests.books.computational-mathematics-with-sagemath.sol.numbertheory_doctest": {"walltime": 16},
-  "sage.tests.books.computational-mathematics-with-sagemath.sol.polynomes_doctest": {"walltime": 16},
-  "sage.tests.cmdline": {"walltime": 64},
-  "sage.tests.gosper-sum": {"walltime": 16},
-  "sage.tests.parigp": {"walltime": 8},
-  "sage.topology.simplicial_complex": {"walltime": 8},
-  "sage.topology.simplicial_complex_examples": {"walltime": 16}
+  "sage.tests.book_schilling_zabrocki_kschur_primer": {"walltime": 16},
+  "sage.tests.book_stein_ent": {"walltime": 8},
+  "sage.topology.simplicial_complex": {"walltime": 16}
 }
diff --git a/srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch b/srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch
deleted file mode 100644
index f2f825e4fb10..000000000000
--- a/srcpkgs/sagemath/patches/34851-support_singular_4.3.1.p3-5e5737a0c.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-diff --git a/build/pkgs/singular/checksums.ini b/build/pkgs/singular/checksums.ini
-index 2e33a405d36..313463d2fea 100644
---- a/build/pkgs/singular/checksums.ini
-+++ b/build/pkgs/singular/checksums.ini
-@@ -1,5 +1,5 @@
- tarball=singular-VERSION.tar.gz
--sha1=6c2b622d3681e2de3d58d30c654d43d3e32b720c
--md5=abb1e37c794472e7760655358ab66054
--cksum=17455733
-+sha1=28bb3ee97ef48d04dfa96de182fd93eebe08426c
-+md5=fc0a4f5720dadba45a52ee94324ce00c
-+cksum=1573851737
- upstream_url=ftp://jim.mathematik.uni-kl.de/pub/Math/Singular/SOURCES/4-3-1/singular-VERSION.tar.gz
-diff --git a/build/pkgs/singular/package-version.txt b/build/pkgs/singular/package-version.txt
-index 11300c77e7d..66e2bede53a 100644
---- a/build/pkgs/singular/package-version.txt
-+++ b/build/pkgs/singular/package-version.txt
-@@ -1 +1 @@
--4.3.1p1
-+4.3.1p3
-diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd
-index 8e3ac314b67..747a6b1e2fb 100644
---- a/src/sage/libs/singular/decl.pxd
-+++ b/src/sage/libs/singular/decl.pxd
-@@ -574,7 +574,7 @@ cdef extern from "singular/Singular/libsingular.h":
- 
-     # gets a component out of a polynomial vector
- 
--    poly *pTakeOutComp1(poly **, int)
-+    poly *pTakeOutComp(poly **, int)
- 
-     # deep copy p
- 
-diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx
-index d8ea7b07f3c..3a1271cd59f 100644
---- a/src/sage/libs/singular/singular.pyx
-+++ b/src/sage/libs/singular/singular.pyx
-@@ -1726,20 +1726,21 @@ cdef int overflow_check(unsigned long e, ring *_ring) except -1:
- 
-     Whether an overflow occurs or not partially depends
-     on the number of variables in the ring. See trac ticket
--    :trac:`11856`. With Singular 4, it is by default optimized
--    for at least 4 variables on 64-bit and 2 variables on 32-bit,
--    which in both cases makes a maximal default exponent of
--    2^16-1.
-+    :trac:`11856`.
- 
-     EXAMPLES::
- 
-         sage: P.<x,y> = QQ[]
--        sage: y^(2^16-1)
--        y^65535
--        sage: y^2^16
-+        sage: y^(2^30)
-+        Traceback (most recent call last):             # 32-bit
-+        ...                                            # 32-bit
-+        OverflowError: exponent overflow (1073741824)  # 32-bit
-+        y^1073741824  # 64-bit
-+        sage: y^2^32
-         Traceback (most recent call last):
-         ...
--        OverflowError: exponent overflow (65536)
-+        OverflowError: Python int too large to convert to C unsigned long  # 32-bit
-+        OverflowError: exponent overflow (4294967296)  # 64-bit
-     """
-     if unlikely(e > _ring.bitmask):
-         raise OverflowError("exponent overflow (%d)"%(e))
-diff --git a/src/sage/rings/polynomial/multi_polynomial_ideal.py b/src/sage/rings/polynomial/multi_polynomial_ideal.py
-index 7dc058a22f0..71494eddbc0 100644
---- a/src/sage/rings/polynomial/multi_polynomial_ideal.py
-+++ b/src/sage/rings/polynomial/multi_polynomial_ideal.py
-@@ -60,7 +60,7 @@
- Note that the result of a computation is not necessarily reduced::
- 
-     sage: (a+b)^17
--    256*a*b^16 + 256*b^17
-+    a*b^16 + b^17
-     sage: S(17) == 0
-     True
- 
-diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-index 4dad016b33f..9bf67dd1425 100644
---- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
-@@ -193,7 +193,7 @@ from sage.libs.singular.decl cimport (
-     p_IsUnit, p_IsOne, p_Series, p_Head, idInit, fast_map_common_subexp, id_Delete,
-     p_IsHomogeneous, p_Homogen, p_Totaldegree,pLDeg1_Totaldegree, singclap_pdivide, singclap_factorize,
-     idLift, IDELEMS, On, Off, SW_USE_CHINREM_GCD, SW_USE_EZGCD,
--    p_LmIsConstant, pTakeOutComp1, singclap_gcd, pp_Mult_qq, p_GetMaxExp,
-+    p_LmIsConstant, pTakeOutComp, singclap_gcd, pp_Mult_qq, p_GetMaxExp,
-     pLength, kNF, p_Neg, p_Minus_mm_Mult_qq, p_Plus_mm_Mult_qq,
-     pDiff, singclap_resultant, p_Normalize,
-     prCopyR, prCopyR_NoSort)
-@@ -1587,7 +1587,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
-             9/4
- 
-             sage: P.monomial_quotient(x,y) # Note the wrong result
--            x*y^65535*z^65535
-+            x*y^65535*z^65535      # 32-bit
-+            x*y^1048575*z^1048575  # 64-bit
- 
-             sage: P.monomial_quotient(x,P(1))
-             x
-@@ -2247,10 +2248,11 @@ cdef class MPolynomial_libsingular(MPolynomial):
-             9/4*x^2 - 1/4*y^2 - y - 1
- 
-             sage: P.<x,y> = PolynomialRing(QQ,order='lex')
--            sage: (x^2^15) * x^2^15
-+            sage: (x^2^32) * x^2^32
-             Traceback (most recent call last):
-             ...
--            OverflowError: exponent overflow (...)
-+            OverflowError: Python int too large to convert to C unsigned long  # 32-bit
-+            OverflowError: exponent overflow (...)  # 64-bit
-         """
-         # all currently implemented rings are commutative
-         cdef poly *_p
-@@ -2371,10 +2373,11 @@ cdef class MPolynomial_libsingular(MPolynomial):
-             ValueError: not a 2nd power
- 
-             sage: P.<x,y> = PolynomialRing(QQ,order='lex')
--            sage: (x+y^2^15)^10
-+            sage: (x+y^2^32)^10
-             Traceback (most recent call last):
-             ....
--            OverflowError: exponent overflow (...)
-+            OverflowError: Python int too large to convert to C unsigned long  # 32-bit
-+            OverflowError: exponent overflow (...)  # 64-bit
- 
-         Test fractional powers (:trac:`22329`)::
- 
-@@ -3461,7 +3464,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
-             x^10000
-             no overflow
- 
--            sage: n = 1000
-+            sage: n = 100000
-             sage: try:
-             ....:     f = x^n
-             ....:     f.subs(x = x^n)
-@@ -4567,7 +4570,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
-         l = []
-         for i from 0 <= i < IDELEMS(res):
-             for j from 1 <= j <= IDELEMS(_I):
--                l.append( new_MP(parent, pTakeOutComp1(&res.m[i], j)) )
-+                l.append( new_MP(parent, pTakeOutComp(&res.m[i], 1)) )
- 
-         id_Delete(&fI, r)
-         id_Delete(&_I, r)
-@@ -4635,7 +4638,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
- 
-             sage: f = 3*x
-             sage: f.reduce([2*x,y])
--            3*x
-+            x
- 
-         The reduction is not canonical when ``I`` is not a Groebner
-         basis::
-diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx
-index 1c9f35e56ba..587511c3888 100644
---- a/src/sage/rings/polynomial/plural.pyx
-+++ b/src/sage/rings/polynomial/plural.pyx
-@@ -1619,10 +1619,10 @@ cdef class NCPolynomial_plural(RingElement):
-             sage: P = A.g_algebra(relations={y*x:-x*y + z},  order='lex')
-             sage: P.inject_variables()
-             Defining x, z, y
--            sage: (x^2^15) * x^2^15
-+            sage: (x^2^31) * x^2^31
-             Traceback (most recent call last):
-             ...
--            OverflowError: exponent overflow (65536)
-+            OverflowError: exponent overflow (2147483648)
-         """
-         # all currently implemented rings are commutative
-         cdef poly *_p
-@@ -1689,10 +1689,10 @@ cdef class NCPolynomial_plural(RingElement):
-             sage: P = A.g_algebra(relations={y*x:-x*y + z},  order='lex')
-             sage: P.inject_variables()
-             Defining x, z, y
--            sage: (x+y^2^15)^10
-+            sage: (x+y^2^31)^10
-             Traceback (most recent call last):
-             ....
--            OverflowError: exponent overflow (327680)
-+            OverflowError: exponent overflow (2147483648)
-         """
-         if type(exp) is not Integer:
-             try:
-diff --git a/src/sage/structure/element.pyx b/src/sage/structure/element.pyx
-index b5d83ef71b6..5c45b3fb528 100644
---- a/src/sage/structure/element.pyx
-+++ b/src/sage/structure/element.pyx
-@@ -2705,10 +2705,10 @@ cdef class RingElement(ModuleElement):
-         with Singular 4::
- 
-             sage: K.<x,y> = ZZ[]
--            sage: (x^12345)^54321
-+            sage: (x^123456)^654321
-             Traceback (most recent call last):
-             ...
--            OverflowError: exponent overflow (670592745)
-+            OverflowError: exponent overflow (...)
-         """
-         return arith_generic_power(self, n)
- 
diff --git a/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch b/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
deleted file mode 100644
index ee0f0e656b28..000000000000
--- a/srcpkgs/sagemath/patches/34980-avoid_factoring_in_is_prime.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-diff --git a/src/sage/rings/number_field/number_field_ideal.py b/src/sage/rings/number_field/number_field_ideal.py
-index d5f7157217f..8ca1f958039 100644
---- a/src/sage/rings/number_field/number_field_ideal.py
-+++ b/src/sage/rings/number_field/number_field_ideal.py
-@@ -996,16 +996,38 @@ def is_prime(self):
-             False
-             sage: K.ideal(17).is_prime()  # ramified
-             False
-+
-+        TESTS:
-+
-+        Check that we do not factor the norm of the ideal, this used
-+        to take half an hour, see :trac:`33360`::
-+
-+            sage: K.<a,b,c> = NumberField([x^2-2,x^2-3,x^2-5])
-+            sage: t = (((-2611940*c + 1925290/7653)*b - 1537130/7653*c
-+            ....:       + 10130950)*a + (1343014/7653*c - 8349770)*b
-+            ....:       + 6477058*c - 2801449990/4002519)
-+            sage: t.is_prime()
-+            False
-         """
-         try:
-             return self._pari_prime is not None
-         except AttributeError:
--            F = self.factor()  # factorization with caching
--            if len(F) != 1 or F[0][1] != 1:
--                self._pari_prime = None
--            else:
--                self._pari_prime = F[0][0]._pari_prime
--            return self._pari_prime is not None
-+            pass
-+
-+        K = self.number_field().pari_nf()
-+        I = self.pari_hnf()
-+
-+        candidate = K.idealismaximal(I) or None
-+
-+        # PARI uses probabilistic primality testing inside idealismaximal().
-+        if get_flag(None, 'arithmetic'):
-+            # proof required, check using isprime()
-+            if candidate and not candidate[0].isprime():
-+                candidate = None
-+
-+        self._pari_prime = candidate
-+
-+        return self._pari_prime is not None
- 
-     def pari_prime(self):
-         r"""
diff --git a/srcpkgs/sagemath/patches/34994-fix_tests_numpy_1.24.patch b/srcpkgs/sagemath/patches/34994-fix_tests_numpy_1.24.patch
deleted file mode 100644
index 91f06fd4d173..000000000000
--- a/srcpkgs/sagemath/patches/34994-fix_tests_numpy_1.24.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff --git a/src/sage/misc/persist.pyx b/src/sage/misc/persist.pyx
-index 3ac5f1cc2b0..cb1f327c199 100644
---- a/src/sage/misc/persist.pyx
-+++ b/src/sage/misc/persist.pyx
-@@ -157,7 +157,7 @@ def load(*filename, compress=True, verbose=True, **kwargs):
-         ....:     _ = f.write(code)
-         sage: load(t)
-         sage: hello
--        <fortran object>
-+        <fortran ...>
-     """
-     import sage.repl.load
-     if len(filename) != 1:
-diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
-index 6f0aeab87ae..b77c69b2f77 100644
---- a/src/sage/plot/complex_plot.pyx
-+++ b/src/sage/plot/complex_plot.pyx
-@@ -461,6 +461,8 @@ def complex_to_rgb(z_values, contoured=False, tiled=False,
-             rgb[i, j, 2] = b
- 
-     sig_off()
-+    nan_indices = np.isnan(rgb).any(-1)     # Mask for undefined points
-+    rgb[nan_indices] = 1                    # Make nan_indices white
-     return rgb
- 
- 
-diff --git a/src/sage/plot/histogram.py b/src/sage/plot/histogram.py
-index 3bc2b76b58e..388c2d1391d 100644
---- a/src/sage/plot/histogram.py
-+++ b/src/sage/plot/histogram.py
-@@ -87,13 +87,8 @@ def get_minmax_data(self):
- 
-         TESTS::
- 
--            sage: h = histogram([10,3,5], normed=True)[0]
--            doctest:warning...:
--            DeprecationWarning: the 'normed' option is deprecated. Use 'density' instead.
--            See https://trac.sagemath.org/25260 for details.
-+            sage: h = histogram([10,3,5], density=True)[0]
-             sage: h.get_minmax_data()
--            doctest:warning ...
--            ...VisibleDeprecationWarning: Passing `normed=True` on non-uniform bins has always been broken, and computes neither the probability density function nor the probability mass function. The result is only correct if the bins are uniform, when density=True will produce the same result anyway. The argument will be removed in a future version of numpy.
-             {'xmax': 10.0, 'xmin': 3.0, 'ymax': 0.476190476190..., 'ymin': 0}
-         """
-         import numpy
-diff --git a/src/sage/repl/ipython_extension.py b/src/sage/repl/ipython_extension.py
-index 798671aab42..cad6a47ca8b 100644
---- a/src/sage/repl/ipython_extension.py
-+++ b/src/sage/repl/ipython_extension.py
-@@ -405,7 +405,7 @@ def fortran(self, line, cell):
-             ....: C END FILE FIB1.F
-             ....: ''')
-             sage: fib
--            <fortran object>
-+            <fortran ...>
-             sage: from numpy import array
-             sage: a = array(range(10), dtype=float)
-             sage: fib(a, 10)
diff --git a/srcpkgs/sagemath/patches/34995-support_tachyon_0.99.2.patch b/srcpkgs/sagemath/patches/34995-support_tachyon_0.99.2.patch
deleted file mode 100644
index 2769e87f6a4b..000000000000
--- a/srcpkgs/sagemath/patches/34995-support_tachyon_0.99.2.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-diff --git a/src/sage/interfaces/tachyon.py b/src/sage/interfaces/tachyon.py
-index 23671e50892..ce1d50f71bc 100644
---- a/src/sage/interfaces/tachyon.py
-+++ b/src/sage/interfaces/tachyon.py
-@@ -683,12 +683,14 @@
- #*****************************************************************************
- 
- import os
-+import re
- 
- from sage.cpython.string import bytes_to_str
- from sage.misc.pager import pager
- from sage.misc.superseded import deprecation
- from sage.misc.temporary_file import tmp_filename
- from sage.structure.sage_object import SageObject
-+from sage.misc.cachefunc import cached_method
- 
- 
- class TachyonRT(SageObject):
-@@ -799,6 +801,11 @@ def __call__(self, model, outfile='sage.png', verbose=1, extra_opts=''):
-             Parser failed due to an input file syntax error.
-             Aborting render.
-         """
-+        if self.version() >= '0.99.2':
-+            # this keyword was changed in 0.99.2
-+            model = model.replace(
-+                    "              focallength ",
-+                    "              focaldist ")
-         modelfile = tmp_filename(ext='.dat')
-         with open(modelfile, 'w') as file:
-             file.write(model)
-@@ -851,6 +858,25 @@ def usage(self, use_pager=True):
-         else:
-             print(r)
- 
-+    @cached_method
-+    def version(self):
-+        """
-+        Returns the version of the Tachyon raytracer being used.
-+
-+        TESTS::
-+
-+            sage: tachyon_rt.version()  # random
-+            0.98.9
-+            sage: tachyon_rt.version() >= '0.98.9'
-+            True
-+        """
-+        with os.popen('tachyon') as f:
-+            r = f.readline()
-+        res = re.search(r"Version ([\d.]*)", r)
-+        # debian patches tachyon so it won't report the version
-+        # we hardcode '0.99' since that's indeed the version they ship
-+        return res[1] if res else '0.99'
-+
-     def help(self, use_pager=True):
-         """
-         Deprecated: type 'sage.interfaces.tachyon?' for help
diff --git a/srcpkgs/sagemath/patches/34997-fix_edge_case_of_integer_check.patch b/srcpkgs/sagemath/patches/34997-fix_edge_case_of_integer_check.patch
deleted file mode 100644
index 11eb20d4f735..000000000000
--- a/srcpkgs/sagemath/patches/34997-fix_edge_case_of_integer_check.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/src/sage/arith/long.pxd b/src/sage/arith/long.pxd
-index 1c9a53387a0..d96b98f247c 100644
---- a/src/sage/arith/long.pxd
-+++ b/src/sage/arith/long.pxd
-@@ -270,6 +270,17 @@ cdef inline bint integer_check_long_py(x, long* value, int* err):
-         sage: L += [-x for x in L] + [0, long_min()]
-         sage: for v in L:
-         ....:     assert check_long_py(int(v)) == v
-+        sage: check_long_py(int(2^60))
-+        1152921504606846976                 # 64-bit
-+        'Overflow (...)'                    # 32-bit
-+        sage: check_long_py(int(2^61))
-+        2305843009213693952                 # 64-bit
-+        'Overflow (...)'                    # 32-bit
-+        sage: check_long_py(int(2^62))
-+        4611686018427387904                 # 64-bit
-+        'Overflow (...)'                    # 32-bit
-+        sage: check_long_py(int(2^63))
-+        'Overflow (...)'
-         sage: check_long_py(int(2^100))
-         'Overflow (...)'
-         sage: check_long_py(int(long_max() + 1))
-@@ -309,7 +320,12 @@ cdef inline bint integer_check_long_py(x, long* value, int* err):
- 
-     cdef long lead
-     cdef long lead_2_overflow = (<long>1) << (BITS_IN_LONG - PyLong_SHIFT)
--    cdef long lead_3_overflow = (<long>1) << (BITS_IN_LONG - 2 * PyLong_SHIFT)
-+    cdef long lead_3_overflow
-+    if BITS_IN_LONG < 2 * PyLong_SHIFT:
-+        # in this case 3 digit is always overflow
-+        lead_3_overflow = 0
-+    else:
-+        lead_3_overflow = (<long>1) << (BITS_IN_LONG - 2 * PyLong_SHIFT)
-     if size == 0:
-         value[0] = 0
-         err[0] = 0
diff --git a/srcpkgs/sagemath/patches/35058-skip_unstable_tests_klyachko.patch b/srcpkgs/sagemath/patches/35058-skip_unstable_tests_klyachko.patch
deleted file mode 100644
index c4d7d5c779d1..000000000000
--- a/srcpkgs/sagemath/patches/35058-skip_unstable_tests_klyachko.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/src/sage/schemes/toric/sheaf/klyachko.py b/src/sage/schemes/toric/sheaf/klyachko.py
-index b1304a16913..77fae4b7545 100644
---- a/src/sage/schemes/toric/sheaf/klyachko.py
-+++ b/src/sage/schemes/toric/sheaf/klyachko.py
-@@ -26,7 +26,7 @@
-     (0, 0, 18, 16, 1)
-     sage: Gtilde = G_sum.random_deformation()
-     sage: V = Gtilde.wedge(2) * K                     # long time
--    sage: V.cohomology(dim=True, weight=(0,0,0,0))    # long time
-+    sage: V.cohomology(dim=True, weight=(0,0,0,0))    # long time  # random failure (see #32773)
-     (0, 0, 3, 0, 0)
- 
- REFERENCES:
-@@ -948,7 +948,7 @@ def random_deformation(self, epsilon=None):
-            sage: V.cohomology(dim=True, weight=(0,))
-            (1, 0)
-            sage: Vtilde = V.random_deformation()
--           sage: Vtilde.cohomology(dim=True, weight=(0,))
-+           sage: Vtilde.cohomology(dim=True, weight=(0,))  # random failure (see #32773)
-            (1, 0)
-         """
-         filt = self._filt.random_deformation(epsilon)
diff --git a/srcpkgs/sagemath/patches/35068-fix_tests_giac_1.9.0.35.patch b/srcpkgs/sagemath/patches/35068-fix_tests_giac_1.9.0.35.patch
deleted file mode 100644
index d9a9835c696b..000000000000
--- a/srcpkgs/sagemath/patches/35068-fix_tests_giac_1.9.0.35.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 9ac7840134054155545e24fa3e66402d42b91c0f Mon Sep 17 00:00:00 2001
-From: Antonio Rojas <arojas@archlinux.org>
-Date: Fri, 20 Jan 2023 21:36:27 +0100
-Subject: [PATCH] Fix tests with giac 1.9.0.35
-
----
- src/sage/libs/giac/giac.pyx   |  3 +--
- src/sage/symbolic/relation.py | 15 +++++----------
- 2 files changed, 6 insertions(+), 12 deletions(-)
-
-diff --git a/src/sage/libs/giac/giac.pyx b/src/sage/libs/giac/giac.pyx
-index 4e451dba5e7..ccad5169836 100644
---- a/src/sage/libs/giac/giac.pyx
-+++ b/src/sage/libs/giac/giac.pyx
-@@ -374,8 +374,7 @@ def _giac(s):
- 
-         sage: x = libgiac('x')
-         sage: (1+2*sin(3*x)).solve(x).simplify()
--        Warning, argument is not an equation, solving 1+2*sin(3*x)=0
--        list[-pi/18,7*pi/18]
-+        ...list[-pi/18,7*pi/18]
- 
-         sage: libgiac.solve('sin(3*x)>2*sin(x)',x)
-         Traceback (most recent call last):
-diff --git a/src/sage/symbolic/relation.py b/src/sage/symbolic/relation.py
-index e9dbc0fea30..b8896a94be9 100644
---- a/src/sage/symbolic/relation.py
-+++ b/src/sage/symbolic/relation.py
-@@ -935,8 +935,7 @@ def solve(f, *args, **kwds):
- 
-         sage: f = (sin(x) - 8*cos(x)*sin(x))*(sin(x)^2 + cos(x)) - (2*cos(x)*sin(x) - sin(x))*(-2*sin(x)^2 + 2*cos(x)^2 - cos(x))
-         sage: solve(f, x, algorithm='giac')
--        ...
--        [-2*arctan(sqrt(2)), 0, 2*arctan(sqrt(2)), pi]
-+        ...[-2*arctan(sqrt(2)), 0, 2*arctan(sqrt(2)), pi]
- 
-         sage: x, y = SR.var('x,y')
-         sage: solve([x+y-4,x*y-3],[x,y],algorithm='giac')
-@@ -1440,19 +1439,15 @@ def _giac_solver(f, x, solution_dict=False):
-     EXAMPLES::
- 
-         sage: solve([(2/3)^x-2], [x], algorithm='giac')
--        ...
--        [[-log(2)/(log(3) - log(2))]]
-+        ...[[-log(2)/(log(3) - log(2))]]
-         sage: solve([(2/3)^x-2], [x], algorithm='giac', solution_dict=True)
--        ...
--        [{x: -log(2)/(log(3) - log(2))}]
-+        ...[{x: -log(2)/(log(3) - log(2))}]
- 
-         sage: f = (sin(x) - 8*cos(x)*sin(x))*(sin(x)^2 + cos(x)) - (2*cos(x)*sin(x) - sin(x))*(-2*sin(x)^2 + 2*cos(x)^2 - cos(x))
-         sage: solve(f, x, algorithm='giac')
--        ...
--        [-2*arctan(sqrt(2)), 0, 2*arctan(sqrt(2)), pi]
-+        ...[-2*arctan(sqrt(2)), 0, 2*arctan(sqrt(2)), pi]
-         sage: solve(f, x, algorithm='giac', solution_dict=True)
--        ...
--        [{x: -2*arctan(sqrt(2))}, {x: 0}, {x: 2*arctan(sqrt(2))}, {x: pi}]
-+        ...[{x: -2*arctan(sqrt(2))}, {x: 0}, {x: 2*arctan(sqrt(2))}, {x: pi}]
- 
-         sage: x, y = SR.var('x,y')
-         sage: solve([x+y-7,x*y-10],[x,y],algorithm='giac')
diff --git a/srcpkgs/sagemath/patches/35094-support_gap_4.12.patch b/srcpkgs/sagemath/patches/35094-support_gap_4.12.patch
deleted file mode 100644
index 499e0c71e256..000000000000
--- a/srcpkgs/sagemath/patches/35094-support_gap_4.12.patch
+++ /dev/null
@@ -1,1303 +0,0 @@
-diff --git a/build/pkgs/gap/checksums.ini b/build/pkgs/gap/checksums.ini
-index 066e943308a..b0ea8ba8818 100644
---- a/build/pkgs/gap/checksums.ini
-+++ b/build/pkgs/gap/checksums.ini
-@@ -1,5 +1,5 @@
- tarball=gap-VERSION.tar.gz
--sha1=4ecdd281b8f430282fb9b12690b06e0a26abde10
--md5=85dc9e459d5b6c66fcad9f468afd3e3e
--cksum=1351843158
-+sha1=a6e36f3f874a2c46f51561402634497eab705cca
-+md5=c5cd9f272f2703d7a3649ad7193b2d90
-+cksum=2760477284
- upstream_url=https://github.com/gap-system/gap/releases/download/vVERSION/gap-VERSION.tar.gz
-diff --git a/build/pkgs/gap/package-version.txt b/build/pkgs/gap/package-version.txt
-index d782fca8f64..f1cd7de1de5 100644
---- a/build/pkgs/gap/package-version.txt
-+++ b/build/pkgs/gap/package-version.txt
-@@ -1 +1 @@
--4.11.1
-+4.12.2
-diff --git a/build/pkgs/gap/spkg-check.in b/build/pkgs/gap/spkg-check.in
-index d9791d33293..d2fccda6e04 100644
---- a/build/pkgs/gap/spkg-check.in
-+++ b/build/pkgs/gap/spkg-check.in
-@@ -3,6 +3,13 @@ cd src
- # #28728: Fix test failure in tst/testinstall/strings.tst
- export LC_CTYPE=en_US.UTF-8
- 
-+# #34391: in GAP 4.12 some packages need GAP package io
-+#         to let tests run, otherwise this hangs. Thus we install io here.
-+cd pkg/io
-+./configure --with-gaproot=../..
-+make
-+cd ../..
-+
- make testinstall
- if [[ $? -ne 0 ]]; then
-     exit 1
-diff --git a/build/pkgs/gap/spkg-install.in b/build/pkgs/gap/spkg-install.in
-index 2ceadf99db4..e2c8b4dca54 100644
---- a/build/pkgs/gap/spkg-install.in
-+++ b/build/pkgs/gap/spkg-install.in
-@@ -8,8 +8,7 @@ export CFLAGS=$CFLAGS_NON_NATIVE
- export CXXFLAGS=$CXXFLAGS_NON_NATIVE
- 
- GAP_BUILD_ROOT="$(pwd)"
--GAP_ROOT="$SAGE_LOCAL/share/gap"
--DESTDIR_GAP_ROOT="$SAGE_DESTDIR$GAP_ROOT"
-+GAP_ROOT="$SAGE_LOCAL/lib/gap"
- 
- # Enable debug info if requested.
- # Note that -g3 allows you to use preprocessor macros in gdb which are widely used
-@@ -17,37 +16,17 @@ if [ "$SAGE_DEBUG" = yes ] ; then
-     export CFLAGS="-O0 -g3 -DDEBUG_MASTERPOINTERS -DDEBUG_GLOBAL_BAGS -DDEBUG_FUNCTIONS_BAGS $CFLAGS"
- fi
- 
--sdh_configure $SAGE_CONFIGURE_GMP
--sdh_make -j1
-+# LDFLAGS hack below needed by Semigroups package
-+sdh_configure $SAGE_CONFIGURE_GMP LDFLAGS="-pthread" --prefix=$SAGE_LOCAL
-+sdh_make
- 
--# GAP's "make install" is work in progress; we use bits and pieces of it
--# but we install many things manually.
--sdh_make install-headers install-libgap
--
--# Install config.h, which is not currently handled by `make install-headers`
--sdh_install gen/config.h "$SAGE_LOCAL/include/gap"
--
--# Now install the gap executable as "gap-bin"; it will be called normally
--# through our wrapper script that sets the appropriate GAP_ROOT
--SAGE_BIN="$SAGE_LOCAL/bin"
--mkdir -p "$SAGE_DESTDIR$SAGE_BIN" || sdh_die "Failed to create the directory $SAGE_BIN"
--
--./libtool --mode=install install gap "$SAGE_DESTDIR$SAGE_BIN/gap-bin" || \
--    sdh_die "Failed to install gap-bin to $SAGE_BIN"
--
--./libtool --mode=install install gac "$SAGE_DESTDIR$SAGE_BIN/gac" || \
--    sdh_die "Failed to install gac to $SAGE_BIN"
--
--# Now copy additional files GAP needs to run (and a few optional bits) into
--# GAP_ROOT; we don't need everything from the source tree
--sdh_install bin doc gen grp lib src tst sysinfo.gap "$GAP_ROOT"
--
--# GAP's copy of libtool is also used by the toolchain for build GAP packages
--# (i.e. by gac)
--sdh_install libtool "$GAP_ROOT"
-+sdh_make_install
-+# sdh_make install-headers install-libgap
-+# The 'packagemanager' package expects this https://github.com/gap-packages/PackageManager/issues/105
-+mkdir -p "$SAGE_LOCAL/lib/gap/bin"
- 
- # Install only the minimal packages GAP needs to run
--sdh_install pkg/GAPDoc-* pkg/primgrp-* pkg/SmallGrp-* pkg/transgrp "$GAP_ROOT"/pkg
-+sdh_install pkg/gapdoc pkg/primgrp pkg/smallgrp pkg/transgrp "$GAP_ROOT"/pkg
- 
- # Install additional packages that are not strictly required, but that are
- # typically "expected" to be loaded: These are the default packages that are
-@@ -58,50 +37,25 @@ sdh_install pkg/GAPDoc-* pkg/primgrp-* pkg/SmallGrp-* pkg/transgrp "$GAP_ROOT"/p
- # Also include atlasrep which is a dependency of tomlib
- sdh_install \
-     pkg/atlasrep \
--    pkg/autpgrp-* \
--    pkg/alnuth-* \
--    pkg/crisp-* \
--    pkg/ctbllib-* \
--    pkg/FactInt-* \
-+    pkg/autodoc \
-+    pkg/autpgrp \
-+    pkg/alnuth \
-+    pkg/crisp \
-+    pkg/ctbllib \
-+    pkg/factint \
-     pkg/fga \
--    pkg/irredsol-* \
--    pkg/laguna-* \
--    pkg/PackageManager-* \
--    pkg/polenta-* \
--    pkg/polycyclic-* \
--    pkg/resclasses-* \
--    pkg/sophus-* \
--    pkg/tomlib-* \
-+    pkg/irredsol \
-+    pkg/laguna \
-+    pkg/packagemanager \
-+    pkg/polenta \
-+    pkg/polycyclic \
-+    pkg/radiroot \
-+    pkg/resclasses \
-+    pkg/sophus \
-+    pkg/tomlib \
-+    pkg/utils \
-     "$GAP_ROOT"/pkg
- 
--# Install the GAP startup script; ensure it is executable
--sdh_install -T ../gap "$SAGE_BIN/gap"
--chmod +x "$SAGE_DESTDIR$SAGE_BIN/gap"
--
--# Create symlinks under $GAP_ROOT for these executables, as they are expected
--# (especially when building kernel packages) to exist
--ln -sf "../../bin/gap-bin" "$DESTDIR_GAP_ROOT/gap"
--ln -sf "../../bin/gac" "$DESTDIR_GAP_ROOT/gac"
--
--# Fix the $GAP_ROOT/bin/<arch>/src symlink to be relative (otherwise it links
--# to the actual path of the sources GAP was compiled from)
--for srclink in "$DESTDIR_GAP_ROOT"/bin/*/src; do
--    rm -f "$srclink"
--    ln -s "../../src" "$srclink"
--done
--
--# Additional fixups for some files after they have been copied into their
--# destination directory.  gac and sysinfo.gap are generated files that contain
--# in them hard-coded references to the GAP build directory, which will soon
--# be going away.  This breaks the build toolchain for some compiled GAP
--# packages.  We need to replace these paths with the final GAP_ROOT path.  The
--# below will work so long as neither of these paths contain '|', and if they do
--# then god help you.  https://trac.sagemath.org/ticket/27218
--sed -i -e "s|$GAP_BUILD_ROOT|$GAP_ROOT|g" \
--    "$SAGE_DESTDIR$SAGE_BIN/gac" "$DESTDIR_GAP_ROOT/sysinfo.gap" \
--    "$DESTDIR_GAP_ROOT/bin/gap.sh" "$DESTDIR_GAP_ROOT/doc/make_doc" || \
--    sdh_die "Failed to fix up hard-coded paths in GAP build tools."
--
- # TODO: This seems unnecessary--we are already installing all of doc/ to
- # GAP_ROOT, which is necessary for some functionality in GAP to work.  Do
- # we need this?  Maybe doc/gap could just be a symlink to gap/doc??
-diff --git a/build/pkgs/gap/spkg-legacy-uninstall b/build/pkgs/gap/spkg-legacy-uninstall
-index d17eb939eb7..a8e5c59e1fb 100755
---- a/build/pkgs/gap/spkg-legacy-uninstall
-+++ b/build/pkgs/gap/spkg-legacy-uninstall
-@@ -4,6 +4,8 @@ rm -rf "$SAGE_LOCAL/gap/gap-4."*
- rm -rf "$SAGE_SHARE/gap"
- rm -f "$SAGE_LOCAL/gap/latest"
- rm -f "$SAGE_LOCAL/bin/gap"
-+rm -f "$SAGE_LOCAL/bin/gac"
- 
--# Remove old libgap headers
-+# Remove old libgap headers and library
- rm -rf "$SAGE_LOCAL/include/gap"
-+rm -rf "$SAGE_LOCAL/lib/gap"
-diff --git a/build/pkgs/gap/spkg-prerm.in b/build/pkgs/gap/spkg-prerm.in
-deleted file mode 100644
-index 661d92621fa..00000000000
---- a/build/pkgs/gap/spkg-prerm.in
-+++ /dev/null
-@@ -1,6 +0,0 @@
--# These generated files are placed in directory provided by the SPKG, so
--# delete the generated files first so that their parent directories can be
--# removed during installation
--GAP_ROOT="$SAGE_LOCAL/share/gap"
--rm -f "$GAP_ROOT/pkg/atlasrep/datagens/"*.*
--rm -f "$GAP_ROOT/pkg/atlasrep/dataword/"*.*
-diff --git a/build/pkgs/gap_packages/patches/cohomolo-gcc10.patch b/build/pkgs/gap_packages/patches/cohomolo-gcc10.patch
-deleted file mode 100644
-index e45fe7d9c6f..00000000000
---- a/build/pkgs/gap_packages/patches/cohomolo-gcc10.patch
-+++ /dev/null
-@@ -1,150 +0,0 @@
--diff --git a/pkg/cohomolo-1.6.8/standalone/progs.d/crp1.c b/pkg/cohomolo-1.6.8/standalone/progs.d/crp1.c
--index 3bbdc45..7df699f 100644
----- a/pkg/cohomolo-1.6.8/standalone/progs.d/crp1.c
--+++ b/pkg/cohomolo-1.6.8/standalone/progs.d/crp1.c
--@@ -8,9 +8,8 @@ extern short sp[],**mat[],*psp[],**imcos[],**cpco[],lorb[],
-- short *cst,**cpst,***cdpst,**svptr,*cp,*rel;
-- short *spst,**pspst,**pptr,**cpptr,npt,nb,nph,nph2,npg,npg2,
--       rno,orno,coh_index,*invg;
---FILE  *ip,*op;
-- 
---void seeknln (void) { while (getc(ip)!='\n'); }
--+void seeknln (FILE *ip) { while (getc(ip)!='\n'); }
-- 
-- /* This program differs from most other permutation programs in that perms are
--    all stored in the single array sp. Schreier vectors are stored in the short
--@@ -23,13 +22,14 @@ void seeknln (void) { while (getc(ip)!='\n'); }
-- int 
-- crprog1 (void)
-- { short *pc,*qc,ex,neg; int x;
--+  FILE  *ip,*op;
--   short i,j,k,l,m,n,cl,rl,*p,ocl,im,pt,pt1,pn,ipt;
--   if ((ip=fopen(inf2,"r"))== 0)
--   { fprintf(stderr,"Cannot open %s.\n",inf2); return(-1);}
--   fscanf(ip,"%hd%hd%hd%hd",&npt,&nph,&nb,&k);
--   if (nb>=mb) {fprintf(stderr,"nb too big. Increase MB.\n"); return(-1);}
--   if (k<=2) {fprintf(stderr,"inf2 has illegal format.\n"); return(-1); }
---  seeknln(); seeknln();
--+  seeknln(ip); seeknln(ip);
--   for (i=1;i<=nb;i++) fscanf(ip,"%hd",lorb+i);
--   pptr=psp-1; pspst=psp+nph; svptr=cpsp-1;  cpst=cpsp+nb;
--   invg=sp; nph2=2*nph; spst=sp+nph2;
--@@ -37,7 +37,7 @@ crprog1 (void)
--   { pptr[i]=spst+(i-1)*npt-1; p=pptr[i];
--     for (j=1;j<=npt;j++) {fscanf(ip,"%hd",&k); p[k]=j; }
--     invg[2*i-2]=2*i-1; invg[2*i-1]=2*i-2;
---    seeknln();
--+    seeknln(ip);
--   }
--   spst+=(npt*nph);
--   for (i=1;i<=nb;i++)
--@@ -75,7 +75,7 @@ crprog1 (void)
--   strcpy(inf1,inf0); strcat(inf1,".rel");
--   if ((ip=fopen(inf1,"r"))==0)
--   { fprintf(stderr,"Cannot open %s.\n",inf1); return(-1);}
---  fscanf(ip,"%hd%hd",&k,&rno); seeknln();
--+  fscanf(ip,"%hd%hd",&k,&rno); seeknln(ip);
--   op=fopen(outft,"w");
-- /* Now we have read everything in, and the computation can start */
--   orno=0;
--diff --git a/pkg/cohomolo-1.6.8/standalone/progs.d/nq+chfns.c b/pkg/cohomolo-1.6.8/standalone/progs.d/nq+chfns.c
--index a7396b2..658496f 100644
----- a/pkg/cohomolo-1.6.8/standalone/progs.d/nq+chfns.c
--+++ b/pkg/cohomolo-1.6.8/standalone/progs.d/nq+chfns.c
--@@ -20,8 +20,6 @@ short  mexp=MEXP,mcl=MCL,no,rel[RSP],wt[MEXP],exp,*rpf,*rpb,
-- extern short  prime,dim,*spv,**spm,mspace[],*vec[],**mat[],cp[],pinv[],opmats,
--         mm,mv;
-- extern int msp;
---FILE *ip,*op;
---
-- 
-- int 
-- calcmats (void)
--@@ -59,7 +57,7 @@ calcmats (void)
--   }
--   for (i=1;i<=exp;i++) trans(mat[i+exp],mat[i]);
--   if (opmats)
---  { op=fopen(outf,"w");
--+  { FILE *op=fopen(outf,"w");
--     fprintf(op,"%4d%4d%4d\n",prime,dim,exp);
--     for (i=1;i<=exp;i++) printmat(mat[i]); 
--     fclose(op);
--@@ -71,6 +69,7 @@ int
-- rdmats (void)
-- /* reads matrices of generators of P */
-- { short i; int quot;
--+  FILE *ip;
--   ip=fopen(inf4,"r");
--   if (ip==0)
--   { fprintf(stderr,"Cannot open %s\n ",inf4); return(-1); }
--@@ -90,12 +89,12 @@ rdmats (void)
--   fclose(ip);
--   return(0);
-- }
---FILE *ip;
-- 
-- int 
-- ingp (int inp)
-- /* Read in output of respcrun -s */
-- { short i,j,k,l,m,*orpf,**pcp;
--+  FILE *ip;
--   ip=fopen(inf3,"r");
--   if (ip==0) { fprintf(stderr,"Cannot open %s\n",inf3); return(-1); }
--   fscanf(ip,"%hd%hd%hd%hd%hd%hd",&prime,&exp,&i,&no,&j,&m);
--diff --git a/pkg/cohomolo-1.6.8/standalone/progs.d/nqmfns.c b/pkg/cohomolo-1.6.8/standalone/progs.d/nqmfns.c
--index 0896551..6841bc8 100644
----- a/pkg/cohomolo-1.6.8/standalone/progs.d/nqmfns.c
--+++ b/pkg/cohomolo-1.6.8/standalone/progs.d/nqmfns.c
--@@ -9,7 +9,6 @@ extern short  intexp,mexp,mng,wksp,
--        spugen[],*tlintg[];
-- extern int ptrsp,rsp;
-- short  fac;
---FILE *ip,*op;
-- 
-- int 
-- ingp (void)
--@@ -18,6 +17,7 @@ ingp (void)
--    of nqrun, and tails are also read in.
-- */
-- { short i,j,k,l,m,x,y,no,*orpf,*orpb,**pcp;  char tails;
--+  FILE *ip;
--   if ((ip=fopen(inf1,"r"))==0)
--   { fprintf(stderr,"Cannot open %s.\n",inf1); return(-1); }
--   fscanf(ip,"%hd%hd%hd%hd%hd%hd",&prime,&exp,&nng,&no,&class,&m);
--@@ -89,6 +89,7 @@ int
-- outgp (void)
-- /* The PCP is output, together with tails */
-- { short i,k,l,**pcp,*b,*e,*c;
--+  FILE *op;
--   op=fopen(outf,"w");
--   fprintf(op,"%4d%4d%4d%4d%4d%4d\n",prime,exp,nng,exp,class,1);
--   for (i=1;i<=exp;i++) fprintf(op,"%4d",wt[i]); fprintf(op,"\n");
--@@ -379,7 +380,7 @@ restart:
--     nng--; mnng--; enexpnt--;
--     if (nng==0)
--     { if (gap)
---      { op=fopen(outfm,"w"); fprintf(op,"COHOMOLO.Multiplier:=[];\n");
--+      { FILE *op=fopen(outfm,"w"); fprintf(op,"COHOMOLO.Multiplier:=[];\n");
--         fclose(op);
--         printf("All new generators eliminated. Multiplier is trivial.\n");
--       }
--diff --git a/pkg/cohomolo-1.6.8/standalone/progs.d/nqmp.c b/pkg/cohomolo-1.6.8/standalone/progs.d/nqmp.c
--index 01cf914..0144883 100644
----- a/pkg/cohomolo-1.6.8/standalone/progs.d/nqmp.c
--+++ b/pkg/cohomolo-1.6.8/standalone/progs.d/nqmp.c
--@@ -9,7 +9,6 @@ extern short  intexp,mng,mexp,wksp,
--        spugen[],*intg[],*imintg[],*tlintg[];
-- extern int ptrsp,rsp;
-- short  *wf,*wc; char norm;
---FILE *ip,*op;
-- 
-- /* The data structures for this program and for nqrun are similar.
--    d1 and d2 contain definitions of generators. (Def. comes from commutator
--@@ -35,6 +34,7 @@ nqmprog (void)
-- { short i,j,k,l,m,d,*gi,*gj,*ti,*tj,cl,def,*ps,*pf,**dp,*nrpb,*p,*orpf,*orpb,
--         nb,np,k1,*rno,*covrel,**pgen,tdef,sgn;
--   char nt;
--+  FILE *ip,*op;
--   if (ingp() == -1) {fprintf(stderr,"Input error.\n"); return(-1); }
--   eexpnt=expnt+exp; enexpnt=nexpnt+nng;
-- 
-diff --git a/build/pkgs/gap_packages/patches/guava_leon_includes.patch b/build/pkgs/gap_packages/patches/guava_leon_includes.patch
-deleted file mode 100644
-index cdcd19cc3e8..00000000000
---- a/build/pkgs/gap_packages/patches/guava_leon_includes.patch
-+++ /dev/null
-@@ -1,13 +0,0 @@
----- a/pkg/guava-3.15/src/leon/src/generate.c	Sat Feb 29 09:02:10 2020
----- b/pkg/guava-3.15/src/leon/src/generate.c	Thu Sep 24 13:58:36 2020
--***************
--*** 115,120 ****
----- 115,122 ----
--  #include "groupio.h"
--  #include "enum.h"
--  #include "storage.h"
--+ #include "chbase.h"
--+ #include "inform.h"
--  
--  #ifdef ALT_TIME_HEADER
--  #include "cputime.h"
-diff --git a/build/pkgs/gap_packages/spkg-install.in b/build/pkgs/gap_packages/spkg-install.in
-index 168e6b11532..6dff182a48f 100644
---- a/build/pkgs/gap_packages/spkg-install.in
-+++ b/build/pkgs/gap_packages/spkg-install.in
-@@ -1,4 +1,4 @@
--GAP_ROOT="$SAGE_LOCAL/share/gap"
-+GAP_ROOT="$SAGE_LOCAL/lib/gap"
- PKG_DIR="$GAP_ROOT/pkg"
- 
- PKG_SRC_DIR="$(pwd)/src/pkg"
-@@ -11,33 +11,31 @@ cd "$PKG_SRC_DIR"
- #    (GAP 4.8.6 still had it, but this is gone in 4.10)
- 
- sdh_install \
--    aclib-* \
--    AutoDoc-* \
--    corelg-* \
--    crime-* \
-+    aclib \
-+    corelg \
-+    crime \
-     cryst \
-     crystcat \
--    design-* \
-+    design \
-     gbnp \
--    genss-* \
--    hap-* \
--    hapcryst-* \
--    hecke-* \
--    images-* \
--    liealgdb-* \
--    liepring-* \
--    liering-* \
--    loops-* \
--    MapClass-* \
--    polymaking-* \
--    qpa-* \
--    quagroup-* \
--    radiroot-* \
--    repsn-* \
--    sla-* \
--    sonata-* \
--    Toric-* \
--    utils-* \
-+    genss \
-+    hap \
-+    hapcryst \
-+    hecke \
-+    images \
-+    liealgdb \
-+    liepring \
-+    liering \
-+    loops \
-+    mapclass \
-+    polymaking \
-+    qpa \
-+    quagroup \
-+    repsn \
-+    singular \
-+    sla \
-+    sonata \
-+    toric \
-     "$PKG_DIR"
- 
- install_compiled_pkg()
-@@ -45,27 +43,23 @@ install_compiled_pkg()
-     local pkg="$1"
-     # Install the bin/ dir (where compiled modules should end up)
-     # under <prefix>/lib/gap; we then symlink to it later
--    sdh_install bin "$SAGE_LOCAL/lib/gap/pkg/$pkg"
-+    sdh_install * "$SAGE_LOCAL/lib/gap/pkg/$pkg"
- 
-+    # TODO:
-     # Clean up any build artificts before installing the rest of the package
-     # Also remove configure/Makefiles
-     # Note: None, if any of the packages really have a proper install target
--    make clean  # Works for some packages but not all
--    rm -rf bin/
--    rm -rf configure configure.* config.* autogen.sh *.m4 Makefile* m4/
-+    #make clean  # Works for some packages but not all
-+    #rm -rf bin/
-+    #rm -rf configure configure.* config.* autogen.sh *.m4 Makefile* m4/
- 
--    # Create the bin/ symlink
--    ln -s "$SAGE_LOCAL/lib/gap/pkg/$pkg/bin" bin
--
--    # Install the rest of the package files
--    sdh_install * "$PKG_DIR/$pkg"
- }
- 
- # Build and install compiled packages:
- #
- # These packages have an old ./configure that take the GAP_ROOT as a positional
- # argument
--for pkg in cohomolo-* crypting-* grape-* guava-* orb-* datastructures-*
-+for pkg in cohomolo crypting grape guava orb datastructures
- do
-     echo "Building GAP package $pkg"
-     CFLAGS="$CFLAGS -Wno-implicit-function-declaration"
-@@ -91,7 +85,7 @@ pararr=( " " " " "--with-external-planarity" "--with-external-libsemigroups" )
- ##############################################################################
- 
- parind=0
--for pkg in nq-* io-* digraphs-* semigroups-*
-+for pkg in nq io digraphs semigroups
- do
-     echo "Building GAP package $pkg"
-     cd "$PKG_SRC_DIR/$pkg"
-diff --git a/build/pkgs/libsemigroups/checksums.ini b/build/pkgs/libsemigroups/checksums.ini
-index 62c4268515f..4e13a36cb35 100644
---- a/build/pkgs/libsemigroups/checksums.ini
-+++ b/build/pkgs/libsemigroups/checksums.ini
-@@ -1,5 +1,5 @@
- tarball=libsemigroups-VERSION.tar.gz
--sha1=2b16c095cc5ffd3f77a71dfbf48cce188e054c03
--md5=7082cadcf7a195ccb93175cd72b6db95
--cksum=1501022358
-+sha1=86375824b47ce4b0e23570122e873f67136d0c0a
-+md5=ff79ad5fbc8bfeb64d48faaf24106b98
-+cksum=2845045455
- upstream_url=https://github.com/libsemigroups/libsemigroups/releases/download/vVERSION/libsemigroups-VERSION.tar.gz
-diff --git a/build/pkgs/libsemigroups/package-version.txt b/build/pkgs/libsemigroups/package-version.txt
-index 9084fa2f716..f90b1afc082 100644
---- a/build/pkgs/libsemigroups/package-version.txt
-+++ b/build/pkgs/libsemigroups/package-version.txt
-@@ -1 +1 @@
--1.1.0
-+2.3.2
-diff --git a/build/pkgs/libsemigroups/spkg-install.in b/build/pkgs/libsemigroups/spkg-install.in
-index 2aaf0e99043..128b54d2f99 100644
---- a/build/pkgs/libsemigroups/spkg-install.in
-+++ b/build/pkgs/libsemigroups/spkg-install.in
-@@ -1,4 +1,4 @@
- cd src
--sdh_configure
-+sdh_configure --disable-eigen
- sdh_make
- sdh_make_install
-diff --git a/build/pkgs/singular/spkg-configure.m4 b/build/pkgs/singular/spkg-configure.m4
-index d4d145defe3..6a85631f624 100644
---- a/build/pkgs/singular/spkg-configure.m4
-+++ b/build/pkgs/singular/spkg-configure.m4
-@@ -9,52 +9,7 @@ SAGE_SPKG_CONFIGURE([singular], [
-        AC_MSG_CHECKING([that Singular's help is working])
-        AS_IF([test x`printf "system(\"--browser\", \"builtin\"); \n help;" | Singular 2>&1 | grep "error occurred"` = x], [
-         AC_MSG_RESULT(yes)
--        dnl We have Singular. Now determine the shared library path on
--        dnl platforms on which sage.libs.singular needs to reload the library with RTLD_GLOBAL.
--        AS_CASE([$host_os],
--          [cygwin*], [dnl Nothing to do
--                     ],
--                     [dnl Use pkg-config to get singular's libdir while we're at it. As a
--                      dnl moral compromise for using pkg-config, this ultimately allows us
--                      dnl to pass an absolute path to dlopen(), which is the only approach
--                      dnl that POSIX guarantees will work.
--                      PKG_CHECK_VAR([SINGULAR_LIB_DIR], [Singular], [libdir])
--                      dnl The acl_shlibext variable is set in the top-level configure.ac.
--                      AC_LANG_PUSH(C)
--                      ORIG_LIBS="${LIBS}"
--                      LIBS="${LIBS} -ldl"
--                      AC_MSG_CHECKING([if we can dlopen($LIBSINGULAR_PATH)])
--                      LIBSINGULAR_PATH="${SINGULAR_LIB_DIR}/libSingular.${acl_shlibext}"
--
--                      dnl if we can dlopen() it, substitute the name for sage_conf;
--                      dnl otherwise, fall back to using the SPKG.
--                      AC_RUN_IFELSE(
--                        [AC_LANG_PROGRAM(
--                          [[#include <dlfcn.h>]],
--                          [[void* h = dlopen("${LIBSINGULAR_PATH}", RTLD_LAZY | RTLD_GLOBAL);
--                            if (h == 0) { return 1; } else { return dlclose(h); }]]
--                        )], [
--                          AC_MSG_RESULT(yes)
--                        ], [
--                          dnl try Debian-specific name
--                          LIBSINGULAR_PATH="${SINGULAR_LIB_DIR}/libsingular-Singular.${acl_shlibext}"
--                          AC_RUN_IFELSE(
--                           [AC_LANG_PROGRAM(
--                             [[#include <dlfcn.h>]],
--                             [[void* h = dlopen("${LIBSINGULAR_PATH}", RTLD_LAZY | RTLD_GLOBAL);
--                               if (h == 0) { return 1; } else { return dlclose(h); }]]
--                           )], [
--                             AC_MSG_RESULT(yes)
--                           ], [
--                            AC_MSG_RESULT(no)
--                            sage_spkg_install_singular=yes
--                          ], [AC_MSG_RESULT(yes)])
--                        ], [AC_MSG_RESULT(yes)])
--
--                      AC_LANG_POP()
--                      LIBS="${ORIG_LIBS}"
--                     ]
--       )], [
-+       ], [
-        AC_MSG_RESULT(no)
-        sage_spkg_install_singular=yes
-        ]
-@@ -64,20 +19,4 @@ SAGE_SPKG_CONFIGURE([singular], [
-       ])
-     ])
-   ])
--],[],[],[
--  dnl Post-check phase
--  dnl We make the sage_conf substitutions here, because the "default"
--  dnl substitution needs to be made even if we skipped the system-Singular
--  dnl checks themselves.
--  AS_IF([test "x${sage_spkg_install_singular}" = "xyes"], [
--    AS_CASE([$host_os],
--      [cygwin*], [dnl Nothing to do
--                 ],
--                 [dnl Set shared library path, needed for reloading the library with RTLD_GLOBAL
--                  LIBSINGULAR_PATH="\$SAGE_LOCAL/lib/libSingular.${acl_shlibext}"
--                 ]
--    )
--  ])
--
--  AC_SUBST(LIBSINGULAR_PATH, "${LIBSINGULAR_PATH}")
- ])
-diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in
-index 6cd28f558a8..d66bdb3d264 100644
---- a/pkgs/sage-conf/_sage_conf/_conf.py.in
-+++ b/pkgs/sage-conf/_sage_conf/_conf.py.in
-@@ -55,9 +55,6 @@ THREEJS_DIR = SAGE_LOCAL + "/share/threejs-sage"
- OPENMP_CFLAGS = "@OPENMP_CFLAGS@"
- OPENMP_CXXFLAGS = "@OPENMP_CXXFLAGS@"
- 
--# The full absolute path to the main Singular library.
--LIBSINGULAR_PATH = "@LIBSINGULAR_PATH@".replace('$SAGE_LOCAL', SAGE_LOCAL)
--
- # Installation location of wheels. This is determined at configuration time
- # and does not depend on the installation location of sage-conf.
- SAGE_SPKG_WHEELS = "@SAGE_VENV@".replace('${SAGE_LOCAL}', SAGE_LOCAL) + "/var/lib/sage/wheels"
-diff --git a/src/doc/en/thematic_tutorials/lie/weyl_groups.rst b/src/doc/en/thematic_tutorials/lie/weyl_groups.rst
-index c917338e444..182e74aad20 100644
---- a/src/doc/en/thematic_tutorials/lie/weyl_groups.rst
-+++ b/src/doc/en/thematic_tutorials/lie/weyl_groups.rst
-@@ -139,12 +139,12 @@ string, which you can print::
-     X.1      1  1  1  1  1  1  1  1  1  1  1  1  1
-     X.2      1 -1  1  1 -1  1  1 -1 -1 -1  1  1  1
-     X.3      2  .  2 -1  .  2  2  .  .  . -1  2  2
--    X.4      3 -1 -1  .  1 -1  3 -1  1 -1  . -1  3
--    X.5      3 -1 -1  .  1  3 -1 -1 -1  1  . -1  3
--    X.6      3  1 -1  . -1 -1  3  1 -1  1  . -1  3
--    X.7      3  1 -1  . -1  3 -1  1  1 -1  . -1  3
--    X.8      3 -1  3  . -1 -1 -1 -1  1  1  . -1  3
--    X.9      3  1  3  .  1 -1 -1  1 -1 -1  . -1  3
-+    X.4      3 -1 -1  .  1  3 -1 -1 -1  1  . -1  3
-+    X.5      3  1 -1  . -1  3 -1  1  1 -1  . -1  3
-+    X.6      3 -1  3  . -1 -1 -1 -1  1  1  . -1  3
-+    X.7      3 -1 -1  .  1 -1  3 -1  1 -1  . -1  3
-+    X.8      3  1  3  .  1 -1 -1  1 -1 -1  . -1  3
-+    X.9      3  1 -1  . -1 -1  3  1 -1  1  . -1  3
-     X.10     4 -2  . -1  .  .  .  2  .  .  1  . -4
-     X.11     4  2  . -1  .  .  . -2  .  .  1  . -4
-     X.12     6  . -2  .  . -2 -2  .  .  .  .  2  6
-diff --git a/src/sage/coding/codecan/autgroup_can_label.pyx b/src/sage/coding/codecan/autgroup_can_label.pyx
-index de5db985e0b..c83b9264e44 100644
---- a/src/sage/coding/codecan/autgroup_can_label.pyx
-+++ b/src/sage/coding/codecan/autgroup_can_label.pyx
-@@ -76,7 +76,7 @@ columns do share the same coloring::
-     ((1,),
-      (2,),
-      (3, 5, 4),
--     (6, 19, 16, 9, 21, 10, 8, 15, 14, 11, 20, 13, 12, 7, 17, 18))
-+     (6, 19, 16, 21, 9, 10, 15, 8, 20, 11, 14, 13, 7, 12, 18, 17))
- 
- We can also restrict the group action to linear isometries::
- 
-diff --git a/src/sage/coding/linear_code.py b/src/sage/coding/linear_code.py
-index a3ac3ca1547..bfb9f8696e8 100644
---- a/src/sage/coding/linear_code.py
-+++ b/src/sage/coding/linear_code.py
-@@ -465,27 +465,27 @@ def automorphism_group_gens(self, equivalence="semilinear"):
-             0
-             sage: C = codes.HammingCode(GF(4, 'z'), 3)
-             sage: C.automorphism_group_gens()
--            ([((1, 1, 1, 1, 1, z + 1, z, z + 1, z, z, z, 1, 1, z + 1, z + 1, z, z + 1, z, z + 1, z + 1, z + 1); (1,14,6,7,4,10,11,19)(2,8,16,13,3,17,21,15)(9,12,18,20), Ring endomorphism of Finite Field in z of size 2^2
-+            ([((1, 1, 1, z, z + 1, 1, 1, 1, 1, z + 1, z, z, z + 1, z + 1, z + 1, 1, z + 1, z, z, 1, z); (1,13,14,20)(2,21,8,18,7,16,19,15)(3,10,5,12,17,9,6,4), Ring endomorphism of Finite Field in z of size 2^2
-+                Defn: z |--> z + 1),
-+              ((z, 1, z, z, z, z + 1, z, z, z, z, z, z, z + 1, z, z, z, z, z + 1, z, z, z); (1,11,5,12,3,19)(2,8)(6,18,13)(7,17,15)(9,10,14,16,20,21), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z + 1),
--              ((z + 1, 1, 1, z, z + 1, z, z, z + 1, z + 1, z + 1, 1, z + 1, z, z, 1, z + 1, 1, z, z + 1, z + 1, z); (1,18,6,19,2,9,17,10,13,14,21,11,4,5,12)(3,20,7,16,8), Ring endomorphism of Finite Field in z of size 2^2
--                Defn: z |--> z),
-               ((z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z); (), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z)],
-              362880)
-             sage: C.automorphism_group_gens(equivalence="linear")
--            ([((z + 1, 1, z + 1, z + 1, z + 1, z, 1, z, 1, 1, 1, 1, z + 1, z + 1, z + 1, z, z, 1, z, z, z); (1,15,2,8,16,18,3)(4,9,12,13,20,10,11)(5,21,14,6,7,19,17), Ring endomorphism of Finite Field in z of size 2^2
-+            ([((z, 1, z + 1, z + 1, 1, z + 1, z, 1, z + 1, z + 1, 1, z, 1, z + 1, z, 1, z, 1, z + 1, 1, 1); (1,12,11,10,6,8,9,20,13,21,5,14,3,16,17,19,7,4,2,15,18), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z),
--              ((z + 1, z + 1, z + 1, z + 1, z + 1, 1, z, 1, z, z, z, 1, z, 1, 1, 1, z + 1, z + 1, z + 1, 1, z); (1,15,21,8,9)(2,18,5,3,11,16,7,10,19,13,12,4,17,6,20), Ring endomorphism of Finite Field in z of size 2^2
-+              ((z + 1, z + 1, z + 1, z, 1, 1, z, z, 1, z + 1, z, 1, 1, z, 1, z + 1, z, z + 1, z + 1, 1, z); (1,3,18,2,17,6,19)(4,15,13,20,7,14,16)(5,11,8,21,12,9,10), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z),
-               ((z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1, z + 1); (), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z)],
-              181440)
-             sage: C.automorphism_group_gens(equivalence="permutational")
--            ([((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (1,19)(3,17)(4,21)(5,20)(7,14)(9,12)(10,16)(11,15), Ring endomorphism of Finite Field in z of size 2^2
-+            ([((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (1,11)(3,10)(4,9)(5,7)(12,21)(14,20)(15,19)(16,17), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z),
--              ((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (1,11)(3,10)(4,9)(5,7)(12,21)(14,20)(15,19)(16,17), Ring endomorphism of Finite Field in z of size 2^2
-+              ((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (2,18)(3,19)(4,10)(5,16)(8,13)(9,14)(11,21)(15,20), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z),
--              ((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (1,17)(2,8)(3,14)(4,10)(7,12)(9,19)(13,18)(15,20), Ring endomorphism of Finite Field in z of size 2^2
-+              ((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (1,19)(3,17)(4,21)(5,20)(7,14)(9,12)(10,16)(11,15), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z),
-               ((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (2,13)(3,14)(4,20)(5,11)(8,18)(9,19)(10,15)(16,21), Ring endomorphism of Finite Field in z of size 2^2
-                 Defn: z |--> z)],
-@@ -691,10 +691,10 @@ def _canonize(self, equivalence):
-             sage: C_iso == aut_group_can_label.get_canonical_form()
-             True
-             sage: aut_group_can_label.get_autom_gens()
--            [((1, 1, 1, 1, 1, z + 1, z, z + 1, z, z, z, 1, 1, z + 1, z + 1, z, z + 1, z, z + 1, z + 1, z + 1); (1,14,6,7,4,10,11,19)(2,8,16,13,3,17,21,15)(9,12,18,20), Ring endomorphism of Finite Field in z of size 2^2
-+            [((1, 1, 1, z, z + 1, 1, 1, 1, 1, z + 1, z, z, z + 1, z + 1, z + 1, 1, z + 1, z, z, 1, z); (1,13,14,20)(2,21,8,18,7,16,19,15)(3,10,5,12,17,9,6,4), Ring endomorphism of Finite Field in z of size 2^2
-+               Defn: z |--> z + 1),
-+             ((z, 1, z, z, z, z + 1, z, z, z, z, z, z, z + 1, z, z, z, z, z + 1, z, z, z); (1,11,5,12,3,19)(2,8)(6,18,13)(7,17,15)(9,10,14,16,20,21), Ring endomorphism of Finite Field in z of size 2^2
-                Defn: z |--> z + 1),
--             ((z + 1, 1, 1, z, z + 1, z, z, z + 1, z + 1, z + 1, 1, z + 1, z, z, 1, z + 1, 1, z, z + 1, z + 1, z); (1,18,6,19,2,9,17,10,13,14,21,11,4,5,12)(3,20,7,16,8), Ring endomorphism of Finite Field in z of size 2^2
--               Defn: z |--> z),
-              ((z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z); (), Ring endomorphism of Finite Field in z of size 2^2
-                Defn: z |--> z)]
-         """
-diff --git a/src/sage/combinat/posets/posets.py b/src/sage/combinat/posets/posets.py
-index 2836d59d960..8c882d5ac3b 100644
---- a/src/sage/combinat/posets/posets.py
-+++ b/src/sage/combinat/posets/posets.py
-@@ -8813,7 +8813,7 @@ def _libgap_(self):
-             sage: libgap(P)  # optional - gap_packages
-             <A poset on 5 points>
-             sage: A = libgap(GF(2)).PosetAlgebra(P); A  # optional - gap_packages
--            <GF(2)[<quiver with 5 vertices and 5 arrows>]/<two-sided ideal in <GF(2)[<quiver with 5 vertices and 5 arrows>]>, (1 generators)>>
-+            <GF(2)[<quiver with 5 vertices and 5 arrows>]/<two-sided ideal in <GF(2)[<quiver with 5 vertices and 5 arrows>]>, (1 generator)>>
-             sage: A.Dimension()  # optional - gap_packages
-             13
-         """
-diff --git a/src/sage/combinat/root_system/hecke_algebra_representation.py b/src/sage/combinat/root_system/hecke_algebra_representation.py
-index 6b756bafc30..8ac99319bec 100644
---- a/src/sage/combinat/root_system/hecke_algebra_representation.py
-+++ b/src/sage/combinat/root_system/hecke_algebra_representation.py
-@@ -357,7 +357,7 @@ def Tw(self, word, signs=None, scalar=None):
-             sage: q1, q2 = K.gens()
-             sage: KW = W.algebra(K)
-             sage: x = KW.an_element(); x
--            123 + 3*32 + 2*3 + e
-+            123 + 3*2312 + 2*31 + e
- 
-             sage: T = KW.demazure_lusztig_operators(q1,q2)
-             sage: T12 = T.Tw( (1,2) )
-diff --git a/src/sage/combinat/symmetric_group_algebra.py b/src/sage/combinat/symmetric_group_algebra.py
-index b8a0bebab44..9bccba124c8 100644
---- a/src/sage/combinat/symmetric_group_algebra.py
-+++ b/src/sage/combinat/symmetric_group_algebra.py
-@@ -101,7 +101,7 @@ def SymmetricGroupAlgebra(R, W, category=None):
-         sage: SGA.group()
-         Weyl Group of type ['A', 3] (as a matrix group acting on the ambient space)
-         sage: SGA.an_element()
--        s1*s2*s3 + 3*s3*s2 + 2*s3 + 1
-+        s1*s2*s3 + 3*s2*s3*s1*s2 + 2*s3*s1 + 1
- 
-     The preferred way to construct the symmetric group algebra is to
-     go through the usual ``algebra`` method::
-diff --git a/src/sage/env.py b/src/sage/env.py
-index 911f34b1bc6..5f7aca8599c 100644
---- a/src/sage/env.py
-+++ b/src/sage/env.py
-@@ -197,7 +197,8 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
- GRAPHS_DATA_DIR = var("GRAPHS_DATA_DIR", join(SAGE_SHARE, "graphs"))
- ELLCURVE_DATA_DIR = var("ELLCURVE_DATA_DIR", join(SAGE_SHARE, "ellcurves"))
- POLYTOPE_DATA_DIR = var("POLYTOPE_DATA_DIR", join(SAGE_SHARE, "reflexive_polytopes"))
--GAP_ROOT_DIR = var("GAP_ROOT_DIR", join(SAGE_SHARE, "gap"))
-+GAP_LIB_DIR = var("GAP_LIB_DIR", join(SAGE_LOCAL, "lib", "gap"))
-+GAP_SHARE_DIR = var("GAP_SHARE_DIR", join(SAGE_SHARE, "gap"))
- THEBE_DIR = var("THEBE_DIR", join(SAGE_SHARE, "thebe"))
- COMBINATORIAL_DESIGN_DATA_DIR = var("COMBINATORIAL_DESIGN_DATA_DIR", join(SAGE_SHARE, "combinatorial_designs"))
- CREMONA_MINI_DATA_DIR = var("CREMONA_MINI_DATA_DIR", join(SAGE_SHARE, "cremona"))
-@@ -229,12 +230,6 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
- LIE_INFO_DIR = var("LIE_INFO_DIR", join(SAGE_LOCAL, "lib", "LiE"))
- SINGULAR_BIN = var("SINGULAR_BIN") or "Singular"
- 
--# The path to libSingular, to be passed to dlopen(). This will
--# typically be set to an absolute path in sage_conf, but the relative
--# fallback path here works on systems where dlopen() searches the
--# system's library locations.
--LIBSINGULAR_PATH = var("LIBSINGULAR_PATH", "libSingular.so")
--
- # OpenMP
- OPENMP_CFLAGS = var("OPENMP_CFLAGS", "")
- OPENMP_CXXFLAGS = var("OPENMP_CXXFLAGS", "")
-@@ -255,81 +250,6 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
- SAGE_GAP_COMMAND = var('SAGE_GAP_COMMAND', _gap_cmd)
- 
- 
--def _get_shared_lib_path(*libnames: str) -> Optional[str]:
--    """
--    Return the full path to a shared library file installed in
--    ``$SAGE_LOCAL/lib`` or the directories associated with the
--    Python sysconfig.
--
--    This can also be passed more than one library name (e.g. for cases where
--    some library may have multiple names depending on the platform) in which
--    case the first one found is returned.
--
--    This supports most *NIX variants (in which ``lib<libname>.so`` is found
--    under ``$SAGE_LOCAL/lib``), macOS (same, but with the ``.dylib``
--    extension), and Cygwin (under ``$SAGE_LOCAL/bin/cyg<libname>.dll``,
--    or ``$SAGE_LOCAL/bin/cyg<libname>-*.dll`` for versioned DLLs).
--
--    For distributions like Debian that use a multiarch layout, we also try the
--    multiarch lib paths (i.e. ``/usr/lib/<arch>/``).
--
--    This returns ``None`` if no matching library file could be found.
--
--    EXAMPLES::
--
--        sage: from sage.env import _get_shared_lib_path
--        sage: "gap" in _get_shared_lib_path("gap")
--        True
--        sage: _get_shared_lib_path("an_absurd_lib") is None
--        True
--
--    """
--
--    for libname in libnames:
--        search_directories: List[Path] = []
--        patterns: List[str] = []
--        if sys.platform == 'cygwin':
--            # Later down we take the first matching DLL found, so search
--            # SAGE_LOCAL first so that it takes precedence
--            if SAGE_LOCAL:
--                search_directories.append(Path(SAGE_LOCAL) / 'bin')
--            search_directories.append(Path(sysconfig.get_config_var('BINDIR')))
--            # Note: The following is not very robust, since if there are multible
--            # versions for the same library this just selects one more or less
--            # at arbitrary. However, practically speaking, on Cygwin, there
--            # will only ever be one version
--            patterns = [f'cyg{libname}.dll', f'cyg{libname}-*.dll']
--        else:
--            if sys.platform == 'darwin':
--                ext = 'dylib'
--            else:
--                ext = 'so'
--
--            if SAGE_LOCAL:
--                search_directories.append(Path(SAGE_LOCAL) / 'lib')
--            libdir = sysconfig.get_config_var('LIBDIR')
--            if libdir is not None:
--                libdir = Path(libdir)
--                search_directories.append(libdir)
--
--                multiarchlib = sysconfig.get_config_var('MULTIARCH')
--                if multiarchlib is not None:
--                    search_directories.append(libdir / multiarchlib),
--
--            patterns = [f'lib{libname}.{ext}']
--
--        for directory in search_directories:
--            for pattern in patterns:
--                path = next(directory.glob(pattern), None)
--                if path is not None:
--                    return str(path.resolve())
--
--    # Just return None if no files were found
--    return None
--
--# locate libgap shared object
--GAP_SO = var("GAP_SO", _get_shared_lib_path("gap", ""))
--
- # post process
- if DOT_SAGE is not None and ' ' in DOT_SAGE:
-     if UNAME[:6] == 'CYGWIN':
-diff --git a/src/sage/groups/abelian_gps/abelian_group_gap.py b/src/sage/groups/abelian_gps/abelian_group_gap.py
-index a4b047113c5..86090b43535 100644
---- a/src/sage/groups/abelian_gps/abelian_group_gap.py
-+++ b/src/sage/groups/abelian_gps/abelian_group_gap.py
-@@ -338,7 +338,7 @@ def _element_constructor_(self, x, check=True):
-         if isinstance(x, AbelianGroupElement_gap):
-             try:
-                 if x in self._cover:
--                    x = self.gap().NaturalHomomorphism().Image(x.gap())
-+                    x = self._cover.gap().NaturalHomomorphismByNormalSubgroup(self._relations).Image(x.gap())
-                 else:
-                     x = x.gap()
-             except AttributeError:
-@@ -1043,7 +1043,7 @@ def natural_homomorphism(self):
-             From: Abelian group with gap, generator orders (4,)
-             To:   Quotient abelian group with generator orders (2,)
-         """
--        phi = self.gap().NaturalHomomorphism()
-+        phi = self._cover.gap().NaturalHomomorphismByNormalSubgroup(self._relations)
-         Hom = self._cover.Hom(self)
-         return Hom(phi)
- 
-diff --git a/src/sage/groups/finitely_presented.py b/src/sage/groups/finitely_presented.py
-index 8d6e443683c..1beb01af87f 100644
---- a/src/sage/groups/finitely_presented.py
-+++ b/src/sage/groups/finitely_presented.py
-@@ -596,9 +596,9 @@ def gap(self):
-             sage: k = G.rewriting_system()
-             sage: k.gap()
-             Knuth Bendix Rewriting System for Monoid( [ a, A, b, B ] ) with rules
--            [ [ a^2, <identity ...> ], [ a*A, <identity ...> ],
--              [ A*a, <identity ...> ], [ b^2, <identity ...> ],
--              [ b*B, <identity ...> ], [ B*b, <identity ...> ] ]
-+            [ [ a*A, <identity ...> ], [ A*a, <identity ...> ],
-+              [ b*B, <identity ...> ], [ B*b, <identity ...> ],
-+              [ a^2, <identity ...> ], [ b^2, <identity ...> ] ]
-         """
-         return self._gap
- 
-diff --git a/src/sage/groups/fqf_orthogonal.py b/src/sage/groups/fqf_orthogonal.py
-index 7fc4dbe7548..e5eccd45942 100644
---- a/src/sage/groups/fqf_orthogonal.py
-+++ b/src/sage/groups/fqf_orthogonal.py
-@@ -143,7 +143,7 @@ class FqfOrthogonalGroup(AbelianGroupAutomorphismGroup_subgroup):
-         [2/3   0   0]
-         [  0 2/3   0]
-         [  0   0 4/3]
--        generated by 2 elements
-+        generated by 3 elements
-         sage: q = matrix.diagonal(QQ, [3/2, 1/4, 1/4])
-         sage: T = TorsionQuadraticForm(q)
-         sage: T.orthogonal_group().order()
-diff --git a/src/sage/groups/libgap_wrapper.pyx b/src/sage/groups/libgap_wrapper.pyx
-index d25121aa792..dc81b71635b 100644
---- a/src/sage/groups/libgap_wrapper.pyx
-+++ b/src/sage/groups/libgap_wrapper.pyx
-@@ -25,7 +25,7 @@ Note how we call the constructor of both superclasses to initialize
- its output via LibGAP::
- 
-     sage: FooGroup()
--    <pc group of size 3 with 1 generators>
-+    <pc group of size 3 with 1 generator>
-     sage: type(FooGroup().gap())
-     <class 'sage.libs.gap.element.GapElement'>
- 
-@@ -106,7 +106,7 @@ class ParentLibGAP(SageObject):
-         ....:         ParentLibGAP.__init__(self, lg)
-         ....:         Group.__init__(self)
-         sage: FooGroup()
--        <pc group of size 3 with 1 generators>
-+        <pc group of size 3 with 1 generator>
-     """
- 
-     def __init__(self, libgap_parent, ambient=None):
-@@ -461,7 +461,7 @@ cdef class ElementLibGAP(MultiplicativeGroupElement):
-         ....:         ParentLibGAP.__init__(self, lg)
-         ....:         Group.__init__(self)
-         sage: FooGroup()
--        <pc group of size 3 with 1 generators>
-+        <pc group of size 3 with 1 generator>
-         sage: FooGroup().gens()
-         (f1,)
-     """
-diff --git a/src/sage/groups/matrix_gps/finitely_generated.py b/src/sage/groups/matrix_gps/finitely_generated.py
-index a6d3dc02513..63956ad5f10 100644
---- a/src/sage/groups/matrix_gps/finitely_generated.py
-+++ b/src/sage/groups/matrix_gps/finitely_generated.py
-@@ -563,9 +563,6 @@ def as_permutation_group(self, algorithm=None, seed=None):
-             21499084800
-             sage: P = G.as_permutation_group()
-             sage: Psmaller = G.as_permutation_group(algorithm="smaller", seed=6)
--            sage: P == Psmaller  # see the note below
--            True
--            sage: Psmaller = G.as_permutation_group(algorithm="smaller")
-             sage: P == Psmaller
-             False
-             sage: P.cardinality()
-diff --git a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
-index f2ccca042ac..47d6862333c 100644
---- a/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
-+++ b/src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx
-@@ -427,7 +427,7 @@ cdef class LabelledBranching:
-             sage: from sage.groups.perm_gps.partn_ref2.refinement_generic import LabelledBranching
-             sage: L = LabelledBranching(3)
-             sage: L.small_generating_set()
--            []
-+            [()]
-             sage: L.add_gen(libgap.eval('(1,2,3)'))
-             sage: L.small_generating_set()
-             [(1,2,3)]
-diff --git a/src/sage/groups/perm_gps/permgroup.py b/src/sage/groups/perm_gps/permgroup.py
-index ebdf7c4c6eb..fb14008c8e0 100644
---- a/src/sage/groups/perm_gps/permgroup.py
-+++ b/src/sage/groups/perm_gps/permgroup.py
-@@ -926,7 +926,7 @@ def _coerce_map_from_(self, G):
-            sage: f = PG._coerce_map_from_(MG)
-            sage: mg = MG.an_element()
-            sage: p = f(mg); p
--           (2,33,32,23,31,55)(3,49,38,44,40,28)(4,17,59,62,58,46)(5,21,47,20,43,8)(6,53,50)(7,37,12,57,14,29)(9,41,56,34,64,10)(11,25,19)(13,61,26,51,22,15)(16,45,36)(18,27,35,48,52,54)(24,63,42)(30,39,60)
-+           (1,2,6,19,35,33)(3,9,26,14,31,23)(4,13,5)(7,22,17)(8,24,12)(10,16,32,27,20,28)(11,30,18)(15,25,36,34,29,21)
-            sage: PG(p._gap_()) == p
-            True
- 
-@@ -972,12 +972,12 @@ def _coerce_map_from_(self, G):
-             sage: P = G.as_permutation_group(algorithm='smaller', seed=5)
-             sage: P1 = G.as_permutation_group()
-             sage: P == P1
--            False
-+            True
-             sage: g1, g2, g3 = G.gens()
-             sage: P(g1*g2)
--            (1,3,7,12)(2,4,8,10)(5,11)(6,9)
-+            (1,4,13,11)(2,5,14,18)(3,15,8,16)(6,7)(9,20,19,12)(10,17)
-             sage: P1(g1*g2)
--            (2,29,25,68)(3,57,13,54)(4,11,72,37)(5,39,60,23)(6,64,75,63)(7,21,50,73)(8,46,38,32)(9,74,35,18)(10,44,49,48)(12,16,34,71)(14,79,27,40)(15,26)(17,62,59,76)(19,78,70,65)(20,22,58,51)(24,33,36,43)(28,81,80,52)(30,53,56,69)(31,61)(41,42,67,55)(45,77)(47,66)
-+            (1,4,13,11)(2,5,14,18)(3,15,8,16)(6,7)(9,20,19,12)(10,17)
- 
-         Another check for :trac:`5583`::
- 
-@@ -1302,7 +1302,7 @@ def gens_small(self):
-             sage: G.gens_small() # random
-             [('b','c'), ('a','c','b')] ## (on 64-bit Linux)
-             [('a','b'), ('a','c','b')] ## (on Solaris)
--            sage: len(G.gens_small()) == 2
-+            sage: len(G.gens_small()) == 2 # random
-             True
-         """
-         gens = self._libgap_().SmallGeneratingSet()
-@@ -4370,17 +4370,23 @@ def is_transitive(self, domain=None):
- 
-         ::
- 
--            sage: G = PermutationGroup([[(1,2,3,4,5)],[(1,2)]]) #S_5 on [1..5]
--            sage: G.is_transitive([1,4,5])
-+            sage: G = PermutationGroup([[(1,2,3,4,5)],[(1,2)],[(6,7)]])
-+            sage: G.is_transitive([1,2,3,4,5])
-             True
--            sage: G.is_transitive([2..6])
-+            sage: G.is_transitive([1..7])
-             False
-             sage: G.is_transitive(G.non_fixed_points())
--            True
-+            False
-             sage: H = PermutationGroup([[(1,2,3)],[(4,5,6)]])
-             sage: H.is_transitive(H.non_fixed_points())
-             False
- 
-+        If `G` does not act on the domain, it always returns ``False``::
-+
-+            sage: G = PermutationGroup([[(1,2,3,4,5)],[(1,2)]]) #S_5 on [1..5]
-+            sage: G.is_transitive([1,4,5])
-+            False
-+
-         Note that this differs from the definition in GAP, where
-         ``IsTransitive`` returns whether the group is transitive on the
-         set of points moved by the group.
-@@ -4436,12 +4442,16 @@ def is_primitive(self, domain=None):
-             sage: G = PermutationGroup([[(1,2,3,4)],[(2,4)]])
-             sage: G.is_primitive([1..4])
-             False
--            sage: G.is_primitive([1,2,3])
--            True
-             sage: G = PermutationGroup([[(3,4,5,6)],[(3,4)]]) #S_4 on [3..6]
-             sage: G.is_primitive(G.non_fixed_points())
-             True
- 
-+        If `G` does not act on the domain, it always returns ``False``::
-+
-+            sage: G = PermutationGroup([[(1,2,3,4)],[(2,4)]])
-+            sage: G.is_primitive([1,2,3])
-+            False
-+
-         """
-         #If the domain is not a subset of self.domain(), then the
-         #action isn't primitive.
-diff --git a/src/sage/interfaces/gap.py b/src/sage/interfaces/gap.py
-index 7ae1792e9de..ecaa9fd2341 100644
---- a/src/sage/interfaces/gap.py
-+++ b/src/sage/interfaces/gap.py
-@@ -1512,6 +1512,8 @@ def gap_reset_workspace(max_workspace_size=None, verbose=False):
-     """
-     # Create new workspace with filename WORKSPACE
-     g = Gap(use_workspace_cache=False, max_workspace_size=None)
-+    g.eval('ColorPrompt(false)')
-+    g.eval('SetUserPreference("UseColorPrompt", false)')
-     g.eval('SetUserPreference("HistoryMaxLines", 30)')
-     from sage.tests.gap_packages import all_installed_packages
-     for pkg in all_installed_packages(gap=g):
-diff --git a/src/sage/interfaces/gap_workspace.py b/src/sage/interfaces/gap_workspace.py
-index 33a87dd5076..03b40be6856 100644
---- a/src/sage/interfaces/gap_workspace.py
-+++ b/src/sage/interfaces/gap_workspace.py
-@@ -16,7 +16,8 @@
- import os
- import time
- import hashlib
--from sage.env import DOT_SAGE, GAP_SO
-+import subprocess
-+from sage.env import DOT_SAGE, HOSTNAME, GAP_LIB_DIR, GAP_SHARE_DIR
- 
- 
- def gap_workspace_file(system="gap", name="workspace", dir=None):
-@@ -59,11 +60,13 @@ def gap_workspace_file(system="gap", name="workspace", dir=None):
-     if dir is None:
-         dir = os.path.join(DOT_SAGE, 'gap')
- 
--    if GAP_SO:
--        h = hashlib.sha1(GAP_SO.encode('utf-8')).hexdigest()
--    else:
--        h = 'unknown'
--    return os.path.join(dir, '%s-%s-%s' % (system, name, h))
-+    data = f'{GAP_LIB_DIR}:{GAP_SHARE_DIR}'
-+    for path in GAP_LIB_DIR, GAP_SHARE_DIR:
-+        sysinfo = os.path.join(path, "sysinfo.gap")
-+        if os.path.exists(sysinfo):
-+            data += subprocess.getoutput(f'. "{sysinfo}" && echo ":$GAP_VERSION:$GAParch"')
-+    h = hashlib.sha1(data.encode('utf-8')).hexdigest()
-+    return os.path.join(dir, f'{system}-{name}-{HOSTNAME}-{h}')
- 
- 
- def prepare_workspace_dir(dir=None):
-diff --git a/src/sage/libs/gap/element.pyx b/src/sage/libs/gap/element.pyx
-index c555ea0333c..e3db3934baf 100644
---- a/src/sage/libs/gap/element.pyx
-+++ b/src/sage/libs/gap/element.pyx
-@@ -130,6 +130,7 @@ cdef char *capture_stdout(Obj func, Obj obj):
-     """
-     cdef Obj s, stream, output_text_string
-     cdef UInt res
-+    cdef TypOutputFile output
-     # The only way to get a string representation of an object that is truly
-     # consistent with how it would be represented at the GAP REPL is to call
-     # ViewObj on it.  Unfortunately, ViewObj *prints* to the output stream,
-@@ -145,12 +146,12 @@ cdef char *capture_stdout(Obj func, Obj obj):
-         output_text_string = GAP_ValueGlobalVariable("OutputTextString")
-         stream = CALL_2ARGS(output_text_string, s, GAP_True)
- 
--        if not OpenOutputStream(stream):
-+        if not OpenOutputStream(&output, stream):
-             raise GAPError("failed to open output capture stream for "
-                            "representing GAP object")
- 
-         CALL_1ARGS(func, obj)
--        CloseOutput()
-+        CloseOutput(&output)
-         return CSTR_STRING(s)
-     finally:
-         GAP_Leave()
-diff --git a/src/sage/libs/gap/gap_includes.pxd b/src/sage/libs/gap/gap_includes.pxd
-index 6d22e32540b..6111d18a5c7 100644
---- a/src/sage/libs/gap/gap_includes.pxd
-+++ b/src/sage/libs/gap/gap_includes.pxd
-@@ -76,8 +76,10 @@ cdef extern from "gap/intobj.h" nogil:
- 
- 
- cdef extern from "gap/io.h" nogil:
--    UInt OpenOutputStream(Obj stream)
--    UInt CloseOutput()
-+    ctypedef struct TypOutputFile:
-+        pass
-+    UInt OpenOutputStream(TypOutputFile* output, Obj stream)
-+    UInt CloseOutput(TypOutputFile* output)
- 
- 
- cdef extern from "gap/libgap-api.h" nogil:
-diff --git a/src/sage/libs/gap/libgap.pyx b/src/sage/libs/gap/libgap.pyx
-index b1a64e57939..6a36613aa8c 100644
---- a/src/sage/libs/gap/libgap.pyx
-+++ b/src/sage/libs/gap/libgap.pyx
-@@ -695,7 +695,7 @@ class Gap(Parent):
-             sage: libgap.List
-             <Gap function "List">
-             sage: libgap.GlobalRandomSource
--            <RandomSource in IsGlobalRandomSource>
-+            <RandomSource in IsGAPRandomSource>
-         """
-         if name in dir(self.__class__):
-             return getattr(self.__class__, name)
-diff --git a/src/sage/libs/gap/saved_workspace.py b/src/sage/libs/gap/saved_workspace.py
-index ad5adec36d0..7636707f557 100644
---- a/src/sage/libs/gap/saved_workspace.py
-+++ b/src/sage/libs/gap/saved_workspace.py
-@@ -8,7 +8,7 @@
- 
- import os
- import glob
--from sage.env import GAP_ROOT_DIR
-+from sage.env import GAP_LIB_DIR
- from sage.interfaces.gap_workspace import gap_workspace_file
- 
- 
-@@ -31,7 +31,7 @@ def timestamp():
-     """
-     libgap_dir = os.path.dirname(__file__)
-     libgap_files = glob.glob(os.path.join(libgap_dir, '*'))
--    gap_packages = glob.glob(os.path.join(GAP_ROOT_DIR, 'pkg', '*'))
-+    gap_packages = glob.glob(os.path.join(GAP_LIB_DIR, 'pkg', '*'))
-     files = libgap_files + gap_packages
-     if len(files) == 0:
-         print('Unable to find LibGAP files.')
-diff --git a/src/sage/libs/gap/util.pyx b/src/sage/libs/gap/util.pyx
-index 344ab88c42a..eaa659d64c7 100644
---- a/src/sage/libs/gap/util.pyx
-+++ b/src/sage/libs/gap/util.pyx
-@@ -13,7 +13,7 @@ Utility functions for GAP
- #*****************************************************************************
- 
- from libc.signal cimport signal, SIGCHLD, SIG_DFL
--from posix.dlfcn cimport dlopen, dlclose, RTLD_NOW, RTLD_GLOBAL
-+from posix.dlfcn cimport dlopen, dlclose, dlerror, RTLD_LAZY, RTLD_GLOBAL
- 
- from cpython.exc cimport PyErr_Fetch, PyErr_Restore
- from cpython.object cimport Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT, Py_GE
-@@ -164,33 +164,6 @@ cdef void gasman_callback() with gil:
- ### Initialization of GAP ##################################################
- ############################################################################
- 
--def gap_root():
--    """
--    Find the location of the GAP root install which is stored in the gap
--    startup script.
--
--    EXAMPLES::
--
--        sage: from sage.libs.gap.util import gap_root
--        sage: gap_root()   # random output
--        '/home/vbraun/opt/sage-5.3.rc0/local/gap/latest'
--    """
--    if os.path.exists(sage.env.GAP_ROOT_DIR):
--        return sage.env.GAP_ROOT_DIR
--
--    # Attempt to figure out the appropriate GAP_ROOT by reading the
--    # local/bin/gap shell script; this is an ugly hack that exists for
--    # historical reasons; the best approach to setting where Sage looks for
--    # the appropriate GAP_ROOT is to set the GAP_ROOT_DIR variable
--    SAGE_LOCAL = sage.env.SAGE_LOCAL
--    with open(os.path.join(SAGE_LOCAL, 'bin', 'gap')) as f:
--        gap_sh = f.read().splitlines()
--    gapdir = next(x for x in gap_sh if x.strip().startswith('GAP_ROOT'))
--    gapdir = gapdir.split('"')[1]
--    gapdir = gapdir.replace('$SAGE_LOCAL', SAGE_LOCAL)
--    return gapdir
--
--
- # To ensure that we call initialize_libgap only once.
- cdef bint _gap_is_initialized = False
- 
-@@ -232,12 +205,12 @@ cdef initialize():
-     # this isn't portable
- 
-     cdef void* handle
--    libgapname = str_to_bytes(sage.env.GAP_SO)
--    handle = dlopen(libgapname, RTLD_NOW | RTLD_GLOBAL)
-+    # reload the current module to force reload of libgap (see #33446)
-+    lib = str_to_bytes(__loader__.path, FS_ENCODING, "surrogateescape")
-+    handle = dlopen(lib, RTLD_GLOBAL|RTLD_LAZY)
-     if handle is NULL:
--        raise RuntimeError(
--                "Could not dlopen() libgap even though it should already "
--                "be loaded!")
-+        err = dlerror()
-+        raise RuntimeError(f"Could not reload gap library with RTLD_GLOBAL ({err})")
-     dlclose(handle)
- 
-     # Define argv variable, which we will pass in to
-@@ -245,7 +218,7 @@ cdef initialize():
-     cdef char* argv[16]
-     argv[0] = "sage"
-     argv[1] = "-l"
--    s = str_to_bytes(gap_root(), FS_ENCODING, "surrogateescape")
-+    s = str_to_bytes(sage.env.GAP_LIB_DIR + ";" + sage.env.GAP_SHARE_DIR, FS_ENCODING, "surrogateescape")
-     argv[2] = s
- 
-     argv[3] = "-m"
-@@ -362,15 +335,9 @@ cdef Obj gap_eval(str gap_string) except? NULL:
-         GAPError: Error, Variable: 'Complex' must have a value
-         Syntax error: ; expected in stream:1
-         Complex Field with 53 bits of precision;;
--         ^^^^^^^^^^^^
-+                ^^^^^
-         Error, Variable: 'with' must have a value
--        Syntax error: ; expected in stream:1
--        Complex Field with 53 bits of precision;;
--         ^^^^^^^^^^^^^^^^^^^^
-         Error, Variable: 'bits' must have a value
--        Syntax error: ; expected in stream:1
--        Complex Field with 53 bits of precision;;
--         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-         Error, Variable: 'precision' must have a value
- 
-     Test that on a subsequent attempt we get the same message (no garbage was
-diff --git a/src/sage/libs/singular/singular.pyx b/src/sage/libs/singular/singular.pyx
-index d8ea7b07f3c..4beb1774df9 100644
---- a/src/sage/libs/singular/singular.pyx
-+++ b/src/sage/libs/singular/singular.pyx
-@@ -1705,14 +1705,7 @@ cdef object si2sa_intvec(intvec *v):
- cdef extern from *: # hack to get at cython macro
-     int unlikely(int)
- 
--cdef extern from "dlfcn.h":
--    void *dlopen(char *, long)
--    char *dlerror()
--    void dlclose(void *handle)
--
--cdef extern from "dlfcn.h":
--    cdef long RTLD_LAZY
--    cdef long RTLD_GLOBAL
-+from posix.dlfcn cimport dlopen, dlclose, dlerror, RTLD_LAZY, RTLD_GLOBAL
- 
- cdef int overflow_check(unsigned long e, ring *_ring) except -1:
-     """
-@@ -1762,8 +1755,6 @@ cdef init_libsingular():
- 
-     cdef void *handle = NULL
- 
--    from sage.env import LIBSINGULAR_PATH
--    lib = str_to_bytes(LIBSINGULAR_PATH, FS_ENCODING, "surrogateescape")
- 
-     # This is a workaround for https://github.com/Singular/Singular/issues/1113
-     # and can be removed once that fix makes it into release of Singular that
-@@ -1780,10 +1771,12 @@ cdef init_libsingular():
- 
-     import platform
-     if not platform.system().startswith("CYGWIN"):
-+        # reload the current module to force reload of libSingular (see #33446)
-+        lib = str_to_bytes(__loader__.path, FS_ENCODING, "surrogateescape")
-         handle = dlopen(lib, RTLD_GLOBAL|RTLD_LAZY)
-         if not handle:
-             err = dlerror()
--            raise ImportError(f"cannot load Singular library from {LIBSINGULAR_PATH} ({err})")
-+            raise RuntimeError(f"Could not reload Singular library with RTLD_GLOBAL ({err})")
- 
-     # load SINGULAR
-     siInit(lib)
-diff --git a/src/sage/tests/gap_packages.py b/src/sage/tests/gap_packages.py
-index 2e4518ca226..c302b169b8a 100644
---- a/src/sage/tests/gap_packages.py
-+++ b/src/sage/tests/gap_packages.py
-@@ -103,7 +103,7 @@ def all_installed_packages(ignore_dot_gap=False, gap=None):
- 
-         sage: from sage.tests.gap_packages import all_installed_packages
-         sage: all_installed_packages()
--        (...'GAPDoc'...)
-+        (...'gapdoc'...)
-         sage: all_installed_packages(ignore_dot_gap=True) == all_installed_packages(gap=gap, ignore_dot_gap=True)
-         True
-     """
diff --git a/srcpkgs/sagemath/patches/35127-fix_very_slow_test_stream.py.patch b/srcpkgs/sagemath/patches/35127-fix_very_slow_test_stream.py.patch
deleted file mode 100644
index d331a6573e1c..000000000000
--- a/srcpkgs/sagemath/patches/35127-fix_very_slow_test_stream.py.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/src/sage/data_structures/stream.py b/src/sage/data_structures/stream.py
-index f8f6dc6a186..002e925f02f 100644
---- a/src/sage/data_structures/stream.py
-+++ b/src/sage/data_structures/stream.py
-@@ -2090,8 +2090,8 @@ def compute_product(self, n, la):
-             sage: f = Stream_exact([1]) # irrelevant for this test
-             sage: g = Stream_function(lambda n: s[n], True, 0)
-             sage: h = Stream_plethysm(f, g, True, p)
--            sage: B = p[2, 2, 1](sum(s[i] for i in range(7)))
--            sage: all(h.compute_product(k, Partition([2, 2, 1])) == B.restrict_degree(k) for k in range(7))
-+            sage: B = p[2, 2, 1](sum(p(s[i]) for i in range(7)))  # long time
-+            sage: all(h.compute_product(k, Partition([2, 2, 1])) == B.restrict_degree(k) for k in range(7))  # long time
-             True
-         """
-         # This is the approximate order of the result
diff --git a/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch b/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
deleted file mode 100644
index 007f3324cfe4..000000000000
--- a/srcpkgs/sagemath/patches/35177-matplotlib_3.7.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
-index b77c69b2f77..0586a96ae55 100644
---- a/src/sage/plot/complex_plot.pyx
-+++ b/src/sage/plot/complex_plot.pyx
-@@ -563,7 +563,7 @@ def complex_to_cmap_rgb(z_values, cmap='turbo', contoured=False, tiled=False,
-     import matplotlib as mpl
- 
-     if isinstance(cmap, str):
--        cmap = mpl.cm.get_cmap(cmap)
-+        cmap = mpl.colormaps[cmap]
- 
-     if contour_base is None:
-         if contour_type == "linear":
-@@ -1206,11 +1206,11 @@ def complex_plot(f, x_range, y_range, contoured=False, tiled=False, cmap=None,
-                 domain = np.linspace(0, 1, 256)
-                 shifted_domain = np.roll(domain, 128)
-                 default_cmap = mpl.colors.LinearSegmentedColormap.from_list(
--                    "sage_default", mpl.cm.get_cmap('hsv')(shifted_domain)
-+                    "sage_default", mpl.colormaps['hsv'](shifted_domain)
-                 )
-                 cmap = default_cmap
-             else:
--                cmap = mpl.cm.get_cmap(cmap)
-+                cmap = mpl.colormaps[cmap]
-         rgbs = complex_to_cmap_rgb(
-             z_values, cmap=cmap, contoured=contoured, tiled=tiled,
-             contour_type=contour_type, contour_base=contour_base,
-diff --git a/src/sage/plot/contour_plot.py b/src/sage/plot/contour_plot.py
-index c0cab456686..4accb309580 100644
---- a/src/sage/plot/contour_plot.py
-+++ b/src/sage/plot/contour_plot.py
-@@ -848,9 +848,7 @@ def f(x,y): return cos(x) + sin(y)
- 
-         sage: contour_plot(lambda x,y: 0, (-1,1), (-1,1),
-         ....:              contours=[0], fill=False, cmap=['blue'])
--        ...
--        UserWarning: No contour levels were found within the data range.
--        Graphics object consisting of 1 graphics primitive
-+        ...Graphics object consisting of 1 graphics primitive
- 
-     .. PLOT::
- 
-@@ -874,8 +872,7 @@ def f(x,y): return cos(x) + sin(y)
-     Check that :trac:`18074` is fixed::
- 
-         sage: contour_plot(0, (0,1), (0,1))
--        ... UserWarning: No contour levels were found within the data range.
--        Graphics object consisting of 1 graphics primitive
-+        ...Graphics object consisting of 1 graphics primitive
- 
-     Domain points in :trac:`11648` with complex output are now skipped::
- 
-diff --git a/src/sage/plot/graphics.py b/src/sage/plot/graphics.py
-index 64ea1a7e10f..cdc99ced263 100644
---- a/src/sage/plot/graphics.py
-+++ b/src/sage/plot/graphics.py
-@@ -2341,7 +2341,7 @@ def _matplotlib_tick_formatter(self, subplot, base=(10, 10),
-             sage: subplot = Figure().add_subplot(111)
-             sage: p._objects[0]._render_on_subplot(subplot)
-             sage: p._matplotlib_tick_formatter(subplot, **d)
--            (<AxesSubplot:...>,
-+            (<Axes...>,
-             <matplotlib.ticker.MaxNLocator object at ...>,
-             <matplotlib.ticker.MaxNLocator object at ...>,
-             <matplotlib.ticker.ScalarFormatter object at ...>,
-diff --git a/src/sage/plot/multigraphics.py b/src/sage/plot/multigraphics.py
-index 99c817f03a6..ae85183dc93 100644
---- a/src/sage/plot/multigraphics.py
-+++ b/src/sage/plot/multigraphics.py
-@@ -1207,7 +1207,7 @@ def _add_subplot(self, figure, index, **options):
-             sage: fig = Figure()
-             sage: ax1 = G._add_subplot(fig, 0)
-             sage: type(ax1)
--            <class 'matplotlib.axes._subplots.AxesSubplot'>
-+            <class 'matplotlib.axes...'>
-             sage: ax2 = G._add_subplot(fig, 1)
-             sage: fig.get_axes() == [ax1, ax2]
-             True
-diff --git a/src/sage/plot/plot3d/plot_field3d.py b/src/sage/plot/plot3d/plot_field3d.py
-index bdf39391d3e..fe10e27f58f 100644
---- a/src/sage/plot/plot3d/plot_field3d.py
-+++ b/src/sage/plot/plot3d/plot_field3d.py
-@@ -126,9 +126,9 @@ def plot_vector_field3d(functions, xrange, yrange, zrange,
-     vectors = [vector((ff(*point), gg(*point), hh(*point))) for point in points]
- 
-     try:
--        from matplotlib.cm import get_cmap
--        cm = get_cmap(colors)
--    except (TypeError, ValueError):
-+        import matplotlib as mpl
-+        cm = mpl.colormaps[colors]
-+    except (TypeError, KeyError):
-         cm = None
-     if cm is None:
-         if isinstance(colors, (list, tuple)):
diff --git a/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch b/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
deleted file mode 100644
index 1e0a708e8068..000000000000
--- a/srcpkgs/sagemath/patches/35195-workaround_ecl_race.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-diff --git a/src/sage/interfaces/maxima_lib.py b/src/sage/interfaces/maxima_lib.py
-index c9ca5e30939..9459cb70334 100644
---- a/src/sage/interfaces/maxima_lib.py
-+++ b/src/sage/interfaces/maxima_lib.py
-@@ -77,6 +77,26 @@
-     sage: bar == foo
-     True
- 
-+TESTS:
-+
-+Check our workaround for a race in ecl works, see :trac:`26968`.
-+We use a temporary `MAXIMA_USERDIR` so it's empty; we place it
-+in `DOT_SAGE` since we expect it to have more latency than `/tmp`.
-+
-+    sage: import tempfile, subprocess
-+    sage: tmpdir = tempfile.TemporaryDirectory(dir=DOT_SAGE)
-+    sage: _ = subprocess.run(['sage', '-c',  # long time
-+    ....: f'''
-+    ....: import os
-+    ....: os.environ["MAXIMA_USERDIR"] = "{tmpdir.name}"
-+    ....: if not os.fork():
-+    ....:     import sage.interfaces.maxima_lib
-+    ....: else:
-+    ....:     import sage.interfaces.maxima_lib
-+    ....:     os.wait()
-+    ....: '''])
-+    sage: tmpdir.cleanup()
-+
- """
- 
- # ****************************************************************************
-@@ -116,7 +136,23 @@
- ecl_eval("(setq $nolabels t))")
- ecl_eval("(defvar *MAXIMA-LANG-SUBDIR* NIL)")
- ecl_eval("(set-locale-subdir)")
--ecl_eval("(set-pathnames)")
-+
-+try:
-+    ecl_eval("(set-pathnames)")
-+except RuntimeError:
-+    # Recover from :trac:`26968` by creating `*maxima-objdir*` here.
-+    # This cannot be done before calling `(set-pathnames)` since
-+    # `*maxima-objdir*` is computed there.
-+    # We use python `os.makedirs()` which is immune to the race.
-+    # Using `(ensure-directories-exist ...)` in lisp would be
-+    # subject to the same race condition and since `*maxima-objdir*`
-+    # has multiple components this is quite plausible to happen.
-+    maxima_objdir = ecl_eval("*maxima-objdir*").python()[1:-1]
-+    import os
-+    os.makedirs(maxima_objdir, exist_ok=True)
-+    # Call `(set-pathnames)` again to complete its job.
-+    ecl_eval("(set-pathnames)")
-+
- ecl_eval("(defun add-lineinfo (x) x)")
- ecl_eval('(defun principal nil (cond ($noprincipal (diverg)) ((not pcprntd) (merror "Divergent Integral"))))')
- ecl_eval("(remprop 'mfactorial 'grind)")  # don't use ! for factorials (#11539)
diff --git a/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch b/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
deleted file mode 100644
index fc3e40da2a88..000000000000
--- a/srcpkgs/sagemath/patches/35204-fix_sage-cleaner.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/src/bin/sage-cleaner b/src/bin/sage-cleaner
-index e2e578eec60..dc7d8f0482e 100755
---- a/src/bin/sage-cleaner
-+++ b/src/bin/sage-cleaner
-@@ -99,6 +99,15 @@ def cleanup():
- 
-     return len(pid_list)
- 
-+def cleanup_cruft():
-+    """ remove directories leftover from improper shutdown """
-+    tmp_dirs = os.listdir(SAGE_TMP_ROOT)
-+    for dir_entry in tmp_dirs:
-+        baddir = os.path.join(SAGE_TMP_ROOT, dir_entry)
-+        if os.path.isdir(baddir):
-+            logger.warning('Removing old directory %s from SAGE_TMP_ROOT', baddir)
-+            rm_rf(baddir)
-+
- def kill_spawned_jobs(jobfile, parent_pid):
-     logger.info("Killing %s's spawned jobs", parent_pid)
-     killed_them_all = True
-@@ -193,6 +202,7 @@ if __name__ == '__main__':
-     setup_daemon()
-     fix_old_mistakes()
-     logger.info("Starting sage-cleaner with PID %s", os.getpid())
-+    cleanup_cruft()
- 
-     if len(sys.argv) > 1:
-         wait = int(sys.argv[1])
diff --git a/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch b/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
deleted file mode 100644
index ea210e20ae52..000000000000
--- a/srcpkgs/sagemath/patches/35250-nauty_2.8.6.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/src/sage/graphs/generators/families.py b/src/sage/graphs/generators/families.py
-index ec6a5c19e60..9dd7bc1cb1e 100644
---- a/src/sage/graphs/generators/families.py
-+++ b/src/sage/graphs/generators/families.py
-@@ -3660,7 +3660,7 @@ def nauty_gentreeg(options="", debug=False):
- 
-         sage: gen = graphs.nauty_gentreeg("4", debug=True)
-         sage: print(next(gen))
--        >A ...gentreeg Z=2:3 D=3 n=4
-+        >A ...gentreeg ...
-         sage: gen = graphs.nauty_gentreeg("4 -q", debug=True)
-         sage: next(gen)
-         ''
-@@ -3687,7 +3687,7 @@ def nauty_gentreeg(options="", debug=False):
-         sage: list(graphs.nauty_gentreeg("3 -x", debug=True))
-         ['>E Usage: ...gentreeg [-D#] [-Z#:#] [-ulps] [-q] n [res/mod] ...
-         sage: list(graphs.nauty_gentreeg("3", debug=True))
--        ['>A ...gentreeg Z=2:2 D=2 n=3\n', Graph on 3 vertices]
-+        ['>A ...gentreeg ...\n', Graph on 3 vertices]
-     """
-     import shlex
-     from sage.features.nauty import NautyExecutable
-diff --git a/src/sage/graphs/graph_generators.py b/src/sage/graphs/graph_generators.py
-index df88bbe2713..1a8016976c2 100644
---- a/src/sage/graphs/graph_generators.py
-+++ b/src/sage/graphs/graph_generators.py
-@@ -966,7 +966,7 @@ def nauty_geng(self, options="", debug=False):
-             ...
-             ValueError: wrong format of parameter option
-             sage: list(graphs.nauty_geng("-c3", debug=True))
--            ['>E Usage: ...geng [-cCmtfbd#D#] [-uygsnh] [-lvq] ...
-+            ['>E Usage: ...geng ...\n']
-             sage: list(graphs.nauty_geng("-c 3", debug=True))
-             ['>A ...geng -cd1D2 n=3 e=2-3\n', Graph on 3 vertices, Graph on 3 vertices]
-         """
diff --git a/srcpkgs/sagemath/patches/35423-ipython_8.12.patch b/srcpkgs/sagemath/patches/35423-ipython_8.12.patch
deleted file mode 100644
index 46bda084e48e..000000000000
--- a/srcpkgs/sagemath/patches/35423-ipython_8.12.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-diff --git a/src/sage/repl/inputhook.py b/src/sage/repl/inputhook.py
-index da5df0268c0..7f7894f6dcf 100644
---- a/src/sage/repl/inputhook.py
-+++ b/src/sage/repl/inputhook.py
-@@ -17,6 +17,8 @@
- 
- import select
- import errno
-+import contextlib
-+import io
- 
- from IPython import get_ipython
- from IPython.terminal.pt_inputhooks import register
-@@ -47,15 +49,27 @@ def install():
-     """
-     Install the Sage input hook
- 
--    EXAMPLES::
-+    EXAMPLES:
-+
-+    Make sure ipython is running so we really test this function::
-+
-+        sage: from sage.repl.interpreter import get_test_shell
-+        sage: get_test_shell()
-+        <sage.repl.interpreter.SageTestShell object at ...>
-+
-+    Run the function twice, to check it is idempotent (see :trac:`35235`)::
- 
-         sage: from sage.repl.inputhook import install
-         sage: install()
-+        sage: install()
-     """
-     ip = get_ipython()
-     if not ip:
-         return   # Not running in ipython, e.g. doctests
--    ip.enable_gui('sage')
-+    if ip._inputhook != sage_inputhook:
-+        # silence `ip.enable_gui()` useless output
-+        with contextlib.redirect_stdout(io.StringIO()):
-+            ip.enable_gui('sage')
- 
- 
- def uninstall():
-@@ -71,4 +85,6 @@ def uninstall():
-     if not ip:
-         return
-     if ip._inputhook == sage_inputhook:
--        ip.enable_gui(None)
-+        # silence `ip.enable_gui()` useless output
-+        with contextlib.redirect_stdout(io.StringIO()):
-+            ip.enable_gui(None)
diff --git a/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch b/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch
deleted file mode 100644
index 2cdc674d4f9e..000000000000
--- a/srcpkgs/sagemath/patches/35438-pythran_0.12.1.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 532fbbaf71bb41c73920b584108eb2a09d6deeb1 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
-Date: Tue, 4 Apr 2023 12:56:57 -0300
-Subject: [PATCH] Ignore deprecation warnings triggered by pythran 0.12.1
-
-These happen with python 3.11, setuptools 67.6.1, numpy 1.24.2.
-When pythran 0.12.1 is installed, I get 24 doctest failures due to
-deprecation warnings; they are all gone with this commit.
-
-[backported from 839a6e928c264a9863bd42860c78ae95a6d9f3e0]
----
- src/sage/all.py | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/src/sage/all.py b/src/sage/all.py
-index 93588df1b93..ee775aad0e9 100644
---- a/src/sage/all.py
-+++ b/src/sage/all.py
-@@ -96,9 +96,17 @@ warnings.filterwarnings('ignore', category=DeprecationWarning,
- warnings.filterwarnings('ignore', category=DeprecationWarning,
-     module='(.*[.]_vendor[.])?packaging')
- 
--# Ignore numpy warnings triggered by pythran
-+# Ignore a few warnings triggered by pythran 0.12.1
- warnings.filterwarnings('ignore', category=DeprecationWarning,
--                        module='pythran')
-+    message='\n\n  `numpy.distutils` is deprecated since NumPy 1.23.0',
-+    module='pythran.dist')
-+warnings.filterwarnings('ignore', category=DeprecationWarning,
-+    message='pkg_resources is deprecated as an API|'
-+            'Deprecated call to `pkg_resources.declare_namespace(.*)`',
-+    module='pkg_resources')
-+warnings.filterwarnings('ignore', category=DeprecationWarning,
-+    message='msvccompiler is deprecated and slated to be removed',
-+    module='distutils.msvccompiler')
- 
- warnings.filterwarnings('ignore', category=DeprecationWarning,
-                         message='The distutils(.sysconfig module| package) is deprecated',
--- 
-2.40.0
-
diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches
index 871ae38577fd..ab73c494aab2 100755
--- a/srcpkgs/sagemath/patches/get_patches
+++ b/srcpkgs/sagemath/patches/get_patches
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 URL_BASE_PR="https://github.com/sagemath/sage/pull/"
-URL_BASE_COMPARE="https://github.com/sagemath/sage/compare/9.8..."
+URL_BASE_COMPARE="https://github.com/sagemath/sage/compare/10.0.rc0..."
 
 case "$1" in
 	-n)  DO=echo ;;
@@ -15,49 +15,8 @@ get_pr() {
 	$DO wget "$URL_BASE_PR$pr.$ext" -O "$pr-$desc.patch"
 }
 
-get_trac() {
-	ticket=$1
-	desc=$(echo "$2" | sed -e 's/ /_/g')
-	commit=$3
-	$DO wget "$URL_BASE_COMPARE$commit.diff" -O "$ticket-$desc-$commit.patch"
-}
-
 # run from patches dir
 cd $(dirname "$0")
 
-# merged in 10.0.beta0
-get_trac 34851 "support singular 4.3.1.p3" 5e5737a0c
-get_pr 35068 "fix tests giac 1.9.0.35" patch
-
-# merged in 10.0.beta1
-get_pr 35058 "skip unstable tests klyachko"
-
-# merged in 10.0.beta2
-get_pr 34994 "fix tests numpy 1.24"
-get_pr 34997 "fix edge case of integer_check"
-
-# merged in 10.0.beta3
-get_pr 34995 "support tachyon 0.99.2"
-
-# merged in 10.0.beta4
-get_pr 34980 "avoid factoring in is_prime"
-
-# merged in 10.0.beta5
-get_pr 35094 "support gap 4.12"					# includes PR 35093
-
-# merged in 10.0.beta6
-get_pr 35127 "fix very slow test stream.py"
-get_pr 35177 "matplotlib 3.7"
-get_pr 35195 "workaround ecl race"
-get_pr 35204 "fix sage-cleaner"
-
-# merged in 10.0.beta7
-get_pr 35250 "nauty 2.8.6"
-
-# merged in 10.0.beta8
-#get_pr 35337 "ipython 8.11"
-get_pr 35423 "ipython 8.12"						# includes PR 35337
-get_pr 35438 "pythran 0.12.1"
-
 # needs review
 get_pr 35584 "networkx 3.1"
diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template
index 66a543efd21d..f7687005e0b0 100644
--- a/srcpkgs/sagemath/template
+++ b/srcpkgs/sagemath/template
@@ -1,7 +1,7 @@
 # Template file for 'sagemath'
 pkgname=sagemath
-version=9.8
-revision=2
+version=10.0.rc0
+revision=1
 build_wrksrc=pkgs/sagemath-standard
 build_style=python3-module
 _bindir=/usr/lib/sagemath/$version/bin
@@ -32,7 +32,7 @@ maintainer="Gonzalo Tornaría <tornaria@cmat.edu.uy>"
 license="GPL-2.0-or-later"
 homepage="http://sagemath.org/"
 distfiles="https://github.com/sagemath/sage/archive/refs/tags/$version.tar.gz"
-checksum=2aff28bd1d18c2d526581f5298acb8336f5b92db5675a7403dec8eaf9a86bc4c
+checksum=8e56869d5c14f4bab4d8b0de2e4313b28375c3de35fb3e35e7766e697736eb83
 
 do_configure() {
 	# git tree needs bootstrapping

  parent reply	other threads:[~2023-04-29  2:20 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-28 20:25 [PR PATCH] " tornaria
2023-04-28 20:38 ` icp1994
2023-04-28 20:47 ` tornaria
2023-04-28 22:50 ` tornaria
2023-04-29  1:28 ` tornaria
2023-04-29  2:20 ` tornaria [this message]
2023-05-05  1:46 ` [PR PATCH] [Updated] " tornaria
2023-05-05  1:51 ` [RFC] sagemath: update to 10.0.rc1 tornaria
2023-05-05 12:28 ` tornaria
2023-05-05 19:16 ` [PR PATCH] [Updated] " tornaria
2023-05-06  1:16 ` tornaria
2023-05-06 14:06 ` dkwo
2023-05-06 14:45 ` tornaria
2023-05-09 13:11 ` dkwo
2023-05-10 12:48 ` [PR PATCH] [Updated] " tornaria
2023-05-10 12:55 ` tornaria
2023-05-13  2:33 ` [PR PATCH] [Updated] [RFC] sagemath: update to 10.0.rc2 tornaria
2023-05-13  3:14 ` [PR PATCH] [Updated] [RFC] sagemath: update to 10.0.rc3 tornaria
2023-05-13 18:12 ` dkwo
2023-05-13 22:12 ` [PR PATCH] [Updated] " tornaria
2023-05-15 15:04 ` dkwo
2023-05-15 16:35 ` tornaria
2023-05-15 18:42 ` dkwo
2023-05-15 19:06 ` tornaria
2023-05-15 21:16 ` dkwo
2023-05-15 21:50 ` tornaria
2023-05-16 14:28 ` dkwo
2023-05-16 14:39 ` dkwo
2023-05-18 14:08 ` dkwo
2023-05-21 15:28 ` [PR PATCH] [Updated] " tornaria
2023-05-21 15:32 ` [RFC] sagemath: update to 10.0 tornaria
2023-05-21 18:18 ` [PR PATCH] [Updated] " tornaria
2023-05-21 22:37 ` tornaria
2023-05-21 22:39 ` tornaria
2023-05-21 23:32 ` [PR PATCH] [Updated] " tornaria
2023-05-23  1:19 ` dkwo
2023-05-29 18:09 ` tornaria
2023-05-29 18:53 ` dkwo
2023-05-30 20:52 ` dkwo
2023-05-30 20:52 ` dkwo
2023-05-31 11:18 ` [PR PATCH] [Merged]: " leahneukirchen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230429022007.koAC11MZMwR_WZpFaYu3DQewiY5eb_FyUFISZr4Nkdg@z \
    --to=tornaria@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).