From 2fac77555255bfb0106c7ba353f5ed63187c5f29 Mon Sep 17 00:00:00 2001 From: Jerry James Date: Fri, 28 Feb 2020 09:38:49 -0700 Subject: [PATCH] Version 9.0 (bz 1756780, 1770880). Also: - Drop upstreamed -ecm and -primecount patches. - Add -escape patch. - The old notebook (sagenb) is no longer shipped, so drop the -sagenb and -sagenb-python3 patches, the -notebook subpackage, and some BRs. - New -jupyter subpackage. - Add suitesparse BR. - Drop pathlib2 BR (bz 1797116). --- sagemath-ecm.patch | 21 - sagemath-env.patch | 14 +- sagemath-escape.patch | 3536 +++++++++++++++++++++++++++++++++ sagemath-extensions.patch | 21 +- sagemath-includes.patch | 32 +- sagemath-primecount.patch | 110 - sagemath-python3.patch | 218 +- sagemath-sagenb-python3.patch | 351 ---- sagemath-sagenb.patch | 88 - sagemath-scripts.patch | 10 +- sagemath-tdlib.patch | 5 +- sagemath.spec | 270 +-- sources | 4 +- 13 files changed, 3724 insertions(+), 956 deletions(-) delete mode 100644 sagemath-ecm.patch create mode 100644 sagemath-escape.patch delete mode 100644 sagemath-primecount.patch delete mode 100644 sagemath-sagenb-python3.patch delete mode 100644 sagemath-sagenb.patch diff --git a/sagemath-ecm.patch b/sagemath-ecm.patch deleted file mode 100644 index 3857cbe..0000000 --- a/sagemath-ecm.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -up src/sage/interfaces/ecm.py.orig src/sage/interfaces/ecm.py ---- src/sage/interfaces/ecm.py.orig 2019-06-26 14:41:04.000000000 -0600 -+++ src/sage/interfaces/ecm.py 2019-09-04 09:29:09.529723744 -0600 -@@ -39,7 +39,7 @@ from __future__ import print_function - - from six import iteritems, PY2 - --import os -+import subprocess - import re - - from sage.structure.sage_object import SageObject -@@ -256,7 +256,7 @@ class ECM(SageObject): - """ - print("Enter numbers to run ECM on them.") - print("Press control-C to exit.") -- os.system(self._cmd) -+ subprocess.call(self._cmd) - - # Recommended settings from - # http://www.mersennewiki.org/index.php/Elliptic_Curve_Method diff --git a/sagemath-env.patch b/sagemath-env.patch index b798986..035b659 100644 --- a/sagemath-env.patch +++ b/sagemath-env.patch @@ -1,6 +1,6 @@ diff -up src/sage/env.py.orig src/sage/env.py ---- src/sage/env.py.orig 2019-10-03 16:59:18.202495553 -0300 -+++ src/sage/env.py 2019-10-03 17:00:31.167931299 -0300 +--- src/sage/env.py.orig 2020-02-27 16:09:10.913012356 -0700 ++++ src/sage/env.py 2020-02-27 16:16:34.080052271 -0700 @@ -151,11 +151,11 @@ var('SAGE_DATE', version.date) var('SAGE_VERSION_BANNER', version.banner) @@ -27,11 +27,15 @@ diff -up src/sage/env.py.orig src/sage/env.py var('CONWAY_POLYNOMIALS_DATA_DIR', join(SAGE_SHARE, 'conway_polynomials')) var('GRAPHS_DATA_DIR', join(SAGE_SHARE, 'graphs')) var('ELLCURVE_DATA_DIR', join(SAGE_SHARE, 'ellcurves')) -@@ -181,11 +181,11 @@ var('CREMONA_MINI_DATA_DIR', joi +@@ -179,13 +179,13 @@ var('THEBE_DIR', joi + var('COMBINATORIAL_DESIGN_DATA_DIR', join(SAGE_SHARE, 'combinatorial_designs')) + var('CREMONA_MINI_DATA_DIR', join(SAGE_SHARE, 'cremona')) var('CREMONA_LARGE_DATA_DIR', join(SAGE_SHARE, 'cremona')) - var('JMOL_DIR', join(SAGE_SHARE, 'jmol')) - var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol')) +-var('JMOL_DIR', join(SAGE_SHARE, 'jmol')) +-var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol')) -var('MATHJAX_DIR', join(SAGE_SHARE, 'mathjax')) ++var('JMOL_DIR', join('/usr', 'share', 'java', 'jmol')) ++var('JSMOL_DIR', join('/usr', 'share', 'javascript', 'jsmol')) +var('MATHJAX_DIR', join('/usr', 'share', 'javascript', 'mathjax')) var('MTXLIB', join(SAGE_SHARE, 'meataxe')) var('THREEJS_DIR', join(SAGE_SHARE, 'threejs')) diff --git a/sagemath-escape.patch b/sagemath-escape.patch new file mode 100644 index 0000000..8c73a7a --- /dev/null +++ b/sagemath-escape.patch @@ -0,0 +1,3536 @@ +diff -up build/pkgs/ipython/src/IPython/core/completer.py.orig build/pkgs/ipython/src/IPython/core/completer.py +--- build/pkgs/ipython/src/IPython/core/completer.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/core/completer.py 2020-02-26 11:30:50.639306162 -0700 +@@ -771,7 +771,7 @@ class IPCompleter(Completer): + return matches + + def _default_arguments_from_docstring(self, doc): +- """Parse the first line of docstring for call signature. ++ r"""Parse the first line of docstring for call signature. + + Docstring should be of the form 'min(iterable[, key=func])\n'. + It can also parse cython docstring of the form +@@ -939,7 +939,7 @@ class IPCompleter(Completer): + $ + ''' + regexps = self.__dict_key_regexps = { +- False: re.compile(dict_key_re_fmt % ''' ++ False: re.compile(dict_key_re_fmt % r''' + # identifiers separated by . + (?!\d)\w+ + (?:\.(?!\d)\w+)* +diff -up build/pkgs/ipython/src/IPython/core/inputtransformer.py.orig build/pkgs/ipython/src/IPython/core/inputtransformer.py +--- build/pkgs/ipython/src/IPython/core/inputtransformer.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/core/inputtransformer.py 2020-02-26 11:25:31.587048803 -0700 +@@ -178,7 +178,7 @@ class assemble_python_lines(TokenInputTr + + @CoroutineInputTransformer.wrap + def assemble_logical_lines(): +- """Join lines following explicit line continuations (\)""" ++ r"""Join lines following explicit line continuations (\)""" + line = '' + while True: + line = (yield line) +@@ -362,7 +362,7 @@ def cellmagic(end_on_blank_line=False): + reset (sent None). + """ + tpl = 'get_ipython().run_cell_magic(%r, %r, %r)' +- cellmagic_help_re = re.compile('%%\w+\?') ++ cellmagic_help_re = re.compile(r'%%\w+\?') + line = '' + while True: + line = (yield line) +diff -up build/pkgs/ipython/src/IPython/core/magics/config.py.orig build/pkgs/ipython/src/IPython/core/magics/config.py +--- build/pkgs/ipython/src/IPython/core/magics/config.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/core/magics/config.py 2020-02-26 11:00:14.674896818 -0700 +@@ -26,7 +26,7 @@ from logging import error + # Magic implementation classes + #----------------------------------------------------------------------------- + +-reg = re.compile('^\w+\.\w+$') ++reg = re.compile(r'^\w+\.\w+$') + @magics_class + class ConfigMagics(Magics): + +diff -up build/pkgs/ipython/src/IPython/core/splitinput.py.orig build/pkgs/ipython/src/IPython/core/splitinput.py +--- build/pkgs/ipython/src/IPython/core/splitinput.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/core/splitinput.py 2020-02-26 10:58:24.452965715 -0700 +@@ -41,7 +41,7 @@ from IPython.utils.encoding import get_s + # ! and !! trigger if they are first char(s) *or* follow an indent + # ? triggers as first or last char. + +-line_split = re.compile(""" ++line_split = re.compile(r""" + ^(\s*) # any leading space + ([,;/%]|!!?|\?\??)? # escape character or characters + \s*(%{0,2}[\w\.\*]*) # function/method, possibly with leading % +diff -up build/pkgs/ipython/src/IPython/utils/text.py.orig build/pkgs/ipython/src/IPython/utils/text.py +--- build/pkgs/ipython/src/IPython/utils/text.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/utils/text.py 2020-02-26 11:02:58.842051890 -0700 +@@ -594,7 +594,7 @@ class DollarFormatter(FullEvalFormatter) + In [4]: f.format('$a or {b}', a=1, b=2) + Out[4]: u'1 or 2' + """ +- _dollar_pattern = re.compile("(.*?)\$(\$?[\w\.]+)") ++ _dollar_pattern = re.compile(r"(.*?)\$(\$?[\w\.]+)") + def parse(self, fmt_string): + for literal_txt, field_name, format_spec, conversion \ + in Formatter.parse(self, fmt_string): +diff -up build/pkgs/ipython/src/IPython/utils/_tokenize_py3.py.orig build/pkgs/ipython/src/IPython/utils/_tokenize_py3.py +--- build/pkgs/ipython/src/IPython/utils/_tokenize_py3.py.orig 2018-07-28 18:24:17.000000000 -0600 ++++ build/pkgs/ipython/src/IPython/utils/_tokenize_py3.py 2020-02-26 11:04:04.592962168 -0700 +@@ -47,7 +47,7 @@ from token import * + from codecs import lookup, BOM_UTF8 + import collections + from io import TextIOWrapper +-cookie_re = re.compile("coding[:=]\s*([-\w.]+)") ++cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") + + import token + __all__ = token.__all__ + ["COMMENT", "tokenize", "detect_encoding", +diff -up src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx +--- src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx 2020-02-27 12:06:28.748195247 -0700 +@@ -228,7 +228,7 @@ cdef class FreeAlgebraElement_letterplac + return '0' + + def _latex_(self): +- """ ++ r""" + TESTS:: + + sage: K. = GF(25) +diff -up src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig src/sage/algebras/letterplace/free_algebra_letterplace.pyx +--- src/sage/algebras/letterplace/free_algebra_letterplace.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/algebras/letterplace/free_algebra_letterplace.pyx 2020-02-27 12:07:22.658260237 -0700 +@@ -605,7 +605,7 @@ cdef class FreeAlgebra_letterplace(Algeb + + # Auxiliar methods + cdef str exponents_to_latex(self, E): +- """ ++ r""" + This auxiliary method is used for the representation of elements of this free algebra as a latex string. + + EXAMPLES:: +diff -up src/sage/algebras/lie_algebras/lie_algebra_element.pyx.orig src/sage/algebras/lie_algebras/lie_algebra_element.pyx +--- src/sage/algebras/lie_algebras/lie_algebra_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/algebras/lie_algebras/lie_algebra_element.pyx 2020-02-27 12:05:08.435588192 -0700 +@@ -1014,7 +1014,7 @@ cdef class UntwistedAffineLieAlgebraElem + + (E_{-\alpha_{1}}) \otimes t^{1} + 3 c + -2 d + """ + from sage.misc.latex import latex +- ret = ' + '.join('({}) \otimes t^{{{}}}'.format(latex(g), t) ++ ret = ' + '.join(r'({}) \otimes t^{{{}}}'.format(latex(g), t) + for t,g in self._t_dict.iteritems()) + if self._c_coeff != 0: + if ret: +diff -up src/sage/arith/multi_modular.pyx.orig src/sage/arith/multi_modular.pyx +--- src/sage/arith/multi_modular.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/arith/multi_modular.pyx 2020-02-27 13:55:34.962395106 -0700 +@@ -678,7 +678,7 @@ cdef class MultiModularBasis_base(object + return z + + def precomputation_list(self): +- """ ++ r""" + Return a list of the precomputed coefficients + `\prod_j=1^{i-1} m_j^{-1} (mod m_i)` + where `m_i` are the prime moduli. +diff -up src/sage/calculus/transforms/dwt.pyx.orig src/sage/calculus/transforms/dwt.pyx +--- src/sage/calculus/transforms/dwt.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/calculus/transforms/dwt.pyx 2020-02-27 11:58:48.129134391 -0700 +@@ -24,7 +24,7 @@ AUTHOR: + import sage.plot.all + + def WaveletTransform(n, wavelet_type, wavelet_k): +- """ ++ r""" + This function initializes an GSLDoubleArray of length n which + can perform a discrete wavelet transform. + +diff -up src/sage/coding/binary_code.pyx.orig src/sage/coding/binary_code.pyx +--- src/sage/coding/binary_code.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/coding/binary_code.pyx 2020-02-27 09:13:10.902461428 -0700 +@@ -517,7 +517,7 @@ cdef codeword permute_word_by_wp(WordPer + return image + + def test_expand_to_ortho_basis(B=None): +- """ ++ r""" + This function is written in pure C for speed, and is tested from this + function. + +diff -up src/sage/coding/codecan/codecan.pyx.orig src/sage/coding/codecan/codecan.pyx +--- src/sage/coding/codecan/codecan.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/coding/codecan/codecan.pyx 2020-02-27 09:11:00.997860689 -0700 +@@ -369,7 +369,7 @@ cdef class InnerGroup: + return self.transporter + + def __repr__(self): +- """ ++ r""" + EXAMPLES:: + + sage: from sage.coding.codecan.codecan import InnerGroup +@@ -378,7 +378,7 @@ cdef class InnerGroup: + frobenius power = 1 and partition = 0 -> 0 1 -> 1 2 -> 2 3 -> 3 4 -> 4 5 -> 5 + 6 -> 6 7 -> 7 8 -> 8 9 -> 9 + """ +- return "Subgroup of (GL(k,q) times \GF{q}^n ) rtimes Aut(\GF{q}) " + \ ++ return r"Subgroup of (GL(k,q) times \GF{q}^n ) rtimes Aut(\GF{q}) " + \ + "with rank = %s, frobenius power = %s and partition =%s" % (self.rank, + self.frob_pow, OP_string(self.row_partition)) + +@@ -741,7 +741,7 @@ cdef class PartitionRefinementLinearCode + return self._inner_group_stabilizer_order + + cdef _init_point_hyperplane_incidence(self): +- """ ++ r""" + Compute a set of codewords `W` of `C` (generated by self) which is compatible + with the group action, i.e. if we start with some other code `(g,\pi)C` + the result should be `(g,\pi)W`. +diff -up src/sage/combinat/crystals/letters.pyx.orig src/sage/combinat/crystals/letters.pyx +--- src/sage/combinat/crystals/letters.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/crystals/letters.pyx 2020-02-27 13:38:25.079626805 -0700 +@@ -510,7 +510,7 @@ cdef class Letter(Element): + return False + + cdef class EmptyLetter(Element): +- """ ++ r""" + The affine letter `\emptyset` thought of as a classical crystal letter + in classical type `B_n` and `C_n`. + +@@ -558,7 +558,7 @@ cdef class EmptyLetter(Element): + return 'E' + + def _latex_(self): +- """ ++ r""" + Return a latex representation of ``self``. + + EXAMPLES:: +@@ -2493,7 +2493,7 @@ cdef class BKKLetter(Letter): + return ret + + class CrystalOfBKKLetters(ClassicalCrystalOfLetters): +- """ ++ r""" + Crystal of letters for Benkart-Kang-Kashiwara supercrystals. + + This implements the `\mathfrak{gl}(m|n)` crystal of +diff -up src/sage/combinat/crystals/tensor_product_element.pyx.orig src/sage/combinat/crystals/tensor_product_element.pyx +--- src/sage/combinat/crystals/tensor_product_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/crystals/tensor_product_element.pyx 2020-02-27 13:42:53.490900825 -0700 +@@ -145,8 +145,8 @@ cdef class TensorProductOfCrystalsElemen + """ + from sage.misc.latex import latex + if self._parent.options.convention == "Kashiwara": +- return ' \otimes '.join(latex(c) for c in reversed(self)) +- return ' \otimes '.join(latex(c) for c in self) ++ return r' \otimes '.join(latex(c) for c in reversed(self)) ++ return r' \otimes '.join(latex(c) for c in self) + + def _ascii_art_(self): + """ +@@ -1314,7 +1314,7 @@ cdef class CrystalOfBKKTableauxElement(T + return repr(self.to_tableau()) + + def _repr_diagram(self): +- """ ++ r""" + Return a string representation of ``self`` as a diagram. + + EXAMPLES:: +diff -up src/sage/combinat/integer_lists/base.pyx.orig src/sage/combinat/integer_lists/base.pyx +--- src/sage/combinat/integer_lists/base.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/integer_lists/base.pyx 2020-02-27 10:03:04.700544965 -0700 +@@ -269,7 +269,7 @@ cdef class IntegerListsBackend(object): + + + cdef class Envelope(object): +- """ ++ r""" + The (currently approximated) upper (lower) envelope of a function + under the specified constraints. + +@@ -523,7 +523,7 @@ cdef class Envelope(object): + return self.f_limit_start + + def limit(self): +- """ ++ r""" + Return a bound on the limit of ``self``. + + OUTPUT: a nonnegative integer or `\infty` +diff -up src/sage/combinat/root_system/reflection_group_c.pyx.orig src/sage/combinat/root_system/reflection_group_c.pyx +--- src/sage/combinat/root_system/reflection_group_c.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/root_system/reflection_group_c.pyx 2020-02-27 13:46:22.841188756 -0700 +@@ -459,7 +459,7 @@ cdef int first_descent_in_parabolic(Perm + + cpdef PermutationGroupElement reduce_in_coset(PermutationGroupElement w, tuple S, + list parabolic, int N, bint right): +- """ ++ r""" + Return the minimal length coset representative of ``w`` of the parabolic + subgroup indexed by ``parabolic`` (with indices `\{0, \ldots, n\}`). + +diff -up src/sage/combinat/root_system/reflection_group_element.pyx.orig src/sage/combinat/root_system/reflection_group_element.pyx +--- src/sage/combinat/root_system/reflection_group_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/root_system/reflection_group_element.pyx 2020-02-27 10:05:47.567686763 -0700 +@@ -1109,7 +1109,7 @@ def _gap_factorization(w, gens): + fac = gap3('MinimalWord(W,%s)'%str(w)).sage() + return [i-1 for i in fac] + +-_gap_factorization_code = """ ++_gap_factorization_code = r""" + # MinimalWord(G,w) + # given a permutation group G find some expression of minimal length in the + # generators of G and their inverses of the element w (an inverse is +diff -up src/sage/crypto/boolean_function.pyx.orig src/sage/crypto/boolean_function.pyx +--- src/sage/crypto/boolean_function.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/crypto/boolean_function.pyx 2020-02-27 09:07:31.088625609 -0700 +@@ -1108,7 +1108,7 @@ cdef class BooleanFunction(SageObject): + return (len(W) == 1) or (len(W) == 2 and 0 in W) + + def is_linear_structure(self, val): +- """ ++ r""" + Return ``True`` if ``val`` is a linear structure of this Boolean + function. + +@@ -1178,7 +1178,7 @@ cdef class BooleanFunction(SageObject): + raise TypeError("cannot compute is_linear_structure() using parameter %s" % (val,)) + + def has_linear_structure(self): +- """ ++ r""" + Return ``True`` if this function has a linear structure. + + An `n`-variable Boolean function `f` has a linear structure if +@@ -1209,7 +1209,7 @@ cdef class BooleanFunction(SageObject): + return any(abs(a[i]) == 1<`` + + AUTHORS: +diff -up src/sage/matrix/matrix_modn_dense_float.pyx.orig src/sage/matrix/matrix_modn_dense_float.pyx +--- src/sage/matrix/matrix_modn_dense_float.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matrix/matrix_modn_dense_float.pyx 2020-02-27 12:16:51.940319470 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Dense matrices over `\ZZ/n\ZZ` for `n < 2^{11}` using LinBox's ``Modular`` + + AUTHORS: +diff -up src/sage/matrix/matrix_modn_dense_template.pxi.orig src/sage/matrix/matrix_modn_dense_template.pxi +--- src/sage/matrix/matrix_modn_dense_template.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matrix/matrix_modn_dense_template.pxi 2020-02-27 12:30:47.428707123 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Dense matrices over `\ZZ/n\ZZ` for `n` small using the LinBox library (FFLAS/FFPACK). + + FFLAS/FFPACK are libraries to provide BLAS/LAPACK-style routines for +@@ -663,7 +663,7 @@ cdef class Matrix_modn_dense_template(Ma + return (word_size, little_endian, s), 10 + + def _unpickle(self, data, int version): +- """ ++ r""" + TESTS: + + Test for char-sized modulus:: +@@ -861,7 +861,7 @@ cdef class Matrix_modn_dense_template(Ma + + + cpdef _add_(self, right): +- """ ++ r""" + Add two dense matrices over `\Z/n\Z` + + INPUT: +@@ -2525,7 +2525,7 @@ cdef class Matrix_modn_dense_template(Ma + return Matrix_dense.determinant(self) + + cdef xgcd_eliminate(self, celement * row1, celement* row2, Py_ssize_t start_col): +- """ ++ r""" + Reduces ``row1`` and ``row2`` by a unimodular transformation + using the xgcd relation between their first coefficients ``a`` and + ``b``. +diff -up src/sage/matrix/matrix_modn_sparse.pyx.orig src/sage/matrix/matrix_modn_sparse.pyx +--- src/sage/matrix/matrix_modn_sparse.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matrix/matrix_modn_sparse.pyx 2020-02-27 12:31:50.826605802 -0700 +@@ -854,7 +854,7 @@ cdef class Matrix_modn_sparse(matrix_spa + raise ValueError("no algorithm '%s'"%algorithm) + + def _solve_right_nonsingular_square(self, B, algorithm=None, check_rank=False): +- """ ++ r""" + If self is a matrix `A`, then this function returns a + vector or matrix `X` such that `A X = B`. If + `B` is a vector then `X` is a vector and if +diff -up src/sage/matrix/matrix_polynomial_dense.pyx.orig src/sage/matrix/matrix_polynomial_dense.pyx +--- src/sage/matrix/matrix_polynomial_dense.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matrix/matrix_polynomial_dense.pyx 2020-02-27 09:22:35.512126137 -0700 +@@ -44,16 +44,16 @@ cdef class Matrix_polynomial_dense(Matri + commonly used in the literature. + + - Working column-wise: each column of the matrix is a vector in the basis; +- then, a $\\Bold{K}[x]$-submodule of $\\Bold{K}[x]^{m}$ of rank $n$ is +- represented by an $m \\times n$ matrix, whose columns span the module +- (via $\\Bold{K}[x]$-linear combinations). This matrix has full rank, +- and $n \\leq m$. ++ then, a $\Bold{K}[x]$-submodule of $\Bold{K}[x]^{m}$ of rank $n$ is ++ represented by an $m \times n$ matrix, whose columns span the module ++ (via $\Bold{K}[x]$-linear combinations). This matrix has full rank, ++ and $n \leq m$. + + - Working row-wise: each row of the matrix is a vector in the basis; then, +- a $\\Bold{K}[x]$-submodule of $\\Bold{K}[x]^{n}$ of rank $m$ is +- represented by an $m \\times n$ matrix, whose rows span the module (via +- $\\Bold{K}[x]$-linear combinations). This matrix has full rank, and $m +- \\leq n$. ++ a $\Bold{K}[x]$-submodule of $\Bold{K}[x]^{n}$ of rank $m$ is ++ represented by an $m \times n$ matrix, whose rows span the module (via ++ $\Bold{K}[x]$-linear combinations). This matrix has full rank, and $m ++ \leq n$. + + For the rest of this class description, we assume that one is working + row-wise. For a given such module, all its bases are equivalent under +diff -up src/sage/matrix/matrix_rational_dense.pyx.orig src/sage/matrix/matrix_rational_dense.pyx +--- src/sage/matrix/matrix_rational_dense.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matrix/matrix_rational_dense.pyx 2020-02-27 12:27:53.166741857 -0700 +@@ -489,7 +489,7 @@ cdef class Matrix_rational_dense(Matrix_ + return rich_to_bool(op, 0) + + cdef _vector_times_matrix_(self, Vector v): +- """ ++ r""" + Returns the vector times matrix product. + + INPUT: +@@ -902,7 +902,7 @@ cdef class Matrix_rational_dense(Matrix_ + return 0 + + def _clear_denom(self): +- """ ++ r""" + INPUT: + + +@@ -958,7 +958,7 @@ cdef class Matrix_rational_dense(Matrix_ + return X + + def charpoly(self, var='x', algorithm=None): +- """ ++ r""" + Return the characteristic polynomial of this matrix. + + .. NOTE:: +@@ -1169,7 +1169,7 @@ cdef class Matrix_rational_dense(Matrix_ + return ans + + def _multiply_over_integers(self, Matrix_rational_dense right, algorithm='default'): +- """ ++ r""" + Multiply this matrix by right using a multimodular algorithm and + return the result. + +diff -up src/sage/matroids/basis_exchange_matroid.pyx.orig src/sage/matroids/basis_exchange_matroid.pyx +--- src/sage/matroids/basis_exchange_matroid.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/basis_exchange_matroid.pyx 2020-02-27 14:52:21.996354648 -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/basis_matroid.pyx.orig src/sage/matroids/basis_matroid.pyx +--- src/sage/matroids/basis_matroid.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/basis_matroid.pyx 2020-02-27 11:05:01.945973893 -0700 +@@ -1281,7 +1281,7 @@ cdef long set_to_index(bitset_t S): + return index + + cdef index_to_set(bitset_t S, long index, long k, long n): +- """ ++ r""" + Compute the k-subset of `\{0, ..., n-1\}` of rank index + """ + bitset_clear(S) +diff -up src/sage/matroids/extension.pyx.orig src/sage/matroids/extension.pyx +--- src/sage/matroids/extension.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/extension.pyx 2020-02-27 11:09:44.223086757 -0700 +@@ -247,7 +247,7 @@ cdef class LinearSubclassesIter: + + + cdef class LinearSubclasses: +- """ ++ r""" + An iterable set of linear subclasses of a matroid. + + Enumerate linear subclasses of a given matroid. A *linear subclass* is a +@@ -411,7 +411,7 @@ cdef class LinearSubclasses: + + + cdef class MatroidExtensions(LinearSubclasses): +- """ ++ r""" + An iterable set of single-element extensions of a given matroid. + + INPUT: +diff -up src/sage/matroids/lean_matrix.pyx.orig src/sage/matroids/lean_matrix.pyx +--- src/sage/matroids/lean_matrix.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/lean_matrix.pyx 2020-02-27 14:51:31.676283450 -0700 +@@ -2721,7 +2721,7 @@ cdef class QuaternaryMatrix(LeanMatrix): + return sage.matroids.unpickling.unpickle_quaternary_matrix, (version, data) + + cpdef GenericMatrix generic_identity(n, ring): +- """ ++ r""" + Return a GenericMatrix instance containing the `n \times n` identity + matrix over ``ring``. + +diff -up src/sage/matroids/linear_matroid.pyx.orig src/sage/matroids/linear_matroid.pyx +--- src/sage/matroids/linear_matroid.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/linear_matroid.pyx 2020-02-27 11:08:49.724030318 -0700 +@@ -757,7 +757,7 @@ cdef class LinearMatroid(BasisExchangeMa + return {e: R[self._idx[e]] for e in self.groundset()} + + cpdef LeanMatrix _reduced_representation(self, B=None): +- """ ++ r""" + Return a reduced representation of the matroid, i.e. a matrix `R` such + that `[I\ \ R]` represents the matroid. + +@@ -796,7 +796,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:`` that does no + type checking. + +@@ -962,7 +962,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. + +@@ -1318,7 +1318,7 @@ cdef class LinearMatroid(BasisExchangeMa + return type(self)(reduced_matrix=M, groundset=rows + cols) + + cpdef dual(self): +- """ ++ r""" + Return the dual of the matroid. + + Let `M` be a matroid with ground set `E`. If `B` is the set of bases +@@ -1350,7 +1350,7 @@ cdef class LinearMatroid(BasisExchangeMa + return type(self)(reduced_matrix=R, groundset=cols + rows) + + cpdef has_line_minor(self, k, hyperlines=None, certificate=False): +- """ ++ r""" + Test if the matroid has a `U_{2, k}`-minor. + + The matroid `U_{2, k}` is a matroid on `k` elements in which every +@@ -3093,7 +3093,7 @@ cdef class BinaryMatroid(LinearMatroid): + self._one = GF2_one + + cpdef base_ring(self): +- """ ++ r""" + Return the base ring of the matrix representing the matroid, + in this case `\GF{2}`. + +@@ -3273,7 +3273,7 @@ cdef class BinaryMatroid(LinearMatroid): + return self._A.copy() # Deprecated Sage matrix operation + + cpdef LeanMatrix _reduced_representation(self, B=None): +- """ ++ r""" + Return a reduced representation of the matroid, i.e. a matrix `R` such + that `[I\ \ R]` represents the matroid. + +@@ -4161,7 +4161,7 @@ cdef class TernaryMatroid(LinearMatroid) + self._two = GF3_minus_one + + cpdef base_ring(self): +- """ ++ r""" + Return the base ring of the matrix representing the matroid, in this + case `\GF{3}`. + +@@ -4345,7 +4345,7 @@ cdef class TernaryMatroid(LinearMatroid) + return self._A.copy() # Deprecated Sage matrix operation + + cpdef LeanMatrix _reduced_representation(self, B=None): +- """ ++ r""" + Return a reduced representation of the matroid, i.e. a matrix `R` + such that `[I\ \ R]` represents the matroid. + +@@ -4527,7 +4527,7 @@ cdef class TernaryMatroid(LinearMatroid) + return self._t_invariant + + cpdef bicycle_dimension(self): +- """ ++ r""" + Return the bicycle dimension of the ternary matroid. + + The bicycle dimension of a linear subspace `V` is +@@ -5060,7 +5060,7 @@ cdef class QuaternaryMatroid(LinearMatro + self._x_one = (self._A)._x_one + + cpdef base_ring(self): +- """ ++ r""" + Return the base ring of the matrix representing the matroid, in this + case `\GF{4}`. + +@@ -5237,7 +5237,7 @@ cdef class QuaternaryMatroid(LinearMatro + return self._A.copy() # Deprecated Sage matrix operation + + cpdef LeanMatrix _reduced_representation(self, B=None): +- """ ++ r""" + Return a reduced representation of the matroid, i.e. a matrix `R` such + that `[I\ \ R]` represents the matroid. + +@@ -5377,7 +5377,7 @@ cdef class QuaternaryMatroid(LinearMatro + return self._q_invariant + + cpdef bicycle_dimension(self): +- """ ++ r""" + Return the bicycle dimension of the quaternary matroid. + + The bicycle dimension of a linear subspace `V` is +@@ -5774,7 +5774,7 @@ cdef class RegularMatroid(LinearMatroid) + return P + + cpdef base_ring(self): +- """ ++ r""" + Return the base ring of the matrix representing the matroid, in this + case `\ZZ`. + +@@ -6192,7 +6192,7 @@ cdef class RegularMatroid(LinearMatroid) + return {e:idx[m[str(e)]] for e in self.groundset() if str(e) in m} + + cpdef has_line_minor(self, k, hyperlines=None, certificate=False): +- """ ++ r""" + Test if the matroid has a `U_{2, k}`-minor. + + The matroid `U_{2, k}` is a matroid on `k` elements in which every +diff -up src/sage/matroids/matroid.pyx.orig src/sage/matroids/matroid.pyx +--- src/sage/matroids/matroid.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/matroid.pyx 2020-02-27 11:14:07.206492095 -0700 +@@ -3080,7 +3080,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 +@@ -3360,7 +3360,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 +@@ -3483,7 +3483,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: +@@ -3887,7 +3887,7 @@ cdef class Matroid(SageObject): + return self.delete(X) + + cpdef dual(self): +- """ ++ r""" + Return the dual of the matroid. + + Let `M` be a matroid with ground set `E`. If `B` is the set of bases +@@ -3999,7 +3999,7 @@ cdef class Matroid(SageObject): + return self._has_minor(N, certificate) + + cpdef has_line_minor(self, k, hyperlines=None, certificate=False): +- """ ++ r""" + Test if the matroid has a `U_{2, k}`-minor. + + The matroid `U_{2, k}` is a matroid on `k` elements in which every +@@ -4071,7 +4071,7 @@ cdef class Matroid(SageObject): + return self._has_line_minor(k, hyperlines, certificate) + + cpdef _has_line_minor(self, k, hyperlines, certificate=False): +- """ ++ r""" + Test if the matroid has a `U_{2, k}`-minor. + + Internal version that does no input checking. +@@ -4259,7 +4259,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 +@@ -4349,7 +4349,7 @@ cdef class Matroid(SageObject): + return final_list + + cpdef linear_subclasses(self, line_length=None, subsets=None): +- """ ++ r""" + Return an iterable set of linear subclasses of the matroid. + + A *linear subclass* is a set of hyperplanes (i.e. closed sets of rank +@@ -4660,7 +4660,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. +@@ -4737,7 +4737,7 @@ cdef class Matroid(SageObject): + return components + + cpdef is_connected(self, certificate=False): +- """ ++ r""" + Test if the matroid is connected. + + A *separation* in a matroid is a partition `(X, Y)` of the +@@ -7432,7 +7432,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/matroids/set_system.pyx.orig src/sage/matroids/set_system.pyx +--- src/sage/matroids/set_system.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/matroids/set_system.pyx 2020-02-27 14:50:11.189769061 -0700 +@@ -510,7 +510,7 @@ cdef class SetSystem: + return P + + cpdef _equitable_partition(self, SetSystem P=None, EP=None): +- """ ++ r""" + Return an equitable ordered partition of the ground set of the + hypergraph whose edges are the subsets in this SetSystem. + +diff -up src/sage/misc/cachefunc.pyx.orig src/sage/misc/cachefunc.pyx +--- src/sage/misc/cachefunc.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/misc/cachefunc.pyx 2020-02-27 11:38:25.902302125 -0700 +@@ -835,7 +835,7 @@ cdef class CachedFunction(object): + ## forward other questions to the cached function. + + def _instancedoc_(self): +- """ ++ r""" + Provide documentation for the cached function. + + A cached function shall inherit the documentation +diff -up src/sage/modular/arithgroup/arithgroup_element.pyx.orig src/sage/modular/arithgroup/arithgroup_element.pyx +--- src/sage/modular/arithgroup/arithgroup_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/arithgroup/arithgroup_element.pyx 2020-02-27 11:52:51.677078266 -0700 +@@ -194,7 +194,7 @@ cdef class ArithmeticSubgroupElement(Mul + return richcmp(self.__x, right.__x, op) + + def __nonzero__(self): +- """ ++ r""" + Return ``True``, since the ``self`` lives in SL(2,\Z), which does not + contain the zero matrix. + +diff -up src/sage/modular/arithgroup/congroup.pyx.orig src/sage/modular/arithgroup/congroup.pyx +--- src/sage/modular/arithgroup/congroup.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/arithgroup/congroup.pyx 2020-02-27 09:02:34.164911827 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Cython helper functions for congruence subgroups + + This file contains optimized Cython implementations of a few functions related +diff -up src/sage/modular/arithgroup/farey_symbol.pyx.orig src/sage/modular/arithgroup/farey_symbol.pyx +--- src/sage/modular/arithgroup/farey_symbol.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/arithgroup/farey_symbol.pyx 2020-02-27 09:01:09.509443852 -0700 +@@ -617,7 +617,7 @@ cdef class Farey: + (forced_format is None and '\\xymatrix' in latex.mathjax_avoid_list()): + # output not using xymatrix + s = r'\left( -\infty' +- a = [x._latex_() for x in self.fractions()] + ['\infty'] ++ a = [x._latex_() for x in self.fractions()] + [r'\infty'] + b = self.pairings() + for i in xrange(len(a)): + u = b[i] +diff -up src/sage/modular/modsym/heilbronn.pyx.orig src/sage/modular/modsym/heilbronn.pyx +--- src/sage/modular/modsym/heilbronn.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/modsym/heilbronn.pyx 2020-02-27 11:56:13.562672136 -0700 +@@ -209,7 +209,7 @@ cdef class Heilbronn: + sig_off() + + cdef apply_to_polypart(self, fmpz_poly_t* ans, int i, int k): +- """ ++ r""" + INPUT: + + - ``ans`` - fmpz_poly_t\*; pre-allocated an +diff -up src/sage/modular/modsym/manin_symbol.pyx.orig src/sage/modular/modsym/manin_symbol.pyx +--- src/sage/modular/modsym/manin_symbol.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/modsym/manin_symbol.pyx 2020-02-27 09:03:56.595444297 -0700 +@@ -1,5 +1,5 @@ + # -*- coding: utf-8 -*- +-""" ++r""" + Manin symbols + + This module defines the class ManinSymbol. A Manin symbol of +diff -up src/sage/modular/modsym/p1list.pyx.orig src/sage/modular/modsym/p1list.pyx +--- src/sage/modular/modsym/p1list.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modular/modsym/p1list.pyx 2020-02-27 11:55:42.521181786 -0700 +@@ -27,7 +27,7 @@ ctypedef long long llong + cdef int c_p1_normalize_int(int N, int u, int v, + int* uu, int* vv, int* ss, + int compute_s) except -1: +- """ ++ r""" + Computes the canonical representative of + `\mathbb{P}^1(\ZZ/N\ZZ)` equivalent to + `(u,v)` along with a transforming scalar. +@@ -478,7 +478,7 @@ def p1list_llong(int N): + return lst + + def p1list(N): +- """ ++ r""" + Returns the elements of the projective line modulo `N`, + `\mathbb{P}^1(\ZZ/N\ZZ)`, as a plain list of 2-tuples. + +@@ -655,7 +655,7 @@ cdef int p1_normalize_xgcdtable(int N, i + + + cdef class P1List(object): +- """ ++ r""" + The class for `\mathbb{P}^1(\ZZ/N\ZZ)`, the projective line modulo `N`. + + EXAMPLES:: +@@ -673,7 +673,7 @@ cdef class P1List(object): + True + """ + def __init__(self, int N): +- """ ++ r""" + The constructor for the class P1List. + + INPUT: +@@ -824,7 +824,7 @@ cdef class P1List(object): + return "The projective line over the integers modulo %s"%self.__N + + def lift_to_sl2z(self, int i): +- """ ++ r""" + Lift the `i`'th element of this P1list to an element of + `SL(2,\ZZ)`. + +@@ -1187,7 +1187,7 @@ cdef class export: + return c_p1_normalize_llong(N, u, v, uu, vv, ss, compute_s) + + def lift_to_sl2z_int(int c, int d, int N): +- """ ++ r""" + Lift a pair `(c, d)` to an element of `SL(2, \ZZ)`. + + `(c,d)` is assumed to be an element of +diff -up src/sage/modules/free_module_element.pyx.orig src/sage/modules/free_module_element.pyx +--- src/sage/modules/free_module_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/modules/free_module_element.pyx 2020-02-27 15:01:58.389454347 -0700 +@@ -1966,7 +1966,7 @@ cdef class FreeModuleElement(Vector): + return copy(self) + + def lift_centered(self): +- """ ++ r""" + Lift to a congruent, centered vector. + + INPUT: +@@ -2338,7 +2338,7 @@ cdef class FreeModuleElement(Vector): + + def plot_step(self, xmin=0, xmax=1, eps=None, res=None, + connect=True, **kwds): +- """ ++ r""" + INPUT: + + - ``xmin`` - (default: 0) start x position to start +@@ -3609,7 +3609,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 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/numerical/backends/generic_backend.pyx 2020-02-27 15:12:48.869255994 -0700 +@@ -1370,7 +1370,7 @@ cdef class GenericBackend: + raise NotImplementedError() + + cpdef bint is_variable_basic(self, int index): +- """ ++ r""" + Test whether the given variable is basic. + + This assumes that the problem has been solved with the simplex method +@@ -1400,7 +1400,7 @@ cdef class GenericBackend: + raise NotImplementedError() + + cpdef bint is_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the given variable is nonbasic at lower bound. + + This assumes that the problem has been solved with the simplex method +@@ -1430,7 +1430,7 @@ cdef class GenericBackend: + raise NotImplementedError() + + cpdef bint is_slack_variable_basic(self, int index): +- """ ++ r""" + Test whether the slack variable of the given row is basic. + + This assumes that the problem has been solved with the simplex method +@@ -1460,7 +1460,7 @@ cdef class GenericBackend: + raise NotImplementedError() + + cpdef bint is_slack_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the given variable is nonbasic at lower bound. + + This assumes that the problem has been solved with the simplex method +diff -up src/sage/numerical/backends/glpk_backend.pyx.orig src/sage/numerical/backends/glpk_backend.pyx +--- src/sage/numerical/backends/glpk_backend.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/numerical/backends/glpk_backend.pyx 2020-02-27 15:11:17.902928905 -0700 +@@ -2130,7 +2130,7 @@ cdef class GLPKBackend(GenericBackend): + + + cpdef bint is_variable_basic(self, int index): +- """ ++ r""" + Test whether the given variable is basic. + + This assumes that the problem has been solved with the simplex method +@@ -2161,7 +2161,7 @@ cdef class GLPKBackend(GenericBackend): + return self.get_col_stat(index) == GLP_BS + + cpdef bint is_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the given variable is nonbasic at lower bound. + This assumes that the problem has been solved with the simplex method + and a basis is available. Otherwise an exception will be raised. +@@ -2191,7 +2191,7 @@ cdef class GLPKBackend(GenericBackend): + return self.get_col_stat(index) == GLP_NL + + cpdef bint is_slack_variable_basic(self, int index): +- """ ++ r""" + Test whether the slack variable of the given row is basic. + + This assumes that the problem has been solved with the simplex method +@@ -2222,7 +2222,7 @@ cdef class GLPKBackend(GenericBackend): + return self.get_row_stat(index) == GLP_BS + + cpdef bint is_slack_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the slack variable of the given row is nonbasic at lower bound. + + This assumes that the problem has been solved with the simplex method +diff -up src/sage/numerical/backends/interactivelp_backend.pyx.orig src/sage/numerical/backends/interactivelp_backend.pyx +--- src/sage/numerical/backends/interactivelp_backend.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/numerical/backends/interactivelp_backend.pyx 2020-02-27 15:09:45.383668708 -0700 +@@ -1071,7 +1071,7 @@ cdef class InteractiveLPBackend: + problem_type, ring, objective_constant_term=d) + + cpdef bint is_variable_basic(self, int index): +- """ ++ r""" + Test whether the given variable is basic. + + This assumes that the problem has been solved with the simplex method +@@ -1101,7 +1101,7 @@ cdef class InteractiveLPBackend: + return self.lp_std_form.decision_variables()[index] in self.final_dictionary.basic_variables() + + cpdef bint is_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the given variable is nonbasic at lower bound. + + This assumes that the problem has been solved with the simplex method +@@ -1131,7 +1131,7 @@ cdef class InteractiveLPBackend: + return self.lp_std_form.decision_variables()[index] in self.final_dictionary.nonbasic_variables() + + cpdef bint is_slack_variable_basic(self, int index): +- """ ++ r""" + Test whether the slack variable of the given row is basic. + + This assumes that the problem has been solved with the simplex method +@@ -1161,7 +1161,7 @@ cdef class InteractiveLPBackend: + return self.lp_std_form.slack_variables()[index] in self.final_dictionary.basic_variables() + + cpdef bint is_slack_variable_nonbasic_at_lower_bound(self, int index): +- """ ++ r""" + Test whether the given variable is nonbasic at lower bound. + + This assumes that the problem has been solved with the simplex method +@@ -1193,7 +1193,7 @@ cdef class InteractiveLPBackend: + cpdef dictionary(self): + # Proposed addition to the general interface, + # which would for other solvers return backend dictionaries (#18804) +- """ ++ r""" + Return a dictionary representing the current basis. + + EXAMPLES:: +@@ -1228,7 +1228,7 @@ cdef class InteractiveLPBackend: + + cpdef interactive_lp_problem(self): + +- """ ++ r""" + Return the :class:`InteractiveLPProblem` object associated with this backend. + + EXAMPLES:: +diff -up src/sage/quadratic_forms/count_local_2.pyx.orig src/sage/quadratic_forms/count_local_2.pyx +--- src/sage/quadratic_forms/count_local_2.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/quadratic_forms/count_local_2.pyx 2020-02-27 14:47:35.887635615 -0700 +@@ -168,7 +168,7 @@ cdef CountAllLocalTypesNaive_cdef(Q, p, + + + def CountAllLocalTypesNaive(Q, p, k, m, zvec, nzvec): +- """ ++ r""" + This is an internal routine, which is called by + :meth:`sage.quadratic_forms.quadratic_form.QuadraticForm.count_congruence_solutions_by_type + QuadraticForm.count_congruence_solutions_by_type`. See the documentation of +diff -up src/sage/quivers/algebra_elements.pyx.orig src/sage/quivers/algebra_elements.pyx +--- src/sage/quivers/algebra_elements.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/quivers/algebra_elements.pyx 2020-02-27 11:46:21.879821027 -0700 +@@ -280,7 +280,7 @@ cdef class PathAlgebraElement(RingElemen + ) + + def _latex_(self): +- """ ++ r""" + Latex string representation. + + EXAMPLES:: +diff -up src/sage/rings/bernoulli_mod_p.pyx.orig src/sage/rings/bernoulli_mod_p.pyx +--- src/sage/rings/bernoulli_mod_p.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/bernoulli_mod_p.pyx 2020-02-27 14:12:09.407391213 -0700 +@@ -35,7 +35,7 @@ from sage.rings.bernmm import bernmm_ber + + + def verify_bernoulli_mod_p(data): +- """ ++ r""" + Computes checksum for Bernoulli numbers. + + It checks the identity +diff -up src/sage/rings/complex_arb.pyx.orig src/sage/rings/complex_arb.pyx +--- src/sage/rings/complex_arb.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/complex_arb.pyx 2020-02-27 10:34:45.320041770 -0700 +@@ -2922,7 +2922,7 @@ cdef class ComplexBall(RingElement): + return res + + def rising_factorial(self, n): +- """ ++ r""" + Return the ``n``-th rising factorial of this ball. + + The `n`-th rising factorial of `x` is equal to `x (x+1) \cdots (x+n-1)`. +@@ -3640,7 +3640,7 @@ cdef class ComplexBall(RingElement): + return res + + def polylog(self, s): +- """ ++ r""" + Return the polylogarithm `\operatorname{Li}_s(\mathrm{self})`. + + EXAMPLES:: +diff -up src/sage/rings/complex_double.pyx.orig src/sage/rings/complex_double.pyx +--- src/sage/rings/complex_double.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/complex_double.pyx 2020-02-27 10:32:06.489839183 -0700 +@@ -1578,7 +1578,7 @@ cdef class ComplexDoubleElement(FieldEle + return self.real().is_NaN() or self.imag().is_NaN() + + cpdef _pow_(self, other): +- """ ++ r""" + The complex number ``self`` raised to the power ``other``. + + This is computed using complex logarithms and exponentials +diff -up src/sage/rings/complex_interval.pyx.orig src/sage/rings/complex_interval.pyx +--- src/sage/rings/complex_interval.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/complex_interval.pyx 2020-02-27 10:20:29.626115066 -0700 +@@ -714,7 +714,7 @@ cdef class ComplexIntervalFieldElement(s + return x + + def norm(self): +- """ ++ r""" + Return the norm of this complex number. + + If `c = a + bi` is a complex number, then the norm of `c` is defined as +@@ -1096,7 +1096,7 @@ cdef class ComplexIntervalFieldElement(s + return x + + def __invert__(self): +- """ ++ r""" + 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 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/complex_mpc.pyx 2020-02-26 11:15:34.722679686 -0700 +@@ -147,15 +147,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(?P' + sign + ')?\s*(?P' + imaginary_ten + ')' \ +- '(\s*(?P' + sign + ')\s*(?P' + 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(?P' + sign + r')?\s*(?P' + imaginary_ten + ')' \ ++ r'(\s*(?P' + sign + r')\s*(?P' + number_ten + '))?)' \ + '|' \ +- '(?P(?P' + sign + ')?\s*(?P' + number_ten + ')' \ +- '(\s*(?P' + sign + ')\s*(?P' + imaginary_ten + '))?)' +-re_complex_ten = re.compile('^\s*(?:' + complex_ten + ')\s*$', re.I) ++ '(?P(?P' + sign + r')?\s*(?P' + number_ten + ')' \ ++ r'(\s*(?P' + sign + r')\s*(?P' + imaginary_ten + '))?)' ++re_complex_ten = re.compile(r'^\s*(?:' + complex_ten + r')\s*$', re.I) + + cpdef inline split_complex_string(string, int base=10): + """ +@@ -195,17 +195,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(?P' + sign + ')?\s*(?P' + imaginary + ')' \ +- '(\s*(?P' + sign + ')\s*(?P' + number + '))?)' \ ++ number = r'nan(?:\([0-9A-Z_]*\))?|inf(?:inity)?|' + number ++ imaginary = r'i(?:\s*\*\s*(?:' + number + '))?|(?:' + number + r')\s*\*\s*i' ++ complex = '(?P(?P' + sign + r')?\s*(?P' + imaginary + ')' \ ++ r'(\s*(?P' + sign + r')\s*(?P' + number + '))?)' \ + '|' \ +- '(?P(?P' + sign + ')?\s*(?P' + number + ')' \ +- '(\s*(?P' + sign + ')\s*(?P' + imaginary + '))?)' ++ '(?P(?P' + sign + r')?\s*(?P' + number + ')' \ ++ r'(\s*(?P' + sign + r')\s*(?P' + 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: +@@ -217,18 +217,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' + number + ')', z.expand('\g<' + prefix + '_im_abs>'), re.I) ++ y = re.search('(?P' + number + ')', z.expand(r'\g<' + prefix + '_im_abs>'), re.I) + if y is None: + y = '1' + else: +- y = y.expand('\g') ++ y = y.expand(r'\g') + 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 + +@@ -1725,7 +1725,7 @@ cdef class MPComplexNumber(sage.structur + return z + + def cosh(self): +- """ ++ r""" + Return the hyperbolic cosine of this complex number: + + .. MATH:: +@@ -1745,7 +1745,7 @@ cdef class MPComplexNumber(sage.structur + return z + + def sinh(self): +- """ ++ r""" + Return the hyperbolic sine of this complex number: + + .. MATH:: +@@ -2085,7 +2085,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/complex_number.pyx.orig src/sage/rings/complex_number.pyx +--- src/sage/rings/complex_number.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/complex_number.pyx 2020-02-27 14:09:39.595076646 -0700 +@@ -1714,7 +1714,7 @@ cdef class ComplexNumber(sage.structure. + + # Other special functions + def agm(self, right, algorithm="optimal"): +- """ ++ r""" + Return the Arithmetic-Geometric Mean (AGM) of ``self`` and ``right``. + + INPUT: +diff -up src/sage/rings/finite_rings/element_givaro.pyx.orig src/sage/rings/finite_rings/element_givaro.pyx +--- src/sage/rings/finite_rings/element_givaro.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/element_givaro.pyx 2020-02-27 10:22:04.184449193 -0700 +@@ -1204,7 +1204,7 @@ cdef class FiniteField_givaroElement(Fin + return make_FiniteField_givaroElement(self._cache,r) + + def __pow__(FiniteField_givaroElement self, exp, other): +- """ ++ r""" + EXAMPLES:: + + sage: K. = GF(3^3, 'a') +@@ -1345,7 +1345,7 @@ cdef class FiniteField_givaroElement(Fin + return self_int + + def integer_representation(FiniteField_givaroElement self): +- """ ++ r""" + Return the integer representation of ``self``. When ``self`` is in the + prime subfield, the integer returned is equal to ``self``. + +diff -up src/sage/rings/finite_rings/element_ntl_gf2e.pyx.orig src/sage/rings/finite_rings/element_ntl_gf2e.pyx +--- src/sage/rings/finite_rings/element_ntl_gf2e.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/element_ntl_gf2e.pyx 2020-02-27 10:22:49.535650221 -0700 +@@ -400,7 +400,7 @@ cdef class Cache_ntl_gf2e(SageObject): + raise ValueError("Cannot coerce element %s to this field." % e) + + cpdef FiniteField_ntl_gf2eElement fetch_int(self, number): +- """ ++ r""" + Given an integer less than `p^n` with base `2` + representation `a_0 + a_1 \cdot 2 + \cdots + a_k 2^k`, this returns + `a_0 + a_1 x + \cdots + a_k x^k`, where `x` is the +diff -up src/sage/rings/finite_rings/finite_field_base.pyx.orig src/sage/rings/finite_rings/finite_field_base.pyx +--- src/sage/rings/finite_rings/finite_field_base.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/finite_field_base.pyx 2020-02-27 10:24:14.382155455 -0700 +@@ -959,7 +959,7 @@ cdef class FiniteField(Field): + return self._modulus + + def polynomial(self, name=None): +- """ ++ r""" + Return the minimal polynomial of the generator of ``self`` over + the prime finite field. + +diff -up src/sage/rings/finite_rings/hom_finite_field.pyx.orig src/sage/rings/finite_rings/hom_finite_field.pyx +--- src/sage/rings/finite_rings/hom_finite_field.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/hom_finite_field.pyx 2020-02-27 14:05:34.420471507 -0700 +@@ -147,7 +147,7 @@ cdef class SectionFiniteFieldHomomorphis + + + def _repr_(self): +- """ ++ r""" + Return a string representation of this section. + + EXAMPLES:: +diff -up src/sage/rings/finite_rings/integer_mod.pyx.orig src/sage/rings/finite_rings/integer_mod.pyx +--- src/sage/rings/finite_rings/integer_mod.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/integer_mod.pyx 2020-02-27 10:27:31.196688078 -0700 +@@ -115,7 +115,7 @@ from sage.structure.parent cimport Paren + cdef Integer one_Z = Integer(1) + + def Mod(n, m, parent=None): +- """ ++ r""" + Return the equivalence class of `n` modulo `m` as + an element of `\ZZ/m\ZZ`. + +@@ -1547,7 +1547,7 @@ cdef class IntegerMod_abstract(FiniteRin + return [a for a in self.parent() if a**n == self] + + def _balanced_abs(self): +- """ ++ r""" + This function returns `x` or `-x`, whichever has a + positive representative in `-n/2 < x \leq n/2`. + +@@ -1896,7 +1896,7 @@ cdef class IntegerMod_abstract(FiniteRin + + + cdef class IntegerMod_gmp(IntegerMod_abstract): +- """ ++ r""" + Elements of `\ZZ/n\ZZ` for n not small enough + to be operated on in word size. + +@@ -2185,7 +2185,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs + return long(self.lift()) + + def __pow__(IntegerMod_gmp self, exp, m): # NOTE: m ignored, always use modulus of parent ring +- """ ++ r""" + EXAMPLES:: + + sage: R = Integers(10^10) +@@ -2294,7 +2294,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs + + @coerce_binop + def gcd(self, IntegerMod_gmp other): +- """ ++ r""" + Greatest common divisor + + Returns the "smallest" generator in `\ZZ / N\ZZ` of the ideal +@@ -2327,7 +2327,7 @@ cdef class IntegerMod_gmp(IntegerMod_abs + + + cdef class IntegerMod_int(IntegerMod_abstract): +- """ ++ r""" + Elements of `\ZZ/n\ZZ` for n small enough to + be operated on in 32 bits + +@@ -2948,7 +2948,7 @@ cdef class IntegerMod_int(IntegerMod_abs + + + def _balanced_abs(self): +- """ ++ r""" + This function returns `x` or `-x`, whichever has a + positive representative in `-n/2 < x \leq n/2`. + """ +@@ -2959,7 +2959,7 @@ cdef class IntegerMod_int(IntegerMod_abs + + @coerce_binop + def gcd(self, IntegerMod_int other): +- """ ++ r""" + Greatest common divisor + + Returns the "smallest" generator in `\ZZ / N\ZZ` of the ideal +@@ -3137,7 +3137,7 @@ cdef int jacobi_int(int_fast32_t a, int_ + ###################################################################### + + cdef class IntegerMod_int64(IntegerMod_abstract): +- """ ++ r""" + Elements of `\ZZ/n\ZZ` for n small enough to + be operated on in 64 bits + +@@ -3448,7 +3448,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 +- """ ++ r""" + EXAMPLES:: + + sage: R = Integers(10) +@@ -3596,7 +3596,7 @@ cdef class IntegerMod_int64(IntegerMod_a + return hash(self.ivalue) + + def _balanced_abs(self): +- """ ++ r""" + This function returns `x` or `-x`, whichever has a + positive representative in `-n/2 < x \leq n/2`. + """ +@@ -3607,7 +3607,7 @@ cdef class IntegerMod_int64(IntegerMod_a + + @coerce_binop + def gcd(self, IntegerMod_int64 other): +- """ ++ r""" + Greatest common divisor + + Returns the "smallest" generator in `\ZZ / N\ZZ` of the ideal +diff -up src/sage/rings/finite_rings/residue_field.pyx.orig src/sage/rings/finite_rings/residue_field.pyx +--- src/sage/rings/finite_rings/residue_field.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/finite_rings/residue_field.pyx 2020-02-26 12:24:03.640048006 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Finite residue fields + + We can take the residue field of maximal ideals in the ring of integers +@@ -1808,7 +1808,7 @@ class ResidueFiniteField_ntl_gf2e(Residu + """ + # we change the order for consistency with FiniteField_ntl_gf2e's __cinit__ + def __init__(self, q, name, modulus, repr, p, to_vs, to_order, PB): +- """ ++ r""" + INPUT: + + - ``p`` -- the prime ideal defining this residue field +diff -up src/sage/rings/function_field/element.pyx.orig src/sage/rings/function_field/element.pyx +--- src/sage/rings/function_field/element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/function_field/element.pyx 2020-02-26 14:11:12.803894369 -0700 +@@ -148,7 +148,7 @@ cdef class FunctionFieldElement(FieldEle + raise NotImplementedError("PARI does not support general function field elements.") + + def _latex_(self): +- """ ++ r""" + EXAMPLES:: + + sage: K. = FunctionField(QQ) +diff -up src/sage/rings/function_field/ideal.py.orig src/sage/rings/function_field/ideal.py +--- src/sage/rings/function_field/ideal.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/function_field/ideal.py 2020-02-26 14:10:24.140803564 -0700 +@@ -2166,7 +2166,7 @@ class FunctionFieldIdeal_global(Function + return self.gens_over_base() + + def gens_two(self): +- """ ++ r""" + Return two generators of this fractional ideal. + + If the ideal is principal, one generator *may* be returned. +diff -up src/sage/rings/integer_ring.pyx.orig src/sage/rings/integer_ring.pyx +--- src/sage/rings/integer_ring.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/integer_ring.pyx 2020-02-27 14:00:39.430781027 -0700 +@@ -391,7 +391,7 @@ cdef class IntegerRing_class(PrincipalId + return "\\Bold{Z}" + + def __getitem__(self, x): +- """ ++ r""" + Return the ring `\ZZ[...]` obtained by adjoining to the integers one + or several elements. + +@@ -1143,7 +1143,7 @@ cdef class IntegerRing_class(PrincipalId + return sage.rings.infinity.infinity + + def zeta(self, n=2): +- """ ++ r""" + Return a primitive ``n``-th root of unity in the integers, or raise an + error if none exists. + +diff -up src/sage/rings/laurent_series_ring_element.pyx.orig src/sage/rings/laurent_series_ring_element.pyx +--- src/sage/rings/laurent_series_ring_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/laurent_series_ring_element.pyx 2020-02-27 10:37:46.261850642 -0700 +@@ -86,7 +86,7 @@ def is_LaurentSeries(x): + + + cdef class LaurentSeries(AlgebraElement): +- """ ++ r""" + A Laurent Series. + + We consider a Laurent series of the form `t^n \cdot f` where `f` is a +diff -up src/sage/rings/number_field/number_field_element.pyx.orig src/sage/rings/number_field/number_field_element.pyx +--- src/sage/rings/number_field/number_field_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/number_field/number_field_element.pyx 2020-02-27 14:17:24.733733303 -0700 +@@ -484,7 +484,7 @@ cdef class NumberFieldElement(FieldEleme + return codomain(f(im_gens[0])) + + def _latex_(self): +- """ ++ r""" + Returns the latex representation for this element. + + EXAMPLES:: +@@ -3877,7 +3877,7 @@ cdef class NumberFieldElement(FieldEleme + return ht + + def global_height_non_arch(self, prec=None): +- """ ++ r""" + Returns the total non-archimedean component of the height of self. + + INPUT: +diff -up src/sage/rings/number_field/number_field_element_quadratic.pyx.orig src/sage/rings/number_field/number_field_element_quadratic.pyx +--- src/sage/rings/number_field/number_field_element_quadratic.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/number_field/number_field_element_quadratic.pyx 2020-02-26 12:30:16.381058496 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Optimized Quadratic Number Field Elements + + This file defines a Cython class ``NumberFieldElement_quadratic`` to speed up +@@ -840,7 +840,7 @@ cdef class NumberFieldElement_quadratic( + return res + + def parts(self): +- """ ++ r""" + This function returns a pair of rationals `a` and `b` such that self `= + a+b\sqrt{D}`. + +@@ -1581,7 +1581,7 @@ cdef class NumberFieldElement_quadratic( + ################################################################################# + + def __hash__(self): +- """ ++ r""" + Return hash of this number field element. + + For elements in `\ZZ` or `\QQ` the hash coincides with the one in the +@@ -2015,7 +2015,7 @@ cdef class NumberFieldElement_quadratic( + + + def norm(self, K=None): +- """ ++ r""" + Return the norm of self. If the second argument is None, this is the + norm down to `\QQ`. Otherwise, return the norm down to K (which had + better be either `\QQ` or this number field). +diff -up src/sage/rings/number_field/number_field_morphisms.pyx.orig src/sage/rings/number_field/number_field_morphisms.pyx +--- src/sage/rings/number_field/number_field_morphisms.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/number_field/number_field_morphisms.pyx 2020-02-27 14:15:30.637780730 -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/number_field/totallyreal.pyx.orig src/sage/rings/number_field/totallyreal.pyx +--- src/sage/rings/number_field/totallyreal.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/number_field/totallyreal.pyx 2020-02-26 12:31:22.883761593 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Enumeration of Primitive Totally Real Fields + + This module contains functions for enumerating all primitive +diff -up src/sage/rings/padics/CA_template.pxi.orig src/sage/rings/padics/CA_template.pxi +--- src/sage/rings/padics/CA_template.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/CA_template.pxi 2020-02-27 14:21:45.536053250 -0700 +@@ -392,7 +392,7 @@ cdef class CAElement(pAdicTemplateElemen + + + def __pow__(CAElement self, _right, dummy): +- """ ++ r""" + Exponentiation. + + When ``right`` is divisible by `p` then one can get more +@@ -521,7 +521,7 @@ cdef class CAElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _lshift_c(self, long shift): +- """ ++ r""" + Multiplies by `\pi^{\mbox{shift}}`. + + Negative shifts may truncate the result. +@@ -553,7 +553,7 @@ cdef class CAElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _rshift_c(self, long shift): +- """ ++ r""" + Divides by ``Ï€^{\mbox{shift}}``. + + Positive shifts may truncate the result. +@@ -1611,7 +1611,7 @@ cdef class pAdicCoercion_CA_frac_field(R + + + cdef class pAdicConvert_CA_frac_field(Morphism): +- """ ++ r""" + The section of the inclusion from `\ZZ_q`` to its fraction field. + + EXAMPLES:: +diff -up src/sage/rings/padics/CR_template.pxi.orig src/sage/rings/padics/CR_template.pxi +--- src/sage/rings/padics/CR_template.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/CR_template.pxi 2020-02-27 14:20:48.003085660 -0700 +@@ -720,7 +720,7 @@ cdef class CRElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _lshift_c(self, long shift): +- """ ++ r""" + Multiplies by `\pi^{\mbox{shift}}`. + + Negative shifts may truncate the result if the parent is not a +@@ -751,7 +751,7 @@ cdef class CRElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _rshift_c(self, long shift): +- """ ++ r""" + Divides by ``\pi^{\mbox{shift}}``. + + Positive shifts may truncate the result if the parent is not a +@@ -2338,7 +2338,7 @@ cdef class pAdicCoercion_CR_frac_field(R + + + cdef class pAdicConvert_CR_frac_field(Morphism): +- """ ++ r""" + The section of the inclusion from `\ZZ_q`` to its fraction field. + + EXAMPLES:: +diff -up src/sage/rings/padics/FM_template.pxi.orig src/sage/rings/padics/FM_template.pxi +--- src/sage/rings/padics/FM_template.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/FM_template.pxi 2020-02-27 14:30:07.794033635 -0700 +@@ -381,7 +381,7 @@ cdef class FMElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _lshift_c(self, long shift): +- """ ++ r""" + Multiplies self by `\pi^{shift}`. + + If shift < -self.valuation(), digits will be truncated. See +@@ -428,7 +428,7 @@ cdef class FMElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _rshift_c(self, long shift): +- """ ++ r""" + Divides by `\pi^{shift}`, and truncates. + + Note that this operation will insert arbitrary digits (in +@@ -462,7 +462,7 @@ cdef class FMElement(pAdicTemplateElemen + return ans + + def add_bigoh(self, absprec): +- """ ++ r""" + Returns a new element truncated modulo `\pi^{\mbox{absprec}}`. + + INPUT: +diff -up src/sage/rings/padics/FP_template.pxi.orig src/sage/rings/padics/FP_template.pxi +--- src/sage/rings/padics/FP_template.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/FP_template.pxi 2020-02-27 14:27:17.166102208 -0700 +@@ -653,7 +653,7 @@ cdef class FPElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _lshift_c(self, long shift): +- """ ++ r""" + Multiplies self by `\pi^{shift}`. + + Negative shifts may truncate the result if the parent is not a +@@ -706,7 +706,7 @@ cdef class FPElement(pAdicTemplateElemen + return ans + + cdef pAdicTemplateElement _rshift_c(self, long shift): +- """ ++ r""" + Divides by `\pi^{shift}`. + + Positive shifts may truncate the result if the parent is not a +@@ -782,7 +782,7 @@ cdef class FPElement(pAdicTemplateElemen + return self.parent()._printer.repr_gen(self, do_latex, mode=mode) + + def add_bigoh(self, absprec): +- """ ++ r""" + Returns a new element truncated modulo `\pi^{\mbox{absprec}}`. + + INPUT: +diff -up src/sage/rings/padics/local_generic_element.pyx.orig src/sage/rings/padics/local_generic_element.pyx +--- src/sage/rings/padics/local_generic_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/local_generic_element.pyx 2020-02-27 10:40:29.052964694 -0700 +@@ -355,7 +355,7 @@ cdef class LocalGenericElement(Commutati + return ans + + def _latex_(self): +- """ ++ r""" + Returns a latex representation of self. + + EXAMPLES:: +diff -up src/sage/rings/padics/morphism.pyx.orig src/sage/rings/padics/morphism.pyx +--- src/sage/rings/padics/morphism.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/morphism.pyx 2020-02-27 14:31:55.331074487 -0700 +@@ -280,7 +280,7 @@ cdef class FrobeniusEndomorphism_padics( + + + def __hash__(self): +- """ ++ r""" + Return a hash of this morphism. + + It is the hash of ``(domain, codomain, ('Frob', power)`` +diff -up src/sage/rings/padics/padic_capped_absolute_element.pyx.orig src/sage/rings/padics/padic_capped_absolute_element.pyx +--- src/sage/rings/padics/padic_capped_absolute_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_capped_absolute_element.pyx 2020-02-27 10:48:47.499131689 -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_capped_relative_element.pyx.orig src/sage/rings/padics/padic_capped_relative_element.pyx +--- src/sage/rings/padics/padic_capped_relative_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_capped_relative_element.pyx 2020-02-27 10:45:06.545045373 -0700 +@@ -250,7 +250,7 @@ cdef class pAdicCappedRelativeElement(CR + return self.lift_c() + + def residue(self, absprec=1, field=None, check_prec=True): +- """ ++ r""" + Reduces this element modulo `p^{\mathrm{absprec}}`. + + INPUT: +@@ -436,7 +436,7 @@ cdef class pAdicCappedRelativeElement(CR + 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`. +@@ -498,7 +498,7 @@ cdef class pAdicCappedRelativeElement(CR + 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_ext_element.pyx.orig src/sage/rings/padics/padic_ext_element.pyx +--- src/sage/rings/padics/padic_ext_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_ext_element.pyx 2020-02-26 12:37:01.119373785 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + p-Adic Extension Element + + A common superclass for all elements of extension rings and field of `\ZZ_p` and +diff -up src/sage/rings/padics/padic_fixed_mod_element.pyx.orig src/sage/rings/padics/padic_fixed_mod_element.pyx +--- src/sage/rings/padics/padic_fixed_mod_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_fixed_mod_element.pyx 2020-02-27 10:47:41.918293107 -0700 +@@ -157,7 +157,7 @@ cdef class pAdicFixedModElement(FMElemen + return self.lift_c() + + cdef lift_c(self): +- """ ++ r""" + Returns an integer congruent to this element modulo the precision. + + .. WARNING:: +@@ -227,7 +227,7 @@ cdef class pAdicFixedModElement(FMElemen + holder.value) + + def _integer_(self, Z=None): +- """ ++ r""" + Return an integer congruent to ``self`` modulo the precision. + + .. WARNING:: +@@ -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_floating_point_element.pyx.orig src/sage/rings/padics/padic_floating_point_element.pyx +--- src/sage/rings/padics/padic_floating_point_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_floating_point_element.pyx 2020-02-27 10:46:09.415931306 -0700 +@@ -238,7 +238,7 @@ cdef class pAdicFloatingPointElement(FPE + return self.lift_c() + + def residue(self, absprec=1, field=None, check_prec=False): +- """ ++ r""" + Reduces this element modulo `p^{\mathrm{absprec}}`. + + INPUT: +@@ -321,7 +321,7 @@ cdef class pAdicFloatingPointElement(FPE + return Mod(selfvalue, modulus) + + def _exp_binary_splitting(self, aprec): +- """ ++ r""" + Compute the exponential power series of this element + + This is a helper method for :meth:`exp`. +@@ -382,7 +382,7 @@ cdef class pAdicFloatingPointElement(FPE + 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 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_generic_element.pyx 2020-02-27 10:43:44.418501293 -0700 +@@ -543,7 +543,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: +@@ -3039,7 +3039,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`. +@@ -3085,7 +3085,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`. +@@ -3763,7 +3763,7 @@ cdef class pAdicGenericElement(LocalGene + return parent(root) + + def _inverse_pth_root(self, twist=None, hint=None): +- """ ++ r""" + In its simplest form, computes the inverse of + ``p``-th root of this element. + +@@ -4106,7 +4106,7 @@ cdef class pAdicGenericElement(LocalGene + return (H[n](z - 1) - ((z.log(0))**(n-1)*(1 - z).log(0))/Integer(n-1).factorial()).add_bigoh(N) + + def polylog(self, n): +- """ ++ r""" + Return `Li_n(self)` , the `n`th `p`-adic polylogarithm of this element. + + INPUT: +@@ -4359,7 +4359,7 @@ def _polylog_c(n, p): + return p/(p-1) - (n-1)/p.log() + (n-1)*(n*(p-1)/p.log()).log(p) + (2*p*(p-1)*n/p.log()).log(p) + + def _findprec(c_1, c_2, c_3, p): +- """ ++ r""" + Return an integer k such that c_1*k - c_2*log_p(k) > c_3. + This is an internal function, used by :meth:`polylog`. + +@@ -4389,7 +4389,7 @@ def _findprec(c_1, c_2, c_3, p): + k += 1 + + def _compute_g(p, n, prec, terms): +- """ ++ r""" + Return the list of power series `g_i = \int(-g_{i-1}/(v-v^2))` used in the computation of polylogarithms. + This is an internal function, used by :meth:`polylog`. + +diff -up src/sage/rings/padics/padic_template_element.pxi.orig src/sage/rings/padics/padic_template_element.pxi +--- src/sage/rings/padics/padic_template_element.pxi.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_template_element.pxi 2020-02-27 10:49:59.029864892 -0700 +@@ -612,7 +612,7 @@ cdef class pAdicTemplateElement(pAdicGen + return trim_zeros(list(self.unit_part().expansion(lift_mode='smallest'))) + + cpdef pAdicTemplateElement unit_part(self): +- """ ++ r""" + Returns the unit part of this element. + + This is the `p`-adic element `u` in the same ring so that this +diff -up src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx.orig src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx +--- src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_ZZ_pX_CA_element.pyx 2020-02-26 12:41:30.300414798 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + `p`-Adic ``ZZ_pX`` CA Element + + This file implements elements of Eisenstein and unramified extensions +@@ -1539,7 +1539,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXE + return self.to_fraction_field() * (~right) + + def _integer_(self, Z=None): +- """ ++ r""" + Returns an integer congruent to this element modulo + `\pi`^``self.absolute_precision()``, if possible. + +@@ -1935,7 +1935,7 @@ cdef class pAdicZZpXCAElement(pAdicZZpXE + return [zero] * ordp + ulist + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx.orig src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx +--- src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_ZZ_pX_CR_element.pyx 2020-02-26 12:40:01.838037825 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + `p`-Adic ``ZZ_pX`` CR Element + + This file implements elements of Eisenstein and unramified extensions +@@ -224,7 +224,7 @@ cdef inline int check_ordp(long a) excep + + cdef class pAdicZZpXCRElement(pAdicZZpXElement): + def __init__(self, parent, x, absprec = infinity, relprec = infinity, empty = False): +- """ ++ r""" + Creates an element of a capped relative precision, unramified + or Eisenstein extension of `\ZZ_p` or `\QQ_p`. + +@@ -2298,7 +2298,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXE + return ans + + def _integer_(self, Z=None): +- """ ++ r""" + Return an integer congruent to this element modulo + `\pi`^``self.absolute_precision()``, if possible + +@@ -2796,7 +2796,7 @@ cdef class pAdicZZpXCRElement(pAdicZZpXE + return ulist + + def matrix_mod_pn(self): +- """ ++ r""" + Return the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/padics/padic_ZZ_pX_element.pyx.orig src/sage/rings/padics/padic_ZZ_pX_element.pyx +--- src/sage/rings/padics/padic_ZZ_pX_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_ZZ_pX_element.pyx 2020-02-26 12:38:14.111019390 -0700 +@@ -344,7 +344,7 @@ cdef class pAdicZZpXElement(pAdicExtElem + return ans + + def norm(self, base=None): +- """ ++ r""" + Return the absolute or relative norm of this element. + + NOTE! This is not the `p`-adic absolute value. This is a +@@ -420,7 +420,7 @@ cdef class pAdicZZpXElement(pAdicExtElem + return self.parent().ground_ring()(self.unit_part().matrix_mod_pn().det()) * norm_of_uniformizer**self.valuation() + + def trace(self, base = None): +- """ ++ r""" + Return the absolute or relative trace of this element. + + If ``base`` is given then ``base`` must be a subfield of the +diff -up src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx +--- src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/padic_ZZ_pX_FM_element.pyx 2020-02-26 12:43:41.091000479 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + `p`-Adic ``ZZ_pX`` FM Element + + This file implements elements of Eisenstein and unramified extensions +@@ -149,7 +149,7 @@ from sage.rings.padics.pow_computer_ext + + cdef class pAdicZZpXFMElement(pAdicZZpXElement): + def __init__(self, parent, x, absprec=None, relprec=None, empty=False): +- """ ++ r""" + Creates an element of a fixed modulus, unramified or + eisenstein extension of `\ZZ_p` or `\QQ_p`. + +@@ -902,7 +902,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE + return ans + + def add_bigoh(self, absprec): +- """ ++ r""" + Return a new element truncated modulo \pi^absprec. + + This is only implemented for unramified extension at +@@ -949,7 +949,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE + return ans + + def _integer_(self, Z=None): +- """ ++ r""" + Returns an integer congruent to this element modulo + `\pi` ^ ``self.absolute_precision()``, if possible. + +@@ -980,7 +980,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE + return ans + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the \emph{rows} of this matrix give the +@@ -1041,7 +1041,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE + # raise NotImplementedError + + def norm(self, base = None): +- """ ++ r""" + Return the absolute or relative norm of this element. + + NOTE! This is not the `p`-adic absolute value. This is a +@@ -1078,7 +1078,7 @@ cdef class pAdicZZpXFMElement(pAdicZZpXE + return self.parent().ground_ring()(self.unit_part().matrix_mod_pn().det()) * norm_of_uniformizer**self.valuation() + + def trace(self, base = None): +- """ ++ r""" + Return the absolute or relative trace of this element. + + If `K` is given then `K` must be a subfield of the parent `L` of +diff -up src/sage/rings/padics/pow_computer_ext.pyx.orig src/sage/rings/padics/pow_computer_ext.pyx +--- src/sage/rings/padics/pow_computer_ext.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/pow_computer_ext.pyx 2020-02-27 14:23:35.369082319 -0700 +@@ -1248,7 +1248,7 @@ cdef class PowComputer_ZZ_pX(PowComputer + return 0 + + cdef class PowComputer_ZZ_pX_FM(PowComputer_ZZ_pX): +- """ ++ r""" + This class only caches a context and modulus for p^prec_cap. + + Designed for use with fixed modulus p-adic rings, in Eisenstein +diff -up src/sage/rings/padics/qadic_flint_CA.pyx.orig src/sage/rings/padics/qadic_flint_CA.pyx +--- src/sage/rings/padics/qadic_flint_CA.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/qadic_flint_CA.pyx 2020-02-27 14:24:22.319239812 -0700 +@@ -27,7 +27,7 @@ cdef class qAdicCappedAbsoluteElement(CA + norm = norm_unram + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/padics/qadic_flint_CR.pyx.orig src/sage/rings/padics/qadic_flint_CR.pyx +--- src/sage/rings/padics/qadic_flint_CR.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/qadic_flint_CR.pyx 2020-02-27 14:28:41.772583958 -0700 +@@ -27,7 +27,7 @@ cdef class qAdicCappedRelativeElement(CR + norm = norm_unram + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/padics/qadic_flint_FM.pyx.orig src/sage/rings/padics/qadic_flint_FM.pyx +--- src/sage/rings/padics/qadic_flint_FM.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/qadic_flint_FM.pyx 2020-02-27 14:29:11.364052944 -0700 +@@ -27,7 +27,7 @@ cdef class qAdicFixedModElement(FMElemen + norm = norm_unram + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/padics/qadic_flint_FP.pyx.orig src/sage/rings/padics/qadic_flint_FP.pyx +--- src/sage/rings/padics/qadic_flint_FP.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/padics/qadic_flint_FP.pyx 2020-02-27 14:25:28.424053567 -0700 +@@ -27,7 +27,7 @@ cdef class qAdicFloatingPointElement(FPE + norm = norm_unram + + def matrix_mod_pn(self): +- """ ++ r""" + Returns the matrix of right multiplication by the element on + the power basis `1, x, x^2, \ldots, x^{d-1}` for this + extension field. Thus the *rows* of this matrix give the +diff -up src/sage/rings/polynomial/cyclotomic.pyx.orig src/sage/rings/polynomial/cyclotomic.pyx +--- src/sage/rings/polynomial/cyclotomic.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/cyclotomic.pyx 2020-02-27 14:43:20.186376927 -0700 +@@ -193,7 +193,7 @@ def cyclotomic_coeffs(nn, sparse=None): + return L + + def cyclotomic_value(n, x): +- """ ++ r""" + Return the value of the `n`-th cyclotomic polynomial evaluated at `x`. + + INPUT: +diff -up src/sage/rings/polynomial/laurent_polynomial.pyx.orig src/sage/rings/polynomial/laurent_polynomial.pyx +--- src/sage/rings/polynomial/laurent_polynomial.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/laurent_polynomial.pyx 2020-02-27 14:42:24.611430268 -0700 +@@ -237,7 +237,7 @@ cdef class LaurentPolynomial(Commutative + + + cdef class LaurentPolynomial_univariate(LaurentPolynomial): +- """ ++ r""" + A univariate Laurent polynomial in the form of `t^n \cdot f` + where `f` is a polynomial in `t`. + +diff -up src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig src/sage/rings/polynomial/multi_polynomial_libsingular.pyx +--- src/sage/rings/polynomial/multi_polynomial_libsingular.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/multi_polynomial_libsingular.pyx 2020-02-26 12:49:19.224880230 -0700 +@@ -2075,7 +2075,7 @@ cdef class MPolynomial_libsingular(MPoly + return new_MP(P, _p) + + def __call__(self, *x, **kwds): +- """ ++ r""" + Evaluate this multi-variate polynomial at ``x``, where ``x`` + is either the tuple of values to substitute in, or one can use + functional notation ``f(a_0,a_1,a_2, \ldots)`` to evaluate +@@ -2344,7 +2344,7 @@ cdef class MPolynomial_libsingular(MPoly + return new_MP((left)._parent,_p) + + cpdef _div_(left, right_ringelement): +- """ ++ r""" + Divide left by right + + EXAMPLES:: +@@ -2559,7 +2559,7 @@ cdef class MPolynomial_libsingular(MPoly + return char_to_str(s) + + def _latex_(self): +- """ ++ r""" + Return a polynomial LaTeX representation of this polynomial. + + EXAMPLES:: +@@ -4500,7 +4500,7 @@ cdef class MPolynomial_libsingular(MPoly + return Sequence(l, check=False, immutable=True) + + def reduce(self,I): +- """ ++ r""" + Return a remainder of this polynomial modulo the + polynomials in ``I``. + +@@ -5219,7 +5219,7 @@ cdef class MPolynomial_libsingular(MPoly + return new_MP(self._parent,p) + + def integral(self, MPolynomial_libsingular var): +- """ ++ r""" + Integrates this polynomial with respect to the provided + variable. + +diff -up src/sage/rings/polynomial/multi_polynomial.pyx.orig src/sage/rings/polynomial/multi_polynomial.pyx +--- src/sage/rings/polynomial/multi_polynomial.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/multi_polynomial.pyx 2020-02-27 11:00:30.479716969 -0700 +@@ -209,7 +209,7 @@ cdef class MPolynomial(CommutativeRingEl + return R([self]) + + def coefficients(self): +- """ ++ r""" + Return the nonzero coefficients of this polynomial in a list. + The returned list is decreasingly ordered by the term ordering + of ``self.parent()``, i.e. the list of coefficients matches the list +@@ -1224,7 +1224,7 @@ cdef class MPolynomial(CommutativeRingEl + return R(dict([(k,f(v)) for (k,v) in self.dict().items()])) + + def _norm_over_nonprime_finite_field(self): +- """ ++ r""" + Given a multivariate polynomial over a nonprime finite field + `\GF{p**e}`, compute the norm of the polynomial down to `\GF{p}`, which + is the product of the conjugates by the Frobenius action on +diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbori.pyx +--- src/sage/rings/polynomial/pbori.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/pbori.pyx 2020-02-27 10:58:59.991311061 -0700 +@@ -1362,7 +1362,7 @@ cdef class BooleanPolynomialRing(MPolyno + return R + + def defining_ideal(self): +- """ ++ r""" + Return `I = \subset R` where ``R = + self.cover_ring()``, and `x_i` any element in the set of + variables of this ring. +diff -up src/sage/rings/polynomial/plural.pyx.orig src/sage/rings/polynomial/plural.pyx +--- src/sage/rings/polynomial/plural.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/plural.pyx 2020-02-26 12:46:32.801795133 -0700 +@@ -250,7 +250,7 @@ cdef class NCPolynomialRing_plural(Ring) + + """ + def __init__(self, base_ring, names, c, d, order, category, check=True): +- """ ++ r""" + Construct a noncommutative polynomial G-algebra subject to the following conditions: + + INPUT: +diff -up src/sage/rings/polynomial/polynomial_element.pyx.orig src/sage/rings/polynomial/polynomial_element.pyx +--- src/sage/rings/polynomial/polynomial_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/polynomial_element.pyx 2020-02-27 10:56:29.731958111 -0700 +@@ -2654,8 +2654,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" +@@ -2755,7 +2755,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 +@@ -4795,7 +4795,7 @@ cdef class Polynomial(CommutativeAlgebra + return ~(q.leading_coefficient())*q # make monic (~ is inverse in python) + + def is_primitive(self, n=None, n_prime_divs=None): +- """ ++ r""" + Return ``True`` if the polynomial is primitive. The semantics of + "primitive" depend on the polynomial coefficients. + +@@ -6385,8 +6385,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 +- multiplied by `\\alpha_1^{deg(p_2)} \\alpha_2^{deg(p_1)}` where +- `\\alpha_1` and `\\alpha_2` are the leading coefficients of `p_1` and ++ multiplied by `\alpha_1^{deg(p_2)} \alpha_2^{deg(p_1)}` where ++ `\alpha_1` and `\alpha_2` are the leading coefficients of `p_1` and + `p_2` respectively. + + INPUT: +diff -up src/sage/rings/polynomial/polynomial_gf2x.pyx.orig src/sage/rings/polynomial/polynomial_gf2x.pyx +--- src/sage/rings/polynomial/polynomial_gf2x.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/polynomial_gf2x.pyx 2020-02-27 14:35:51.159778076 -0700 +@@ -101,7 +101,7 @@ cdef class Polynomial_GF2X(Polynomial_te + return pari(self.list()).Polrev(variable) * pari(1).Mod(2) + + def modular_composition(Polynomial_GF2X self, Polynomial_GF2X g, Polynomial_GF2X h, algorithm=None): +- """ ++ r""" + Compute `f(g) \pmod h`. + + Both implementations use Brent-Kung's Algorithm 2.1 (*Fast Algorithms +diff -up src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx +--- src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/polynomial_integer_dense_flint.pyx 2020-02-27 14:40:21.060772018 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Dense univariate polynomials over `\ZZ`, implemented using FLINT. + + AUTHORS: +@@ -1350,7 +1350,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/polynomial_modn_dense_ntl.pyx.orig src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx +--- src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/polynomial_modn_dense_ntl.pyx 2020-02-27 14:36:40.134885830 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Dense univariate polynomials over `\ZZ/n\ZZ`, implemented using NTL. + + This implementation is generally slower than the FLINT implementation in +diff -up src/sage/rings/polynomial/polynomial_zmod_flint.pyx.orig src/sage/rings/polynomial/polynomial_zmod_flint.pyx +--- src/sage/rings/polynomial/polynomial_zmod_flint.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/polynomial_zmod_flint.pyx 2020-02-27 14:40:56.729095964 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Dense univariate polynomials over `\ZZ/n\ZZ`, implemented using FLINT. + + This module gives a fast implementation of `(\ZZ/n\ZZ)[x]` whenever `n` is at +diff -up src/sage/rings/polynomial/real_roots.pyx.orig src/sage/rings/polynomial/real_roots.pyx +--- src/sage/rings/polynomial/real_roots.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/real_roots.pyx 2020-02-27 14:38:08.079283628 -0700 +@@ -1252,7 +1252,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 +@@ -2142,7 +2142,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/polynomial/skew_polynomial_element.pyx.orig src/sage/rings/polynomial/skew_polynomial_element.pyx +--- src/sage/rings/polynomial/skew_polynomial_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/skew_polynomial_element.pyx 2020-02-27 11:01:57.406185634 -0700 +@@ -1649,8 +1649,8 @@ cdef class SkewPolynomial(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/symmetric_reduction.pyx.orig src/sage/rings/polynomial/symmetric_reduction.pyx +--- src/sage/rings/polynomial/symmetric_reduction.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/polynomial/symmetric_reduction.pyx 2020-02-27 10:57:19.593079736 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Symmetric Reduction of Infinite Polynomials + + :class:`~sage.rings.polynomial.symmetric_reduction.SymmetricReductionStrategy` +diff -up src/sage/rings/quotient_ring.py.orig src/sage/rings/quotient_ring.py +--- src/sage/rings/quotient_ring.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/quotient_ring.py 2020-02-26 12:35:50.055692397 -0700 +@@ -1298,7 +1298,7 @@ class QuotientRing_generic(QuotientRing_ + QuotientRing_nc.__init__(self, R, I, names, category=category) + + def _macaulay2_init_(self, macaulay2=None): +- """ ++ r""" + EXAMPLES: + + Quotients of multivariate polynomial rings over `\QQ`, `\ZZ` and +diff -up src/sage/rings/rational.pyx.orig src/sage/rings/rational.pyx +--- src/sage/rings/rational.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/rational.pyx 2020-02-26 12:26:09.151654850 -0700 +@@ -1719,7 +1719,7 @@ cdef class Rational(sage.structure.eleme + return self.numer().squarefree_part() * self.denom().squarefree_part() + + def is_padic_square(self, p, check=True): +- """ ++ r""" + Determines whether this rational number is a square in `\QQ_p` (or in + `R` when ``p = infinity``). + +diff -up src/sage/rings/real_arb.pyx.orig src/sage/rings/real_arb.pyx +--- src/sage/rings/real_arb.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/real_arb.pyx 2020-02-27 10:39:29.670017427 -0700 +@@ -234,7 +234,7 @@ from sage.structure.unique_representatio + from sage.cpython.string cimport char_to_str, str_to_bytes + + cdef void mpfi_to_arb(arb_t target, const mpfi_t source, const long precision): +- """ ++ r""" + Convert an MPFI interval to an Arb ball. + + INPUT: +@@ -278,7 +278,7 @@ cdef void mpfi_to_arb(arb_t target, cons + mpfr_clear(right) + + cdef int arb_to_mpfi(mpfi_t target, arb_t source, const long precision) except -1: +- """ ++ r""" + Convert an Arb ball to an MPFI interval. + + INPUT: +@@ -771,7 +771,7 @@ class RealBallField(UniqueRepresentation + # Ball functions of non-ball arguments + + def sinpi(self, x): +- """ ++ r""" + Return a ball enclosing `\sin(\pi x)`. + + This works even if ``x`` itself is not a ball, and may be faster or +@@ -817,7 +817,7 @@ class RealBallField(UniqueRepresentation + return res + + def cospi(self, x): +- """ ++ r""" + Return a ball enclosing `\cos(\pi x)`. + + This works even if ``x`` itself is not a ball, and may be faster or +@@ -2912,7 +2912,7 @@ cdef class RealBall(RingElement): + return res + + def sqrt1pm1(self): +- """ ++ r""" + Return `\sqrt{1+\mathrm{self}}-1`, computed accurately when ``self`` is + close to zero. + +@@ -3493,7 +3493,7 @@ cdef class RealBall(RingElement): + return res + + def rising_factorial(self, n): +- """ ++ r""" + Return the ``n``-th rising factorial of this ball. + + The `n`-th rising factorial of `x` is equal to `x (x+1) \cdots (x+n-1)`. +@@ -3595,7 +3595,7 @@ cdef class RealBall(RingElement): + return res + + def polylog(self, s): +- """ ++ r""" + Return the polylogarithm `\operatorname{Li}_s(\mathrm{self})`. + + EXAMPLES:: +diff -up src/sage/rings/real_double.pyx.orig src/sage/rings/real_double.pyx +--- src/sage/rings/real_double.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/real_double.pyx 2020-02-27 10:18:35.746129544 -0700 +@@ -2079,7 +2079,7 @@ cdef class RealDoubleElement(FieldElemen + return a + + def log(self, base=None): +- """ ++ r""" + Return the logarithm. + + INPUT: +@@ -2255,7 +2255,7 @@ cdef class RealDoubleElement(FieldElemen + return a + + def exp2(self): +- """ ++ r""" + Return `2^\mathtt{self}`. + + EXAMPLES:: +diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx +--- src/sage/rings/real_mpfi.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/real_mpfi.pyx 2020-02-27 10:14:36.381371499 -0700 +@@ -1307,7 +1307,7 @@ cdef class RealIntervalFieldElement(Ring + return self.str(10) + + def _latex_(self): +- """ ++ r""" + Return a latex representation of ``self``. + + EXAMPLES:: +@@ -4406,7 +4406,7 @@ cdef class RealIntervalFieldElement(Ring + return x + + def exp2(self): +- """ ++ r""" + Returns `2^\mathtt{self}` + + EXAMPLES:: +diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx +--- src/sage/rings/real_mpfr.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/real_mpfr.pyx 2020-02-27 10:16:40.188177426 -0700 +@@ -3896,7 +3896,7 @@ cdef class RealNumber(sage.structure.ele + return mpfr_inf_p(self.value) and mpfr_sgn(self.value) < 0 + + def is_infinity(self): +- """ ++ r""" + Return ``True`` if ``self`` is `\infty` and ``False`` otherwise. + + EXAMPLES:: +diff -up src/sage/rings/semirings/tropical_semiring.pyx.orig src/sage/rings/semirings/tropical_semiring.pyx +--- src/sage/rings/semirings/tropical_semiring.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/semirings/tropical_semiring.pyx 2020-02-27 11:04:01.364022751 -0700 +@@ -99,7 +99,7 @@ cdef class TropicalSemiringElement(Eleme + return repr(self._val) + + def _latex_(self): +- """ ++ r""" + Return a latex representation of ``self``. + + EXAMPLES:: +@@ -135,7 +135,7 @@ cdef class TropicalSemiringElement(Eleme + + # Comparisons + cpdef _richcmp_(left, right, int op): +- """ ++ r""" + Return the standard comparison of ``left`` and ``right``. + + EXAMPLES:: +@@ -259,7 +259,7 @@ cdef class TropicalSemiringElement(Eleme + return x + + def __neg__(self): +- """ ++ r""" + Return the additive inverse, which only exists for `\infty`. + + EXAMPLES:: +@@ -610,7 +610,7 @@ class TropicalSemiring(Parent, UniqueRep + + @cached_method + def zero(self): +- """ ++ r""" + Return the (tropical) additive identity element `+\infty`. + + EXAMPLES:: +diff -up src/sage/rings/tate_algebra_element.pyx.orig src/sage/rings/tate_algebra_element.pyx +--- src/sage/rings/tate_algebra_element.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/rings/tate_algebra_element.pyx 2020-02-27 14:14:01.439381378 -0700 +@@ -1521,7 +1521,7 @@ cdef class TateAlgebraElement(Commutativ + return True + + def __pow__(self, exponent, modulus): +- """ ++ r""" + Return this element raised to the power ``exponent``. + + INPUT: +@@ -2433,7 +2433,7 @@ cdef class TateAlgebraElement(Commutativ + return self._prec - self.valuation() + + def log(self, prec=None): +- """ ++ r""" + Return the logarithm of this series. + + INPUT: +@@ -2590,7 +2590,7 @@ cdef class TateAlgebraElement(Commutativ + return total.add_bigoh(aprec) + + def exp(self, prec=None): +- """ ++ r""" + Return the exponential of this series. + + INPUT: +@@ -3343,7 +3343,7 @@ cdef class TateAlgebraElement(Commutativ + + @coerce_binop + def Spoly(self, other): +- """ ++ r""" + Return the S-polynomial of this series and ``other``. + + INPUT: +diff -up src/sage/structure/coerce_maps.pyx.orig src/sage/structure/coerce_maps.pyx +--- src/sage/structure/coerce_maps.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/structure/coerce_maps.pyx 2020-02-27 11:52:18.843646230 -0700 +@@ -312,7 +312,7 @@ cdef class NamedConvertMap(Map): + + cdef class CallableConvertMap(Map): + def __init__(self, domain, codomain, func, parent_as_first_arg=None): +- """ ++ r""" + This lets one easily create maps from any callable object. + + This is especially useful to create maps from bound methods. +diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx +--- src/sage/symbolic/expression.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/symbolic/expression.pyx 2020-02-27 09:30:14.669819391 -0700 +@@ -610,7 +610,7 @@ cdef class Expression(CommutativeRingEle + return new_Expression_from_GEx(self._parent, self._gobj) + + def _repr_(self): +- """ ++ r""" + Return string representation of this symbolic expression. + + EXAMPLES:: +@@ -3632,7 +3632,7 @@ cdef class Expression(CommutativeRingEle + return 1/self + + cpdef int _cmp_(left, right) except -2: +- """ ++ r""" + Compare self and right, returning -1, 0, or 1, depending on if + self < right, self == right, or self > right, respectively. + +@@ -3868,7 +3868,7 @@ cdef class Expression(CommutativeRingEle + return print_order_compare_mul(left._gobj, right._gobj) + + cpdef _pow_(self, other): +- """ ++ r""" + Return ``self`` raised to the power ``other``. + + OUTPUT: a symbolic expression +@@ -4743,7 +4743,7 @@ cdef class Expression(CommutativeRingEle + expand_rational = rational_expand = expand + + def expand_trig(self, full=False, half_angles=False, plus=True, times=True): +- """ ++ r""" + Expand trigonometric and hyperbolic functions of sums of angles + and of multiple angles occurring in self. For best results, self + should already be expanded. +@@ -7263,7 +7263,7 @@ cdef class Expression(CommutativeRingEle + return new_Expression_from_GEx(self._parent, x) + + def gosper_term(self, n): +- """ ++ r""" + Return Gosper's hypergeometric term for ``self``. + + Suppose ``f``=``self`` is a hypergeometric term such that: +diff -up src/sage/symbolic/function.pyx.orig src/sage/symbolic/function.pyx +--- src/sage/symbolic/function.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/symbolic/function.pyx 2020-02-27 15:06:07.634817327 -0700 +@@ -1565,7 +1565,7 @@ cdef class DeprecatedSFunction(SymbolicF + evalf_params_first, pickled_functions)) + + def __setstate__(self, state): +- """ ++ r""" + EXAMPLES:: + + sage: from sage.symbolic.function import DeprecatedSFunction +diff -up src/sage/symbolic/ring.pyx.orig src/sage/symbolic/ring.pyx +--- src/sage/symbolic/ring.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/symbolic/ring.pyx 2020-02-27 15:08:09.648492686 -0700 +@@ -86,7 +86,7 @@ cdef class SymbolicRing(CommutativeRing) + return "Symbolic Ring" + + def _latex_(self): +- """ ++ r""" + Return latex representation of the symbolic ring. + + EXAMPLES:: +@@ -476,7 +476,7 @@ cdef class SymbolicRing(CommutativeRing) + return new_Expression_from_GEx(self, exp) + + def wild(self, unsigned int n=0): +- """ ++ r""" + Return the n-th wild-card for pattern matching and substitution. + + INPUT: +@@ -728,7 +728,7 @@ cdef class SymbolicRing(CommutativeRing) + return e + + def var(self, name, latex_name=None, n=None, domain=None): +- """ ++ r""" + Return a symbolic variable as an element of the symbolic ring. + + INPUT: +@@ -913,7 +913,7 @@ cdef class SymbolicRing(CommutativeRing) + return ccrepr(x._gobj) + + def _latex_element_(self, Expression x): +- """ ++ r""" + Returns the standard LaTeX version of the expression *x*. + + EXAMPLES:: +diff -up src/sage/symbolic/series.pyx.orig src/sage/symbolic/series.pyx +--- src/sage/symbolic/series.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/symbolic/series.pyx 2020-02-27 15:06:54.249929204 -0700 +@@ -1,4 +1,4 @@ +-""" ++r""" + Symbolic Series + + Symbolic series are special kinds of symbolic expressions that are diff --git a/sagemath-extensions.patch b/sagemath-extensions.patch index 08a18f0..22f1416 100644 --- a/sagemath-extensions.patch +++ b/sagemath-extensions.patch @@ -1,5 +1,6 @@ ---- src/module_list.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/module_list.py 2020-01-06 20:27:37.840293653 -0700 +diff -up src/module_list.py.orig src/module_list.py +--- src/module_list.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/module_list.py 2020-02-25 13:38:22.980350735 -0700 @@ -389,16 +389,16 @@ ext_modules = [ Extension('sage.graphs.matchpoly', sources = ['sage/graphs/matchpoly.pyx']), @@ -35,7 +36,7 @@ Extension('sage.graphs.spanning_tree', sources = ['sage/graphs/spanning_tree.pyx']), -@@ -476,9 +475,9 @@ ext_modules = [ +@@ -479,9 +478,9 @@ ext_modules = [ ## ################################ @@ -47,7 +48,7 @@ Extension('*', ['sage/interfaces/*.pyx']), -@@ -497,21 +496,19 @@ ext_modules = [ +@@ -500,21 +499,19 @@ ext_modules = [ ## ################################ @@ -74,7 +75,7 @@ Extension('sage.libs.flint.flint', sources = ["sage/libs/flint/flint.pyx"], -@@ -540,13 +537,14 @@ ext_modules = [ +@@ -543,13 +540,14 @@ ext_modules = [ sources = ["sage/libs/homfly.pyx"], libraries = ["homfly", "gc"]), @@ -92,7 +93,7 @@ Extension('sage.libs.lcalc.lcalc_Lfunction', sources = ['sage/libs/lcalc/lcalc_Lfunction.pyx'], -@@ -563,10 +561,9 @@ ext_modules = [ +@@ -566,10 +564,9 @@ ext_modules = [ Extension('sage.libs.lrcalc.lrcalc', sources = ["sage/libs/lrcalc/lrcalc.pyx"]), @@ -105,7 +106,7 @@ Extension('*', ['sage/libs/pari/*.pyx']), -@@ -812,7 +809,8 @@ ext_modules = [ +@@ -815,7 +812,8 @@ ext_modules = [ include_dirs = cblas_include_dirs), Extension('sage.matrix.matrix_integer_sparse', @@ -115,7 +116,7 @@ Extension('sage.matrix.matrix_mod2_dense', sources = ['sage/matrix/matrix_mod2_dense.pyx'], -@@ -831,20 +829,21 @@ ext_modules = [ +@@ -834,20 +832,21 @@ ext_modules = [ Extension('sage.matrix.matrix_modn_dense_float', sources = ['sage/matrix/matrix_modn_dense_float.pyx'], language="c++", @@ -140,7 +141,7 @@ Extension('sage.matrix.matrix_mpolynomial_dense', sources = ['sage/matrix/matrix_mpolynomial_dense.pyx']), -@@ -874,10 +873,9 @@ ext_modules = [ +@@ -877,10 +876,9 @@ ext_modules = [ Extension('sage.matrix.matrix_window', sources = ['sage/matrix/matrix_window.pyx']), @@ -153,7 +154,7 @@ Extension('sage.matrix.misc', sources = ['sage/matrix/misc.pyx']), -@@ -1053,26 +1051,25 @@ ext_modules = [ +@@ -1056,26 +1054,25 @@ ext_modules = [ Extension("sage.numerical.backends.interactivelp_backend", ["sage/numerical/backends/interactivelp_backend.pyx"]), diff --git a/sagemath-includes.patch b/sagemath-includes.patch index ae7438e..174668a 100644 --- a/sagemath-includes.patch +++ b/sagemath-includes.patch @@ -1,5 +1,6 @@ ---- src/module_list.py.orig 2020-01-06 20:29:14.108070190 -0700 -+++ src/module_list.py 2020-01-06 20:29:39.724010734 -0700 +diff -up src/module_list.py.orig src/module_list.py +--- src/module_list.py.orig 2020-02-25 13:53:37.097039897 -0700 ++++ src/module_list.py 2020-02-26 14:43:39.912744735 -0700 @@ -44,6 +44,9 @@ zlib_libs = zlib_pc['libraries'] zlib_library_dirs = zlib_pc['library_dirs'] zlib_include_dirs = zlib_pc['include_dirs'] @@ -35,7 +36,7 @@ Extension('*', sources = ['sage/algebras/finite_dimensional_algebras/*.pyx']), -@@ -559,7 +571,8 @@ ext_modules = [ +@@ -562,7 +574,8 @@ ext_modules = [ [])), Extension('sage.libs.lrcalc.lrcalc', @@ -45,7 +46,7 @@ Extension("sage.libs.meataxe", sources = ['sage/libs/meataxe.pyx'], -@@ -580,23 +593,28 @@ ext_modules = [ +@@ -583,23 +596,28 @@ ext_modules = [ sources = ['sage/libs/readline.pyx'], libraries = ['readline']), @@ -79,7 +80,7 @@ ################################### ## -@@ -604,7 +622,8 @@ ext_modules = [ +@@ -607,7 +625,8 @@ ext_modules = [ ## ################################### @@ -89,7 +90,7 @@ ################################### ## -@@ -776,7 +795,8 @@ ext_modules = [ +@@ -779,7 +798,8 @@ ext_modules = [ Extension("sage.matrix.matrix_complex_ball_dense", ["sage/matrix/matrix_complex_ball_dense.pyx"], @@ -99,7 +100,7 @@ Extension('sage.matrix.matrix_complex_double_dense', sources = ['sage/matrix/matrix_complex_double_dense.pyx']), -@@ -784,6 +804,7 @@ ext_modules = [ +@@ -787,6 +807,7 @@ ext_modules = [ Extension('sage.matrix.matrix_cyclo_dense', sources = ['sage/matrix/matrix_cyclo_dense.pyx'], language = "c++", @@ -107,7 +108,7 @@ libraries=['ntl']), Extension('sage.matrix.matrix_gap', -@@ -846,6 +867,7 @@ ext_modules = [ +@@ -849,6 +870,7 @@ ext_modules = [ libraries = ['gomp']), Extension('sage.matrix.matrix_mpolynomial_dense', @@ -115,7 +116,7 @@ sources = ['sage/matrix/matrix_mpolynomial_dense.pyx']), Extension('sage.matrix.matrix_polynomial_dense', -@@ -1132,7 +1154,8 @@ ext_modules = [ +@@ -1135,7 +1157,8 @@ ext_modules = [ language = 'c++'), Extension("sage.rings.complex_arb", @@ -125,7 +126,7 @@ Extension('sage.rings.complex_double', sources = ['sage/rings/complex_double.pyx'], -@@ -1208,7 +1231,8 @@ ext_modules = [ +@@ -1211,7 +1234,8 @@ ext_modules = [ sources = ['sage/rings/real_interval_absolute.pyx']), Extension("sage.rings.real_arb", @@ -135,7 +136,7 @@ Extension('sage.rings.real_lazy', sources = ['sage/rings/real_lazy.pyx']), -@@ -1291,6 +1315,7 @@ ext_modules = [ +@@ -1294,6 +1318,7 @@ ext_modules = [ Extension('sage.rings.number_field.number_field_element_quadratic', sources = ['sage/rings/number_field/number_field_element_quadratic.pyx'], @@ -143,7 +144,7 @@ libraries=['ntl'], language = 'c++'), -@@ -1430,12 +1455,15 @@ ext_modules = [ +@@ -1433,12 +1458,15 @@ ext_modules = [ sources = ['sage/rings/polynomial/multi_polynomial.pyx']), Extension('sage.rings.polynomial.multi_polynomial_ideal_libsingular', @@ -159,7 +160,7 @@ sources = ['sage/rings/polynomial/multi_polynomial_libsingular.pyx']), Extension('sage.rings.polynomial.multi_polynomial_ring_base', -@@ -1448,7 +1476,8 @@ ext_modules = [ +@@ -1451,7 +1479,8 @@ ext_modules = [ sources = ['sage/rings/polynomial/polydict.pyx']), Extension('sage.rings.polynomial.polynomial_complex_arb', @@ -169,8 +170,9 @@ Extension('sage.rings.polynomial.polynomial_compiled', sources = ['sage/rings/polynomial/polynomial_compiled.pyx']), ---- src/setup.py.orig 2020-01-06 20:29:10.564078418 -0700 -+++ src/setup.py 2020-01-06 20:29:39.725010732 -0700 +diff -up src/setup.py.orig src/setup.py +--- src/setup.py.orig 2020-02-26 15:43:14.065012133 -0700 ++++ src/setup.py 2020-02-26 15:52:14.558846775 -0700 @@ -85,6 +85,7 @@ keep_going = False # search for dependencies and add to gcc -I diff --git a/sagemath-primecount.patch b/sagemath-primecount.patch deleted file mode 100644 index 29434b8..0000000 --- a/sagemath-primecount.patch +++ /dev/null @@ -1,110 +0,0 @@ -diff -up src/sage/interfaces/primecount.pyx.orig src/sage/interfaces/primecount.pyx ---- src/sage/interfaces/primecount.pyx.orig 2019-06-26 14:41:04.000000000 -0600 -+++ src/sage/interfaces/primecount.pyx 2019-09-17 16:13:46.316032782 -0600 -@@ -22,7 +22,7 @@ cdef inline int _do_sig(int64_t n): - "threshold for sig_on/sig_off" - return n >> 26 - --cpdef int64_t prime_pi(int64_t n, method=None) except -1: -+cpdef int64_t prime_pi(int64_t n) except -1: - r""" - Return the number of prime numbers smaller or equal than ``n``. - -@@ -30,76 +30,22 @@ cpdef int64_t prime_pi(int64_t n, method - - - ``n`` - an integer - -- - ``method`` - ``None`` or a string that determines the primecount -- function to be called -- -- - ``"deleglise_rivat"`` -- - ``"legendre"`` -- - ``"lehmer"`` -- - ``"lmo"`` -- - ``"meissel"`` -- - ``"primesieve"`` -- - EXAMPLES:: - - sage: from sage.interfaces.primecount import prime_pi # optional - primecount - - sage: prime_pi(1000) == 168 # optional - primecount - True -- sage: prime_pi(1000, "deleglise_rivat") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "legendre") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "lehmer") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "lmo") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "meissel") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "primesieve") == 168 # optional - primecount -- True -- sage: prime_pi(1000, "youpi") # optional - primecount -- Traceback (most recent call last): -- ... -- ValueError: unknown method 'youpi' - """ - cdef int64_t ans -- if method is None: -- if _do_sig(n): sig_on() -- ans = primecount.pi(n) -- if _do_sig(n): sig_off() -- elif method == "deleglise_rivat": -- if _do_sig(n): sig_on() -- ans = primecount.pi_deleglise_rivat(n) -- if _do_sig(n): sig_off() -- elif method == "legendre": -- if _do_sig(n): sig_on() -- ans = primecount.pi_legendre(n) -- if _do_sig(n): sig_off() -- elif method == "lehmer": -- if _do_sig(n): sig_on() -- ans = primecount.pi_lehmer(n) -- if _do_sig(n): sig_off() -- elif method == "lmo": -- if _do_sig(n): sig_on() -- ans = primecount.pi_lmo(n) -- if _do_sig(n): sig_off() -- elif method == "meissel": -- if _do_sig(n): sig_on() -- ans = primecount.pi_meissel(n) -- if _do_sig(n): sig_off() -- elif method == "primesieve": -- if _do_sig(n): sig_on() -- ans = primecount.pi_primesieve(n) -- if _do_sig(n): sig_off() -- else: -- raise ValueError("unknown method {!r}".format(method)) -- -+ if _do_sig(n): sig_on() -+ ans = primecount.pi(n) -+ if _do_sig(n): sig_off() - return ans - - cpdef prime_pi_128(n): - r""" -- Return the number of prime number smaller than ``n``. -+ Return the number of prime numbers smaller than ``n``. - - EXAMPLES:: - -diff -up src/sage/libs/primecount.pxd.orig src/sage/libs/primecount.pxd ---- src/sage/libs/primecount.pxd.orig 2019-06-26 14:41:05.000000000 -0600 -+++ src/sage/libs/primecount.pxd 2019-09-17 16:11:06.678851358 -0600 -@@ -9,13 +9,6 @@ cdef extern from "primecount.hpp" namesp - - cppstring pi(const cppstring& x) - -- int64_t pi_deleglise_rivat(int64_t x) -- int64_t pi_legendre(int64_t x) -- int64_t pi_lehmer(int64_t x) -- int64_t pi_lmo(int64_t x) -- int64_t pi_meissel(int64_t x) -- int64_t pi_primesieve(int64_t x) -- - int64_t nth_prime(int64_t n) - - int64_t phi(int64_t x, int64_t a) diff --git a/sagemath-python3.patch b/sagemath-python3.patch index b01dda9..36a73fd 100644 --- a/sagemath-python3.patch +++ b/sagemath-python3.patch @@ -1,51 +1,6 @@ -diff -up build/pkgs/sagenb/src/sagenb/misc/support.py.orig build/pkgs/sagenb/src/sagenb/misc/support.py ---- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2019-02-01 06:34:20.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2020-01-07 19:57:46.756664911 -0700 -@@ -178,7 +178,7 @@ def completions(s, globs, format=False, - try: - if not '.' in s and not '(' in s: - v = [x for x in globs.keys() if x[:n] == s] + \ -- [x for x in __builtins__.keys() if x[:n] == s] -+ [x for x in builtins.keys() if x[:n] == s] - else: - if not ')' in s: - i = s.rfind('.') -diff -up build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py ---- build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig 2019-02-01 05:37:36.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2020-01-07 19:57:46.757664910 -0700 -@@ -25,7 +25,7 @@ This module contains three classes: - - .. NOTE:: - -- This extension of htmllib.HTMLParser was partly inspired by Mark -+ This extension of html.parser.HTMLParser was partly inspired by Mark - Pilgrim's 'Dive Into Python' examples. - - AUTHORS: -@@ -155,7 +155,7 @@ class genericHTMLProcessor(HTMLParser): - u'

Title

\n\n

nSome text

\n\n\n\n' - - """ -- # self.feed() is a HTMLParser method and starts everything -+ # self.feed() is an HTMLParser method and starts everything - # off; Most of the functions here are extensions to - # HTMLParser, and may never actually be visibly called here. - -diff -up build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py ---- build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig 2019-02-01 05:37:36.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py 2020-01-07 19:57:46.758664910 -0700 -@@ -59,7 +59,7 @@ class Parser: - 'parent': r'(?:%s)?' % re.escape(PARENT_PREFIX), - } - url_rule = r'%(url_guard)s(%(url)s)\:([^\s\<%(punct)s]|([%(punct)s][^\s\<%(punct)s]))+' % { -- 'url_guard': ur'(^|(?. @@ -133,8 +88,8 @@ diff -up build/pkgs/sagetex/src/remote-sagetex.py.orig build/pkgs/sagetex/src/re if not password: from getpass import getpass diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sagetexparse.py ---- build/pkgs/sagetex/src/sagetexparse.py.orig 2019-06-11 04:58:29.000000000 -0600 -+++ build/pkgs/sagetex/src/sagetexparse.py 2020-01-07 19:57:46.760664908 -0700 +--- build/pkgs/sagetex/src/sagetexparse.py.orig 2019-11-14 04:02:40.000000000 -0700 ++++ build/pkgs/sagetex/src/sagetexparse.py 2020-02-25 13:42:46.674646884 -0700 @@ -132,7 +132,7 @@ class SageCodeExtractor(): def plotout(self, s, l, t): @@ -145,8 +100,8 @@ diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sage self.result += t.code[1:-1] + '\n\n' diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite_state_machine.py ---- src/sage/combinat/finite_state_machine.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/combinat/finite_state_machine.py 2020-01-07 19:57:46.766664904 -0700 +--- src/sage/combinat/finite_state_machine.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/finite_state_machine.py 2020-02-25 13:42:46.676646848 -0700 @@ -936,7 +936,7 @@ from six.moves import range, zip_longest from six import itervalues @@ -156,7 +111,7 @@ diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite import itertools from copy import copy, deepcopy -@@ -14166,7 +14166,7 @@ def is_FSMProcessIterator(PI): +@@ -14161,7 +14161,7 @@ def is_FSMProcessIterator(PI): class FSMProcessIterator(SageObject, @@ -165,21 +120,9 @@ diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite """ This class takes an input, feeds it into a finite state machine (automaton or transducer, in particular), tests whether this was -diff -up src/sage/combinat/multiset_partition_into_sets_ordered.py.orig src/sage/combinat/multiset_partition_into_sets_ordered.py ---- src/sage/combinat/multiset_partition_into_sets_ordered.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/combinat/multiset_partition_into_sets_ordered.py 2020-01-07 19:57:46.768664902 -0700 -@@ -1952,7 +1952,7 @@ class OrderedMultisetPartitionsIntoSets( - - # slice by 'order' - if "alphabet" in fc: -- no_alpha = {k: v for (k, v) in iteritems(self.constraints) if k is not "alphabet"} -+ no_alpha = {k: v for (k, v) in iteritems(self.constraints) if k != "alphabet"} - return OrderedMultisetPartitionsIntoSets(fc["alphabet"], size, **no_alpha) - - # slice by 'size' diff -up src/sage/combinat/root_system/branching_rules.py.orig src/sage/combinat/root_system/branching_rules.py ---- src/sage/combinat/root_system/branching_rules.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/combinat/root_system/branching_rules.py 2020-01-07 19:57:46.769664902 -0700 +--- src/sage/combinat/root_system/branching_rules.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/combinat/root_system/branching_rules.py 2020-02-25 13:42:46.678646812 -0700 @@ -1750,7 +1750,7 @@ def branching_rule(Rtype, Stype, rule="d elif rule == "tensor" or rule == "tensor-debug": if not Stype.is_compound(): @@ -190,9 +133,9 @@ diff -up src/sage/combinat/root_system/branching_rules.py.orig src/sage/combinat if Rtype[0] == 'A': nr = Rtype[1]+1 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 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/geometry/triangulation/point_configuration.py 2020-01-07 19:57:46.770664901 -0700 -@@ -619,7 +619,7 @@ class PointConfiguration(UniqueRepresent +--- src/sage/geometry/triangulation/point_configuration.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/geometry/triangulation/point_configuration.py 2020-02-26 14:41:58.109624057 -0700 +@@ -619,11 +619,11 @@ class PointConfiguration(UniqueRepresent ['{{0,1,2,4},{1,2,3,4}}'] """ timeout = 600 @@ -201,9 +144,14 @@ diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/ge proc.expect(r'Evaluating Commandline Options \.\.\.') proc.expect(r'\.\.\. done\.') proc.setecho(0) +- assert proc.readline().strip() == b'' ++ assert proc.readline().strip() == '' + + if verbose: + print("#### TOPCOM input ####") diff -up src/sage/graphs/graph_latex.py.orig src/sage/graphs/graph_latex.py ---- src/sage/graphs/graph_latex.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/graphs/graph_latex.py 2020-01-07 19:59:40.240580166 -0700 +--- src/sage/graphs/graph_latex.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/graphs/graph_latex.py 2020-02-25 13:42:46.679646794 -0700 @@ -1156,7 +1156,7 @@ class GraphLatex(SageObject): # elif name in color_dicts: @@ -263,20 +211,20 @@ diff -up src/sage/graphs/graph_latex.py.orig src/sage/graphs/graph_latex.py for key, p in value.items(): if not((isinstance(p, tuple)) and (len(p) == 2) and (p[0] >= 0) and (p[1] in compass_points)): diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py ---- src/sage/interfaces/frobby.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/interfaces/frobby.py 2020-01-07 19:57:46.771664900 -0700 -@@ -77,7 +77,7 @@ class Frobby: +--- src/sage/interfaces/frobby.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/interfaces/frobby.py 2020-02-26 14:41:07.262562710 -0700 +@@ -79,7 +79,7 @@ class Frobby: print("Frobby command: ", repr(command)) print("Frobby input:\n", input) - process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE) -+ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, enconding='utf-8') - output, err = process.communicate(input = input) - - if verbose: ++ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, encoding='utf-8') + if input: + 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 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/interfaces/gfan.py 2020-01-07 19:57:46.772664899 -0700 +--- src/sage/interfaces/gfan.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/interfaces/gfan.py 2020-02-25 13:42:46.679646794 -0700 @@ -66,7 +66,7 @@ class Gfan(object): if six.PY2: enc_kwargs = {} @@ -287,8 +235,8 @@ diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py gfan_processes = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, **enc_kwargs) diff -up src/sage/interfaces/gp.py.orig src/sage/interfaces/gp.py ---- src/sage/interfaces/gp.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/interfaces/gp.py 2020-01-07 19:57:46.773664899 -0700 +--- src/sage/interfaces/gp.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/interfaces/gp.py 2020-02-25 13:42:46.680646776 -0700 @@ -934,17 +934,6 @@ class GpElement(ExpectElement): """ return repr(self.type()) == 't_STR' @@ -308,8 +256,8 @@ diff -up src/sage/interfaces/gp.py.orig src/sage/interfaces/gp.py """ Return Python float. diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py ---- src/sage/interfaces/latte.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/interfaces/latte.py 2020-01-07 19:57:46.773664899 -0700 +--- src/sage/interfaces/latte.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/interfaces/latte.py 2020-02-25 13:42:46.680646776 -0700 @@ -152,6 +152,7 @@ def count(arg, ehrhart_polynomial=False, latte_proc = Popen(args, stdin=PIPE, stdout=PIPE, @@ -327,8 +275,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 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/interfaces/sagespawn.pyx 2020-01-07 19:57:46.774664898 -0700 +--- src/sage/interfaces/sagespawn.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/interfaces/sagespawn.pyx 2020-02-25 13:42:46.680646776 -0700 @@ -1,6 +1,6 @@ """ Sage wrapper around pexpect's ``spawn`` class and @@ -377,8 +325,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 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/libs/coxeter3/coxeter.pyx 2020-01-07 19:57:46.776664896 -0700 +--- src/sage/libs/coxeter3/coxeter.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/libs/coxeter3/coxeter.pyx 2020-02-25 13:42:46.680646776 -0700 @@ -33,7 +33,7 @@ cdef class String: EXAMPLES:: @@ -512,9 +460,9 @@ diff -up src/sage/libs/coxeter3/coxeter.pyx.orig src/sage/libs/coxeter3/coxeter. if rank == 0: raise NotImplementedError("Coxeter group of type ['A',0] using Coxeter 3 not yet implemented") diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx ---- src/sage/misc/parser.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/misc/parser.pyx 2020-01-07 19:57:46.777664896 -0700 -@@ -96,7 +96,7 @@ def token_to_str(int token): +--- src/sage/misc/parser.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/misc/parser.pyx 2020-02-25 13:42:46.681646759 -0700 +@@ -95,7 +95,7 @@ def token_to_str(int token): cdef inline bint is_alphanumeric(char c): @@ -813,8 +761,8 @@ diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx return self.p_list(tokens) else: diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py ---- src/sage/plot/plot3d/plot3d.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/plot/plot3d/plot3d.py 2020-01-07 19:57:46.778664895 -0700 +--- src/sage/plot/plot3d/plot3d.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/plot/plot3d/plot3d.py 2020-02-25 13:42:46.681646759 -0700 @@ -188,7 +188,8 @@ class _Coordinates(object): sage: arb((x+z,y*z,z), z, (x,y)) Arbitrary Coordinates coordinate transform (z in terms of x, y) @@ -826,8 +774,8 @@ 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/plot/point.py.orig src/sage/plot/point.py ---- src/sage/plot/point.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/plot/point.py 2020-01-07 19:57:46.779664894 -0700 +--- src/sage/plot/point.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/plot/point.py 2020-02-25 13:42:46.681646759 -0700 @@ -29,7 +29,7 @@ TESTS:: from sage.misc.decorators import options, rename_keyword from sage.plot.colors import to_mpl_color @@ -847,8 +795,8 @@ diff -up src/sage/plot/point.py.orig src/sage/plot/point.py try: diff -up src/sage/repl/display/fancy_repr.py.orig src/sage/repl/display/fancy_repr.py ---- src/sage/repl/display/fancy_repr.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/repl/display/fancy_repr.py 2020-01-07 19:57:46.780664894 -0700 +--- src/sage/repl/display/fancy_repr.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/repl/display/fancy_repr.py 2020-02-25 13:42:46.682646741 -0700 @@ -15,7 +15,7 @@ Representations of objects. import types @@ -868,8 +816,8 @@ diff -up src/sage/repl/display/fancy_repr.py.orig src/sage/repl/display/fancy_re else: # A user-provided repr. Find newlines and replace them with p.break_() diff -up src/sage/repl/ipython_kernel/interact.py.orig src/sage/repl/ipython_kernel/interact.py ---- src/sage/repl/ipython_kernel/interact.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/repl/ipython_kernel/interact.py 2020-01-07 19:57:46.781664893 -0700 +--- src/sage/repl/ipython_kernel/interact.py.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/repl/ipython_kernel/interact.py 2020-02-25 13:42:46.682646741 -0700 @@ -35,7 +35,8 @@ EXAMPLES:: from ipywidgets.widgets import SelectionSlider, ValueWidget, ToggleButtons @@ -881,9 +829,9 @@ diff -up src/sage/repl/ipython_kernel/interact.py.orig src/sage/repl/ipython_ker from .widgets_sagenb import input_grid from sage.structure.element import parent diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx ---- src/sage/rings/integer.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/rings/integer.pyx 2020-01-07 19:57:46.785664890 -0700 -@@ -7124,7 +7124,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c +--- src/sage/rings/integer.pyx.orig 2020-02-27 10:29:19.004788998 -0700 ++++ src/sage/rings/integer.pyx 2020-02-27 15:48:31.176289587 -0700 +@@ -7123,7 +7123,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c while x[0] == c' ': x += 1 # Strip spaces # Disallow a sign here @@ -892,22 +840,10 @@ diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx x = "" # Force an error below assert base >= 2 -diff -up src/sage/rings/multi_power_series_ring_element.py.orig src/sage/rings/multi_power_series_ring_element.py ---- src/sage/rings/multi_power_series_ring_element.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/rings/multi_power_series_ring_element.py 2020-01-07 19:57:46.786664889 -0700 -@@ -1396,7 +1396,7 @@ class MPowerSeries(PowerSeries): - # at this stage, self is probably a non-zero - # element of the base ring - for a in range(len(self._bg_value.list())): -- if self._bg_value.list()[a] is not 0: -+ if self._bg_value.list()[a] != 0: - return a - - def is_nilpotent(self): diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbori.pyx ---- src/sage/rings/polynomial/pbori.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/rings/polynomial/pbori.pyx 2020-01-07 19:57:46.788664888 -0700 -@@ -4765,8 +4765,7 @@ cdef class PolynomialConstruct: +--- src/sage/rings/polynomial/pbori.pyx.orig 2020-02-27 10:58:59.991311061 -0700 ++++ src/sage/rings/polynomial/pbori.pyx 2020-02-27 15:48:31.177289568 -0700 +@@ -4764,8 +4764,7 @@ cdef class PolynomialConstruct: # So, it is just a conversion. [Simon King] return (ring)._element_constructor_(x) @@ -918,9 +854,9 @@ diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbor cdef class MonomialConstruct: diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx ---- src/sage/rings/real_mpfi.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/rings/real_mpfi.pyx 2020-01-07 19:57:46.790664886 -0700 -@@ -1943,12 +1943,12 @@ cdef class RealIntervalFieldElement(Ring +--- src/sage/rings/real_mpfi.pyx.orig 2020-02-27 10:14:36.381371499 -0700 ++++ src/sage/rings/real_mpfi.pyx 2020-02-27 15:48:31.178289550 -0700 +@@ -1941,12 +1941,12 @@ cdef class RealIntervalFieldElement(Ring cdef long digits digits = strlen(lower_s) @@ -935,7 +871,7 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx digits -= 1 upper_expo -= digits -@@ -2117,7 +2117,7 @@ cdef class RealIntervalFieldElement(Ring +@@ -2115,7 +2115,7 @@ cdef class RealIntervalFieldElement(Ring raise MemoryError("Unable to allocate memory for the mantissa of an interval") mpz_get_str(tmp_cstr, base, lower_mpz) digits = strlen(tmp_cstr) @@ -945,9 +881,9 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx mant_string = bytes_to_str(tmp_cstr+1) sign_string = bytes_to_str(b'-') diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx ---- src/sage/rings/real_mpfr.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/rings/real_mpfr.pyx 2020-01-07 19:57:46.791664885 -0700 -@@ -2039,7 +2039,7 @@ cdef class RealNumber(sage.structure.ele +--- src/sage/rings/real_mpfr.pyx.orig 2020-02-27 10:16:40.188177426 -0700 ++++ src/sage/rings/real_mpfr.pyx 2020-02-27 15:48:31.179289531 -0700 +@@ -2037,7 +2037,7 @@ cdef class RealNumber(sage.structure.ele if s is NULL: raise RuntimeError("unable to convert an mpfr number to a string") # t contains just digits (no sign, decimal point or exponent) @@ -957,9 +893,9 @@ diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx t = char_to_str(s + 1) else: diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.pyx ---- src/sage/structure/sage_object.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/structure/sage_object.pyx 2020-01-07 19:57:46.791664885 -0700 -@@ -665,7 +665,7 @@ cdef class SageObject: +--- src/sage/structure/sage_object.pyx.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/sage/structure/sage_object.pyx 2020-02-25 13:42:56.898464506 -0700 +@@ -671,7 +671,7 @@ cdef class SageObject: try: s = self._interface_init_(I) except Exception: @@ -969,9 +905,9 @@ diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object. if c: try: diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx ---- src/sage/symbolic/expression.pyx.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/sage/symbolic/expression.pyx 2020-01-07 19:57:46.794664883 -0700 -@@ -12916,7 +12916,7 @@ cdef class hold_class: +--- src/sage/symbolic/expression.pyx.orig 2020-02-27 09:30:14.669819391 -0700 ++++ src/sage/symbolic/expression.pyx 2020-02-27 15:48:31.182289476 -0700 +@@ -12945,7 +12945,7 @@ cdef class hold_class: sage: SR(2)^5 32 """ @@ -980,7 +916,7 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx def __exit__(self, *args): """ -@@ -12929,7 +12929,7 @@ cdef class hold_class: +@@ -12958,7 +12958,7 @@ cdef class hold_class: sage: SR(2)^5 32 """ @@ -989,15 +925,3 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx def start(self): """ -diff -up src/setup.py.orig src/setup.py ---- src/setup.py.orig 2019-09-29 17:03:11.000000000 -0600 -+++ src/setup.py 2020-01-07 19:57:46.794664883 -0700 -@@ -232,7 +232,7 @@ class sage_build_cython(Command): - cdivision=True, - embedsignature=True, - fast_getattr=True, -- language_level="2", -+ language_level=3, - preliminary_late_includes_cy28=True, - profile=self.profile, - ) diff --git a/sagemath-sagenb-python3.patch b/sagemath-sagenb-python3.patch deleted file mode 100644 index 8ba9206..0000000 --- a/sagemath-sagenb-python3.patch +++ /dev/null @@ -1,351 +0,0 @@ -diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py ---- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2019-09-05 13:19:45.878376777 -0300 -+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2019-09-05 13:27:08.353250002 -0300 -@@ -140,7 +140,7 @@ def localization_js(): - locale=repr(get_locale()) - if _localization_cache.get(locale,None) is None: - data = render_template(os.path.join('js/localization.js'), N_=N_, nN_=nN_) -- _localization_cache[locale] = (data, sha1(repr(data)).hexdigest()) -+ _localization_cache[locale] = (data, sha1(repr(data).encode('ascii')).hexdigest()) - data,datahash = _localization_cache[locale] - - if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash: -@@ -158,7 +158,7 @@ def mathjax_js(): - if _mathjax_js_cache is None: - from sagenb.misc.misc import mathjax_macros - data = render_template('js/mathjax_sage.js', theme_mathjax_macros=mathjax_macros) -- _mathjax_js_cache = (data, sha1(repr(data)).hexdigest()) -+ _mathjax_js_cache = (data, sha1(repr(data).encode('ascii')).hexdigest()) - data,datahash = _mathjax_js_cache - - if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash: -@@ -173,7 +173,7 @@ def mathjax_js(): - def keyboard_js(browser_os): - from sagenb.notebook.keyboards import get_keyboard - data = get_keyboard(browser_os) -- datahash=sha1(data).hexdigest() -+ datahash=sha1(str(data).encode('ascii')).hexdigest() - if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash: - response = make_response('',304) - else: -@@ -490,7 +490,7 @@ def create_app(path_to_notebook, *args, - filename = os.path.join(SRC, path) - if os.path.isfile(filename): - from cgi import escape -- src = escape(open(filename).read().decode('utf-8','ignore')) -+ src = escape(open(filename).read().decode('ascii')) - if (os.path.splitext(filename)[1] in - ['.py','.c','.cc','.h','.hh','.pyx','.pxd']): - return render_template(os.path.join('html', 'source_code.html'), -diff -up build/pkgs/sagenb/src/sagenb/misc/format.py.orig build/pkgs/sagenb/src/sagenb/misc/format.py ---- build/pkgs/sagenb/src/sagenb/misc/format.py.orig 2019-09-05 13:20:21.507608139 -0300 -+++ build/pkgs/sagenb/src/sagenb/misc/format.py 2019-09-05 13:27:08.353250002 -0300 -@@ -126,7 +126,7 @@ import sys - sys.ps1 = "%s" - print("START%s") - %s --""" % (prompt, number, displayhook_hack(string).encode('utf-8', 'ignore')) -+""" % (prompt, number, displayhook_hack(string).encode('ascii')) - try: - string = '# -*- coding: utf-8 -*-\n' + relocate_future_imports(string) - except SyntaxError: -diff -up build/pkgs/sagenb/src/sagenb/misc/misc.py.orig build/pkgs/sagenb/src/sagenb/misc/misc.py ---- build/pkgs/sagenb/src/sagenb/misc/misc.py.orig 2019-09-05 13:20:31.231671284 -0300 -+++ build/pkgs/sagenb/src/sagenb/misc/misc.py 2019-09-05 13:27:08.354250008 -0300 -@@ -424,7 +424,7 @@ def set_permissive_permissions(filename) - stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | \ - stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP) - --def encoded_str(obj, encoding='utf-8'): -+def encoded_str(obj, encoding='ascii'): - r""" - Takes an object and returns an encoded str human-readable representation. - -@@ -445,7 +445,7 @@ def encoded_str(obj, encoding='utf-8'): - return binary_type(obj) - - --def unicode_str(obj, encoding='utf-8'): -+def unicode_str(obj, encoding='ascii'): - r""" - Takes an object and returns a unicode human-readable representation. - -diff -up build/pkgs/sagenb/src/sagenb/misc/support.py.orig build/pkgs/sagenb/src/sagenb/misc/support.py ---- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2019-09-05 13:20:40.258729902 -0300 -+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2019-09-05 13:27:08.356250022 -0300 -@@ -279,7 +279,7 @@ def docstring(obj_name, globs, system='s - s += newline - s += sageinspect.sage_getdoc(obj, obj_name) - s = s.rstrip() -- return html_markup(s.decode('utf-8')) -+ return html_markup(s.decode('ascii')) - - - def html_markup(s): -@@ -433,7 +433,7 @@ def syseval(system, cmd, dir=None): - if hasattr(system.__class__, 'chdir'): - system.chdir(dir) - if isinstance(cmd, text_type): -- cmd = cmd.encode('utf-8', 'ignore') -+ cmd = cmd.encode('ascii') - return system.eval(cmd, sage_globals, locals=sage_globals) - - ###################################################################### -diff -up build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py.orig build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py ---- build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py.orig 2019-09-05 13:20:49.848792176 -0300 -+++ build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py 2019-09-05 13:27:08.356250022 -0300 -@@ -200,5 +200,5 @@ if __name__=='__main__': - text = sys.stdin.read() - images_dir = sys.argv[2] if len(sys.argv)>2 else '' - -- print(worksheet2rst(text, images_dir).encode('utf-8')) -+ print(worksheet2rst(text, images_dir).encode('ascii')) - -diff -up build/pkgs/sagenb/src/sagenb/notebook/challenge.py.orig build/pkgs/sagenb/src/sagenb/notebook/challenge.py ---- build/pkgs/sagenb/src/sagenb/notebook/challenge.py.orig 2019-09-05 13:20:58.515848457 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/challenge.py 2019-09-05 13:27:08.356250022 -0300 -@@ -529,7 +529,7 @@ class reCAPTCHAChallenge(AbstractChallen - - def encode_if_necessary(s): - if isinstance(s, unicode): -- return s.encode('utf-8') -+ return s.encode('ascii') - return s - - params = urlencode({ -diff -up build/pkgs/sagenb/src/sagenb/notebook/css.py.orig build/pkgs/sagenb/src/sagenb/notebook/css.py ---- build/pkgs/sagenb/src/sagenb/notebook/css.py.orig 2019-09-05 13:21:08.792915193 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/css.py 2019-09-05 13:27:08.357250028 -0300 -@@ -58,5 +58,5 @@ def css(color='default'): - user_css = '\n' + open(user_css_path).read() - - data = main_css + user_css -- _css_cache = (data, sha1(data).hexdigest()) -+ _css_cache = (data, sha1(str(data).encode('ascii')).hexdigest()) - return _css_cache -diff -up build/pkgs/sagenb/src/sagenb/notebook/js.py.orig build/pkgs/sagenb/src/sagenb/notebook/js.py ---- build/pkgs/sagenb/src/sagenb/notebook/js.py.orig 2019-09-05 13:21:17.511971810 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/js.py 2019-09-05 13:27:08.357250028 -0300 -@@ -84,7 +84,7 @@ def javascript(): - if debug_mode: - # TODO: maybe we should return a random hash so that the code - # is reloaded on every refresh -- return s, sha1(s).hexdigest() -+ return s, sha1(str(s).encode('ascii')).hexdigest() - - # TODO: use minify here, which is more standard (and usually safer - # and with gzip compression, smaller); But first inquire about the -@@ -92,7 +92,7 @@ def javascript(): - # Evil" clause in the license. Does that prevent us from - # distributing it (i.e., it adds an extra condition to the - # software)? See http://www.crockford.com/javascript/jsmin.py.txt -- s = JavaScriptCompressor().getPacked(s.encode('utf-8')) -+ s = JavaScriptCompressor().getPacked(s.encode('ascii')) - _cache_javascript = (s, sha1(s).hexdigest()) - - return _cache_javascript -diff -up build/pkgs/sagenb/src/sagenb/notebook/register.py.orig build/pkgs/sagenb/src/sagenb/notebook/register.py ---- build/pkgs/sagenb/src/sagenb/notebook/register.py.orig 2019-09-05 13:21:26.247028528 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/register.py 2019-09-05 13:27:08.358250034 -0300 -@@ -22,7 +22,7 @@ def build_msg(key, username, addr, port, - '%(url_prefix)s://%(addr)s:%(port)s/confirm?key=%(key)s\n\n' - 'You will be taken to a page which will confirm that you have indeed registered.', - url_prefix=url_prefix, addr=addr, port=port, key=key) -- return s.encode('utf-8') -+ return s.encode('ascii') - - def build_password_msg(key, username, addr, port, secure): - url_prefix = "https" if secure else "http" -@@ -31,7 +31,7 @@ def build_password_msg(key, username, ad - 'Sign in at %(url_prefix)s://%(addr)s:%(port)s/\n\n' - 'Make sure to reset your password by going to Settings in the upper right bar.', - key=key, url_prefix=url_prefix, addr=addr, port=port) -- return s.encode('utf-8') -+ return s.encode('ascii') - - def make_key(): - from random import randint -diff -up build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py.orig build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py ---- build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py.orig 2019-09-05 13:21:35.087085930 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py 2019-09-05 13:27:08.358250034 -0300 -@@ -18,20 +18,15 @@ AUTHOR: - - Bobby Moretti - """ --from twisted.mail import smtp, relaymanager # problematic with python 3 --from email.mime.base import MIMEBase --from email.mime.multipart import MIMEMultipart --import sys -- -+from twisted.mail.smtp import sendmail -+from twisted.internet.task import react -+from email.mime.text import MIMEText - - def buildMessage(fromaddr, toaddr, subject, body): -- message = MIMEMultipart() -+ message = MIMEText(body) - message['From'] = fromaddr - message['To'] = toaddr - message['Subject'] = subject -- textPart = MIMEBase('text', 'plain') -- textPart.set_payload(body) -- message.attach(textPart) - return message - - def sendComplete(result): -@@ -42,16 +37,10 @@ def handleError(error): - - def send_mail(fromaddr, toaddr, subject, body, on_success=sendComplete, on_failure=handleError): - try: -- recpt_domain = toaddr.split('@')[1].encode("ascii") -- except (ValueError, IndexError, UnicodeDecodeError): -- raise ValueError("mal-formed destination address") -- message = buildMessage(fromaddr, toaddr, subject, body) -- messageData = message.as_string(unixfrom=False) -- -- def on_found_record(mx_rec): -- smtp_server = str(mx_rec.name) -- sending = smtp.sendmail(smtp_server, fromaddr, [toaddr], messageData) -- sending.addCallback(on_success).addErrback(on_failure) -- -- relaymanager.MXCalculator().getMX(recpt_domain).addCallback(on_found_record) -+ d = sendmail("localhost", fromaddr, toaddr, message) -+ d.addBoth(print) -+ except: -+ handleError(sys.exc_info()[0]) -+ return -+ sendComplete() - -diff -up build/pkgs/sagenb/src/sagenb/notebook/user_manager.py.orig build/pkgs/sagenb/src/sagenb/notebook/user_manager.py ---- build/pkgs/sagenb/src/sagenb/notebook/user_manager.py.orig 2019-09-05 13:21:45.143151229 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/user_manager.py 2019-09-05 13:27:08.360250047 -0300 -@@ -461,7 +461,7 @@ class SimpleUserManager(UserManager): - if encrypt: - salt = user.generate_salt() - new_password = 'sha256${0}${1}'.format(salt, -- hashlib.sha256(salt + new_password).hexdigest()) -+ hashlib.sha256(str(salt + new_password).encode('ascii')).hexdigest()) - self._passwords[username] = new_password - # need to make sure password in the user object is synced - # for compatibility only the user object data is stored in the 'users.pickle' -diff -up build/pkgs/sagenb/src/sagenb/notebook/user.py.orig build/pkgs/sagenb/src/sagenb/notebook/user.py ---- build/pkgs/sagenb/src/sagenb/notebook/user.py.orig 2019-09-05 13:21:54.855214298 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/user.py 2019-09-05 13:27:08.360250047 -0300 -@@ -185,7 +185,7 @@ class User(object): - if encrypt: - salt = generate_salt() - self._password = 'sha256${0}${1}'.format(salt, -- hashlib.sha256(salt + password).hexdigest()) -+ hashlib.sha256(str(salt + password).encode('ascii')).hexdigest()) - else: - self._password = password - self._temporary_password = '' -diff -up build/pkgs/sagenb/src/sagenb/notebook/worksheet.py.orig build/pkgs/sagenb/src/sagenb/notebook/worksheet.py ---- build/pkgs/sagenb/src/sagenb/notebook/worksheet.py.orig 2019-09-05 13:26:14.467900092 -0300 -+++ build/pkgs/sagenb/src/sagenb/notebook/worksheet.py 2019-09-05 13:27:08.361250054 -0300 -@@ -313,7 +313,7 @@ class Worksheet(object): - - d = {############# - # basic identification -- 'name': unicode(self.name()), -+ 'name': str(self.name().encode('ascii')), - 'id_number': int(self.id_number()), - - ############# -@@ -2157,9 +2157,9 @@ class Worksheet(object): - filename = self.worksheet_html_filename() - - if os.path.exists(filename): -- contents = open(filename).read().decode('utf-8', 'ignore') -+ contents = open(filename).read().decode('ascii') - else: -- contents = u' ' -+ contents = ' ' - - try: - r = [unicode(x.lower()) for x in [self.owner(), self.publisher(), self.name(), contents]] -@@ -2190,8 +2190,8 @@ class Worksheet(object): - if E is None: - E = self.edit_text() - worksheet_html = self.worksheet_html_filename() -- open(filename, 'w').write(bz2.compress(E.encode('utf-8', 'ignore'))) -- open(worksheet_html, 'w').write(self.body().encode('utf-8', 'ignore')) -+ open(filename, 'w').write(bz2.compress(E.encode('ascii'))) -+ open(worksheet_html, 'w').write(self.body().encode('ascii')) - self.limit_snapshots() - try: - X = self.__saved_by_info -@@ -3930,7 +3930,7 @@ except (KeyError, IOError): - """ - # The extra newline below is necessary, since otherwise source - # code introspection doesn't include the last line. -- return 'open("%s","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("%s"),globals())+"\\n"); execfile(os.path.abspath("%s"))'%(CODE_PY, base64.b64encode(s.encode('utf-8', 'ignore')), CODE_PY) -+ return 'open("%s","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("%s"),globals())+"\\n"); execfile(os.path.abspath("%s"))'%(CODE_PY, base64.b64encode(s.encode('ascii')), CODE_PY) - - ########################################################## - # Loading and attaching files -@@ -4114,7 +4114,7 @@ except (KeyError, IOError): - os.makedirs(code) - spyx = os.path.abspath(os.path.join(code, 'sage%s.spyx'%id)) - if not (os.path.exists(spyx) and open(spyx).read() == cmd): -- open(spyx,'w').write(cmd.encode('utf-8', 'ignore')) -+ open(spyx,'w').write(cmd.encode('ascii')) - return '_support_.cython_import_all("%s", globals())'%spyx - - def check_for_system_switching(self, input, cell): -diff -up build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py.orig build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py ---- build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py.orig 2019-09-05 13:22:17.198359375 -0300 -+++ build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py 2019-09-05 13:27:08.361250054 -0300 -@@ -106,7 +106,7 @@ class FilesystemDatastore(Datastore): - - def _deep_user_path(self, username): - from hashlib import md5 -- h = md5(username).hexdigest() -+ h = md5(str(username).encode('ascii')).hexdigest() - base = ['__store__', h[:1], h[:2], h[:3], h[:4]] - path = os.path.join(*base) - self._makepath(self._abspath(os.path.join(self._home_path, path))) -@@ -397,7 +397,7 @@ class FilesystemDatastore(Datastore): - # todo -- add check if changed - filename = self._worksheet_html_filename(username, id_number) - with atomic_write(self._abspath(filename)) as f: -- f.write(worksheet.body().encode('utf-8', 'ignore')) -+ f.write(str(worksheet.body())) - - def create_worksheet(self, username, id_number): - """ -@@ -548,7 +548,7 @@ class FilesystemDatastore(Datastore): - - worksheet_txt = members[0].name - W = self.load_worksheet(username, id_number) -- W.edit_save_old_format(T.extractfile(worksheet_txt).read().decode('utf-8', 'ignore')) -+ W.edit_save_old_format(T.extractfile(worksheet_txt).read().decode('ascii')) - # '/' is right, since old worksheets always unix - dir = worksheet_txt.split('/')[0] - -diff -up build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py.orig build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py ---- build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py.orig 2019-09-05 13:22:27.220424454 -0300 -+++ build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py 2019-09-05 13:27:08.361250054 -0300 -@@ -199,9 +199,9 @@ class selenium: - - def do_command(self, verb, args): - conn = http.client.HTTPConnection(self.host, self.port) -- body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('utf-8')) -+ body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('ascii')) - for i in range(len(args)): -- body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('utf-8')) -+ body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('ascii')) - if (None != self.sessionId): - body += "&sessionId=" + unicode(self.sessionId) - headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"} -diff -up build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html.orig ./build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html ---- build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html.orig 2019-09-05 15:39:56.829175774 -0300 -+++ build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html 2019-09-05 15:40:26.822369920 -0300 -@@ -45,6 +45,7 @@ INPUT: -

{{ gettext('Account is read only. You may download or delete worksheets or data.') }}

- {% endif %} -

{{ gettext('This notebook is deprecated. Click here for details.') }}

-+
The sagemath rpm package was built with python3, but the sagemath notebook is discontinued and has not been ported to python3.
Only minimal functionality to browse documentation is available.
Please run the shell command:
$ sage -n jupyter
to use the jupyter notebook.
-
- {% if pub is not defined or not pub %} - {{ gettext('New Worksheet') }} diff --git a/sagemath-sagenb.patch b/sagemath-sagenb.patch deleted file mode 100644 index 24d25c1..0000000 --- a/sagemath-sagenb.patch +++ /dev/null @@ -1,88 +0,0 @@ -diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py ---- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2018-11-05 08:45:39.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2019-01-04 10:28:38.099158223 -0700 -@@ -7,8 +7,6 @@ from functools import partial - from flask import Flask, Blueprint, url_for, request, session, redirect, g, make_response, current_app, render_template - from .decorators import login_required, guest_or_login_required, with_lock - from .decorators import global_lock --# Make flask use the old session foo from <=flask-0.9 --from flask_oldsessions import OldSecureCookieSessionInterface - - from flask_autoindex import AutoIndex - from sage.env import SAGE_SRC, SAGE_DOC -@@ -28,7 +26,6 @@ class SageNBFlask(Flask): - def __init__(self, *args, **kwds): - self.startup_token = kwds.pop('startup_token', None) - Flask.__init__(self, *args, **kwds) -- self.session_interface = OldSecureCookieSessionInterface() - - self.config['SESSION_COOKIE_HTTPONLY'] = False - -@@ -39,13 +36,13 @@ class SageNBFlask(Flask): - self.add_static_path('/javascript', DATA) - self.add_static_path('/static', DATA) - self.add_static_path('/java', DATA) -- self.add_static_path('/java/jmol', os.path.join(os.environ["SAGE_SHARE"],"jmol")) -- self.add_static_path('/jsmol', os.path.join(os.environ["SAGE_SHARE"],"jsmol")) -- self.add_static_path('/jsmol/js', os.path.join(os.environ["SAGE_SHARE"],"jsmol","js")) -- self.add_static_path('/j2s', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s")) -- self.add_static_path('/jsmol/j2s', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s")) -- self.add_static_path('/j2s/core', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s","core")) -- self.add_static_path('/threejs', os.path.join(os.environ["SAGE_SHARE"],"threejs")) -+ self.add_static_path('/java/jmol', os.path.join(os.environ["SAGE_ROOT"],"share","jmol")) -+ self.add_static_path('/jsmol', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol")) -+ self.add_static_path('/jsmol/js', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","js")) -+ self.add_static_path('/j2s', os.path.join(os.environ["SAGE_ROOT"],"jsmol","j2s")) -+ self.add_static_path('/jsmol/j2s', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","j2s")) -+ self.add_static_path('/j2s/core', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","j2s","core")) -+ self.add_static_path('/threejs', os.path.join(os.environ["SAGE_ROOT"],"share","threejs")) - import mimetypes - mimetypes.add_type('text/plain','.jmol') - -diff -up build/pkgs/sagenb/src/sagenb/misc/misc.py.orig build/pkgs/sagenb/src/sagenb/misc/misc.py ---- build/pkgs/sagenb/src/sagenb/misc/misc.py.orig 2018-11-05 08:45:39.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/misc/misc.py 2019-01-04 10:28:38.099158223 -0700 -@@ -196,7 +196,8 @@ def pad_zeros(s, size=3): - - SAGENB_ROOT = os.path.split(resource_filename(__name__, ''))[0] - --DATA = os.path.join(SAGENB_ROOT, 'data') -+import sage.env -+DATA = os.path.join(sage.env.SAGE_SRC, 'sagenb', 'data') - - if 'DOT_SAGENB' in os.environ: - DOT_SAGENB = os.environ['DOT_SAGENB'] -diff -up build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig build/pkgs/sagenb/src/sagenb/notebook/cell.py ---- build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig 2018-11-05 08:45:39.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2019-01-04 10:28:38.100158204 -0700 -@@ -2387,8 +2387,8 @@ class Cell(Cell_generic): - with open(jmol_name, 'r') as f: - jmol_script = f.read() - jmol_script = jmol_script.replace( -- 'defaultdirectory "', -- 'defaultdirectory "{0}/'.format(self.url_to_worksheet())) -+ 'defaultdirectory "', -+ 'defaultdirectory "/home/' + self.worksheet_filename() + '/') - with open(jmol_name, 'w') as f: - f.write(jmol_script) - -diff -up build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py ---- build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig 2018-11-05 08:45:39.000000000 -0700 -+++ build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py 2019-01-04 10:28:38.101158185 -0700 -@@ -53,12 +53,11 @@ sagenb.notebook.misc.DIR = %(cwd)r #We s - # Flask # - ######### - import os, sys, random --import sagenb.flask_version.base as flask_base --opts={} -+sagenb_dir = os.path.join(os.environ['SAGE_ROOT'], 'src', 'sagenb') -+sys.path.append(sagenb_dir) -+import flask_version.base as flask_base - startup_token = '{0:x}'.format(random.randint(0, 2**128)) --if %(automatic_login)s: -- opts['startup_token'] = startup_token --flask_app = flask_base.create_app(%(notebook_opts)s, **opts) -+flask_app = flask_base.create_app(%(notebook_opts)s, startup_token=startup_token) - - def save_notebook(notebook): - print("Quitting all running worksheets...") diff --git a/sagemath-scripts.patch b/sagemath-scripts.patch index 6b6e447..01cef9b 100644 --- a/sagemath-scripts.patch +++ b/sagemath-scripts.patch @@ -1,6 +1,6 @@ diff -up src/bin/sage.orig src/bin/sage ---- src/bin/sage.orig 2019-10-03 14:38:40.429507574 -0300 -+++ src/bin/sage 2019-10-03 14:47:00.852631198 -0300 +--- src/bin/sage.orig 2020-01-01 04:03:10.000000000 -0700 ++++ src/bin/sage 2020-02-25 13:37:42.510072662 -0700 @@ -26,13 +26,10 @@ usage() { echo " file.[sage|py|spyx] -- run given .sage, .py or .spyx file" echo " -advanced -- list all command line options" @@ -585,7 +585,7 @@ diff -up src/bin/sage.orig src/bin/sage - # tends to ask interactive questions if something goes wrong. These - # cause the build to hang. If stdin is /dev/null, TeX just aborts. - shift -- exec sage-python23 -m sage_setup.docbuild "$@" diff --git a/sagemath.spec b/sagemath.spec index 5571df8..d456da1 100644 --- a/sagemath.spec +++ b/sagemath.spec @@ -18,9 +18,6 @@ %bcond_with docs %endif -# not functional due to missing jar dependencies -%bcond_with sage3d - # use a workaround to match upstream sagemath patched sphinx %bcond_without sphinx_hack @@ -40,7 +37,7 @@ %global combinatorial_designs_pkg combinatorial_designs-20140630 %global conway_polynomials_pkg conway_polynomials-0.5 -%global cremona_ver 2016-10-17 +%global cremona_ver 2019-10-29 %global elliptic_curves_pkg elliptic_curves-0.8.1 %global flintqs_pkg flintqs-1.0 %global graphs_pkg graphs-20161026 @@ -59,8 +56,7 @@ %endif %global polytopes_db_pkg polytopes_db-20170220 %global rubiks_pkg rubiks-20070912 -%global sagenb_pkg sagenb-1.1.2 -%global sagetex_pkg sagetex-3.3 +%global sagetex_pkg sagetex-3.4 %global Sphinx_pkg Sphinx-1.8.5 %global singular_pkg singular-4.1.1p2 %if %{with bundled_thebe} @@ -68,7 +64,7 @@ %global thebe_pkg thebe-%{thebe_ver} %endif %if %{with bundled_threejs} -%global threejs_ver r105 +%global threejs_ver r110 %global threejs_pkg threejs-%{threejs_ver} %endif %if %{with bundled_widgetsnbextension} @@ -77,7 +73,7 @@ %endif # Spkg equivalents of required rpms; we pretend they are installed as spkgs. -%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 cbc-2.10.3 CoCoALib-0.99601 coxeter3-1.1 cryptominisat-5.6.8 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.10.2 gmp-6.1.2 libsirocco-2.0 lrslib-070 mcqd-1.0 meataxe-1.0 primecount-5.1 qepcad-B.1.72 saclib-2.2.7 surf-1.0.6-gcc6 tdlib-0.9.0 +%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 cbc-2.10.4 CoCoALib-0.99650 coxeter3-3.1 cryptominisat-5.6.8 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.10.2 gmp-6.1.2 libsirocco-2.0.2 lrslib-070 mcqd-1.0 meataxe-1.0 primecount-5.3 qepcad-B.1.72 saclib-2.2.7 surf-1.0.6-gcc6 tdlib-0.9.0 %ifarch %{ix86} x86_64 %global SAGE_REQUIRED_PKGS %{SAGE_REQUIRED_PKGS} fes-0.2 @@ -94,8 +90,8 @@ Name: sagemath Summary: A free open-source mathematics software system -Version: 8.9 -Release: 3%{?dist} +Version: 9.0 +Release: 1%{?dist} # The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file # Additionally, every $files section has a comment with the license name # before files with that license @@ -107,8 +103,8 @@ Source2: gprc.expect # Follow maxima's ExclusiveArch ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9 -# Fix ecm interact() command -Patch0: %{name}-ecm.patch +# Fix stray escapes in python strings +Patch0: %{name}-escape.patch # Fix a "random" bit chooser that always chooses 0 Patch1: %{name}-random.patch @@ -122,7 +118,7 @@ Patch3: %{name}-extensions.patch # helper to: # o respect a DESTDIR environment variable -# o avoid double '//' in pathnames, what can confused debugedit & co +# o avoid double '//' in pathnames, which can confuse debugedit & co # o minor change to help in incremental builds by avoiding rebuilding # files # o do not assume there is an installed sagemath @@ -131,92 +127,83 @@ Patch4: %{name}-rpmbuild.patch # build documentation in buildroot environment Patch5: %{name}-sagedoc.patch -# sage notebook rpm and system environment adjustments -Patch6: %{name}-sagenb.patch - # do not attempt to create state files in system directories -Patch7: %{name}-readonly.patch +Patch6: %{name}-readonly.patch # work with all maxima-runtime lisp backend packages -Patch8: %{name}-maxima.patch +Patch7: %{name}-maxima.patch # execute 4ti2 programs in $PATH not in $SAGE_ROOT/local/bin -Patch9: %{name}-4ti2.patch +Patch8: %{name}-4ti2.patch # use jmol itself to export preview images # FIXME besides not using X and told so, fails if DISPLAY is not set -Patch10: %{name}-jmol.patch +Patch9: %{name}-jmol.patch # tell the user how to install the large Cremona database # add a missing commit() that causes large database construction to fail -Patch11: %{name}-cremona.patch +Patch10: %{name}-cremona.patch # adapt to python 3 and cython running in python 3 mode -Patch12: %{name}-python3.patch +Patch11: %{name}-python3.patch # correct path to the nauty geng program -Patch13: %{name}-nauty.patch +Patch12: %{name}-nauty.patch # remove the buildroot path from Cython output -Patch14: %{name}-buildroot.patch +Patch13: %{name}-buildroot.patch # update c++ standard to fix FTBFS -Patch15: %{name}-lcalc.patch +Patch14: %{name}-lcalc.patch # avoid assertion in coin backend -Patch16: %{name}-cbc.patch +Patch15: %{name}-cbc.patch # Use system gap directories -Patch17: %{name}-libgap.patch +Patch16: %{name}-libgap.patch # Build fes -Patch18: %{name}-fes-build.patch +Patch17: %{name}-fes-build.patch # Disable fes -Patch19: %{name}-fes.patch +Patch18: %{name}-fes.patch # Side effect of using distro packages # https://bugzilla.redhat.com/show_bug.cgi?id=974769 -Patch20: %{name}-sympy.patch +Patch19: %{name}-sympy.patch # Correct unable to start QEPCAD within sage # https://bugzilla.redhat.com/show_bug.cgi?id=1243590 -Patch21: %{name}-qepcad.patch +Patch20: %{name}-qepcad.patch # Correct path to arb headers -Patch22: %{name}-arb.patch +Patch21: %{name}-arb.patch # Add missing include paths -Patch23: %{name}-includes.patch +Patch22: %{name}-includes.patch # Use openblas -Patch24: %{name}-openblas.patch +Patch23: %{name}-openblas.patch # Fix paths to latte-integrale binaries -Patch25: %{name}-latte.patch +Patch24: %{name}-latte.patch # Upstream fixes for random SIGFPEs due to ecl messing with the fp state -Patch26: %{name}-sigfpe.patch +Patch25: %{name}-sigfpe.patch # Add some missing #includes and types in the rubiks code -Patch27: %{name}-rubiks.patch +Patch26: %{name}-rubiks.patch # Fix an indentation error in sagetex -Patch28: %{name}-sagetex.patch +Patch27: %{name}-sagetex.patch # Fix some path settings in the sage environment -Patch29: %{name}-env.patch - -# Make notebook minimally function until upstream finally removes it -Patch30: %{name}-sagenb-python3.patch - -# Adapt to primecount 5.x -Patch31: %{name}-primecount.patch +Patch28: %{name}-env.patch # Adapt to recent tdlib 0.9 -Patch32: %{name}-tdlib.patch +Patch29: %{name}-tdlib.patch # Use local objects.inv for intersphinx since no network on koji builders -Patch33: %{name}-intersphinx.patch +Patch30: %{name}-intersphinx.patch BuildRequires: 4ti2 BuildRequires: arb-devel @@ -275,7 +262,7 @@ BuildRequires: iml-devel BuildRequires: jmol BuildRequires: jsmath-fonts # To have a proper link -#BuildRequires: jsmol +BuildRequires: jsmol BuildRequires: L-function-devel BuildRequires: lapack-devel BuildRequires: latte-integrale @@ -319,10 +306,6 @@ BuildRequires: python3dist(brial) BuildRequires: python3dist(cvxopt) BuildRequires: python3dist(cython) BuildRequires: python3dist(docutils) -BuildRequires: python3dist(flask-autoindex) -BuildRequires: python3dist(flask-babel) -BuildRequires: python3dist(flask-openid) -BuildRequires: python3dist(flask-silk) BuildRequires: python3dist(fpylll) BuildRequires: python3dist(future) BuildRequires: python3dist(gmpy2) @@ -340,7 +323,6 @@ BuildRequires: python3dist(networkx) BuildRequires: python3dist(notebook) %if %{with bundled_ipython} BuildRequires: python3dist(path.py) -BuildRequires: python3dist(pathlib2) %endif %if %{without bundled_pexpect} BuildRequires: python3dist(pexpect) @@ -359,7 +341,6 @@ BuildRequires: python3dist(pyzmq) BuildRequires: python3dist(rpy2) BuildRequires: python3dist(scipy) BuildRequires: python3dist(scons) -BuildRequires: python3dist(send2trash) BuildRequires: python3dist(setuptools) %if %{with bundled_ipython} BuildRequires: python3dist(simplegeneric) @@ -368,7 +349,6 @@ BuildRequires: python3dist(six) BuildRequires: python3dist(speaklater) BuildRequires: python3dist(sphinx) BuildRequires: python3dist(sympy) -BuildRequires: python3dist(twisted) BuildRequires: python3dist(zodb3) BuildRequires: qepcad-B BuildRequires: R @@ -378,14 +358,14 @@ BuildRequires: rw-devel BuildRequires: sharedmeataxe-devel BuildRequires: Singular-devel BuildRequires: sirocco-devel -BuildRequires: stix-math-fonts +BuildRequires: stix-fonts +BuildRequires: suitesparse-devel BuildRequires: symmetrica-devel BuildRequires: sympow BuildRequires: tachyon BuildRequires: texlive BuildRequires: tex(anyfontsize.sty) BuildRequires: tex(makecmds.sty) -BuildRequires: vecmath # For _jsdir macro BuildRequires: web-assets-devel BuildRequires: xorg-x11-fonts-Type1 @@ -394,14 +374,14 @@ BuildRequires: zlib-devel BuildRequires: zn_poly-devel Requires: hicolor-icon-theme -Requires: %{name}-core -Requires: %{name}-data +Requires: %{name}-core = %{version}-%{release} +Requires: %{name}-data = %{version}-%{release} %if %{with docs} -Requires: %{name}-doc-en +Requires: %{name}-doc-en = %{version}-%{release} %endif -Requires: %{name}-notebook -Requires: %{name}-rubiks -Requires: %{name}-sagetex +Requires: %{name}-jupyter = %{version}-%{release} +Requires: %{name}-rubiks = %{version}-%{release} +Requires: %{name}-sagetex = %{version}-%{release} %if %{with bundled_thebe} Provides: bundled(thebe) = %{thebe_ver} @@ -479,7 +459,6 @@ Requires: python3dist(matplotlib) Requires: python3dist(networkx) %if %{with bundled_ipython} Requires: python3dist(path.py) -Requires: python3dist(pathlib2) %endif %if %{without bundled_pexpect} Requires: python3dist(pexpect) @@ -505,8 +484,8 @@ Requires: python3dist(sympy) Requires: python3dist(zodb3) Requires: qepcad-B Requires: Singular -# Required by widgetsnbextension and thebe; remove when they are unbundled -Requires: stix-math-fonts +# Required by thebe; remove when it is unbundled +Requires: stix-fonts Requires: sympow Requires: tachyon Requires: texlive @@ -701,17 +680,18 @@ This package contains the Turkish %{name} documentation. %endif #------------------------------------------------------------------------ -%package notebook -Summary: The Sage Notebook +%package jupyter +Summary: Jupyter integration for sagemath Requires: %{name}%{?_isa} = %{version}-%{release} Requires: python-jupyter-filesystem -Requires: python3dist(flask-silk) -Requires: python3dist(send2trash) -Requires: vecmath -%description notebook -The Sage Notebook is a web-based graphical user interface for -mathematical software. +# This can be removed when Fedora 31 reaches EOL +Obsoletes: sagemath-notebook < 9.0-1 +Provides: sagemath-notebook = %{version}-%{release} + +%description jupyter +This package contains a Jupyter integration for sagemath, replacing the +defunct notebook functionality. #------------------------------------------------------------------------ %package rubiks @@ -835,11 +815,6 @@ pushd build/pkgs/rubiks popd popd -pushd build/pkgs/sagenb - tar jxf ../../../upstream/%{sagenb_pkg}.tar.bz2 - mv %{sagenb_pkg} src -popd - pushd build/pkgs/sagetex tar zxf ../../../upstream/%{sagetex_pkg}.tar.gz mv %{sagetex_pkg} src @@ -901,14 +876,14 @@ popd %patch14 %patch15 %patch16 -%patch17 %if %{with fes} -%patch18 +%patch17 %else -%patch19 +%patch18 %endif +%patch19 %patch20 %patch21 %patch22 @@ -920,9 +895,6 @@ popd %patch28 %patch29 %patch30 -%patch31 -%patch32 -%patch33 sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \ -e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \ @@ -933,19 +905,10 @@ sed -e 's|@@CYSIGNALS@@|%{python3_sitearch}/cysignals|' \ -e 's|@@BUILDROOT@@|%{buildroot}|' \ -i src/setup.py -sed -e "/flask-oldsessions/d" \ - -i build/pkgs/sagenb/src/setup.py - #------------------------------------------------------------------------ # some .c files are not (re)generated find src/sage \( -name \*.pyx -o -name \*.pxd \) -exec touch {} \+ -# remove bundled jar files before build -rm build/pkgs/sagenb/src/sagenb/data/sage3d/lib/sage3d.jar - -# remove binary egg -rm -r build/pkgs/sagenb/src/sagenb.egg-info - # fix Singular paths singver=$(sed 's/.*-\([.[:digit:]]*\).*/\1/' <<< %{singular_pkg}) sed -e "s,SINGULARPATH=\",&%{_datadir}/singular/LIB:," \ @@ -961,8 +924,8 @@ grep -FrlZ '#!%{_bindir}/env python' | \ xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{__python3},g' grep -FrlZ '#!%{_bindir}/env sage-system-python' | \ xargs -0 sed -i 's,#!%{_bindir}/env sage-system-python,#!%{__python3},g' -grep -FrlZ '#!%{_bindir}/env sage-python23' | \ - xargs -0 sed -i 's,#!%{_bindir}/env sage-python23,#!%{__python3},g' +grep -FrlZ '#!%{_bindir}/env sage-python' | \ + xargs -0 sed -i 's,#!%{_bindir}/env sage-python,#!%{__python3},g' grep -FrlZ 'sage-python23' | xargs -0 sed -i 's,sage-python23,python3,g' grep -FrlZ '#!%{_bindir}/env' | \ xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,' @@ -1089,10 +1052,6 @@ pushd src popd #------------------------------------------------------------------------ -pushd build/pkgs/sagenb/src - %__python3 ./setup.py build -popd - pushd build/pkgs/sagetex/src %__python3 ./setup.py build popd @@ -1181,22 +1140,6 @@ pushd src %endif popd -#------------------------------------------------------------------------ -pushd build/pkgs/sagenb/src - rm -f %{buildroot}%{python3_sitearch}/sagenb/data/sage3d/sage3d - %py3_install "--install-purelib=%{python3_sitearch}" - # jsmol - ln -sf %{_jsdir}/jsmol $SAGE_SHARE/jsmol - # sage3d - rm -f %{buildroot}%{_bindir}/sage3d -%if %{with sage3d} - ln -sf %{SAGE_LOCAL}/bin/sage3d %{buildroot}%{python3_sitearch}/sagenb/data/sage3d/sage3d -%endif - ln -sf %{python3_sitearch}/sagenb %{buildroot}%{SAGE_SRC}/sagenb - # use system mathjax - ln -sf %{_jsdir}/mathjax %{buildroot}%{python3_sitearch}/sagenb/data/mathjax -popd - #------------------------------------------------------------------------ %if %{with bundled_pexpect} pushd build/pkgs/pexpect/src @@ -1407,16 +1350,6 @@ EOF #------------------------------------------------------------------------ chmod +x %{buildroot}%{_bindir}/sage -#------------------------------------------------------------------------ -%if %{with sage3d} -cat > %{buildroot}%{SAGE_LOCAL}/bin/sage3d << EOF -#!/bin/sh - -java -classpath %{SAGE_SRC}/sage/sagenb/data/sage3d/lib/sage3d.jar:%{_javadir}/j3dcore.jar:%{_javadir}/vecmath.jar:%{_javadir}/j3dutils.jar org.sagemath.sage3d.ObjectViewerApp "\$1" -EOF -chmod +x %{buildroot}%{SAGE_LOCAL}/bin/sage3d -%endif - #------------------------------------------------------------------------ # adjust cython interface: # o install csage headers @@ -1546,13 +1479,6 @@ rm -fr %{buildroot}%{SAGE_DOC}/output/inventory find %{buildroot}%{SAGE_DOC} -type d -name _sources -exec rm -fr {} \+ %endif -# remove .po files -rm %{buildroot}%{python3_sitearch}/sagenb/translations/*/LC_MESSAGES/*.po - -%if %{without sage3d} -rm -r %{buildroot}%{python3_sitearch}/sagenb/data/sage3d -%endif - # remove build directory in buildroot [ -d %{buildroot}%{SAGE_SRC}/build ] && rm -r %{buildroot}%{SAGE_SRC}/build @@ -1841,75 +1767,9 @@ rm -fr %{SAGE_LOCAL}/var/lib/sage/installed/database_cremona_ellcurve-%{cremona_ %endif #------------------------------------------------------------------------ -%files notebook +%files jupyter %{SAGE_ETC}/notebook-ipython -# GPLv2+ -%{SAGE_SRC}/sagenb -%dir %{python3_sitearch}/sagenb -%{python3_sitearch}/sagenb/*.py* -%{python3_sitearch}/sagenb/__pycache__/ -%{python3_sitearch}/sagenb/data/__pycache__/ -%{python3_sitearch}/sagenb/testing/__pycache__/ -%{python3_sitearch}/sagenb-*.egg-info -%dir %{python3_sitearch}/sagenb/data -# BSD -%{python3_sitearch}/sagenb/data/codemirror -# MIT -%{python3_sitearch}/sagenb/data/graph_editor -# ASL 2.0 -%{python3_sitearch}/sagenb/data/highlight # LGPLv2+ -%{SAGE_SHARE}/jsmol -# (MIT or GPLv2) and (MIT and BSD and GPL) -%{python3_sitearch}/sagenb/data/jquery -# (MIT or GPLv2) and (MIT and BSD and GPL) -%{python3_sitearch}/sagenb/data/jqueryui -# Public Domain -%{python3_sitearch}/sagenb/data/json -# Symbolic link to $_jsdir/mathjax -%{python3_sitearch}/sagenb/data/mathjax -# Empty (do not run doctests flag file) -%{python3_sitearch}/sagenb/data/nodoctest.py* -# BSD -%{python3_sitearch}/sagenb/data/openid-realselector -# GPLv2+ -%{python3_sitearch}/sagenb/data/sage -%if %{with sage3d} -# GPLv2+ -%{python3_sitearch}/sagenb/data/sage3d -%endif -# LGPLv2+ -%{python3_sitearch}/sagenb/data/tiny_mce -# LGPLv2+ -%{python3_sitearch}/sagenb/data/zorn -# GPLv2+ -%{python3_sitearch}/sagenb/flask_version -# GPLv2+ -%{python3_sitearch}/sagenb/interfaces -# GPLv2+ -%{python3_sitearch}/sagenb/misc -# GPLv2+ -%{python3_sitearch}/sagenb/notebook -# GPLv2+ -%{python3_sitearch}/sagenb/simple -# GPLv2+ -%{python3_sitearch}/sagenb/storage -# GPLv2+ -%dir %{python3_sitearch}/sagenb/testing -%{python3_sitearch}/sagenb/testing/*.py* -%{python3_sitearch}/sagenb/testing/tests -# ASL 2.0 -%{python3_sitearch}/sagenb/testing/selenium -# GPLv2+ -%dir %{python3_sitearch}/sagenb/translations -%lang(cs_CZ) %{python3_sitearch}/sagenb/translations/cs_CZ -%lang(de_AT) %{python3_sitearch}/sagenb/translations/de_AT -%lang(de_AT) %{python3_sitearch}/sagenb/translations/en_US -%lang(de_AT) %{python3_sitearch}/sagenb/translations/es_ES -%lang(de_AT) %{python3_sitearch}/sagenb/translations/fr_FR -%lang(pt_BR) %{python3_sitearch}/sagenb/translations/pt_BR -%lang(ru_RU) %{python3_sitearch}/sagenb/translations/ru_RU -%lang(uk_UA) %{python3_sitearch}/sagenb/translations/uk_UA %if %{with bundled_widgetsnbextension} %config(noreplace) %{_sysconfdir}/jupyter/nbconfig/notebook.d/*.json %{_datadir}/jupyter/nbextensions/* @@ -1939,6 +1799,16 @@ rm -fr %{SAGE_LOCAL}/var/lib/sage/installed/database_cremona_ellcurve-%{cremona_ ######################################################################## %changelog +* Fri Feb 28 2020 Jerry James - 9.0-1 +- Version 9.0 (bz 1756780, 1770880) +- Drop upstreamed -ecm and -primecount patches +- Add -escape patch +- The old notebook (sagenb) is no longer shipped, so drop the -sagenb and + -sagenb-python3 patches, the -notebook subpackage, and some BRs +- New -jupyter subpackage +- Add suitesparse BR +- Drop pathlib2 BR (bz 1797116) + * Thu Jan 30 2020 Fedora Release Engineering - 8.9-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild diff --git a/sources b/sources index 8e28ab9..a23c3dc 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (cremona-2016-10-17.tar.gz) = 61f55ec5c15e32b5fdaf1fe8f2f3d50ba9afa542d8634918ec9493d739127f8c06a44b3cb1227a2979522baf61951ac37a67ae2b12c920958b04f8198d07ff57 -SHA512 (sage-8.9.tar.gz) = 056646488f0b3fc092057c7ff807762c2f98d13748e14540ae9a67ceb3a3d62f8c0263c80c61a36c423353d7051e2dfae466a3f452f3910d9ba95ef26b385e94 +SHA512 (cremona-2019-10-29.tar.gz) = 32fbb828f26f87191e39123762cfbd796aac9abf346f0dc981e8e3f390435b22d281be3031ea92ae7e18f4ce41af8054784ca0d550a08f17b05c54ca08b4c9c8 +SHA512 (sage-9.0.tar.gz) = b0d3af3e8e9dd587314a33ec2f68e901dcd18cdd2cce4444fea5f04669dab6bb3e7db7642ff3e9ef1b1ffaf7a6f3c26272f889e1f5fb8fd63d5f5b68b5d168ed