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] [BETA] sagemath: update to 10.5.beta2
Date: Wed, 21 Aug 2024 03:11:37 +0200	[thread overview]
Message-ID: <20240821011137.46ACF2CDE9@inbox.vuxu.org> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-51902@inbox.vuxu.org>

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

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

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

[BETA] sagemath: update to 10.5.beta2
<!-- Uncomment relevant sections and delete options which are not applicable -->

 - python3-Cython: alternative fix for 6122
 - python3-gmpy2: update to 2.2.1.
 - python3-cypari2: update to 2.2.0.
 - python3-sympy: update to 1.13.2.
 - sagemath: enable all cython warnings

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

@dkwo

<!--
#### 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/51902.patch is attached

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

From 416e90f2c36dd4a394daaafb63207dba5203c706 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Sun, 11 Aug 2024 22:53:42 -0300
Subject: [PATCH 1/6] python3-Cython: alternative fix for 6122

---
 srcpkgs/python3-Cython/patches/fix-regression.patch | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/srcpkgs/python3-Cython/patches/fix-regression.patch b/srcpkgs/python3-Cython/patches/fix-regression.patch
index f2e761608e373b..f5957cfa59c2f5 100644
--- a/srcpkgs/python3-Cython/patches/fix-regression.patch
+++ b/srcpkgs/python3-Cython/patches/fix-regression.patch
@@ -15,3 +15,11 @@ serious regression, e.g. sagemath FTBS with cython 3.0.11
              warning(self.pos,
                      "Implicit noexcept declaration is deprecated."
                      " Function declaration should contain 'noexcept' keyword.",
+@@ -3128,6 +3126,7 @@ class DefNode(FuncDefNode):
+             if scope is None:
+                 scope = cfunc.scope
+             cfunc_type = cfunc.type
++            has_explicit_exc_clause=True
+             if len(self.args) != len(cfunc_type.args) or cfunc_type.has_varargs:
+                 error(self.pos, "wrong number of arguments")
+                 error(cfunc.pos, "previous declaration here")

From 21b3dad478a94fe98ddd4ca793d16eedf424e199 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Mon, 5 Aug 2024 00:21:23 -0300
Subject: [PATCH 2/6] sagemath: update to 10.5.beta2.

---
 .../sagemath/patches/36641-sympy_1.13.patch   |  22 +-
 .../sagemath/patches/37884-gap_4.13.1.patch   |  28 +-
 .../sagemath/patches/38250-numpy_2.0.patch    | 587 ------------------
 .../sagemath/patches/38344-ecm_7.0.6.patch    |  43 --
 srcpkgs/sagemath/patches/get_patches          |   4 +-
 srcpkgs/sagemath/template                     |   8 +-
 6 files changed, 22 insertions(+), 670 deletions(-)
 delete mode 100644 srcpkgs/sagemath/patches/38250-numpy_2.0.patch
 delete mode 100644 srcpkgs/sagemath/patches/38344-ecm_7.0.6.patch

diff --git a/srcpkgs/sagemath/patches/36641-sympy_1.13.patch b/srcpkgs/sagemath/patches/36641-sympy_1.13.patch
index 625c582cdd41b7..01e859ad023f4d 100644
--- a/srcpkgs/sagemath/patches/36641-sympy_1.13.patch
+++ b/srcpkgs/sagemath/patches/36641-sympy_1.13.patch
@@ -1,8 +1,5 @@
-diff --git a/build/pkgs/sympy/requirements.txt b/build/pkgs/sympy/requirements.txt
-new file mode 100644
-index 00000000000..3ef8f90b550
 diff --git a/src/sage/doctest/forker.py b/src/sage/doctest/forker.py
-index 7e9eab2ff2e..43365cd645e 100644
+index 823a0d14a41..de1c8531814 100644
 --- a/src/sage/doctest/forker.py
 +++ b/src/sage/doctest/forker.py
 @@ -150,14 +150,15 @@ def init_sage(controller=None):
@@ -28,7 +25,7 @@ index 7e9eab2ff2e..43365cd645e 100644
      The displayhook sorts dictionary keys to simplify doctesting of
      dictionary output::
 diff --git a/src/sage/functions/hypergeometric.py b/src/sage/functions/hypergeometric.py
-index 010c61febe0..bbccbd20032 100644
+index ade7836b310..eb5c6665c0d 100644
 --- a/src/sage/functions/hypergeometric.py
 +++ b/src/sage/functions/hypergeometric.py
 @@ -124,7 +124,7 @@
@@ -40,21 +37,8 @@ index 010c61febe0..bbccbd20032 100644
      sage: hypergeometric((5, 4), (4, 4), 3)._mathematica_init_()                        # needs sage.symbolic
      'HypergeometricPFQ[{5,4},{4,4},3]'
  
-diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx
-index a92fe241355..f62311423be 100644
---- a/src/sage/symbolic/expression.pyx
-+++ b/src/sage/symbolic/expression.pyx
-@@ -1167,7 +1167,7 @@ cdef class Expression(Expression_abc):
-             sage: unicode_art(SR(13 - I))
-             13 - ⅈ
-             sage: unicode_art(SR(1.3 - I))
--            1.3 - ⅈ
-+            1.3 - 1.0⋅ⅈ
-             sage: unicode_art(cos(I))
-             cosh(1)
- 
 diff --git a/src/sage/typeset/ascii_art.py b/src/sage/typeset/ascii_art.py
-index 28024405d27..458fa8724a3 100644
+index 83d92af8959..e470e2bd88d 100644
 --- a/src/sage/typeset/ascii_art.py
 +++ b/src/sage/typeset/ascii_art.py
 @@ -44,11 +44,12 @@
diff --git a/srcpkgs/sagemath/patches/37884-gap_4.13.1.patch b/srcpkgs/sagemath/patches/37884-gap_4.13.1.patch
index 1550d47e2436c6..321e0a94487da3 100644
--- a/srcpkgs/sagemath/patches/37884-gap_4.13.1.patch
+++ b/srcpkgs/sagemath/patches/37884-gap_4.13.1.patch
@@ -1,21 +1,21 @@
 diff --git a/src/sage/algebras/fusion_rings/fusion_double.py b/src/sage/algebras/fusion_rings/fusion_double.py
-index 7ce086f70d0..954513572c3 100644
+index 71277561331..3b681d75d3b 100644
 --- a/src/sage/algebras/fusion_rings/fusion_double.py
 +++ b/src/sage/algebras/fusion_rings/fusion_double.py
 @@ -133,7 +133,7 @@ class FusionDouble(CombinatorialFreeModule):
          sage: G = SmallPermutationGroup(16,9)
-         sage: F = FusionDouble(G, prefix="b",inject_variables=True)
+         sage: F = FusionDouble(G, prefix='b', inject_variables=True)
          sage: b13^2 # long time (4s)
 -        b0 + b2 + b4 + b15 + b16 + b17 + b18 + b24 + b26 + b27
 +        b0 + b3 + b4
- 
      """
      @staticmethod
+     def __classcall_private__(cls, G, prefix='s', inject_variables=False):
 diff --git a/src/sage/categories/simplicial_sets.py b/src/sage/categories/simplicial_sets.py
-index e714a4571c4..a2b87a729d1 100644
+index aabd3cdbb4f..14bebdcd080 100644
 --- a/src/sage/categories/simplicial_sets.py
 +++ b/src/sage/categories/simplicial_sets.py
-@@ -593,9 +593,9 @@ def _canonical_twisting_operator(self):
+@@ -591,9 +591,9 @@ def _canonical_twisting_operator(self):
                      sage: X = simplicial_sets.Torus()
                      sage: d = X._canonical_twisting_operator()
                      sage: d
@@ -27,7 +27,7 @@ index e714a4571c4..a2b87a729d1 100644
                      sage: Y = simplicial_sets.RealProjectiveSpace(2)
                      sage: d2 = Y._canonical_twisting_operator()
                      sage: d2
-@@ -677,10 +677,10 @@ def twisted_chain_complex(self, twisting_operator=None, dimensions=None, augment
+@@ -674,10 +674,10 @@ def twisted_chain_complex(self, twisting_operator=None, dimensions=None, augment
                      sage: X = simplicial_sets.Torus()
                      sage: C = X.twisted_chain_complex()
                      sage: C.differential(1)
@@ -41,7 +41,7 @@ index e714a4571c4..a2b87a729d1 100644
                      [      -1       -1]
                      sage: C.differential(3)
                      []
-@@ -848,29 +848,29 @@ def twisted_homology(self, n, reduced=False):
+@@ -844,29 +844,29 @@ def twisted_homology(self, n, reduced=False):
                      sage: # needs sage.graphs
                      sage: Y = simplicial_sets.Torus()
                      sage: Y.twisted_homology(1)
@@ -80,10 +80,10 @@ index e714a4571c4..a2b87a729d1 100644
                      [1 0 0 0 0]
                      [0 1 0 0 0]
 diff --git a/src/sage/combinat/matrices/latin.py b/src/sage/combinat/matrices/latin.py
-index 936edcc6ea4..c06a53d9afd 100644
+index e2d818e9480..84e6c4fcc9b 100644
 --- a/src/sage/combinat/matrices/latin.py
 +++ b/src/sage/combinat/matrices/latin.py
-@@ -2453,7 +2453,7 @@ def p3_group_bitrade_generators(p):
+@@ -2444,7 +2444,7 @@ def p3_group_bitrade_generators(p):
      EXAMPLES::
  
          sage: from sage.combinat.matrices.latin import *
@@ -93,7 +93,7 @@ index 936edcc6ea4..c06a53d9afd 100644
           (1,2,3)(4,7,8)(5,6,9),
           (1,9,2)(3,7,4)(5,8,6),
 diff --git a/src/sage/groups/cubic_braid.py b/src/sage/groups/cubic_braid.py
-index 257b400f1c7..36423c756aa 100644
+index 61db70925e1..521289c7578 100644
 --- a/src/sage/groups/cubic_braid.py
 +++ b/src/sage/groups/cubic_braid.py
 @@ -282,7 +282,7 @@ def _richcmp_(self, other, op):
@@ -106,7 +106,7 @@ index 257b400f1c7..36423c756aa 100644
               c1*c0^-1*c1, c0^-1*c1^-1*c0^-1, c0^-1*c1^-1, c1^-1*c0*c1^-1,
               c0*c1^-1*c0^-1, c0^-1*c1, c0^-1*c1*c0, c0*c1^-1, c1*c0^-1,
 diff --git a/src/sage/groups/finitely_presented.py b/src/sage/groups/finitely_presented.py
-index 4bb52ee4efb..85f572fac6c 100644
+index 4ac2faa783b..7016d08381b 100644
 --- a/src/sage/groups/finitely_presented.py
 +++ b/src/sage/groups/finitely_presented.py
 @@ -1344,8 +1344,8 @@ def abelianization_map(self):
@@ -161,10 +161,10 @@ index 4bb52ee4efb..85f572fac6c 100644
              sage: G.characteristic_varieties(groebner=True)
              {0: [-1 + F1, 1 + F1, 1 - F1 + F1^2, 1 + F1 + F1^2], 1: [1 - F1 + F1^2],  2: []}
 diff --git a/src/sage/groups/perm_gps/permgroup_named.py b/src/sage/groups/perm_gps/permgroup_named.py
-index c1f2683907b..d219e104a2c 100644
+index 5c153b93d4c..bd4afad2942 100644
 --- a/src/sage/groups/perm_gps/permgroup_named.py
 +++ b/src/sage/groups/perm_gps/permgroup_named.py
-@@ -3468,16 +3468,14 @@ class SmallPermutationGroup(PermutationGroup_generic):
+@@ -3465,16 +3465,14 @@ class SmallPermutationGroup(PermutationGroup_generic):
          sage: G = SmallPermutationGroup(12,4); G
          Group of order 12 and GAP Id 4 as a permutation group
          sage: G.gens()
@@ -186,7 +186,7 @@ index c1f2683907b..d219e104a2c 100644
          sage: def numgps(n): return ZZ(libgap.NumberSmallGroups(n))
          sage: all(SmallPermutationGroup(n,k).id() == [n,k]
          ....:     for n in [1..64] for k in [1..numgps(n)])
-@@ -3486,11 +3484,11 @@ class SmallPermutationGroup(PermutationGroup_generic):
+@@ -3483,11 +3481,11 @@ class SmallPermutationGroup(PermutationGroup_generic):
          sage: H.is_abelian()
          False
          sage: [H.centralizer(g) for g in H.conjugacy_classes_representatives()]
diff --git a/srcpkgs/sagemath/patches/38250-numpy_2.0.patch b/srcpkgs/sagemath/patches/38250-numpy_2.0.patch
deleted file mode 100644
index e28fd857afcb75..00000000000000
--- a/srcpkgs/sagemath/patches/38250-numpy_2.0.patch
+++ /dev/null
@@ -1,587 +0,0 @@
-diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py
-index 28f81d7b798..d184c52bf19 100644
---- a/src/sage/arith/misc.py
-+++ b/src/sage/arith/misc.py
-@@ -2277,7 +2277,7 @@ def power_mod(a, n, m):
- 
-         sage: from numpy import int32                                                   # needs numpy
-         sage: power_mod(int32(2), int32(390), int32(391))                               # needs numpy
--        285
-+        ...285...
-         sage: from gmpy2 import mpz
-         sage: power_mod(mpz(2), mpz(390), mpz(391))
-         mpz(285)
-diff --git a/src/sage/calculus/interpolators.pyx b/src/sage/calculus/interpolators.pyx
-index 221b52369e2..bb0be7bab0c 100644
---- a/src/sage/calculus/interpolators.pyx
-+++ b/src/sage/calculus/interpolators.pyx
-@@ -27,6 +27,9 @@ Development supported by NSF award No. 0702939.
- import numpy as np
- cimport numpy as np
- 
-+if int(np.version.short_version[0]) > 1:
-+    np.set_printoptions(legacy="1.25")
-+
- from math import pi
- cdef double TWOPI = 2*pi
- 
-diff --git a/src/sage/calculus/riemann.pyx b/src/sage/calculus/riemann.pyx
-index 6ec80d89aa7..c09d93c4260 100644
---- a/src/sage/calculus/riemann.pyx
-+++ b/src/sage/calculus/riemann.pyx
-@@ -44,6 +44,9 @@ from sage.calculus.integration import numerical_integral
- import numpy as np
- cimport numpy as np
- 
-+if int(np.version.short_version[0]) > 1:
-+    np.set_printoptions(legacy="1.25")
-+
- from math import pi
- from math import sin
- from math import cos
-diff --git a/src/sage/combinat/fully_packed_loop.py b/src/sage/combinat/fully_packed_loop.py
-index b198fed0c0d..b3ebd206cd2 100644
---- a/src/sage/combinat/fully_packed_loop.py
-+++ b/src/sage/combinat/fully_packed_loop.py
-@@ -66,6 +66,9 @@ def _make_color_list(n, colors=None, color_map=None, randomize=False):
-     r"""
-     TESTS::
- 
-+        sage: import numpy as np
-+        sage: if int(np.version.short_version[0]) > 1:
-+        ....:     np.set_printoptions(legacy="1.25")
-         sage: from sage.combinat.fully_packed_loop import _make_color_list
-         sage: _make_color_list(5)
-         sage: _make_color_list(5, ['blue', 'red'])
-diff --git a/src/sage/env.py b/src/sage/env.py
-index 722649ab3da..abb9b19f9e3 100644
---- a/src/sage/env.py
-+++ b/src/sage/env.py
-@@ -296,7 +296,7 @@ def sage_include_directories(use_sources=False):
-         sage: import sage.env
-         sage: sage.env.sage_include_directories()
-         ['...',
--         '.../numpy/core/include',
-+         '.../numpy/...core/include',
-          '.../include/python...']
- 
-     To check that C/C++ files are correctly found, we verify that we can
-diff --git a/src/sage/functions/special.py b/src/sage/functions/special.py
-index e100ba3ee23..2a03bb68f67 100644
---- a/src/sage/functions/special.py
-+++ b/src/sage/functions/special.py
-@@ -217,6 +217,9 @@ class SphericalHarmonic(BuiltinFunction):
-         sage: spherical_harmonic(1, 1, pi/2, pi).n()  # abs tol 1e-14                   # needs sage.symbolic
-         0.345494149471335
-         sage: from scipy.special import sph_harm  # NB: arguments x and y are swapped   # needs scipy
-+        sage: import numpy as np                                                        # needs scipy
-+        sage: if int(np.version.short_version[0]) > 1:                                  # needs scipy
-+        ....:     np.set_printoptions(legacy="1.25")                                    # needs scipy
-         sage: sph_harm(1, 1, pi.n(), (pi/2).n())  # abs tol 1e-14                       # needs scipy sage.symbolic
-         (0.3454941494713355-4.231083042742082e-17j)
- 
-diff --git a/src/sage/graphs/generators/classical_geometries.py b/src/sage/graphs/generators/classical_geometries.py
-index da04362eef3..957f88d2061 100644
---- a/src/sage/graphs/generators/classical_geometries.py
-+++ b/src/sage/graphs/generators/classical_geometries.py
-@@ -1315,7 +1315,7 @@ def CossidentePenttilaGraph(q):
- 
-     from sage.libs.gap.libgap import libgap
-     adj_list = libgap.function_factory("""function(q)
--        local z, e, so, G, nu, G1, G0, B, T, s, O1, O2, x;
-+        local z, e, so, G, nu, G1, G0, B, T, s, O1, O2, x, sqo;
-         LoadPackage("grape");
-         G0:=SO(3,q^2);
-         so:=GeneratorsOfGroup(G0);
-diff --git a/src/sage/graphs/generic_graph.py b/src/sage/graphs/generic_graph.py
-index 063931ae274..0bafbd00564 100644
---- a/src/sage/graphs/generic_graph.py
-+++ b/src/sage/graphs/generic_graph.py
-@@ -18420,6 +18420,9 @@ def shortest_path_all_pairs(self, by_weight=False, algorithm=None,
-                 M = self.adjacency_matrix(vertices=int_to_vertex)
- 
-             # We call the Floyd-Warshall method from SciPy
-+            import numpy  # to ensure numpy 2.0 compatibility
-+            if int(numpy.version.short_version[0]) > 1:
-+                numpy.set_printoptions(legacy="1.25")
-             from numpy import array as np_array
-             from scipy.sparse.csgraph import floyd_warshall
-             dd, pp = floyd_warshall(np_array(M), directed=self.is_directed(),
-diff --git a/src/sage/graphs/graph_generators_pyx.pyx b/src/sage/graphs/graph_generators_pyx.pyx
-index 033e8b22adc..04b20d3229b 100644
---- a/src/sage/graphs/graph_generators_pyx.pyx
-+++ b/src/sage/graphs/graph_generators_pyx.pyx
-@@ -57,7 +57,7 @@ def RandomGNP(n, p, bint directed=False, bint loops=False, seed=None):
- 
-         sage: from numpy import mean                                                    # needs numpy
-         sage: abs(mean([RandomGNP(200, .2).density() for i in range(30)]) - .2) < .001  # needs numpy
--        True
-+        ...True...
-         sage: RandomGNP(150, .2, loops=True)
-         Traceback (most recent call last):
-         ...
-diff --git a/src/sage/matrix/matrix1.pyx b/src/sage/matrix/matrix1.pyx
-index a810418389c..c38df5412f0 100644
---- a/src/sage/matrix/matrix1.pyx
-+++ b/src/sage/matrix/matrix1.pyx
-@@ -705,12 +705,15 @@ cdef class Matrix(Matrix0):
-         Type ``numpy.typecodes`` for a list of the possible
-         typecodes::
- 
--            sage: import numpy                                                          # needs numpy
--            sage: sorted(numpy.typecodes.items())                                       # needs numpy
-+            sage: import numpy                            # needs numpy
-+            sage: numpy.typecodes.items()                 # needs numpy # random
-             [('All', '?bhilqpBHILQPefdgFDGSUVOMm'), ('AllFloat', 'efdgFDG'),
--             ('AllInteger', 'bBhHiIlLqQpP'), ('Character', 'c'), ('Complex', 'FDG'),
--             ('Datetime', 'Mm'), ('Float', 'efdg'), ('Integer', 'bhilqp'),
--             ('UnsignedInteger', 'BHILQP')]
-+            ...
-+
-+        For instance, you can see possibilities for real floating point numbers::
-+
-+            sage: numpy.typecodes['Float']                # needs numpy
-+            'efdg'
- 
-         Alternatively, numpy automatically calls this function (via
-         the magic :meth:`__array__` method) to convert Sage matrices
-diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx
-index d71d22ac1f7..b6f297a3510 100644
---- a/src/sage/modules/free_module_element.pyx
-+++ b/src/sage/modules/free_module_element.pyx
-@@ -555,7 +555,11 @@ def vector(arg0, arg1=None, arg2=None, sparse=None, immutable=False):
-         R = None
- 
-     try:
-+        import numpy
-         from numpy import ndarray
-+        if int(numpy.version.short_version[0]) > 1:
-+            numpy.set_printoptions(legacy="1.25")
-+
-     except ImportError:
-         pass
-     else:
-@@ -1188,7 +1192,11 @@ cdef class FreeModuleElement(Vector):   # abstract base class
-             over Rational Field to numpy array of type <... 'float'>:
-             setting an array element with a sequence.
-         """
-+        import numpy
-         from numpy import array
-+        if int(numpy.version.short_version[0]) > 1:
-+            numpy.set_printoptions(legacy="1.25")
-+
-         try:
-             return array(self, dtype=dtype)
-         except ValueError as e:
-diff --git a/src/sage/numerical/optimize.py b/src/sage/numerical/optimize.py
-index e3d94d1746e..7ae8ca4966f 100644
---- a/src/sage/numerical/optimize.py
-+++ b/src/sage/numerical/optimize.py
-@@ -155,6 +155,10 @@ def find_root(f, a, b, xtol=10e-13, rtol=2.0**-50, maxiter=100, full_output=Fals
-         b = max(s_1, s_2)
- 
-     import scipy.optimize
-+    import numpy
-+    if int(numpy.version.short_version[0]) > 1:
-+        numpy.set_printoptions(legacy="1.25")
-+
-     g = lambda x: float(f(x))
-     brentqRes = scipy.optimize.brentq(g, a, b,
-                                  full_output=full_output, xtol=xtol, rtol=rtol, maxiter=maxiter)
-@@ -288,6 +292,10 @@ def find_local_minimum(f, a, b, tol=1.48e-08, maxfun=500):
-     a = float(a)
-     b = float(b)
-     import scipy.optimize
-+    import numpy
-+    if int(numpy.version.short_version[0]) > 1:
-+        numpy.set_printoptions(legacy="1.25")
-+
-     xmin, fval, iter, funcalls = scipy.optimize.fminbound(f, a, b, full_output=1, xtol=tol, maxfun=maxfun)
-     return fval, xmin
- 
-@@ -376,6 +384,8 @@ def minimize(func, x0, gradient=None, hessian=None, algorithm="default",
-         sage: def rosen(x):  # The Rosenbrock function
-         ....:    return sum(100.0r*(x[1r:]-x[:-1r]**2.0r)**2.0r + (1r-x[:-1r])**2.0r)
-         sage: import numpy
-+        sage: if int(numpy.version.short_version[0]) > 1:
-+        ....:     numpy.set_printoptions(legacy="1.25")
-         sage: from numpy import zeros
-         sage: def rosen_der(x):
-         ....:    xm = x[1r:-1r]
-@@ -393,6 +403,9 @@ def minimize(func, x0, gradient=None, hessian=None, algorithm="default",
-     from sage.structure.element import Expression
-     from sage.ext.fast_callable import fast_callable
-     import numpy
-+    if int(numpy.version.short_version[0]) > 1:
-+        numpy.set_printoptions(legacy="1.25")
-+
-     from scipy import optimize
-     if isinstance(func, Expression):
-         var_list = func.variables()
-@@ -530,6 +543,8 @@ def minimize_constrained(func,cons,x0,gradient=None,algorithm='default', **args)
-     from sage.structure.element import Expression
-     from sage.ext.fast_callable import fast_callable
-     import numpy
-+    if int(numpy.version.short_version[0]) > 1:
-+        numpy.set_printoptions(legacy="1.25")
-     from scipy import optimize
-     function_type = type(lambda x,y: x+y)
- 
-@@ -652,6 +667,8 @@ def find_fit(data, model, initial_guess=None, parameters=None, variables=None, s
-     ``lmdif`` and ``lmder`` algorithms.
-     """
-     import numpy
-+    if int(numpy.version.short_version[0]) > 1:
-+        numpy.set_printoptions(legacy="1.25")
- 
-     if not isinstance(data, numpy.ndarray):
-         try:
-diff --git a/src/sage/plot/arrow.py b/src/sage/plot/arrow.py
-index ac1dc79d802..23e2517ca56 100644
---- a/src/sage/plot/arrow.py
-+++ b/src/sage/plot/arrow.py
-@@ -53,6 +53,9 @@ def get_minmax_data(self):
- 
-         EXAMPLES::
- 
-+            sage: import numpy  # to ensure numpy 2.0 compatibility
-+            sage: if int(numpy.version.short_version[0]) > 1:
-+            ....:     numpy.set_printoptions(legacy="1.25")
-             sage: from sage.plot.arrow import CurveArrow
-             sage: b = CurveArrow(path=[[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]],
-             ....:                options={})
-diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
-index f1f2671a803..4d71414e1c2 100644
---- a/src/sage/plot/complex_plot.pyx
-+++ b/src/sage/plot/complex_plot.pyx
-@@ -1282,15 +1282,13 @@ def rgb_to_hls(rgb):
-         raise ValueError("Last dimension of input array must be 3; "
-                          "shape {} was found.".format(rgb.shape))
-     in_shape = rgb.shape
--    rgb = np.array(
--        rgb, copy=False, dtype=np.dtype(float), ndmin=2
--    )
-+    rgb = np.asarray(rgb, dtype=np.dtype(float))
-     rgb_max = rgb.max(-1)
-     rgb_min = rgb.min(-1)
-     l = (rgb_max + rgb_min)/2.0  # lightness
- 
-     hls = np.zeros_like(rgb)
--    delta = rgb.ptp(-1)
-+    delta = np.ptp(rgb, -1)
-     s = np.zeros_like(delta)
- 
-     ipos = delta > 0
-diff --git a/src/sage/plot/graphics.py b/src/sage/plot/graphics.py
-index a84d162cb56..94f5db09d83 100644
---- a/src/sage/plot/graphics.py
-+++ b/src/sage/plot/graphics.py
-@@ -2754,7 +2754,7 @@ def matplotlib(self, filename=None,
-             sage: xmin, xmax = sub.get_xlim()
-             sage: ymin, ymax = sub.get_ylim()
-             sage: xmin > xmax, ymin > ymax
--            (True, True)
-+            (...True..., ...True...)
-         """
-         if not isinstance(ticks, (list, tuple)):
-             ticks = (ticks, None)
-diff --git a/src/sage/plot/histogram.py b/src/sage/plot/histogram.py
-index fa86a44bd0a..a585cacf9cd 100644
---- a/src/sage/plot/histogram.py
-+++ b/src/sage/plot/histogram.py
-@@ -92,6 +92,8 @@ def get_minmax_data(self):
-             {'xmax': 10.0, 'xmin': 3.0, 'ymax': 0.476190476190..., 'ymin': 0}
-         """
-         import numpy
-+        if int(numpy.version.short_version[0]) > 1:
-+            numpy.set_printoptions(legacy="1.25")
- 
-         # Extract these options (if they are not None) and pass them to
-         # histogram()
-diff --git a/src/sage/plot/multigraphics.py b/src/sage/plot/multigraphics.py
-index b583be32317..6be448f1e04 100644
---- a/src/sage/plot/multigraphics.py
-+++ b/src/sage/plot/multigraphics.py
-@@ -784,6 +784,9 @@ def _add_subplot(self, figure, index, **options):
-             True
-             sage: G.position(1)
-             (0.2, 0.3, 0.4, 0.1)
-+            sage: import numpy  # to ensure numpy 2.0 compatibility
-+            sage: if int(numpy.version.short_version[0]) > 1:
-+            ....:     numpy.set_printoptions(legacy="1.25")
-             sage: ax1.get_position().bounds  # tol 1.0e-13
-             (0.2, 0.3, 0.4000000000000001, 0.10000000000000003)
- 
-@@ -1295,6 +1298,9 @@ def position(self, index):
-             sage: g1 = plot(sin(x), (x, -pi, pi))
-             sage: g2 = circle((0,1), 1.)
-             sage: G = graphics_array([g1, g2])
-+            sage: import numpy  # to ensure numpy 2.0 compatibility
-+            sage: if int(numpy.version.short_version[0]) > 1:
-+            ....:     numpy.set_printoptions(legacy="1.25")
-             sage: G.position(0)  # tol 5.0e-3
-             (0.025045451349937315,
-              0.03415488992713045,
-diff --git a/src/sage/plot/plot3d/implicit_surface.pyx b/src/sage/plot/plot3d/implicit_surface.pyx
-index ce0da48a4e0..f4d5059b620 100644
---- a/src/sage/plot/plot3d/implicit_surface.pyx
-+++ b/src/sage/plot/plot3d/implicit_surface.pyx
-@@ -468,6 +468,7 @@ cdef class MarchingCubesTriangles(MarchingCubes):
-             sage: cube_marcher.y_vertices.tolist()
-             [[[<1.0, 0.5, 0.0>, None]], [[None, None]]]
-             sage: cube_marcher.x_vertices.any() # This shouldn't affect the X vertices.
-+            ...
-         """
-         (self.y_vertices, self.y_vertices_swapped) = \
-             (self.y_vertices_swapped, self.y_vertices)
-@@ -574,6 +575,7 @@ cdef class MarchingCubesTriangles(MarchingCubes):
-             sage: cube_marcher.x_vertices.tolist()
-             [[None, None], [None, <1.5, 1.0, 1.0>]]
-             sage: cube_marcher.y_vertices.any() or cube_marcher.z_vertices.any() # This shouldn't affect the Y or Z vertices.
-+            ...
-         """
-         cdef bint has_prev = (_prev is not None)
-         cdef bint has_next = (_next is not None)
-diff --git a/src/sage/plot/scatter_plot.py b/src/sage/plot/scatter_plot.py
-index 4ad418f040b..781854d372c 100644
---- a/src/sage/plot/scatter_plot.py
-+++ b/src/sage/plot/scatter_plot.py
-@@ -63,9 +63,9 @@ def get_minmax_data(self):
-             sage: s = scatter_plot([[0,1],[2,4],[3.2,6]])
-             sage: d = s.get_minmax_data()
-             sage: d['xmin']
--            0.0
-+            ...0.0...
-             sage: d['ymin']
--            1.0
-+            ...1.0...
-         """
-         return {'xmin': self.xdata.min(),
-                 'xmax': self.xdata.max(),
-diff --git a/src/sage/plot/streamline_plot.py b/src/sage/plot/streamline_plot.py
-index 663d3aee70b..d2cb11088c7 100644
---- a/src/sage/plot/streamline_plot.py
-+++ b/src/sage/plot/streamline_plot.py
-@@ -71,6 +71,9 @@ def get_minmax_data(self):
-         EXAMPLES::
- 
-             sage: x, y = var('x y')
-+            sage: import numpy  # to ensure numpy 2.0 compatibility
-+            sage: if int(numpy.version.short_version[0]) > 1:
-+            ....:     numpy.set_printoptions(legacy="1.25")
-             sage: d = streamline_plot((.01*x, x+y), (x,10,20), (y,10,20))[0].get_minmax_data()
-             sage: d['xmin']
-             10.0
-diff --git a/src/sage/probability/probability_distribution.pyx b/src/sage/probability/probability_distribution.pyx
-index e2c71af9c25..59ba4a95ab6 100644
---- a/src/sage/probability/probability_distribution.pyx
-+++ b/src/sage/probability/probability_distribution.pyx
-@@ -140,6 +140,9 @@ cdef class ProbabilityDistribution:
-              1.8,
-              2.0]
-         """
-+        import numpy as np
-+        if int(np.version.short_version[0]) > 1:
-+            np.set_printoptions(legacy="1.25")
-         import pylab
-         ell = [float(self.get_random_element()) for _ in range(num_samples)]
-         S = pylab.hist(ell, bins, density=True)
-diff --git a/src/sage/rings/complex_double.pyx b/src/sage/rings/complex_double.pyx
-index c59a2b46d6f..b4dddebb4dc 100644
---- a/src/sage/rings/complex_double.pyx
-+++ b/src/sage/rings/complex_double.pyx
-@@ -2558,10 +2558,10 @@ cdef class ComplexToCDF(Morphism):
- 
-         sage: # needs numpy
-         sage: import numpy
--        sage: f = CDF.coerce_map_from(numpy.complex_)
--        sage: f(numpy.complex_(I))
-+        sage: f = CDF.coerce_map_from(numpy.complex128)
-+        sage: f(numpy.complex128(I))
-         1.0*I
--        sage: f(numpy.complex_(I)).parent()
-+        sage: f(numpy.complex128(I)).parent()
-         Complex Double Field
-     """
-     def __init__(self, R):
-@@ -2578,7 +2578,7 @@ cdef class ComplexToCDF(Morphism):
-         EXAMPLES::
- 
-             sage: import numpy                                                          # needs numpy
--            sage: CDF(numpy.complex_(I))    # indirect doctest                          # needs numpy
-+            sage: CDF(numpy.complex128(I))    # indirect doctest                          # needs numpy
-             1.0*I
-         """
-         cdef ComplexDoubleElement z = <ComplexDoubleElement>ComplexDoubleElement.__new__(ComplexDoubleElement)
-@@ -2592,7 +2592,7 @@ cdef class ComplexToCDF(Morphism):
-         EXAMPLES::
- 
-             sage: import numpy                                                          # needs numpy
--            sage: f = sage.rings.complex_double.ComplexToCDF(numpy.complex_)            # needs numpy
-+            sage: f = sage.rings.complex_double.ComplexToCDF(numpy.complex128)          # needs numpy
-             sage: f._repr_type()                                                        # needs numpy
-             'Native'
-         """
-diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx
-index b4a1fa5039b..38c30f7627b 100644
---- a/src/sage/rings/integer.pyx
-+++ b/src/sage/rings/integer.pyx
-@@ -593,6 +593,8 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
-         Test comparisons with numpy types (see :issue:`13386` and :issue:`18076`)::
- 
-             sage: import numpy                                                          # needs numpy
-+            sage: if int(numpy.version.short_version[0]) > 1:                           # needs numpy
-+            ....:     numpy.set_printoptions(legacy="1.25")                             # needs numpy
-             sage: numpy.int8('12') == 12                                                # needs numpy
-             True
-             sage: 12 == numpy.int8('12')                                                # needs numpy
-diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx
-index dcf2af7cdf2..c87eccd44f1 100644
---- a/src/sage/rings/polynomial/polynomial_element.pyx
-+++ b/src/sage/rings/polynomial/polynomial_element.pyx
-@@ -8851,7 +8851,7 @@ cdef class Polynomial(CommutativePolynomial):
-                          'you expect.')
- 
-                 import numpy
--                from numpy.linalg.linalg import LinAlgError
-+                from numpy.linalg import LinAlgError
-                 from sage.rings.complex_double import CDF
- 
-                 numpy_dtype = ('complex' if input_complex else 'double')
-diff --git a/src/sage/rings/real_mpfi.pyx b/src/sage/rings/real_mpfi.pyx
-index 95b472e912c..76fbfedab95 100644
---- a/src/sage/rings/real_mpfi.pyx
-+++ b/src/sage/rings/real_mpfi.pyx
-@@ -231,6 +231,8 @@ specified if given a non-interval and an interval::
- TESTS::
- 
-     sage: import numpy                                                                  # needs numpy
-+    sage: if int(numpy.version.short_version[0]) > 1:                                   # needs numpy
-+    ....:     numpy.set_printoptions(legacy="1.25")                                     # needs numpy
-     sage: RIF(2) == numpy.int8('2')                                                     # needs numpy
-     True
-     sage: numpy.int8('2') == RIF(2)                                                     # needs numpy
-diff --git a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
-index 8f240627e77..70ce616f92f 100644
---- a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
-+++ b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
-@@ -77,6 +77,8 @@ cdef class PeriodicRegion:
-         EXAMPLES::
- 
-             sage: import numpy as np
-+            sage: if int(np.version.short_version[0]) > 1:
-+            ....:     np.set_printoptions(legacy="1.25")
-             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
-             sage: data = np.zeros((4, 4))
-             sage: PeriodicRegion(CDF(2), CDF(2*I), data).is_empty()
-@@ -295,6 +297,8 @@ cdef class PeriodicRegion:
-         EXAMPLES::
- 
-             sage: import numpy as np
-+            sage: if int(np.version.short_version[0]) > 1:
-+            ....:     np.set_printoptions(legacy="1.25")
-             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
-             sage: data = np.zeros((10, 10))
-             sage: data[1:4,1:4] = True
-@@ -317,6 +321,8 @@ cdef class PeriodicRegion:
-         EXAMPLES::
- 
-             sage: import numpy as np
-+            sage: if int(np.version.short_version[0]) > 1:
-+            ....:     np.set_printoptions(legacy="1.25")
-             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
-             sage: data = np.zeros((4, 4))
-             sage: data[1,1] = True
-@@ -370,6 +376,8 @@ cdef class PeriodicRegion:
-         EXAMPLES::
- 
-             sage: import numpy as np
-+            sage: if int(np.version.short_version[0]) > 1:
-+            ....:     np.set_printoptions(legacy="1.25")
-             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
- 
-             sage: data = np.zeros((20, 20))
-@@ -520,6 +528,8 @@ cdef class PeriodicRegion:
-         TESTS::
- 
-             sage: import numpy as np
-+            sage: if int(np.version.short_version[0]) > 1:
-+            ....:     np.set_printoptions(legacy="1.25")
-             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
-             sage: data = np.zeros((4, 4))
-             sage: data[1, 1] = True
-diff --git a/src/sage/stats/basic_stats.py b/src/sage/stats/basic_stats.py
-index b2e6b301bf7..6937f6cb410 100644
---- a/src/sage/stats/basic_stats.py
-+++ b/src/sage/stats/basic_stats.py
-@@ -227,6 +227,8 @@ def std(v, bias=False):
- 
-         sage: # needs numpy
-         sage: import numpy
-+        sage: if int(numpy.version.short_version[0]) > 1:
-+        ....:     numpy.set_printoptions(legacy="1.25")
-         sage: x = numpy.array([1,2,3,4,5])
-         sage: std(x, bias=False)
-         1.5811388300841898
-@@ -304,6 +306,8 @@ def variance(v, bias=False):
-         sage: variance([RIF(1.0103, 1.0103), RIF(2)])
-         0.4897530450000000?
-         sage: import numpy                                                              # needs numpy
-+        sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
-+        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
-         sage: x = numpy.array([1,2,3,4,5])                                              # needs numpy
-         sage: variance(x, bias=False)                                                   # needs numpy
-         2.5
-diff --git a/src/sage/stats/time_series.pyx b/src/sage/stats/time_series.pyx
-index 2e22ec45c69..23adae84fb4 100644
---- a/src/sage/stats/time_series.pyx
-+++ b/src/sage/stats/time_series.pyx
-@@ -1718,6 +1718,8 @@ cdef class TimeSeries:
-         if len(v0) == 1:
-             return v1[0]/v0[0]
-         import numpy
-+        if int(numpy.version.short_version[0]) > 1:
-+            numpy.set_printoptions(legacy="1.25")
-         coeffs = numpy.polyfit(v0,v1,1)
-         return coeffs[0]
- 
-diff --git a/src/sage/structure/coerce.pyx b/src/sage/structure/coerce.pyx
-index dfbd5ff82fa..955a256e9b4 100644
---- a/src/sage/structure/coerce.pyx
-+++ b/src/sage/structure/coerce.pyx
-@@ -520,6 +520,8 @@ cdef class CoercionModel:
-     Check that :issue:`8426` is fixed (see also :issue:`18076`)::
- 
-         sage: import numpy                                                              # needs numpy
-+        sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
-+        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
- 
-         sage: # needs sage.rings.real_mpfr
-         sage: x = polygen(RR)
-diff --git a/src/sage/symbolic/function.pyx b/src/sage/symbolic/function.pyx
-index 2cb2f09c715..cd89ad2a256 100644
---- a/src/sage/symbolic/function.pyx
-+++ b/src/sage/symbolic/function.pyx
-@@ -964,6 +964,9 @@ cdef class BuiltinFunction(Function):
-             mpc(real='0.83373002513114902', imag='-0.98889770576286506')
- 
-             sage: import numpy                                                          # needs numpy
-+            sage: if int(numpy.version.short_version[0]) > 1:                           # needs numpy
-+            ....:     numpy.set_printoptions(legacy="1.25")                             # needs numpy
-+
-             sage: sin(numpy.int32(0))                                                   # needs numpy
-             0.0
-             sage: type(_)                                                               # needs numpy
-diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx
-index 501b0920898..5b007d9e5fd 100644
---- a/src/sage/symbolic/ring.pyx
-+++ b/src/sage/symbolic/ring.pyx
-@@ -1162,6 +1162,8 @@ cdef class NumpyToSRMorphism(Morphism):
-     We check that :issue:`8949` and :issue:`9769` are fixed (see also :issue:`18076`)::
- 
-         sage: import numpy                                                              # needs numpy
-+        sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
-+        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
-         sage: f(x) = x^2
-         sage: f(numpy.int8('2'))                                                        # needs numpy
-         4
diff --git a/srcpkgs/sagemath/patches/38344-ecm_7.0.6.patch b/srcpkgs/sagemath/patches/38344-ecm_7.0.6.patch
deleted file mode 100644
index db0ae9030623b6..00000000000000
--- a/srcpkgs/sagemath/patches/38344-ecm_7.0.6.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff --git a/src/sage/interfaces/ecm.py b/src/sage/interfaces/ecm.py
-index 99287dec718..98011970404 100644
---- a/src/sage/interfaces/ecm.py
-+++ b/src/sage/interfaces/ecm.py
-@@ -508,7 +508,6 @@ def _find_factor(self, n, factor_digits, B1, **kwds):
-         """
-         n = self._validate(n)
-         kwds.setdefault('c', 1000000000)
--        kwds.setdefault('I', 1)
-         if factor_digits is not None:
-             B1 = self.recommended_B1(factor_digits)
-         kwds['one'] = True
-diff --git a/src/sage/libs/libecm.pyx b/src/sage/libs/libecm.pyx
-index 886a9b816e4..83fb7adaf8d 100644
---- a/src/sage/libs/libecm.pyx
-+++ b/src/sage/libs/libecm.pyx
-@@ -149,11 +149,13 @@ def ecmfactor(number, double B1, verbose=False, sigma=0):
-     Some special cases::
- 
-         sage: ecmfactor(1, 100)
--        (True, 1, ...)
-+        Traceback (most recent call last):
-+        ...
-+        ValueError: Input number (1) must be greater than 1
-         sage: ecmfactor(0, 100)
-         Traceback (most recent call last):
-         ...
--        ValueError: Input number (0) must be positive
-+        ValueError: Input number (0) must be greater than 1
-     """
-     cdef mpz_t n, f
-     cdef int res
-@@ -164,8 +166,8 @@ def ecmfactor(number, double B1, verbose=False, sigma=0):
-     sage_int_number = Integer(number)
-     sage_int_sigma = Integer(sigma)
- 
--    if number <= 0:
--        raise ValueError("Input number (%s) must be positive"%number)
-+    if number <= 1:
-+        raise ValueError("Input number (%s) must be greater than 1"%number)
- 
-     if verbose:
-         print("Performing one curve with B1=%1.0f" % B1)
diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches
index 28162dff8a38e1..5cab228f286365 100755
--- a/srcpkgs/sagemath/patches/get_patches
+++ b/srcpkgs/sagemath/patches/get_patches
@@ -19,7 +19,7 @@ get_pr() {
 	echo "curl -sL \"$url\" | filterdiff ... > \"$pr-$desc.patch\""
 	if [ -z "$dry" ]; then
 		curl -sL "$url" |
-			filterdiff -p1 -x src/setup.py -x build/* -x src/doc/* |
+			filterdiff -p1 -x src/setup.py -x environment* -x src/environment* -x build/* -x src/doc/* |
 			cat > "$pr-$desc.patch"
 	fi
 }
@@ -29,8 +29,6 @@ cd $(dirname "$0")
 
 get_pr 36641 "sympy 1.13"
 get_pr 37884 "gap 4.13.1"
-get_pr 38250 "numpy 2.0"
-get_pr 38344 "ecm 7.0.6"
 
 #get_pr 37645 "fix doctest"
 #get_pr 37885 "cython warnings"
diff --git a/srcpkgs/sagemath/template b/srcpkgs/sagemath/template
index befe33a0188687..f5e1d8c68cfcbe 100644
--- a/srcpkgs/sagemath/template
+++ b/srcpkgs/sagemath/template
@@ -1,7 +1,7 @@
 # Template file for 'sagemath'
 pkgname=sagemath
-version=10.4
-revision=2
+version=10.5.beta2
+revision=1
 _pypi_version=${version/.beta/b}
 _pypi_version=${_pypi_version/.rc/rc}
 build_style=python3-pep517
@@ -25,14 +25,14 @@ depends="eclib-devel fflas-ffpack flintlib-devel gcc-fortran meson gd-devel
  python3-sympy python3-traitlets sage-data-combinatorial_designs
  python3-conway-polynomials sage-data-elliptic_curves sage-data-graphs
  sage-data-polytopes_db sympow tachyon threejs-sage"
-checkdepends="$depends pythran python3-Sphinx gdb"
+checkdepends="$depends python3-pytest pythran python3-Sphinx gdb"
 short_desc="Open source mathematics software"
 maintainer="Gonzalo Tornaría <tornaria@cmat.edu.uy>"
 license="GPL-2.0-or-later"
 homepage="https://www.sagemath.org/"
 changelog="https://github.com/sagemath/sage/releases"
 distfiles="${PYPI_SITE}/s/sagemath-standard/sagemath_standard-${_pypi_version}.tar.gz"
-checksum=f6579e85f33bd9bb6e9b991bfc4c49dab1e649858ed9ee41c7cec75cb92d4c62
+checksum=0fe0c82dd6959951fc07d55737d270290f64947e183a403ca25709e21b751dee
 nocross="due to ntl (eclib, singular), fflas-ffpack, givaro, linbox, sympow, maxima"
 
 # main repo `.../src/sage/`  is `.../sage/` here

From eb7df4a9f682cf046b5c9666b666cb2d7e8d9a3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Wed, 14 Aug 2024 00:12:02 -0300
Subject: [PATCH 3/6] sagemath: enable all cython warnings

---
 srcpkgs/sagemath/patches/37885-cython_warnings.patch | 12 ++++++++++++
 srcpkgs/sagemath/patches/get_patches                 |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/sagemath/patches/37885-cython_warnings.patch

diff --git a/srcpkgs/sagemath/patches/37885-cython_warnings.patch b/srcpkgs/sagemath/patches/37885-cython_warnings.patch
new file mode 100644
index 00000000000000..fa4b648cfc1577
--- /dev/null
+++ b/srcpkgs/sagemath/patches/37885-cython_warnings.patch
@@ -0,0 +1,12 @@
+diff --git a/src/sage_setup/command/sage_build_cython.py b/src/sage_setup/command/sage_build_cython.py
+index f4b1357c543..3435c196d49 100644
+--- a/src/sage_setup/command/sage_build_cython.py
++++ b/src/sage_setup/command/sage_build_cython.py
+@@ -226,6 +226,7 @@ def run(self):
+                 compiler_directives=self.cython_directives,
+                 compile_time_env=self.compile_time_env,
+                 create_extension=self.create_extension,
++                show_all_warnings=True,
+                 # Debugging
+                 gdb_debug=self.debug,
+                 output_dir=os.path.join(self.build_lib, "sage"),
diff --git a/srcpkgs/sagemath/patches/get_patches b/srcpkgs/sagemath/patches/get_patches
index 5cab228f286365..c182576ea553cd 100755
--- a/srcpkgs/sagemath/patches/get_patches
+++ b/srcpkgs/sagemath/patches/get_patches
@@ -31,4 +31,4 @@ get_pr 36641 "sympy 1.13"
 get_pr 37884 "gap 4.13.1"
 
 #get_pr 37645 "fix doctest"
-#get_pr 37885 "cython warnings"
+get_pr 37885 "cython warnings"

From 6831717a594328f0a6efe163da56f2cf7802e040 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Mon, 19 Aug 2024 17:35:53 -0300
Subject: [PATCH 4/6] python3-numpy: update to 2.1.0.

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

diff --git a/srcpkgs/python3-numpy/template b/srcpkgs/python3-numpy/template
index cab4e3e506df30..7d0e493b32c5bb 100644
--- a/srcpkgs/python3-numpy/template
+++ b/srcpkgs/python3-numpy/template
@@ -1,6 +1,6 @@
 # Template file for 'python3-numpy'
 pkgname=python3-numpy
-version=2.0.1
+version=2.1.0
 revision=1
 build_style=python3-pep517
 build_helper="meson qemu"
@@ -19,7 +19,7 @@ license="BSD-3-Clause"
 homepage="https://www.numpy.org/"
 changelog="https://github.com/numpy/numpy/releases"
 distfiles="${PYPI_SITE}/n/numpy/numpy-${version}.tar.gz"
-checksum=485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3
+checksum=7dc90da0081f7e1da49ec4e398ede6a8e9cc4f5ebe5f9e06b443ed889ee9aaa2
 alternatives="numpy:f2py:/usr/bin/f2py3"
 
 build_options="openblas"

From 33e6757c9f86da2ddf02a07cfd90ec7eb32f86a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Mon, 19 Aug 2024 22:02:54 -0300
Subject: [PATCH 5/6] flintlib: C99 compliance

---
 srcpkgs/flintlib/patches/2027.patch | 322 ++++++++++++++++++++++++++++
 srcpkgs/flintlib/template           |   2 +-
 2 files changed, 323 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/flintlib/patches/2027.patch

diff --git a/srcpkgs/flintlib/patches/2027.patch b/srcpkgs/flintlib/patches/2027.patch
new file mode 100644
index 00000000000000..f17ff31f2754d7
--- /dev/null
+++ b/srcpkgs/flintlib/patches/2027.patch
@@ -0,0 +1,322 @@
+See: https://github.com/flintlib/flint/pull/2027
+
+From 1b93e73d00881be12e04b7f13e070214a3c9e1cc Mon Sep 17 00:00:00 2001
+From: Dima Pasechnik <dima@pasechnik.info>
+Date: Wed, 19 Jun 2024 22:16:34 +0100
+Subject: [PATCH] ensure C99 compliance in headers, as 'I' is reserved
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Note that the following code
+---- cut here: save as t.c
+---- cut here
+
+fails to compile with a suffciently new compiler, e.g. clang 16 or gcc 14.
+
+$ gcc -c t.c
+In file included from t.c:1:
+/usr/include/flint/mpoly.h:1319:43: error: expected ‘)’ before ‘__extension__’
+ 1319 | void mpoly_gcd_info_init(mpoly_gcd_info_t I, slong nvars);
+      |                                           ^
+In file included from /usr/include/flint/fmpz_types.h:15,
+                 from /usr/include/flint/fmpz_mod_types.h:15,
+                 from /usr/include/flint/mpoly_types.h:15,
+                 from /usr/include/flint/mpoly.h:23,
+                 from t.c:2:
+/usr/include/flint/mpoly.h:1319:46: error: expected ‘;’, ‘,’ or ‘)’ before ‘mp_limb_signed_t’
+ 1319 | void mpoly_gcd_info_init(mpoly_gcd_info_t I, slong nvars);
+
+...
+---
+ src/fft_small.h             |  6 +++---
+ src/fmpz_mod_mpoly_factor.h |  8 ++++----
+ src/fmpz_mpoly.h            |  2 +-
+ src/fmpz_mpoly_factor.h     | 18 +++++++++---------
+ src/fq_nmod_mpoly_factor.h  |  6 +++---
+ src/fq_zech_mpoly_factor.h  |  6 +++---
+ src/mpoly.h                 | 18 +++++++++---------
+ src/nmod_mpoly.h            |  4 ++--
+ src/nmod_mpoly_factor.h     |  6 +++---
+ 9 files changed, 37 insertions(+), 37 deletions(-)
+
+diff --git a/src/fft_small.h b/src/fft_small.h
+index 3f62f2e988..b7404f196d 100644
+--- a/src/fft_small.h
++++ b/src/fft_small.h
+@@ -242,10 +242,10 @@ FLINT_INLINE double sd_fft_ctx_get_fft_index(double* d, ulong i)
+ }
+ 
+ /* sd_fft.c */
+-void sd_fft_trunc(const sd_fft_lctx_t Q, ulong I, ulong S, ulong k, ulong j, ulong itrunc, ulong otrunc);
++void sd_fft_trunc(const sd_fft_lctx_t Q, ulong Iv, ulong S, ulong k, ulong j, ulong itrunc, ulong otrunc);
+ 
+ /* sd_ifft.c */
+-void sd_ifft_trunc(const sd_fft_lctx_t Q, ulong I, ulong S, ulong k, ulong j, ulong z, ulong n, int f);
++void sd_ifft_trunc(const sd_fft_lctx_t Q, ulong Iv, ulong S, ulong k, ulong j, ulong z, ulong n, int f);
+ 
+ /* sd_fft_ctx.c */
+ void sd_fft_ctx_clear(sd_fft_ctx_t Q);
+@@ -428,7 +428,7 @@ typedef struct {
+ 
+ typedef mpn_ctx_struct mpn_ctx_t[1];
+ 
+-void _convert_block(ulong* Xs, sd_fft_ctx_struct* Rffts, double* d, ulong dstride, ulong np, ulong I);
++void _convert_block(ulong* Xs, sd_fft_ctx_struct* Rffts, double* d, ulong dstride, ulong np, ulong Iv);
+ ulong flint_mpn_nbits(const ulong* a, ulong an);
+ int flint_mpn_cmp_ui_2exp(const ulong* a, ulong an, ulong b, ulong e);
+ unsigned char flint_mpn_add_inplace_c(ulong* z, ulong zn, ulong* a, ulong an, unsigned char cf);
+diff --git a/src/fmpz_mod_mpoly_factor.h b/src/fmpz_mod_mpoly_factor.h
+index 359fdd1e3d..460695dd23 100644
+--- a/src/fmpz_mod_mpoly_factor.h
++++ b/src/fmpz_mod_mpoly_factor.h
+@@ -1203,15 +1203,15 @@ typedef struct {
+ typedef fmpz_mod_mpoly_pfrac_struct fmpz_mod_mpoly_pfrac_t[1];
+ 
+ 
+-int fmpz_mod_mpoly_pfrac_init(fmpz_mod_mpoly_pfrac_t I,
++int fmpz_mod_mpoly_pfrac_init(fmpz_mod_mpoly_pfrac_t Iv,
+     flint_bitcnt_t bits, slong l, slong r, const fmpz_mod_mpoly_struct * betas,
+                           const fmpz * alpha, const fmpz_mod_mpoly_ctx_t ctx);
+ 
+-void fmpz_mod_mpoly_pfrac_clear(fmpz_mod_mpoly_pfrac_t I,
++void fmpz_mod_mpoly_pfrac_clear(fmpz_mod_mpoly_pfrac_t Iv,
+                                               const fmpz_mod_mpoly_ctx_t ctx);
+ 
+ int fmpz_mod_mpoly_pfrac(slong r, fmpz_mod_mpoly_t t, const slong * deg,
+-                     fmpz_mod_mpoly_pfrac_t I, const fmpz_mod_mpoly_ctx_t ctx);
++                     fmpz_mod_mpoly_pfrac_t Iv, const fmpz_mod_mpoly_ctx_t ctx);
+ 
+ int fmpz_mod_mpoly_hlift(slong m, fmpz_mod_mpoly_struct * f, slong r,
+             const fmpz * alpha, const fmpz_mod_mpoly_t A, const slong * degs,
+@@ -1290,7 +1290,7 @@ int fmpz_mod_mpolyn_gcd_brown_smprime(
+     fmpz_mod_mpolyn_t B,
+     slong var,
+     const fmpz_mod_mpoly_ctx_t ctx,
+-    const mpoly_gcd_info_t I,
++    const mpoly_gcd_info_t Iv,
+     fmpz_mod_poly_polyun_mpolyn_stack_t St);
+ 
+ int fmpz_mod_mpolyl_gcdp_zippel(
+diff --git a/src/fmpz_mpoly.h b/src/fmpz_mpoly.h
+index b7c9677915..4be3d05c56 100644
+--- a/src/fmpz_mpoly.h
++++ b/src/fmpz_mpoly.h
+@@ -1084,7 +1084,7 @@ void fmpz_mpoly_vec_randtest_not_zero(fmpz_mpoly_vec_t vec, flint_rand_t state,
+ 
+ void fmpz_mpoly_spoly(fmpz_mpoly_t res, const fmpz_mpoly_t f, const fmpz_mpoly_t g, const fmpz_mpoly_ctx_t ctx);
+ void fmpz_mpoly_vec_set_primitive_unique(fmpz_mpoly_vec_t G, const fmpz_mpoly_vec_t F, const fmpz_mpoly_ctx_t ctx);
+-void fmpz_mpoly_reduction_primitive_part(fmpz_mpoly_t res, const fmpz_mpoly_t f, const fmpz_mpoly_vec_t I, const fmpz_mpoly_ctx_t ctx);
++void fmpz_mpoly_reduction_primitive_part(fmpz_mpoly_t res, const fmpz_mpoly_t f, const fmpz_mpoly_vec_t Iv, const fmpz_mpoly_ctx_t ctx);
+ int fmpz_mpoly_vec_is_groebner(const fmpz_mpoly_vec_t G, const fmpz_mpoly_vec_t F, const fmpz_mpoly_ctx_t ctx);
+ void fmpz_mpoly_buchberger_naive(fmpz_mpoly_vec_t G, const fmpz_mpoly_vec_t F, const fmpz_mpoly_ctx_t ctx);
+ int fmpz_mpoly_buchberger_naive_with_limits(fmpz_mpoly_vec_t G, const fmpz_mpoly_vec_t F,
+diff --git a/src/fmpz_mpoly_factor.h b/src/fmpz_mpoly_factor.h
+index 0da7c1052b..a04ef8021e 100644
+--- a/src/fmpz_mpoly_factor.h
++++ b/src/fmpz_mpoly_factor.h
+@@ -298,11 +298,11 @@ void fmpz_mpoly_from_mpolyl_perm_inflate(fmpz_mpoly_t A,
+ 
+ int fmpz_mpolyl_gcd_brown(fmpz_mpoly_t G,
+         fmpz_mpoly_t Abar, fmpz_mpoly_t Bbar, fmpz_mpoly_t A, fmpz_mpoly_t B,
+-                         const fmpz_mpoly_ctx_t ctx, const mpoly_gcd_info_t I);
++                         const fmpz_mpoly_ctx_t ctx, const mpoly_gcd_info_t Iv);
+ 
+ int fmpz_mpolyl_gcd_brown_threaded_pool(fmpz_mpoly_t G,
+         fmpz_mpoly_t Abar, fmpz_mpoly_t Bbar, fmpz_mpoly_t A, fmpz_mpoly_t B,
+-                         const fmpz_mpoly_ctx_t ctx, const mpoly_gcd_info_t I,
++                         const fmpz_mpoly_ctx_t ctx, const mpoly_gcd_info_t Iv,
+                         const thread_pool_handle * handles, slong num_handles);
+ 
+ int fmpz_mpolyl_gcd_zippel(fmpz_mpoly_t G, fmpz_mpoly_t Abar,
+@@ -340,15 +340,15 @@ typedef struct {
+ 
+ typedef fmpz_poly_pfrac_struct fmpz_poly_pfrac_t[1];
+ 
+-void fmpz_poly_pfrac_init(fmpz_poly_pfrac_t I);
++void fmpz_poly_pfrac_init(fmpz_poly_pfrac_t Iv);
+ 
+-void fmpz_poly_pfrac_clear(fmpz_poly_pfrac_t I);
++void fmpz_poly_pfrac_clear(fmpz_poly_pfrac_t Iv);
+ 
+-int fmpz_poly_pfrac_precompute(fmpz_poly_pfrac_t I,
++int fmpz_poly_pfrac_precompute(fmpz_poly_pfrac_t Iv,
+                                           const fmpz_poly_struct * b, slong r);
+ 
+ int fmpz_poly_pfrac_precomp(fmpz_poly_struct * c,
+-                                     const fmpz_poly_t A, fmpz_poly_pfrac_t I);
++                                     const fmpz_poly_t A, fmpz_poly_pfrac_t Iv);
+ 
+ typedef struct {
+     flint_bitcnt_t bits;
+@@ -372,15 +372,15 @@ typedef struct {
+ 
+ typedef fmpz_mpoly_pfrac_struct fmpz_mpoly_pfrac_t[1];
+ 
+-int fmpz_mpoly_pfrac_init(fmpz_mpoly_pfrac_t I, flint_bitcnt_t bits,
++int fmpz_mpoly_pfrac_init(fmpz_mpoly_pfrac_t Iv, flint_bitcnt_t bits,
+                             slong r, slong w, const fmpz_mpoly_struct * betas,
+                                const fmpz * alpha, const fmpz_mpoly_ctx_t ctx);
+ 
+-void fmpz_mpoly_pfrac_clear(fmpz_mpoly_pfrac_t I,
++void fmpz_mpoly_pfrac_clear(fmpz_mpoly_pfrac_t Iv,
+                                                    const fmpz_mpoly_ctx_t ctx);
+ 
+ int fmpz_mpoly_pfrac(slong l, fmpz_mpoly_t t, const slong * degs,
+-                             fmpz_mpoly_pfrac_t I, const fmpz_mpoly_ctx_t ctx);
++                             fmpz_mpoly_pfrac_t Iv, const fmpz_mpoly_ctx_t ctx);
+ 
+ int fmpz_mpoly_hlift(slong m, fmpz_mpoly_struct * f, slong r,
+                 const fmpz * alpha, const fmpz_mpoly_t A, const slong * degs,
+diff --git a/src/fq_nmod_mpoly_factor.h b/src/fq_nmod_mpoly_factor.h
+index 6289d3f1c5..29caa99aa4 100644
+--- a/src/fq_nmod_mpoly_factor.h
++++ b/src/fq_nmod_mpoly_factor.h
+@@ -427,7 +427,7 @@ typedef fq_nmod_mpoly_pfrac_struct fq_nmod_mpoly_pfrac_t[1];
+ 
+ 
+ int fq_nmod_mpoly_pfrac_init(
+-    fq_nmod_mpoly_pfrac_t I,
++    fq_nmod_mpoly_pfrac_t Iv,
+     flint_bitcnt_t bits,
+     slong l, slong r,
+     const fq_nmod_mpoly_struct * betas,
+@@ -435,14 +435,14 @@ int fq_nmod_mpoly_pfrac_init(
+     const fq_nmod_mpoly_ctx_t ctx);
+ 
+ void fq_nmod_mpoly_pfrac_clear(
+-    fq_nmod_mpoly_pfrac_t I,
++    fq_nmod_mpoly_pfrac_t Iv,
+     const fq_nmod_mpoly_ctx_t ctx);
+ 
+ int fq_nmod_mpoly_pfrac(
+     slong r,
+     fq_nmod_mpoly_t t,
+     const slong * deg,
+-    fq_nmod_mpoly_pfrac_t I,
++    fq_nmod_mpoly_pfrac_t Iv,
+     const fq_nmod_mpoly_ctx_t ctx);
+ 
+ int fq_nmod_mpoly_hlift(
+diff --git a/src/fq_zech_mpoly_factor.h b/src/fq_zech_mpoly_factor.h
+index 06f31369f9..3d3c51419f 100644
+--- a/src/fq_zech_mpoly_factor.h
++++ b/src/fq_zech_mpoly_factor.h
+@@ -652,7 +652,7 @@ typedef fq_zech_mpoly_pfrac_struct fq_zech_mpoly_pfrac_t[1];
+ 
+ 
+ int fq_zech_mpoly_pfrac_init(
+-    fq_zech_mpoly_pfrac_t I,
++    fq_zech_mpoly_pfrac_t Iv,
+     flint_bitcnt_t bits,
+     slong l, slong r,
+     const fq_zech_mpoly_struct * betas,
+@@ -660,14 +660,14 @@ int fq_zech_mpoly_pfrac_init(
+     const fq_zech_mpoly_ctx_t ctx);
+ 
+ void fq_zech_mpoly_pfrac_clear(
+-    fq_zech_mpoly_pfrac_t I,
++    fq_zech_mpoly_pfrac_t Iv,
+     const fq_zech_mpoly_ctx_t ctx);
+ 
+ int fq_zech_mpoly_pfrac(
+     slong r,
+     fq_zech_mpoly_t t,
+     const slong * deg,
+-    fq_zech_mpoly_pfrac_t I,
++    fq_zech_mpoly_pfrac_t Iv,
+     const fq_zech_mpoly_ctx_t ctx);
+ 
+ int fq_zech_mpoly_hlift(
+diff --git a/src/mpoly.h b/src/mpoly.h
+index b0950e3a48..fe0ccbe7c4 100644
+--- a/src/mpoly.h
++++ b/src/mpoly.h
+@@ -1363,9 +1363,9 @@ typedef struct
+ 
+ typedef mpoly_gcd_info_struct mpoly_gcd_info_t[1];
+ 
+-void mpoly_gcd_info_init(mpoly_gcd_info_t I, slong nvars);
++void mpoly_gcd_info_init(mpoly_gcd_info_t Iv, slong nvars);
+ 
+-void mpoly_gcd_info_clear(mpoly_gcd_info_t I);
++void mpoly_gcd_info_clear(mpoly_gcd_info_t Iv);
+ 
+ void mpoly_gcd_info_limits(ulong * Amax_exp, ulong * Amin_exp,
+                        slong * Amax_exp_count, slong * Amin_exp_count,
+@@ -1378,25 +1378,25 @@ void mpoly_gcd_info_stride(ulong * strides,
+                              const ulong * Bmax_exp, const ulong * Bmin_exp,
+                                                        const mpoly_ctx_t mctx);
+ 
+-void mpoly_gcd_info_set_perm(mpoly_gcd_info_t I,
++void mpoly_gcd_info_set_perm(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+-slong mpoly_gcd_info_get_brown_upper_limit(const mpoly_gcd_info_t I,
++slong mpoly_gcd_info_get_brown_upper_limit(const mpoly_gcd_info_t Iv,
+                                                        slong var, slong bound);
+ 
+-void mpoly_gcd_info_measure_hensel(mpoly_gcd_info_t I,
++void mpoly_gcd_info_measure_hensel(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+-void mpoly_gcd_info_measure_brown(mpoly_gcd_info_t I,
++void mpoly_gcd_info_measure_brown(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+-void mpoly_gcd_info_measure_bma(mpoly_gcd_info_t I,
++void mpoly_gcd_info_measure_bma(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+-void mpoly_gcd_info_measure_zippel(mpoly_gcd_info_t I,
++void mpoly_gcd_info_measure_zippel(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+-void mpoly_gcd_info_measure_zippel2(mpoly_gcd_info_t I,
++void mpoly_gcd_info_measure_zippel2(mpoly_gcd_info_t Iv,
+                          slong Alength, slong Blength, const mpoly_ctx_t mctx);
+ 
+ int mpoly_monomial_cofactors(fmpz * Abarexps, fmpz * Bbarexps,
+diff --git a/src/nmod_mpoly.h b/src/nmod_mpoly.h
+index 2a8136e6eb..716ac9669a 100644
+--- a/src/nmod_mpoly.h
++++ b/src/nmod_mpoly.h
+@@ -1619,13 +1619,13 @@ int nmod_mpolyn_gcd_brown_smprime_bivar(
+ int nmod_mpolyn_gcd_brown_smprime(nmod_mpolyn_t G,
+                                   nmod_mpolyn_t Abar, nmod_mpolyn_t Bbar,
+                                  nmod_mpolyn_t A, nmod_mpolyn_t B, slong var,
+-                         const nmod_mpoly_ctx_t ctx, const mpoly_gcd_info_t I,
++                         const nmod_mpoly_ctx_t ctx, const mpoly_gcd_info_t Iv,
+                                                          nmod_poly_stack_t Sp);
+ 
+ int nmod_mpolyn_gcd_brown_smprime_threaded_pool(nmod_mpolyn_t G,
+                                 nmod_mpolyn_t Abar, nmod_mpolyn_t Bbar,
+                                nmod_mpolyn_t A, nmod_mpolyn_t B, slong var,
+-                         const nmod_mpoly_ctx_t ctx, const mpoly_gcd_info_t I,
++                         const nmod_mpoly_ctx_t ctx, const mpoly_gcd_info_t Iv,
+                         const thread_pool_handle * handles, slong num_workers);
+ 
+ int nmod_mpolyn_gcd_brown_lgprime(nmod_mpolyn_t G,
+diff --git a/src/nmod_mpoly_factor.h b/src/nmod_mpoly_factor.h
+index a46afc860f..b16c802b9b 100644
+--- a/src/nmod_mpoly_factor.h
++++ b/src/nmod_mpoly_factor.h
+@@ -362,15 +362,15 @@ typedef struct {
+ typedef nmod_mpoly_pfrac_struct nmod_mpoly_pfrac_t[1];
+ 
+ 
+-int nmod_mpoly_pfrac_init(nmod_mpoly_pfrac_t I, flint_bitcnt_t bits,
++int nmod_mpoly_pfrac_init(nmod_mpoly_pfrac_t Iv, flint_bitcnt_t bits,
+                          slong l, slong r, const nmod_mpoly_struct * betas,
+                           const mp_limb_t * alpha, const nmod_mpoly_ctx_t ctx);
+ 
+-void nmod_mpoly_pfrac_clear(nmod_mpoly_pfrac_t I,
++void nmod_mpoly_pfrac_clear(nmod_mpoly_pfrac_t Iv,
+                                                    const nmod_mpoly_ctx_t ctx);
+ 
+ int nmod_mpoly_pfrac(slong r, nmod_mpoly_t t, const slong * deg,
+-                             nmod_mpoly_pfrac_t I, const nmod_mpoly_ctx_t ctx);
++                             nmod_mpoly_pfrac_t Iv, const nmod_mpoly_ctx_t ctx);
+ 
+ int nmod_mpoly_hlift(slong m, nmod_mpoly_struct * f, slong r,
+             const mp_limb_t * alpha, const nmod_mpoly_t A, const slong * degs,
diff --git a/srcpkgs/flintlib/template b/srcpkgs/flintlib/template
index 613391a9a0ae1b..465cdf1d0d3f71 100644
--- a/srcpkgs/flintlib/template
+++ b/srcpkgs/flintlib/template
@@ -1,7 +1,7 @@
 # Template file for 'flintlib'
 pkgname=flintlib
 version=3.1.2
-revision=1
+revision=2
 build_style=gnu-configure
 configure_args="--prefix=/usr --disable-arch $(vopt_with ntl)
  $(vopt_if openblas --with-blas-include=${XBPS_CROSS_BASE}/usr/include/openblas)"

From e78be426bc1268e87433181f2fee4982b7e8dcf3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= <tornaria@cmat.edu.uy>
Date: Tue, 20 Aug 2024 17:56:06 -0300
Subject: [PATCH 6/6] sagemath: patch for numpy 2.1

---
 srcpkgs/sagemath/patches/numpy_2.1a.patch |  28 +++
 srcpkgs/sagemath/patches/numpy_2.1b.patch | 229 ++++++++++++++++++++++
 2 files changed, 257 insertions(+)
 create mode 100644 srcpkgs/sagemath/patches/numpy_2.1a.patch
 create mode 100644 srcpkgs/sagemath/patches/numpy_2.1b.patch

diff --git a/srcpkgs/sagemath/patches/numpy_2.1a.patch b/srcpkgs/sagemath/patches/numpy_2.1a.patch
new file mode 100644
index 00000000000000..493c75e2f8f8e0
--- /dev/null
+++ b/srcpkgs/sagemath/patches/numpy_2.1a.patch
@@ -0,0 +1,28 @@
+commit d755b32cbed462abf01a1cd782ba57cb92fbf713
+Author: Gonzalo Tornaría <tornaria@cmat.edu.uy>
+Date:   Mon Aug 19 23:25:32 2024 -0300
+
+    add copy parameter to numpy (needed for v2.1)
+
+diff --git a/src/sage/matrix/matrix1.pyx b/src/sage/matrix/matrix1.pyx
+index 3edb9ead54d..2c76fd1e557 100644
+--- a/src/sage/matrix/matrix1.pyx
++++ b/src/sage/matrix/matrix1.pyx
+@@ -670,7 +670,7 @@ cdef class Matrix(Matrix0):
+             entries = [[sib(v, 2) for v in row] for row in self.rows()]
+             return sib.name('matrix')(self.base_ring(), entries)
+ 
+-    def numpy(self, dtype=None):
++    def numpy(self, dtype=None, copy=True):
+         """
+         Return the Numpy matrix associated to this matrix.
+ 
+@@ -731,7 +731,7 @@ cdef class Matrix(Matrix0):
+             (3, 4)
+         """
+         import numpy
+-        A = numpy.matrix(self.list(), dtype=dtype)
++        A = numpy.matrix(self.list(), dtype=dtype, copy=copy)
+         return numpy.resize(A,(self.nrows(), self.ncols()))
+ 
+     # Define the magic "__array__" function so that numpy.array(m) can convert
diff --git a/srcpkgs/sagemath/patches/numpy_2.1b.patch b/srcpkgs/sagemath/patches/numpy_2.1b.patch
new file mode 100644
index 00000000000000..8dc0eec2b5a9d8
--- /dev/null
+++ b/srcpkgs/sagemath/patches/numpy_2.1b.patch
@@ -0,0 +1,229 @@
+commit 8260d18c3cf8e356db3d95fc46f6e68f75b453fd
+Author: Gonzalo Tornaría <tornaria@cmat.edu.uy>
+Date:   Tue Aug 20 00:05:33 2024 -0300
+
+    silence np.set_printoptions (for numpy 2.1)
+
+diff --git a/src/sage/combinat/fully_packed_loop.py b/src/sage/combinat/fully_packed_loop.py
+index 74a14fa1ecd..82e6c7eb3c8 100644
+--- a/src/sage/combinat/fully_packed_loop.py
++++ b/src/sage/combinat/fully_packed_loop.py
+@@ -68,7 +68,7 @@ def _make_color_list(n, colors=None, color_map=None, randomize=False):
+ 
+         sage: import numpy as np
+         sage: if int(np.version.short_version[0]) > 1:
+-        ....:     np.set_printoptions(legacy="1.25")
++        ....:     _token = np.set_printoptions(legacy="1.25")
+         sage: from sage.combinat.fully_packed_loop import _make_color_list
+         sage: _make_color_list(5)
+         sage: _make_color_list(5, ['blue', 'red'])
+diff --git a/src/sage/functions/special.py b/src/sage/functions/special.py
+index 308171af3cd..6f66624ef87 100644
+--- a/src/sage/functions/special.py
++++ b/src/sage/functions/special.py
+@@ -219,7 +219,7 @@ class SphericalHarmonic(BuiltinFunction):
+         sage: from scipy.special import sph_harm  # NB: arguments x and y are swapped   # needs scipy
+         sage: import numpy as np                                                        # needs scipy
+         sage: if int(np.version.short_version[0]) > 1:                                  # needs scipy
+-        ....:     np.set_printoptions(legacy="1.25")                                    # needs scipy
++        ....:     _token = np.set_printoptions(legacy="1.25")                           # needs scipy
+         sage: sph_harm(1, 1, pi.n(), (pi/2).n())  # abs tol 1e-14                       # needs scipy sage.symbolic
+         (0.3454941494713355-4.231083042742082e-17j)
+ 
+diff --git a/src/sage/numerical/optimize.py b/src/sage/numerical/optimize.py
+index b3e42a6a6a2..13ffa4d1789 100644
+--- a/src/sage/numerical/optimize.py
++++ b/src/sage/numerical/optimize.py
+@@ -381,7 +381,7 @@ def minimize(func, x0, gradient=None, hessian=None, algorithm='default',
+         ....:    return sum(100.0r*(x[1r:]-x[:-1r]**2.0r)**2.0r + (1r-x[:-1r])**2.0r)
+         sage: import numpy
+         sage: if int(numpy.version.short_version[0]) > 1:
+-        ....:     numpy.set_printoptions(legacy="1.25")
++        ....:     _token = numpy.set_printoptions(legacy="1.25")
+         sage: from numpy import zeros
+         sage: def rosen_der(x):
+         ....:    xm = x[1r:-1r]
+diff --git a/src/sage/plot/arrow.py b/src/sage/plot/arrow.py
+index 02442f90ba4..1fe3f0b051a 100644
+--- a/src/sage/plot/arrow.py
++++ b/src/sage/plot/arrow.py
+@@ -55,7 +55,7 @@ class CurveArrow(GraphicPrimitive):
+ 
+             sage: import numpy  # to ensure numpy 2.0 compatibility
+             sage: if int(numpy.version.short_version[0]) > 1:
+-            ....:     numpy.set_printoptions(legacy="1.25")
++            ....:     _token = numpy.set_printoptions(legacy="1.25")
+             sage: from sage.plot.arrow import CurveArrow
+             sage: b = CurveArrow(path=[[(0,0),(.5,.5),(1,0)],[(.5,1),(0,0)]],
+             ....:                options={})
+diff --git a/src/sage/plot/multigraphics.py b/src/sage/plot/multigraphics.py
+index d2f70b44526..2eaacc6879e 100644
+--- a/src/sage/plot/multigraphics.py
++++ b/src/sage/plot/multigraphics.py
+@@ -766,7 +766,7 @@ class MultiGraphics(WithEqualityById, SageObject):
+             (0.2, 0.3, 0.4, 0.1)
+             sage: import numpy  # to ensure numpy 2.0 compatibility
+             sage: if int(numpy.version.short_version[0]) > 1:
+-            ....:     numpy.set_printoptions(legacy="1.25")
++            ....:     _token = numpy.set_printoptions(legacy="1.25")
+             sage: ax1.get_position().bounds  # tol 1.0e-13
+             (0.2, 0.3, 0.4000000000000001, 0.10000000000000003)
+         """
+@@ -1269,7 +1269,7 @@ class GraphicsArray(MultiGraphics):
+             sage: G = graphics_array([g1, g2])
+             sage: import numpy  # to ensure numpy 2.0 compatibility
+             sage: if int(numpy.version.short_version[0]) > 1:
+-            ....:     numpy.set_printoptions(legacy="1.25")
++            ....:     _token = numpy.set_printoptions(legacy="1.25")
+             sage: G.position(0)  # tol 5.0e-3
+             (0.025045451349937315,
+              0.03415488992713045,
+diff --git a/src/sage/plot/streamline_plot.py b/src/sage/plot/streamline_plot.py
+index b69a05b37bf..25e404bfc7d 100644
+--- a/src/sage/plot/streamline_plot.py
++++ b/src/sage/plot/streamline_plot.py
+@@ -72,7 +72,7 @@ class StreamlinePlot(GraphicPrimitive):
+             sage: x, y = var('x y')
+             sage: import numpy  # to ensure numpy 2.0 compatibility
+             sage: if int(numpy.version.short_version[0]) > 1:
+-            ....:     numpy.set_printoptions(legacy="1.25")
++            ....:     _token = numpy.set_printoptions(legacy="1.25")
+             sage: d = streamline_plot((.01*x, x+y), (x,10,20), (y,10,20))[0].get_minmax_data()
+             sage: d['xmin']
+             10.0
+diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx
+index 11811b9587f..8ce0f7f2683 100644
+--- a/src/sage/rings/integer.pyx
++++ b/src/sage/rings/integer.pyx
+@@ -595,7 +595,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement):
+             sage: # needs numpy
+             sage: import numpy
+             sage: if int(numpy.version.short_version[0]) > 1:
+-            ....:     numpy.set_printoptions(legacy="1.25")
++            ....:     _token = numpy.set_printoptions(legacy="1.25")
+             sage: numpy.int8('12') == 12
+             True
+             sage: 12 == numpy.int8('12')
+diff --git a/src/sage/rings/real_mpfi.pyx b/src/sage/rings/real_mpfi.pyx
+index 11953a50ab5..6aafcceed89 100644
+--- a/src/sage/rings/real_mpfi.pyx
++++ b/src/sage/rings/real_mpfi.pyx
+@@ -232,7 +232,7 @@ TESTS::
+ 
+     sage: import numpy                                                                  # needs numpy
+     sage: if int(numpy.version.short_version[0]) > 1:                                   # needs numpy
+-    ....:     numpy.set_printoptions(legacy="1.25")                                     # needs numpy
++    ....:     _token = numpy.set_printoptions(legacy="1.25")                            # needs numpy
+     sage: RIF(2) == numpy.int8('2')                                                     # needs numpy
+     True
+     sage: numpy.int8('2') == RIF(2)                                                     # needs numpy
+diff --git a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
+index 40b92ab23eb..3838bcccb8a 100755
+--- a/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
++++ b/src/sage/schemes/elliptic_curves/period_lattice_region.pyx
+@@ -78,7 +78,7 @@ cdef class PeriodicRegion:
+ 
+             sage: import numpy as np
+             sage: if int(np.version.short_version[0]) > 1:
+-            ....:     np.set_printoptions(legacy="1.25")
++            ....:     _token = np.set_printoptions(legacy="1.25")
+             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
+             sage: data = np.zeros((4, 4))
+             sage: PeriodicRegion(CDF(2), CDF(2*I), data).is_empty()
+@@ -296,7 +296,7 @@ cdef class PeriodicRegion:
+ 
+             sage: import numpy as np
+             sage: if int(np.version.short_version[0]) > 1:
+-            ....:     np.set_printoptions(legacy="1.25")
++            ....:     _token = np.set_printoptions(legacy="1.25")
+             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
+             sage: data = np.zeros((10, 10))
+             sage: data[1:4,1:4] = True
+@@ -320,7 +320,7 @@ cdef class PeriodicRegion:
+ 
+             sage: import numpy as np
+             sage: if int(np.version.short_version[0]) > 1:
+-            ....:     np.set_printoptions(legacy="1.25")
++            ....:     _token = np.set_printoptions(legacy="1.25")
+             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
+             sage: data = np.zeros((4, 4))
+             sage: data[1,1] = True
+@@ -375,7 +375,7 @@ cdef class PeriodicRegion:
+ 
+             sage: import numpy as np
+             sage: if int(np.version.short_version[0]) > 1:
+-            ....:     np.set_printoptions(legacy="1.25")
++            ....:     _token = np.set_printoptions(legacy="1.25")
+             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
+ 
+             sage: data = np.zeros((20, 20))
+@@ -528,7 +528,7 @@ cdef class PeriodicRegion:
+ 
+             sage: import numpy as np
+             sage: if int(np.version.short_version[0]) > 1:
+-            ....:     np.set_printoptions(legacy="1.25")
++            ....:     _token = np.set_printoptions(legacy="1.25")
+             sage: from sage.schemes.elliptic_curves.period_lattice_region import PeriodicRegion
+             sage: data = np.zeros((4, 4))
+             sage: data[1, 1] = True
+diff --git a/src/sage/stats/basic_stats.py b/src/sage/stats/basic_stats.py
+index 47d890cf0ab..ba7f0cdb0f9 100644
+--- a/src/sage/stats/basic_stats.py
++++ b/src/sage/stats/basic_stats.py
+@@ -222,7 +222,7 @@ def std(v, bias=False):
+         sage: # needs numpy
+         sage: import numpy
+         sage: if int(numpy.version.short_version[0]) > 1:
+-        ....:     numpy.set_printoptions(legacy="1.25")
++        ....:     _token = numpy.set_printoptions(legacy="1.25")
+         sage: x = numpy.array([1,2,3,4,5])
+         sage: std(x, bias=False)
+         1.5811388300841898
+@@ -299,7 +299,7 @@ def variance(v, bias=False):
+         0.4897530450000000?
+         sage: import numpy                                                              # needs numpy
+         sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
+-        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
++        ....:     _token = numpy.set_printoptions(legacy="1.25")                        # needs numpy
+         sage: x = numpy.array([1,2,3,4,5])                                              # needs numpy
+         sage: variance(x, bias=False)                                                   # needs numpy
+         2.5
+diff --git a/src/sage/structure/coerce.pyx b/src/sage/structure/coerce.pyx
+index cc15eff82e9..e32e7fd28b3 100644
+--- a/src/sage/structure/coerce.pyx
++++ b/src/sage/structure/coerce.pyx
+@@ -521,7 +521,7 @@ cdef class CoercionModel:
+ 
+         sage: import numpy                                                              # needs numpy
+         sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
+-        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
++        ....:     _token = numpy.set_printoptions(legacy="1.25")                        # needs numpy
+ 
+         sage: # needs sage.rings.real_mpfr
+         sage: x = polygen(RR)
+diff --git a/src/sage/symbolic/function.pyx b/src/sage/symbolic/function.pyx
+index 362d01ea297..92bce28b032 100644
+--- a/src/sage/symbolic/function.pyx
++++ b/src/sage/symbolic/function.pyx
+@@ -962,7 +962,7 @@ cdef class BuiltinFunction(Function):
+ 
+             sage: import numpy                                                          # needs numpy
+             sage: if int(numpy.version.short_version[0]) > 1:                           # needs numpy
+-            ....:     numpy.set_printoptions(legacy="1.25")                             # needs numpy
++            ....:     _token = numpy.set_printoptions(legacy="1.25")                    # needs numpy
+ 
+             sage: sin(numpy.int32(0))                                                   # needs numpy
+             0.0
+diff --git a/src/sage/symbolic/ring.pyx b/src/sage/symbolic/ring.pyx
+index 32afe8d3a62..63734e68f63 100644
+--- a/src/sage/symbolic/ring.pyx
++++ b/src/sage/symbolic/ring.pyx
+@@ -1154,7 +1154,7 @@ cdef class NumpyToSRMorphism(Morphism):
+ 
+         sage: import numpy                                                              # needs numpy
+         sage: if int(numpy.version.short_version[0]) > 1:                               # needs numpy
+-        ....:     numpy.set_printoptions(legacy="1.25")                                 # needs numpy
++        ....:     _token = numpy.set_printoptions(legacy="1.25")                        # needs numpy
+         sage: f(x) = x^2
+         sage: f(numpy.int8('2'))                                                        # needs numpy
+         4

  parent reply	other threads:[~2024-08-21  1:11 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-18 17:54 [PR PATCH] " tornaria
2024-08-20 20:57 ` [PR PATCH] [Updated] " tornaria
2024-08-21  1:11 ` tornaria [this message]
2024-08-22  2:10 ` tornaria
2024-08-24  4:03 ` tornaria
2024-09-08 16:10 ` tornaria
2024-09-09  1:13 ` [BETA] sagemath: update to 10.5.beta3 dkwo
2024-09-10  0:07 ` tornaria
2024-09-10 20:23 ` dkwo
2024-09-22 12:01 ` [PR PATCH] [Updated] " tornaria
2024-10-15 19:18 ` [PR PATCH] [Updated] [BETA] sagemath: update to 10.5.beta5 tornaria
2024-10-29  0:41 ` [PR PATCH] [Updated] [BETA] sagemath: update to 10.5.beta7 tornaria
2024-11-18  2:52 ` [PR PATCH] [Updated] [BETA] sagemath: update to 10.5.beta8 tornaria

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=20240821011137.46ACF2CDE9@inbox.vuxu.org \
    --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).