Date: Sunday, March 24, 2019 @ 13:04:37
  Author: arojas
Revision: 443325

Update to 8.7

Modified:
  sagemath-doc/trunk/PKGBUILD
  sagemath-doc/trunk/sagemath-doc-segfault.patch
  sagemath-doc/trunk/sagemath-doc-sphinx-1.8.patch
Deleted:
  sagemath-doc/trunk/sagemath-cypari2.patch

-------------------------------+
 PKGBUILD                      |   26 -
 sagemath-cypari2.patch        |  711 ----------------------------------------
 sagemath-doc-segfault.patch   |   63 ---
 sagemath-doc-sphinx-1.8.patch |   50 ++
 4 files changed, 59 insertions(+), 791 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2019-03-24 12:03:29 UTC (rev 443324)
+++ PKGBUILD    2019-03-24 13:04:37 UTC (rev 443325)
@@ -1,26 +1,24 @@
 # Maintainer: Antonio Rojas <aro...@archlinux.org>
 
 pkgname=sagemath-doc
-pkgver=8.6
-pkgrel=2
+pkgver=8.7
+pkgrel=1
 pkgdesc="HTML documentation and inline help for SageMath"
 arch=(any)
 url="http://www.sagemath.org";
 license=(GPL)
-depends=(python2-sphinx gap-doc thebe)
+depends=(python2-sphinx gap-doc pplpy-doc thebe)
 makedepends=(sagemath python2-pyzmq python2-docutils python2-jupyter_client 
python2-pkgconfig cython2 python2-ipywidgets)
-source=("$pkgname-$pkgver.tar.gz::https://github.com/sagemath/sage/archive/$pkgver.tar.gz";
+source=(sagemath-$pkgver.tar.gz::"https://github.com/sagemath/sage/archive/$pkgver.tar.gz";
         docbuild_main.patch
         sagemath-doc-sphinx-1.8.patch
         sagemath-doc-segfault.patch
-        sagemath-ecl-sigfpe.patch
-        sagemath-cypari2.patch)
-sha256sums=('dea613fc955cada76aaa7ab379bc5a219fe8b496064824f8c798b2b1651442fa'
+        sagemath-ecl-sigfpe.patch)
+sha256sums=('263c3b3fc956b8bebc532f3b51e68c1b0d559d3b7e7c9fadffdfc0f4dbae18ab'
             'ea5e17bb7a7cb36a22e5e3872fcc2585852bc971c4b139b0b2cd69a36c1b009b'
-            '337d1d84749c1415c120a95d621d8cb0a4ef6e29245193c673e4b3f3a5d56fe9'
-            '141ac064305526785fb6d9507896876cbf893cd41ec1e42d86fc836f766c200f'
-            'a42f3b152b1aedb8abf16bc70971419919d1fe30328574e7fef8305f9d07d938'
-            'ca47248d2ed5edfe663ea02e261ddbb26a7cb03bef67928dbec690d9b9a8f129')
+            'ec6835d555056e1f20684de015f43c46cff62a132c9cd6f5ea7243c6bacd3f1e'
+            '2ee218610001f906015df647881581ff1f7eb0acf923b79b72056965129bac22'
+            'a42f3b152b1aedb8abf16bc70971419919d1fe30328574e7fef8305f9d07d938')
 
 prepare() {
   cd sage-$pkgver
@@ -32,10 +30,8 @@
   ln -sr src/sage_setup local-python
 # fix build with sphinx 1.8
   patch -p1 -i ../sagemath-doc-sphinx-1.8.patch
-# Partially revert https://trac.sagemath.org/ticket/24655 to workaround a 
segfault
-  patch -Rp1 -i ../sagemath-doc-segfault.patch
-# Fix build with cypari 2.0 https://trac.sagemath.org/ticket/26442
-  patch -p1 -i ../sagemath-cypari2.patch
+# Fix segfault when pari is compiled with threads 
https://trac.sagemath.org/ticket/26608
+  patch -p1 -i ../sagemath-doc-segfault.patch
 # Fix SIGFPE crashes with ecl 16.1.3 https://trac.sagemath.org/ticket/22191
   patch -p1 -i ../sagemath-ecl-sigfpe.patch
 }

Deleted: sagemath-cypari2.patch
===================================================================
--- sagemath-cypari2.patch      2019-03-24 12:03:29 UTC (rev 443324)
+++ sagemath-cypari2.patch      2019-03-24 13:04:37 UTC (rev 443325)
@@ -1,711 +0,0 @@
-diff --git a/src/sage/matrix/matrix_integer_dense.pxd 
b/src/sage/matrix/matrix_integer_dense.pxd
-index bc3af7c..5dd2a8e 100644
---- a/src/sage/matrix/matrix_integer_dense.pxd
-+++ b/src/sage/matrix/matrix_integer_dense.pxd
-@@ -30,6 +30,5 @@ cdef class Matrix_integer_dense(Matrix_dense):
- 
-     cdef Matrix_integer_dense _new(self, Py_ssize_t nrows, Py_ssize_t ncols)
- 
--    cdef extract_hnf_from_pari_matrix(self, GEN H, int flag, bint 
include_zero_rows)
- 
- cpdef _lift_crt(Matrix_integer_dense M, residues, moduli=*)
-diff --git a/src/sage/matrix/matrix_integer_dense.pyx 
b/src/sage/matrix/matrix_integer_dense.pyx
-index 4f0b0e6..87e3391 100644
---- a/src/sage/matrix/matrix_integer_dense.pyx
-+++ b/src/sage/matrix/matrix_integer_dense.pyx
-@@ -87,11 +87,11 @@ from .args cimport SparseEntry, MatrixArgs_init
- #########################################################
- # PARI C library
- from cypari2.gen cimport Gen
-+from cypari2.stack cimport clear_stack, new_gen
-+from cypari2.paridecl cimport *
- from sage.libs.pari.convert_gmp cimport INT_to_mpz
- from sage.libs.pari.convert_flint cimport (_new_GEN_from_fmpz_mat_t,
-            _new_GEN_from_fmpz_mat_t_rotate90, integer_matrix)
--from cypari2.stack cimport clear_stack
--from cypari2.paridecl cimport *
- #########################################################
- 
- from sage.arith.multi_modular cimport MultiModularBasis
-@@ -2016,10 +2016,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
-             raise ValueError("transformation matrix only available with 
p-adic algorithm")
-         elif algorithm in ["pari", "pari0", "pari1", "pari4"]:
-             flag = int(algorithm[-1]) if algorithm != "pari" else 1
--            if self.height().ndigits() > 10000 or n >= 50:
--                H_m = self._hnf_pari_big(flag, 
include_zero_rows=include_zero_rows)
--            else:
--                H_m = self._hnf_pari(flag, 
include_zero_rows=include_zero_rows)
-+            H_m = self._hnf_pari(flag, include_zero_rows=include_zero_rows)
-         elif algorithm == 'ntl':
-             if nr != nc:
-                 raise ValueError("ntl only computes HNF for square matrices 
of full rank.")
-@@ -5664,6 +5661,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
-         matrices.
- 
-         EXAMPLES::
-+
-             sage: matrix(ZZ,3,[1..9])._rank_pari()
-             2
-         """
-@@ -5674,16 +5672,12 @@ cdef class Matrix_integer_dense(Matrix_dense):
- 
-     def _hnf_pari(self, int flag=0, bint include_zero_rows=True):
-         """
--        Hermite form of this matrix, computed using PARI.  The
--        computation is done entirely on the PARI stack, then the PARI
--        stack is cleared.  This function is only useful for small
--        matrices, and can crash on large matrices (e.g., if the PARI
--        stack overflows).
-+        Hermite normal form of this matrix, computed using PARI.
- 
-         INPUT:
- 
-         - ``flag`` -- 0 (default), 1, 3 or 4 (see docstring for
--          gp.mathnf).
-+          ``pari.mathnf``).
- 
-         - ``include_zero_rows`` -- boolean. if False, do not include
-           any of the zero rows at the bottom of the matrix in the
-@@ -5733,98 +5727,13 @@ cdef class Matrix_integer_dense(Matrix_dense):
-             sage: pari('mathnf(Mat([0,1]), 4)')
-             [Mat(1), [1, 0; 0, 1]]
-         """
--        cdef GEN A
-         sig_on()
-         A = _new_GEN_from_fmpz_mat_t_rotate90(self._matrix)
--        cdef GEN H = mathnf0(A, flag)
--        B = self.extract_hnf_from_pari_matrix(H, flag, include_zero_rows)
--        clear_stack()  # This calls sig_off()
--        return B
--
--
--    def _hnf_pari_big(self, int flag=0, bint include_zero_rows=True):
--        """
--        Hermite form of this matrix, computed using PARI.
--
--        INPUT:
--
--        - ``flag`` -- 0 (default), 1, 3 or 4 (see docstring for
--          gp.mathnf).
--
--        - ``include_zero_rows`` -- boolean. if False, do not include
--          any of the zero rows at the bottom of the matrix in the
--          output.
--
--        .. NOTE::
--
--            In no cases is the transformation matrix returned by this
--            function.
--
--        EXAMPLES::
--
--            sage: a = matrix(ZZ,3,3,[1..9])
--            sage: a._hnf_pari_big(flag=0, include_zero_rows=True)
--            [1 2 3]
--            [0 3 6]
--            [0 0 0]
--            sage: a._hnf_pari_big(flag=1, include_zero_rows=True)
--            [1 2 3]
--            [0 3 6]
--            [0 0 0]
--            sage: a._hnf_pari_big(flag=3, include_zero_rows=True)
--            [1 2 3]
--            [0 3 6]
--            [0 0 0]
--            sage: a._hnf_pari_big(flag=4, include_zero_rows=True)
--            [1 2 3]
--            [0 3 6]
--            [0 0 0]
--
--        Check that ``include_zero_rows=False`` works correctly::
--
--            sage: matrix(ZZ,3,[1..9])._hnf_pari_big(0, 
include_zero_rows=False)
--            [1 2 3]
--            [0 3 6]
--            sage: matrix(ZZ,3,[1..9])._hnf_pari_big(1, 
include_zero_rows=False)
--            [1 2 3]
--            [0 3 6]
--            sage: matrix(ZZ,3,[1..9])._hnf_pari_big(3, 
include_zero_rows=False)
--            [1 2 3]
--            [0 3 6]
--            sage: matrix(ZZ,3,[1..9])._hnf_pari_big(4, 
include_zero_rows=False)
--            [1 2 3]
--            [0 3 6]
--        """
--        cdef Gen H = integer_matrix(self._matrix, 1)
--        H = H.mathnf(flag)
--        sig_on()
--        B = self.extract_hnf_from_pari_matrix(H.g, flag, include_zero_rows)
--        clear_stack()  # This calls sig_off()
--        return B
--
--    cdef extract_hnf_from_pari_matrix(self, GEN H, int flag, bint 
include_zero_rows):
--        # Throw away the transformation matrix (yes, we should later
--        # code this to keep track of it).
--        cdef mpz_t tmp
--        mpz_init(tmp)
--        if flag > 0:
--            H = gel(H,1)
--
--        # Figure out how many columns we got back.
--        cdef Py_ssize_t H_nc = glength(H)  # number of columns
--        # Now get the resulting Hermite form matrix back to Sage, suitably 
re-arranged.
--        cdef Matrix_integer_dense B
--        if include_zero_rows:
--            B = self.new_matrix()
--        else:
--            B = self.new_matrix(nrows=H_nc)
--        for i in range(self._ncols):
--            for j in range(H_nc):
--                INT_to_mpz(tmp, gcoeff(H, i+1, H_nc-j))
--                fmpz_set_mpz(fmpz_mat_entry(B._matrix,j,self._ncols-i-1),tmp)
--        mpz_clear(tmp)
--        return B
--
-+        H = mathnf0(A, flag)
-+        if typ(H) == t_VEC:
-+            H = gel(H, 1)
-+        GenH = new_gen(H)
-+        return extract_hnf_from_pari_matrix(self, GenH, include_zero_rows)
- 
-     def p_minimal_polynomials(self, p, s_max=None):
-         r"""
-@@ -5966,7 +5875,27 @@ cdef inline GEN pari_GEN(Matrix_integer_dense B):
-     return A
- 
- 
--    
#####################################################################################
-+cdef extract_hnf_from_pari_matrix(Matrix_integer_dense self, Gen H, bint 
include_zero_rows):
-+    cdef mpz_t tmp
-+    mpz_init(tmp)
-+
-+    # Figure out how many columns we got back.
-+    cdef long H_nc = glength(H.g)  # number of columns
-+    # Now get the resulting Hermite form matrix back to Sage, suitably 
re-arranged.
-+    cdef Matrix_integer_dense B
-+    if include_zero_rows:
-+        B = self.new_matrix()
-+    else:
-+        B = self.new_matrix(nrows=H_nc)
-+    cdef long i, j
-+    for i in range(self._ncols):
-+        for j in range(H_nc):
-+            sig_check()
-+            INT_to_mpz(tmp, gcoeff(H.g, i+1, H_nc-j))
-+            fmpz_set_mpz(fmpz_mat_entry(B._matrix,j,self._ncols-i-1),tmp)
-+    mpz_clear(tmp)
-+    return B
-+
- 
- cdef _clear_columns(Matrix_integer_dense A, pivots, Py_ssize_t n):
-     # Clear all columns
-@@ -5990,11 +5919,6 @@ cdef _clear_columns(Matrix_integer_dense A, pivots, 
Py_ssize_t n):
-     fmpz_clear(t)
-     sig_off()
- 
--###############################################################
--
--
--
--
- 
- cpdef _lift_crt(Matrix_integer_dense M, residues, moduli=None):
-     """
-diff --git a/src/sage/modular/modform/eis_series_cython.pyx 
b/src/sage/modular/modform/eis_series_cython.pyx
-index f7e944c..3557c6b 100644
---- a/src/sage/modular/modform/eis_series_cython.pyx
-+++ b/src/sage/modular/modform/eis_series_cython.pyx
-@@ -3,7 +3,7 @@ Eisenstein Series (optimized compiled functions)
- """
- 
- from cysignals.memory cimport check_allocarray, sig_free
--from cysignals.signals cimport sig_on, sig_off
-+from cysignals.signals cimport sig_check
- 
- from sage.rings.rational_field import QQ
- from sage.rings.power_series_ring import PowerSeriesRing
-@@ -161,8 +161,7 @@ cpdef eisenstein_series_poly(int k, int prec = 10) :
-     """
-     cdef mpz_t *val = <mpz_t *>check_allocarray(prec, sizeof(mpz_t))
-     cdef mpz_t one, mult, term, last, term_m1, last_m1
--    cdef unsigned long int expt
--    cdef long ind, ppow, int_p
-+    cdef long ind
-     cdef int i
-     cdef Fmpz_poly res = Fmpz_poly.__new__(Fmpz_poly)
- 
-@@ -173,8 +172,6 @@ cpdef eisenstein_series_poly(int k, int prec = 10) :
-     if (prec == 0):
-         return Fmpz_poly.__new__(Fmpz_poly)
- 
--    sig_on()
--
-     mpz_init(one)
-     mpz_init(term)
-     mpz_init(last)
-@@ -182,33 +179,33 @@ cpdef eisenstein_series_poly(int k, int prec = 10) :
-     mpz_init(term_m1)
-     mpz_init(last_m1)
- 
--    for i from 0 <= i < prec :
--        mpz_init(val[i])
--        mpz_set_si(val[i], 1)
-+    for i in range(prec):
-+        mpz_init_set_si(val[i], 1)
- 
-     mpz_set_si(one, 1)
- 
--    expt = <unsigned long int>(k - 1)
--    a0 = - bernoulli(k) / (2*k)
-+    cdef unsigned long expt = k - 1
-+    a0 = -bernoulli(k) / (2*k)
- 
--    for p in primes(1,prec) :
--        int_p = int(p)
--        ppow = <long int>int_p
-+    cdef long p, ppow
-+    for p in primes(1, prec) :
-+        ppow = p
- 
--        mpz_set_si(mult, int_p)
-+        mpz_set_si(mult, p)
-         mpz_pow_ui(mult, mult, expt)
-         mpz_mul(term, mult, mult)
-         mpz_set(last, mult)
- 
--        while (ppow < prec):
-+        while ppow < prec:
-+            sig_check()
-             ind = ppow
-             mpz_sub(term_m1, term, one)
-             mpz_sub(last_m1, last, one)
--            while (ind < prec):
-+            while ind < prec:
-                 mpz_mul(val[ind], val[ind], term_m1)
-                 mpz_fdiv_q(val[ind], val[ind], last_m1)
-                 ind += ppow
--            ppow *= int_p
-+            ppow *= p
-             mpz_set(last, term)
-             mpz_mul(term, term, mult)
- 
-@@ -228,6 +225,4 @@ cpdef eisenstein_series_poly(int k, int prec = 10) :
- 
-     sig_free(val)
- 
--    sig_off()
--
-     return res
-diff --git a/src/sage/plot/complex_plot.pyx b/src/sage/plot/complex_plot.pyx
-index 758fb70..f499a3e 100644
---- a/src/sage/plot/complex_plot.pyx
-+++ b/src/sage/plot/complex_plot.pyx
-@@ -19,7 +19,7 @@ Complex Plots
- from __future__ import absolute_import
- 
- # TODO: use NumPy buffers and complex fast_callable (when supported)
--from cysignals.signals cimport sig_on, sig_off
-+from cysignals.signals cimport sig_on, sig_off, sig_check
- 
- cimport numpy as cnumpy
- 
-@@ -381,12 +381,18 @@ def complex_plot(f, xrange, yrange, **options):
-         pass
- 
-     cdef double x, y
--    ignore, ranges = setup_for_eval_on_grid([], [xrange, yrange], 
options['plot_points'])
--    xrange,yrange=[r[:2] for r in ranges]
--    sig_on()
--    z_values = [[  f(new_CDF_element(x, y)) for x in srange(*ranges[0], 
include_endpoint=True)]
--                                            for y in srange(*ranges[1], 
include_endpoint=True)]
--    sig_off()
-+    _, ranges = setup_for_eval_on_grid([], [xrange, yrange], 
options['plot_points'])
-+    xrange = ranges[0]
-+    yrange = ranges[1]
-+    cdef list z_values = []
-+    cdef list row
-+    for y in srange(*yrange, include_endpoint=True):
-+        row = []
-+        for x in srange(*xrange, include_endpoint=True):
-+            sig_check()
-+            row.append(f(new_CDF_element(x, y)))
-+        z_values.append(row)
-+
-     g = Graphics()
-     g._set_extra_kwds(Graphics._extract_kwds_for_show(options, 
ignore=['xmin', 'xmax']))
-     g.add_primitive(ComplexPlot(complex_to_rgb(z_values), xrange, yrange, 
options))
-diff --git a/src/sage/rings/asymptotic/asymptotic_expansion_generators.py 
b/src/sage/rings/asymptotic/asymptotic_expansion_generators.py
-index 84fa0e4..18f8e90 100644
---- a/src/sage/rings/asymptotic/asymptotic_expansion_generators.py
-+++ b/src/sage/rings/asymptotic/asymptotic_expansion_generators.py
-@@ -1095,7 +1095,7 @@ class AsymptoticExpansionGenerators(SageObject):
-             sage: asymptotic_expansions.ImplicitExpansion('Z', phi=lambda u: 
1 + 2*u + u^2, tau=2, precision=5)
-             Traceback (most recent call last):
-             ...
--            ZeroDivisionError: Symbolic division by zero
-+            ZeroDivisionError: symbolic division by zero
-             sage: asymptotic_expansions.ImplicitExpansion('Z', phi=lambda u: 
1 + 2*u + u^2, tau=3, precision=5)
-             3 - 4*I*sqrt(3)*Z^(-1/2) + 6*I*sqrt(3)*Z^(-3/2) + O(Z^(-2))
- 
-diff --git a/src/sage/rings/finite_rings/element_pari_ffelt.pyx 
b/src/sage/rings/finite_rings/element_pari_ffelt.pyx
-index ff73a1f..2fcd3a1 100644
---- a/src/sage/rings/finite_rings/element_pari_ffelt.pyx
-+++ b/src/sage/rings/finite_rings/element_pari_ffelt.pyx
-@@ -869,7 +869,8 @@ cdef class 
FiniteFieldElement_pari_ffelt(FinitePolyExtElement):
-             Univariate Polynomial Ring in beta over Finite Field of size 3
-         """
-         sig_on()
--        return 
self._parent.polynomial_ring(name)(new_gen(FF_to_FpXQ_i(self.val)))
-+        pol = new_gen(FF_to_FpXQ(self.val))
-+        return self._parent.polynomial_ring(name)(pol)
- 
-     def minpoly(self, var='x'):
-         """
-@@ -887,7 +888,8 @@ cdef class 
FiniteFieldElement_pari_ffelt(FinitePolyExtElement):
-             y^2 + 1
-         """
-         sig_on()
--        return 
self._parent.polynomial_ring(var)(new_gen(FF_minpoly(self.val)))
-+        pol = new_gen(FF_minpoly(self.val))
-+        return self._parent.polynomial_ring(var)(pol)
- 
-     def charpoly(self, var='x'):
-         """
-@@ -905,7 +907,8 @@ cdef class 
FiniteFieldElement_pari_ffelt(FinitePolyExtElement):
-             y^2 + 1
-         """
-         sig_on()
--        return 
self._parent.polynomial_ring(var)(new_gen(FF_charpoly(self.val)))
-+        pol = new_gen(FF_charpoly(self.val))
-+        return self._parent.polynomial_ring(var)(pol)
- 
-     def is_square(self):
-         """
-diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx
-index 17e62f3..9e99bde 100644
---- a/src/sage/rings/integer.pyx
-+++ b/src/sage/rings/integer.pyx
-@@ -6806,6 +6806,7 @@ cdef class 
Integer(sage.structure.element.EuclideanDomainElement):
-             ....:         (2^100).binomial(2^22, algorithm='pari')
-             ....:     except AlarmInterrupt:
-             ....:         pass
-+            doctest:...: RuntimeWarning: cypari2 leaked ... bytes on the PARI 
stack...
-         """
-         cdef Integer x
-         cdef Integer mm
-diff --git a/src/sage/rings/number_field/maps.py 
b/src/sage/rings/number_field/maps.py
-index 1727c13..5717227 100644
---- a/src/sage/rings/number_field/maps.py
-+++ b/src/sage/rings/number_field/maps.py
-@@ -358,7 +358,7 @@ class 
MapRelativeNumberFieldToRelativeVectorSpace(NumberFieldIsomorphism):
-             g = g(beta).lift()
-         # Convert the coefficients to elements of the base field.
-         B, from_B, _ = K.absolute_base_field()
--        return self.codomain()([from_B(B(z.lift(), check=False)) for z in 
g.Vecrev(-K.relative_degree())])
-+        return self.codomain()([from_B(B(z.lift(), check=False)) for z in 
g.Vecrev(K.relative_degree())])
- 
- 
- class NameChangeMap(NumberFieldIsomorphism):
-diff --git a/src/sage/rings/polynomial/polynomial_element.pyx 
b/src/sage/rings/polynomial/polynomial_element.pyx
-index a711e94..20895c0 100644
---- a/src/sage/rings/polynomial/polynomial_element.pyx
-+++ b/src/sage/rings/polynomial/polynomial_element.pyx
-@@ -4363,8 +4363,7 @@ cdef class Polynomial(CommutativeAlgebraElement):
-             sage: G.prod() == g
-             True
-         """
--        pols = G[0]
--        exps = G[1]
-+        pols, exps = G
-         R = self._parent
-         F = [(R(f), int(e)) for f, e in zip(pols, exps)]
- 
-diff --git a/src/sage/rings/power_series_pari.pyx 
b/src/sage/rings/power_series_pari.pyx
-index e37e0a3..2e03ade 100644
---- a/src/sage/rings/power_series_pari.pyx
-+++ b/src/sage/rings/power_series_pari.pyx
-@@ -678,7 +678,8 @@ cdef class PowerSeries_pari(PowerSeries):
-             g = g.truncate()
-         if typ(g.g) == t_POL and varn(g.g) == vn:
-             # t_POL has 2 codewords.  Use new_ref instead of g[i] for speed.
--            return [R(g.new_ref(gel(g.g, i))) for i in range(2, lg(g.g))]
-+            G = g.fixGEN()
-+            return [R(g.new_ref(gel(G, i))) for i in range(2, lg(G))]
-         else:
-             return [R(g)]
- 
-@@ -729,6 +730,7 @@ cdef class PowerSeries_pari(PowerSeries):
-             return []
- 
-         cdef pari_gen g = self.g
-+        g.fixGEN()
-         cdef long l, m
- 
-         R = self.base_ring()
-diff --git a/src/sage/rings/real_mpfr.pyx b/src/sage/rings/real_mpfr.pyx
-index e273190..3b89f4b 100644
---- a/src/sage/rings/real_mpfr.pyx
-+++ b/src/sage/rings/real_mpfr.pyx
-@@ -3212,7 +3212,6 @@ cdef class 
RealNumber(sage.structure.element.RingElement):
-         # by using internal interfaces of MPFR, which are documented
-         # as subject-to-change.
- 
--        sig_on()
-         if mpfr_nan_p(self.value) or mpfr_inf_p(self.value):
-             raise ValueError('Cannot convert NaN or infinity to Pari float')
- 
-@@ -3234,6 +3233,7 @@ cdef class 
RealNumber(sage.structure.element.RingElement):
-         cdef mp_exp_t exponent
-         cdef GEN pari_float
- 
-+        sig_on()
-         if mpfr_zero_p(self.value):
-             pari_float = real_0_bit(-rounded_prec)
-         else:
-@@ -3245,7 +3245,7 @@ cdef class 
RealNumber(sage.structure.element.RingElement):
-             # Create a PARI REAL
-             pari_float = cgetr(2 + rounded_prec / wordsize)
-             pari_float[1] = evalexpo(exponent + rounded_prec - 1) + 
evalsigne(mpfr_sgn(self.value))
--            mpz_export(&pari_float[2], NULL, 1, wordsize/8, 0, 0, mantissa)
-+            mpz_export(&pari_float[2], NULL, 1, wordsize // 8, 0, 0, mantissa)
-             mpz_clear(mantissa)
- 
-         return new_gen(pari_float)
-diff --git a/src/sage/symbolic/expression.pyx 
b/src/sage/symbolic/expression.pyx
-index 586d4ab..c14b9a6 100644
---- a/src/sage/symbolic/expression.pyx
-+++ b/src/sage/symbolic/expression.pyx
-@@ -1273,12 +1273,7 @@ cdef class Expression(CommutativeRingElement):
-             sage: f._convert({'parent':int})
-             0
-         """
--        cdef GEx res
--        sig_on()
--        try:
--            res = self._gobj.evalf(0, kwds)
--        finally:
--            sig_off()
-+        cdef GEx res = self._gobj.evalf(0, kwds)
-         return new_Expression_from_GEx(self._parent, res)
- 
-     def _mpfr_(self, R):
-@@ -2839,11 +2834,7 @@ cdef class Expression(CommutativeRingElement):
-             # constants are wrappers around Sage objects, compare directly
-             if is_a_constant(self._gobj.lhs()) and 
is_a_constant(self._gobj.rhs()):
-                 return self.operator()(self.lhs().pyobject(), 
self.rhs().pyobject())
--            sig_on()
--            try:
--                pynac_result = decide_relational(self._gobj)
--            finally:
--                sig_off()
-+            pynac_result = decide_relational(self._gobj)
-             if pynac_result == relational_undecidable:
-                 raise ValueError('undecidable relation: ' + repr(self))
- 
-@@ -3233,27 +3224,23 @@ cdef class Expression(CommutativeRingElement):
-         cdef GEx x
-         cdef Expression _right = <Expression>right
-         cdef operators op
--        sig_on()
--        try:
--            if is_a_relational(left._gobj):
--                if is_a_relational(_right._gobj):
--                    op = compatible_relation(relational_operator(left._gobj),
--                                             
relational_operator(_right._gobj))
--                    x = relational(left._gobj.lhs() + _right._gobj.lhs(),
--                                   left._gobj.rhs() + _right._gobj.rhs(),
--                                   op)
--                else:
--                    x = relational(left._gobj.lhs() + _right._gobj,
--                                   left._gobj.rhs() + _right._gobj,
--                                   relational_operator(left._gobj))
--            elif is_a_relational(_right._gobj):
--                x = relational(left._gobj + _right._gobj.lhs(),
--                               left._gobj + _right._gobj.rhs(),
--                               relational_operator(_right._gobj))
-+        if is_a_relational(left._gobj):
-+            if is_a_relational(_right._gobj):
-+                op = compatible_relation(relational_operator(left._gobj),
-+                                         relational_operator(_right._gobj))
-+                x = relational(left._gobj.lhs() + _right._gobj.lhs(),
-+                               left._gobj.rhs() + _right._gobj.rhs(),
-+                               op)
-             else:
--                x = left._gobj + _right._gobj
--        finally:
--            sig_off()
-+                x = relational(left._gobj.lhs() + _right._gobj,
-+                               left._gobj.rhs() + _right._gobj,
-+                               relational_operator(left._gobj))
-+        elif is_a_relational(_right._gobj):
-+            x = relational(left._gobj + _right._gobj.lhs(),
-+                           left._gobj + _right._gobj.rhs(),
-+                           relational_operator(_right._gobj))
-+        else:
-+            x = left._gobj + _right._gobj
-         return new_Expression_from_GEx(left._parent, x)
- 
-     cpdef _sub_(left, right):
-@@ -3289,27 +3276,23 @@ cdef class Expression(CommutativeRingElement):
-         """
-         cdef GEx x
-         cdef Expression _right = <Expression>right
--        sig_on()
--        try:
--            if is_a_relational(left._gobj):
--                if is_a_relational(_right._gobj):
--                    op = compatible_relation(relational_operator(left._gobj),
--                                             
relational_operator(_right._gobj))
--                    x = relational(left._gobj.lhs() - _right._gobj.lhs(),
--                                   left._gobj.rhs() - _right._gobj.rhs(),
--                                   op)
--                else:
--                    x = relational(left._gobj.lhs() - _right._gobj,
--                                   left._gobj.rhs() - _right._gobj,
--                                   relational_operator(left._gobj))
--            elif is_a_relational(_right._gobj):
--                x = relational(left._gobj - _right._gobj.lhs(),
--                               left._gobj - _right._gobj.rhs(),
--                               relational_operator(_right._gobj))
-+        if is_a_relational(left._gobj):
-+            if is_a_relational(_right._gobj):
-+                op = compatible_relation(relational_operator(left._gobj),
-+                                         relational_operator(_right._gobj))
-+                x = relational(left._gobj.lhs() - _right._gobj.lhs(),
-+                               left._gobj.rhs() - _right._gobj.rhs(),
-+                               op)
-             else:
--                x = left._gobj - _right._gobj
--        finally:
--            sig_off()
-+                x = relational(left._gobj.lhs() - _right._gobj,
-+                               left._gobj.rhs() - _right._gobj,
-+                               relational_operator(left._gobj))
-+        elif is_a_relational(_right._gobj):
-+            x = relational(left._gobj - _right._gobj.lhs(),
-+                           left._gobj - _right._gobj.rhs(),
-+                           relational_operator(_right._gobj))
-+        else:
-+            x = left._gobj - _right._gobj
-         return new_Expression_from_GEx(left._parent, x)
- 
-     cpdef _mul_(left, right):
-@@ -3457,29 +3440,25 @@ cdef class Expression(CommutativeRingElement):
-         cdef GEx x
-         cdef Expression _right = <Expression>right
-         cdef operators o
--        sig_on()
--        try:
--            if is_a_relational(left._gobj):
--                if is_a_relational(_right._gobj):
--                    op = compatible_relation(relational_operator(left._gobj),
--                                             
relational_operator(_right._gobj))
--                    x = relational(left._gobj.lhs() * _right._gobj.lhs(),
--                                   left._gobj.rhs() * _right._gobj.rhs(),
--                                   op)
--                else:
--                    o = relational_operator(left._gobj)
--                    x = relational(left._gobj.lhs() * _right._gobj,
--                                   left._gobj.rhs() * _right._gobj,
--                                   o)
--            elif is_a_relational(_right._gobj):
--                o = relational_operator(_right._gobj)
--                x = relational(left._gobj * _right._gobj.lhs(),
--                               left._gobj * _right._gobj.rhs(),
--                               o)
-+        if is_a_relational(left._gobj):
-+            if is_a_relational(_right._gobj):
-+                op = compatible_relation(relational_operator(left._gobj),
-+                                         relational_operator(_right._gobj))
-+                x = relational(left._gobj.lhs() * _right._gobj.lhs(),
-+                               left._gobj.rhs() * _right._gobj.rhs(),
-+                               op)
-             else:
--                x = left._gobj * _right._gobj
--        finally:
--            sig_off()
-+                o = relational_operator(left._gobj)
-+                x = relational(left._gobj.lhs() * _right._gobj,
-+                               left._gobj.rhs() * _right._gobj,
-+                               o)
-+        elif is_a_relational(_right._gobj):
-+            o = relational_operator(_right._gobj)
-+            x = relational(left._gobj * _right._gobj.lhs(),
-+                           left._gobj * _right._gobj.rhs(),
-+                           o)
-+        else:
-+            x = left._gobj * _right._gobj
-         return new_Expression_from_GEx(left._parent, x)
- 
-     cpdef _div_(left, right):
-@@ -3553,7 +3532,7 @@ cdef class Expression(CommutativeRingElement):
-             sage: x/0
-             Traceback (most recent call last):
-             ...
--            ZeroDivisionError: Symbolic division by zero
-+            ZeroDivisionError: symbolic division by zero
- 
-         Check if Pynac can compute divisions of Python longs (:trac:`13107`)::
- 
-@@ -3563,7 +3542,6 @@ cdef class Expression(CommutativeRingElement):
-         cdef GEx x
-         cdef Expression _right = <Expression>right
-         cdef operators o
--        sig_on()
-         try:
-             if is_a_relational(left._gobj):
-                 if is_a_relational(_right._gobj):
-@@ -3589,11 +3567,9 @@ cdef class Expression(CommutativeRingElement):
-             # TODO: change this to maybe cleverly do something involving 
Cython C++ exception handling.
-             # See http://docs.cython.org/docs/wrapping_CPlusPlus.html
-             if 'division by zero' in str(msg):
--                raise ZeroDivisionError("Symbolic division by zero")
-+                raise ZeroDivisionError("symbolic division by zero")
-             else:
-                 raise
--        finally:
--            sig_off()
- 
-     def __invert__(self):
-         """
-@@ -5314,11 +5290,7 @@ cdef class Expression(CommutativeRingElement):
-         for k, v in sdict.iteritems():
-             smap.insert(make_pair((<Expression>self.coerce_in(k))._gobj,
-                                   (<Expression>self.coerce_in(v))._gobj))
--        sig_on()
--        try:
--            res = self._gobj.subs_map(smap, 0)
--        finally:
--            sig_off()
-+        res = self._gobj.subs_map(smap, 0)
-         return new_Expression_from_GEx(self._parent, res)
- 
-     subs = substitute
-@@ -7183,12 +7155,7 @@ cdef class Expression(CommutativeRingElement):
-             x^2 + 2*x + 2
-         """
-         cdef Expression r = self.coerce_in(b)
--        cdef GEx x
--        sig_on()
--        try:
--            x = g_gcd(self._gobj, r._gobj)
--        finally:
--            sig_off()
-+        cdef GEx x = g_gcd(self._gobj, r._gobj)
-         return new_Expression_from_GEx(self._parent, x)
- 
-     def gosper_sum(self, *args):
-@@ -8983,12 +8950,7 @@ cdef class Expression(CommutativeRingElement):
-             sage: t = SR(1).zeta(); t
-             Infinity
-         """
--        cdef GEx x
--        sig_on()
--        try:
--            x = g_hold_wrapper(g_zeta, self._gobj, hold)
--        finally:
--            sig_off()
-+        cdef GEx x = g_hold_wrapper(g_zeta, self._gobj, hold)
-         return new_Expression_from_GEx(self._parent, x)
- 
-     def factorial(self, hold=False):

Modified: sagemath-doc-segfault.patch
===================================================================
--- sagemath-doc-segfault.patch 2019-03-24 12:03:29 UTC (rev 443324)
+++ sagemath-doc-segfault.patch 2019-03-24 13:04:37 UTC (rev 443325)
@@ -2,62 +2,13 @@
 index 5877b5b..7dc8ff7 100644
 --- a/src/sage_setup/docbuild/__init__.py
 +++ b/src/sage_setup/docbuild/__init__.py
-@@ -265,35 +265,29 @@ class DocBuilder(object):
-     # import the customized builder for object.inv files
+@@ -265,7 +265,7 @@ class DocBuilder(object):
      inventory = builder_helper('inventory')
  
--if NUM_THREADS > 1:
--    def build_many(target, args):
--        from multiprocessing import Pool
--        pool = Pool(NUM_THREADS, maxtasksperchild=1)
--        # map_async handles KeyboardInterrupt correctly. Plain map and
--        # apply_async does not, so don't use it.
--        x = pool.map_async(target, args, 1)
--        try:
--            ret = x.get(99999)
--            pool.close()
--            pool.join()
--        except Exception:
--            pool.terminate()
--            if ABORT_ON_ERROR:
--                raise
--        return ret
--else:
--    def build_many(target, args):
--        results = []
--
--        for arg in args:
--            try:
--                results.append(target(arg))
--            except Exception:
--                if ABORT_ON_ERROR:
--                    raise
--
--        return results
--
-+def build_many(target, args):
-+    # Pool() uses an actual fork() to run each new instance. This is important
-+    # for performance reasons, i.e., don't use a forkserver when it becomes
-+    # available with Python 3: Here, sage is already initialized which is 
quite
-+    # costly, with a forkserver we would have to reinitialize it for every
-+    # document we build. At the same time, don't serialize this by taking the
-+    # pool (and thus the call to fork()) out completely: The call to Sphinx
-+    # leaks memory, so we need to build each document in its own process to
-+    # control the RAM usage.
-+    from multiprocessing import Pool
-+    pool = Pool(NUM_THREADS, maxtasksperchild=1)
-+    # map_async handles KeyboardInterrupt correctly. Plain map and
-+    # apply_async does not, so don't use it.
-+    x = pool.map_async(target, args, 1)
-+    try:
-+        ret = x.get(99999)
-+        pool.close()
-+        pool.join()
-+    except Exception:
-+        pool.terminate()
-+        if ABORT_ON_ERROR:
-+            raise
-+    return ret
  
- ##########################################
- #      Parallel Building Ref Manual      #
+-if not (CYGWIN_VERSION and CYGWIN_VERSION[0] < 3):
++if False:
+     def build_many(target, args):
+         # Pool() uses an actual fork() to run each new instance. This is
+         # important for performance reasons, i.e., don't use a forkserver when
+

Modified: sagemath-doc-sphinx-1.8.patch
===================================================================
--- sagemath-doc-sphinx-1.8.patch       2019-03-24 12:03:29 UTC (rev 443324)
+++ sagemath-doc-sphinx-1.8.patch       2019-03-24 13:04:37 UTC (rev 443325)
@@ -1,3 +1,25 @@
+diff --git a/src/doc/common/conf.py b/src/doc/common/conf.py
+index 70dd17f..e9a3dae 100644
+--- a/src/doc/common/conf.py
++++ b/src/doc/common/conf.py
+@@ -4,6 +4,8 @@ import sage.version
+ from sage.misc.sagedoc import extlinks
+ import dateutil.parser
+ from six import iteritems
++from docutils import nodes
++from docutils.transforms import Transform
+ 
+ # If your extensions are in another directory, add it here.
+ sys.path.append(os.path.join(SAGE_SRC, "sage_setup", "docbuild", "ext"))
+@@ -669,7 +671,7 @@ def call_intersphinx(app, env, node, contnode):
+         sage: for line in open(thematic_index).readlines():  # optional - 
dochtml
+         ....:     if "padics" in line:
+         ....:         _ = sys.stdout.write(line)
+-        <li><a class="reference external" 
href="../reference/padics/sage/rings/padics/tutorial.html#sage-rings-padics-tutorial"
 title="(in Sage Reference Manual: p-Adics v...)"><span>Introduction to the 
-adics</span></a></li>
++        <li><a class="reference external" 
href="../reference/padics/sage/rings/padics/tutorial.html#sage-rings-padics-tutorial"
 title="(in Sage Reference Manual: p-Adics v...)"><span>Introduction to the 
p-adics</span></a></li>
+     """
+     debug_inf(app, "???? Trying intersphinx for %s" % node['reftarget'])
+     builder = app.builder
 diff --git a/src/sage/misc/sphinxify.py b/src/sage/misc/sphinxify.py
 index 6e21344..4270294 100644
 --- a/src/sage/misc/sphinxify.py
@@ -57,10 +79,10 @@
      return output
  
 diff --git a/src/sage_setup/docbuild/__init__.py 
b/src/sage_setup/docbuild/__init__.py
-index 534b40b..ff8f4c1 100644
+index 4546f87..9efe45d 100644
 --- a/src/sage_setup/docbuild/__init__.py
 +++ b/src/sage_setup/docbuild/__init__.py
-@@ -47,7 +47,6 @@ import logging, warnings
+@@ -53,7 +53,6 @@ import warnings
  
  logger = logging.getLogger(__name__)
  
@@ -68,7 +90,7 @@
  import sphinx.util.console
  import sphinx.ext.intersphinx
  
-@@ -334,6 +333,7 @@ class AllBuilder(object):
+@@ -354,6 +353,7 @@ class AllBuilder(object):
              getattr(get_builder(document), 'inventory')(*args, **kwds)
  
          logger.warning("Building reference manual, second pass.\n")
@@ -108,7 +130,7 @@
      copy_download_files = removed_method_error
      copy_static_files = removed_method_error
 diff --git a/src/sage_setup/docbuild/ext/multidocs.py 
b/src/sage_setup/docbuild/ext/multidocs.py
-index dc2e065..8c3736d 100644
+index 15c7ca5..bc5ca9e 100644
 --- a/src/sage_setup/docbuild/ext/multidocs.py
 +++ b/src/sage_setup/docbuild/ext/multidocs.py
 @@ -32,6 +32,7 @@ from sphinx.util.console import bold
@@ -126,7 +148,7 @@
 -    app.info(bold('Merging environment/index files...'))
 +    logger.info(bold('Merging environment/index files...'))
      for curdoc in app.env.config.multidocs_subdoc_list:
--        app.info("    %s:"%curdoc, nonl=1)
+-        app.info("    %s:" % curdoc, nonl=1)
 +        logger.info("    %s:"%curdoc, nonl=1)
          docenv = get_env(app, curdoc)
          if docenv is not None:
@@ -201,7 +223,7 @@
          return None
      indexer.load(f, sphinx.search.js_index)
      f.close()
-@@ -238,7 +239,7 @@ def write_citations(app, citations):
+@@ -240,7 +241,7 @@ def write_citations(app, citations):
      outdir = citation_dir(app)
      with atomic_write(os.path.join(outdir, CITE_FILENAME), binary=True) as f:
          cPickle.dump(citations, f)
@@ -210,7 +232,7 @@
  
  
  def fetch_citation(app, env):
-@@ -246,13 +247,13 @@ def fetch_citation(app, env):
+@@ -248,13 +249,13 @@ def fetch_citation(app, env):
      Fetch the global citation index from the refman to allow for cross
      references.
      """
@@ -226,7 +248,7 @@
      cite = env.domaindata["std"]["citations"]
      for ind, (path, tag, lineno) in six.iteritems(cache):
          if ind not in cite: # don't override local citation
-@@ -265,18 +266,18 @@ def init_subdoc(app):
+@@ -267,18 +268,18 @@ def init_subdoc(app):
      doc itself.
      """
      if app.config.multidocs_is_master:
@@ -248,7 +270,7 @@
          app.connect('html-page-context', fix_path_html)
          if not app.config.multidoc_first_pass:
              app.connect('env-updated', fetch_citation)
-@@ -292,7 +293,7 @@ def init_subdoc(app):
+@@ -294,7 +295,7 @@ def init_subdoc(app):
                      def copy_static_files(self):
                      [...]
              """
@@ -257,6 +279,16 @@
              static_dir = os.path.join(app.builder.outdir, '_static')
              master_static_dir = os.path.join('..', '_static')
              if os.path.lexists(static_dir):
+@@ -308,6 +309,9 @@ def init_subdoc(app):
+ 
+     if app.config.multidoc_first_pass == 1:
+         app.config.intersphinx_mapping = {}
++    else:
++        app.emit('env-check-consistency', app.env)
++
+ 
+ 
+ def setup(app):
 diff --git a/src/sage_setup/docbuild/ext/sage_autodoc.py 
b/src/sage_setup/docbuild/ext/sage_autodoc.py
 index 25895d3..2e640a0 100644
 --- a/src/sage_setup/docbuild/ext/sage_autodoc.py

Reply via email to