diff --git a/org.sagemath.sage.metainfo.xml b/org.sagemath.sage.metainfo.xml new file mode 100644 index 0000000..70cf3d8 --- /dev/null +++ b/org.sagemath.sage.metainfo.xml @@ -0,0 +1,108 @@ + + + org.sagemath.sage + CC0-1.0 + GPL-2.0-or-later + sagemath + Mathematics Software System + +

+ Sage is a free open-source mathematics software system licensed + under the GPL. It combines the power of many existing open-source + packages into a common Python-based interface. +

+
+ org.sagemath.sage.desktop + + + https://www.flickr.com/photos/sagescreenshots/2131280369/in/album-72157603532209437/ + Notebook + + + https://www.flickr.com/photos/sagescreenshots/2131280403/in/album-72157603532209437/ + Symbolic computation + + + https://www.flickr.com/photos/sagescreenshots/2131280441/in/album-72157603532209437/ + More symbolic computation + + + https://www.flickr.com/photos/sagescreenshots/2132057124/in/album-72157603532209437/ + Basic plotting + + + https://www.flickr.com/photos/sagescreenshots/2131280543/in/album-72157603532209437/ + Plotting multiple functions + + + https://www.flickr.com/photos/sagescreenshots/2131280585/in/album-72157603532209437/ + Plotting options + + + https://www.flickr.com/photos/sagescreenshots/2131280629/in/album-72157603532209437/ + Polygons + + + https://www.flickr.com/photos/sagescreenshots/2131280689/in/album-72157603532209437/ + Text annotations + + + https://www.flickr.com/photos/sagescreenshots/2131280719/in/album-72157603532209437/ + Parametric plotting + + + https://www.flickr.com/photos/sagescreenshots/2132057406/in/album-72157603532209437/ + List comprehensions + + + https://www.flickr.com/photos/sagescreenshots/2132057442/in/album-72157603532209437/ + Rubik's cube + + + https://www.flickr.com/photos/sagescreenshots/2132057494/in/album-72157603532209437/ + Scrambled cube + + + https://www.flickr.com/photos/sagescreenshots/2132057548/in/album-72157603532209437/ + 3D cube + + + https://www.flickr.com/photos/sagescreenshots/2131280959/in/album-72157603532209437/ + Interactive 3D cube + + + https://www.flickr.com/photos/sagescreenshots/2132057724/in/album-72157603532209437/ + 3D plotting with Tachyon + + + https://www.flickr.com/photos/sagescreenshots/2132057802/in/album-72157603532209437/ + Parametric 3D plotting + + + https://www.flickr.com/photos/sagescreenshots/2132057836/in/album-72157603532209437/ + JSMath and LaTeX + + + https://www.flickr.com/photos/sagescreenshots/2132057874/in/album-72157603532209437/ + Matrix operations + + + https://www.flickr.com/photos/sagescreenshots/2131281199/in/album-72157603532209437/ + Plotting of graphs + + + https://www.flickr.com/photos/sagescreenshots/2131281877/in/album-72157603532209437/ + Contour plot + + + loganjerry@gmail.com + https://www.sagemath.org/ + https://trac.sagemath.org/ + https://doc.sagemath.org/html/en/faq/ + https://doc.sagemath.org/ + https://github.com/sponsors/sagemath + + + sage + +
diff --git a/sagemath-4ti2.patch b/sagemath-4ti2.patch index dedeb08..1b4a7ea 100644 --- a/sagemath-4ti2.patch +++ b/sagemath-4ti2.patch @@ -1,9 +1,9 @@ diff -up src/sage/sandpiles/sandpile.py.orig src/sage/sandpiles/sandpile.py ---- src/sage/sandpiles/sandpile.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/sandpiles/sandpile.py 2020-10-30 14:00:00.744208307 -0600 -@@ -347,9 +347,6 @@ from sage.arith.all import falling_facto - from sage.rings.all import Integer, PolynomialRing, QQ, ZZ - from sage.symbolic.all import I, pi, SR +--- src/sage/sandpiles/sandpile.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/sandpiles/sandpile.py 2021-05-28 11:34:47.438557513 -0600 +@@ -347,9 +347,6 @@ from sage.rings.all import Integer, Poly + from sage.symbolic.constants import I, pi + from sage.symbolic.ring import SR -# TODO: remove the following line once 4ti2 functions are removed -path_to_zsolve = os.path.join(SAGE_LOCAL, 'bin', 'zsolve') @@ -11,8 +11,8 @@ diff -up src/sage/sandpiles/sandpile.py.orig src/sage/sandpiles/sandpile.py def _sandpile_help(cls, usage, verbose=True): -@@ -5174,7 +5171,7 @@ class SandpileDivisor(dict): - sign_file.close() +@@ -5172,7 +5169,7 @@ class SandpileDivisor(dict): + sign_file.write('\n') # compute try: - os.system(path_to_zsolve+' -q ' + lin_sys + ' > ' + lin_sys_log) diff --git a/sagemath-arb.patch b/sagemath-arb.patch deleted file mode 100644 index 56a9f64..0000000 --- a/sagemath-arb.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -up src/sage/libs/arb/arb_wrap.h.orig src/sage/libs/arb/arb_wrap.h ---- src/sage/libs/arb/arb_wrap.h.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/arb/arb_wrap.h 2020-10-30 16:10:40.145976088 -0600 -@@ -11,18 +11,18 @@ - #define ulong mp_limb_t - #define slong mp_limb_signed_t - --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include - - #undef ulong - #undef slong diff --git a/sagemath-cremona.patch b/sagemath-cremona.patch index e59cec8..9bc2ea9 100644 --- a/sagemath-cremona.patch +++ b/sagemath-cremona.patch @@ -1,7 +1,7 @@ diff -up src/sage/databases/cremona.py.orig src/sage/databases/cremona.py ---- src/sage/databases/cremona.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/databases/cremona.py 2020-10-30 14:02:27.778960819 -0600 -@@ -854,7 +854,8 @@ class MiniCremonaDatabase(SQLDatabase): +--- src/sage/databases/cremona.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/databases/cremona.py 2021-05-28 11:39:00.005575551 -0600 +@@ -885,7 +885,8 @@ class MiniCremonaDatabase(SQLDatabase): message = "There is no elliptic curve with label " \ + label + " in the default database; try installing " \ + "the optional package database_cremona_ellcurve which " \ @@ -11,8 +11,8 @@ diff -up src/sage/databases/cremona.py.orig src/sage/databases/cremona.py raise ValueError(message) ainvs = eval(c[0]) data = {'cremona_label': label, -@@ -1659,6 +1660,7 @@ class LargeCremonaDatabase(MiniCremonaDa - con.executemany("UPDATE t_curve SET gens=? WHERE curve=?", \ +@@ -1663,6 +1664,7 @@ class LargeCremonaDatabase(MiniCremonaDa + con.executemany("UPDATE t_curve SET gens=? WHERE curve=?", curve_data) print("Committing...") + self.commit() diff --git a/sagemath-cvxopt.patch b/sagemath-cvxopt.patch new file mode 100644 index 0000000..df52a71 --- /dev/null +++ b/sagemath-cvxopt.patch @@ -0,0 +1,24 @@ +diff -up src/sage/numerical/backends/cvxopt_backend.pyx.orig src/sage/numerical/backends/cvxopt_backend.pyx +--- src/sage/numerical/backends/cvxopt_backend.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/numerical/backends/cvxopt_backend.pyx 2021-05-28 12:05:47.551650940 -0600 +@@ -550,7 +550,7 @@ cdef class CVXOPTBackend(GenericBackend) + self.answer = solvers.lp(c,G,h) + + #possible outcomes +- if self.answer['status'] == 'optimized': ++ if self.answer['status'] in ['optimized', 'optimal']: + pass + elif self.answer['status'] == 'primal infeasible': + raise MIPSolverException("CVXOPT: primal infeasible") +diff -up src/sage/numerical/backends/cvxopt_sdp_backend.pyx.orig src/sage/numerical/backends/cvxopt_sdp_backend.pyx +--- src/sage/numerical/backends/cvxopt_sdp_backend.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/numerical/backends/cvxopt_sdp_backend.pyx 2021-05-28 12:05:47.552650940 -0600 +@@ -150,7 +150,7 @@ cdef class CVXOPTSDPBackend(MatrixSDPBac + self.answer = solvers.sdp(c,Gs=G_matrix,hs=h_matrix) + + #possible outcomes +- if self.answer['status'] == 'optimized': ++ if self.answer['status'] in ['optimized', 'optimal']: + pass + elif self.answer['status'] == 'primal infeasible': + raise SDPSolverException("CVXOPT: primal infeasible") diff --git a/sagemath-env.patch b/sagemath-env.patch index 42d8837..7d2c26d 100644 --- a/sagemath-env.patch +++ b/sagemath-env.patch @@ -1,43 +1,56 @@ diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2020-10-30 16:09:54.834029866 -0600 -+++ src/sage/env.py 2020-10-30 16:10:20.089999891 -0600 -@@ -159,14 +159,14 @@ var('SAGE_DATE', version.date) - var('SAGE_VERSION_BANNER', version.banner) +--- src/sage/env.py.orig 2021-05-29 21:01:26.503474025 -0600 ++++ src/sage/env.py 2021-05-29 21:03:06.389635554 -0600 +@@ -166,16 +166,16 @@ SAGE_DATE = var("SAGE_DATE", version.dat + SAGE_VERSION_BANNER = var("SAGE_VERSION_BANNER", version.banner) - # bunch of sage directories and files --var('SAGE_LOCAL', os.path.abspath(sys.prefix)) --var('SAGE_ETC', join(SAGE_LOCAL, 'etc')) --var('SAGE_INC', join(SAGE_LOCAL, 'include')) --var('SAGE_SHARE', join(SAGE_LOCAL, 'share')) --var('SAGE_DOC', join(SAGE_SHARE, 'doc', 'sage')) -+var('SAGE_LOCAL', '@@SAGE_LOCAL@@') -+var('SAGE_ETC', join('/usr', 'share', 'sagemath', 'etc')) -+var('SAGE_INC', join('/usr', 'include')) -+var('SAGE_SHARE', join('/usr', 'share', 'sagemath')) -+var('SAGE_DOC', join('/usr', 'share', 'doc', 'sagemath')) - var('SAGE_SPKG_INST', join(SAGE_LOCAL, 'var', 'lib', 'sage', 'installed')) - var('SAGE_LIB', os.path.dirname(os.path.dirname(sage.__file__))) --var('SAGE_EXTCODE', join(SAGE_LIB, 'sage', 'ext_data')) -+var('SAGE_EXTCODE', join('/usr', 'share', 'sagemath', 'etc')) + # virtual environment where sagelib is installed +-SAGE_VENV = var("SAGE_VENV", os.path.abspath(sys.prefix)) ++SAGE_VENV = var("SAGE_VENV", "@@SAGE_LOCAL@@") + SAGE_LIB = var("SAGE_LIB", os.path.dirname(os.path.dirname(sage.__file__))) +-SAGE_EXTCODE = var("SAGE_EXTCODE", join(SAGE_LIB, "sage", "ext_data")) ++SAGE_EXTCODE = var("SAGE_EXTCODE", join("/usr", "share", "sagemath", "etc")) - var('SAGE_ROOT') # no fallback for SAGE_ROOT - var('SAGE_SRC', join(SAGE_ROOT, 'src'), SAGE_LIB) -@@ -187,13 +187,13 @@ var('THEBE_DIR', joi - var('COMBINATORIAL_DESIGN_DATA_DIR', join(SAGE_SHARE, 'combinatorial_designs')) - var('CREMONA_MINI_DATA_DIR', join(SAGE_SHARE, 'cremona')) - var('CREMONA_LARGE_DATA_DIR', join(SAGE_SHARE, 'cremona')) --var('JMOL_DIR', join(SAGE_SHARE, 'jmol')) --var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol')) --var('MATHJAX_DIR', join(SAGE_SHARE, 'mathjax')) --var('MTXLIB', join(SAGE_SHARE, 'meataxe')) -+var('JMOL_DIR', join('/usr', 'share', 'java', 'jmol')) -+var('JSMOL_DIR', join('/usr', 'share', 'javascript', 'jsmol')) -+var('MATHJAX_DIR', join('/usr', 'share', 'javascript', 'mathjax')) -+var('MTXLIB', join(DOT_SAGE, 'meataxe')) - var('THREEJS_DIR', join(SAGE_SHARE, 'threejs')) - var('SINGULARPATH', join(SAGE_SHARE, 'singular')) --var('PPLPY_DOCS', join(SAGE_SHARE, 'doc', 'pplpy')) -+var('PPLPY_DOCS', join('/usr', 'share', 'doc', 'python3-pplpy')) - var('MAXIMA', 'maxima') - var('MAXIMA_FAS') - var('SAGE_NAUTY_BINS_PREFIX', '') + # prefix hierarchy where non-Python packages are installed + SAGE_LOCAL = var("SAGE_LOCAL", SAGE_VENV) +-SAGE_ETC = var("SAGE_ETC", join(SAGE_LOCAL, "etc")) +-SAGE_INC = var("SAGE_INC", join(SAGE_LOCAL, "include")) +-SAGE_SHARE = var("SAGE_SHARE", join(SAGE_LOCAL, "share")) +-SAGE_DOC = var("SAGE_DOC", join(SAGE_SHARE, "doc", "sage")) ++SAGE_ETC = var("SAGE_ETC", join("/usr", "share", "sagemath", "etc")) ++SAGE_INC = var("SAGE_INC", join("/usr", "include")) ++SAGE_SHARE = var("SAGE_SHARE", join("/usr", "share", "sagemath")) ++SAGE_DOC = var("SAGE_DOC", join("/usr", "share", "doc", "sagemath")) + SAGE_SPKG_INST = var("SAGE_SPKG_INST", join(SAGE_LOCAL, "var", "lib", "sage", "installed")) + + # source tree of the Sage distribution +@@ -199,12 +199,12 @@ THEBE_DIR = var("THEBE_DIR", join(SAGE_S + 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")) + CREMONA_LARGE_DATA_DIR = var("CREMONA_LARGE_DATA_DIR", join(SAGE_SHARE, "cremona")) +-JMOL_DIR = var("JMOL_DIR", join(SAGE_SHARE, "jmol")) +-MATHJAX_DIR = var("MATHJAX_DIR", join(SAGE_SHARE, "mathjax")) +-MTXLIB = var("MTXLIB", join(SAGE_SHARE, "meataxe")) ++JMOL_DIR = var("JMOL_DIR", join("/usr", "share", "java", "jmol")) ++MATHJAX_DIR = var("MATHJAX_DIR", join("/usr", "share", "javascript", "mathjax")) ++MTXLIB = var("MTXLIB", join(DOT_SAGE, "meataxe")) + THREEJS_DIR = var("THREEJS_DIR", join(SAGE_SHARE, "threejs")) + SINGULARPATH = var("SINGULARPATH", join(SAGE_SHARE, "singular")) +-PPLPY_DOCS = var("PPLPY_DOCS", join(SAGE_SHARE, "doc", "pplpy")) ++PPLPY_DOCS = var("PPLPY_DOCS", join("/usr", "share", "doc", "python3-pplpy")) + MAXIMA = var("MAXIMA", "maxima") + MAXIMA_FAS = var("MAXIMA_FAS") + SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") +@@ -301,10 +301,10 @@ def _get_shared_lib_path(*libnames: str) + + # locate singular shared object + # On Debian it's libsingular-Singular so try that as well +-SINGULAR_SO = var("SINGULAR_SO", _get_shared_lib_path("Singular", "singular-Singular")) ++SINGULAR_SO = var("SINGULAR_SO", "@@LIBDIR@@/libSingular.so") + + # locate libgap shared object +-GAP_SO = var("GAP_SO", _get_shared_lib_path("gap", "")) ++GAP_SO = var("GAP_SO", "@@LIBDIR@@/libgap.so") + + # post process + if ' ' in DOT_SAGE: diff --git a/sagemath-escape.patch b/sagemath-escape.patch index 81454ea..15c4b16 100644 --- a/sagemath-escape.patch +++ b/sagemath-escape.patch @@ -1,6 +1,6 @@ diff -up src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx ---- src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx 2020-10-30 11:34:21.352987398 -0600 +--- src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx 2021-05-28 11:01:33.728273279 -0600 @@ -229,7 +229,7 @@ cdef class FreeAlgebraElement_letterplac return '0' @@ -11,9 +11,9 @@ diff -up src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig sage: K. = GF(25) diff -up src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig src/sage/algebras/letterplace/free_algebra_letterplace.pyx ---- src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/algebras/letterplace/free_algebra_letterplace.pyx 2020-10-30 11:34:21.353987396 -0600 -@@ -605,7 +605,7 @@ cdef class FreeAlgebra_letterplace(Algeb +--- src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/algebras/letterplace/free_algebra_letterplace.pyx 2021-05-28 11:01:33.729273279 -0600 +@@ -618,7 +618,7 @@ cdef class FreeAlgebra_letterplace(Algeb # Auxiliar methods cdef str exponents_to_latex(self, E): @@ -22,21 +22,9 @@ diff -up src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig src/sag This auxiliary method is used for the representation of elements of this free algebra as a latex string. EXAMPLES:: -diff -up src/sage/calculus/functional.py.orig src/sage/calculus/functional.py ---- src/sage/calculus/functional.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/calculus/functional.py 2020-11-09 12:54:40.527118493 -0700 -@@ -54,7 +54,7 @@ def simplify(f): - return f - - def derivative(f, *args, **kwds): -- """ -+ r""" - The derivative of `f`. - - Repeated differentiation is supported by the syntax given in the diff -up src/sage/coding/binary_code.pyx.orig src/sage/coding/binary_code.pyx ---- src/sage/coding/binary_code.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/coding/binary_code.pyx 2020-10-30 11:34:21.375987362 -0600 +--- src/sage/coding/binary_code.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/coding/binary_code.pyx 2021-05-28 11:01:40.344274499 -0600 @@ -517,7 +517,7 @@ cdef codeword permute_word_by_wp(WordPer return image @@ -47,8 +35,8 @@ diff -up src/sage/coding/binary_code.pyx.orig src/sage/coding/binary_code.pyx function. diff -up src/sage/coding/codecan/codecan.pyx.orig src/sage/coding/codecan/codecan.pyx ---- src/sage/coding/codecan/codecan.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/coding/codecan/codecan.pyx 2020-10-30 11:34:21.376987361 -0600 +--- src/sage/coding/codecan/codecan.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/coding/codecan/codecan.pyx 2021-05-28 11:01:40.345274500 -0600 @@ -369,7 +369,7 @@ cdef class InnerGroup: return self.transporter @@ -68,8 +56,8 @@ diff -up src/sage/coding/codecan/codecan.pyx.orig src/sage/coding/codecan/codeca self.frob_pow, OP_string(self.row_partition)) diff -up src/sage/combinat/crystals/letters.pyx.orig src/sage/combinat/crystals/letters.pyx ---- src/sage/combinat/crystals/letters.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/combinat/crystals/letters.pyx 2020-10-30 11:34:21.377987359 -0600 +--- src/sage/combinat/crystals/letters.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/combinat/crystals/letters.pyx 2021-05-28 11:01:40.347274500 -0600 @@ -558,7 +558,7 @@ cdef class EmptyLetter(Element): return 'E' @@ -80,8 +68,8 @@ diff -up src/sage/combinat/crystals/letters.pyx.orig src/sage/combinat/crystals/ EXAMPLES:: diff -up src/sage/combinat/crystals/tensor_product_element.pyx.orig src/sage/combinat/crystals/tensor_product_element.pyx ---- src/sage/combinat/crystals/tensor_product_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/combinat/crystals/tensor_product_element.pyx 2020-10-30 11:34:21.378987358 -0600 +--- src/sage/combinat/crystals/tensor_product_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/combinat/crystals/tensor_product_element.pyx 2021-05-28 11:01:40.348274500 -0600 @@ -145,8 +145,8 @@ cdef class TensorProductOfCrystalsElemen """ from sage.misc.latex import latex @@ -103,8 +91,8 @@ diff -up src/sage/combinat/crystals/tensor_product_element.pyx.orig src/sage/com EXAMPLES:: diff -up src/sage/functions/prime_pi.pyx.orig src/sage/functions/prime_pi.pyx ---- src/sage/functions/prime_pi.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/functions/prime_pi.pyx 2020-10-30 11:34:23.258984488 -0600 +--- src/sage/functions/prime_pi.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/functions/prime_pi.pyx 2021-05-28 11:01:40.349274500 -0600 @@ -1,4 +1,4 @@ -""" +r""" @@ -112,8 +100,8 @@ diff -up src/sage/functions/prime_pi.pyx.orig src/sage/functions/prime_pi.pyx AUTHORS: diff -up src/sage/graphs/matchpoly.pyx.orig src/sage/graphs/matchpoly.pyx ---- src/sage/graphs/matchpoly.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/graphs/matchpoly.pyx 2020-10-30 11:34:23.262984482 -0600 +--- src/sage/graphs/matchpoly.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/graphs/matchpoly.pyx 2021-05-28 11:01:40.349274500 -0600 @@ -50,7 +50,7 @@ x = polygen(ZZ, 'x') @@ -124,8 +112,8 @@ diff -up src/sage/graphs/matchpoly.pyx.orig src/sage/graphs/matchpoly.pyx If `p(G, k)` denotes the number of `k`-matchings (matchings with `k` edges) diff -up src/sage/graphs/strongly_regular_db.pyx.orig src/sage/graphs/strongly_regular_db.pyx ---- src/sage/graphs/strongly_regular_db.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/graphs/strongly_regular_db.pyx 2020-10-30 11:34:23.263984480 -0600 +--- src/sage/graphs/strongly_regular_db.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/graphs/strongly_regular_db.pyx 2021-05-28 11:01:40.351274500 -0600 @@ -2397,7 +2397,7 @@ def strongly_regular_from_two_intersecti A set of points in the projective geometry `PG(k,q)` is said to be a @@ -136,8 +124,8 @@ diff -up src/sage/graphs/strongly_regular_db.pyx.orig src/sage/graphs/strongly_r From a 2-intersection set `S` can be defined a strongly-regular graph in the following way: diff -up src/sage/groups/group.pyx.orig src/sage/groups/group.pyx ---- src/sage/groups/group.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/groups/group.pyx 2020-10-30 11:34:23.264984479 -0600 +--- src/sage/groups/group.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/groups/group.pyx 2021-05-28 11:01:40.352274501 -0600 @@ -50,7 +50,7 @@ def is_Group(x): @@ -157,8 +145,8 @@ diff -up src/sage/groups/group.pyx.orig src/sage/groups/group.pyx +). diff -up src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx ---- src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx 2020-10-30 11:34:23.265984477 -0600 +--- src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx 2021-05-28 11:01:40.353274501 -0600 @@ -913,7 +913,7 @@ cdef class PartitionRefinement_generic: "\\begin{tikzpicture}\n" + "\\tikzset{level distance=3cm, edge from parent/.style=" + @@ -169,8 +157,8 @@ diff -up src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig src/sag self._latex_act_node() diff -up src/sage/groups/perm_gps/partn_ref/data_structures.pyx.orig src/sage/groups/perm_gps/partn_ref/data_structures.pyx ---- src/sage/groups/perm_gps/partn_ref/data_structures.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/groups/perm_gps/partn_ref/data_structures.pyx 2020-10-30 11:34:23.266984476 -0600 +--- src/sage/groups/perm_gps/partn_ref/data_structures.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/groups/perm_gps/partn_ref/data_structures.pyx 2021-05-28 11:01:40.354274501 -0600 @@ -828,11 +828,11 @@ cdef SC_print_level(StabilizerChain *SC, print('| labels {}'.format([SC.labels [level][i] for i from 0 <= i < n])) print('|') @@ -186,8 +174,8 @@ diff -up src/sage/groups/perm_gps/partn_ref/data_structures.pyx.orig src/sage/gr cdef StabilizerChain *SC_new_base(StabilizerChain *SC, int *base, int base_len): """ diff -up src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx ---- src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx 2020-10-30 11:34:23.266984476 -0600 +--- src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx 2021-05-28 11:01:40.355274501 -0600 @@ -105,7 +105,7 @@ cdef class LinearBinaryCodeStruct(Binary self.ith_word = &ith_word_linear @@ -225,9 +213,9 @@ diff -up src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig src/sage/ Return return -1 if gamma_1(S1) < gamma_2(S2), 0 if gamma_1(S1) == gamma_2(S2), diff -up src/sage/groups/perm_gps/permgroup_element.pyx.orig src/sage/groups/perm_gps/permgroup_element.pyx ---- src/sage/groups/perm_gps/permgroup_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/groups/perm_gps/permgroup_element.pyx 2020-10-30 11:45:08.560999486 -0600 -@@ -1176,7 +1176,7 @@ cdef class PermutationGroupElement(Multi +--- src/sage/groups/perm_gps/permgroup_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/groups/perm_gps/permgroup_element.pyx 2021-05-28 11:01:40.356274502 -0600 +@@ -1175,7 +1175,7 @@ cdef class PermutationGroupElement(Multi return result cpdef _act_on_(self, x, bint self_on_left): @@ -236,7 +224,7 @@ diff -up src/sage/groups/perm_gps/permgroup_element.pyx.orig src/sage/groups/per Return the result of the action of ``self`` on ``x``. For example, if ``x=f(z)`` is a polynomial, then this function returns -@@ -1620,7 +1620,7 @@ cdef class PermutationGroupElement(Multi +@@ -1619,7 +1619,7 @@ cdef class PermutationGroupElement(Multi return ~self def sign(self): @@ -246,8 +234,8 @@ diff -up src/sage/groups/perm_gps/permgroup_element.pyx.orig src/sage/groups/per `s` is the number of swaps. diff -up src/sage/libs/eclib/newforms.pyx.orig src/sage/libs/eclib/newforms.pyx ---- src/sage/libs/eclib/newforms.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/eclib/newforms.pyx 2020-10-30 11:34:23.270984470 -0600 +--- src/sage/libs/eclib/newforms.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/eclib/newforms.pyx 2021-05-28 11:01:40.357274501 -0600 @@ -22,7 +22,7 @@ from sage.modular.all import Cusp @@ -258,9 +246,9 @@ diff -up src/sage/libs/eclib/newforms.pyx.orig src/sage/libs/eclib/newforms.pyx EXAMPLES:: diff -up src/sage/libs/fes.pyx.orig src/sage/libs/fes.pyx ---- src/sage/libs/fes.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/fes.pyx 2020-10-30 11:34:23.271984468 -0600 -@@ -291,7 +291,7 @@ def find_coordinate_change(As, max_tries +--- src/sage/libs/fes.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/fes.pyx 2021-05-28 11:01:40.357274501 -0600 +@@ -292,7 +292,7 @@ def find_coordinate_change(As, max_tries def prepare_polynomials(f): @@ -270,9 +258,9 @@ diff -up src/sage/libs/fes.pyx.orig src/sage/libs/fes.pyx INPUT: diff -up src/sage/libs/ntl/ntl_GF2E.pyx.orig src/sage/libs/ntl/ntl_GF2E.pyx ---- src/sage/libs/ntl/ntl_GF2E.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_GF2E.pyx 2020-10-30 11:34:23.274984464 -0600 -@@ -69,7 +69,7 @@ def ntl_GF2E_random(ntl_GF2EContext_clas +--- src/sage/libs/ntl/ntl_GF2E.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_GF2E.pyx 2021-05-28 11:01:40.358274502 -0600 +@@ -73,7 +73,7 @@ def ntl_GF2E_random(ntl_GF2EContext_clas cdef class ntl_GF2E(object): r""" @@ -281,7 +269,7 @@ diff -up src/sage/libs/ntl/ntl_GF2E.pyx.orig src/sage/libs/ntl/ntl_GF2E.pyx using NTL. Elements are represented as polynomials over GF(2) modulo a modulus. -@@ -435,7 +435,7 @@ cdef class ntl_GF2E(object): +@@ -439,7 +439,7 @@ cdef class ntl_GF2E(object): return l def _sage_(ntl_GF2E self, k=None): @@ -291,9 +279,9 @@ diff -up src/sage/libs/ntl/ntl_GF2E.pyx.orig src/sage/libs/ntl/ntl_GF2E.pyx of this element. If a \class{FiniteField} k is provided it is constructed in this field if possible. A \class{FiniteField} diff -up src/sage/libs/ntl/ntl_GF2X.pyx.orig src/sage/libs/ntl/ntl_GF2X.pyx ---- src/sage/libs/ntl/ntl_GF2X.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_GF2X.pyx 2020-10-30 11:34:23.275984462 -0600 -@@ -480,7 +480,7 @@ cdef class ntl_GF2X(object): +--- src/sage/libs/ntl/ntl_GF2X.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_GF2X.pyx 2021-05-28 11:01:40.359274502 -0600 +@@ -484,7 +484,7 @@ cdef class ntl_GF2X(object): return [self[i] for i in range(GF2X_deg(self.x)+1)] def bin(ntl_GF2X self): @@ -302,7 +290,7 @@ diff -up src/sage/libs/ntl/ntl_GF2X.pyx.orig src/sage/libs/ntl/ntl_GF2X.pyx Returns binary representation of this element. It is the same as setting \code{ntl.GF2XHexOutput(False)} and representing this element afterwards. However it should be -@@ -503,7 +503,7 @@ cdef class ntl_GF2X(object): +@@ -507,7 +507,7 @@ cdef class ntl_GF2X(object): return s def hex(ntl_GF2X self): @@ -312,9 +300,9 @@ diff -up src/sage/libs/ntl/ntl_GF2X.pyx.orig src/sage/libs/ntl/ntl_GF2X.pyx It is the same as setting \code{ntl.GF2XHexOutput(True)} and diff -up src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig src/sage/libs/ntl/ntl_mat_GF2E.pyx ---- src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_mat_GF2E.pyx 2020-10-30 11:34:23.276984461 -0600 -@@ -177,7 +177,7 @@ cdef class ntl_mat_GF2E(object): +--- src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_mat_GF2E.pyx 2021-05-28 11:01:40.360274502 -0600 +@@ -181,7 +181,7 @@ cdef class ntl_mat_GF2E(object): return unpickle_class_args, (ntl_mat_GF2E, (self.modulus_context(), self.x.NumRows(), self.x.NumCols(), self.list())) def __repr__(self): @@ -323,7 +311,7 @@ diff -up src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig src/sage/libs/ntl/ntl_mat_GF2E. Return the string representation of self. EXAMPLES:: -@@ -442,7 +442,7 @@ cdef class ntl_mat_GF2E(object): +@@ -446,7 +446,7 @@ cdef class ntl_mat_GF2E(object): return r def gauss(self,ncols=-1): @@ -333,10 +321,10 @@ diff -up src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig src/sage/libs/ntl/ntl_mat_GF2E. into row echelon form. If the optional argument \code{ncols} is supplied, stops when first ncols columns are in echelon diff -up src/sage/libs/ntl/ntl_mat_GF2.pyx.orig src/sage/libs/ntl/ntl_mat_GF2.pyx ---- src/sage/libs/ntl/ntl_mat_GF2.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_mat_GF2.pyx 2020-10-30 11:46:11.151903948 -0600 -@@ -1,7 +1,7 @@ - # distutils: libraries = ntl gmp m +--- src/sage/libs/ntl/ntl_mat_GF2.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_mat_GF2.pyx 2021-05-28 11:01:40.361274502 -0600 +@@ -5,7 +5,7 @@ + # distutils: extra_link_args = NTL_LIBEXTRA # distutils: language = c++ -""" @@ -344,7 +332,7 @@ diff -up src/sage/libs/ntl/ntl_mat_GF2.pyx.orig src/sage/libs/ntl/ntl_mat_GF2.py Matrices over the $\GF{2}$ via NTL This class is only provided to have a complete NTL interface and for -@@ -432,7 +432,7 @@ cdef class ntl_mat_GF2(object): +@@ -376,7 +376,7 @@ cdef class ntl_mat_GF2(object): return r def gauss(self,ncols=-1): @@ -353,7 +341,7 @@ diff -up src/sage/libs/ntl/ntl_mat_GF2.pyx.orig src/sage/libs/ntl/ntl_mat_GF2.py Performs unitary row operations so as to bring this matrix into row echelon form (not reduced!). If the optional argument \code{ncols} is supplied, stops when first ncols -@@ -601,7 +601,7 @@ cdef class ntl_mat_GF2(object): +@@ -497,7 +497,7 @@ cdef class ntl_mat_GF2(object): return r def __invert__(self): @@ -363,9 +351,9 @@ diff -up src/sage/libs/ntl/ntl_mat_GF2.pyx.orig src/sage/libs/ntl/ntl_mat_GF2.py EXAMPLES:: diff -up src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig src/sage/libs/ntl/ntl_mat_ZZ.pyx ---- src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_mat_ZZ.pyx 2020-10-30 11:34:23.277984459 -0600 -@@ -69,7 +69,7 @@ cdef class ntl_mat_ZZ(object): +--- src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_mat_ZZ.pyx 2021-05-28 11:01:40.362274502 -0600 +@@ -73,7 +73,7 @@ cdef class ntl_mat_ZZ(object): The \class{mat_ZZ} class implements arithmetic with matrices over $\Z$. """ def __init__(self, nrows=0, ncols=0, v=None): @@ -374,7 +362,7 @@ diff -up src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig src/sage/libs/ntl/ntl_mat_ZZ.pyx The \class{mat_ZZ} class implements arithmetic with matrices over $\Z$. EXAMPLES:: -@@ -125,7 +125,7 @@ cdef class ntl_mat_ZZ(object): +@@ -129,7 +129,7 @@ cdef class ntl_mat_ZZ(object): return unpickle_class_args, (ntl_mat_ZZ, (self.__nrows, self.__ncols, self.list())) def __repr__(self): @@ -384,10 +372,10 @@ diff -up src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig src/sage/libs/ntl/ntl_mat_ZZ.pyx EXAMPLES:: diff -up src/sage/libs/ntl/ntl_ZZ_pEX.pyx.orig src/sage/libs/ntl/ntl_ZZ_pEX.pyx ---- src/sage/libs/ntl/ntl_ZZ_pEX.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_ZZ_pEX.pyx 2020-10-30 15:12:50.715238326 -0600 -@@ -1,7 +1,7 @@ - # distutils: libraries = ntl gmp m +--- src/sage/libs/ntl/ntl_ZZ_pEX.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_ZZ_pEX.pyx 2021-05-28 11:01:40.363274503 -0600 +@@ -5,7 +5,7 @@ + # distutils: extra_link_args = NTL_LIBEXTRA # distutils: language = c++ -""" @@ -396,9 +384,9 @@ diff -up src/sage/libs/ntl/ntl_ZZ_pEX.pyx.orig src/sage/libs/ntl/ntl_ZZ_pEX.pyx AUTHORS: diff -up src/sage/libs/ntl/ntl_ZZX.pyx.orig src/sage/libs/ntl/ntl_ZZX.pyx ---- src/sage/libs/ntl/ntl_ZZX.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/ntl/ntl_ZZX.pyx 2020-10-30 11:34:23.279984456 -0600 -@@ -688,7 +688,7 @@ cdef class ntl_ZZX(object): +--- src/sage/libs/ntl/ntl_ZZX.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/ntl/ntl_ZZX.pyx 2021-05-28 11:01:40.364274503 -0600 +@@ -692,7 +692,7 @@ cdef class ntl_ZZX(object): return (self*other).quo_rem(g)[0] def xgcd(self, ntl_ZZX other, proof=None): @@ -408,8 +396,8 @@ diff -up src/sage/libs/ntl/ntl_ZZX.pyx.orig src/sage/libs/ntl/ntl_ZZX.pyx t such that r = s*self + t*other. Otherwise return 0. This is \emph{not} the same as the \sage function on polynomials diff -up src/sage/libs/pynac/pynac.pyx.orig src/sage/libs/pynac/pynac.pyx ---- src/sage/libs/pynac/pynac.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/pynac/pynac.pyx 2020-10-30 11:34:26.009980290 -0600 +--- src/sage/libs/pynac/pynac.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/pynac/pynac.pyx 2021-05-28 11:01:40.366274503 -0600 @@ -385,7 +385,7 @@ cdef stdstring* string_from_pystr(py_str return new stdstring(s) @@ -438,8 +426,8 @@ diff -up src/sage/libs/pynac/pynac.pyx.orig src/sage/libs/pynac/pynac.pyx py_res = ostr + fstr return string_from_pystr(py_res) diff -up src/sage/libs/singular/polynomial.pyx.orig src/sage/libs/singular/polynomial.pyx ---- src/sage/libs/singular/polynomial.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/singular/polynomial.pyx 2020-10-30 11:34:26.010980289 -0600 +--- src/sage/libs/singular/polynomial.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/singular/polynomial.pyx 2021-05-28 11:01:40.366274503 -0600 @@ -22,7 +22,7 @@ cdef extern from *: # hack to get at cyt int unlikely(int) @@ -450,8 +438,8 @@ diff -up src/sage/libs/singular/polynomial.pyx.orig src/sage/libs/singular/polyn from sage.cpython.string cimport bytes_to_str, str_to_bytes diff -up src/sage/libs/symmetrica/sc.pxi.orig src/sage/libs/symmetrica/sc.pxi ---- src/sage/libs/symmetrica/sc.pxi.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/symmetrica/sc.pxi 2020-10-30 11:34:26.011980287 -0600 +--- src/sage/libs/symmetrica/sc.pxi.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/symmetrica/sc.pxi 2021-05-28 11:01:40.367274504 -0600 @@ -103,7 +103,7 @@ def charvalue_symmetrica(irred, cls, tab @@ -462,9 +450,9 @@ diff -up src/sage/libs/symmetrica/sc.pxi.orig src/sage/libs/symmetrica/sc.pxi MATRIX object, the charactertable of S_b \wr S_a, co becomes a VECTOR object of classorders and cl becomes a VECTOR object of diff -up src/sage/matrix/matrix0.pyx.orig src/sage/matrix/matrix0.pyx ---- src/sage/matrix/matrix0.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix0.pyx 2020-10-30 11:34:26.013980284 -0600 -@@ -2241,7 +2241,7 @@ cdef class Matrix(sage.structure.element +--- src/sage/matrix/matrix0.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix0.pyx 2021-05-28 11:01:40.369274504 -0600 +@@ -2245,7 +2245,7 @@ cdef class Matrix(sage.structure.element # Functions ################################################### def act_on_polynomial(self, f): @@ -473,7 +461,7 @@ diff -up src/sage/matrix/matrix0.pyx.orig src/sage/matrix/matrix0.pyx Returns the polynomial f(self\*x). INPUT: -@@ -2307,7 +2307,7 @@ cdef class Matrix(sage.structure.element +@@ -2311,7 +2311,7 @@ cdef class Matrix(sage.structure.element # Arithmetic ################################################### def commutator(self, other): @@ -482,7 +470,7 @@ diff -up src/sage/matrix/matrix0.pyx.orig src/sage/matrix/matrix0.pyx Return the commutator self\*other - other\*self. EXAMPLES:: -@@ -4767,7 +4767,7 @@ cdef class Matrix(sage.structure.element +@@ -4915,7 +4915,7 @@ cdef class Matrix(sage.structure.element # Arithmetic ################################################### cdef _vector_times_matrix_(self, Vector v): @@ -492,9 +480,9 @@ diff -up src/sage/matrix/matrix0.pyx.orig src/sage/matrix/matrix0.pyx INPUT: diff -up src/sage/matrix/matrix2.pyx.orig src/sage/matrix/matrix2.pyx ---- src/sage/matrix/matrix2.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix2.pyx 2020-10-30 11:34:26.019980275 -0600 -@@ -9446,7 +9446,7 @@ cdef class Matrix(Matrix1): +--- src/sage/matrix/matrix2.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix2.pyx 2021-05-28 11:01:40.374274505 -0600 +@@ -9594,7 +9594,7 @@ cdef class Matrix(Matrix1): return img def density(self): @@ -504,9 +492,9 @@ diff -up src/sage/matrix/matrix2.pyx.orig src/sage/matrix/matrix2.pyx By density we understand the ratio of the number of nonzero diff -up src/sage/matrix/matrix_integer_dense.pyx.orig src/sage/matrix/matrix_integer_dense.pyx ---- src/sage/matrix/matrix_integer_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_integer_dense.pyx 2020-10-30 11:52:49.737274785 -0600 -@@ -745,7 +745,7 @@ cdef class Matrix_integer_dense(Matrix_d +--- src/sage/matrix/matrix_integer_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_integer_dense.pyx 2021-05-28 11:01:40.376274505 -0600 +@@ -746,7 +746,7 @@ cdef class Matrix_integer_dense(Matrix_d return ans def _multiply_classical(self, Matrix_integer_dense right): @@ -516,8 +504,8 @@ diff -up src/sage/matrix/matrix_integer_dense.pyx.orig src/sage/matrix/matrix_in sage: n = 3 diff -up src/sage/matrix/matrix_modn_dense_template.pxi.orig src/sage/matrix/matrix_modn_dense_template.pxi ---- src/sage/matrix/matrix_modn_dense_template.pxi.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_modn_dense_template.pxi 2020-10-30 11:34:26.028980261 -0600 +--- src/sage/matrix/matrix_modn_dense_template.pxi.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_modn_dense_template.pxi 2021-05-28 11:01:40.377274505 -0600 @@ -664,7 +664,7 @@ cdef class Matrix_modn_dense_template(Ma return (word_size, little_endian, s), 10 @@ -537,9 +525,9 @@ diff -up src/sage/matrix/matrix_modn_dense_template.pxi.orig src/sage/matrix/mat using the xgcd relation between their first coefficients ``a`` and ``b``. diff -up src/sage/matrix/matrix_polynomial_dense.pyx.orig src/sage/matrix/matrix_polynomial_dense.pyx ---- src/sage/matrix/matrix_polynomial_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_polynomial_dense.pyx 2020-10-30 11:34:26.030980258 -0600 -@@ -44,16 +44,16 @@ cdef class Matrix_polynomial_dense(Matri +--- src/sage/matrix/matrix_polynomial_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_polynomial_dense.pyx 2021-05-28 11:01:40.377274505 -0600 +@@ -49,16 +49,16 @@ cdef class Matrix_polynomial_dense(Matri commonly used in the literature. - Working column-wise: each column of the matrix is a vector in the basis; @@ -565,9 +553,9 @@ diff -up src/sage/matrix/matrix_polynomial_dense.pyx.orig src/sage/matrix/matrix For the rest of this class description, we assume that one is working row-wise. For a given such module, all its bases are equivalent under diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_rational_dense.pyx ---- src/sage/matrix/matrix_rational_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_rational_dense.pyx 2020-10-30 11:34:26.031980257 -0600 -@@ -506,7 +506,7 @@ cdef class Matrix_rational_dense(Matrix_ +--- src/sage/matrix/matrix_rational_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_rational_dense.pyx 2021-05-28 11:01:40.379274506 -0600 +@@ -507,7 +507,7 @@ cdef class Matrix_rational_dense(Matrix_ return rich_to_bool(op, 0) cdef _vector_times_matrix_(self, Vector v): @@ -576,7 +564,7 @@ diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_r Returns the vector times matrix product. INPUT: -@@ -919,7 +919,7 @@ cdef class Matrix_rational_dense(Matrix_ +@@ -920,7 +920,7 @@ cdef class Matrix_rational_dense(Matrix_ return 0 def _clear_denom(self): @@ -585,7 +573,7 @@ diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_r INPUT: -@@ -1186,7 +1186,7 @@ cdef class Matrix_rational_dense(Matrix_ +@@ -1187,7 +1187,7 @@ cdef class Matrix_rational_dense(Matrix_ return ans def _multiply_over_integers(self, Matrix_rational_dense right, algorithm='default'): @@ -595,8 +583,8 @@ diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_r return the result. diff -up src/sage/matroids/basis_exchange_matroid.pyx.orig src/sage/matroids/basis_exchange_matroid.pyx ---- src/sage/matroids/basis_exchange_matroid.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matroids/basis_exchange_matroid.pyx 2020-10-30 11:34:26.033980254 -0600 +--- src/sage/matroids/basis_exchange_matroid.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matroids/basis_exchange_matroid.pyx 2021-05-28 11:01:40.380274506 -0600 @@ -2115,7 +2115,7 @@ cdef class BasisExchangeMatroid(Matroid) return EQ[0] @@ -607,8 +595,8 @@ diff -up src/sage/matroids/basis_exchange_matroid.pyx.orig src/sage/matroids/bas INPUT: diff -up src/sage/matroids/linear_matroid.pyx.orig src/sage/matroids/linear_matroid.pyx ---- src/sage/matroids/linear_matroid.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matroids/linear_matroid.pyx 2020-10-30 11:34:26.038980246 -0600 +--- src/sage/matroids/linear_matroid.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matroids/linear_matroid.pyx 2021-05-28 11:01:40.381274506 -0600 @@ -796,7 +796,7 @@ cdef class LinearMatroid(BasisExchangeMa # (field) isomorphism @@ -628,9 +616,9 @@ diff -up src/sage/matroids/linear_matroid.pyx.orig src/sage/matroids/linear_matr matroids. diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx ---- src/sage/matroids/matroid.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matroids/matroid.pyx 2020-10-30 11:34:26.040980243 -0600 -@@ -3079,7 +3079,7 @@ cdef class Matroid(SageObject): +--- src/sage/matroids/matroid.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matroids/matroid.pyx 2021-05-28 11:01:40.383274506 -0600 +@@ -3076,7 +3076,7 @@ cdef class Matroid(SageObject): return Polyhedron(vertices) def independence_matroid_polytope(self): @@ -639,7 +627,7 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx Return the independence matroid polytope of ``self``. This is defined as the convex hull of the vertices -@@ -3359,7 +3359,7 @@ cdef class Matroid(SageObject): +@@ -3356,7 +3356,7 @@ cdef class Matroid(SageObject): return self._is_isomorphism(other, morphism) cpdef is_isomorphism(self, other, morphism): @@ -648,7 +636,7 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx Test if a provided morphism induces a matroid isomorphism. A *morphism* is a map from the groundset of ``self`` to the groundset -@@ -3482,7 +3482,7 @@ cdef class Matroid(SageObject): +@@ -3479,7 +3479,7 @@ cdef class Matroid(SageObject): return self._is_isomorphism(other, mf) cpdef _is_isomorphism(self, other, morphism): @@ -657,7 +645,7 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx Version of is_isomorphism() that does no type checking. INPUT: -@@ -4246,7 +4246,7 @@ cdef class Matroid(SageObject): +@@ -4242,7 +4242,7 @@ cdef class Matroid(SageObject): return self.dual().extension(element, subsets).dual() cpdef modular_cut(self, subsets): @@ -666,7 +654,7 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx Compute the modular cut generated by ``subsets``. A *modular cut* is a collection `C` of flats such that -@@ -4647,7 +4647,7 @@ cdef class Matroid(SageObject): +@@ -4643,7 +4643,7 @@ cdef class Matroid(SageObject): return True cpdef is_cosimple(self): @@ -675,7 +663,7 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx Test if the matroid is cosimple. A matroid is *cosimple* if it contains no cocircuits of length 1 or 2. -@@ -7416,7 +7416,7 @@ cdef class Matroid(SageObject): +@@ -7409,7 +7409,7 @@ cdef class Matroid(SageObject): return A cpdef tutte_polynomial(self, x=None, y=None): @@ -685,8 +673,8 @@ diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx The *Tutte polynomial* of a matroid is the polynomial diff -up src/sage/misc/cachefunc.pyx.orig src/sage/misc/cachefunc.pyx ---- src/sage/misc/cachefunc.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/misc/cachefunc.pyx 2020-10-30 11:34:26.042980240 -0600 +--- src/sage/misc/cachefunc.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/misc/cachefunc.pyx 2021-05-28 11:01:40.384274506 -0600 @@ -835,7 +835,7 @@ cdef class CachedFunction(object): ## forward other questions to the cached function. @@ -697,9 +685,9 @@ diff -up src/sage/misc/cachefunc.pyx.orig src/sage/misc/cachefunc.pyx A cached function shall inherit the documentation diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py ---- src/sage/misc/sageinspect.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/misc/sageinspect.py 2020-11-01 10:38:08.203022437 -0700 -@@ -844,7 +844,7 @@ class SageArgSpecVisitor(ast.NodeVisitor +--- src/sage/misc/sageinspect.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/misc/sageinspect.py 2021-05-28 11:01:40.384274506 -0600 +@@ -843,7 +843,7 @@ class SageArgSpecVisitor(ast.NodeVisitor return -self.visit(node.operand) def _grep_first_pair_of_parentheses(s): @@ -708,7 +696,7 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py Return the first matching pair of parentheses in a code string. INPUT: -@@ -899,7 +899,7 @@ def _grep_first_pair_of_parentheses(s): +@@ -898,7 +898,7 @@ def _grep_first_pair_of_parentheses(s): raise SyntaxError("The given string does not contain balanced parentheses") def _split_syntactical_unit(s): @@ -718,8 +706,8 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py INPUT: diff -up src/sage/modular/arithgroup/arithgroup_element.pyx.orig src/sage/modular/arithgroup/arithgroup_element.pyx ---- src/sage/modular/arithgroup/arithgroup_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/modular/arithgroup/arithgroup_element.pyx 2020-10-30 11:34:26.042980240 -0600 +--- src/sage/modular/arithgroup/arithgroup_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/modular/arithgroup/arithgroup_element.pyx 2021-05-28 11:01:40.385274507 -0600 @@ -194,7 +194,7 @@ cdef class ArithmeticSubgroupElement(Mul return richcmp(self.__x, right.__x, op) @@ -730,10 +718,10 @@ diff -up src/sage/modular/arithgroup/arithgroup_element.pyx.orig src/sage/modula contain the zero matrix. diff -up src/sage/modular/arithgroup/farey_symbol.pyx.orig src/sage/modular/arithgroup/farey_symbol.pyx ---- src/sage/modular/arithgroup/farey_symbol.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/modular/arithgroup/farey_symbol.pyx 2020-10-30 11:34:26.043980238 -0600 -@@ -617,7 +617,7 @@ cdef class Farey: - (forced_format is None and '\\xymatrix' in latex.mathjax_avoid_list()): +--- src/sage/modular/arithgroup/farey_symbol.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/modular/arithgroup/farey_symbol.pyx 2021-05-28 11:01:40.385274507 -0600 +@@ -614,7 +614,7 @@ cdef class Farey: + if forced_format == 'plain': # output not using xymatrix s = r'\left( -\infty' - a = [x._latex_() for x in self.fractions()] + ['\infty'] @@ -742,8 +730,8 @@ diff -up src/sage/modular/arithgroup/farey_symbol.pyx.orig src/sage/modular/arit for i in xrange(len(a)): u = b[i] diff -up src/sage/modular/modsym/heilbronn.pyx.orig src/sage/modular/modsym/heilbronn.pyx ---- src/sage/modular/modsym/heilbronn.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/modular/modsym/heilbronn.pyx 2020-10-30 11:34:26.043980238 -0600 +--- src/sage/modular/modsym/heilbronn.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/modular/modsym/heilbronn.pyx 2021-05-28 11:01:40.385274507 -0600 @@ -211,7 +211,7 @@ cdef class Heilbronn: sig_off() @@ -754,9 +742,9 @@ diff -up src/sage/modular/modsym/heilbronn.pyx.orig src/sage/modular/modsym/heil - ``ans`` - fmpz_poly_t\*; pre-allocated an diff -up src/sage/modules/free_module_element.pyx.orig src/sage/modules/free_module_element.pyx ---- src/sage/modules/free_module_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/modules/free_module_element.pyx 2020-10-30 11:34:26.045980235 -0600 -@@ -2345,7 +2345,7 @@ cdef class FreeModuleElement(Vector): +--- src/sage/modules/free_module_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/modules/free_module_element.pyx 2021-05-28 11:04:51.953309813 -0600 +@@ -2346,7 +2346,7 @@ cdef class FreeModuleElement(Vector): def plot_step(self, xmin=0, xmax=1, eps=None, res=None, connect=True, **kwds): @@ -769,15 +757,15 @@ diff -up src/sage/modules/free_module_element.pyx.orig src/sage/modules/free_mod from sage.misc.latex import latex vector_delimiters = latex.vector_delimiters() s = '\\left' + vector_delimiters[0] -- s += ',\,'.join([latex(a) for a in self.list()]) -+ s += ',\\,'.join([latex(a) for a in self.list()]) +- s += ',\,'.join(latex(a) for a in self.list()) ++ s += ',\\,'.join(latex(a) for a in self.list()) return s + '\\right' + vector_delimiters[1] def dense_vector(self): diff -up src/sage/numerical/backends/generic_backend.pyx.orig src/sage/numerical/backends/generic_backend.pyx ---- src/sage/numerical/backends/generic_backend.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/numerical/backends/generic_backend.pyx 2020-10-30 11:34:26.046980234 -0600 -@@ -1370,7 +1370,7 @@ cdef class GenericBackend: +--- src/sage/numerical/backends/generic_backend.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/numerical/backends/generic_backend.pyx 2021-05-28 11:01:40.386274507 -0600 +@@ -1373,7 +1373,7 @@ cdef class GenericBackend: raise NotImplementedError() cpdef bint is_variable_basic(self, int index): @@ -786,7 +774,7 @@ diff -up src/sage/numerical/backends/generic_backend.pyx.orig src/sage/numerical Test whether the given variable is basic. This assumes that the problem has been solved with the simplex method -@@ -1400,7 +1400,7 @@ cdef class GenericBackend: +@@ -1403,7 +1403,7 @@ cdef class GenericBackend: raise NotImplementedError() cpdef bint is_variable_nonbasic_at_lower_bound(self, int index): @@ -795,7 +783,7 @@ diff -up src/sage/numerical/backends/generic_backend.pyx.orig src/sage/numerical Test whether the given variable is nonbasic at lower bound. This assumes that the problem has been solved with the simplex method -@@ -1430,7 +1430,7 @@ cdef class GenericBackend: +@@ -1433,7 +1433,7 @@ cdef class GenericBackend: raise NotImplementedError() cpdef bint is_slack_variable_basic(self, int index): @@ -804,7 +792,7 @@ diff -up src/sage/numerical/backends/generic_backend.pyx.orig src/sage/numerical Test whether the slack variable of the given row is basic. This assumes that the problem has been solved with the simplex method -@@ -1460,7 +1460,7 @@ cdef class GenericBackend: +@@ -1463,7 +1463,7 @@ cdef class GenericBackend: raise NotImplementedError() cpdef bint is_slack_variable_nonbasic_at_lower_bound(self, int index): @@ -814,8 +802,8 @@ diff -up src/sage/numerical/backends/generic_backend.pyx.orig src/sage/numerical This assumes that the problem has been solved with the simplex method diff -up src/sage/numerical/backends/glpk_backend.pyx.orig src/sage/numerical/backends/glpk_backend.pyx ---- src/sage/numerical/backends/glpk_backend.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/numerical/backends/glpk_backend.pyx 2020-10-30 11:34:26.047980232 -0600 +--- src/sage/numerical/backends/glpk_backend.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/numerical/backends/glpk_backend.pyx 2021-05-28 11:01:40.387274507 -0600 @@ -2327,7 +2327,7 @@ cdef class GLPKBackend(GenericBackend): @@ -853,8 +841,8 @@ diff -up src/sage/numerical/backends/glpk_backend.pyx.orig src/sage/numerical/ba This assumes that the problem has been solved with the simplex method diff -up src/sage/numerical/backends/interactivelp_backend.pyx.orig src/sage/numerical/backends/interactivelp_backend.pyx ---- src/sage/numerical/backends/interactivelp_backend.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/numerical/backends/interactivelp_backend.pyx 2020-10-30 11:34:26.047980232 -0600 +--- src/sage/numerical/backends/interactivelp_backend.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/numerical/backends/interactivelp_backend.pyx 2021-05-28 11:01:40.387274507 -0600 @@ -1071,7 +1071,7 @@ cdef class InteractiveLPBackend: problem_type, ring, objective_constant_term=d) @@ -910,8 +898,8 @@ diff -up src/sage/numerical/backends/interactivelp_backend.pyx.orig src/sage/num EXAMPLES:: diff -up src/sage/quivers/algebra_elements.pyx.orig src/sage/quivers/algebra_elements.pyx ---- src/sage/quivers/algebra_elements.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/quivers/algebra_elements.pyx 2020-10-30 11:34:26.048980231 -0600 +--- src/sage/quivers/algebra_elements.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/quivers/algebra_elements.pyx 2021-05-28 11:01:40.388274507 -0600 @@ -280,7 +280,7 @@ cdef class PathAlgebraElement(RingElemen ) @@ -922,9 +910,9 @@ diff -up src/sage/quivers/algebra_elements.pyx.orig src/sage/quivers/algebra_ele EXAMPLES:: diff -up src/sage/rings/bernoulli_mod_p.pyx.orig src/sage/rings/bernoulli_mod_p.pyx ---- src/sage/rings/bernoulli_mod_p.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/bernoulli_mod_p.pyx 2020-10-30 11:34:26.048980231 -0600 -@@ -37,7 +37,7 @@ from sage.rings.bernmm import bernmm_ber +--- src/sage/rings/bernoulli_mod_p.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/bernoulli_mod_p.pyx 2021-05-28 11:01:40.388274507 -0600 +@@ -41,7 +41,7 @@ from sage.rings.bernmm import bernmm_ber def verify_bernoulli_mod_p(data): @@ -934,8 +922,8 @@ diff -up src/sage/rings/bernoulli_mod_p.pyx.orig src/sage/rings/bernoulli_mod_p. It checks the identity diff -up src/sage/rings/complex_interval.pyx.orig src/sage/rings/complex_interval.pyx ---- src/sage/rings/complex_interval.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/complex_interval.pyx 2020-10-30 11:34:26.050980228 -0600 +--- src/sage/rings/complex_interval.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/complex_interval.pyx 2021-05-28 11:01:40.388274507 -0600 @@ -729,7 +729,7 @@ cdef class ComplexIntervalFieldElement(s return x @@ -955,8 +943,8 @@ diff -up src/sage/rings/complex_interval.pyx.orig src/sage/rings/complex_interva EXAMPLES:: diff -up src/sage/rings/complex_mpc.pyx.orig src/sage/rings/complex_mpc.pyx ---- src/sage/rings/complex_mpc.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/complex_mpc.pyx 2020-10-30 11:34:26.051980226 -0600 +--- src/sage/rings/complex_mpc.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/complex_mpc.pyx 2021-05-28 11:01:40.388274507 -0600 @@ -150,15 +150,15 @@ cdef inline mpfr_rnd_t rnd_im(mpc_rnd_t sign = '[+-]' digit_ten = '[0123456789]' @@ -1059,8 +1047,8 @@ diff -up src/sage/rings/complex_mpc.pyx.orig src/sage/rings/complex_mpc.pyx .. MATH:: diff -up src/sage/rings/finite_rings/hom_finite_field.pyx.orig src/sage/rings/finite_rings/hom_finite_field.pyx ---- src/sage/rings/finite_rings/hom_finite_field.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/finite_rings/hom_finite_field.pyx 2020-10-30 11:34:26.053980223 -0600 +--- src/sage/rings/finite_rings/hom_finite_field.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/finite_rings/hom_finite_field.pyx 2021-05-28 11:01:40.389274507 -0600 @@ -147,7 +147,7 @@ cdef class SectionFiniteFieldHomomorphis @@ -1071,9 +1059,9 @@ diff -up src/sage/rings/finite_rings/hom_finite_field.pyx.orig src/sage/rings/fi EXAMPLES:: diff -up src/sage/rings/finite_rings/integer_mod.pyx.orig src/sage/rings/finite_rings/integer_mod.pyx ---- src/sage/rings/finite_rings/integer_mod.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/finite_rings/integer_mod.pyx 2020-10-30 11:34:26.053980223 -0600 -@@ -2177,7 +2177,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs +--- src/sage/rings/finite_rings/integer_mod.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/finite_rings/integer_mod.pyx 2021-05-28 11:01:40.389274507 -0600 +@@ -2173,7 +2173,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs return int(self.lift()) def __pow__(IntegerMod_gmp self, exp, m): # NOTE: m ignored, always use modulus of parent ring @@ -1082,7 +1070,7 @@ diff -up src/sage/rings/finite_rings/integer_mod.pyx.orig src/sage/rings/finite_ EXAMPLES:: sage: R = Integers(10^10) -@@ -3434,7 +3434,7 @@ cdef class IntegerMod_int64(IntegerMod_a +@@ -3436,7 +3436,7 @@ cdef class IntegerMod_int64(IntegerMod_a return self._new_c(self.ivalue >> (-k)) def __pow__(IntegerMod_int64 self, exp, m): # NOTE: m ignored, always use modulus of parent ring @@ -1091,22 +1079,10 @@ diff -up src/sage/rings/finite_rings/integer_mod.pyx.orig src/sage/rings/finite_ EXAMPLES:: sage: R = Integers(10) -diff -up src/sage/rings/function_field/element.pyx.orig src/sage/rings/function_field/element.pyx ---- src/sage/rings/function_field/element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/function_field/element.pyx 2020-10-30 11:34:26.054980222 -0600 -@@ -148,7 +148,7 @@ cdef class FunctionFieldElement(FieldEle - raise NotImplementedError("PARI does not support general function field elements.") - - def _latex_(self): -- """ -+ r""" - EXAMPLES:: - - sage: K. = FunctionField(QQ) diff -up src/sage/rings/number_field/number_field_element.pyx.orig src/sage/rings/number_field/number_field_element.pyx ---- src/sage/rings/number_field/number_field_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/number_field/number_field_element.pyx 2020-10-30 11:34:26.056980219 -0600 -@@ -487,7 +487,7 @@ cdef class NumberFieldElement(FieldEleme +--- src/sage/rings/number_field/number_field_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/number_field/number_field_element.pyx 2021-05-28 11:01:43.185275025 -0600 +@@ -490,7 +490,7 @@ cdef class NumberFieldElement(FieldEleme return codomain(f(im_gens[0])) def _latex_(self): @@ -1116,8 +1092,8 @@ diff -up src/sage/rings/number_field/number_field_element.pyx.orig src/sage/ring EXAMPLES:: diff -up src/sage/rings/number_field/number_field_morphisms.pyx.orig src/sage/rings/number_field/number_field_morphisms.pyx ---- src/sage/rings/number_field/number_field_morphisms.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/number_field/number_field_morphisms.pyx 2020-10-30 11:34:26.056980219 -0600 +--- src/sage/rings/number_field/number_field_morphisms.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/number_field/number_field_morphisms.pyx 2021-05-28 11:01:43.186275025 -0600 @@ -340,7 +340,7 @@ cdef class EmbeddedNumberFieldConversion @@ -1137,9 +1113,9 @@ diff -up src/sage/rings/number_field/number_field_morphisms.pyx.orig src/sage/ri target (with respect to the \code{abs} function). If margin is greater than 1, and x and y are the first and second closest elements to target, diff -up src/sage/rings/padics/local_generic_element.pyx.orig src/sage/rings/padics/local_generic_element.pyx ---- src/sage/rings/padics/local_generic_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/local_generic_element.pyx 2020-10-30 11:34:26.058980215 -0600 -@@ -355,7 +355,7 @@ cdef class LocalGenericElement(Commutati +--- src/sage/rings/padics/local_generic_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/local_generic_element.pyx 2021-05-28 11:01:43.187275025 -0600 +@@ -401,7 +401,7 @@ cdef class LocalGenericElement(Commutati return ans def _latex_(self): @@ -1149,8 +1125,8 @@ diff -up src/sage/rings/padics/local_generic_element.pyx.orig src/sage/rings/pad EXAMPLES:: diff -up src/sage/rings/padics/padic_capped_absolute_element.pyx.orig src/sage/rings/padics/padic_capped_absolute_element.pyx ---- src/sage/rings/padics/padic_capped_absolute_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_capped_absolute_element.pyx 2020-10-30 11:34:26.059980214 -0600 +--- src/sage/rings/padics/padic_capped_absolute_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_capped_absolute_element.pyx 2021-05-28 11:01:43.187275025 -0600 @@ -383,7 +383,7 @@ cdef class pAdicCappedAbsoluteElement(CA return ans @@ -1170,8 +1146,8 @@ diff -up src/sage/rings/padics/padic_capped_absolute_element.pyx.orig src/sage/r This is a helper method for :meth:`exp`. diff -up src/sage/rings/padics/padic_capped_relative_element.pyx.orig src/sage/rings/padics/padic_capped_relative_element.pyx ---- src/sage/rings/padics/padic_capped_relative_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_capped_relative_element.pyx 2020-10-30 11:34:26.059980214 -0600 +--- src/sage/rings/padics/padic_capped_relative_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_capped_relative_element.pyx 2021-05-28 11:01:43.188275025 -0600 @@ -436,7 +436,7 @@ cdef class pAdicCappedRelativeElement(CR return ans @@ -1191,8 +1167,8 @@ diff -up src/sage/rings/padics/padic_capped_relative_element.pyx.orig src/sage/r This is a helper method for :meth:`exp`. diff -up src/sage/rings/padics/padic_fixed_mod_element.pyx.orig src/sage/rings/padics/padic_fixed_mod_element.pyx ---- src/sage/rings/padics/padic_fixed_mod_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_fixed_mod_element.pyx 2020-10-30 11:34:26.059980214 -0600 +--- src/sage/rings/padics/padic_fixed_mod_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_fixed_mod_element.pyx 2021-05-28 11:01:43.189275026 -0600 @@ -449,7 +449,7 @@ cdef class pAdicFixedModElement(FMElemen return ans @@ -1212,8 +1188,8 @@ diff -up src/sage/rings/padics/padic_fixed_mod_element.pyx.orig src/sage/rings/p This is a helper method for :meth:`exp`. diff -up src/sage/rings/padics/padic_floating_point_element.pyx.orig src/sage/rings/padics/padic_floating_point_element.pyx ---- src/sage/rings/padics/padic_floating_point_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_floating_point_element.pyx 2020-10-30 11:34:26.060980212 -0600 +--- src/sage/rings/padics/padic_floating_point_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_floating_point_element.pyx 2021-05-28 11:01:43.189275026 -0600 @@ -321,7 +321,7 @@ cdef class pAdicFloatingPointElement(FPE return Mod(selfvalue, modulus) @@ -1233,8 +1209,8 @@ diff -up src/sage/rings/padics/padic_floating_point_element.pyx.orig src/sage/ri This is a helper method for :meth:`exp`. diff -up src/sage/rings/padics/padic_generic_element.pyx.orig src/sage/rings/padics/padic_generic_element.pyx ---- src/sage/rings/padics/padic_generic_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_generic_element.pyx 2020-10-30 11:34:26.060980212 -0600 +--- src/sage/rings/padics/padic_generic_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_generic_element.pyx 2021-05-28 11:01:43.191275026 -0600 @@ -543,7 +543,7 @@ cdef class pAdicGenericElement(LocalGene return self._repr_(mode=mode) @@ -1263,9 +1239,9 @@ diff -up src/sage/rings/padics/padic_generic_element.pyx.orig src/sage/rings/pad This is a helper method for :meth:`exp`. diff -up src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx ---- src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx 2020-10-30 11:59:47.735685950 -0600 -@@ -904,7 +904,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE +--- src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx 2021-05-28 11:01:43.193275026 -0600 +@@ -908,7 +908,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE return ans def add_bigoh(self, absprec): @@ -1274,7 +1250,7 @@ diff -up src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig src/sage/rings/pa Return a new element truncated modulo \pi^absprec. This is only implemented for unramified extension at -@@ -982,7 +982,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE +@@ -986,7 +986,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE return ans def matrix_mod_pn(self): @@ -1283,22 +1259,10 @@ diff -up src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig src/sage/rings/pa Returns the matrix of right multiplication by the element on the power basis `1, x, x^2, \ldots, x^{d-1}` for this extension field. Thus the \emph{rows} of this matrix give the -diff -up src/sage/rings/polynomial/cyclotomic.pyx.orig src/sage/rings/polynomial/cyclotomic.pyx ---- src/sage/rings/polynomial/cyclotomic.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/cyclotomic.pyx 2020-10-30 11:34:26.063980208 -0600 -@@ -193,7 +193,7 @@ def cyclotomic_coeffs(nn, sparse=None): - return L - - def cyclotomic_value(n, x): -- """ -+ r""" - Return the value of the `n`-th cyclotomic polynomial evaluated at `x`. - - INPUT: diff -up src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig src/sage/rings/polynomial/multi_polynomial_libsingular.pyx ---- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2020-10-30 11:34:26.064980206 -0600 -@@ -2520,7 +2520,7 @@ cdef class MPolynomial_libsingular(MPoly +--- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2021-05-28 11:01:44.993275358 -0600 +@@ -2508,7 +2508,7 @@ cdef class MPolynomial_libsingular(MPoly return char_to_str(s) def _latex_(self): @@ -1308,8 +1272,8 @@ diff -up src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig src/sag EXAMPLES:: diff -up src/sage/rings/polynomial/ore_polynomial_element.pyx.orig src/sage/rings/polynomial/ore_polynomial_element.pyx ---- src/sage/rings/polynomial/ore_polynomial_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/ore_polynomial_element.pyx 2020-10-30 12:06:24.031271497 -0600 +--- src/sage/rings/polynomial/ore_polynomial_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/ore_polynomial_element.pyx 2021-05-28 11:01:44.994275358 -0600 @@ -1705,8 +1705,8 @@ cdef class OrePolynomial(AlgebraElement) var = "" s += "%s %s"%(x,var) @@ -1322,9 +1286,9 @@ diff -up src/sage/rings/polynomial/ore_polynomial_element.pyx.orig src/sage/ring if s == " ": return "0" diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/polynomial/polynomial_element.pyx ---- src/sage/rings/polynomial/polynomial_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/polynomial_element.pyx 2020-10-30 11:34:28.061977158 -0600 -@@ -2639,8 +2639,8 @@ cdef class Polynomial(CommutativeAlgebra +--- src/sage/rings/polynomial/polynomial_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/polynomial_element.pyx 2021-05-28 11:01:44.999275359 -0600 +@@ -2707,8 +2707,8 @@ cdef class Polynomial(CommutativeAlgebra var = "" s += "%s %s" % (x, var) s = s.replace(" + -", " - ") @@ -1335,7 +1299,7 @@ diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/po s = s.replace("|","") if s == " ": return "0" -@@ -2740,7 +2740,7 @@ cdef class Polynomial(CommutativeAlgebra +@@ -2808,7 +2808,7 @@ cdef class Polynomial(CommutativeAlgebra raise IndexError("polynomials are immutable") cpdef _floordiv_(self, right): @@ -1344,7 +1308,7 @@ diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/po Quotient of division of self by other. This is denoted //. If self = quotient \* right + remainder, this function returns -@@ -6481,8 +6481,8 @@ cdef class Polynomial(CommutativeAlgebra +@@ -6564,8 +6564,8 @@ cdef class Polynomial(CommutativeAlgebra where the roots `a` and `b` are to be considered in the algebraic closure of the fraction field of the coefficients and counted with multiplicities. If the polynomials are not monic this quantity is @@ -1356,9 +1320,9 @@ diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/po INPUT: diff -up src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx ---- src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx 2020-10-30 12:02:26.558489865 -0600 -@@ -1352,7 +1352,7 @@ cdef class Polynomial_integer_dense_flin +--- src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx 2021-05-28 11:01:45.000275359 -0600 +@@ -1379,7 +1379,7 @@ cdef class Polynomial_integer_dense_flin return smallInteger(fmpz_poly_degree(self.__poly)) def pseudo_divrem(self, B): @@ -1368,8 +1332,8 @@ diff -up src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig src/s and an integer `d` such that diff -up src/sage/rings/polynomial/real_roots.pyx.orig src/sage/rings/polynomial/real_roots.pyx ---- src/sage/rings/polynomial/real_roots.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/real_roots.pyx 2020-10-30 11:34:28.068977148 -0600 +--- src/sage/rings/polynomial/real_roots.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/real_roots.pyx 2021-05-28 11:01:45.002275359 -0600 @@ -1252,7 +1252,7 @@ def de_casteljau_intvec(Vector_integer_d cdef double half_ulp = ldexp(1.0 * 65/64, -54) @@ -1389,8 +1353,8 @@ diff -up src/sage/rings/polynomial/real_roots.pyx.orig src/sage/rings/polynomial on its largest real root, using the first-\lambda algorithm from "Implementations of a New Theorem for Computing Bounds for Positive diff -up src/sage/rings/real_double.pyx.orig src/sage/rings/real_double.pyx ---- src/sage/rings/real_double.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/real_double.pyx 2020-10-30 11:34:28.075977137 -0600 +--- src/sage/rings/real_double.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/real_double.pyx 2021-05-28 11:01:45.004275360 -0600 @@ -2092,7 +2092,7 @@ cdef class RealDoubleElement(FieldElemen return a @@ -1401,9 +1365,9 @@ diff -up src/sage/rings/real_double.pyx.orig src/sage/rings/real_double.pyx INPUT: diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx ---- src/sage/rings/real_mpfi.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/real_mpfi.pyx 2020-10-30 11:34:28.078977132 -0600 -@@ -1321,7 +1321,7 @@ cdef class RealIntervalFieldElement(Ring +--- src/sage/rings/real_mpfi.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/real_mpfi.pyx 2021-05-28 11:01:45.006275360 -0600 +@@ -1310,7 +1310,7 @@ cdef class RealIntervalFieldElement(Ring return self.str(10) def _latex_(self): @@ -1413,8 +1377,8 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx EXAMPLES:: diff -up src/sage/rings/semirings/tropical_semiring.pyx.orig src/sage/rings/semirings/tropical_semiring.pyx ---- src/sage/rings/semirings/tropical_semiring.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/semirings/tropical_semiring.pyx 2020-10-30 11:34:28.081977128 -0600 +--- src/sage/rings/semirings/tropical_semiring.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/semirings/tropical_semiring.pyx 2021-05-28 11:01:45.007275360 -0600 @@ -99,7 +99,7 @@ cdef class TropicalSemiringElement(Eleme return repr(self._val) @@ -1425,8 +1389,8 @@ diff -up src/sage/rings/semirings/tropical_semiring.pyx.orig src/sage/rings/semi EXAMPLES:: diff -up src/sage/rings/tate_algebra_element.pyx.orig src/sage/rings/tate_algebra_element.pyx ---- src/sage/rings/tate_algebra_element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/tate_algebra_element.pyx 2020-10-30 11:34:28.082977126 -0600 +--- src/sage/rings/tate_algebra_element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/tate_algebra_element.pyx 2021-05-28 11:01:45.009275361 -0600 @@ -3447,7 +3447,7 @@ cdef class TateAlgebraElement(Commutativ @coerce_binop @@ -1437,8 +1401,8 @@ diff -up src/sage/rings/tate_algebra_element.pyx.orig src/sage/rings/tate_algebr INPUT: diff -up src/sage/structure/coerce_maps.pyx.orig src/sage/structure/coerce_maps.pyx ---- src/sage/structure/coerce_maps.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/structure/coerce_maps.pyx 2020-10-30 11:34:28.083977125 -0600 +--- src/sage/structure/coerce_maps.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/structure/coerce_maps.pyx 2021-05-28 11:01:45.010275361 -0600 @@ -312,7 +312,7 @@ cdef class NamedConvertMap(Map): cdef class CallableConvertMap(Map): @@ -1449,8 +1413,8 @@ diff -up src/sage/structure/coerce_maps.pyx.orig src/sage/structure/coerce_maps. This is especially useful to create maps from bound methods. diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx ---- src/sage/symbolic/expression.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/symbolic/expression.pyx 2020-10-30 12:10:19.747169301 -0600 +--- src/sage/symbolic/expression.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/symbolic/expression.pyx 2021-05-28 11:01:45.016275362 -0600 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -""" @@ -1458,7 +1422,7 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx Symbolic Expressions RELATIONAL EXPRESSIONS: -@@ -4830,7 +4830,7 @@ cdef class Expression(CommutativeRingEle +@@ -4911,7 +4911,7 @@ cdef class Expression(CommutativeRingEle expand_rational = rational_expand = expand def expand_trig(self, full=False, half_angles=False, plus=True, times=True): @@ -1467,7 +1431,7 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx Expand trigonometric and hyperbolic functions of sums of angles and of multiple angles occurring in self. For best results, self should already be expanded. -@@ -7346,7 +7346,7 @@ cdef class Expression(CommutativeRingEle +@@ -7472,7 +7472,7 @@ cdef class Expression(CommutativeRingEle return new_Expression_from_GEx(self._parent, x) def gosper_term(self, n): @@ -1477,9 +1441,9 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx Suppose ``f``=``self`` is a hypergeometric term such that: diff -up src/sage/symbolic/function.pyx.orig src/sage/symbolic/function.pyx ---- src/sage/symbolic/function.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/symbolic/function.pyx 2020-10-30 11:34:28.088977117 -0600 -@@ -1581,7 +1581,7 @@ cdef class DeprecatedSFunction(SymbolicF +--- src/sage/symbolic/function.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/symbolic/function.pyx 2021-05-28 11:01:45.017275362 -0600 +@@ -1588,7 +1588,7 @@ cdef class DeprecatedSFunction(SymbolicF evalf_params_first, pickled_functions)) def __setstate__(self, state): @@ -1489,8 +1453,8 @@ diff -up src/sage/symbolic/function.pyx.orig src/sage/symbolic/function.pyx sage: from sage.symbolic.function import DeprecatedSFunction diff -up src/sage/symbolic/ring.pyx.orig src/sage/symbolic/ring.pyx ---- src/sage/symbolic/ring.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/symbolic/ring.pyx 2020-10-30 11:34:28.089977116 -0600 +--- src/sage/symbolic/ring.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/symbolic/ring.pyx 2021-05-28 11:01:45.018275362 -0600 @@ -86,7 +86,7 @@ cdef class SymbolicRing(CommutativeRing) return "Symbolic Ring" @@ -1500,7 +1464,7 @@ diff -up src/sage/symbolic/ring.pyx.orig src/sage/symbolic/ring.pyx Return latex representation of the symbolic ring. EXAMPLES:: -@@ -483,7 +483,7 @@ cdef class SymbolicRing(CommutativeRing) +@@ -484,7 +484,7 @@ cdef class SymbolicRing(CommutativeRing) return new_Expression_from_GEx(self, exp) def wild(self, unsigned int n=0): @@ -1509,7 +1473,7 @@ diff -up src/sage/symbolic/ring.pyx.orig src/sage/symbolic/ring.pyx Return the n-th wild-card for pattern matching and substitution. INPUT: -@@ -735,7 +735,7 @@ cdef class SymbolicRing(CommutativeRing) +@@ -750,7 +750,7 @@ cdef class SymbolicRing(CommutativeRing) return e def var(self, name, latex_name=None, n=None, domain=None): diff --git a/sagemath-extensions.patch b/sagemath-extensions.patch index f6e5a8c..507472d 100644 --- a/sagemath-extensions.patch +++ b/sagemath-extensions.patch @@ -1,7 +1,7 @@ diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/env.py 2020-10-30 15:44:29.575821493 -0600 -@@ -413,7 +413,8 @@ def cython_aliases(): +--- src/sage/env.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/env.py 2021-05-28 11:18:15.134457599 -0600 +@@ -430,7 +430,8 @@ def cython_aliases(): aliases[var + "INCDIR"] = pc['include_dirs'] aliases[var + "LIBDIR"] = pc['library_dirs'] aliases[var + "LIBEXTRA"] = list(filter(lambda s: not s.startswith(('-l','-L')), libs.split())) @@ -12,25 +12,25 @@ diff -up src/sage/env.py.orig src/sage/env.py # uname-specific flags UNAME = os.uname() diff -up src/sage/graphs/mcqd.pyx.orig src/sage/graphs/mcqd.pyx ---- src/sage/graphs/mcqd.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/graphs/mcqd.pyx 2020-10-30 15:47:32.294609185 -0600 +--- src/sage/graphs/mcqd.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/graphs/mcqd.pyx 2021-05-28 11:18:15.134457599 -0600 @@ -1,4 +1,5 @@ # distutils: language = c++ +# distutils: libraries = mcqd # sage_setup: distribution = sage-mcqd - from sage.ext.memory_allocator cimport MemoryAllocator + from cysignals.signals cimport sig_on, sig_off diff -up src/sage/interfaces/primecount.pyx.orig src/sage/interfaces/primecount.pyx ---- src/sage/interfaces/primecount.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/primecount.pyx 2020-10-30 15:47:42.766597012 -0600 +--- src/sage/interfaces/primecount.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/primecount.pyx 2021-05-28 11:18:15.134457599 -0600 @@ -1,3 +1,4 @@ +# distutils: libraries = primecount # sage_setup: distribution = sage-primecount r""" diff -up src/sage/libs/arb/arb.pxd.orig src/sage/libs/arb/arb.pxd ---- src/sage/libs/arb/arb.pxd.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/arb/arb.pxd 2020-10-30 15:47:18.918624733 -0600 +--- src/sage/libs/arb/arb.pxd.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/arb/arb.pxd 2021-05-28 11:18:15.135457599 -0600 @@ -1,4 +1,5 @@ # distutils: libraries = gmp flint ARB_LIBRARY +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -38,8 +38,8 @@ diff -up src/sage/libs/arb/arb.pxd.orig src/sage/libs/arb/arb.pxd from sage.libs.arb.types cimport * diff -up src/sage/libs/arb/arb_version.pyx.orig src/sage/libs/arb/arb_version.pyx ---- src/sage/libs/arb/arb_version.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/arb/arb_version.pyx 2020-10-30 15:54:30.743122593 -0600 +--- src/sage/libs/arb/arb_version.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/arb/arb_version.pyx 2021-05-28 11:18:15.135457599 -0600 @@ -1,4 +1,5 @@ # -*- coding: utf-8 +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -47,48 +47,48 @@ diff -up src/sage/libs/arb/arb_version.pyx.orig src/sage/libs/arb/arb_version.py from sage.cpython.string cimport char_to_str diff -up src/sage/libs/arb/arith.pyx.orig src/sage/libs/arb/arith.pyx ---- src/sage/libs/arb/arith.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/arb/arith.pyx 2020-10-30 15:54:53.191096510 -0600 +--- src/sage/libs/arb/arith.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/arb/arith.pyx 2021-05-28 11:18:15.135457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/arb /usr/include/flint """ Arithmetic functions using the arb library """ diff -up src/sage/libs/mpmath/ext_impl.pyx.orig src/sage/libs/mpmath/ext_impl.pyx ---- src/sage/libs/mpmath/ext_impl.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/mpmath/ext_impl.pyx 2020-10-30 15:52:15.823279433 -0600 +--- src/sage/libs/mpmath/ext_impl.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/mpmath/ext_impl.pyx 2021-05-28 11:18:15.135457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/flint """ This module provides the core implementation of multiprecision floating-point arithmetic. Operations are done in-place. diff -up src/sage/libs/mpmath/ext_libmp.pyx.orig src/sage/libs/mpmath/ext_libmp.pyx ---- src/sage/libs/mpmath/ext_libmp.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/mpmath/ext_libmp.pyx 2020-10-30 15:53:01.023226835 -0600 +--- src/sage/libs/mpmath/ext_libmp.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/mpmath/ext_libmp.pyx 2021-05-28 11:18:15.135457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/flint """ Faster versions of some key functions in mpmath.libmp """ diff -up src/sage/libs/mpmath/ext_main.pyx.orig src/sage/libs/mpmath/ext_main.pyx ---- src/sage/libs/mpmath/ext_main.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/mpmath/ext_main.pyx 2020-10-30 15:52:35.663256336 -0600 +--- src/sage/libs/mpmath/ext_main.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/mpmath/ext_main.pyx 2021-05-28 11:18:15.135457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/flint """ mpmath floating-point numbers diff -up src/sage/libs/mpmath/utils.pyx.orig src/sage/libs/mpmath/utils.pyx ---- src/sage/libs/mpmath/utils.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/mpmath/utils.pyx 2020-10-30 15:51:33.798328356 -0600 +--- src/sage/libs/mpmath/utils.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/mpmath/utils.pyx 2021-05-28 11:18:15.136457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/flint """ Utilities for Sage-mpmath interaction diff -up src/sage/matrix/matrix_complex_ball_dense.pyx.orig src/sage/matrix/matrix_complex_ball_dense.pyx ---- src/sage/matrix/matrix_complex_ball_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_complex_ball_dense.pyx 2020-10-30 15:55:44.799036557 -0600 +--- src/sage/matrix/matrix_complex_ball_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_complex_ball_dense.pyx 2021-05-28 11:18:15.136457599 -0600 @@ -1,4 +1,5 @@ # distutils: libraries = ARB_LIBRARY +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -96,26 +96,28 @@ diff -up src/sage/matrix/matrix_complex_ball_dense.pyx.orig src/sage/matrix/matr Arbitrary precision complex ball matrices using Arb diff -up src/sage/matrix/matrix_cyclo_dense.pyx.orig src/sage/matrix/matrix_cyclo_dense.pyx ---- src/sage/matrix/matrix_cyclo_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_cyclo_dense.pyx 2020-10-30 15:56:45.647965864 -0600 -@@ -1,5 +1,6 @@ +--- src/sage/matrix/matrix_cyclo_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_cyclo_dense.pyx 2021-05-28 12:09:14.100657210 -0600 +@@ -1,7 +1,7 @@ # distutils: language = c++ - # distutils: libraries = ntl -+# distutils: include_dirs = /usr/include/arb /usr/include/flint + # distutils: libraries = NTL_LIBRARIES + # distutils: extra_compile_args = NTL_CFLAGS +-# distutils: include_dirs = NTL_INCDIR ++# distutils: include_dirs = NTL_INCDIR /usr/include/arb /usr/include/flint + # distutils: library_dirs = NTL_LIBDIR + # distutils: extra_link_args = NTL_LIBEXTRA """ - Matrices over Cyclotomic Fields - diff -up src/sage/matrix/matrix_mpolynomial_dense.pyx.orig src/sage/matrix/matrix_mpolynomial_dense.pyx ---- src/sage/matrix/matrix_mpolynomial_dense.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_mpolynomial_dense.pyx 2020-10-30 15:57:50.862889413 -0600 +--- src/sage/matrix/matrix_mpolynomial_dense.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/matrix/matrix_mpolynomial_dense.pyx 2021-05-28 11:18:15.136457599 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/singular /usr/include/factory """ Dense matrices over multivariate polynomials over fields diff -up src/sage/rings/complex_arb.pyx.orig src/sage/rings/complex_arb.pyx ---- src/sage/rings/complex_arb.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/complex_arb.pyx 2020-11-05 15:42:05.494453973 -0700 +--- src/sage/rings/complex_arb.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/complex_arb.pyx 2021-05-28 11:18:15.137457600 -0600 @@ -1,4 +1,5 @@ # -*- coding: utf-8 +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -123,42 +125,43 @@ diff -up src/sage/rings/complex_arb.pyx.orig src/sage/rings/complex_arb.pyx Arbitrary precision complex balls using Arb diff -up src/sage/rings/number_field/number_field_element_quadratic.pyx.orig src/sage/rings/number_field/number_field_element_quadratic.pyx ---- src/sage/rings/number_field/number_field_element_quadratic.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/number_field/number_field_element_quadratic.pyx 2020-11-05 15:48:03.436448764 -0700 -@@ -1,5 +1,6 @@ - # distutils: libraries = ntl +--- src/sage/rings/number_field/number_field_element_quadratic.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/number_field/number_field_element_quadratic.pyx 2021-05-28 11:18:15.138457600 -0600 +@@ -4,6 +4,7 @@ + # distutils: library_dirs = NTL_LIBDIR + # distutils: extra_link_args = NTL_LIBEXTRA # distutils: language = c++ +# distutils: include_dirs = /usr/include/arb /usr/include/flint """ Optimized Quadratic Number Field Elements diff -up src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig src/sage/rings/polynomial/multi_polynomial_libsingular.pyx ---- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2020-10-30 11:34:26.064980206 -0600 -+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2020-10-30 16:02:19.239570828 -0600 +--- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2021-05-28 11:01:44.993275358 -0600 ++++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2021-05-28 11:18:15.138457600 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/singular /usr/include/factory r""" Multivariate Polynomials via libSINGULAR diff -up src/sage/rings/polynomial/multi_polynomial.pyx.orig src/sage/rings/polynomial/multi_polynomial.pyx ---- src/sage/rings/polynomial/multi_polynomial.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/multi_polynomial.pyx 2020-11-05 15:42:05.505453973 -0700 +--- src/sage/rings/polynomial/multi_polynomial.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/multi_polynomial.pyx 2021-05-28 11:18:15.139457600 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/singular /usr/include/factory r""" Base class for elements of multivariate polynomial rings """ diff -up src/sage/rings/polynomial/plural.pyx.orig src/sage/rings/polynomial/plural.pyx ---- src/sage/rings/polynomial/plural.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/plural.pyx 2020-11-05 15:42:05.507453973 -0700 +--- src/sage/rings/polynomial/plural.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/plural.pyx 2021-05-28 11:18:15.139457600 -0600 @@ -1,3 +1,4 @@ +# distutils: include_dirs = /usr/include/singular /usr/include/factory r""" Noncommutative Polynomials via libSINGULAR/Plural diff -up src/sage/rings/polynomial/polynomial_complex_arb.pyx.orig src/sage/rings/polynomial/polynomial_complex_arb.pyx ---- src/sage/rings/polynomial/polynomial_complex_arb.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/polynomial_complex_arb.pyx 2020-10-30 16:03:19.870498851 -0600 +--- src/sage/rings/polynomial/polynomial_complex_arb.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/polynomial_complex_arb.pyx 2021-05-28 11:18:15.139457600 -0600 @@ -1,4 +1,5 @@ # -*- coding: utf-8 +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -166,8 +169,8 @@ diff -up src/sage/rings/polynomial/polynomial_complex_arb.pyx.orig src/sage/ring Univariate polynomials over `\CC` with interval coefficients using Arb. diff -up src/sage/rings/real_arb.pyx.orig src/sage/rings/real_arb.pyx ---- src/sage/rings/real_arb.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/real_arb.pyx 2020-11-05 15:42:05.510453973 -0700 +--- src/sage/rings/real_arb.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/real_arb.pyx 2021-05-28 11:18:15.140457600 -0600 @@ -1,4 +1,5 @@ # -*- coding: utf-8 +# distutils: include_dirs = /usr/include/arb /usr/include/flint @@ -175,13 +178,13 @@ diff -up src/sage/rings/real_arb.pyx.orig src/sage/rings/real_arb.pyx Arbitrary precision real balls using Arb diff -up src/sage_setup/command/sage_build_cython.py.orig src/sage_setup/command/sage_build_cython.py ---- src/sage_setup/command/sage_build_cython.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage_setup/command/sage_build_cython.py 2020-10-30 16:04:33.325411659 -0600 -@@ -59,6 +59,7 @@ if subprocess.call("""$CC --version | gr +--- src/sage_setup/command/sage_build_cython.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage_setup/command/sage_build_cython.py 2021-05-28 12:09:14.113657210 -0600 +@@ -209,6 +209,7 @@ class sage_build_cython(Command): + self.library_order = library_order + # Search for dependencies in the source tree and add to the list of include directories + self.sage_include_dirs = sage_include_directories(use_sources=True) ++ self.sage_include_dirs.extend(['@@CYSIGNALS@@']) - # Search for dependencies in the source tree and add to the list of include directories - include_dirs = sage_include_directories(use_sources=True) -+include_dirs.extend(['@@CYSIGNALS@@']) - - # Look for libraries only in what is configured already through distutils - # and environment variables + from Cython.Build import cythonize + import Cython.Compiler.Options diff --git a/sagemath-flexiblas.patch b/sagemath-flexiblas.patch index 83be25c..409ec7c 100644 --- a/sagemath-flexiblas.patch +++ b/sagemath-flexiblas.patch @@ -1,116 +1,283 @@ -diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2020-10-30 16:10:20.089999891 -0600 -+++ src/sage/env.py 2020-10-31 12:11:19.256615196 -0600 -@@ -391,7 +391,7 @@ def cython_aliases(): - aliases = {} +diff -up configure.orig configure +--- configure.orig 2021-05-09 16:01:38.000000000 -0600 ++++ configure 2021-06-03 06:44:51.137915577 -0600 +@@ -12184,12 +12184,12 @@ if test -n "$OPENBLAS_CFLAGS"; then + pkg_cv_OPENBLAS_CFLAGS="$OPENBLAS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ +- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openblas >= 0.2.20\""; } >&5 +- ($PKG_CONFIG --exists --print-errors "openblas >= 0.2.20") 2>&5 ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flexiblas >= 3.0.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "flexiblas >= 3.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then +- pkg_cv_OPENBLAS_CFLAGS=`$PKG_CONFIG --cflags "openblas >= 0.2.20" 2>/dev/null` ++ pkg_cv_OPENBLAS_CFLAGS=`$PKG_CONFIG --cflags "flexiblas >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes + else + pkg_failed=yes +@@ -12201,12 +12201,12 @@ if test -n "$OPENBLAS_LIBS"; then + pkg_cv_OPENBLAS_LIBS="$OPENBLAS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ +- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openblas >= 0.2.20\""; } >&5 +- ($PKG_CONFIG --exists --print-errors "openblas >= 0.2.20") 2>&5 ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flexiblas >= 3.0.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "flexiblas >= 3.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then +- pkg_cv_OPENBLAS_LIBS=`$PKG_CONFIG --libs "openblas >= 0.2.20" 2>/dev/null` ++ pkg_cv_OPENBLAS_LIBS=`$PKG_CONFIG --libs "flexiblas >= 3.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes + else + pkg_failed=yes +@@ -12227,9 +12227,9 @@ else + _pkg_short_errors_supported=no + fi + if test $_pkg_short_errors_supported = yes; then +- OPENBLAS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openblas >= 0.2.20" 2>&1` ++ OPENBLAS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "flexiblas >= 3.0.0" 2>&1` + else +- OPENBLAS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openblas >= 0.2.20" 2>&1` ++ OPENBLAS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "flexiblas >= 3.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$OPENBLAS_PKG_ERRORS" >&5 +@@ -12257,16 +12257,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ + #ifdef __cplusplus + extern "C" + #endif +-char openblas_get_config (); ++char flexiblas_get_version (); + int + main () + { +-return openblas_get_config (); ++return flexiblas_get_version (); + ; + return 0; + } + _ACEOF +-for ac_lib in '' openblas cblas blas; do ++for ac_lib in '' flexiblas cblas blas; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12319,22 +12319,22 @@ else + /* end confdefs.h. */ + #include +- char *openblas_get_config(void); ++ void flexiblas_get_version(void); + int version[3]; + int + main () + { + version[0] = version[1] = version[2] = 0; + /*printf("%s", openblas_get_config());*/ +- if (sscanf(openblas_get_config(), "OpenBLAS %d.%d.%d", +- version, version+1, version+2) < 1) +- return 1; ++ flexiblas_get_version(&version[0], &version[1], &version[2]); ++ ++ + if ( 10000 * version[0] + + 100 * version[1] + + version[2] +- < 10000 * 0 +- + 100 * 2 +- + 20) ++ < 10000 * 3 ++ + 100 * 0 ++ + 0) + return 1; + ; + return 0; +@@ -12387,7 +12387,7 @@ return cblas_dgemm (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas cblas blas; do ++for ac_lib in '' flexiblas cblas blas; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12451,7 +12451,7 @@ return dgeqrf (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12515,7 +12515,7 @@ return dgeqrf_ (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12579,7 +12579,7 @@ return DGEQRF (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12643,7 +12643,7 @@ return DGEQRF_ (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12731,16 +12731,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ + #ifdef __cplusplus + extern "C" + #endif +-char openblas_get_config (); ++char flexiblas_get_version (); + int + main () + { +-return openblas_get_config (); ++return flexiblas_get_version (); + ; + return 0; + } + _ACEOF +-for ac_lib in '' openblas cblas blas; do ++for ac_lib in '' flexiblas cblas blas; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12793,22 +12793,22 @@ else + /* end confdefs.h. */ + + #include +- char *openblas_get_config(void); ++ void flexiblas_get_version(void); + int version[3]; + int + main () + { + version[0] = version[1] = version[2] = 0; + /*printf("%s", openblas_get_config());*/ +- if (sscanf(openblas_get_config(), "OpenBLAS %d.%d.%d", +- version, version+1, version+2) < 1) +- return 1; ++ flexiblas_get_version(&version[0], &version[1], &version[2]); ++ ++ + if ( 10000 * version[0] + + 100 * version[1] + + version[2] +- < 10000 * 0 +- + 100 * 2 +- + 20) ++ < 10000 * 3 ++ + 100 * 0 ++ + 0) + return 1; + ; + return 0; +@@ -12861,7 +12861,7 @@ return cblas_dgemm (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas cblas blas; do ++for ac_lib in '' flexiblas cblas blas; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12925,7 +12925,7 @@ return dgeqrf (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -12989,7 +12989,7 @@ return dgeqrf_ (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -13053,7 +13053,7 @@ return DGEQRF (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -13117,7 +13117,7 @@ return DGEQRF_ (); + return 0; + } + _ACEOF +-for ac_lib in '' openblas lapack; do ++for ac_lib in '' flexiblas lapack; do + if test -z "$ac_lib"; then + ac_res="none required" + else +@@ -13192,12 +13192,12 @@ if test -n "$OPENBLASPCDIR"; then + pkg_cv_OPENBLASPCDIR="$OPENBLASPCDIR" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ +- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openblas\""; } >&5 +- ($PKG_CONFIG --exists --print-errors "openblas") 2>&5 ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flexiblas\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "flexiblas") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then +- pkg_cv_OPENBLASPCDIR=`$PKG_CONFIG --variable="pcfiledir" "openblas" 2>/dev/null` ++ pkg_cv_OPENBLASPCDIR=`$PKG_CONFIG --variable="pcfiledir" "flexiblas" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes + else + pkg_failed=yes +@@ -13412,7 +13412,7 @@ fi + if test x$sage_spkg_install_openblas != xyes; then : + + +- SAGE_OPENBLAS_PC_COMMAND="\$(LN) -sf \"$OPENBLASPCDIR/openblas.pc\" \"\$(@)\"" ++ SAGE_OPENBLAS_PC_COMMAND="\$(LN) -sf \"$OPENBLASPCDIR/flexiblas.pc\" \"\$(@)\"" + + + if test x$sage_install_blas_pc = xyes; then : +diff -up src/sage/env.py.orig src/sage/env.py +--- src/sage/env.py.orig 2021-06-16 13:13:15.378722205 -0600 ++++ src/sage/env.py 2021-06-16 13:42:26.443996772 -0600 +@@ -209,7 +209,7 @@ MAXIMA = var("MAXIMA", "maxima") + MAXIMA_FAS = var("MAXIMA_FAS") + SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") + ARB_LIBRARY = var("ARB_LIBRARY", "arb") +-CBLAS_PC_MODULES = var("CBLAS_PC_MODULES", "cblas:openblas:blas") ++CBLAS_PC_MODULES = var("CBLAS_PC_MODULES", "flexiblas:cblas:openblas:blas") + ECL_CONFIG = var("ECL_CONFIG", "ecl-config") + NTL_INCDIR = var("NTL_INCDIR") + NTL_LIBDIR = var("NTL_LIBDIR") +@@ -408,7 +408,7 @@ def cython_aliases(): for lib in ['fflas-ffpack', 'givaro', 'gsl', 'linbox', 'Singular', -- 'libpng', 'gdlib', 'm4ri', 'zlib', 'cblas', 'lapack']: -+ 'libpng', 'gdlib', 'm4ri', 'zlib', 'flexiblas']: + 'libpng', 'gdlib', 'm4ri', 'zlib', 'cblas', 'lapack']: var = lib.upper().replace("-", "") + "_" +- if lib == 'cblas': ++ if lib == 'cblas' or lib == 'lapack': + lib = get_cblas_pc_module_name() if lib == 'zlib': aliases[var + "CFLAGS"] = "" -diff -up src/sage/matrix/matrix_integer_dense.pyx.orig src/sage/matrix/matrix_integer_dense.pyx ---- src/sage/matrix/matrix_integer_dense.pyx.orig 2020-10-30 11:52:49.737274785 -0600 -+++ src/sage/matrix/matrix_integer_dense.pyx 2020-10-31 17:58:56.243063508 -0600 -@@ -1,8 +1,8 @@ - # -*- coding: utf-8 -*- - # distutils: extra_compile_args = M4RI_CFLAGS --# distutils: libraries = iml ntl gmp m CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = M4RI_INCDIR CBLAS_INCDIR -+# distutils: libraries = iml ntl gmp m FLEXIBLAS_LIBRARIES -+# distutils: library_dirs = FLEXIBLAS_LIBDIR -+# distutils: include_dirs = M4RI_INCDIR FLEXIBLAS_INCDIR - """ - Dense matrices over the integer ring - -diff -up src/sage/matrix/matrix_modn_dense_double.pyx.orig src/sage/matrix/matrix_modn_dense_double.pyx ---- src/sage/matrix/matrix_modn_dense_double.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_modn_dense_double.pyx 2020-11-05 15:44:59.390454421 -0700 -@@ -1,7 +1,7 @@ - # distutils: language = c++ --# distutils: libraries = CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = CBLAS_INCDIR -+# distutils: libraries = FLEXIBLAS_LIBRARIES -+# distutils: library_dirs = FLEXIBLAS_LIBDIR -+# distutils: include_dirs = FLEXIBLAS_INCDIR - # distutils: extra_compile_args = -D_XPG6 - """ - Dense matrices over `\ZZ/n\ZZ` for `n < 2^{23}` using LinBox's ``Modular`` -diff -up src/sage/matrix/matrix_modn_dense_float.pyx.orig src/sage/matrix/matrix_modn_dense_float.pyx ---- src/sage/matrix/matrix_modn_dense_float.pyx.orig 2020-11-05 15:44:59.391454421 -0700 -+++ src/sage/matrix/matrix_modn_dense_float.pyx 2020-11-05 15:45:54.965454564 -0700 -@@ -1,7 +1,7 @@ - # distutils: language = c++ --# distutils: libraries = CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = CBLAS_INCDIR -+# distutils: libraries = FLEXIBLAS_LIBRARIES -+# distutils: library_dirs = FLEXIBLAS_LIBDIR -+# distutils: include_dirs = FLEXIBLAS_INCDIR - """ - Dense matrices over `\ZZ/n\ZZ` for `n < 2^{11}` using LinBox's ``Modular`` - -diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_rational_dense.pyx ---- src/sage/matrix/matrix_rational_dense.pyx.orig 2020-10-30 11:34:26.031980257 -0600 -+++ src/sage/matrix/matrix_rational_dense.pyx 2020-10-31 17:58:10.490106273 -0600 -@@ -1,7 +1,7 @@ - # distutils: extra_compile_args = -D_XPG6 M4RI_CFLAGS --# distutils: libraries = iml ntl m CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = M4RI_INCDIR CBLAS_INCDIR -+# distutils: libraries = iml ntl m FLEXIBLAS_LIBRARIES -+# distutils: library_dirs = FLEXIBLAS_LIBDIR -+# distutils: include_dirs = M4RI_INCDIR FLEXIBLAS_INCDIR - - """ - Dense matrices over the rational field -diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py ---- src/sage/misc/cython.py.orig 2020-10-30 16:08:06.039158996 -0600 -+++ src/sage/misc/cython.py 2020-10-30 16:24:09.037024792 -0600 -@@ -35,10 +35,9 @@ from sage.cpython.string import str_to_b - - - # CBLAS can be one of multiple implementations --cblas_pc = pkgconfig.parse('cblas') --cblas_libs = list(cblas_pc['libraries']) --cblas_library_dirs = list(cblas_pc['library_dirs']) --cblas_include_dirs = list(cblas_pc['include_dirs']) -+cblas_libs = ['flexiblas'] -+cblas_library_dirs = ['/usr/lib'] -+cblas_include_dirs = ['/usr/include/flexiblas'] - - standard_libs = [ - 'mpfr', 'gmp', 'gmpxx', 'pari', 'm', -diff -up src/sage_setup/library_order.py.orig src/sage_setup/library_order.py ---- src/sage_setup/library_order.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage_setup/library_order.py 2020-10-31 12:11:54.313540360 -0600 -@@ -10,20 +10,18 @@ import os - import pkgconfig - - # CBLAS can be one of multiple implementations --cblas_pc = pkgconfig.parse('cblas') --cblas_libs = cblas_pc['libraries'] --cblas_library_dirs = cblas_pc['library_dirs'] --cblas_include_dirs = cblas_pc['include_dirs'] -+cblas_libs = ['flexiblas'] -+cblas_library_dirs = ['/usr/lib'] -+cblas_include_dirs = ['/usr/include/flexiblas'] - - # TODO: Remove Cygwin hack by installing a suitable cblas.pc - if os.path.exists('/usr/lib/libblas.dll.a'): - cblas_libs = ['gslcblas'] - - # LAPACK can be one of multiple implementations --lapack_pc = pkgconfig.parse('lapack') --lapack_libs = lapack_pc['libraries'] --lapack_library_dirs = lapack_pc['library_dirs'] --lapack_include_dirs = lapack_pc['include_dirs'] -+lapack_libs = ['flexiblas'] -+lapack_library_dirs = ['/usr/lib'] -+lapack_include_dirs = ['/usr/include/flexiblas'] - - # GD image library - gd_pc = pkgconfig.parse('gdlib') diff --git a/sagemath-jmol.patch b/sagemath-jmol.patch index 85d95dc..c339a61 100644 --- a/sagemath-jmol.patch +++ b/sagemath-jmol.patch @@ -1,6 +1,6 @@ diff -up src/sage/interfaces/jmoldata.py.orig src/sage/interfaces/jmoldata.py ---- src/sage/interfaces/jmoldata.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/jmoldata.py 2020-10-30 14:01:33.291052531 -0600 +--- src/sage/interfaces/jmoldata.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/jmoldata.py 2021-05-28 11:36:18.844565672 -0600 @@ -148,8 +148,6 @@ class JmolData(SageObject): sage: print(os.path.exists(testfile)) # optional -- java True @@ -21,5 +21,5 @@ diff -up src/sage/interfaces/jmoldata.py.orig src/sage/interfaces/jmoldata.py + subprocess.call(["jmol", "-n", "-g", size_arg, + "-J", launchscript, "-j", imagescript], stdout=jout) if not os.path.isfile(targetfile): - raise RuntimeError("Jmol failed to create file %s, see %s for details"%(repr(targetfile), repr(scratchout))) + raise RuntimeError(f"Jmol failed to create file {targetfile}: {Path(scratchout).read_text()}") os.unlink(scratchout) diff --git a/sagemath-lcalc.patch b/sagemath-lcalc.patch index 77c161c..f3f8e1f 100644 --- a/sagemath-lcalc.patch +++ b/sagemath-lcalc.patch @@ -1,10 +1,10 @@ diff -up src/sage/libs/lcalc/lcalc_Lfunction.pyx.orig src/sage/libs/lcalc/lcalc_Lfunction.pyx ---- src/sage/libs/lcalc/lcalc_Lfunction.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/lcalc/lcalc_Lfunction.pyx 2020-10-30 14:40:53.875121354 -0600 +--- src/sage/libs/lcalc/lcalc_Lfunction.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/lcalc/lcalc_Lfunction.pyx 2021-06-02 17:12:56.077802570 -0600 @@ -1,5 +1,5 @@ - # distutils: libraries = m ntl Lfunction --# distutils: extra_compile_args = -O3 -ffast-math -+# distutils: extra_compile_args = -std=gnu++11 -ffast-math - # distutils: language = c++ - r""" - Rubinstein's lcalc library + # distutils: libraries = m NTL_LIBRARIES Lfunction +-# distutils: extra_compile_args = NTL_CFLAGS -O3 -ffast-math ++# distutils: extra_compile_args = NTL_CFLAGS -std=gnu++11 -ffast-math + # distutils: include_dirs = NTL_INCDIR + # distutils: library_dirs = NTL_LIBDIR + # distutils: extra_link_args = NTL_LIBEXTRA diff --git a/sagemath-libgap.patch b/sagemath-libgap.patch index 77c0fc2..2fce69a 100644 --- a/sagemath-libgap.patch +++ b/sagemath-libgap.patch @@ -1,18 +1,18 @@ diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2020-10-30 15:44:29.575821493 -0600 -+++ src/sage/env.py 2020-10-30 16:09:54.834029866 -0600 -@@ -182,7 +182,7 @@ var('CONWAY_POLYNOMIALS_DATA_DIR', joi - var('GRAPHS_DATA_DIR', join(SAGE_SHARE, 'graphs')) - var('ELLCURVE_DATA_DIR', join(SAGE_SHARE, 'ellcurves')) - var('POLYTOPE_DATA_DIR', join(SAGE_SHARE, 'reflexive_polytopes')) --var('GAP_ROOT_DIR', join(SAGE_SHARE, 'gap')) -+var('GAP_ROOT_DIR', join('/usr','lib','gap')) - var('THEBE_DIR', join(SAGE_SHARE, 'thebe')) - var('COMBINATORIAL_DESIGN_DATA_DIR', join(SAGE_SHARE, 'combinatorial_designs')) - var('CREMONA_MINI_DATA_DIR', join(SAGE_SHARE, 'cremona')) +--- src/sage/env.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/env.py 2021-06-02 17:13:07.387813291 -0600 +@@ -194,7 +194,7 @@ CONWAY_POLYNOMIALS_DATA_DIR = var("CONWA + 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_ROOT_DIR = var("GAP_ROOT_DIR", join('/usr', 'lib', "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")) diff -up src/sage/libs/gap/element.pyx.orig src/sage/libs/gap/element.pyx ---- src/sage/libs/gap/element.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/gap/element.pyx 2020-10-30 14:42:23.392975217 -0600 +--- src/sage/libs/gap/element.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/gap/element.pyx 2021-05-28 11:43:51.678593573 -0600 @@ -264,7 +264,7 @@ cdef Obj make_gap_string(sage_string) ex try: GAP_Enter() @@ -104,8 +104,8 @@ diff -up src/sage/libs/gap/element.pyx.orig src/sage/libs/gap/element.pyx if isinstance(i, tuple): diff -up src/sage/libs/gap/gap_includes.pxd.orig src/sage/libs/gap/gap_includes.pxd ---- src/sage/libs/gap/gap_includes.pxd.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/gap/gap_includes.pxd 2020-10-30 14:42:23.392975217 -0600 +--- src/sage/libs/gap/gap_includes.pxd.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/gap/gap_includes.pxd 2021-05-28 11:43:51.679593573 -0600 @@ -13,8 +13,8 @@ from libc.stdint cimport uintptr_t, uint cdef extern from "gap/system.h" nogil: @@ -225,9 +225,9 @@ diff -up src/sage/libs/gap/gap_includes.pxd.orig src/sage/libs/gap/gap_includes. + Obj NEW_STRING(Int len) + Obj MakeStringWithLen(const char *buf, size_t len) diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx ---- src/sage/libs/gap/util.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/gap/util.pyx 2020-10-30 14:42:23.393975216 -0600 -@@ -386,7 +386,7 @@ cdef Obj gap_eval(str gap_string) except +--- src/sage/libs/gap/util.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/gap/util.pyx 2021-05-28 11:43:51.679593573 -0600 +@@ -387,7 +387,7 @@ cdef Obj gap_eval(str gap_string) except """ initialize() cdef Obj result diff --git a/sagemath-openblas.patch b/sagemath-openblas.patch deleted file mode 100644 index 5f34cb7..0000000 --- a/sagemath-openblas.patch +++ /dev/null @@ -1,116 +0,0 @@ -diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2020-10-30 16:10:20.089999891 -0600 -+++ src/sage/env.py 2020-10-31 12:11:19.256615196 -0600 -@@ -391,7 +391,7 @@ def cython_aliases(): - aliases = {} - - for lib in ['fflas-ffpack', 'givaro', 'gsl', 'linbox', 'Singular', -- 'libpng', 'gdlib', 'm4ri', 'zlib', 'cblas', 'lapack']: -+ 'libpng', 'gdlib', 'm4ri', 'zlib', 'openblas']: - var = lib.upper().replace("-", "") + "_" - if lib == 'zlib': - aliases[var + "CFLAGS"] = "" -diff -up src/sage/matrix/matrix_integer_dense.pyx.orig src/sage/matrix/matrix_integer_dense.pyx ---- src/sage/matrix/matrix_integer_dense.pyx.orig 2020-10-30 11:52:49.737274785 -0600 -+++ src/sage/matrix/matrix_integer_dense.pyx 2020-10-31 17:58:56.243063508 -0600 -@@ -1,8 +1,8 @@ - # -*- coding: utf-8 -*- - # distutils: extra_compile_args = M4RI_CFLAGS --# distutils: libraries = iml ntl gmp m CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = M4RI_INCDIR CBLAS_INCDIR -+# distutils: libraries = iml ntl gmp m OPENBLAS_LIBRARIES -+# distutils: library_dirs = OPENBLAS_LIBDIR -+# distutils: include_dirs = M4RI_INCDIR OPENBLAS_INCDIR - """ - Dense matrices over the integer ring - -diff -up src/sage/matrix/matrix_modn_dense_double.pyx.orig src/sage/matrix/matrix_modn_dense_double.pyx ---- src/sage/matrix/matrix_modn_dense_double.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/matrix/matrix_modn_dense_double.pyx 2020-11-05 15:54:31.940411433 -0700 -@@ -1,7 +1,7 @@ - # distutils: language = c++ --# distutils: libraries = CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = CBLAS_INCDIR -+# distutils: libraries = OPENBLAS_LIBRARIES -+# distutils: library_dirs = OPENBLAS_LIBDIR -+# distutils: include_dirs = OPENBLAS_INCDIR - # distutils: extra_compile_args = -D_XPG6 - """ - Dense matrices over `\ZZ/n\ZZ` for `n < 2^{23}` using LinBox's ``Modular`` -diff -up src/sage/matrix/matrix_modn_dense_float.pyx.orig src/sage/matrix/matrix_modn_dense_float.pyx ---- src/sage/matrix/matrix_modn_dense_float.pyx.orig 2020-11-05 15:54:31.940411433 -0700 -+++ src/sage/matrix/matrix_modn_dense_float.pyx 2020-11-05 15:55:38.853405001 -0700 -@@ -1,7 +1,7 @@ - # distutils: language = c++ --# distutils: libraries = CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = CBLAS_INCDIR -+# distutils: libraries = OPENBLAS_LIBRARIES -+# distutils: library_dirs = OPENBLAS_LIBDIR -+# distutils: include_dirs = OPENBLAS_INCDIR - """ - Dense matrices over `\ZZ/n\ZZ` for `n < 2^{11}` using LinBox's ``Modular`` - -diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_rational_dense.pyx ---- src/sage/matrix/matrix_rational_dense.pyx.orig 2020-10-30 11:34:26.031980257 -0600 -+++ src/sage/matrix/matrix_rational_dense.pyx 2020-10-31 17:58:10.490106273 -0600 -@@ -1,7 +1,7 @@ - # distutils: extra_compile_args = -D_XPG6 M4RI_CFLAGS --# distutils: libraries = iml ntl m CBLAS_LIBRARIES --# distutils: library_dirs = CBLAS_LIBDIR --# distutils: include_dirs = M4RI_INCDIR CBLAS_INCDIR -+# distutils: libraries = iml ntl m OPENBLAS_LIBRARIES -+# distutils: library_dirs = OPENBLAS_LIBDIR -+# distutils: include_dirs = M4RI_INCDIR OPENBLAS_INCDIR - - """ - Dense matrices over the rational field -diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py ---- src/sage/misc/cython.py.orig 2020-10-30 16:08:06.039158996 -0600 -+++ src/sage/misc/cython.py 2020-10-30 16:24:09.037024792 -0600 -@@ -35,10 +35,9 @@ from sage.cpython.string import str_to_b - - - # CBLAS can be one of multiple implementations --cblas_pc = pkgconfig.parse('cblas') --cblas_libs = list(cblas_pc['libraries']) --cblas_library_dirs = list(cblas_pc['library_dirs']) --cblas_include_dirs = list(cblas_pc['include_dirs']) -+cblas_libs = ['openblas'] -+cblas_library_dirs = ['/usr/lib'] -+cblas_include_dirs = ['/usr/include/openblas'] - - standard_libs = [ - 'mpfr', 'gmp', 'gmpxx', 'pari', 'm', -diff -up src/sage_setup/library_order.py.orig src/sage_setup/library_order.py ---- src/sage_setup/library_order.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage_setup/library_order.py 2020-10-31 12:11:54.313540360 -0600 -@@ -10,20 +10,18 @@ import os - import pkgconfig - - # CBLAS can be one of multiple implementations --cblas_pc = pkgconfig.parse('cblas') --cblas_libs = cblas_pc['libraries'] --cblas_library_dirs = cblas_pc['library_dirs'] --cblas_include_dirs = cblas_pc['include_dirs'] -+cblas_libs = ['openblas'] -+cblas_library_dirs = ['/usr/lib'] -+cblas_include_dirs = ['/usr/include/openblas'] - - # TODO: Remove Cygwin hack by installing a suitable cblas.pc - if os.path.exists('/usr/lib/libblas.dll.a'): - cblas_libs = ['gslcblas'] - - # LAPACK can be one of multiple implementations --lapack_pc = pkgconfig.parse('lapack') --lapack_libs = lapack_pc['libraries'] --lapack_library_dirs = lapack_pc['library_dirs'] --lapack_include_dirs = lapack_pc['include_dirs'] -+lapack_libs = ['openblas'] -+lapack_library_dirs = ['/usr/lib'] -+lapack_include_dirs = ['/usr/include/openblas'] - - # GD image library - gd_pc = pkgconfig.parse('gdlib') diff --git a/sagemath-python3.patch b/sagemath-python3.patch index a376a01..866ecb4 100644 --- a/sagemath-python3.patch +++ b/sagemath-python3.patch @@ -1,83 +1,6 @@ -diff -up build/pkgs/sagetex/src/remote-sagetex.py.orig build/pkgs/sagetex/src/remote-sagetex.py ---- build/pkgs/sagetex/src/remote-sagetex.py.orig 2020-08-12 02:35:31.000000000 -0600 -+++ build/pkgs/sagetex/src/remote-sagetex.py 2020-10-30 14:03:01.286904419 -0600 -@@ -24,12 +24,11 @@ - ## You should have received a copy of the GNU General Public License along - ## with this program. If not, see . - ## --from __future__ import print_function - import json - import sys - import time - import re --import urllib -+import urllib.request, urllib.parse, urllib.error - import hashlib - import os - import os.path -@@ -156,7 +155,7 @@ class RemoteSage: - '\n*(?P.*)', re.DOTALL) - self._404 = re.compile('404 Not Found') - self._session = self._get_url('login', -- urllib.urlencode({'username': user, -+ urllib.parse.urlencode({'username': user, - 'password': - password}))['session'] - self._codewrap = """try: -@@ -176,18 +175,18 @@ except: - _p_.save(filename=plotfilename, **kwargs)""") - - def _encode(self, d): -- return 'session={0}&'.format(self._session) + urllib.urlencode(d) -+ return 'session={0}&'.format(self._session) + urllib.parse.urlencode(d) - - def _get_url(self, action, u): -- with closing(urllib.urlopen(self._srv + '/simple/' + action + -- '?' + u)) as h: -+ with closing(urllib.request.urlopen(self._srv + '/simple/' + action + -+ '?' + u)) as h: - data = self._response.match(h.read()) - result = json.loads(data.group('header')) - result['output'] = data.group('output').rstrip() - return result - - def _get_file(self, fn, cell, ofn=None): -- with closing(urllib.urlopen(self._srv + '/simple/' + 'file' + '?' + -+ with closing(urllib.request.urlopen(self._srv + '/simple/' + 'file' + '?' + - self._encode({'cell': cell, 'file': fn}))) as h: - myfn = ofn if ofn else fn - data = h.read() -@@ -277,13 +276,13 @@ if login_info_file: - password = get_val(line) - - if not server: -- server = raw_input('Enter server: ') -+ server = input('Enter server: ') - - if not server.startswith('http'): - server = 'https://' + server - - if not username: -- username = raw_input('Enter username: ') -+ username = input('Enter username: ') - - if not password: - from getpass import getpass -diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sagetexparse.py ---- build/pkgs/sagetex/src/sagetexparse.py.orig 2020-08-12 02:35:31.000000000 -0600 -+++ build/pkgs/sagetex/src/sagetexparse.py 2020-10-30 14:03:01.286904419 -0600 -@@ -132,7 +132,7 @@ class SageCodeExtractor(): - - def plotout(self, s, l, t): - self.result += '# \\sageplot{} from line %s:\n' % lineno(l, s) -- if t.format is not '': -+ if t.format != '': - self.result += '# format: %s' % t.format[0][1:-1] + '\n' - self.result += t.code[1:-1] + '\n\n' - diff -up src/sage/cpython/debugimpl.c.orig src/sage/cpython/debugimpl.c ---- src/sage/cpython/debugimpl.c.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/cpython/debugimpl.c 2020-10-30 14:03:01.299904398 -0600 +--- src/sage/cpython/debugimpl.c.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/cpython/debugimpl.c 2021-05-28 11:39:54.261578894 -0600 @@ -148,6 +148,7 @@ static void _type_debug(PyTypeObject* tp printf(" tp_basicsize: %ld\n", (long)tp->tp_basicsize); printf(" tp_itemsize: %ld\n", (long)tp->tp_itemsize); @@ -95,9 +18,9 @@ diff -up src/sage/cpython/debugimpl.c.orig src/sage/cpython/debugimpl.c attr_pointer_meth(tp_call, "__call__"); attr_pointer_meth(tp_str, "__str__"); diff -up src/sage/cpython/debug.pyx.orig src/sage/cpython/debug.pyx ---- src/sage/cpython/debug.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/cpython/debug.pyx 2020-10-30 14:03:01.300904396 -0600 -@@ -232,6 +232,7 @@ def type_debug(cls): +--- src/sage/cpython/debug.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/cpython/debug.pyx 2021-05-28 11:39:54.261578894 -0600 +@@ -231,6 +231,7 @@ def type_debug(cls): tp_basicsize: 16 tp_itemsize: 0 tp_dictoffset: 0 @@ -105,7 +28,7 @@ diff -up src/sage/cpython/debug.pyx.orig src/sage/cpython/debug.pyx tp_weaklistoffset: 0 tp_base (__base__): NULL tp_bases (__bases__): tuple: -@@ -259,7 +260,6 @@ def type_debug(cls): +@@ -258,7 +259,6 @@ def type_debug(cls): tp_dealloc (__dealloc__): 0x7fc57d757010 tp_free: PyObject_Del tp_repr (__repr__): 0x7fc57d75b990 @@ -114,9 +37,9 @@ diff -up src/sage/cpython/debug.pyx.orig src/sage/cpython/debug.pyx tp_call (__call__): NULL tp_str (__str__): 0x7fc57d757020 diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/geometry/triangulation/point_configuration.py ---- src/sage/geometry/triangulation/point_configuration.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/geometry/triangulation/point_configuration.py 2020-10-30 14:03:01.301904394 -0600 -@@ -619,11 +619,11 @@ class PointConfiguration(UniqueRepresent +--- src/sage/geometry/triangulation/point_configuration.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/geometry/triangulation/point_configuration.py 2021-05-28 11:39:54.263578895 -0600 +@@ -618,11 +618,11 @@ class PointConfiguration(UniqueRepresent ['{{0,1,2,4},{1,2,3,4}}'] """ timeout = 600 @@ -131,9 +54,9 @@ diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/ge if verbose: print("#### TOPCOM input ####") diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py ---- src/sage/interfaces/frobby.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/frobby.py 2020-10-30 14:03:02.534902319 -0600 -@@ -79,7 +79,7 @@ class Frobby: +--- src/sage/interfaces/frobby.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/frobby.py 2021-05-28 11:39:54.264578894 -0600 +@@ -78,7 +78,7 @@ class Frobby: print("Frobby command: ", repr(command)) print("Frobby input:\n", input) @@ -143,9 +66,9 @@ diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py frinput = str_to_bytes(input) else: diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py ---- src/sage/interfaces/gfan.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/gfan.py 2020-10-30 14:11:30.550047499 -0600 -@@ -62,7 +62,7 @@ class Gfan(object): +--- src/sage/interfaces/gfan.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/gfan.py 2021-05-28 11:39:54.264578894 -0600 +@@ -61,7 +61,7 @@ class Gfan(object): print("gfan input:\n%s" % I) gfan_processes = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, @@ -155,9 +78,9 @@ diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py # sometimes, gfan outputs stuff to stderr even though everything is fine diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py ---- src/sage/interfaces/latte.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/latte.py 2020-10-30 14:03:03.974899895 -0600 -@@ -152,6 +152,7 @@ def count(arg, ehrhart_polynomial=False, +--- src/sage/interfaces/latte.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/latte.py 2021-05-28 11:39:54.265578894 -0600 +@@ -162,6 +162,7 @@ def count(arg, ehrhart_polynomial=False, latte_proc = Popen(args, stdin=PIPE, stdout=PIPE, stderr=(None if verbose else PIPE), @@ -165,7 +88,7 @@ diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py cwd=str(SAGE_TMP)) ans, err = latte_proc.communicate(arg) -@@ -364,6 +365,7 @@ def integrate(arg, polynomial=None, algo +@@ -385,6 +386,7 @@ def integrate(arg, polynomial=None, algo latte_proc = Popen(args, stdin=PIPE, stdout=PIPE, stderr=(None if verbose else PIPE), @@ -174,8 +97,8 @@ diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py ans, err = latte_proc.communicate(arg) diff -up src/sage/interfaces/sagespawn.pyx.orig src/sage/interfaces/sagespawn.pyx ---- src/sage/interfaces/sagespawn.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/sagespawn.pyx 2020-10-30 14:03:03.975899894 -0600 +--- src/sage/interfaces/sagespawn.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/sagespawn.pyx 2021-05-28 11:39:54.266578895 -0600 @@ -1,6 +1,6 @@ """ Sage wrapper around pexpect's ``spawn`` class and @@ -224,8 +147,8 @@ diff -up src/sage/interfaces/sagespawn.pyx.orig src/sage/interfaces/sagespawn.py pass self.fileobj.close() diff -up src/sage/libs/coxeter3/coxeter.pyx.orig src/sage/libs/coxeter3/coxeter.pyx ---- src/sage/libs/coxeter3/coxeter.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/libs/coxeter3/coxeter.pyx 2020-10-30 14:03:03.976899892 -0600 +--- src/sage/libs/coxeter3/coxeter.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/libs/coxeter3/coxeter.pyx 2021-05-28 11:39:54.267578895 -0600 @@ -37,7 +37,7 @@ cdef class String: EXAMPLES:: @@ -359,9 +282,9 @@ diff -up src/sage/libs/coxeter3/coxeter.pyx.orig src/sage/libs/coxeter3/coxeter. if rank == 0: raise NotImplementedError("Coxeter group of type ['A',0] using Coxeter 3 not yet implemented") diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py ---- src/sage/misc/sageinspect.py.orig 2020-11-01 10:38:08.203022437 -0700 -+++ src/sage/misc/sageinspect.py 2020-11-01 10:43:43.355143620 -0700 -@@ -463,12 +463,9 @@ class SageArgSpecVisitor(ast.NodeVisitor +--- src/sage/misc/sageinspect.py.orig 2021-05-28 11:01:40.384274506 -0600 ++++ src/sage/misc/sageinspect.py 2021-05-28 11:39:54.269578895 -0600 +@@ -462,12 +462,9 @@ class SageArgSpecVisitor(ast.NodeVisitor """ return node.id @@ -377,7 +300,7 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py INPUT: -@@ -476,17 +473,21 @@ class SageArgSpecVisitor(ast.NodeVisitor +@@ -475,17 +472,21 @@ class SageArgSpecVisitor(ast.NodeVisitor OUTPUT: @@ -405,7 +328,7 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py """ return node.value -@@ -520,57 +521,6 @@ class SageArgSpecVisitor(ast.NodeVisitor +@@ -519,57 +520,6 @@ class SageArgSpecVisitor(ast.NodeVisitor """ return node.arg @@ -464,9 +387,9 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py """ Visit a Python AST :class:`ast.List` node. diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py ---- src/sage/plot/plot3d/plot3d.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/plot/plot3d/plot3d.py 2020-10-30 14:24:36.813732073 -0600 -@@ -186,7 +186,7 @@ class _Coordinates(object): +--- src/sage/plot/plot3d/plot3d.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/plot/plot3d/plot3d.py 2021-05-28 11:39:54.270578895 -0600 +@@ -185,7 +185,7 @@ class _Coordinates(object): sage: arb((x+z,y*z,z), z, (x,y)) Arbitrary Coordinates coordinate transform (z in terms of x, y) """ @@ -476,9 +399,9 @@ diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py raise ValueError('variables were specified incorrectly for this coordinate system; incorrect variables were %s'%list(set(all_vars).symmetric_difference(set(indep_vars+[dep_var])))) self.dep_var = dep_var diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx ---- src/sage/rings/integer.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/integer.pyx 2020-10-30 14:03:05.737896928 -0600 -@@ -7093,7 +7093,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c +--- src/sage/rings/integer.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/integer.pyx 2021-05-28 11:39:54.274578895 -0600 +@@ -7089,7 +7089,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c x += 1 # Strip spaces # Disallow a sign here @@ -488,9 +411,9 @@ diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx assert base >= 2 diff -up src/sage/rings/polynomial/pbori/pbori.pyx.orig src/sage/rings/polynomial/pbori/pbori.pyx ---- src/sage/rings/polynomial/pbori/pbori.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/polynomial/pbori/pbori.pyx 2020-11-05 15:44:02.756454276 -0700 -@@ -4800,8 +4800,7 @@ cdef class PolynomialConstruct: +--- src/sage/rings/polynomial/pbori/pbori.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/polynomial/pbori/pbori.pyx 2021-05-28 11:39:54.278578895 -0600 +@@ -4704,8 +4704,7 @@ cdef class PolynomialConstruct: # So, it is just a conversion. [Simon King] return (ring)._element_constructor_(x) @@ -501,9 +424,9 @@ diff -up src/sage/rings/polynomial/pbori/pbori.pyx.orig src/sage/rings/polynomia cdef class MonomialConstruct: diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx ---- src/sage/rings/real_mpfi.pyx.orig 2020-10-30 11:34:28.078977132 -0600 -+++ src/sage/rings/real_mpfi.pyx 2020-10-30 14:03:09.088891288 -0600 -@@ -1955,12 +1955,12 @@ cdef class RealIntervalFieldElement(Ring +--- src/sage/rings/real_mpfi.pyx.orig 2021-05-28 11:01:45.006275360 -0600 ++++ src/sage/rings/real_mpfi.pyx 2021-05-28 11:39:54.280578896 -0600 +@@ -1944,12 +1944,12 @@ cdef class RealIntervalFieldElement(Ring cdef long digits digits = strlen(lower_s) @@ -518,7 +441,7 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx digits -= 1 upper_expo -= digits -@@ -2129,7 +2129,7 @@ cdef class RealIntervalFieldElement(Ring +@@ -2118,7 +2118,7 @@ cdef class RealIntervalFieldElement(Ring raise MemoryError("Unable to allocate memory for the mantissa of an interval") mpz_get_str(tmp_cstr, base, lower_mpz) digits = strlen(tmp_cstr) @@ -528,9 +451,9 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx mant_string = bytes_to_str(tmp_cstr+1) sign_string = bytes_to_str(b'-') diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx ---- src/sage/rings/real_mpfr.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/rings/real_mpfr.pyx 2020-11-05 15:44:02.769454276 -0700 -@@ -2091,7 +2091,7 @@ cdef class RealNumber(sage.structure.ele +--- src/sage/rings/real_mpfr.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/rings/real_mpfr.pyx 2021-05-28 11:39:54.283578896 -0600 +@@ -2095,7 +2095,7 @@ cdef class RealNumber(sage.structure.ele if s is NULL: raise RuntimeError("unable to convert an mpfr number to a string") # t contains just digits (no sign, decimal point or exponent) @@ -540,8 +463,8 @@ diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx t = char_to_str(s + 1) else: diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.pyx ---- src/sage/structure/sage_object.pyx.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/structure/sage_object.pyx 2020-10-30 14:03:09.091891283 -0600 +--- src/sage/structure/sage_object.pyx.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/structure/sage_object.pyx 2021-05-28 11:39:54.284578896 -0600 @@ -688,7 +688,7 @@ cdef class SageObject: try: s = self._interface_init_(I) @@ -552,9 +475,9 @@ diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object. if c: try: diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx ---- src/sage/symbolic/expression.pyx.orig 2020-10-30 12:10:19.747169301 -0600 -+++ src/sage/symbolic/expression.pyx 2020-10-30 14:03:09.095891276 -0600 -@@ -13071,7 +13071,7 @@ cdef class hold_class: +--- src/sage/symbolic/expression.pyx.orig 2021-05-28 11:01:45.016275362 -0600 ++++ src/sage/symbolic/expression.pyx 2021-05-28 11:39:54.289578896 -0600 +@@ -13201,7 +13201,7 @@ cdef class hold_class: sage: SR(2)^5 32 """ @@ -563,7 +486,7 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx def __exit__(self, *args): """ -@@ -13084,7 +13084,7 @@ cdef class hold_class: +@@ -13214,7 +13214,7 @@ cdef class hold_class: sage: SR(2)^5 32 """ diff --git a/sagemath-qepcad.patch b/sagemath-qepcad.patch index 162d18e..63cddee 100644 --- a/sagemath-qepcad.patch +++ b/sagemath-qepcad.patch @@ -1,6 +1,6 @@ diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py ---- src/sage/interfaces/qepcad.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/qepcad.py 2020-10-30 14:49:41.431265953 -0600 +--- src/sage/interfaces/qepcad.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/qepcad.py 2021-05-28 11:52:46.749626841 -0600 @@ -530,7 +530,7 @@ TESTS: Check the qepcad configuration file:: @@ -10,15 +10,15 @@ diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py ....: f.readlines()[-1] 'SINGULAR .../bin\n' -@@ -606,7 +606,6 @@ AUTHORS: +@@ -605,7 +605,6 @@ AUTHORS: + # http://www.gnu.org/licenses/ #***************************************************************************** - from __future__ import print_function, absolute_import -from sage.env import SAGE_LOCAL import pexpect import re import sys -@@ -621,6 +620,8 @@ from .expect import Expect, ExpectFuncti +@@ -620,6 +619,8 @@ from .expect import Expect, ExpectFuncti from sage.interfaces.interface import AsciiArtString @@ -27,7 +27,7 @@ diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py def _qepcad_atoms(formula): r""" Return the atoms of a qepcad quantifier-free formula, as a set of strings. -@@ -650,17 +651,17 @@ def _qepcad_cmd(memcells=None): +@@ -649,17 +650,17 @@ def _qepcad_cmd(memcells=None): sage: from sage.interfaces.qepcad import _qepcad_cmd sage: s = _qepcad_cmd() @@ -48,7 +48,7 @@ diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py _command_info_cache = None -@@ -685,7 +686,7 @@ def _update_command_info(): +@@ -684,7 +685,7 @@ def _update_command_info(): cache = {} diff --git a/sagemath-rpmbuild.patch b/sagemath-rpmbuild.patch index 56984a2..1cfd48f 100644 --- a/sagemath-rpmbuild.patch +++ b/sagemath-rpmbuild.patch @@ -1,12 +1,12 @@ diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py ---- src/sage/misc/cython.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/misc/cython.py 2020-10-30 16:08:06.039158996 -0600 -@@ -46,7 +46,7 @@ standard_libs = [ - ] + cblas_libs + [ - 'ntl'] +--- src/sage/misc/cython.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/misc/cython.py 2021-05-28 11:28:14.608518654 -0600 +@@ -53,7 +53,7 @@ def _standard_libs_libdirs_incdirs_alias + 'ec', 'gsl', + ] + aliases["CBLAS_LIBRARIES"] + [ + 'ntl'] +- standard_libdirs = [os.path.join(SAGE_LOCAL, "lib")] + aliases["CBLAS_LIBDIR"] + aliases["NTL_LIBDIR"] ++ standard_libdirs = [os.path.realpath(os.path.join(SAGE_LOCAL, "lib"))] + aliases["CBLAS_LIBDIR"] + aliases["NTL_LIBDIR"] + standard_incdirs = sage_include_directories() + aliases["CBLAS_INCDIR"] + aliases["NTL_INCDIR"] + return standard_libs, standard_libdirs, standard_incdirs, aliases --standard_libdirs = [os.path.join(SAGE_LOCAL, "lib")] + cblas_library_dirs -+standard_libdirs = [os.path.realpath(os.path.join(SAGE_LOCAL, "lib"))] + cblas_library_dirs - - - ################################################################ diff --git a/sagemath-sagedoc.patch b/sagemath-sagedoc.patch index 9a0ea3b..b51c71a 100644 --- a/sagemath-sagedoc.patch +++ b/sagemath-sagedoc.patch @@ -1,78 +1,7 @@ -diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py ---- src/sage/doctest/control.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/doctest/control.py 2020-10-30 13:55:37.330649309 -0600 -@@ -115,7 +115,6 @@ class DocTestDefaults(SageObject): - self.valgrind = False - self.massif = False - self.cachegrind = False -- self.omega = False - self.failed = False - self.new = False - self.show_skipped = False -@@ -318,7 +317,7 @@ class DocTestController(SageObject): - if options.gdb or options.debug: - # Interactive debuggers: "infinite" timeout - options.timeout = 0 -- elif options.valgrind or options.massif or options.cachegrind or options.omega: -+ elif options.valgrind or options.massif or options.cachegrind: - # Non-interactive debuggers: 48 hours - options.timeout = int(os.getenv('SAGE_TIMEOUT_VALGRIND', 48 * 60 * 60)) - elif options.long: -@@ -1109,13 +1108,8 @@ class DocTestController(SageObject): - elif opt.cachegrind: - toolname = "cachegrind" - flags = os.getenv("SAGE_CACHEGRIND_FLAGS", "") -- elif opt.omega: -- toolname = "exp-omega" -- flags = os.getenv("SAGE_OMEGA_FLAGS", "") - cmd = "exec valgrind --tool=%s "%(toolname) - flags += ''' --log-file="%s" ''' % logfile -- if opt.omega: -- toolname = "omega" - if "%s" in flags: - flags %= toolname + ".%p" # replace %s with toolname - cmd += flags + sage_cmd -@@ -1201,10 +1195,10 @@ class DocTestController(SageObject): - - """ - opt = self.options -- L = (opt.gdb, opt.valgrind, opt.massif, opt.cachegrind, opt.omega) -+ L = (opt.gdb, opt.valgrind, opt.massif, opt.cachegrind) - if any(L): - if L.count(True) > 1: -- self.log("You may only specify one of gdb, valgrind/memcheck, massif, cachegrind, omega") -+ self.log("You may only specify one of gdb, valgrind/memcheck, massif, cachegrind") - return 2 - return self.run_val_gdb() - else: -diff -up src/sage/interfaces/singular.py.orig src/sage/interfaces/singular.py ---- src/sage/interfaces/singular.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/interfaces/singular.py 2020-10-30 13:55:37.332649306 -0600 -@@ -2349,7 +2349,7 @@ def generate_docstring_dictionary(): - nodes.clear() - node_names.clear() - -- singular_docdir = SINGULARPATH + "/../info/" -+ singular_docdir = "/usr/share/info/" - - new_node = re.compile(r"File: singular\.hlp, Node: ([^,]*),.*") - new_lookup = re.compile(r"\* ([^:]*):*([^.]*)\..*") -@@ -2357,8 +2357,9 @@ def generate_docstring_dictionary(): - L, in_node, curr_node = [], False, None - - # singular.hlp contains a few iso-5559-1 encoded special characters -- with io.open(os.path.join(singular_docdir, 'singular.hlp'), -- encoding='latin-1') as f: -+ import gzip -+ with gzip.open(os.path.join(singular_docdir, 'singular.hlp.gz'), -+ encoding='utf-8') as f: - for line in f: - m = re.match(new_node,line) - if m: -diff -up src/sage_setup/docbuild/ext/multidocs.py.orig src/sage_setup/docbuild/ext/multidocs.py ---- src/sage_setup/docbuild/ext/multidocs.py.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage_setup/docbuild/ext/multidocs.py 2020-10-30 13:55:37.332649306 -0600 -@@ -82,8 +82,11 @@ def merge_environment(app, env): +diff -up src/sage_docbuild/ext/multidocs.py.orig src/sage_docbuild/ext/multidocs.py +--- src/sage_docbuild/ext/multidocs.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage_docbuild/ext/multidocs.py 2021-05-28 11:32:20.056542939 -0600 +@@ -84,8 +84,11 @@ def merge_environment(app, env): for ind in newalldoc: # treat subdocument source as orphaned file and don't complain md = env.metadata.get(ind, dict()) @@ -86,3 +15,27 @@ diff -up src/sage_setup/docbuild/ext/multidocs.py.orig src/sage_setup/docbuild/e # merge the citations newcite = {} for ind, (path, tag, lineno) in citations.items(): +diff -up src/sage/interfaces/singular.py.orig src/sage/interfaces/singular.py +--- src/sage/interfaces/singular.py.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/interfaces/singular.py 2021-05-28 11:29:00.597523201 -0600 +@@ -2365,7 +2365,7 @@ def generate_docstring_dictionary(): + nodes.clear() + node_names.clear() + +- singular_docdir = SINGULARPATH + "/../info/" ++ singular_docdir = "/usr/share/info/" + + new_node = re.compile(r"File: singular\.hlp, Node: ([^,]*),.*") + new_lookup = re.compile(r"\* ([^:]*):*([^.]*)\..*") +@@ -2373,8 +2373,9 @@ def generate_docstring_dictionary(): + L, in_node, curr_node = [], False, None + + # singular.hlp contains a few iso-5559-1 encoded special characters +- with io.open(os.path.join(singular_docdir, 'singular.hlp'), +- encoding='latin-1') as f: ++ import gzip ++ with gzip.open(os.path.join(singular_docdir, 'singular.hlp.gz'), ++ encoding='utf-8') as f: + for line in f: + m = re.match(new_node,line) + if m: diff --git a/sagemath-scripts.patch b/sagemath-scripts.patch index a4403f8..f8a6ccd 100644 --- a/sagemath-scripts.patch +++ b/sagemath-scripts.patch @@ -1,7 +1,7 @@ diff -up src/bin/sage.orig src/bin/sage ---- src/bin/sage.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/bin/sage 2020-10-30 13:43:06.816896461 -0600 -@@ -29,7 +29,6 @@ usage() { +--- src/bin/sage.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/bin/sage 2021-05-28 11:16:43.936440802 -0600 +@@ -109,7 +109,6 @@ usage() { echo " --gap [...] -- run Sage's Gap with given arguments" echo " --gp [...] -- run Sage's PARI/GP calculator with given arguments" echo " -h -- print this help message" @@ -9,8 +9,8 @@ diff -up src/bin/sage.orig src/bin/sage echo " --maxima [...] -- run Sage's Maxima with given arguments" echo " --mwrank [...] -- run Sage's mwrank with given arguments" echo " --notebook=[...] -- start the Sage notebook (valid options are" -@@ -59,119 +58,6 @@ usage() { - # below, after sourcing sage-env. +@@ -159,111 +158,6 @@ if [ -f "${SELF}-env-config" ]; then + fi ##################################################################### -# Special options to be processed without sage-env @@ -22,7 +22,7 @@ diff -up src/bin/sage.orig src/bin/sage -if [ "$1" = '--nodotsage' ]; then - export DOT_SAGE=`mktemp -d ${TMPDIR:-/tmp}/dotsageXXXXXX` - shift -- command "$0" "$@" +- command "${SELF}" "$@" - status=$? - rm -rf "$DOT_SAGE" - exit $status @@ -51,14 +51,6 @@ diff -up src/bin/sage.orig src/bin/sage - exit 127 -fi - --# Check for '--upgrade' before sourcing sage-env: the top-level "make" --# should be run outside of the Sage shell, see #15517. --if [ "$1" = '-upgrade' -o "$1" = "--upgrade" ]; then -- shift -- cd "$SAGE_ROOT" -- exec local/bin/sage-upgrade "$@" --fi -- -# Check for '-i' before sourcing sage-env: running "make" -# should be run outside of the Sage shell. -if [ "$1" = '-f' ]; then @@ -129,7 +121,7 @@ diff -up src/bin/sage.orig src/bin/sage # Report information about the Sage environment ##################################################################### -@@ -217,20 +103,6 @@ fi +@@ -308,20 +202,6 @@ fi # Prepare for running Sage, either interactively or non-interactively. sage_setup() { @@ -150,7 +142,7 @@ diff -up src/bin/sage.orig src/bin/sage if [ ! -d "$IPYTHONDIR" ]; then # make sure that $DOT_SAGE exists so that ipython will happily # create its config directories there. If DOT_SAGE doesn't -@@ -241,20 +113,6 @@ sage_setup() { +@@ -332,20 +212,6 @@ sage_setup() { } @@ -160,7 +152,7 @@ diff -up src/bin/sage.orig src/bin/sage -# if Python and sage-location haven't been installed yet. -maybe_sage_location() -{ -- if [ -w "$SAGE_LOCAL" ]; then +- if [ -n "$SAGE_LOCAL" -a -w "$SAGE_LOCAL" ]; then - if [ -x "$SAGE_LOCAL/bin/python" ] && [ -x "$SAGE_LOCAL/bin/sage-location" ]; then - sage-location || exit $? - fi @@ -171,7 +163,7 @@ diff -up src/bin/sage.orig src/bin/sage # Start an interactive Sage session, this function never returns. interactive_sage() { sage_setup -@@ -292,8 +150,6 @@ usage_advanced() { +@@ -383,8 +249,6 @@ usage_advanced() { echo " --nodotsage -- run Sage without using the user's" echo " .sage directory: create and use a temporary" echo " .sage directory instead." @@ -180,7 +172,7 @@ diff -up src/bin/sage.orig src/bin/sage echo " --simple-prompt -- pass the option through to IPython: use" echo " this option with sage-shell mode in emacs" if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; then -@@ -327,18 +183,9 @@ usage_advanced() { +@@ -418,18 +282,9 @@ usage_advanced() { echo " environment (not Sage), passing additional" echo " additional options to IPython" echo " --jupyter [...] -- run Sage's Jupyter with given arguments" @@ -199,7 +191,7 @@ diff -up src/bin/sage.orig src/bin/sage echo " --python [...], --python3 [...]" echo " -- run the Python 3 interpreter" echo " -R [...] -- run Sage's R with the given arguments" -@@ -601,11 +448,6 @@ if [ "$1" = '-lisp' -o "$1" = '--lisp' ] +@@ -678,11 +533,6 @@ if [ "$1" = '-lisp' -o "$1" = '--lisp' ] exec ecl "$@" fi @@ -211,7 +203,7 @@ diff -up src/bin/sage.orig src/bin/sage if [ "$1" = '-maxima' -o "$1" = '--maxima' ]; then shift maxima_cmd=$(sage-config MAXIMA 2>/dev/null) -@@ -630,11 +472,6 @@ if [ "$1" = '-R' -o "$1" = '--R' ]; then +@@ -707,11 +557,6 @@ if [ "$1" = '-R' -o "$1" = '--R' ]; then exec R "$@" fi @@ -223,19 +215,19 @@ diff -up src/bin/sage.orig src/bin/sage ##################################################################### # sage --sh and sage --buildsh ##################################################################### -@@ -804,11 +641,6 @@ fi +@@ -883,11 +728,6 @@ fi # build_sage, sage -b, sage -br, etc. could be moved to # build/bin/sage-site. See #29111. -build_sage() { - maybe_sage_location -- ( cd "$SAGE_ROOT/build/make" && $MAKE sagelib-no-deps ) || exit $? +- ( cd "$SAGE_ROOT/build/make" && ./install sagelib-no-deps ) || exit $? -} - if [[ "$1" =~ ^--notebook=.* || "$1" =~ ^-n=.* || "$1" =~ ^-notebook=.* ]] ; then sage-cleaner &>/dev/null & exec sage-notebook "$@" -@@ -819,13 +651,6 @@ if [ "$1" = "-notebook" -o "$1" = '--not +@@ -898,13 +738,6 @@ if [ "$1" = "-notebook" -o "$1" = '--not exec sage-notebook "$@" fi @@ -249,12 +241,12 @@ diff -up src/bin/sage.orig src/bin/sage if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; then # Source inspection facilities, supported on sage-the-distribution and on distributions # that package the Sage sources. -@@ -842,40 +667,12 @@ if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; +@@ -921,36 +754,11 @@ if [ -n "$SAGE_SRC" -a -d "$SAGE_SRC" ]; fi fi -if [ "$1" = '-b' ]; then -- time build_sage +- build_sage - exit $? -fi - @@ -283,15 +275,22 @@ diff -up src/bin/sage.orig src/bin/sage - exit $? -fi - + exec-runtests() { + sage_setup + export PYTHONIOENCODING="utf-8" # Fix encoding for doctests +@@ -967,10 +775,7 @@ exec-runtests() { + exec sage-runtests "$@" + } + -if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" = '-tp' -o "$1" = '-btp' ]; then - if [ "$1" = '-bt' -o "$1" = '-btp' ]; then - build_sage - fi +if [ "$1" = '-t' -o "$1" = '-tp' ]; then - sage_setup - export PYTHONIOENCODING="utf-8" # Fix encoding for doctests if [ "$1" = '-tp' -o "$1" = '-btp' ]; then -@@ -887,16 +684,6 @@ if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" + shift + exec-runtests -p "$@" +@@ -980,34 +785,11 @@ if [ "$1" = '-t' -o "$1" = '-bt' -o "$1" fi fi @@ -300,16 +299,12 @@ diff -up src/bin/sage.orig src/bin/sage - build_sage - fi - shift -- sage_setup -- export PYTHONIOENCODING="utf-8" # Fix encoding for doctests -- exec sage-runtests --new "$@" +- exec-runtests --new "$@" -fi - if [ "$1" = '-testall' -o "$1" = "--testall" ]; then shift - sage_setup -@@ -904,21 +691,6 @@ if [ "$1" = '-testall' -o "$1" = "--test - exec sage-runtests -a "$@" + exec-runtests -a "$@" fi -if [ "$1" = '-fixdoctests' -o "$1" = '--fixdoctests' ]; then @@ -324,13 +319,13 @@ diff -up src/bin/sage.orig src/bin/sage - -if [ "$1" = "-coverageall" -o "$1" = "--coverageall" ]; then - shift -- exec sage-coverageall "$@" +- exec sage-coverage --all "$@" -fi - if [ "$1" = '-startuptime' -o "$1" = '--startuptime' ]; then exec sage-startuptime.py "$@" fi -@@ -941,53 +713,6 @@ fi +@@ -1030,59 +812,11 @@ fi # Creating and handling Sage distributions ##################################################################### @@ -364,27 +359,11 @@ diff -up src/bin/sage.orig src/bin/sage - exit 1 - fi - done -- # Display a message if we actually installed something (using this -- # file, generated by sage-spkg, is a bit of a hack though) -- if [ -f "$SAGE_LOCAL/lib/sage-force-relocate.txt" ]; then -- echo -- echo "Warning: it might be needed to update the Sage library before" -- echo "installed packages work: you should run 'make' from \$SAGE_ROOT" -- echo "before running Sage." -- fi - exit 0 -} - -- --if [ "$1" = '-package' -o "$1" = "--package" ]; then -- shift -- exec sage-package $@ --fi -- - if [ "$1" = '-optional' -o "$1" = "--optional" ]; then + if [ "$1" = '-installed' -o "$1" = "--installed" ]; then shift - exec sage-list-packages optional $@ -@@ -1008,30 +733,6 @@ if [ "$1" = '-installed' -o "$1" = "--in exec sage-list-packages all --installed-only $@ fi @@ -397,15 +376,6 @@ diff -up src/bin/sage.orig src/bin/sage - install "$@" -fi - --if [ "$1" = '-info' -o "$1" = '--info' ]; then -- shift -- for PKG in "$@" -- do -- sage-spkg --info "$PKG" || exit $? -- done -- exit 0 --fi -- -if [ "$1" = '-sdist' -o "$1" = "--sdist" ]; then - maybe_sage_location - shift @@ -415,7 +385,7 @@ diff -up src/bin/sage.orig src/bin/sage ##################################################################### # Debugging tools ##################################################################### -@@ -1075,12 +776,6 @@ if [ "$1" = '-callgrind' -o "$1" = "--ca +@@ -1126,12 +860,6 @@ if [ "$1" = '-callgrind' -o "$1" = "--ca exec sage-callgrind "$@" fi diff --git a/sagemath-tdlib.patch b/sagemath-tdlib.patch index 4009565..e81c85b 100644 --- a/sagemath-tdlib.patch +++ b/sagemath-tdlib.patch @@ -1,6 +1,6 @@ -diff -up src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp.orig src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp ---- src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp.orig 2020-10-24 11:37:59.000000000 -0600 -+++ src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp 2020-10-30 16:40:43.904036700 -0600 +diff -up src/sage/graphs/graph_decompositions/sage_tdlib.cpp.orig src/sage/graphs/graph_decompositions/sage_tdlib.cpp +--- src/sage/graphs/graph_decompositions/sage_tdlib.cpp.orig 2021-05-09 16:00:11.000000000 -0600 ++++ src/sage/graphs/graph_decompositions/sage_tdlib.cpp 2021-06-16 08:33:47.325415307 -0600 @@ -2,8 +2,8 @@ #include diff --git a/sagemath.spec b/sagemath.spec index c7d44c8..52fe7af 100644 --- a/sagemath.spec +++ b/sagemath.spec @@ -6,19 +6,11 @@ %bcond_with bundled_pexpect %bcond_with bundled_ipython %bcond_without bundled_ipywidgets +%bcond_without bundled_jupyter_jsmol %bcond_without bundled_thebe %bcond_without bundled_threejs %bcond_without install_hack -%if 0%{?fedora} >= 33 -%bcond_without flexiblas -%endif -%if %{with flexiblas} -%global blaslib flexiblas -%else -%global blaslib openblas -%endif - # for faster full rpm test builds %ifarch %{ix86} x86_64 %bcond_without docs @@ -48,7 +40,7 @@ %global cremona_ver 2019-10-29 %global elliptic_curves_pkg elliptic_curves-0.8.1 %global flintqs_pkg flintqs-1.0 -%global graphs_pkg graphs-20161026 +%global graphs_pkg graphs-20210214 %if %{with bundled_ipython} %global ipython_ver 7.13.0 %global ipython_pkg ipython-%{ipython_ver} @@ -56,27 +48,31 @@ %global prompt_tookit_pkg prompt_toolkit-%{prompt_toolkit_ver} %endif %if %{with bundled_ipywidgets} -%global ipywidgets_ver 7.5.1 +%global ipywidgets_ver 7.6.3 %global ipywidgets_pkg ipywidgets-%{ipywidgets_ver} %endif +%if %{with bundled_jupyter_jsmol} +%global jupyter_jsmol_ver 0.2.4 +%global jupyter_jsmol_pkg jupyter_jsmol-%{jupyter_jsmol_ver} +%endif %if %{with bundled_pexpect} %global pexpect_pkg pexpect-4.8.0 %endif %global polytopes_db_pkg polytopes_db-20170220 %global sagetex_pkg sagetex-3.5 %global Sphinx_pkg Sphinx-3.1.2 -%global singular_pkg singular-4.1.1p2 +%global singular_pkg singular-4.2.0p2 %if %{with bundled_thebe} %global thebe_ver 9624e0a0 %global thebe_pkg thebe-%{thebe_ver} %endif %if %{with bundled_threejs} -%global threejs_ver r117 -%global threejs_pkg threejs-%{threejs_ver} +%global threejs_ver r122 +%global threejs_pkg threejs-sage-%{threejs_ver} %endif # Spkg equivalents of required rpms; we pretend they are installed as spkgs. -%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 CoCoALib-0.99710 coxeter3-3.1 cryptominisat-5.7.1 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.11.0 libsirocco-2.0.2 lrslib-071 mcqd-1.0 meataxe-1.0 primecount-6.1 qepcad-B.1.72 saclib-2.2.7 surf-1.0.6-gcc6 tdlib-0.9.0 +%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 CoCoALib-0.99712 coxeter3-3.1 cryptominisat-5.8.0 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.11.0 libsirocco-2.0.2 lrslib-071a mcqd-1.0 meataxe-1.0 primecount-7.0 qepcad-B.1.74 saclib-2.2.8 surf-1.0.6-gcc6 tdlib-0.9.0 %ifarch %{ix86} x86_64 %global SAGE_REQUIRED_PKGS %{SAGE_REQUIRED_PKGS} fes-0.2 @@ -93,8 +89,8 @@ Name: sagemath Summary: A free open-source mathematics software system -Version: 9.2 -Release: 5%{?dist} +Version: 9.3 +Release: 1%{?dist} # The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file # Additionally, every $files section has a comment with the license name # before files with that license @@ -103,6 +99,7 @@ URL: http://www.sagemath.org Source0: http://files.sagemath.org/src/sage-%{version}.tar.gz Source1: https://github.com/JohnCremona/ecdata/archive/%{cremona_ver}/cremona-%{cremona_ver}.tar.gz Source2: gprc.expect +Source3: org.sagemath.sage.metainfo.xml # Follow maxima's ExclusiveArch, except exclude 32-bit ARM. The source RPM is # now about 2GB in size. The 32-bit ARM builders run out of memory trying to # create the SRPM and also trying to unpack the SRPM before starting a build. @@ -171,46 +168,49 @@ Patch16: %{name}-env.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1243590 Patch17: %{name}-qepcad.patch -# Correct path to arb headers -Patch18: %{name}-arb.patch +# Make the cvxopt backend check for 'optimal' as well as 'optimized' +Patch18: %{name}-cvxopt.patch # Use flexiblas Patch19: %{name}-flexiblas.patch -# Use openblas -Patch20: %{name}-openblas.patch - # Fix paths to latte-integrale binaries -Patch21: %{name}-latte.patch +Patch20: %{name}-latte.patch # Change rubiks binary names to match Fedora -Patch22: %{name}-rubiks.patch +Patch21: %{name}-rubiks.patch # Adapt to recent tdlib 0.9 -Patch23: %{name}-tdlib.patch +Patch22: %{name}-tdlib.patch # Use local objects.inv for intersphinx since no network on koji builders -Patch24: %{name}-intersphinx.patch +Patch23: %{name}-intersphinx.patch # Remove an unused call to a primecount function that no longer exists -Patch25: %{name}-primecount.patch +Patch24: %{name}-primecount.patch -BuildRequires: make BuildRequires: 4ti2 +BuildRequires: appstream BuildRequires: arb-devel +BuildRequires: bc BuildRequires: bliss-devel BuildRequires: boost-devel BuildRequires: brial-devel +BuildRequires: cmake BuildRequires: cddlib-devel BuildRequires: cddlib-tools BuildRequires: cliquer-devel +BuildRequires: cocoalib-devel BuildRequires: coxeter-devel +BuildRequires: cryptominisat-devel +BuildRequires: csdp-devel BuildRequires: desktop-file-utils BuildRequires: dvipng BuildRequires: ecl %if %{with fes} BuildRequires: fes-devel %endif +BuildRequires: flexiblas-devel BuildRequires: flint-devel BuildRequires: gap-devel BuildRequires: gap-pkg-aclib @@ -264,7 +264,9 @@ BuildRequires: gdb BuildRequires: gfan BuildRequires: giac-devel BuildRequires: giac-doc +BuildRequires: git-core BuildRequires: glpk-devel +BuildRequires: glpk-utils BuildRequires: gmp-ecm BuildRequires: gmp-ecm-devel BuildRequires: ImageMagick @@ -274,42 +276,58 @@ BuildRequires: jmol BuildRequires: jsmol BuildRequires: jsmath-fonts BuildRequires: L-function-devel +BuildRequires: latexmk BuildRequires: latte-integrale BuildRequires: libbraiding-devel +BuildRequires: libfrobby-devel BuildRequires: libgap BuildRequires: libhomfly-devel BuildRequires: libmpc-devel BuildRequires: lrcalc-devel BuildRequires: lrslib-utils +BuildRequires: make BuildRequires: mathjax BuildRequires: maxima-runtime-ecl BuildRequires: mcqd-devel BuildRequires: mpfi-devel BuildRequires: nauty +BuildRequires: ninja-build BuildRequires: ntl-devel -BuildRequires: %{blaslib}-devel BuildRequires: openssl BuildRequires: palp +BuildRequires: pandoc BuildRequires: pari-devel +BuildRequires: pari-elldata BuildRequires: pari-galdata +BuildRequires: pari-galpol BuildRequires: pari-gp BuildRequires: pari-seadata BuildRequires: perl-generators +BuildRequires: perl(ExtUtils::MakeMaker) +BuildRequires: perl(File::Slurp) BuildRequires: pkgconfig(bdw-gc) BuildRequires: pkgconfig(cbc) BuildRequires: pkgconfig(eclib) BuildRequires: pkgconfig(factory) BuildRequires: pkgconfig(fplll) BuildRequires: pkgconfig(gdlib) +BuildRequires: pkgconfig(gf2x) BuildRequires: pkgconfig(gsl) +BuildRequires: pkgconfig(igraph) +BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libsemigroups) +BuildRequires: pkgconfig(libzmq) BuildRequires: pkgconfig(linbox) BuildRequires: pkgconfig(m4ri) BuildRequires: pkgconfig(m4rie) +BuildRequires: pkgconfig(nauty) +BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(pynac) BuildRequires: pkgconfig(readline) BuildRequires: pkgconfig(Singular) BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(tk) BuildRequires: pkgconfig(zlib) BuildRequires: planarity-devel BuildRequires: ppl-devel @@ -324,6 +342,8 @@ BuildRequires: python3-ipython-sphinx BuildRequires: python3-pillow-devel BuildRequires: python3-pplpy-devel BuildRequires: python3-tdlib-devel +BuildRequires: python3-tkinter +BuildRequires: %{py3_dist argon2-cffi} %if %{with bundled_ipython} BuildRequires: %{py3_dist backcall} %endif @@ -362,6 +382,7 @@ BuildRequires: %{py3_dist pkgconfig} BuildRequires: %{py3_dist psutil} BuildRequires: %{py3_dist ptyprocess} BuildRequires: %{py3_dist pycryptosat} +BuildRequires: %{py3_dist pyopenssl} %if %{with bundled_ipython} BuildRequires: %{py3_dist pyzmq} %endif @@ -369,12 +390,14 @@ BuildRequires: %{py3_dist rpy2} BuildRequires: %{py3_dist scipy} BuildRequires: %{py3_dist scons} BuildRequires: %{py3_dist setuptools} +BuildRequires: %{py3_dist setuptools_scm} %if %{with bundled_ipython} BuildRequires: %{py3_dist simplegeneric} %endif BuildRequires: %{py3_dist six} BuildRequires: %{py3_dist sphinx} BuildRequires: %{py3_dist sympy} +BuildRequires: %{py3_dist tox} BuildRequires: %{py3_dist wheel} BuildRequires: %{py3_dist widgetsnbextension} BuildRequires: %{py3_dist zodb3} @@ -383,9 +406,11 @@ BuildRequires: R BuildRequires: ratpoints-devel BuildRequires: rubiks BuildRequires: rw-devel +BuildRequires: saclib-devel BuildRequires: sharedmeataxe-devel BuildRequires: sirocco-devel BuildRequires: suitesparse-devel +BuildRequires: surf-geometry BuildRequires: symmetrica-devel BuildRequires: sympow BuildRequires: tachyon @@ -396,6 +421,7 @@ BuildRequires: tex(makecmds.sty) BuildRequires: web-assets-devel BuildRequires: xorg-x11-fonts-Type1 BuildRequires: xorg-x11-server-Xvfb +BuildRequires: yasm-devel BuildRequires: zn_poly-devel Requires: hicolor-icon-theme @@ -415,10 +441,6 @@ Provides: bundled(thebe) = %{thebe_ver} Provides: bundled(threejs) = %{threejs_ver} %endif -# This can be removed when Fedora 30 reaches EOL -Obsoletes: %{name}-notebook-export < 8.8-5 -Provides: %{name}-notebook-export = %{version}-%{release} - %description Sage is a free open-source mathematics software system licensed under the GPL. It combines the power of many existing open-source @@ -486,7 +508,9 @@ Requires: mathjax Requires: maxima-runtime-ecl Requires: nauty Requires: palp +Requires: pari-elldata Requires: pari-galdata +Requires: pari-galpol Requires: pari-gp Requires: pari-seadata Requires: python3-tdlib @@ -551,6 +575,9 @@ Provides: bundled(prompt_toolkit) = %{prompt_toolkit_ver} %if %{with bundled_ipywidgets} Provides: bundled(ipywidgets) = %{ipywidgets_ver} %endif +%if %{with bundled_jupyter_jsmol} +Provides: bundled(jupyter-jsmol) = %{jupyter_jsmol_ver} +%endif %description core This package contains the core sagemath python modules. @@ -737,12 +764,9 @@ This package contains the Turkish %{name} documentation. Summary: Jupyter integration for sagemath Requires: %{name}%{?_isa} = %{version}-%{release} Requires: python-jupyter-filesystem +Requires: %{py3_dist argon2-cffi} Requires: %{py3_dist widgetsnbextension} -# This can be removed when Fedora 31 reaches EOL -Obsoletes: sagemath-notebook < 9.0-1 -Provides: sagemath-notebook = %{version}-%{release} - %description jupyter This package contains a Jupyter integration for sagemath, replacing the defunct notebook functionality. @@ -819,6 +843,13 @@ pushd build/pkgs/ipywidgets popd %endif +%if %{with bundled_jupyter_jsmol} +pushd build/pkgs/jupyter_jsmol + tar zxf ../../../upstream/%{jupyter_jsmol_pkg}.tar.gz + mv %{jupyter_jsmol_pkg} src +popd +%endif + %if %{with bundled_pexpect} pushd build/pkgs/pexpect tar zxf ../../../upstream/%{pexpect_pkg}.tar.gz @@ -891,20 +922,16 @@ popd %patch16 %patch17 %patch18 -%if "%{blaslib}" == "flexiblas" %patch19 -%else -%patch20 -%endif %patch21 %patch22 %patch23 %patch24 -%patch25 sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \ -e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \ -e 's|@@SAGE_LOCAL@@|%{SAGE_LOCAL}|' \ + -e 's|@@LIBDIR@@|%{_libdir}|g' \ -i src/sage/env.py sed -e 's|@@CYSIGNALS@@|%{python3_sitearch}/cysignals|' \ @@ -916,23 +943,20 @@ sed -e 's|@@CYSIGNALS@@|%{python3_sitearch}/cysignals|' \ find src/sage \( -name \*.pyx -o -name \*.pxd \) -exec touch {} \+ # fix Singular paths -singver=$(sed 's/.*-\([.[:digit:]]*\).*/\1/' <<< %{singular_pkg}) +singver=$(sed 's/^.*-\([.[:digit:]]*\).*$/\1/' <<< %{singular_pkg}) sed -e "s,SINGULARPATH=\",&%{_datadir}/singular/LIB:," \ -e "s,\(SINGULAR_EXECUTABLE=\"\).*\",\1%{_libdir}/Singular/Singular\"," \ -i src/bin/sage-env -sed -e "s,\(SINGULAR_SO = \)SAGE.*,\1'%{_libdir}/libSingular-$singver.so'," \ - -i src/sage/env.py # fix shebangs; some paths contains spaces, so use the null byte facility grep -FrlZ '#!%{_bindir}/env python3' | \ xargs -0 sed -i 's,#!%{_bindir}/env python3,#!%{python3},g' grep -FrlZ '#!%{_bindir}/env python' | \ xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{python3},g' -grep -FrlZ '#!%{_bindir}/env sage-system-python' | \ - xargs -0 sed -i 's,#!%{_bindir}/env sage-system-python,#!%{python3},g' +grep -FrlZ '#!%{_bindir}/env sage-bootstrap-python' | \ + xargs -0 sed -i 's,#!%{_bindir}/env sage-bootstrap-python,#!%{python3},g' grep -FrlZ '#!%{_bindir}/env sage-python' | \ xargs -0 sed -i 's,#!%{_bindir}/env sage-python,#!%{python3},g' -grep -FrlZ 'sage-python23' | xargs -0 sed -i 's,sage-python23,python3,g' grep -FrlZ '#!%{_bindir}/env' | \ xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,' grep -rlZ '#!%{_bindir}/python$' | xargs -0 sed -i 's,#!%{_bindir}/python$,&3,' @@ -945,7 +969,7 @@ sed -i 's,%{_bindir}/python,&3,' src/sage/misc/dev_tools.py sed -e 's,local/bin/python,bin/python,' \ -e 's,#!%{_bindir}/python,&3,' \ -i src/sage/repl/preparse.py -sed -i 's,"$SAGE_LOCAL"/bin/python,%{_bindir}/python,g' src/bin/sage +sed -i 's,$SAGE_LOCAL/bin/python,%{_bindir}/python,g' src/bin/sage %if %{with bundled_ipython} sed -e "s|'%{_bindir}/env', 'which'|'%{_bindir}/which'|" \ -i build/pkgs/ipython/src/IPython/utils/_process_posix.py @@ -955,15 +979,38 @@ sed -e "s|'%{_bindir}/env', 'which'|'%{_bindir}/which'|" \ sed -i 's/64m/256m/' src/sage/interfaces/gap.py # GAP does not have enough memory to build docs -sed -i 's/80/128/' src/sage_setup/docbuild/build_options.py +sed -i 's/80/128/' src/sage_docbuild/build_options.py + +# Fix detection of Fedora +sed -i 's/yum/rpm/' build/bin/sage-guess-package-system + +# Allow use of python 3.10 +sed -i 's/3\.10\.0/3.11.0/g' configure + +# Allow use of GCC 11 +sed -i 's/1\[1-9\]/1[2-9]/' configure + +# Allow use of pari 2.13.1 +sed -i 's/Mod(0, 2)/0/' configure + +# Allow use of fplll 5.4.1 +sed -i 's/5\.4\.0/5.4.1/g' configure + +# Allow use of giac 1.7 +sed -i 's/1\.6\.999/1.7.999/g' configure + +# Do not build with -march=native +sed -i 's/CFLAGS_MARCH="-march=native"/CFLAGS_MARCH=""/' configure ######################################################################## %build export LC_ALL=C.UTF-8 export CC=%{__cc} -export CFLAGS="%{optflags}" -export CXXFLAGS="%{optflags}" +export CPPFLAGS="-I%{_includedir}/arb -I%{_includedir}/cddlib" +export CFLAGS="%{build_cflags}" +export CXXFLAGS="%{build_cxxflags}" +export ECMBIN=%{_bindir}/gmp-ecm export SAGE_PYTHON_VERSION=3 export SAGE_ROOT=%{buildroot}%{SAGE_ROOT} export SAGE_LOCAL=%{buildroot}%{SAGE_LOCAL} @@ -992,20 +1039,30 @@ export PYTHON=%{_bindir}/python3 export PYTHONPATH=%{buildroot}%{python3_sitearch}:$PYTHONPATH #------------------------------------------------------------------------ -# Generate sage-env-config -sed -e 's,@prefix@,%{SAGE_LOCAL},' \ - -e 's,@CC@,gcc,' \ - -e 's,@CXX@,g++,' \ - -e 's,@FC@,gfortran,' \ - -e 's,@OBJC@,gcc,' \ - -e 's,@OBJCXX@,g++,' \ - -e 's,@SAGE_PYTHON_VERSION@,3,' \ - -e 's,@SAGE_GMP_PREFIX@,,' \ - -e 's,@SAGE_GMP_INCLUDE@,%{_includedir},' \ - -e 's,@SAGE_MPFR_PREFIX@,,' \ - -e 's,@SAGE_MPC_PREFIX@,,' \ - -e 's,@SAGE_NTL_PREFIX@,,' \ - src/bin/sage-env-config.in > src/bin/sage-env-config +# Run the configure script to generate files +export GSL_LIBS="-lgsl -lflexiblas -lm" +%configure \ + --prefix=$SAGE_LOCAL \ + --disable-silent-rules \ + --enable-4ti2 \ + --enable-bliss \ + --enable-cocoalib \ + --enable-cryptominisat \ + --enable-csdp \ + --enable-database_cremona_ellcurve \ + --enable-frobby \ + --enable-mcqd \ + --enable-meataxe \ + --enable-primecount \ + --enable-qepcad \ + --enable-saclib \ + --enable-sirocco \ + --enable-surf \ + --enable-tdlib + +#------------------------------------------------------------------------ +# Link with flexiblas instead of gslcblas +grep -FrlZ gslcblas | xargs -0 sed -i 's/gslcblas/flexiblas/g' #------------------------------------------------------------------------ # Save and update environment to generate bundled interfaces @@ -1016,20 +1073,27 @@ export SAGE_LOCAL=%{_builddir} %if %{with bundled_ipython} pushd build/pkgs/ipython/src - %__python3 setup.py build - %__python3 setup.py install --root %{_builddir} + %{python3} setup.py build + %{python3} setup.py install --root %{_builddir} popd pushd build/pkgs/prompt_toolkit/src - %__python3 setup.py build - %__python3 setup.py install --root %{_builddir} + %{python3} setup.py build + %{python3} setup.py install --root %{_builddir} popd %endif %if %{with bundled_ipywidgets} pushd build/pkgs/ipywidgets/src - %__python3 setup.py build - %__python3 setup.py install --root %{_builddir} + %{python3} setup.py build + %{python3} setup.py install --root %{_builddir} +popd +%endif + +%if %{with bundled_jupyter_jsmol} +pushd build/pkgs/jupyter_jsmol/src + %{python3} setup.py build + %{python3} setup.py install --root %{_builddir} popd %endif @@ -1051,12 +1115,14 @@ mkdir -p %{buildroot}%{SAGE_SPKG_INST} mkdir -p %{buildroot}%{_libdir}/sagemath/build/pkgs pushd src - %__python3 -u ./setup.py build + %{python3} -u ./setup.py build + tar cf - $(find sage -type f \! \( -name \*.c -o -name \*.cc -o -name \*.cpp -o -name .gitignore -o -name \*.hpp \) ) | (cd build/lib.*; tar xf -) + tar cf - $(find sage_setup -name \*.py) | (cd build/lib.*; tar xf -) popd #------------------------------------------------------------------------ pushd build/pkgs/sagetex/src - %__python3 ./setup.py build + %{python3} ./setup.py build popd #------------------------------------------------------------------------ @@ -1208,7 +1274,7 @@ popd #------------------------------------------------------------------------ pushd build/pkgs/conway_polynomials - %__python3 ./spkg-install.py + %{python3} ./spkg-install.py popd #------------------------------------------------------------------------ @@ -1219,7 +1285,7 @@ pushd build/pkgs/elliptic_curves tar jxf ../../../upstream/%{elliptic_curves_pkg}.tar.bz2 mv %{elliptic_curves_pkg} src fi - %__python3 ./spkg-install.py + %{python3} ./spkg-install.py popd #------------------------------------------------------------------------ @@ -1256,6 +1322,11 @@ mv %{_builddir}%{_bindir}/ip* %{buildroot}%{SAGE_LOCAL}/bin mv %{_builddir}%{python3_sitelib}/ipywidgets* %{buildroot}%{SAGE_PYTHONPATH} %endif +#------------------------------------------------------------------------ +%if %{with bundled_jupyter_jsmol} +mv %{_builddir}%{python3_sitelib}/jupyter_jsmol* %{buildroot}%{SAGE_PYTHONPATH} +%endif + #------------------------------------------------------------------------ %if %{with bundled_thebe} pushd build/pkgs/thebe @@ -1275,6 +1346,7 @@ popd ) # source build/bin/sage-dist-helpers #------------------------------------------------------------------------ +singver=$(sed 's/^.*-\([.[:digit:]]*\).*$/\1/' <<< %{singular_pkg}) cat > %{buildroot}%{SAGE_LOCAL}/bin/sage-env << EOF export CUR=\$PWD ##export DOT_SAGE="\$HOME/.sage" @@ -1295,7 +1367,7 @@ module load surf-geometry-%{_arch} export PATH=$SAGE_LOCAL/bin:\$PATH export SINGULAR_DATA_DIR=%{_datadir} export SINGULAR_BIN_DIR=%{_libdir}/Singular -export SINGULAR_SO=%{_libdir}/libSingular-4.1.1.so +export SINGULAR_SO=%{_libdir}/libSingular-$singver.so ##export PYTHONPATH="$SAGE_PYTHONPATH:\$SAGE_LOCAL/bin" export SAGE_FORTRAN=%{_bindir}/gfortran export SAGE_FORTRAN_LIB=\`gfortran --print-file-name=libgfortran.so\` @@ -1339,7 +1411,7 @@ pushd src/doc export PATH=%{buildroot}%{_bindir}:$SAGE_LOCAL/bin:$PATH export SINGULARPATH=%{_datadir}/singular/LIB export SINGULAR_BIN_DIR=%{_libdir}/Singular - export PYTHONPATH=$SAGE_SETUP:%{buildroot}%{python3_sitearch}:$SAGE_PYTHONPATH:$SAGE_DOC + export PYTHONPATH=$SAGE_SETUP:%{buildroot}%{python3_sitearch}:$SAGE_PYTHONPATH:$SAGE_SRC %if %{with sphinx_hack} pushd ../../build/pkgs/sphinx/src @@ -1353,10 +1425,9 @@ pushd src/doc ln -sf %{buildroot}%{SAGE_DOC} %{buildroot}%{SAGE_SRC}/doc export SAGE_DOC=%{buildroot}%{SAGE_DOC} export SAGE_DOC_SRC=$SAGE_DOC - # python -m sage_setup.docbuild # Build with an X server running, required by some doc builders SAGE_NUM_THREADS=2 \ - xvfb-run -d %__python3 -m docbuild --no-pdf-links -k all html -j + xvfb-run -d %{python3} -m sage_docbuild --no-pdf-links -k all html -j rm -f %{buildroot}%{SAGE_SRC}/doc ln -sf %{SAGE_DOC} %{buildroot}%{SAGE_SRC}/doc @@ -1409,7 +1480,7 @@ ln -sf src $SAGE_ROOT/devel install -p -m644 -D src/sage/ext_data/notebook-ipython/logo.svg \ %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/sagemath.svg mkdir -p %{buildroot}%{_datadir}/applications -cat > %{buildroot}%{_datadir}/applications/%{name}.desktop << EOF +cat > %{buildroot}%{_datadir}/applications/org.%{name}.sage.desktop << EOF [Desktop Entry] Name=Sagemath Comment=A free open-source mathematics software system @@ -1419,7 +1490,13 @@ Terminal=true Type=Application Categories=Education;Science;Math; EOF -desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/org.%{name}.sage.desktop + +# Install the AppData file +mkdir -p %{buildroot}%{_metainfodir} +cp -p %{SOURCE3} %{buildroot}%{_metainfodir} +appstreamcli validate --no-net \ + %{buildroot}%{_metainfodir}/org.%{name}.sage.metainfo.xml # Fix permissions find %{buildroot} -name '*.so' -exec chmod 755 {} \+ @@ -1449,6 +1526,9 @@ find %{buildroot}%{SAGE_DOC} -type d -name _sources -exec rm -fr {} \+ rm -r %{buildroot}%{python3_sitearch}/sage_setup %endif +# remove files we do not want to install +rm %{buildroot}%{SAGE_LOCAL}/bin/sage-src-env-config.in + # pretend sagemath spkgs are installed to reduce number of errors # in doctests mkdir -p %{buildroot}%{SAGE_SPKG_INST} @@ -1465,6 +1545,7 @@ pushd %{buildroot}%{SAGE_SPKG_INST} mkdir $pkg done popd + #------------------------------------------------------------------------ cat > %{buildroot}%{SAGE_LOCAL}/bin/sage-list-packages << EOF #!/bin/sh @@ -1541,19 +1622,26 @@ popd # Build the large Cremona database export PATH=%{buildroot}%{SAGE_LOCAL}/bin:$PATH export PYTHONPATH=%{buildroot}%{SAGE_PYTHONPATH}:%{buildroot}%{python3_sitearch} +touch %{buildroot}%{SAGE_SHARE}/cremona/cremona.db cat > cremona.sage << EOF +import sage.env import sage.databases.cremona -db_path = '%{buildroot}%{SAGE_SHARE}/cremona/cremona' -c = sage.databases.cremona.LargeCremonaDatabase(db_path, False, True) +sage.env.SAGE_SHARE = '%{buildroot}%{SAGE_SHARE}' +c = sage.databases.cremona.LargeCremonaDatabase('cremona', False, True) c._init_from_ftpdata('ecdata-%{cremona_ver}') EOF %{buildroot}%{SAGE_LOCAL}/bin/sage cremona.sage #------------------------------------------------------------------------ -# Script was used to build documentation and possibly other operations -perl -pi -e 's|%{buildroot}||g;s|^##||g;' \ +# Scripts were used to build documentation and possibly other operations +sed -i 's|%{buildroot}||g;s|^##||g;' \ %{buildroot}%{_bindir}/sage \ - %{buildroot}%{SAGE_LOCAL}/bin/sage-env + %{buildroot}%{SAGE_LOCAL}/bin/sage-env \ + %{buildroot}%{SAGE_LOCAL}/bin/sage-env-config \ + %{buildroot}%{SAGE_LOCAL}/bin/sage-src-env-config +sed -i "s|$PWD|%{SAGE_ROOT}|g" \ + %{buildroot}%{SAGE_LOCAL}/bin/sage-env-config \ + %{buildroot}%{SAGE_LOCAL}/bin/sage-src-env-config # last install command rm -fr $DOT_SAGE @@ -1659,20 +1747,12 @@ end %files # GPLv2+ -%dir %{SAGE_ROOT} +%license COPYING.txt %doc %{SAGE_ROOT}/COPYING.txt +%dir %{SAGE_ROOT} %dir %{SAGE_LOCAL}/ -%dir %{SAGE_LOCAL}/bin/ %dir %{SAGE_SHARE}/ -%{SAGE_LOCAL}/bin/QuadraticSieve -%{SAGE_LOCAL}/bin/ecm -%{SAGE_LOCAL}/bin/gap -%{SAGE_LOCAL}/bin/jmol -%if %{with bundled_ipython} -%{SAGE_LOCAL}/bin/ip* -%endif -%{SAGE_LOCAL}/bin/python -%{SAGE_LOCAL}/bin/sage* +%{SAGE_LOCAL}/bin/ %{SAGE_LOCAL}/include %{SAGE_LOCAL}/lib %{SAGE_LOCAL}/share @@ -1681,16 +1761,13 @@ end %{SAGE_ROOT}/devel %{SAGE_ROOT}/doc %{SAGE_ROOT}/share -%dir %{SAGE_SRC}/ -%if %{with docs} -%{SAGE_SRC}/doc -%endif -%{SAGE_SRC}/sage +%{SAGE_SRC}/ %dir %{SAGE_PYTHONPATH} # GPLv2+ %{_bindir}/sage %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg -%{_datadir}/applications/%{name}.desktop +%{_datadir}/applications/org.%{name}.sage.desktop +%{_metainfodir}/org.%{name}.sage.metainfo.xml %if %{with bundled_thebe} # MIT %{SAGE_SHARE}/thebe/ @@ -1714,10 +1791,12 @@ end %if %{with bundled_ipywidgets} %{SAGE_PYTHONPATH}/ipywidgets* %endif +%if %{with bundled_jupyter_jsmol} +%{SAGE_PYTHONPATH}/jupyter_jsmol* +%endif #------------------------------------------------------------------------ %files data -%dir %{SAGE_SHARE}/ %dir %{SAGE_ETC}/ %{SAGE_ETC}/sage %{SAGE_ETC}/gprc.expect @@ -1775,6 +1854,7 @@ end #------------------------------------------------------------------------ %files doc # GPLv2+ +%license COPYING.txt %dir %{SAGE_DOC}/ %{SAGE_DOC}/common/ %dir %{SAGE_DOC}/html/ @@ -1909,8 +1989,6 @@ end %{SAGE_ETC}/notebook-ipython/ # LGPLv2+ %{_datadir}/jupyter/kernels/sagemath/ -%{_datadir}/jupyter/nbextensions/jsmol -%{_datadir}/jupyter/nbextensions/mathjax %{_datadir}/jupyter/nbextensions/threejs #------------------------------------------------------------------------ @@ -1923,6 +2001,12 @@ end ######################################################################## %changelog +* Thu Jun 17 2021 Jerry James - 9.3-1 +- Version 9.3 +- Drop -arb and -openblas patches +- Add -cvxopt patch +- Add metainfo file + * Fri Jun 04 2021 Python Maint - 9.2-5 - Rebuilt for Python 3.10 diff --git a/sources b/sources index 8420b85..5b8e834 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (cremona-2019-10-29.tar.gz) = 32fbb828f26f87191e39123762cfbd796aac9abf346f0dc981e8e3f390435b22d281be3031ea92ae7e18f4ce41af8054784ca0d550a08f17b05c54ca08b4c9c8 -SHA512 (sage-9.2.tar.gz) = d7e833919740dd9249b14fb0fc7fdc93ad6265dae9363fa2495c88274f0683c7aae2f7625f842584a95bd4f6a439d575a6532a945d6e50054355853d68e0275d +SHA512 (sage-9.3.tar.gz) = e5775aeff52fde3176f73340050e373e010a96f965c4b939b2ab105a941260d163185be2495ad38de6fbcaed81e897b6ad4180874ccfc778542beb79287bc912