Version 9.8

Also:
- Drop upstreamed patches: -fes-build, -python3.11
- Add patches: -catch-value, -gap-split-root, -bind2nd, -mem-fun-ref
This commit is contained in:
Jerry James 2023-03-13 16:09:59 -06:00
parent a560530636
commit d510b9edac
15 changed files with 553 additions and 1223 deletions

20
sagemath-bind2nd.patch Normal file
View file

@ -0,0 +1,20 @@
diff -up src/sage/modular/arithgroup/farey.cpp.orig src/sage/modular/arithgroup/farey.cpp
--- src/sage/modular/arithgroup/farey.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/modular/arithgroup/farey.cpp 2023-03-13 12:54:35.465197691 -0600
@@ -24,6 +24,7 @@
#include <sstream>
#include <algorithm>
#include <cassert>
+#include <functional>
#include <gmpxx.h>
#include <Python.h>
@@ -737,7 +738,7 @@ size_t FareySymbol::nu3() const {
size_t FareySymbol::rank_pi() const {
if( index() == 2 ) return 1;
return count_if(pairing.begin(), pairing.end(),
- bind2nd(greater<int>(), 0))/2;
+ bind(greater<int>(), placeholders::_1, 0))/2;
}
size_t FareySymbol::number_of_cusps() const {

232
sagemath-catch-value.patch Normal file
View file

@ -0,0 +1,232 @@
diff -up src/sage/graphs/base/boost_interface.cpp.orig src/sage/graphs/base/boost_interface.cpp
--- src/sage/graphs/base/boost_interface.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/graphs/base/boost_interface.cpp 2023-03-13 11:32:02.724494081 -0600
@@ -240,7 +240,7 @@ public:
try {
boost::dijkstra_shortest_paths(graph, vertices[s], distance_map(boost::make_iterator_property_map(distances.begin(), index))
.predecessor_map(boost::make_iterator_property_map(predecessors.begin(), index)));
- } catch (boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::negative_edge> > e) {
+ } catch (boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::negative_edge> >& e) {
return to_return;
}
diff -up src/sage/symbolic/ginac/function.cpp.orig src/sage/symbolic/ginac/function.cpp
--- src/sage/symbolic/ginac/function.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/function.cpp 2023-03-13 11:32:31.540967570 -0600
@@ -961,12 +961,12 @@ ex function::evalf(int level, PyObject*
try {
return n.try_py_method(get_name());
}
- catch (std::logic_error) {
+ catch (std::logic_error&) {
try {
const numeric& nn = ex_to<numeric>(n.evalf()).try_py_method(get_name());
return nn.to_dict_parent(kwds);
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
}
}
return function(serial,eseq).hold();
diff -up src/sage/symbolic/ginac/inifcns_trans.cpp.orig src/sage/symbolic/ginac/inifcns_trans.cpp
--- src/sage/symbolic/ginac/inifcns_trans.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/inifcns_trans.cpp 2023-03-13 11:32:57.173499217 -0600
@@ -379,7 +379,7 @@ static ex log_series(const ex &arg,
// maybe substitution of rel into arg fails because of a pole
try {
arg_pt = arg.subs(rel, subs_options::no_pattern);
- } catch (pole_error) {
+ } catch (pole_error&) {
must_expand_arg = true;
}
// or we are at the branch point anyways
diff -up src/sage/symbolic/ginac/mpoly-singular.cpp.orig src/sage/symbolic/ginac/mpoly-singular.cpp
--- src/sage/symbolic/ginac/mpoly-singular.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/mpoly-singular.cpp 2023-03-13 11:33:28.275930939 -0600
@@ -76,7 +76,7 @@ static CanonicalForm num2canonical(const
try {
return n.to_canonical();
}
- catch (std::runtime_error) {
+ catch (std::runtime_error&) {
if (not n.is_real()) {
numeric re = n.real();
numeric im = n.imag();
@@ -233,7 +233,7 @@ const CanonicalForm ex::to_canonical(ex_
try {
return ::power(var, n.to_long());
}
- catch (std::runtime_error) {
+ catch (std::runtime_error&) {
throw std::runtime_error("exponent too big");
}
}
@@ -261,7 +261,7 @@ const CanonicalForm ex::to_canonical(ex_
try {
return ::power(var, n.to_long());
}
- catch (std::runtime_error) {
+ catch (std::runtime_error&) {
throw std::runtime_error("exponent too big");
}
}
diff -up src/sage/symbolic/ginac/numeric.cpp.orig src/sage/symbolic/ginac/numeric.cpp
--- src/sage/symbolic/ginac/numeric.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/numeric.cpp 2023-03-13 12:53:12.671709229 -0600
@@ -3636,11 +3636,11 @@ const numeric numeric::real() const {
try {
return try_py_method("real");
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
try {
return try_py_method("real_part");
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
return *this;
}
default:
@@ -3664,11 +3664,11 @@ const numeric numeric::imag() const {
try {
return try_py_method("imag");
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
try {
return try_py_method("imag_part");
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
return *_num0_p;
}
default:
@@ -4945,11 +4945,11 @@ const numeric Li2(const numeric &x, PyOb
try {
return x.try_py_method("dilog");
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
try {
return x.try_py_method("polylog", *_num2_p);
}
- catch (std::logic_error) {}
+ catch (std::logic_error&) {}
return x.Li2(*_num2_p, parent);
}
diff -up src/sage/symbolic/ginac/pseries.cpp.orig src/sage/symbolic/ginac/pseries.cpp
--- src/sage/symbolic/ginac/pseries.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/pseries.cpp 2023-03-13 11:34:56.953310716 -0600
@@ -855,7 +855,7 @@ ex mul::series(const relational & r, int
bool flag_redo = false;
try {
real_ldegree = buf.expand().ldegree(sym-r.rhs()).to_int();
- } catch (std::runtime_error) {}
+ } catch (std::runtime_error&) {}
if (real_ldegree == 0) {
if ( factor < 0 ) {
@@ -1053,7 +1053,7 @@ ex power::series(const relational & r, i
if (is_exactly_a<infinity>(basis_subs)) {
must_expand_basis = true;
}
- } catch (pole_error) {
+ } catch (pole_error&) {
must_expand_basis = true;
}
@@ -1063,7 +1063,7 @@ ex power::series(const relational & r, i
if (is_exactly_a<infinity>(exponent_subs)) {
exponent_is_regular = false;
}
- } catch (pole_error) {
+ } catch (pole_error&) {
exponent_is_regular = false;
}
@@ -1133,7 +1133,7 @@ ex power::series(const relational & r, i
ex result;
try {
result = ex_to<pseries>(e).power_const(numexp, order);
- } catch (pole_error) {
+ } catch (pole_error&) {
epvector ser;
ser.emplace_back(Order(_ex1), order);
result = pseries(r, ser);
@@ -1203,7 +1203,7 @@ ex ex::series(const ex & r, int order, u
order,
options);
}
- catch(flint_error) {
+ catch(flint_error&) {
;
}
}
diff -up src/sage/symbolic/ginac/sum.cpp.orig src/sage/symbolic/ginac/sum.cpp
--- src/sage/symbolic/ginac/sum.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/sum.cpp 2023-03-13 11:35:12.139033264 -0600
@@ -562,7 +562,7 @@ ex gosper_sum_definite(ex f, ex s, ex a,
return res;
return t;
}
- catch (gosper_domain_error) {
+ catch (gosper_domain_error&) {
*success = 0;
return _ex0;
}
@@ -579,7 +579,7 @@ ex gosper_sum_indefinite(ex f, ex s, int
return res;
return t;
}
- catch (gosper_domain_error) {
+ catch (gosper_domain_error&) {
*success = 0;
return _ex0;
}
diff -up src/sage/symbolic/ginac/upoly-ginac.cpp.orig src/sage/symbolic/ginac/upoly-ginac.cpp
--- src/sage/symbolic/ginac/upoly-ginac.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/upoly-ginac.cpp 2023-03-13 11:35:36.657585291 -0600
@@ -240,7 +240,7 @@ ex decomp_rational(const ex &a, const ex
try {
q = quo(numer, denom, x);
}
- catch (std::logic_error) {
+ catch (std::logic_error&) {
return a;
}
return q + rem(numer, denom, x) / denom;
@@ -536,7 +536,7 @@ ex parfrac(const ex & a, const ex & x)
// Convert N(x)/D(x) -> Q(x) + R(x)/D(x), so degree(R) < degree(D)
qr = quo_rem(numer, denom, x, true);
}
- catch (std::logic_error) {
+ catch (std::logic_error&) {
return a;
}
// Factorize denominator and compute cofactors
diff -up src/sage/symbolic/ginac/useries.cpp.orig src/sage/symbolic/ginac/useries.cpp
--- src/sage/symbolic/ginac/useries.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/useries.cpp 2023-03-13 11:35:59.505167856 -0600
@@ -322,10 +322,10 @@ bool useries_can_handle(const ex& the_ex
(void) nd.op(1).degree(s).to_long();
(void) nd.op(1).ldegree(s).to_long();
}
- catch (conversion_error) {
+ catch (conversion_error&) {
throw std::runtime_error("exponent too big");
}
- catch (std::runtime_error) {}
+ catch (std::runtime_error&) {}
}
return ok;
}
@@ -406,7 +406,7 @@ ex useries(const ex& the_ex, const symbo
try {
ldeg = low_series_degree(the_ex);
}
- catch (ldegree_error) {
+ catch (ldegree_error&) {
may_extend = true;
}

View file

@ -33,7 +33,7 @@ diff -up src/sage/env.py.orig src/sage/env.py
+MTXLIB = var("MTXLIB", join(DOT_SAGE, "meataxe"))
THREEJS_DIR = var("THREEJS_DIR", join(SAGE_SHARE, "threejs-sage"))
-PPLPY_DOCS = var("PPLPY_DOCS", join(SAGE_SHARE, "doc", "pplpy"))
+PPLPY_DOCS = var("PPLPY_DOCS", join("/usr", "share", "doc", "python3-pplpy"))
+PPLPY_DOCS = var("PPLPY_DOCS", join("/usr", "share", "doc", "python3-pplpy-devel"))
MAXIMA = var("MAXIMA", "maxima")
MAXIMA_FAS = var("MAXIMA_FAS")
KENZO_FAS = var("KENZO_FAS")

View file

@ -1,7 +1,7 @@
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/graphs/strongly_regular_db.pyx 2023-01-15 16:25:07.239217420 -0700
@@ -2424,7 +2424,7 @@ def strongly_regular_from_two_intersecti
--- src/sage/graphs/strongly_regular_db.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/graphs/strongly_regular_db.pyx 2023-03-13 08:43:22.143746071 -0600
@@ -2443,7 +2443,7 @@ def strongly_regular_from_two_intersecti
A set of points in the projective geometry `PG(k,q)` is said to be a
2-intersection set if it intersects every hyperplane in either `h_1` or
@ -11,8 +11,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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/group.pyx 2023-01-15 16:25:07.239217420 -0700
--- src/sage/groups/group.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/group.pyx 2023-03-13 08:43:22.143746071 -0600
@@ -51,7 +51,7 @@ def is_Group(x):
@ -23,8 +23,8 @@ diff -up src/sage/groups/group.pyx.orig src/sage/groups/group.pyx
TESTS::
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx 2023-01-15 16:25:08.856187835 -0700
--- src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx 2023-03-13 08:43:22.144746053 -0600
@@ -105,7 +105,7 @@ cdef class LinearBinaryCodeStruct(Binary
self.ith_word = &ith_word_linear
@ -34,96 +34,9 @@ diff -up src/sage/groups/perm_gps/partn_ref/refinement_binary.pyx.orig src/sage/
Perform the canonical labeling and automorphism group computation,
storing results to self.
diff -up src/sage/libs/eclib/newforms.pyx.orig src/sage/libs/eclib/newforms.pyx
--- src/sage/libs/eclib/newforms.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/eclib/newforms.pyx 2023-01-15 16:25:10.727153601 -0700
@@ -22,7 +22,7 @@ from sage.modular.all import Cusp
cdef class ECModularSymbol:
- """
+ r"""
Modular symbol associated with an elliptic curve, using John Cremona's newforms class.
EXAMPLES::
diff -up src/sage/libs/fes.pyx.orig src/sage/libs/fes.pyx
--- src/sage/libs/fes.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/fes.pyx 2023-01-15 16:25:10.727153601 -0700
@@ -292,7 +292,7 @@ def find_coordinate_change(As, max_tries
def prepare_polynomials(f):
- """
+ r"""
Finds a linear combination of the equations that is faster to solve by FES
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_GF2E.pyx 2023-01-15 16:25:10.727153601 -0700
@@ -73,7 +73,7 @@ def ntl_GF2E_random(ntl_GF2EContext_clas
cdef class ntl_GF2E():
r"""
- The \\class{GF2E} represents a finite extension field over GF(2)
+ The \class{GF2E} represents a finite extension field over GF(2)
using NTL. Elements are represented as polynomials over GF(2)
modulo a modulus.
@@ -439,7 +439,7 @@ cdef class ntl_GF2E():
return l
def _sage_(ntl_GF2E self, k=None):
- """
+ r"""
Returns a \class{FiniteFieldElement} representation
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_mat_GF2E.pyx.orig src/sage/libs/ntl/ntl_mat_GF2E.pyx
--- src/sage/libs/ntl/ntl_mat_GF2E.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_mat_GF2E.pyx 2023-01-15 16:25:10.728153583 -0700
@@ -181,7 +181,7 @@ cdef class ntl_mat_GF2E():
return unpickle_class_args, (ntl_mat_GF2E, (self.modulus_context(), self.x.NumRows(), self.x.NumCols(), self.list()))
def __repr__(self):
- """
+ r"""
Return the string representation of self.
EXAMPLES::
@@ -446,7 +446,7 @@ cdef class ntl_mat_GF2E():
return r
def gauss(self,ncols=-1):
- """
+ r"""
Performs unitary row operations so as to bring this matrix
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_mat_GF2.pyx 2023-01-15 16:33:39.175760142 -0700
@@ -5,7 +5,7 @@
# distutils: extra_link_args = NTL_LIBEXTRA
# distutils: language = c++
-"""
+r"""
Matrices over the `\GF{2}` via NTL
This class is only provided to have a complete NTL interface and for
@@ -376,7 +376,7 @@ cdef class ntl_mat_GF2():
return r
def gauss(self,ncols=-1):
- """
+ r"""
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
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_mat_ZZ.pyx 2023-01-15 16:25:10.728153583 -0700
--- src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/ntl/ntl_mat_ZZ.pyx 2023-03-13 08:43:33.262545927 -0600
@@ -129,7 +129,7 @@ cdef class ntl_mat_ZZ():
return unpickle_class_args, (ntl_mat_ZZ, (self.__nrows, self.__ncols, self.list()))
@ -133,45 +46,9 @@ diff -up src/sage/libs/ntl/ntl_mat_ZZ.pyx.orig src/sage/libs/ntl/ntl_mat_ZZ.pyx
Return the string representation of self.
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_ZZ_pEX.pyx 2023-01-15 17:03:36.337323674 -0700
@@ -5,7 +5,7 @@
# distutils: extra_link_args = NTL_LIBEXTRA
# distutils: language = c++
-"""
+r"""
Wrapper for NTL's polynomials over finite ring extensions of `\Z / p\Z.`
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/ntl/ntl_ZZX.pyx 2023-01-15 16:25:10.729153564 -0700
@@ -692,7 +692,7 @@ cdef class ntl_ZZX():
return (self*other).quo_rem(g)[0]
def xgcd(self, ntl_ZZX other, proof=None):
- """
+ r"""
If self and other are coprime over the rationals, return r, s,
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/singular/polynomial.pyx.orig src/sage/libs/singular/polynomial.pyx
--- src/sage/libs/singular/polynomial.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/singular/polynomial.pyx 2023-01-15 16:25:10.729153564 -0700
@@ -22,7 +22,7 @@ cdef extern from *: # hack to get at cyt
int unlikely(int)
import re
-plusminus_pattern = re.compile("([^\(^])([\+\-])")
+plusminus_pattern = re.compile(r"([^\(^])([\+\-])")
parenthvar_pattern = re.compile(r"\(([a-zA-Z][a-zA-Z0-9]*)\)")
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/symmetrica/sc.pxi 2023-01-15 16:25:10.729153564 -0700
--- src/sage/libs/symmetrica/sc.pxi.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/symmetrica/sc.pxi 2023-03-13 08:43:36.725482994 -0600
@@ -103,7 +103,7 @@ def charvalue_symmetrica(irred, cls, tab
@ -182,8 +59,8 @@ 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/matrix_integer_dense.pyx.orig src/sage/matrix/matrix_integer_dense.pyx
--- src/sage/matrix/matrix_integer_dense.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/matrix/matrix_integer_dense.pyx 2023-01-15 16:25:13.768097961 -0700
--- src/sage/matrix/matrix_integer_dense.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/matrix/matrix_integer_dense.pyx 2023-03-13 08:43:36.727482958 -0600
@@ -757,7 +757,7 @@ cdef class Matrix_integer_dense(Matrix_d
return ans
@ -194,8 +71,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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/matrix/matrix_modn_dense_template.pxi 2023-01-15 16:25:13.768097961 -0700
--- src/sage/matrix/matrix_modn_dense_template.pxi.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/matrix/matrix_modn_dense_template.pxi 2023-03-13 08:43:36.728482940 -0600
@@ -649,7 +649,7 @@ cdef class Matrix_modn_dense_template(Ma
return (word_size, little_endian, s), 10
@ -214,99 +91,9 @@ diff -up src/sage/matrix/matrix_modn_dense_template.pxi.orig src/sage/matrix/mat
Reduces ``row1`` and ``row2`` by a unimodular transformation
using the xgcd relation between their first coefficients ``a`` and
``b``.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/matroids/basis_exchange_matroid.pyx 2023-01-15 16:25:13.770097924 -0700
@@ -2115,7 +2115,7 @@ cdef class BasisExchangeMatroid(Matroid)
return EQ[0]
cpdef _is_isomorphism(self, other, morphism):
- """
+ r"""
Version of is_isomorphism() that does no type checking.
INPUT:
diff -up src/sage/matroids/linear_matroid.pyx.orig src/sage/matroids/linear_matroid.pyx
--- src/sage/matroids/linear_matroid.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/matroids/linear_matroid.pyx 2023-01-15 16:25:13.771097906 -0700
@@ -800,7 +800,7 @@ cdef class LinearMatroid(BasisExchangeMa
# (field) isomorphism
cpdef bint _is_field_isomorphism(self, LinearMatroid other, morphism): # not safe if self == other
- """
+ r"""
Version of :meth:`<LinearMatroid.is_field_isomorphism>` that does no
type checking.
@@ -966,7 +966,7 @@ cdef class LinearMatroid(BasisExchangeMa
return self._is_field_isomorphism(other, morphism)
cpdef is_field_isomorphism(self, other, morphism):
- """
+ r"""
Test if a provided morphism induces a bijection between represented
matroids.
diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx
--- src/sage/matroids/matroid.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/matroids/matroid.pyx 2023-01-15 16:25:13.772097888 -0700
@@ -3150,7 +3150,7 @@ cdef class Matroid(SageObject):
return Polyhedron(vertices)
def independence_matroid_polytope(self):
- """
+ r"""
Return the independence matroid polytope of ``self``.
This is defined as the convex hull of the vertices
@@ -3430,7 +3430,7 @@ cdef class Matroid(SageObject):
return self._is_isomorphism(other, morphism)
cpdef is_isomorphism(self, other, morphism):
- """
+ r"""
Test if a provided morphism induces a matroid isomorphism.
A *morphism* is a map from the groundset of ``self`` to the groundset
@@ -3553,7 +3553,7 @@ cdef class Matroid(SageObject):
return self._is_isomorphism(other, mf)
cpdef _is_isomorphism(self, other, morphism):
- """
+ r"""
Version of is_isomorphism() that does no type checking.
INPUT:
@@ -4313,7 +4313,7 @@ cdef class Matroid(SageObject):
return self.dual().extension(element, subsets).dual()
cpdef modular_cut(self, subsets):
- """
+ r"""
Compute the modular cut generated by ``subsets``.
A *modular cut* is a collection `C` of flats such that
@@ -4714,7 +4714,7 @@ cdef class Matroid(SageObject):
return True
cpdef is_cosimple(self):
- """
+ r"""
Test if the matroid is cosimple.
A matroid is *cosimple* if it contains no cocircuits of length 1 or 2.
@@ -7480,7 +7480,7 @@ cdef class Matroid(SageObject):
return A
cpdef tutte_polynomial(self, x=None, y=None):
- """
+ r"""
Return the Tutte polynomial of the matroid.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/misc/cachefunc.pyx 2023-01-15 16:25:13.772097888 -0700
--- src/sage/misc/cachefunc.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/misc/cachefunc.pyx 2023-03-13 08:43:39.550431661 -0600
@@ -834,7 +834,7 @@ cdef class CachedFunction():
## forward other questions to the cached function.
@ -317,8 +104,8 @@ 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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/misc/sageinspect.py 2023-01-15 16:40:43.609846146 -0700
--- src/sage/misc/sageinspect.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/misc/sageinspect.py 2023-03-13 08:43:39.551431643 -0600
@@ -948,7 +948,7 @@ def _grep_first_pair_of_parentheses(s):
@ -328,22 +115,10 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py
Split off a sub-expression from the start of a given string.
INPUT:
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/modules/free_module_element.pyx 2023-01-15 16:25:19.760988310 -0700
@@ -3743,7 +3743,7 @@ cdef class FreeModuleElement(Vector):
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())
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/numerical/backends/generic_backend.pyx 2023-01-15 16:25:19.761988291 -0700
@@ -1384,7 +1384,7 @@ cdef class GenericBackend:
--- src/sage/numerical/backends/generic_backend.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/numerical/backends/generic_backend.pyx 2023-03-13 08:43:39.552431625 -0600
@@ -1388,7 +1388,7 @@ cdef class GenericBackend:
raise NotImplementedError()
cpdef bint is_variable_basic(self, int index):
@ -352,7 +127,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
@@ -1414,7 +1414,7 @@ cdef class GenericBackend:
@@ -1418,7 +1418,7 @@ cdef class GenericBackend:
raise NotImplementedError()
cpdef bint is_variable_nonbasic_at_lower_bound(self, int index):
@ -361,7 +136,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
@@ -1444,7 +1444,7 @@ cdef class GenericBackend:
@@ -1448,7 +1448,7 @@ cdef class GenericBackend:
raise NotImplementedError()
cpdef bint is_slack_variable_basic(self, int index):
@ -370,7 +145,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
@@ -1474,7 +1474,7 @@ cdef class GenericBackend:
@@ -1478,7 +1478,7 @@ cdef class GenericBackend:
raise NotImplementedError()
cpdef bint is_slack_variable_nonbasic_at_lower_bound(self, int index):
@ -380,8 +155,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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/numerical/backends/glpk_backend.pyx 2023-01-15 16:25:19.762988273 -0700
--- src/sage/numerical/backends/glpk_backend.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/numerical/backends/glpk_backend.pyx 2023-03-13 08:43:39.553431607 -0600
@@ -2316,7 +2316,7 @@ cdef class GLPKBackend(GenericBackend):
raise ValueError("This parameter is not available.")
@ -419,8 +194,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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/numerical/backends/interactivelp_backend.pyx 2023-01-15 16:25:19.763988255 -0700
--- src/sage/numerical/backends/interactivelp_backend.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/numerical/backends/interactivelp_backend.pyx 2023-03-13 08:43:39.553431607 -0600
@@ -1065,7 +1065,7 @@ cdef class InteractiveLPBackend:
problem_type, ring, objective_constant_term=d)
@ -476,8 +251,8 @@ diff -up src/sage/numerical/backends/interactivelp_backend.pyx.orig src/sage/num
EXAMPLES::
diff -up src/sage/rings/complex_interval.pyx.orig src/sage/rings/complex_interval.pyx
--- src/sage/rings/complex_interval.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/complex_interval.pyx 2023-01-15 16:44:08.256030310 -0700
--- src/sage/rings/complex_interval.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/complex_interval.pyx 2023-03-13 08:43:39.553431607 -0600
@@ -1114,7 +1114,7 @@ cdef class ComplexIntervalFieldElement(s
return x
@ -487,113 +262,9 @@ diff -up src/sage/rings/complex_interval.pyx.orig src/sage/rings/complex_interva
Return the multiplicative inverse of ``self``.
EXAMPLES::
diff -up src/sage/rings/complex_mpc.pyx.orig src/sage/rings/complex_mpc.pyx
--- src/sage/rings/complex_mpc.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/complex_mpc.pyx 2023-01-15 16:25:22.175944120 -0700
@@ -137,15 +137,15 @@ cdef inline mpfr_rnd_t rnd_im(mpc_rnd_t
sign = '[+-]'
digit_ten = '[0123456789]'
exponent_ten = '[e@]' + sign + '?[0123456789]+'
-number_ten = 'inf(?:inity)?|@inf@|nan(?:\([0-9A-Z_]*\))?|@nan@(?:\([0-9A-Z_]*\))?'\
- '|(?:' + digit_ten + '*\.' + digit_ten + '+|' + digit_ten + '+\.?)(?:' + exponent_ten + ')?'
-imaginary_ten = 'i(?:\s*\*\s*(?:' + number_ten + '))?|(?:' + number_ten + ')\s*\*\s*i'
-complex_ten = '(?P<im_first>(?P<im_first_im_sign>' + sign + ')?\s*(?P<im_first_im_abs>' + imaginary_ten + ')' \
- '(\s*(?P<im_first_re_sign>' + sign + ')\s*(?P<im_first_re_abs>' + number_ten + '))?)' \
+number_ten = r'inf(?:inity)?|@inf@|nan(?:\([0-9A-Z_]*\))?|@nan@(?:\([0-9A-Z_]*\))?'\
+ '|(?:' + digit_ten + r'*\.' + digit_ten + '+|' + digit_ten + r'+\.?)(?:' + exponent_ten + ')?'
+imaginary_ten = r'i(?:\s*\*\s*(?:' + number_ten + '))?|(?:' + number_ten + r')\s*\*\s*i'
+complex_ten = '(?P<im_first>(?P<im_first_im_sign>' + sign + r')?\s*(?P<im_first_im_abs>' + imaginary_ten + ')' \
+ r'(\s*(?P<im_first_re_sign>' + sign + r')\s*(?P<im_first_re_abs>' + number_ten + '))?)' \
'|' \
- '(?P<re_first>(?P<re_first_re_sign>' + sign + ')?\s*(?P<re_first_re_abs>' + number_ten + ')' \
- '(\s*(?P<re_first_im_sign>' + sign + ')\s*(?P<re_first_im_abs>' + imaginary_ten + '))?)'
-re_complex_ten = re.compile('^\s*(?:' + complex_ten + ')\s*$', re.I)
+ '(?P<re_first>(?P<re_first_re_sign>' + sign + r')?\s*(?P<re_first_re_abs>' + number_ten + ')' \
+ r'(\s*(?P<re_first_im_sign>' + sign + r')\s*(?P<re_first_im_abs>' + imaginary_ten + '))?)'
+re_complex_ten = re.compile(r'^\s*(?:' + complex_ten + r')\s*$', re.I)
cpdef inline split_complex_string(string, int base=10):
"""
@@ -185,17 +185,17 @@ cpdef inline split_complex_string(string
# Warning: number, imaginary, and complex should be enclosed in parentheses
# when used as regexp because of alternatives '|'
- number = '@nan@(?:\([0-9A-Z_]*\))?|@inf@|(?:' + digit + '*\.' + digit + '+|' + digit + '+\.?)(?:' + exponent + ')?'
+ number = r'@nan@(?:\([0-9A-Z_]*\))?|@inf@|(?:' + digit + r'*\.' + digit + '+|' + digit + r'+\.?)(?:' + exponent + ')?'
if base <= 10:
- number = 'nan(?:\([0-9A-Z_]*\))?|inf(?:inity)?|' + number
- imaginary = 'i(?:\s*\*\s*(?:' + number + '))?|(?:' + number + ')\s*\*\s*i'
- complex = '(?P<im_first>(?P<im_first_im_sign>' + sign + ')?\s*(?P<im_first_im_abs>' + imaginary + ')' \
- '(\s*(?P<im_first_re_sign>' + sign + ')\s*(?P<im_first_re_abs>' + number + '))?)' \
+ number = r'nan(?:\([0-9A-Z_]*\))?|inf(?:inity)?|' + number
+ imaginary = r'i(?:\s*\*\s*(?:' + number + '))?|(?:' + number + r')\s*\*\s*i'
+ complex = '(?P<im_first>(?P<im_first_im_sign>' + sign + r')?\s*(?P<im_first_im_abs>' + imaginary + ')' \
+ r'(\s*(?P<im_first_re_sign>' + sign + r')\s*(?P<im_first_re_abs>' + number + '))?)' \
'|' \
- '(?P<re_first>(?P<re_first_re_sign>' + sign + ')?\s*(?P<re_first_re_abs>' + number + ')' \
- '(\s*(?P<re_first_im_sign>' + sign + ')\s*(?P<re_first_im_abs>' + imaginary + '))?)'
+ '(?P<re_first>(?P<re_first_re_sign>' + sign + r')?\s*(?P<re_first_re_abs>' + number + ')' \
+ r'(\s*(?P<re_first_im_sign>' + sign + r')\s*(?P<re_first_im_abs>' + imaginary + '))?)'
- z = re.match('^\s*(?:' + complex + ')\s*$', string, re.I)
+ z = re.match(r'^\s*(?:' + complex + r')\s*$', string, re.I)
x, y = None, None
if z is not None:
@@ -207,18 +207,18 @@ cpdef inline split_complex_string(string
return None
if z.group(prefix + '_re_abs') is not None:
- x = z.expand('\g<' + prefix + '_re_abs>')
+ x = z.expand(r'\g<' + prefix + '_re_abs>')
if z.group(prefix + '_re_sign') is not None:
- x = z.expand('\g<' + prefix + '_re_sign>') + x
+ x = z.expand(r'\g<' + prefix + '_re_sign>') + x
if z.group(prefix + '_im_abs') is not None:
- y = re.search('(?P<im_part>' + number + ')', z.expand('\g<' + prefix + '_im_abs>'), re.I)
+ y = re.search('(?P<im_part>' + number + ')', z.expand(r'\g<' + prefix + '_im_abs>'), re.I)
if y is None:
y = '1'
else:
- y = y.expand('\g<im_part>')
+ y = y.expand(r'\g<im_part>')
if z.group(prefix + '_im_sign') is not None:
- y = z.expand('\g<' + prefix + '_im_sign>') + y
+ y = z.expand(r'\g<' + prefix + '_im_sign>') + y
return x, y
@@ -1701,7 +1701,7 @@ cdef class MPComplexNumber(sage.structur
return z
def cosh(self):
- """
+ r"""
Return the hyperbolic cosine of this complex number:
.. MATH::
@@ -1721,7 +1721,7 @@ cdef class MPComplexNumber(sage.structur
return z
def sinh(self):
- """
+ r"""
Return the hyperbolic sine of this complex number:
.. MATH::
@@ -2063,7 +2063,7 @@ cdef class MPComplexNumber(sage.structur
return z
def exp(self):
- """
+ r"""
Return the exponential of this complex number:
.. 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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/finite_rings/hom_finite_field.pyx 2023-01-15 16:25:22.175944120 -0700
--- src/sage/rings/finite_rings/hom_finite_field.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/finite_rings/hom_finite_field.pyx 2023-03-13 08:43:39.554431588 -0600
@@ -147,7 +147,7 @@ cdef class SectionFiniteFieldHomomorphis
@ -604,9 +275,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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/finite_rings/integer_mod.pyx 2023-01-15 16:25:22.176944101 -0700
@@ -2245,7 +2245,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs
--- src/sage/rings/finite_rings/integer_mod.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/finite_rings/integer_mod.pyx 2023-03-13 08:43:39.555431570 -0600
@@ -2243,7 +2243,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
@ -615,7 +286,7 @@ diff -up src/sage/rings/finite_rings/integer_mod.pyx.orig src/sage/rings/finite_
EXAMPLES::
sage: R = Integers(10^10)
@@ -3544,7 +3544,7 @@ cdef class IntegerMod_int64(IntegerMod_a
@@ -3540,7 +3540,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
@ -624,127 +295,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/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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/number_field/number_field_element.pyx 2023-01-15 16:25:22.176944101 -0700
@@ -493,7 +493,7 @@ cdef class NumberFieldElement(FieldEleme
return codomain(f(im_gens[0]))
def _latex_(self):
- """
+ r"""
Returns the latex representation for this element.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/number_field/number_field_morphisms.pyx 2023-01-15 16:25:22.176944101 -0700
@@ -340,7 +340,7 @@ cdef class EmbeddedNumberFieldConversion
cpdef matching_root(poly, target, ambient_field=None, margin=1, max_prec=None):
- """
+ r"""
Given a polynomial and a target, this function chooses the root that
target best approximates as compared in ambient_field.
@@ -403,7 +403,7 @@ cpdef matching_root(poly, target, ambien
cpdef closest(target, values, margin=1):
- """
+ r"""
This is a utility function that returns the item in values closest to
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/padics/local_generic_element.pyx 2023-01-15 16:25:22.177944083 -0700
@@ -408,7 +408,7 @@ cdef class LocalGenericElement(Commutati
return ans
def _latex_(self):
- """
+ r"""
Returns a latex representation of self.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/padics/padic_capped_absolute_element.pyx 2023-01-15 16:25:22.177944083 -0700
@@ -383,7 +383,7 @@ cdef class pAdicCappedAbsoluteElement(CA
return ans
def _exp_binary_splitting(self, aprec):
- """
+ r"""
Compute the exponential power series of this element
This is a helper method for :meth:`exp`.
@@ -443,7 +443,7 @@ cdef class pAdicCappedAbsoluteElement(CA
return ans
def _exp_newton(self, aprec, log_algorithm=None):
- """
+ r"""
Compute the exponential power series of this element
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/padics/padic_fixed_mod_element.pyx 2023-01-15 16:25:22.177944083 -0700
@@ -449,7 +449,7 @@ cdef class pAdicFixedModElement(FMElemen
return ans
def _exp_binary_splitting(self, aprec):
- """
+ r"""
Compute the exponential power series of this element
This is a helper method for :meth:`exp`.
@@ -508,7 +508,7 @@ cdef class pAdicFixedModElement(FMElemen
return ans
def _exp_newton(self, aprec, log_algorithm=None):
- """
+ r"""
Compute the exponential power series of this element
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/padics/padic_generic_element.pyx 2023-01-15 16:25:22.178944065 -0700
@@ -544,7 +544,7 @@ cdef class pAdicGenericElement(LocalGene
return self._repr_(mode=mode)
def _repr_(self, mode=None, do_latex=False):
- """
+ r"""
Returns a string representation of this element.
INPUT:
@@ -3028,7 +3028,7 @@ cdef class pAdicGenericElement(LocalGene
return series_unit*nfactorial_unit.inverse_of_unit()<<(series_val-nfactorial_val)
def _exp_binary_splitting(self, aprec):
- """
+ r"""
Compute the exponential power series of this element
This is a helper method for :meth:`exp`.
@@ -3074,7 +3074,7 @@ cdef class pAdicGenericElement(LocalGene
raise NotImplementedError("the binary splitting algorithm is not implemented for the parent: %s" % self.parent())
def _exp_newton(self, aprec, log_algorithm=None):
- """
+ r"""
Compute the exponential power series of this element
This is a helper method for :meth:`exp`.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2023-01-15 16:25:22.179944047 -0700
@@ -2485,7 +2485,7 @@ cdef class MPolynomial_libsingular(MPoly
--- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2023-03-13 08:43:44.190347338 -0600
@@ -2487,7 +2487,7 @@ cdef class MPolynomial_libsingular(MPoly
return char_to_str(s)
def _latex_(self):
@ -753,44 +307,10 @@ diff -up src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig src/sag
Return a polynomial LaTeX representation of this polynomial.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/ore_polynomial_element.pyx 2023-01-15 16:25:22.179944047 -0700
@@ -1707,8 +1707,8 @@ cdef class OrePolynomial(AlgebraElement)
var = ""
s += "%s %s"%(x,var)
s = s.replace(" + -", " - ")
- s = re.sub(" 1(\.0+)? \|"," ", s)
- s = re.sub(" -1(\.0+)? \|", " -", s)
+ s = re.sub(r" 1(\.0+)? \|"," ", s)
+ s = re.sub(r" -1(\.0+)? \|", " -", s)
s = s.replace("|","")
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/polynomial_element.pyx 2023-01-15 16:25:22.181944010 -0700
@@ -2744,8 +2744,8 @@ cdef class Polynomial(CommutativeAlgebra
var = ""
s += "%s %s" % (x, var)
s = s.replace(" + -", " - ")
- s = re.sub(" 1(\.0+)? \|"," ", s)
- s = re.sub(" -1(\.0+)? \|", " -", s)
+ s = re.sub(r" 1(\.0+)? \|"," ", s)
+ s = re.sub(r" -1(\.0+)? \|", " -", s)
s = s.replace("|","")
if s == " ":
return "0"
@@ -2845,7 +2845,7 @@ cdef class Polynomial(CommutativeAlgebra
raise IndexError("polynomials are immutable")
cpdef _floordiv_(self, right):
- """
+ r"""
Quotient of division of self by other. This is denoted //.
If self = quotient \* right + remainder, this function returns
@@ -6825,8 +6825,8 @@ cdef class Polynomial(CommutativeAlgebra
--- src/sage/rings/polynomial/polynomial_element.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/polynomial_element.pyx 2023-03-13 08:43:44.194347266 -0600
@@ -6832,8 +6832,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
@ -801,42 +321,9 @@ diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/po
`p_2` respectively.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx 2023-01-15 16:25:22.181944010 -0700
@@ -1394,7 +1394,7 @@ cdef class Polynomial_integer_dense_flin
return smallInteger(fmpz_poly_degree(self.__poly))
def pseudo_divrem(self, B):
- """
+ r"""
Write ``A = self``. This function computes polynomials `Q` and `R`
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/real_roots.pyx 2023-01-15 16:25:22.182943992 -0700
@@ -1259,7 +1259,7 @@ def de_casteljau_intvec(Vector_integer_d
cdef double half_ulp = ldexp(1.0 * 65/64, -54)
def intvec_to_doublevec(Vector_integer_dense b, long err):
- """
+ r"""
Given a vector of integers A = [a1, ..., an], and an integer
error bound E, returns a vector of floating-point numbers
B = [b1, ..., bn], lower and upper error bounds F1 and F2, and
@@ -2149,7 +2149,7 @@ def subsample_vec_doctest(a, slen, llen)
return subsample_vec(a, slen, llen)
def maximum_root_first_lambda(p):
- """
+ r"""
Given a polynomial with real coefficients, computes an upper bound
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_element_gsl.pyx.orig src/sage/rings/real_double_element_gsl.pyx
--- src/sage/rings/real_double_element_gsl.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/real_double_element_gsl.pyx 2023-01-15 16:25:22.182943992 -0700
--- src/sage/rings/real_double_element_gsl.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/real_double_element_gsl.pyx 2023-03-13 08:43:45.742319138 -0600
@@ -227,7 +227,7 @@ cdef class RealDoubleElement_gsl(RealDou
return a
@ -847,8 +334,8 @@ diff -up src/sage/rings/real_double_element_gsl.pyx.orig src/sage/rings/real_dou
INPUT:
diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
--- src/sage/rings/real_mpfi.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/real_mpfi.pyx 2023-01-15 16:25:22.183943974 -0700
--- src/sage/rings/real_mpfi.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/real_mpfi.pyx 2023-03-13 08:43:45.743319120 -0600
@@ -1309,7 +1309,7 @@ cdef class RealIntervalFieldElement(Ring
return self.str(10)
@ -857,22 +344,10 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
+ r"""
Return a latex representation of ``self``.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/semirings/tropical_semiring.pyx 2023-01-15 16:25:22.183943974 -0700
@@ -99,7 +99,7 @@ cdef class TropicalSemiringElement(Eleme
return repr(self._val)
def _latex_(self):
- """
+ r"""
Return a latex representation of ``self``.
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 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/tate_algebra_element.pyx 2023-01-15 16:25:22.183943974 -0700
--- src/sage/rings/tate_algebra_element.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/tate_algebra_element.pyx 2023-03-13 08:43:46.838299224 -0600
@@ -3448,7 +3448,7 @@ cdef class TateAlgebraElement(Commutativ
@coerce_binop
@ -883,8 +358,8 @@ diff -up src/sage/rings/tate_algebra_element.pyx.orig src/sage/rings/tate_algebr
INPUT:
diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
--- src/sage/symbolic/expression.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/symbolic/expression.pyx 2023-01-15 16:25:22.185943937 -0700
--- src/sage/symbolic/expression.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/expression.pyx 2023-03-13 08:43:46.840299188 -0600
@@ -7,7 +7,7 @@
# distutils: include_dirs = SINGULAR_INCDIR
# pynac/basic.h includes

View file

@ -1,7 +1,7 @@
diff -up src/sage/env.py.orig src/sage/env.py
--- src/sage/env.py.orig 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/env.py 2022-03-04 16:04:55.067452303 -0700
@@ -496,7 +496,8 @@ def cython_aliases(required_modules=None
--- src/sage/env.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/env.py 2023-03-13 09:26:16.468693261 -0600
@@ -523,7 +523,8 @@ def cython_aliases(required_modules=None
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,8 +12,8 @@ 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 2022-03-04 16:04:55.068452305 -0700
+++ src/sage/graphs/mcqd.pyx 2022-03-04 16:05:55.226537259 -0700
--- src/sage/graphs/mcqd.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/graphs/mcqd.pyx 2023-03-13 09:26:16.468693261 -0600
@@ -1,4 +1,5 @@
# distutils: language = c++
+# distutils: libraries = mcqd
@ -21,8 +21,8 @@ diff -up src/sage/graphs/mcqd.pyx.orig src/sage/graphs/mcqd.pyx
from cysignals.signals cimport sig_on, sig_off
diff -up src/sage/libs/arb/arb.pxd.orig src/sage/libs/arb/arb.pxd
--- src/sage/libs/arb/arb.pxd.orig 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/arb/arb.pxd 2022-03-04 16:05:03.939464830 -0700
--- src/sage/libs/arb/arb.pxd.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/arb/arb.pxd 2023-03-13 09:26:16.468693261 -0600
@@ -1,4 +1,5 @@
# distutils: libraries = gmp flint ARB_LIBRARY
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -30,8 +30,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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/arb/arb_version.pyx 2022-03-04 16:05:03.939464830 -0700
--- src/sage/libs/arb/arb_version.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/arb/arb_version.pyx 2023-03-13 09:26:16.468693261 -0600
@@ -1,4 +1,5 @@
# -*- coding: utf-8
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -39,48 +39,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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/arb/arith.pyx 2022-03-04 16:05:03.939464830 -0700
--- src/sage/libs/arb/arith.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/arb/arith.pyx 2023-03-13 09:26:16.468693261 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/mpmath/ext_impl.pyx 2022-03-04 16:05:03.939464830 -0700
--- src/sage/libs/mpmath/ext_impl.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/mpmath/ext_impl.pyx 2023-03-13 09:26:16.469693242 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/mpmath/ext_libmp.pyx 2022-03-04 16:05:03.940464832 -0700
--- src/sage/libs/mpmath/ext_libmp.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/mpmath/ext_libmp.pyx 2023-03-13 09:26:16.469693242 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/mpmath/ext_main.pyx 2022-03-04 16:05:03.940464832 -0700
--- src/sage/libs/mpmath/ext_main.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/mpmath/ext_main.pyx 2023-03-13 09:26:16.469693242 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/libs/mpmath/utils.pyx 2022-03-04 16:05:03.940464832 -0700
--- src/sage/libs/mpmath/utils.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/mpmath/utils.pyx 2023-03-13 09:26:16.470693224 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/matrix/matrix_complex_ball_dense.pyx 2022-03-04 16:05:03.941464833 -0700
--- src/sage/matrix/matrix_complex_ball_dense.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/matrix/matrix_complex_ball_dense.pyx 2023-03-13 09:26:16.470693224 -0600
@@ -1,4 +1,5 @@
# distutils: libraries = ARB_LIBRARY
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -88,8 +88,8 @@ 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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/matrix/matrix_cyclo_dense.pyx 2022-03-04 16:05:03.941464833 -0700
--- src/sage/matrix/matrix_cyclo_dense.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/matrix/matrix_cyclo_dense.pyx 2023-03-13 09:26:16.470693224 -0600
@@ -1,7 +1,7 @@
# distutils: language = c++
# distutils: libraries = NTL_LIBRARIES
@ -100,16 +100,16 @@ diff -up src/sage/matrix/matrix_cyclo_dense.pyx.orig src/sage/matrix/matrix_cycl
# distutils: extra_link_args = NTL_LIBEXTRA
"""
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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/matrix/matrix_mpolynomial_dense.pyx 2022-03-04 16:05:03.941464833 -0700
--- src/sage/matrix/matrix_mpolynomial_dense.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/matrix/matrix_mpolynomial_dense.pyx 2023-03-13 09:26:16.471693206 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/complex_arb.pyx 2022-03-04 16:05:03.942464834 -0700
--- src/sage/rings/complex_arb.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/complex_arb.pyx 2023-03-13 09:26:16.471693206 -0600
@@ -1,4 +1,5 @@
# -*- coding: utf-8
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -117,43 +117,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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/number_field/number_field_element_quadratic.pyx 2022-03-04 16:05:03.942464834 -0700
@@ -4,6 +4,7 @@
--- src/sage/rings/number_field/number_field_element_quadratic.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/number_field/number_field_element_quadratic.pyx 2023-03-13 10:54:33.688631507 -0600
@@ -1,6 +1,6 @@
# 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
# 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 2022-03-04 15:50:57.344269364 -0700
+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2022-03-04 16:05:03.943464836 -0700
--- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2023-03-13 08:43:44.190347338 -0600
+++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2023-03-13 09:26:16.473693169 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/polynomial/multi_polynomial.pyx 2022-03-04 16:05:03.944464837 -0700
--- src/sage/rings/polynomial/multi_polynomial.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/multi_polynomial.pyx 2023-03-13 09:26:16.473693169 -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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/polynomial/plural.pyx 2022-03-04 16:05:03.944464837 -0700
--- src/sage/rings/polynomial/plural.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/plural.pyx 2023-03-13 09:26:16.474693151 -0600
@@ -1,3 +1,4 @@
+# distutils: include_dirs = /usr/include/singular /usr/include/factory
r"""
Noncommutative Polynomials via libSINGULAR/Plural
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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/polynomial/polynomial_complex_arb.pyx 2022-03-04 16:05:03.944464837 -0700
--- src/sage/rings/polynomial/polynomial_complex_arb.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/polynomial_complex_arb.pyx 2023-03-13 09:26:16.474693151 -0600
@@ -1,4 +1,5 @@
# -*- coding: utf-8
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -161,8 +161,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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage/rings/real_arb.pyx 2022-03-04 16:05:03.945464839 -0700
--- src/sage/rings/real_arb.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/real_arb.pyx 2023-03-13 09:26:16.474693151 -0600
@@ -1,4 +1,5 @@
# -*- coding: utf-8
+# distutils: include_dirs = /usr/include/arb /usr/include/flint
@ -170,9 +170,9 @@ 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 2022-01-30 06:41:50.000000000 -0700
+++ src/sage_setup/command/sage_build_cython.py 2022-03-04 16:05:03.945464839 -0700
@@ -209,6 +209,7 @@ class sage_build_cython(Command):
--- src/sage_setup/command/sage_build_cython.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage_setup/command/sage_build_cython.py 2023-03-13 09:26:16.475693132 -0600
@@ -205,6 +205,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)

View file

@ -1,30 +0,0 @@
diff -up src/sage/libs/fes.pyx.orig src/sage/libs/fes.pyx
--- src/sage/libs/fes.pyx.orig 2020-10-30 11:34:23.271984468 -0600
+++ src/sage/libs/fes.pyx 2020-10-30 14:44:49.462736771 -0600
@@ -14,7 +14,7 @@ variables. Performing a full exhaustive
take a **long** time. The number of variables can be artificially
reduced to 64 by specializing some of them.
-Note that the FES library **requires** at least of the equations to be
+Note that the FES library **requires** at least one of the equations to be
non-linear.
AUTHORS:
@@ -72,7 +72,7 @@ from cysignals.signals cimport sig_on, s
cdef extern from "fes_interface.h":
ctypedef int (*solution_callback_t)(void *, uint64_t)
- void exhaustive_search_wrapper(int n, int n_eqs, int degree, int ***coeffs, solution_callback_t callback, void* callback_state, int verbose)
+ void exhaustive_search_wrapper(int n, int n_eqs, int degree, int ***coeffs, solution_callback_t callback, void* callback_state, int verbose, int T)
from sage.rings.integer import Integer
@@ -218,7 +218,7 @@ def exhaustive_search(eqs, max_sols=Inf
# ------- runs the library
sig_on()
- exhaustive_search_wrapper(n, len(eqs), degree, coeffs, report_solution, <void *> internal_state, verbose)
+ exhaustive_search_wrapper(n, len(eqs), degree, coeffs, report_solution, <void *> internal_state, verbose, 0)
sig_off()
# ------- frees memory occupied by the dense representation of the equations

View file

@ -1,15 +1,15 @@
diff -up src/sage_docbuild/conf.py.orig src/sage_docbuild/conf.py
--- src/sage_docbuild/conf.py.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage_docbuild/conf.py 2023-01-15 19:50:03.796496416 -0700
@@ -209,9 +209,8 @@ def set_intersphinx_mappings(app, config
--- src/sage_docbuild/conf.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage_docbuild/conf.py 2023-03-13 09:53:42.670555040 -0600
@@ -228,9 +228,8 @@ def set_intersphinx_mappings(app, config
app.config.intersphinx_mapping = {
app.config.intersphinx_mapping = {
'python': ('https://docs.python.org/',
- os.path.join(SAGE_DOC_SRC, "common",
- "python{}.inv".format(python_version))),
- 'pplpy': (PPLPY_DOCS, None)}
+ '/usr/share/doc/python3-docs/html/objects.inv'),
+ 'pplpy': (PPLPY_DOCS, '/usr/share/doc/python3-pplpy/objects.inv')}
+ 'pplpy': (PPLPY_DOCS, '/usr/share/doc/python3-pplpy-devel/objects.inv')}
# Add master intersphinx mapping
dst = os.path.join(invpath, 'objects.inv')

View file

@ -1,6 +1,6 @@
diff -up src/doc/en/thematic_tutorials/lie/weyl_groups.rst.orig src/doc/en/thematic_tutorials/lie/weyl_groups.rst
--- src/doc/en/thematic_tutorials/lie/weyl_groups.rst.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/doc/en/thematic_tutorials/lie/weyl_groups.rst 2023-01-15 17:13:38.581179558 -0700
--- src/doc/en/thematic_tutorials/lie/weyl_groups.rst.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/doc/en/thematic_tutorials/lie/weyl_groups.rst 2023-03-13 09:42:01.111404689 -0600
@@ -139,12 +139,12 @@ string, which you can print::
X.1 1 1 1 1 1 1 1 1 1 1 1 1 1
X.2 1 -1 1 1 -1 1 1 -1 -1 -1 1 1 1
@ -21,9 +21,9 @@ diff -up src/doc/en/thematic_tutorials/lie/weyl_groups.rst.orig src/doc/en/thema
X.11 4 2 . -1 . . . -2 . . 1 . -4
X.12 6 . -2 . . -2 -2 . . . . 2 6
diff -up src/sage/coding/linear_code.py.orig src/sage/coding/linear_code.py
--- src/sage/coding/linear_code.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/coding/linear_code.py 2023-01-15 17:13:38.582179539 -0700
@@ -466,7 +466,10 @@ class AbstractLinearCode(AbstractLinearC
--- src/sage/coding/linear_code.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/coding/linear_code.py 2023-03-13 09:42:01.112404670 -0600
@@ -465,7 +465,10 @@ class AbstractLinearCode(AbstractLinearC
0
sage: C = codes.HammingCode(GF(4, 'z'), 3)
sage: C.automorphism_group_gens()
@ -35,7 +35,7 @@ diff -up src/sage/coding/linear_code.py.orig src/sage/coding/linear_code.py
Defn: z |--> z + 1),
((z + 1, 1, 1, z, z + 1, z, z, z + 1, z + 1, z + 1, 1, z + 1, z, z, 1, z + 1, 1, z, z + 1, z + 1, z); (1,18,6,19,2,9,17,10,13,14,21,11,4,5,12)(3,20,7,16,8), Ring endomorphism of Finite Field in z of size 2^2
Defn: z |--> z),
@@ -474,19 +477,20 @@ class AbstractLinearCode(AbstractLinearC
@@ -473,19 +476,20 @@ class AbstractLinearCode(AbstractLinearC
Defn: z |--> z)],
362880)
sage: C.automorphism_group_gens(equivalence="linear")
@ -61,7 +61,7 @@ diff -up src/sage/coding/linear_code.py.orig src/sage/coding/linear_code.py
Defn: z |--> z),
((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); (2,13)(3,14)(4,20)(5,11)(8,18)(9,19)(10,15)(16,21), Ring endomorphism of Finite Field in z of size 2^2
Defn: z |--> z)],
@@ -692,10 +696,10 @@ class AbstractLinearCode(AbstractLinearC
@@ -691,10 +695,10 @@ class AbstractLinearCode(AbstractLinearC
sage: C_iso == aut_group_can_label.get_canonical_form()
True
sage: aut_group_can_label.get_autom_gens()
@ -76,9 +76,9 @@ diff -up src/sage/coding/linear_code.py.orig src/sage/coding/linear_code.py
Defn: z |--> z)]
"""
diff -up src/sage/combinat/root_system/hecke_algebra_representation.py.orig src/sage/combinat/root_system/hecke_algebra_representation.py
--- src/sage/combinat/root_system/hecke_algebra_representation.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/combinat/root_system/hecke_algebra_representation.py 2023-01-15 17:13:38.583179521 -0700
@@ -355,7 +355,7 @@ class HeckeAlgebraRepresentation(WithEqu
--- src/sage/combinat/root_system/hecke_algebra_representation.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/combinat/root_system/hecke_algebra_representation.py 2023-03-13 09:42:01.112404670 -0600
@@ -357,7 +357,7 @@ class HeckeAlgebraRepresentation(WithEqu
sage: q1, q2 = K.gens()
sage: KW = W.algebra(K)
sage: x = KW.an_element(); x
@ -88,8 +88,8 @@ diff -up src/sage/combinat/root_system/hecke_algebra_representation.py.orig src/
sage: T = KW.demazure_lusztig_operators(q1,q2)
sage: T12 = T.Tw( (1,2) )
diff -up src/sage/combinat/symmetric_group_algebra.py.orig src/sage/combinat/symmetric_group_algebra.py
--- src/sage/combinat/symmetric_group_algebra.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/combinat/symmetric_group_algebra.py 2023-01-15 17:13:38.583179521 -0700
--- src/sage/combinat/symmetric_group_algebra.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/combinat/symmetric_group_algebra.py 2023-03-13 09:42:01.113404652 -0600
@@ -101,7 +101,7 @@ def SymmetricGroupAlgebra(R, W, category
sage: SGA.group()
Weyl Group of type ['A', 3] (as a matrix group acting on the ambient space)
@ -99,9 +99,21 @@ diff -up src/sage/combinat/symmetric_group_algebra.py.orig src/sage/combinat/sym
The preferred way to construct the symmetric group algebra is to
go through the usual ``algebra`` method::
diff -up src/sage/env.py.orig src/sage/env.py
--- src/sage/env.py.orig 2023-03-13 09:26:16.468693261 -0600
+++ src/sage/env.py 2023-03-13 14:09:36.725081542 -0600
@@ -197,7 +197,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_DIRS = var("GAP_ROOT_DIR", ["/usr/share/gap", "/usr/lib64/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/groups/abelian_gps/abelian_group_gap.py.orig src/sage/groups/abelian_gps/abelian_group_gap.py
--- src/sage/groups/abelian_gps/abelian_group_gap.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/abelian_gps/abelian_group_gap.py 2023-01-15 17:13:38.583179521 -0700
--- src/sage/groups/abelian_gps/abelian_group_gap.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/abelian_gps/abelian_group_gap.py 2023-03-13 09:42:01.113404652 -0600
@@ -338,7 +338,7 @@ class AbelianGroup_gap(UniqueRepresentat
if isinstance(x, AbelianGroupElement_gap):
try:
@ -121,8 +133,8 @@ diff -up src/sage/groups/abelian_gps/abelian_group_gap.py.orig src/sage/groups/a
return Hom(phi)
diff -up src/sage/groups/finitely_presented.py.orig src/sage/groups/finitely_presented.py
--- src/sage/groups/finitely_presented.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/finitely_presented.py 2023-01-15 17:13:38.584179501 -0700
--- src/sage/groups/finitely_presented.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/finitely_presented.py 2023-03-13 09:42:01.113404652 -0600
@@ -596,9 +596,9 @@ class RewritingSystem():
sage: k = G.rewriting_system()
sage: k.gap()
@ -137,8 +149,8 @@ diff -up src/sage/groups/finitely_presented.py.orig src/sage/groups/finitely_pre
return self._gap
diff -up src/sage/groups/fqf_orthogonal.py.orig src/sage/groups/fqf_orthogonal.py
--- src/sage/groups/fqf_orthogonal.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/fqf_orthogonal.py 2023-01-15 17:13:38.584179501 -0700
--- src/sage/groups/fqf_orthogonal.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/fqf_orthogonal.py 2023-03-13 09:42:01.114404634 -0600
@@ -143,7 +143,7 @@ class FqfOrthogonalGroup(AbelianGroupAut
[2/3 0 0]
[ 0 2/3 0]
@ -149,8 +161,8 @@ diff -up src/sage/groups/fqf_orthogonal.py.orig src/sage/groups/fqf_orthogonal.p
sage: T = TorsionQuadraticForm(q)
sage: T.orthogonal_group().order()
diff -up src/sage/groups/libgap_wrapper.pyx.orig src/sage/groups/libgap_wrapper.pyx
--- src/sage/groups/libgap_wrapper.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/libgap_wrapper.pyx 2023-01-15 17:13:38.584179501 -0700
--- src/sage/groups/libgap_wrapper.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/libgap_wrapper.pyx 2023-03-13 09:42:01.114404634 -0600
@@ -25,7 +25,7 @@ Note how we call the constructor of both
its output via LibGAP::
@ -179,8 +191,8 @@ diff -up src/sage/groups/libgap_wrapper.pyx.orig src/sage/groups/libgap_wrapper.
(f1,)
"""
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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx 2023-01-15 17:13:38.584179501 -0700
--- src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx 2023-03-13 09:42:01.114404634 -0600
@@ -427,7 +427,7 @@ cdef class LabelledBranching:
sage: from sage.groups.perm_gps.partn_ref2.refinement_generic import LabelledBranching
sage: L = LabelledBranching(3)
@ -191,9 +203,9 @@ diff -up src/sage/groups/perm_gps/partn_ref2/refinement_generic.pyx.orig src/sag
sage: L.small_generating_set()
[(1,2,3)]
diff -up src/sage/groups/perm_gps/permgroup.py.orig src/sage/groups/perm_gps/permgroup.py
--- src/sage/groups/perm_gps/permgroup.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/groups/perm_gps/permgroup.py 2023-01-15 17:13:38.585179483 -0700
@@ -927,7 +927,7 @@ class PermutationGroup_generic(FiniteGro
--- src/sage/groups/perm_gps/permgroup.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/groups/perm_gps/permgroup.py 2023-03-13 09:42:01.115404615 -0600
@@ -926,7 +926,7 @@ class PermutationGroup_generic(FiniteGro
sage: f = PG._coerce_map_from_(MG)
sage: mg = MG.an_element()
sage: p = f(mg); p
@ -202,7 +214,7 @@ diff -up src/sage/groups/perm_gps/permgroup.py.orig src/sage/groups/perm_gps/per
sage: PG(p._gap_()) == p
True
@@ -973,12 +973,12 @@ class PermutationGroup_generic(FiniteGro
@@ -972,12 +972,12 @@ class PermutationGroup_generic(FiniteGro
sage: P = G.as_permutation_group(algorithm='smaller', seed=5)
sage: P1 = G.as_permutation_group()
sage: P == P1
@ -218,7 +230,7 @@ diff -up src/sage/groups/perm_gps/permgroup.py.orig src/sage/groups/perm_gps/per
Another check for :trac:`5583`::
@@ -4375,7 +4375,7 @@ class PermutationGroup_generic(FiniteGro
@@ -4372,7 +4372,7 @@ class PermutationGroup_generic(FiniteGro
sage: G = PermutationGroup([[(1,2,3,4,5)],[(1,2)]]) #S_5 on [1..5]
sage: G.is_transitive([1,4,5])
@ -227,7 +239,7 @@ diff -up src/sage/groups/perm_gps/permgroup.py.orig src/sage/groups/perm_gps/per
sage: G.is_transitive([2..6])
False
sage: G.is_transitive(G.non_fixed_points())
@@ -4440,7 +4440,7 @@ class PermutationGroup_generic(FiniteGro
@@ -4437,7 +4437,7 @@ class PermutationGroup_generic(FiniteGro
sage: G.is_primitive([1..4])
False
sage: G.is_primitive([1,2,3])
@ -237,8 +249,8 @@ diff -up src/sage/groups/perm_gps/permgroup.py.orig src/sage/groups/perm_gps/per
sage: G.is_primitive(G.non_fixed_points())
True
diff -up src/sage/interfaces/gap.py.orig src/sage/interfaces/gap.py
--- src/sage/interfaces/gap.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/interfaces/gap.py 2023-01-15 17:13:38.586179464 -0700
--- src/sage/interfaces/gap.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/gap.py 2023-03-13 09:42:01.115404615 -0600
@@ -1512,6 +1512,8 @@ def gap_reset_workspace(max_workspace_si
"""
# Create new workspace with filename WORKSPACE
@ -249,8 +261,8 @@ diff -up src/sage/interfaces/gap.py.orig src/sage/interfaces/gap.py
from sage.tests.gap_packages import all_installed_packages
for pkg in all_installed_packages(gap=g):
diff -up src/sage/libs/gap/element.pxd.orig src/sage/libs/gap/element.pxd
--- src/sage/libs/gap/element.pxd.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gap/element.pxd 2023-01-15 17:13:38.586179464 -0700
--- src/sage/libs/gap/element.pxd.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/element.pxd 2023-03-13 09:42:01.116404597 -0600
@@ -29,9 +29,9 @@ cdef GapElement_Boolean make_GapElement_
cdef GapElement_Function make_GapElement_Function(parent, Obj obj)
cdef GapElement_Permutation make_GapElement_Permutation(parent, Obj obj)
@ -265,8 +277,8 @@ diff -up src/sage/libs/gap/element.pxd.orig src/sage/libs/gap/element.pxd
cdef class GapElement(RingElement):
diff -up src/sage/libs/gap/element.pyx.orig src/sage/libs/gap/element.pyx
--- src/sage/libs/gap/element.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gap/element.pyx 2023-01-15 17:13:38.586179464 -0700
--- src/sage/libs/gap/element.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/element.pyx 2023-03-13 09:42:01.116404597 -0600
@@ -120,7 +120,7 @@ cdef Obj make_gap_matrix(sage_list, gap_
return l.value
@ -356,15 +368,6 @@ diff -up src/sage/libs/gap/element.pyx.orig src/sage/libs/gap/element.pyx
cdef Obj make_gap_record(sage_dict) except NULL:
"""
@@ -264,7 +268,7 @@ cdef Obj make_gap_string(sage_string) ex
try:
GAP_Enter()
b = str_to_bytes(sage_string)
- C_NEW_STRING(result, len(b), b)
+ result = MakeStringWithLen(b, len(b))
return result
finally:
GAP_Leave()
@@ -760,7 +764,7 @@ cdef class GapElement(RingElement):
if self.value == NULL:
return 'NULL'
@ -465,8 +468,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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gap/gap_includes.pxd 2023-01-15 17:13:38.587179445 -0700
--- src/sage/libs/gap/gap_includes.pxd.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/gap_includes.pxd 2023-03-13 09:49:35.192090058 -0600
@@ -13,8 +13,8 @@ from libc.stdint cimport uintptr_t, uint
cdef extern from "gap/system.h" nogil:
@ -591,14 +594,13 @@ diff -up src/sage/libs/gap/gap_includes.pxd.orig src/sage/libs/gap/gap_includes.
- bint IS_STRING(Obj obj)
- bint IsStringConv(Obj obj)
- Obj NEW_STRING(Int)
- void C_NEW_STRING(Obj new_gap_string, int length, char* c_string)
+ Int IS_STRING(Obj obj)
+ Int IsStringConv(Obj obj)
+ Obj NEW_STRING(Int len)
+ Obj MakeStringWithLen(const char *buf, size_t len)
Obj MakeStringWithLen(const char* buf, size_t len)
diff -up src/sage/libs/gap/libgap.pyx.orig src/sage/libs/gap/libgap.pyx
--- src/sage/libs/gap/libgap.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gap/libgap.pyx 2023-01-15 17:13:38.587179445 -0700
--- src/sage/libs/gap/libgap.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/libgap.pyx 2023-03-13 09:42:01.117404579 -0600
@@ -695,7 +695,7 @@ class Gap(Parent):
sage: libgap.List
<Gap function "List">
@ -608,10 +610,58 @@ diff -up src/sage/libs/gap/libgap.pyx.orig src/sage/libs/gap/libgap.pyx
"""
if name in dir(self.__class__):
return getattr(self.__class__, name)
diff -up src/sage/libs/gap/saved_workspace.py.orig src/sage/libs/gap/saved_workspace.py
--- src/sage/libs/gap/saved_workspace.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/saved_workspace.py 2023-03-13 12:49:01.821288928 -0600
@@ -8,7 +8,7 @@ workspaces.
import os
import glob
-from sage.env import GAP_ROOT_DIR
+from sage.env import GAP_ROOT_DIRS
from sage.interfaces.gap_workspace import gap_workspace_file
@@ -31,7 +31,9 @@ def timestamp():
"""
libgap_dir = os.path.dirname(__file__)
libgap_files = glob.glob(os.path.join(libgap_dir, '*'))
- gap_packages = glob.glob(os.path.join(GAP_ROOT_DIR, 'pkg', '*'))
+ gap_packages = []
+ for path in GAP_ROOT_DIRS:
+ gap_packages += glob.glob(os.path.join(path, 'pkg', '*'))
files = libgap_files + gap_packages
if len(files) == 0:
print('Unable to find LibGAP files.')
diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx
--- src/sage/libs/gap/util.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gap/util.pyx 2023-01-15 17:13:38.587179445 -0700
@@ -362,15 +362,9 @@ cdef Obj gap_eval(str gap_string) except
--- src/sage/libs/gap/util.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/gap/util.pyx 2023-03-13 14:13:48.497467652 -0600
@@ -173,22 +173,9 @@ def gap_root():
sage: from sage.libs.gap.util import gap_root
sage: gap_root() # random output
- '/home/vbraun/opt/sage-5.3.rc0/local/gap/latest'
+ '/usr/share/gap;/usr/lib64/gap']
"""
- if os.path.exists(sage.env.GAP_ROOT_DIR):
- return sage.env.GAP_ROOT_DIR
-
- # Attempt to figure out the appropriate GAP_ROOT by reading the
- # local/bin/gap shell script; this is an ugly hack that exists for
- # historical reasons; the best approach to setting where Sage looks for
- # the appropriate GAP_ROOT is to set the GAP_ROOT_DIR variable
- SAGE_LOCAL = sage.env.SAGE_LOCAL
- with open(os.path.join(SAGE_LOCAL, 'bin', 'gap')) as f:
- gap_sh = f.read().splitlines()
- gapdir = next(x for x in gap_sh if x.strip().startswith('GAP_ROOT'))
- gapdir = gapdir.split('"')[1]
- gapdir = gapdir.replace('$SAGE_LOCAL', SAGE_LOCAL)
- return gapdir
+ return ';'.join(sage.env.GAP_ROOT_DIRS)
# To ensure that we call initialize_libgap only once.
@@ -362,15 +349,9 @@ cdef Obj gap_eval(str gap_string) except
GAPError: Error, Variable: 'Complex' must have a value
Syntax error: ; expected in stream:1
Complex Field with 53 bits of precision;;
@ -628,7 +678,7 @@ diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx
Error, Variable: 'precision' must have a value
Test that on a subsequent attempt we get the same message (no garbage was
@@ -388,7 +382,7 @@ cdef Obj gap_eval(str gap_string) except
@@ -388,7 +369,7 @@ cdef Obj gap_eval(str gap_string) except
"""
initialize()
cdef Obj result
@ -638,8 +688,8 @@ diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx
# Careful: We need to keep a reference to the bytes object here
# so that Cython doesn't deallocate it before GAP is done with
diff -up src/sage/tests/gap_packages.py.orig src/sage/tests/gap_packages.py
--- src/sage/tests/gap_packages.py.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/tests/gap_packages.py 2023-01-15 17:13:38.587179445 -0700
--- src/sage/tests/gap_packages.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/tests/gap_packages.py 2023-03-13 09:42:01.117404579 -0600
@@ -103,7 +103,7 @@ def all_installed_packages(ignore_dot_ga
sage: from sage.tests.gap_packages import all_installed_packages

View file

@ -0,0 +1,11 @@
--- src/sage/symbolic/ginac/archive.cpp.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/symbolic/ginac/archive.cpp 2023-03-13 11:50:47.836951365 -0600
@@ -581,7 +581,7 @@ void archive::clear()
/** Delete cached unarchived expressions in all archive_nodes (mainly for debugging). */
void archive::forget()
{
- for_each(nodes.begin(), nodes.end(), std::mem_fun_ref(&archive_node::forget));
+ for (archive_node& node: nodes) node.forget();
}
/** Delete cached unarchived expressions from node (for debugging). */

View file

@ -1,426 +0,0 @@
diff -up src/sage/cpython/cython_metaclass.h.orig src/sage/cpython/cython_metaclass.h
--- src/sage/cpython/cython_metaclass.h.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/cpython/cython_metaclass.h 2023-01-15 19:52:42.818659170 -0700
@@ -66,7 +66,7 @@ static CYTHON_INLINE int Sage_PyType_Rea
}
/* Now, set t.__class__ to metaclass */
- Py_TYPE(t) = metaclass;
+ Py_SET_TYPE(t, metaclass);
PyType_Modified(t);
}
else
diff -up src/sage/cpython/dict_del_by_value.pyx.orig src/sage/cpython/dict_del_by_value.pyx
--- src/sage/cpython/dict_del_by_value.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/cpython/dict_del_by_value.pyx 2023-01-15 19:52:42.819659153 -0700
@@ -25,7 +25,7 @@ from weakref import KeyedRef
from cpython.list cimport PyList_New
from cpython cimport Py_XINCREF, Py_XDECREF
-from libc.stdint cimport int8_t, int16_t, int32_t, int64_t
+from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, uint8_t, uint32_t
cdef extern from "Python.h":
ctypedef struct PyDictKeysObject
@@ -45,8 +45,6 @@ cdef extern from "Python.h":
#(this file is not exported from CPython, so we need to be
#careful the definitions are in step with what happens there.
-ctypedef void* dict_lookup_func # Precise definition not needed
-
ctypedef union IndexBlock:
int8_t as_1[8]
int16_t as_2[4]
@@ -55,8 +53,10 @@ ctypedef union IndexBlock:
ctypedef struct MyPyDictKeysObject:
Py_ssize_t dk_refcnt
- Py_ssize_t dk_size
- dict_lookup_func dk_lookup
+ uint8_t dk_log2_size
+ uint8_t dk_log2_index_bytes
+ uint8_t dk_kind
+ uint32_t dk_version
Py_ssize_t dk_usable
Py_ssize_t dk_nentries
IndexBlock dk_indices
@@ -66,46 +66,65 @@ ctypedef struct PyDictKeyEntry:
PyObject * me_key
PyObject * me_value
+ctypedef struct PyDictUnicodeEntry:
+ PyObject * me_key
+ PyObject * me_value
+
cdef Py_ssize_t DKIX_EMPTY = -1
cdef Py_ssize_t DKIX_DUMMY = -2
cdef Py_ssize_t DKIX_ERROR = -3
+cdef Py_ssize_t DKIX_KEY_CHANGED = -4
+
+ctypedef enum DictKeysKind:
+ DICT_KEYS_GENERAL = 0,
+ DICT_KEYS_UNICODE = 1,
+ DICT_KEYS_SPLIT = 2
#####
#These routines are copied from CPython's Object/dictobject.c
#in order to access PyDictKeysObject fields
+cdef inline Py_ssize_t DK_SIZE(MyPyDictKeysObject *keys):
+ return 1L << keys.dk_log2_size
+
cdef inline int DK_IXSIZE(MyPyDictKeysObject *keys):
- cdef Py_ssize_t s = keys.dk_size
- if s <= 0xff:
+ cdef uint8_t s = keys.dk_log2_size
+ if s <= 7:
return 1
- elif s <= 0xffff:
+ if s <= 15:
return 2
- elif s <= 0xffffffff:
+ if sizeof(void *) <= 4 or s <= 31:
return 4
else:
return 8
cdef inline PyDictKeyEntry * DK_ENTRIES(MyPyDictKeysObject *keys):
- return <PyDictKeyEntry*> &(keys.dk_indices.as_1[keys.dk_size * DK_IXSIZE(keys)])
+ return <PyDictKeyEntry*> &(keys.dk_indices.as_1[1UL << keys.dk_log2_index_bytes])
+
+cdef inline PyDictUnicodeEntry * DK_UNICODE_ENTRIES(MyPyDictKeysObject *keys):
+ return <PyDictUnicodeEntry*> &(keys.dk_indices.as_1[1UL << keys.dk_log2_index_bytes])
+
+cdef inline bint DK_IS_UNICODE(MyPyDictKeysObject *keys):
+ return keys.dk_kind != DICT_KEYS_GENERAL
cdef inline Py_ssize_t dk_get_index(MyPyDictKeysObject *keys, Py_ssize_t i):
- cdef Py_ssize_t s = keys.dk_size
- if s <= 0xff:
+ cdef uint8_t s = keys.dk_log2_size
+ if s < 8:
return keys.dk_indices.as_1[i]
- elif s <= 0xffff:
+ elif s < 16:
return keys.dk_indices.as_2[i]
- elif s <= 0xffffffff:
+ elif sizeof(void *) <= 4 or s < 32:
return keys.dk_indices.as_4[i]
else:
return keys.dk_indices.as_8[i]
cdef inline void dk_set_index(MyPyDictKeysObject *keys, Py_ssize_t i, Py_ssize_t ix):
- cdef Py_ssize_t s = keys.dk_size
- if s <= 0xff:
+ cdef uint8_t s = keys.dk_log2_size
+ if s < 8:
keys.dk_indices.as_1[i] = ix
- elif s <= 0xffff:
+ elif s < 16:
keys.dk_indices.as_2[i] = ix
- elif s <= 0xffffffff:
+ elif sizeof(void *) <= 4 or s < 32:
keys.dk_indices.as_4[i] = ix
else:
keys.dk_indices.as_8[i] = ix
@@ -113,22 +132,7 @@ cdef inline void dk_set_index(MyPyDictKe
#End of replication of Object/dictobject.c
######
-cdef dict_lookup_func lookdict
-
-cdef dict_lookup_func DK_LOOKUP(PyDictObject *mp):
- return (<MyPyDictKeysObject *>(mp.ma_keys)).dk_lookup
-
-def init_lookdict():
- global lookdict
- # A dict which a non-string key uses the generic "lookdict"
- # as lookup function
- cdef object D = {}
- D[0] = 0
- lookdict = DK_LOOKUP(<PyDictObject *>D)
-
-init_lookdict()
-
-cdef int del_dictitem_by_exact_value(PyDictObject *mp, PyObject *value, Py_hash_t hash) except -1:
+cdef int del_dictitem_by_exact_value(PyDictObject *mp, PyObject *value, Py_hash_t hashval) except -1:
"""
This is used in callbacks for the weak values of :class:`WeakValueDictionary`.
@@ -179,47 +183,72 @@ cdef int del_dictitem_by_exact_value(PyD
"""
keys = <MyPyDictKeysObject *>(mp.ma_keys)
cdef size_t perturb
- cdef size_t mask = <size_t> keys.dk_size-1
- cdef PyDictKeyEntry *entries = DK_ENTRIES(keys)
+ cdef size_t mask = <size_t> DK_SIZE(keys)-1
+ cdef PyDictUnicodeEntry *uc_entries
+ cdef PyDictUnicodeEntry *uc_ep
+ cdef PyDictKeyEntry *entries
cdef PyDictKeyEntry *ep
-
+
if mp.ma_values is not NULL:
raise TypeError("del_dictitem_by_exact_value cannot be applied to a shared key dict")
- cdef size_t i = <size_t>hash & mask
+ cdef size_t i = <size_t>hashval & mask
ix = dk_get_index(keys, i)
if ix == DKIX_EMPTY:
# key not found
return 0
- ep = &(entries[ix])
- perturb = hash
- while (ep.me_value != value or ep.me_hash != hash):
- perturb = perturb >> 5 #this is the value of PERTURB_SHIFT
- i = mask & (i * 5 + perturb + 1)
- ix = dk_get_index(keys, i)
- if ix == DKIX_EMPTY:
- # key not found
- return 0
- ep = &(entries[ix])
+ if DK_IS_UNICODE(keys):
+ uc_entries = DK_UNICODE_ENTRIES(keys)
+ uc_ep = &(uc_entries[ix])
+ perturb = hashval
+ while (uc_ep.me_value != value or hash(<object>uc_ep.me_key) != hashval):
+ perturb = perturb >> 5 #this is the value of PERTURB_SHIFT
+ i = mask & (i * 5 + perturb + 1)
+ ix = dk_get_index(keys, i)
+ if ix == DKIX_EMPTY:
+ # key not found
+ return 0
+ uc_ep = &(uc_entries[ix])
- # We need the lookup function to be the generic lookdict, otherwise
- # deletions may not work correctly
- keys.dk_lookup = lookdict
+ T = PyList_New(2)
+ PyList_SetItem(T, 0, uc_ep.me_key)
+ PyList_SetItem(T, 1, uc_ep.me_value)
+ uc_ep.me_key = NULL
+ uc_ep.me_value = NULL
+ mp.ma_used -= 1
+ dk_set_index(keys, i, DKIX_DUMMY)
+ #We have transferred the to-be-deleted references to the list T
+ #we now delete the list so that the actual decref happens through a
+ #deallocation routine that uses the Python Trashcan macros to
+ #avoid stack overflow in deleting deep structures.
+ del T
+ else:
+ entries = DK_ENTRIES(keys)
+ ep = &(entries[ix])
+ perturb = hashval
+ while (ep.me_value != value or ep.me_hash != hashval):
+ perturb = perturb >> 5 #this is the value of PERTURB_SHIFT
+ i = mask & (i * 5 + perturb + 1)
+ ix = dk_get_index(keys, i)
+ if ix == DKIX_EMPTY:
+ # key not found
+ return 0
+ ep = &(entries[ix])
- T = PyList_New(2)
- PyList_SetItem(T, 0, ep.me_key)
- PyList_SetItem(T, 1, ep.me_value)
- ep.me_key = NULL
- ep.me_value = NULL
- mp.ma_used -= 1
- dk_set_index(keys, i, DKIX_DUMMY)
- #We have transferred the to-be-deleted references to the list T
- #we now delete the list so that the actual decref happens through a
- #deallocation routine that uses the Python Trashcan macros to
- #avoid stack overflow in deleting deep structures.
- del T
+ T = PyList_New(2)
+ PyList_SetItem(T, 0, ep.me_key)
+ PyList_SetItem(T, 1, ep.me_value)
+ ep.me_key = NULL
+ ep.me_value = NULL
+ mp.ma_used -= 1
+ dk_set_index(keys, i, DKIX_DUMMY)
+ #We have transferred the to-be-deleted references to the list T
+ #we now delete the list so that the actual decref happens through a
+ #deallocation routine that uses the Python Trashcan macros to
+ #avoid stack overflow in deleting deep structures.
+ del T
def test_del_dictitem_by_exact_value(D, value, h):
"""
diff -up src/sage/libs/gmp/pylong.pyx.orig src/sage/libs/gmp/pylong.pyx
--- src/sage/libs/gmp/pylong.pyx.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/gmp/pylong.pyx 2023-01-15 19:52:42.819659153 -0700
@@ -33,6 +33,7 @@ from .mpz cimport *
cdef extern from *:
Py_ssize_t* Py_SIZE_PTR "&Py_SIZE"(object)
+ void __Pyx_SET_SIZE(object, Py_ssize_t)
int hash_bits """
#ifdef _PyHASH_BITS
_PyHASH_BITS /* Python 3 */
@@ -57,10 +58,8 @@ cdef mpz_get_pylong_large(mpz_srcptr z):
mpz_export(L.ob_digit, NULL,
-1, sizeof(digit), 0, PyLong_nails, z)
if mpz_sgn(z) < 0:
- # Set correct size (use a pointer to hack around Cython's
- # non-support for lvalues).
- sizeptr = Py_SIZE_PTR(L)
- sizeptr[0] = -pylong_size
+ # Set correct size
+ __Pyx_SET_SIZE(L, -pylong_size)
return L
diff -up src/sage/misc/decorators.py.orig src/sage/misc/decorators.py
--- src/sage/misc/decorators.py.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/misc/decorators.py 2023-01-15 19:52:42.819659153 -0700
@@ -31,8 +31,7 @@ from functools import (partial, update_w
from copy import copy
from sage.misc.sageinspect import (sage_getsource, sage_getsourcelines,
- sage_getargspec)
-from inspect import ArgSpec
+ sage_getargspec, ArgSpec)
def sage_wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):
diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py
--- src/sage/misc/sageinspect.py.orig 2023-01-15 17:07:04.838843913 -0700
+++ src/sage/misc/sageinspect.py 2023-01-15 19:53:47.194510597 -0700
@@ -119,12 +119,15 @@ import functools
import os
import tokenize
import re
+from collections import namedtuple
try:
import importlib.machinery as import_machinery
except ImportError:
pass
+ArgSpec = namedtuple('ArgSpec', 'args varargs keywords defaults')
+
def is_function_or_cython_function(obj):
"""
@@ -359,7 +362,7 @@ def _extract_embedded_signature(docstrin
docstring = L[1] if len(L) > 1 else '' # Remove first line, keep the rest
def_string = "def " + name + signature + ": pass"
try:
- return docstring, inspect.ArgSpec(*_sage_getargspec_cython(def_string))
+ return docstring, ArgSpec(*_sage_getargspec_cython(def_string))
except SyntaxError:
docstring = os.linesep.join(L)
return docstring, None
@@ -1100,7 +1103,7 @@ def _sage_getargspec_from_ast(source):
OUTPUT:
- - an instance of :obj:`inspect.ArgSpec`, i.e., a named tuple
+ - an instance of :obj:`ArgSpec`, i.e., a named tuple
EXAMPLES::
@@ -1132,8 +1135,7 @@ def _sage_getargspec_from_ast(source):
vararg = getattr(ast_args.vararg, 'arg', None)
kwarg = getattr(ast_args.kwarg, 'arg', None)
- return inspect.ArgSpec(args, vararg, kwarg,
- tuple(defaults) if defaults else None)
+ return ArgSpec(args, vararg, kwarg, tuple(defaults) if defaults else None)
def _sage_getargspec_cython(source):
@@ -1149,7 +1151,7 @@ def _sage_getargspec_cython(source):
OUTPUT:
- - an instance of :obj:`inspect.ArgSpec`, i.e., a named tuple
+ - an instance of :obj:`ArgSpec`, i.e., a named tuple
EXAMPLES::
@@ -1659,11 +1661,11 @@ def sage_getargspec(obj):
return sage_getargspec(obj.__call__)
if isinstance(obj, (lazy_attribute, AbstractMethod)):
source = sage_getsource(obj)
- return inspect.ArgSpec(*_sage_getargspec_cython(source))
+ return ArgSpec(*_sage_getargspec_cython(source))
if not callable(obj):
raise TypeError("obj is not a code object")
try:
- return inspect.ArgSpec(*obj._sage_argspec_())
+ return ArgSpec(*obj._sage_argspec_())
except (AttributeError, TypeError):
pass
# If we are lucky, the function signature is embedded in the docstring.
@@ -1679,7 +1681,7 @@ def sage_getargspec(obj):
# Note that this may give a wrong result for the constants!
try:
args, varargs, varkw = inspect.getargs(obj.__code__)
- return inspect.ArgSpec(args, varargs, varkw, obj.__defaults__)
+ return ArgSpec(args, varargs, varkw, obj.__defaults__)
except (TypeError, AttributeError):
pass
if isclassinstance(obj):
@@ -1714,7 +1716,7 @@ def sage_getargspec(obj):
except TypeError: # happens for Python builtins
source = ''
if source:
- return inspect.ArgSpec(*_sage_getargspec_cython(source))
+ return ArgSpec(*_sage_getargspec_cython(source))
else:
func_obj = obj
@@ -1727,7 +1729,7 @@ def sage_getargspec(obj):
except TypeError: # arg is not a code object
# The above "hopefully" was wishful thinking:
try:
- return inspect.ArgSpec(*_sage_getargspec_cython(sage_getsource(obj)))
+ return ArgSpec(*_sage_getargspec_cython(sage_getsource(obj)))
except TypeError: # This happens for Python builtins
# The best we can do is to return a generic argspec
args = []
@@ -1737,7 +1739,7 @@ def sage_getargspec(obj):
defaults = func_obj.__defaults__
except AttributeError:
defaults = None
- return inspect.ArgSpec(args, varargs, varkw, defaults)
+ return ArgSpec(args, varargs, varkw, defaults)
def formatannotation(annotation, base_module=None):
@@ -1808,19 +1810,7 @@ def sage_formatargspec(args, varargs=Non
:func:`sage_getargspec`. Since :func:`sage_getargspec` works for
Cython functions while Python's inspect module does not, it makes
sense to keep this function for formatting instances of
- ``inspect.ArgSpec``.
-
- EXAMPLES::
-
- sage: from sage.misc.sageinspect import sage_formatargspec
- sage: from inspect import formatargspec # deprecated in Python 3
- sage: args = ['a', 'b', 'c']
- sage: defaults = [3]
- sage: sage_formatargspec(args, defaults=defaults)
- '(a, b, c=3)'
- sage: import warnings; warnings.simplefilter('ignore') # ignore DeprecationWarning
- sage: formatargspec(args, defaults=defaults) == sage_formatargspec(args, defaults=defaults)
- True
+ ``ArgSpec``.
"""
def formatargandannotation(arg):
result = formatarg(arg)
diff -up src/sage/symbolic/ginac/numeric.cpp.orig src/sage/symbolic/ginac/numeric.cpp
--- src/sage/symbolic/ginac/numeric.cpp.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/symbolic/ginac/numeric.cpp 2023-01-15 19:52:42.820659135 -0700
@@ -52,7 +52,6 @@
#define register
#define PY_SSIZE_T_CLEAN
#include <Python.h>
-#include <longintrepr.h>
#include "flint/fmpz.h"
#include "flint/fmpz_factor.h"

View file

@ -1,6 +1,6 @@
diff -up src/sage/cpython/debugimpl.c.orig src/sage/cpython/debugimpl.c
--- src/sage/cpython/debugimpl.c.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/cpython/debugimpl.c 2023-01-15 17:07:04.836843956 -0700
--- src/sage/cpython/debugimpl.c.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/cpython/debugimpl.c 2023-03-13 09:38:55.609800668 -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);
@ -18,8 +18,8 @@ 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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/cpython/debug.pyx 2023-01-15 17:07:04.836843956 -0700
--- src/sage/cpython/debug.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/cpython/debug.pyx 2023-03-13 09:38:55.610800649 -0600
@@ -231,6 +231,7 @@ def type_debug(cls):
tp_basicsize: 16
tp_itemsize: 0
@ -37,8 +37,8 @@ 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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/geometry/triangulation/point_configuration.py 2023-01-15 17:07:04.837843935 -0700
--- src/sage/geometry/triangulation/point_configuration.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/geometry/triangulation/point_configuration.py 2023-03-13 09:38:55.610800649 -0600
@@ -617,11 +617,11 @@ class PointConfiguration(UniqueRepresent
['{{0,1,2,4},{1,2,3,4}}']
"""
@ -54,8 +54,8 @@ 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 2023-01-15 17:07:04.837843935 -0700
+++ src/sage/interfaces/frobby.py 2023-01-15 17:07:49.392886328 -0700
--- src/sage/interfaces/frobby.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/frobby.py 2023-03-13 09:38:55.610800649 -0600
@@ -78,7 +78,7 @@ class Frobby:
print("Frobby command: ", repr(command))
print("Frobby input:\n", input)
@ -66,8 +66,8 @@ 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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/interfaces/gfan.py 2023-01-15 17:07:04.837843935 -0700
--- src/sage/interfaces/gfan.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/gfan.py 2023-03-13 09:38:55.611800631 -0600
@@ -109,7 +109,7 @@ class Gfan():
print("gfan input:\n%s" % input)
@ -78,8 +78,8 @@ 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 2023-01-15 17:07:04.837843935 -0700
+++ src/sage/interfaces/latte.py 2023-01-15 17:09:27.127907740 -0700
--- src/sage/interfaces/latte.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/latte.py 2023-03-13 09:38:55.611800631 -0600
@@ -161,6 +161,7 @@ def count(arg, ehrhart_polynomial=False,
latte_proc = Popen(args,
stdin=PIPE, stdout=PIPE,
@ -97,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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/interfaces/sagespawn.pyx 2023-01-15 17:07:04.838843913 -0700
--- src/sage/interfaces/sagespawn.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/sagespawn.pyx 2023-03-13 09:38:55.611800631 -0600
@@ -1,6 +1,6 @@
"""
Sage wrapper around pexpect's ``spawn`` class and
@ -147,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 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/libs/coxeter3/coxeter.pyx 2023-01-15 17:07:04.838843913 -0700
--- src/sage/libs/coxeter3/coxeter.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/libs/coxeter3/coxeter.pyx 2023-03-13 09:38:55.611800631 -0600
@@ -37,7 +37,7 @@ cdef class String:
EXAMPLES::
@ -282,8 +282,8 @@ 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 2023-01-15 16:40:43.609846146 -0700
+++ src/sage/misc/sageinspect.py 2023-01-15 17:07:04.838843913 -0700
--- src/sage/misc/sageinspect.py.orig 2023-03-13 08:43:39.551431643 -0600
+++ src/sage/misc/sageinspect.py 2023-03-13 09:38:55.612800613 -0600
@@ -516,12 +516,9 @@ class SageArgSpecVisitor(ast.NodeVisitor
"""
return node.id
@ -310,8 +310,8 @@ diff -up src/sage/misc/sageinspect.py.orig src/sage/misc/sageinspect.py
[True, False, None]
sage: [type(vis(n)) for n in ['True', 'False', 'None']]
diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py
--- src/sage/plot/plot3d/plot3d.py.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/plot/plot3d/plot3d.py 2023-01-15 17:07:04.839843892 -0700
--- src/sage/plot/plot3d/plot3d.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/plot/plot3d/plot3d.py 2023-03-13 09:38:55.612800613 -0600
@@ -219,6 +219,7 @@ from .shapes import arrow3d
from .base import Graphics3dGroup
from sage.plot.colors import rainbow
@ -330,21 +330,21 @@ 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/polynomial/pbori/pbori.pyx.orig src/sage/rings/polynomial/pbori/pbori.pyx
--- src/sage/rings/polynomial/pbori/pbori.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/rings/polynomial/pbori/pbori.pyx 2023-01-15 17:09:50.193474022 -0700
@@ -4729,8 +4729,7 @@ cdef class PolynomialConstruct:
--- src/sage/rings/polynomial/pbori/pbori.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/rings/polynomial/pbori/pbori.pyx 2023-03-13 11:29:13.157592229 -0600
@@ -4722,8 +4722,7 @@ cdef class PolynomialConstruct:
# So, it is just a conversion. [Simon King]
return (<BooleanPolynomialRing>ring)._element_constructor_(x)
- raise TypeError("Cannot generate Boolean polynomial from %s , %s" %
- raise TypeError("cannot generate Boolean polynomial from %s , %s" %
- (type(x), type(ring)))
+ raise TypeError(f"Cannot generate Boolean polynomial from {type(x)}, {type(ring)}")
+ raise TypeError(f"cannot generate Boolean polynomial from {type(x)}, {type(ring)}")
cdef class MonomialConstruct:
diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.pyx
--- src/sage/structure/sage_object.pyx.orig 2022-09-19 16:38:19.000000000 -0600
+++ src/sage/structure/sage_object.pyx 2023-01-15 17:09:50.195473985 -0700
--- src/sage/structure/sage_object.pyx.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/structure/sage_object.pyx 2023-03-13 09:38:55.613800594 -0600
@@ -694,7 +694,7 @@ cdef class SageObject:
try:
s = self._interface_init_(I)

View file

@ -1,6 +1,6 @@
diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py
--- src/sage/interfaces/qepcad.py.orig 2022-09-19 16:38:18.000000000 -0600
+++ src/sage/interfaces/qepcad.py 2023-01-15 17:22:00.958717226 -0700
--- src/sage/interfaces/qepcad.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/qepcad.py 2023-03-13 09:52:44.349623749 -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 yes\n'
@@ -605,7 +605,6 @@ AUTHORS:
# http://www.gnu.org/licenses/
#*****************************************************************************
@@ -604,7 +604,6 @@ AUTHORS:
# https://www.gnu.org/licenses/
# ****************************************************************************
import os
-from sage.env import SAGE_LOCAL
import pexpect
import re
import sys
@@ -620,6 +619,8 @@ from .expect import Expect, ExpectFuncti
@@ -619,6 +618,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.
@@ -651,17 +652,17 @@ def _qepcad_cmd(memcells=None):
@@ -650,17 +651,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
@@ -686,7 +687,7 @@ def _update_command_info():
@@ -685,7 +686,7 @@ def _update_command_info():
cache = {}

View file

@ -1,9 +1,9 @@
diff -up src/sage_docbuild/ext/multidocs.py.orig src/sage_docbuild/ext/multidocs.py
--- src/sage_docbuild/ext/multidocs.py.orig 2022-05-15 16:11:11.000000000 -0600
+++ src/sage_docbuild/ext/multidocs.py 2022-06-01 10:51:11.630814539 -0600
--- src/sage_docbuild/ext/multidocs.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage_docbuild/ext/multidocs.py 2023-03-13 10:54:54.452252122 -0600
@@ -83,8 +83,11 @@ def merge_environment(app, env):
for ind in newalldoc:
# treat subdocument source as orphaned file and don't complain
# treat sub-document source as orphaned file and don't complain
md = env.metadata.get(ind, dict())
- md['orphan'] = 1
- env.metadata[ind] = md
@ -16,9 +16,9 @@ diff -up src/sage_docbuild/ext/multidocs.py.orig src/sage_docbuild/ext/multidocs
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 2022-05-15 16:11:11.000000000 -0600
+++ src/sage/interfaces/singular.py 2022-06-01 10:51:11.630814539 -0600
@@ -2327,11 +2327,11 @@ def generate_docstring_dictionary():
--- src/sage/interfaces/singular.py.orig 2023-02-11 06:25:15.000000000 -0700
+++ src/sage/interfaces/singular.py 2023-03-13 10:54:54.452252122 -0600
@@ -2379,11 +2379,11 @@ def generate_docstring_dictionary():
L, in_node, curr_node = [], False, None

View file

@ -23,12 +23,6 @@
# use workaround to match upstream sagemath patched cython
%bcond_with cython_hack
%ifarch %{ix86} x86_64
%bcond_without fes
%else
%bcond_with fes
%endif
# switch to run make -testall
%bcond_with check
%global SAGE_TIMEOUT 60
@ -40,7 +34,7 @@
%global elliptic_curves_pkg elliptic_curves-0.8.1
%global graphs_pkg graphs-20210214
%if %{with bundled_ipython}
%global ipython_ver 8.4.0
%global ipython_ver 8.6.0
%global ipython_pkg ipython-%{ipython_ver}
%global prompt_toolkit_ver 3.0.24
%global prompt_tookit_pkg prompt_toolkit-%{prompt_toolkit_ver}
@ -58,7 +52,7 @@
%endif
%global polytopes_db_pkg polytopes_db-20170220
%global sagetex_pkg sagetex-3.6.1
%global Sphinx_pkg Sphinx-4.4.0
%global Sphinx_pkg Sphinx-5.2.3
%global singular_pkg singular-4.3.1p1
%if %{with bundled_threejs}
%global threejs_ver r122
@ -66,11 +60,7 @@
%endif
# Spkg equivalents of required rpms; we pretend they are installed as spkgs.
%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.77 CoCoALib-0.99800 coxeter3-3.1 cryptominisat-5.8.0 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.11.1 libsirocco-2.1.0 lrslib-072 mcqd-1.0.0 meataxe-1.0.1 qepcad-B.1.74 saclib-2.2.8 tdlib-0.9.2
%ifarch %{ix86} x86_64
%global SAGE_REQUIRED_PKGS %{SAGE_REQUIRED_PKGS} fes-0.2
%endif
%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.77 CoCoALib-0.99800 coxeter3-3.1 cryptominisat-5.8.0 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.11.2 libsirocco-2.1.0 lrslib-072 mcqd-1.0.0 meataxe-1.0.1 qepcad-B.1.74 saclib-2.2.8 tdlib-0.9.2
%global SAGE_ROOT %{_libdir}/sagemath
%global SAGE_LOCAL %{SAGE_ROOT}/local
@ -83,8 +73,8 @@
Name: sagemath
Summary: A free open-source mathematics software system
Version: 9.7
Release: 2%{?dist}
Version: 9.8
Release: 1%{?dist}
# The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file.
# Note that many of the components listed in that file are not built in, but
# are used as external libraries, and therefore do not affect the License tag.
@ -100,7 +90,7 @@ Source3: org.sagemath.sage.metainfo.xml
# 32-bit ARM builders run out of memory trying to create the SRPM and also
# trying to unpack the SRPM before starting a build. The i386 builders
# sometimes fail as well, so exclude all 32-bit platforms.
ExclusiveArch: aarch64 x86_64
ExclusiveArch: aarch64 x86_64
# Fix stray escapes in python strings
Patch0: %{name}-escape.patch
@ -134,6 +124,7 @@ Patch7: %{name}-jmol.patch
# tell the user how to install the large Cremona database
# add a missing commit() that causes large database construction to fail
# https://github.com/sagemath/sage/pull/35050
Patch8: %{name}-cremona.patch
# adapt to python 3 and cython running in python 3 mode
@ -148,8 +139,8 @@ Patch11: %{name}-lcalc.patch
# Use system gap directories and modernize libgap interface
Patch12: %{name}-libgap.patch
# Build fes
Patch13: %{name}-fes-build.patch
# Catch polymorphic types by reference instead of by value
Patch13: %{name}-catch-value.patch
# Side effect of using distro packages
# https://bugzilla.redhat.com/show_bug.cgi?id=974769
@ -174,17 +165,22 @@ Patch19: %{name}-tdlib.patch
# Use local objects.inv for intersphinx since no network on koji builders
Patch20: %{name}-intersphinx.patch
# Adapt to changes in python 3.11
Patch21: %{name}-python3.11.patch
# Replace a deprecated call to std::bind2nd
Patch21: %{name}-bind2nd.patch
# Temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=2160197
# Remove this when that bug is fixed
Patch22: %{name}-giac.patch
# Replace a deprecated call to std::mem_fun_ref
Patch23: %{name}-mem-fun-ref.patch
BuildRequires: 4ti2
BuildRequires: 4ti2-devel
BuildRequires: appstream
BuildRequires: arb-devel
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bc
BuildRequires: bliss-devel
BuildRequires: boost-devel
@ -201,9 +197,6 @@ BuildRequires: csdp-devel
BuildRequires: desktop-file-utils
BuildRequires: dvipng
BuildRequires: ecl
%if %{with fes}
BuildRequires: fes-devel
%endif
BuildRequires: ffmpeg-free
BuildRequires: flexiblas-devel
BuildRequires: flint-devel
@ -287,12 +280,14 @@ BuildRequires: libfrobby-devel
BuildRequires: libgap
BuildRequires: libhomfly-devel
BuildRequires: libmpc-devel
BuildRequires: libtool
BuildRequires: lrcalc-devel
BuildRequires: lrslib-utils
BuildRequires: make
BuildRequires: mathjax
BuildRequires: maxima-runtime-ecl
BuildRequires: mcqd-devel
BuildRequires: meson
BuildRequires: mpfi-devel
BuildRequires: nauty
BuildRequires: ninja-build
@ -308,10 +303,12 @@ BuildRequires: pari-galpol
BuildRequires: pari-gp
BuildRequires: pari-nftables
BuildRequires: pari-seadata
BuildRequires: patchelf
BuildRequires: pdf2svg
BuildRequires: perl-generators
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: perl(File::Slurp)
BuildRequires: pkgconfig
BuildRequires: pkgconfig(bdw-gc)
BuildRequires: pkgconfig(cbc)
BuildRequires: pkgconfig(eclib)
@ -339,6 +336,7 @@ BuildRequires: pkgconfig(primecount)
BuildRequires: pkgconfig(primesieve)
BuildRequires: pkgconfig(readline)
BuildRequires: pkgconfig(Singular)
BuildRequires: pkgconfig(tbb)
BuildRequires: pkgconfig(tk)
BuildRequires: pkgconfig(zlib)
BuildRequires: planarity-devel
@ -366,6 +364,7 @@ BuildRequires: %{py3_dist beniget}
BuildRequires: %{py3_dist brial}
BuildRequires: %{py3_dist charset-normalizer}
BuildRequires: %{py3_dist colorlog}
BuildRequires: %{py3_dist contourpy}
BuildRequires: %{py3_dist cppy}
BuildRequires: %{py3_dist cvxopt}
BuildRequires: %{py3_dist cython}
@ -378,6 +377,7 @@ BuildRequires: %{py3_dist fpylll}
BuildRequires: %{py3_dist furo}
BuildRequires: %{py3_dist gast}
BuildRequires: %{py3_dist gmpy2}
BuildRequires: %{py3_dist hatch-fancy-pypi-readme}
BuildRequires: %{py3_dist hatchling}
%if %{with sphinx_hack}
BuildRequires: %{py3_dist html5lib}
@ -410,6 +410,7 @@ BuildRequires: %{py3_dist pari-jupyter}
%if %{with bundled_ipython}
BuildRequires: %{py3_dist path.py}
%endif
BuildRequires: %{py3_dist pathspec}
%if %{without bundled_pexpect}
BuildRequires: %{py3_dist pexpect}
%endif
@ -428,6 +429,9 @@ BuildRequires: %{py3_dist pure-eval}
BuildRequires: %{py3_dist py}
BuildRequires: %{py3_dist pycryptosat}
BuildRequires: %{py3_dist pyopenssl}
BuildRequires: %{py3_dist pyproject-metadata}
BuildRequires: %{py3_dist pytest}
BuildRequires: %{py3_dist pytest-xdist}
BuildRequires: %{py3_dist pytz}
BuildRequires: %{py3_dist pytzdata}
BuildRequires: %{py3_dist pytz-deprecation-shim}
@ -450,7 +454,6 @@ BuildRequires: %{py3_dist sphinx-basic-ng}
BuildRequires: %{py3_dist stack-data}
BuildRequires: %{py3_dist sympy}
BuildRequires: %{py3_dist tinycss2}
BuildRequires: %{py3_dist tomli}
BuildRequires: %{py3_dist tomlkit}
BuildRequires: %{py3_dist tox}
BuildRequires: %{py3_dist typing-extensions}
@ -460,7 +463,9 @@ BuildRequires: %{py3_dist widgetsnbextension}
BuildRequires: %{py3_dist zodb3}
BuildRequires: qepcad-B
BuildRequires: qhull
BuildRequires: qhull-devel
BuildRequires: R
BuildRequires: R-devel
BuildRequires: rubiks
BuildRequires: rw-devel
BuildRequires: saclib-devel
@ -484,7 +489,7 @@ BuildRequires: tex(xy.sty)
BuildRequires: web-assets-devel
BuildRequires: xorg-x11-fonts-Type1
BuildRequires: xorg-x11-server-Xvfb
BuildRequires: zn_poly-devel
BuildRequires: yarnpkg
Requires: hicolor-icon-theme
Requires: rubiks
@ -589,6 +594,7 @@ Requires: %{py3_dist beautifulsoup4}
Requires: %{py3_dist beniget}
Requires: %{py3_dist brial}
Requires: %{py3_dist charset-normalizer}
Requires: %{py3_dist contourpy}
Requires: %{py3_dist cppy}
Requires: %{py3_dist cypari2}
Requires: %{py3_dist cysignals}
@ -1007,11 +1013,7 @@ pushd build/pkgs/threejs
popd
%endif
%autopatch -p0 -M12
%if %{with fes}
%patch13
%endif
%autopatch -p0 -m14
%autopatch -p0
sed -i 's|@@SAGE_LOCAL@@|%{SAGE_LOCAL}|' src/sage/env.py
@ -1055,21 +1057,12 @@ chmod a-x src/sage/modules/fp_graded/{,steenrod/}*.py
# GAP does not have enough memory to load the entire workspace
sed -i 's/64m/256m/' src/sage/interfaces/gap.py
# Update the GAP root
sed -i '/GAP_ROOT_DIR/s,SAGE_SHARE,"%{_libdir}",' src/sage/env.py
# Fix detection of Fedora
sed -i 's/yum/rpm/' build/bin/sage-guess-package-system
# Allow use of gcc 13
sed -i 's/1\[3-9\].*)/1[4-9].*)/' configure
# Allow use of python 3.11
sed -i 's/3\.11\.0/3.12.0/g' configure
# Allow use of libfplll 5.4.4
sed -i 's/5\.4\.2/5.4.4/g' configure
# Allow use of eclib 20221012
sed -i 's/20220621/20221012/g' configure
@ -2080,6 +2073,11 @@ end
########################################################################
%changelog
* Mon Mar 13 2023 Jerry James <loganjerry@gmail.com> - 9.8-1
- Version 9.8
- Drop upstreamed patches: -fes-build, -python3.11
- Add patches: -catch-value, -gap-split-root, -bind2nd, -mem-fun-ref
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 9.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild

View file

@ -1,2 +1,2 @@
SHA512 (cremona-2019-10-29.tar.gz) = 32fbb828f26f87191e39123762cfbd796aac9abf346f0dc981e8e3f390435b22d281be3031ea92ae7e18f4ce41af8054784ca0d550a08f17b05c54ca08b4c9c8
SHA512 (sage-9.7.tar.gz) = 65c21713063dc2b9d632c44e31a5a9f3417f3d8367a9f082569b11c7f456f38ceb774821b9e879b45edd3a08f844d9b432962111d032f5d90ac5efd21f716924
SHA512 (sage-9.8.tar.gz) = 1ba1c7bd07f13bb67f290d194b65234546fb6fee42693dd3d538e5f206b92a2f1ebf2d49b58541469a4c38b54c843ea0614f3d5c1b32f724f3176703ec5382e7