mirror of
https://src.fedoraproject.org/rpms/sagemath.git
synced 2025-04-17 01:39:02 -04:00
Update to sagemath 8.5.
Also: - Bundle ipython again; Fedora version is too far ahead. Also have to bundle prompt_toolkit since Fedora version is too far ahead of bundled ipython. - Drop LANGUAGES variable setting, now ignored by the sagemath build system. - Drop unused SAGE_CBLAS variable from /usr/bin/sage. - Do not force the C locale when launching sagemath. - Allow the user to override SAGE_DEBUG in /usr/bin/sage. - Add -ecm, -giac, and -latte patches to fix interactions with external tools. - Add -sigfpe patch from upstream.
This commit is contained in:
parent
eaa777c690
commit
55beead27c
31 changed files with 674 additions and 684 deletions
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/sandpiles/sandpile.py.orig src/sage/sandpiles/sandpile.py
|
||||
--- src/sage/sandpiles/sandpile.py.orig 2018-10-17 17:14:17.000000000 -0600
|
||||
+++ src/sage/sandpiles/sandpile.py 2018-10-25 13:18:34.198894883 -0600
|
||||
--- src/sage/sandpiles/sandpile.py.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/sandpiles/sandpile.py 2019-01-16 09:43:32.402089611 -0700
|
||||
@@ -344,9 +344,6 @@ from sage.arith.all import falling_facto
|
||||
from sage.rings.all import Integer, PolynomialRing, QQ, ZZ
|
||||
from sage.symbolic.all import I, pi, SR
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/libs/arb/acb_hypgeom.pxd.orig src/sage/libs/arb/acb_hypgeom.pxd
|
||||
--- src/sage/libs/arb/acb_hypgeom.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/acb_hypgeom.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/acb_hypgeom.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/acb_hypgeom.pxd 2019-01-16 09:46:54.148469344 -0700
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from sage.libs.arb.types cimport *
|
||||
|
@ -11,8 +11,8 @@ diff -up src/sage/libs/arb/acb_hypgeom.pxd.orig src/sage/libs/arb/acb_hypgeom.px
|
|||
long acb_hypgeom_pfq_choose_n(acb_srcptr a, long p, acb_srcptr b, long q, const acb_t z, long prec)
|
||||
void acb_hypgeom_pfq_sum_forward(acb_t s, acb_t t, acb_srcptr a, long p, acb_srcptr b, long q, const acb_t z, long n, long prec)
|
||||
diff -up src/sage/libs/arb/acb_mat.pxd.orig src/sage/libs/arb/acb_mat.pxd
|
||||
--- src/sage/libs/arb/acb_mat.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/acb_mat.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/acb_mat.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/acb_mat.pxd 2019-01-16 09:46:54.148469344 -0700
|
||||
@@ -1,6 +1,6 @@
|
||||
from sage.libs.arb.types cimport acb_t, acb_mat_t, acb_poly_t
|
||||
|
||||
|
@ -22,8 +22,8 @@ diff -up src/sage/libs/arb/acb_mat.pxd.orig src/sage/libs/arb/acb_mat.pxd
|
|||
unsigned int acb_mat_ncols(acb_mat_t mat)
|
||||
acb_t acb_mat_entry(acb_mat_t mat, unsigned long i, unsigned long j)
|
||||
diff -up src/sage/libs/arb/acb_modular.pxd.orig src/sage/libs/arb/acb_modular.pxd
|
||||
--- src/sage/libs/arb/acb_modular.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/acb_modular.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/acb_modular.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/acb_modular.pxd 2019-01-16 09:46:54.149469326 -0700
|
||||
@@ -3,7 +3,7 @@
|
||||
from sage.libs.arb.types cimport *
|
||||
from sage.libs.flint.types cimport fmpz_poly_t
|
||||
|
@ -34,8 +34,8 @@ diff -up src/sage/libs/arb/acb_modular.pxd.orig src/sage/libs/arb/acb_modular.px
|
|||
void acb_modular_j(acb_t z, const acb_t tau, long prec)
|
||||
void acb_modular_eta(acb_t z, const acb_t tau, long prec)
|
||||
diff -up src/sage/libs/arb/acb_poly.pxd.orig src/sage/libs/arb/acb_poly.pxd
|
||||
--- src/sage/libs/arb/acb_poly.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/acb_poly.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/acb_poly.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/acb_poly.pxd 2019-01-16 09:46:54.149469326 -0700
|
||||
@@ -3,7 +3,7 @@
|
||||
from sage.libs.arb.types cimport *
|
||||
from sage.libs.flint.types cimport fmpz_poly_t, fmpq_poly_t
|
||||
|
@ -46,8 +46,8 @@ diff -up src/sage/libs/arb/acb_poly.pxd.orig src/sage/libs/arb/acb_poly.pxd
|
|||
void acb_poly_clear(acb_poly_t poly)
|
||||
void acb_poly_fit_length(acb_poly_t poly, long len)
|
||||
diff -up src/sage/libs/arb/acb.pxd.orig src/sage/libs/arb/acb.pxd
|
||||
--- src/sage/libs/arb/acb.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/acb.pxd 2018-08-29 10:43:48.571623007 -0600
|
||||
--- src/sage/libs/arb/acb.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/acb.pxd 2019-01-16 09:46:54.149469326 -0700
|
||||
@@ -3,7 +3,7 @@
|
||||
from sage.libs.arb.types cimport *
|
||||
from sage.libs.flint.types cimport fmpz_t, fmpq_t
|
||||
|
@ -58,8 +58,8 @@ diff -up src/sage/libs/arb/acb.pxd.orig src/sage/libs/arb/acb.pxd
|
|||
arb_t acb_realref(acb_t x)
|
||||
arb_t acb_imagref(acb_t x)
|
||||
diff -up src/sage/libs/arb/arf.pxd.orig src/sage/libs/arb/arf.pxd
|
||||
--- src/sage/libs/arb/arf.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/arf.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/arf.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/arf.pxd 2019-01-16 09:46:54.149469326 -0700
|
||||
@@ -5,7 +5,7 @@ from sage.libs.gmp.types cimport mpz_t
|
||||
from sage.libs.flint.types cimport fmpz_t
|
||||
from sage.libs.mpfr.types cimport mpfr_t, mpfr_rnd_t
|
||||
|
@ -70,8 +70,8 @@ diff -up src/sage/libs/arb/arf.pxd.orig src/sage/libs/arb/arf.pxd
|
|||
void arf_clear(arf_t x)
|
||||
void arf_zero(arf_t x)
|
||||
diff -up src/sage/libs/arb/bernoulli.pxd.orig src/sage/libs/arb/bernoulli.pxd
|
||||
--- src/sage/libs/arb/bernoulli.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/bernoulli.pxd 2018-08-29 10:43:48.572622995 -0600
|
||||
--- src/sage/libs/arb/bernoulli.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/bernoulli.pxd 2019-01-16 09:46:54.149469326 -0700
|
||||
@@ -2,5 +2,5 @@
|
||||
|
||||
from ..flint.types cimport fmpq_t, ulong
|
||||
|
@ -80,8 +80,8 @@ diff -up src/sage/libs/arb/bernoulli.pxd.orig src/sage/libs/arb/bernoulli.pxd
|
|||
+cdef extern from "arb/bernoulli.h":
|
||||
void bernoulli_fmpq_ui(fmpq_t b, ulong n)
|
||||
diff -up src/sage/libs/arb/mag.pxd.orig src/sage/libs/arb/mag.pxd
|
||||
--- src/sage/libs/arb/mag.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/mag.pxd 2018-08-29 10:43:48.573622983 -0600
|
||||
--- src/sage/libs/arb/mag.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/mag.pxd 2019-01-16 09:46:54.150469309 -0700
|
||||
@@ -3,7 +3,7 @@
|
||||
from sage.libs.arb.types cimport *
|
||||
from sage.libs.flint.types cimport fmpz_t, fmpq_t
|
||||
|
@ -92,8 +92,8 @@ diff -up src/sage/libs/arb/mag.pxd.orig src/sage/libs/arb/mag.pxd
|
|||
void mag_clear(mag_t x)
|
||||
void mag_init_set(mag_t x, const mag_t y)
|
||||
diff -up src/sage/libs/arb/types.pxd.orig src/sage/libs/arb/types.pxd
|
||||
--- src/sage/libs/arb/types.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/arb/types.pxd 2018-08-29 10:43:48.573622983 -0600
|
||||
--- src/sage/libs/arb/types.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/arb/types.pxd 2019-01-16 09:46:54.150469309 -0700
|
||||
@@ -1,4 +1,4 @@
|
||||
-cdef extern from "mag.h":
|
||||
+cdef extern from "arb/mag.h":
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
--- src/setup.py.orig 2018-10-16 09:07:30.086993782 -0600
|
||||
+++ src/setup.py 2018-10-16 09:10:20.586710425 -0600
|
||||
diff -up src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2019-01-04 11:05:11.337077724 -0700
|
||||
+++ src/setup.py 2019-01-16 09:45:32.570933224 -0700
|
||||
@@ -387,6 +387,9 @@ class sage_build_cython(Command):
|
||||
with open(self._version_file, 'w') as f:
|
||||
f.write(self._version_stamp)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/sage/numerical/backends/coin_backend.pyx.orig src/sage/numerical/backends/coin_backend.pyx
|
||||
--- src/sage/numerical/backends/coin_backend.pyx.orig 2018-05-16 13:40:23.571130540 -0600
|
||||
+++ src/sage/numerical/backends/coin_backend.pyx 2018-05-16 13:41:06.750534427 -0600
|
||||
@@ -762,8 +762,8 @@ cdef class CoinBackend(GenericBackend):
|
||||
--- src/sage/numerical/backends/coin_backend.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/numerical/backends/coin_backend.pyx 2019-01-16 09:45:52.386577640 -0700
|
||||
@@ -765,8 +765,8 @@ cdef class CoinBackend(GenericBackend):
|
||||
model.setLogLevel(old_logLevel)
|
||||
|
||||
# multithreading
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/databases/cremona.py.orig src/sage/databases/cremona.py
|
||||
--- src/sage/databases/cremona.py.orig 2018-10-17 17:13:36.000000000 -0600
|
||||
+++ src/sage/databases/cremona.py 2018-10-25 13:24:02.644939224 -0600
|
||||
--- src/sage/databases/cremona.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/databases/cremona.py 2019-01-04 10:29:55.578694061 -0700
|
||||
@@ -53,7 +53,6 @@ from sage.misc.prandom import randint
|
||||
|
||||
import sage.schemes.elliptic_curves.constructor as elliptic
|
||||
|
@ -9,7 +9,7 @@ diff -up src/sage/databases/cremona.py.orig src/sage/databases/cremona.py
|
|||
from sage.env import CREMONA_MINI_DATA_DIR, CREMONA_LARGE_DATA_DIR
|
||||
from sage.misc.all import walltime
|
||||
|
||||
@@ -825,14 +824,6 @@ class MiniCremonaDatabase(SQLDatabase):
|
||||
@@ -835,14 +834,6 @@ class MiniCremonaDatabase(SQLDatabase):
|
||||
if N < self.largest_conductor():
|
||||
message = "There is no elliptic curve with label " + label \
|
||||
+ " in the database"
|
||||
|
@ -24,7 +24,7 @@ diff -up src/sage/databases/cremona.py.orig src/sage/databases/cremona.py
|
|||
raise ValueError(message)
|
||||
ainvs = eval(c[0])
|
||||
data = {'cremona_label': label,
|
||||
@@ -1673,10 +1664,12 @@ def CremonaDatabase(name=None,mini=None,
|
||||
@@ -1683,10 +1674,12 @@ def CremonaDatabase(name=None,mini=None,
|
||||
if name is None and not set_global:
|
||||
return _db
|
||||
if set_global and name is None:
|
||||
|
|
12
sagemath-ecm.patch
Normal file
12
sagemath-ecm.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff -up src/sage/interfaces/ecm.py.orig src/sage/interfaces/ecm.py
|
||||
--- src/sage/interfaces/ecm.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/ecm.py 2019-01-15 10:26:31.060040736 -0700
|
||||
@@ -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)
|
||||
+ os.system(' '.join(self._cmd))
|
||||
|
||||
# Recommended settings from
|
||||
# http://www.mersennewiki.org/index.php/Elliptic_Curve_Method
|
|
@ -1,92 +1,7 @@
|
|||
--- build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig 2018-10-25 14:14:33.031253545 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/sphinxify.py 2018-10-25 15:33:56.358876835 -0600
|
||||
@@ -133,7 +133,7 @@ def sphinxify(docstring, format='html'):
|
||||
# "/media/...path.../blah.png"
|
||||
# to
|
||||
# "/doc/static/reference/media/...path.../blah.png"
|
||||
- output = re.sub("""src=['"](/?\.\.)*/?media/([^"']*)['"]""",
|
||||
+ output = re.sub("""src=['"](/?\\.\\.)*/?media/([^"']*)['"]""",
|
||||
'src="/doc/static/reference/media/\\2"',
|
||||
output)
|
||||
# Remove spurious \(, \), \[, \].
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2018-10-25 13:30:02.499892169 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2018-10-25 14:14:33.032253542 -0600
|
||||
@@ -550,7 +550,7 @@ try:
|
||||
return args[0].__getattribute__(str(self))(*args[1:], **kwds)
|
||||
|
||||
def automatic_name_eval(s, globals, max_names=10000):
|
||||
- """
|
||||
+ r"""
|
||||
Exec the string ``s`` in the scope of the ``globals``
|
||||
dictionary, and if any :exc:`NameError`\ s are raised, try to
|
||||
fix them by defining the variable that caused the error to be
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig 2018-10-25 13:30:55.707737342 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2018-10-25 14:14:33.032253542 -0600
|
||||
@@ -441,7 +441,7 @@ class Cell_generic(object):
|
||||
return isinstance(self, Cell)
|
||||
|
||||
def is_auto_cell(self):
|
||||
- """
|
||||
+ r"""
|
||||
Returns whether this is an automatically evaluated generic
|
||||
cell. This is always false for :class:`Cell_generic`\ s and
|
||||
:class:`TextCell`\ s.
|
||||
@@ -647,7 +647,7 @@ class TextCell(Cell_generic):
|
||||
return self._text
|
||||
|
||||
def set_cell_output_type(self, typ='wrap'):
|
||||
- """
|
||||
+ r"""
|
||||
Sets this text cell's output type. This does nothing for
|
||||
:class:`TextCell`\ s.
|
||||
|
||||
@@ -1320,8 +1320,8 @@ class Cell(Cell_generic):
|
||||
if len(s) == 0:
|
||||
return False
|
||||
s = s[0]
|
||||
- return bool(re.search('(?<!\w)interact\s*\(.*\).*', s) or
|
||||
- re.search('\s*@\s*interact', s))
|
||||
+ return bool(re.search(r'(?<!\w)interact\s*\(.*\).*', s) or
|
||||
+ re.search(r'\s*@\s*interact', s))
|
||||
|
||||
def is_interacting(self):
|
||||
r"""
|
||||
@@ -1344,7 +1344,7 @@ class Cell(Cell_generic):
|
||||
return hasattr(self, 'interact')
|
||||
|
||||
def stop_interacting(self):
|
||||
- """
|
||||
+ r"""
|
||||
Stops :func:`sagenb.notebook.interact.interact`\ ion for this
|
||||
compute cell.
|
||||
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/worksheet.py.orig 2018-05-22 10:01:48.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/worksheet.py 2018-10-17 14:41:08.634154908 -0600
|
||||
@@ -61,8 +61,8 @@ from flask_babel import gettext, lazy_ge
|
||||
_ = gettext
|
||||
|
||||
# Set some constants that will be used for regular expressions below.
|
||||
-whitespace = re.compile('\s') # Match any whitespace character
|
||||
-non_whitespace = re.compile('\S')
|
||||
+whitespace = re.compile(r'\s') # Match any whitespace character
|
||||
+non_whitespace = re.compile(r'\S')
|
||||
|
||||
# The file to which the Sage code that will be evaluated is written.
|
||||
CODE_PY = "___code___.py"
|
||||
--- src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py 2018-10-25 14:14:33.033253539 -0600
|
||||
@@ -2023,7 +2023,7 @@ class QuiverMutationType_Reducible(Quive
|
||||
|
||||
@cached_method
|
||||
def class_size(self):
|
||||
- """
|
||||
+ r"""
|
||||
If it is known, the size of the mutation class of all quivers
|
||||
which are mutation equivalent to the standard quiver of
|
||||
``self`` (up to isomorphism) is returned.
|
||||
--- src/sage/combinat/crystals/alcove_path.py.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/combinat/crystals/alcove_path.py 2018-10-25 15:37:04.294360718 -0600
|
||||
@@ -389,7 +389,7 @@ class CrystalOfAlcovePaths(UniqueReprese
|
||||
diff -up src/sage/combinat/crystals/alcove_path.py.orig src/sage/combinat/crystals/alcove_path.py
|
||||
--- src/sage/combinat/crystals/alcove_path.py.orig 2018-12-22 16:37:07.000000000 -0700
|
||||
+++ src/sage/combinat/crystals/alcove_path.py 2019-01-04 11:16:55.320833974 -0700
|
||||
@@ -383,7 +383,7 @@ class CrystalOfAlcovePaths(UniqueReprese
|
||||
|
||||
One can compute all vertices of the crystal by finding all the
|
||||
admissible subsets of the `\lambda`-chain (see method
|
||||
|
@ -95,8 +10,9 @@
|
|||
search algorithm.
|
||||
|
||||
.. WARNING::
|
||||
--- src/sage/homology/homology_group.py.orig 2018-10-17 17:13:47.000000000 -0600
|
||||
+++ src/sage/homology/homology_group.py 2018-10-25 15:54:54.683421705 -0600
|
||||
diff -up src/sage/homology/homology_group.py.orig src/sage/homology/homology_group.py
|
||||
--- src/sage/homology/homology_group.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/homology/homology_group.py 2019-01-04 11:17:37.136047323 -0700
|
||||
@@ -109,7 +109,7 @@ class HomologyGroup_class(AdditiveAbelia
|
||||
sage: from sage.homology.homology_group import HomologyGroup
|
||||
sage: H = HomologyGroup(7, ZZ, [4,4,4,4,4,7,7])
|
||||
|
@ -106,3 +22,15 @@
|
|||
sage: latex(HomologyGroup(6, ZZ))
|
||||
\ZZ^{6}
|
||||
"""
|
||||
diff -up src/sage/rings/number_field/number_field.py.orig src/sage/rings/number_field/number_field.py
|
||||
--- src/sage/rings/number_field/number_field.py.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/number_field/number_field.py 2019-01-08 16:25:39.730547708 -0700
|
||||
@@ -6613,7 +6613,7 @@ class NumberField_generic(WithEqualityBy
|
||||
return U
|
||||
|
||||
def S_unit_solutions(self, S=[], prec=106, include_exponents=False, include_bound=False, proof=None):
|
||||
- """
|
||||
+ r"""
|
||||
Return all solutions to the S-unit equation ``x + y = 1`` over K.
|
||||
|
||||
INPUT:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/module_list.py 2018-10-25 11:33:55.361930982 -0600
|
||||
@@ -358,16 +358,16 @@ ext_modules = [
|
||||
diff -up src/module_list.py.origsrc/module_list.py
|
||||
--- src/module_list.py.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:42:29.021226961 -0700
|
||||
@@ -357,16 +357,16 @@ ext_modules = [
|
||||
Extension('sage.graphs.matchpoly',
|
||||
sources = ['sage/graphs/matchpoly.pyx']),
|
||||
|
||||
|
@ -27,7 +27,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.graphs.planarity',
|
||||
sources = ['sage/graphs/planarity.pyx'],
|
||||
@@ -386,10 +386,10 @@ ext_modules = [
|
||||
@@ -385,10 +385,10 @@ ext_modules = [
|
||||
Extension('sage.graphs.graph_decompositions.cutwidth',
|
||||
sources = ['sage/graphs/graph_decompositions/cutwidth.pyx']),
|
||||
|
||||
|
@ -42,7 +42,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.graphs.spanning_tree',
|
||||
sources = ['sage/graphs/spanning_tree.pyx']),
|
||||
@@ -461,21 +461,20 @@ ext_modules = [
|
||||
@@ -460,21 +460,20 @@ ext_modules = [
|
||||
##
|
||||
################################
|
||||
|
||||
|
@ -72,7 +72,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.libs.flint.flint',
|
||||
sources = ["sage/libs/flint/flint.pyx"],
|
||||
@@ -841,10 +840,10 @@ ext_modules = [
|
||||
@@ -840,10 +839,10 @@ ext_modules = [
|
||||
Extension('sage.matrix.matrix_window',
|
||||
sources = ['sage/matrix/matrix_window.pyx']),
|
||||
|
||||
|
@ -87,7 +87,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.matrix.misc',
|
||||
sources = ['sage/matrix/misc.pyx']),
|
||||
@@ -1021,26 +1020,25 @@ ext_modules = [
|
||||
@@ -1020,26 +1019,25 @@ ext_modules = [
|
||||
Extension("sage.numerical.backends.interactivelp_backend",
|
||||
["sage/numerical/backends/interactivelp_backend.pyx"]),
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/libs/fes.pyx.orig src/sage/libs/fes.pyx
|
||||
--- src/sage/libs/fes.pyx.orig 2017-11-08 08:26:29.835214502 -0500
|
||||
+++ src/sage/libs/fes.pyx 2017-11-08 08:26:38.707214842 -0500
|
||||
--- src/sage/libs/fes.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/fes.pyx 2019-01-17 09:46:02.925523575 -0700
|
||||
@@ -86,8 +86,8 @@ from sage.rings.polynomial.pbori import
|
||||
from sage.arith.all import binomial
|
||||
from sage.combinat.subset import Subsets
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2018-08-29 08:35:19.927079956 -0600
|
||||
+++ src/module_list.py 2018-08-29 10:41:05.127643255 -0600
|
||||
@@ -471,10 +471,10 @@ ext_modules = [
|
||||
--- src/module_list.py.orig 2019-01-16 09:45:43.332740109 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:46:10.613250567 -0700
|
||||
@@ -470,10 +470,10 @@ ext_modules = [
|
||||
Extension('sage.libs.ecl',
|
||||
sources = ["sage/libs/ecl.pyx"]),
|
||||
|
||||
|
|
15
sagemath-giac.patch
Normal file
15
sagemath-giac.patch
Normal file
|
@ -0,0 +1,15 @@
|
|||
diff -up src/sage/interfaces/giac.py.orig src/sage/interfaces/giac.py
|
||||
--- src/sage/interfaces/giac.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/giac.py 2019-01-15 15:10:47.399759655 -0700
|
||||
@@ -617,10 +617,7 @@ If you got giac from the spkg then ``$PR
|
||||
'4\n3'
|
||||
sage: s='g(x):={\nx+1;\nx+2;\n}'
|
||||
sage: giac(s)
|
||||
- (x)->{
|
||||
- x+1;
|
||||
- x+2;
|
||||
- }
|
||||
+ (x)->[x+1,x+2]
|
||||
sage: giac.g(5)
|
||||
7
|
||||
"""
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2018-10-25 11:40:44.400943439 -0600
|
||||
+++ src/module_list.py 2018-10-25 16:16:46.618825285 -0600
|
||||
@@ -45,6 +45,9 @@ zlib_libs = zlib_pc['libraries']
|
||||
--- src/module_list.py.orig 2019-01-16 09:46:10.613250567 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:47:07.804224297 -0700
|
||||
@@ -44,6 +44,9 @@ zlib_libs = zlib_pc['libraries']
|
||||
zlib_library_dirs = zlib_pc['library_dirs']
|
||||
zlib_include_dirs = zlib_pc['include_dirs']
|
||||
|
||||
|
@ -11,7 +11,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
#########################################################
|
||||
### M4RI flags
|
||||
#########################################################
|
||||
@@ -61,6 +64,14 @@ except ValueError:
|
||||
@@ -60,6 +63,14 @@ except ValueError:
|
||||
pass
|
||||
|
||||
#########################################################
|
||||
|
@ -26,7 +26,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
### Library order
|
||||
#########################################################
|
||||
|
||||
@@ -134,7 +145,8 @@ ext_modules = [
|
||||
@@ -133,7 +144,8 @@ ext_modules = [
|
||||
language='c++',
|
||||
libraries = ["gmp", "m", "ntl"]),
|
||||
|
||||
|
@ -36,7 +36,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('*', sources = ['sage/algebras/finite_dimensional_algebras/*.pyx']),
|
||||
|
||||
@@ -524,7 +536,8 @@ ext_modules = [
|
||||
@@ -523,7 +535,8 @@ ext_modules = [
|
||||
[])),
|
||||
|
||||
Extension('sage.libs.lrcalc.lrcalc',
|
||||
|
@ -46,7 +46,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
OptionalExtension("sage.libs.meataxe",
|
||||
sources = ['sage/libs/meataxe.pyx'],
|
||||
@@ -546,23 +559,28 @@ ext_modules = [
|
||||
@@ -545,23 +558,28 @@ ext_modules = [
|
||||
sources = ['sage/libs/readline.pyx'],
|
||||
libraries = ['readline']),
|
||||
|
||||
|
@ -80,7 +80,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
###################################
|
||||
##
|
||||
@@ -570,7 +588,8 @@ ext_modules = [
|
||||
@@ -569,7 +587,8 @@ ext_modules = [
|
||||
##
|
||||
###################################
|
||||
|
||||
|
@ -90,7 +90,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
###################################
|
||||
##
|
||||
@@ -742,7 +761,8 @@ ext_modules = [
|
||||
@@ -741,7 +760,8 @@ ext_modules = [
|
||||
|
||||
Extension("sage.matrix.matrix_complex_ball_dense",
|
||||
["sage/matrix/matrix_complex_ball_dense.pyx"],
|
||||
|
@ -100,7 +100,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.matrix.matrix_complex_double_dense',
|
||||
sources = ['sage/matrix/matrix_complex_double_dense.pyx']),
|
||||
@@ -750,6 +770,7 @@ ext_modules = [
|
||||
@@ -749,6 +769,7 @@ ext_modules = [
|
||||
Extension('sage.matrix.matrix_cyclo_dense',
|
||||
sources = ['sage/matrix/matrix_cyclo_dense.pyx'],
|
||||
language = "c++",
|
||||
|
@ -108,7 +108,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
libraries=['ntl']),
|
||||
|
||||
Extension('sage.matrix.matrix_gap',
|
||||
@@ -812,6 +833,7 @@ ext_modules = [
|
||||
@@ -811,6 +832,7 @@ ext_modules = [
|
||||
sources = ['sage/matrix/matrix_modn_sparse.pyx']),
|
||||
|
||||
Extension('sage.matrix.matrix_mpolynomial_dense',
|
||||
|
@ -116,7 +116,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
sources = ['sage/matrix/matrix_mpolynomial_dense.pyx']),
|
||||
|
||||
Extension('sage.matrix.matrix_polynomial_dense',
|
||||
@@ -1109,7 +1131,8 @@ ext_modules = [
|
||||
@@ -1108,7 +1130,8 @@ ext_modules = [
|
||||
language = 'c++'),
|
||||
|
||||
Extension("sage.rings.complex_arb",
|
||||
|
@ -126,7 +126,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.rings.complex_double',
|
||||
sources = ['sage/rings/complex_double.pyx'],
|
||||
@@ -1179,7 +1202,8 @@ ext_modules = [
|
||||
@@ -1184,7 +1207,8 @@ ext_modules = [
|
||||
sources = ['sage/rings/real_interval_absolute.pyx']),
|
||||
|
||||
Extension("sage.rings.real_arb",
|
||||
|
@ -136,7 +136,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.rings.real_lazy',
|
||||
sources = ['sage/rings/real_lazy.pyx']),
|
||||
@@ -1262,6 +1286,7 @@ ext_modules = [
|
||||
@@ -1267,6 +1291,7 @@ ext_modules = [
|
||||
|
||||
Extension('sage.rings.number_field.number_field_element_quadratic',
|
||||
sources = ['sage/rings/number_field/number_field_element_quadratic.pyx'],
|
||||
|
@ -144,7 +144,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
libraries=['ntl'],
|
||||
language = 'c++'),
|
||||
|
||||
@@ -1401,12 +1426,15 @@ ext_modules = [
|
||||
@@ -1406,12 +1431,15 @@ ext_modules = [
|
||||
sources = ['sage/rings/polynomial/multi_polynomial.pyx']),
|
||||
|
||||
Extension('sage.rings.polynomial.multi_polynomial_ideal_libsingular',
|
||||
|
@ -160,7 +160,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
sources = ['sage/rings/polynomial/multi_polynomial_libsingular.pyx']),
|
||||
|
||||
Extension('sage.rings.polynomial.multi_polynomial_ring_base',
|
||||
@@ -1419,7 +1447,8 @@ ext_modules = [
|
||||
@@ -1424,7 +1452,8 @@ ext_modules = [
|
||||
sources = ['sage/rings/polynomial/polydict.pyx']),
|
||||
|
||||
Extension('sage.rings.polynomial.polynomial_complex_arb',
|
||||
|
@ -170,9 +170,9 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
|
||||
Extension('sage.rings.polynomial.polynomial_compiled',
|
||||
sources = ['sage/rings/polynomial/polynomial_compiled.pyx']),
|
||||
diff -du src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2018-10-25 14:05:20.779815082 -0600
|
||||
+++ src/setup.py 2018-10-25 16:16:46.619825283 -0600
|
||||
diff -up src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2019-01-16 09:45:32.570933224 -0700
|
||||
+++ src/setup.py 2019-01-16 09:47:07.805224279 -0700
|
||||
@@ -85,6 +85,7 @@ except KeyError:
|
||||
|
||||
# search for dependencies and add to gcc -I<path>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/interfaces/jmoldata.py.orig src/sage/interfaces/jmoldata.py
|
||||
--- src/sage/interfaces/jmoldata.py.orig 2018-10-17 17:13:47.000000000 -0600
|
||||
+++ src/sage/interfaces/jmoldata.py 2018-10-25 13:22:07.965272901 -0600
|
||||
--- src/sage/interfaces/jmoldata.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/jmoldata.py 2019-01-16 09:43:40.755939704 -0700
|
||||
@@ -148,8 +148,6 @@ class JmolData(SageObject):
|
||||
sage: print(os.path.exists(testfile)) # optional -- java
|
||||
True
|
||||
|
|
21
sagemath-latte.patch
Normal file
21
sagemath-latte.patch
Normal file
|
@ -0,0 +1,21 @@
|
|||
diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
|
||||
--- src/sage/interfaces/latte.py.orig 2019-01-16 09:44:45.946769879 -0700
|
||||
+++ src/sage/interfaces/latte.py 2019-01-16 09:47:33.355765786 -0700
|
||||
@@ -112,7 +112,7 @@ def count(arg, ehrhart_polynomial=False,
|
||||
# Check that LattE is present
|
||||
Latte().require()
|
||||
|
||||
- args = ['count']
|
||||
+ args = ['latte-count']
|
||||
if ehrhart_polynomial and multivariate_generating_function:
|
||||
raise ValueError
|
||||
if ehrhart_polynomial:
|
||||
@@ -305,7 +305,7 @@ def integrate(arg, polynomial=None, algo
|
||||
# Check that LattE is present
|
||||
Latte().require()
|
||||
|
||||
- args = ['integrate']
|
||||
+ args = ['latte-integrate']
|
||||
|
||||
got_polynomial = True if polynomial is not None else False
|
||||
|
|
@ -1,20 +1,12 @@
|
|||
diff -up src/sage/libs/lcalc/lcalc_Lfunction.pxd.orig src/sage/libs/lcalc/lcalc_Lfunction.pxd
|
||||
--- src/sage/libs/lcalc/lcalc_Lfunction.pxd.orig 2018-05-05 16:21:24.000000000 -0600
|
||||
+++ src/sage/libs/lcalc/lcalc_Lfunction.pxd 2018-05-22 13:31:10.717337490 -0600
|
||||
@@ -1,6 +1,6 @@
|
||||
# Lcalc requires GNU extensions, it does not strictly conform to any
|
||||
# C++ standard: https://trac.sagemath.org/ticket/23341
|
||||
-# distutils: extra_compile_args = -std=gnu++98
|
||||
+# distutils: extra_compile_args = -std=gnu++11
|
||||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2019-01-16 09:42:41.397004883 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:45:43.332740109 -0700
|
||||
@@ -513,7 +513,7 @@ ext_modules = [
|
||||
Extension('sage.libs.lcalc.lcalc_Lfunction',
|
||||
sources = ['sage/libs/lcalc/lcalc_Lfunction.pyx'],
|
||||
libraries = ['m', 'ntl', 'Lfunction'],
|
||||
- extra_compile_args=["-O3", "-ffast-math"],
|
||||
+ extra_compile_args=["-std=gnu++11", "-ffast-math"],
|
||||
language = 'c++'),
|
||||
|
||||
cdef extern from "lcalc_sage.h":
|
||||
ctypedef struct doublevec "std::vector<double>":
|
||||
diff -up src/sage/libs/lcalc/lcalc_sage.h.orig src/sage/libs/lcalc/lcalc_sage.h
|
||||
--- src/sage/libs/lcalc/lcalc_sage.h.orig 2018-05-05 16:21:24.000000000 -0600
|
||||
+++ src/sage/libs/lcalc/lcalc_sage.h 2018-05-22 13:30:32.012839737 -0600
|
||||
@@ -1,4 +1,4 @@
|
||||
-#include "libLfunction/L.h"
|
||||
+#include "Lfunction/L.h"
|
||||
|
||||
int *new_ints(int l)
|
||||
{
|
||||
Extension('sage.libs.libecm',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/env.py.orig src/sage/env.py
|
||||
--- src/sage/env.py.orig 2018-10-17 17:13:36.000000000 -0600
|
||||
+++ src/sage/env.py 2018-10-25 14:10:21.564960823 -0600
|
||||
--- src/sage/env.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/env.py 2019-01-04 11:08:22.825475344 -0700
|
||||
@@ -164,7 +164,7 @@ _add_variable_or_fallback('CONWAY_POLYNO
|
||||
_add_variable_or_fallback('GRAPHS_DATA_DIR', opj('$SAGE_SHARE','graphs'))
|
||||
_add_variable_or_fallback('ELLCURVE_DATA_DIR',opj('$SAGE_SHARE','ellcurves'))
|
||||
|
@ -11,8 +11,8 @@ diff -up src/sage/env.py.orig src/sage/env.py
|
|||
_add_variable_or_fallback('COMBINATORIAL_DESIGN_DATA_DIR', opj('$SAGE_SHARE', 'combinatorial_designs'))
|
||||
_add_variable_or_fallback('CREMONA_MINI_DATA_DIR', opj('$SAGE_SHARE', 'cremona'))
|
||||
diff -up src/sage/libs/gap/test/main.c.orig src/sage/libs/gap/test/main.c
|
||||
--- src/sage/libs/gap/test/main.c.orig 2018-10-17 17:13:52.000000000 -0600
|
||||
+++ src/sage/libs/gap/test/main.c 2018-10-25 14:05:51.458727612 -0600
|
||||
--- src/sage/libs/gap/test/main.c.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/gap/test/main.c 2019-01-04 11:08:22.842475024 -0700
|
||||
@@ -22,7 +22,7 @@ void eval(char* cmd) {
|
||||
libgap_start_interaction(cmd);
|
||||
|
||||
|
@ -23,9 +23,9 @@ diff -up src/sage/libs/gap/test/main.c.orig src/sage/libs/gap/test/main.c
|
|||
char* out = libgap_get_output();
|
||||
libgap_exit();
|
||||
diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx
|
||||
--- src/sage/libs/gap/util.pyx.orig 2018-10-25 13:50:51.168295628 -0600
|
||||
+++ src/sage/libs/gap/util.pyx 2018-10-25 14:05:51.458727612 -0600
|
||||
@@ -25,6 +25,8 @@ from sage.cpython.string cimport str_to_
|
||||
--- src/sage/libs/gap/util.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/gap/util.pyx 2019-01-04 11:08:22.843475005 -0700
|
||||
@@ -27,6 +27,8 @@ from sage.cpython.string cimport str_to_
|
||||
from sage.interfaces.gap_workspace import prepare_workspace_dir
|
||||
from sage.env import SAGE_LOCAL, GAP_ROOT_DIR
|
||||
|
||||
|
@ -34,16 +34,16 @@ diff -up src/sage/libs/gap/util.pyx.orig src/sage/libs/gap/util.pyx
|
|||
|
||||
############################################################################
|
||||
### Hooking into the GAP memory management #################################
|
||||
@@ -164,7 +166,7 @@ def gap_root():
|
||||
@@ -185,7 +187,7 @@ def gap_root():
|
||||
|
||||
sage: from sage.libs.gap.util import gap_root
|
||||
sage: gap_root() # random output
|
||||
- '/home/vbraun/opt/sage-5.3.rc0/local/gap/latest'
|
||||
+ '/usr/lib/gap'
|
||||
"""
|
||||
import os.path
|
||||
if os.path.exists(GAP_ROOT_DIR):
|
||||
@@ -232,6 +234,7 @@ cdef initialize():
|
||||
try:
|
||||
if os.path.exists(GAP_ROOT_DIR):
|
||||
@@ -251,6 +253,7 @@ cdef initialize():
|
||||
libgap_initialize(argc, argv)
|
||||
gap_error_msg = char_to_str(libgap_get_output())
|
||||
libgap_finish_interaction()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/bin/sage-maxima.lisp.orig src/bin/sage-maxima.lisp
|
||||
--- src/bin/sage-maxima.lisp.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/bin/sage-maxima.lisp 2018-10-25 13:14:53.465538639 -0600
|
||||
--- src/bin/sage-maxima.lisp.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/bin/sage-maxima.lisp 2019-01-16 09:43:18.550338178 -0700
|
||||
@@ -4,3 +4,8 @@
|
||||
|
||||
(setf *prompt-prefix* "<sage-display>")
|
||||
|
@ -11,8 +11,8 @@ diff -up src/bin/sage-maxima.lisp.orig src/bin/sage-maxima.lisp
|
|||
+ *standard-input* (open "/dev/stdin" :direction :input)
|
||||
+ *standard-output* (open "/dev/stdout" :direction :output))
|
||||
diff -up src/sage/interfaces/maxima.py.orig src/sage/interfaces/maxima.py
|
||||
--- src/sage/interfaces/maxima.py.orig 2018-10-17 17:13:51.000000000 -0600
|
||||
+++ src/sage/interfaces/maxima.py 2018-10-25 13:16:00.326343444 -0600
|
||||
--- src/sage/interfaces/maxima.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/maxima.py 2019-01-16 09:43:18.552338143 -0700
|
||||
@@ -546,7 +546,7 @@ class Maxima(MaximaAbstract, Expect):
|
||||
Expect.__init__(self,
|
||||
name = 'maxima',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/libs/mpfr/__init__.pxd.orig src/sage/libs/mpfr/__init__.pxd
|
||||
--- src/sage/libs/mpfr/__init__.pxd.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/libs/mpfr/__init__.pxd 2018-08-29 10:41:34.027286042 -0600
|
||||
--- src/sage/libs/mpfr/__init__.pxd.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/mpfr/__init__.pxd 2019-01-04 11:10:25.215172876 -0700
|
||||
@@ -96,7 +96,6 @@ cdef extern from "mpfr.h":
|
||||
int mpfr_sqrt(mpfr_t rop, mpfr_t op, mpfr_rnd_t rnd)
|
||||
int mpfr_sqrt_ui(mpfr_t rop, unsigned long int op, mpfr_rnd_t rnd)
|
||||
|
@ -10,9 +10,9 @@ diff -up src/sage/libs/mpfr/__init__.pxd.orig src/sage/libs/mpfr/__init__.pxd
|
|||
int mpfr_pow(mpfr_t rop, mpfr_t op1, mpfr_t op2, mpfr_rnd_t rnd)
|
||||
int mpfr_pow_ui(mpfr_t rop, mpfr_t op1, unsigned long int op2, mpfr_rnd_t rnd)
|
||||
diff -up src/sage/rings/complex_mpc.pyx.orig src/sage/rings/complex_mpc.pyx
|
||||
--- src/sage/rings/complex_mpc.pyx.orig 2018-08-03 05:10:09.000000000 -0600
|
||||
+++ src/sage/rings/complex_mpc.pyx 2018-08-29 10:41:34.027286042 -0600
|
||||
@@ -2225,7 +2225,7 @@ cdef class MPComplexNumber(sage.structur
|
||||
--- src/sage/rings/complex_mpc.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/rings/complex_mpc.pyx 2019-01-04 11:10:25.217172839 -0700
|
||||
@@ -2222,7 +2222,7 @@ cdef class MPComplexNumber(sage.structur
|
||||
cdef RealNumber a,r
|
||||
a = self.argument()/n
|
||||
r = self.abs()
|
||||
|
@ -22,8 +22,8 @@ diff -up src/sage/rings/complex_mpc.pyx.orig src/sage/rings/complex_mpc.pyx
|
|||
cdef MPComplexNumber z
|
||||
z = self._new()
|
||||
diff -up src/sage/rings/complex_number.pyx.orig src/sage/rings/complex_number.pyx
|
||||
--- src/sage/rings/complex_number.pyx.orig 2018-08-03 05:10:09.000000000 -0600
|
||||
+++ src/sage/rings/complex_number.pyx 2018-08-29 10:41:34.027286042 -0600
|
||||
--- src/sage/rings/complex_number.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/rings/complex_number.pyx 2019-01-04 11:10:25.218172820 -0700
|
||||
@@ -2276,7 +2276,7 @@ cdef class ComplexNumber(sage.structure.
|
||||
rho = abs(self)
|
||||
arg = self.argument() / n
|
||||
|
@ -34,9 +34,9 @@ diff -up src/sage/rings/complex_number.pyx.orig src/sage/rings/complex_number.py
|
|||
mpfr_sin_cos(z.__im, z.__re, arg.value, rnd)
|
||||
mpfr_mul(z.__re, z.__re, r, rnd)
|
||||
diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx
|
||||
--- src/sage/rings/real_mpfr.pyx.orig 2018-08-03 05:10:09.000000000 -0600
|
||||
+++ src/sage/rings/real_mpfr.pyx 2018-08-29 10:41:34.028286030 -0600
|
||||
@@ -5370,7 +5370,7 @@ cdef class RealNumber(sage.structure.ele
|
||||
--- src/sage/rings/real_mpfr.pyx.orig 2019-01-04 12:22:18.194171036 -0700
|
||||
+++ src/sage/rings/real_mpfr.pyx 2019-01-16 09:46:36.794780751 -0700
|
||||
@@ -5384,7 +5384,7 @@ cdef class RealNumber(sage.structure.ele
|
||||
if algorithm == 1:
|
||||
x = self._new()
|
||||
sig_on()
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/sage/graphs/graph_generators.py.orig src/sage/graphs/graph_generators.py
|
||||
--- src/sage/graphs/graph_generators.py.orig 2018-10-17 17:13:47.000000000 -0600
|
||||
+++ src/sage/graphs/graph_generators.py 2018-10-25 14:04:50.496901422 -0600
|
||||
@@ -911,7 +911,7 @@ class GraphGenerators():
|
||||
--- src/sage/graphs/graph_generators.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/graphs/graph_generators.py 2019-01-16 09:45:21.999122930 -0700
|
||||
@@ -912,7 +912,7 @@ class GraphGenerators():
|
||||
else:
|
||||
enc_kwargs = {'encoding': 'latin-1'}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2018-05-16 14:13:22.021406801 -0600
|
||||
+++ src/module_list.py 2018-05-16 14:15:57.654208949 -0600
|
||||
@@ -12,7 +12,7 @@ SAGE_INC = '/usr/include'
|
||||
--- src/module_list.py.orig 2019-01-16 09:47:07.804224297 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:47:21.611976523 -0700
|
||||
@@ -11,7 +11,7 @@ SAGE_INC = '/usr/include'
|
||||
import pkgconfig
|
||||
|
||||
# CBLAS can be one of multiple implementations
|
||||
|
@ -10,7 +10,7 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
cblas_libs = cblas_pc['libraries']
|
||||
cblas_library_dirs = cblas_pc['library_dirs']
|
||||
cblas_include_dirs = cblas_pc['include_dirs']
|
||||
@@ -21,11 +21,9 @@ cblas_include_dirs = cblas_pc['include_d
|
||||
@@ -20,11 +20,9 @@ cblas_include_dirs = cblas_pc['include_d
|
||||
if os.path.exists('/usr/lib/libblas.dll.a'):
|
||||
cblas_libs = ['gslcblas']
|
||||
|
||||
|
@ -26,9 +26,9 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
# GD image library
|
||||
gd_pc = pkgconfig.parse('gdlib')
|
||||
diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py
|
||||
--- src/sage/misc/cython.py.orig 2018-05-16 13:16:29.207708998 -0600
|
||||
+++ src/sage/misc/cython.py 2018-05-16 14:15:57.656208921 -0600
|
||||
@@ -40,7 +40,7 @@ from sage.misc.sage_ostools import resto
|
||||
--- src/sage/misc/cython.py.orig 2019-01-04 10:27:47.031123276 -0700
|
||||
+++ src/sage/misc/cython.py 2019-01-04 11:18:40.060863533 -0700
|
||||
@@ -39,7 +39,7 @@ from sage.misc.sage_ostools import resto
|
||||
|
||||
|
||||
# CBLAS can be one of multiple implementations
|
||||
|
|
|
@ -1,53 +1,7 @@
|
|||
--- build/pkgs/sagenb/src/sagenb/flask_version/worksheet_listing.py.orig 2018-01-24 04:17:47.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/flask_version/worksheet_listing.py 2018-10-25 13:25:53.284617298 -0600
|
||||
@@ -2,7 +2,12 @@
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
-import urllib, urlparse
|
||||
+try:
|
||||
+ from urllib.request import urlopen
|
||||
+ from urllib.parse import urlparse
|
||||
+except ImportError:
|
||||
+ from urlparse import urlparse
|
||||
+ from urllib import urlopen
|
||||
from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app
|
||||
from .decorators import login_required, guest_or_login_required, with_lock
|
||||
from flask_babel import Babel, gettext, ngettext, lazy_gettext
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig 2018-06-10 13:56:16.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/sphinxify.py 2018-10-25 13:29:39.187960000 -0600
|
||||
@@ -19,6 +19,7 @@ AUTHORS:
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
+import six.moves
|
||||
from tempfile import mkdtemp
|
||||
|
||||
# We import Sphinx on demand, to reduce Sage startup time.
|
||||
@@ -94,9 +95,8 @@ def sphinxify(docstring, format='html'):
|
||||
suffix = '.txt'
|
||||
output_name = base_name + suffix
|
||||
|
||||
- filed = open(rst_name, 'w')
|
||||
- filed.write(docstring)
|
||||
- filed.close()
|
||||
+ with open(rst_name, 'w') as filed:
|
||||
+ filed.write(docstring)
|
||||
|
||||
# Sphinx constructor: Sphinx(srcdir, confdir, outdir, doctreedir,
|
||||
# buildername, confoverrides, status, warning, freshenv).
|
||||
@@ -120,8 +120,8 @@ def sphinxify(docstring, format='html'):
|
||||
sys.path = old_sys_path
|
||||
|
||||
#We need to remove "_" from __builtin__ that the gettext module installs
|
||||
- import __builtin__
|
||||
- __builtin__.__dict__.pop('_', None)
|
||||
+ from six.moves import builtins
|
||||
+ builtins.__dict__.pop('_', None)
|
||||
|
||||
if os.path.exists(output_name):
|
||||
output = open(output_name, 'r').read()
|
||||
@@ -481,7 +481,7 @@ skip_picklability_check_modules = [
|
||||
diff -up build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig build/pkgs/sagenb/src/sagenb/misc/sphinxify.py
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/sphinxify.py 2019-01-04 10:34:03.550082474 -0700
|
||||
@@ -480,7 +480,7 @@ skip_picklability_check_modules = [
|
||||
#'sage.misc.nested_class_test', # for test only
|
||||
'sage.misc.latex',
|
||||
'sage.misc.explain_pickle',
|
||||
|
@ -56,7 +10,7 @@
|
|||
]
|
||||
|
||||
def check_nested_class_picklability(app, what, name, obj, skip, options):
|
||||
@@ -532,7 +532,7 @@ def skip_member(app, what, name, obj, sk
|
||||
@@ -531,7 +531,7 @@ def skip_member(app, what, name, obj, sk
|
||||
if 'SAGE_CHECK_NESTED' in os.environ:
|
||||
check_nested_class_picklability(app, what, name, obj, skip, options)
|
||||
|
||||
|
@ -65,277 +19,42 @@
|
|||
return True
|
||||
|
||||
if (hasattr(obj, '__name__') and obj.__name__.find('.') != -1 and
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2018-05-22 10:01:48.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2018-10-25 13:30:02.499892169 -0600
|
||||
@@ -17,7 +17,7 @@ import sys
|
||||
import pydoc
|
||||
|
||||
from six import iteritems
|
||||
-import __builtin__
|
||||
+import builtins
|
||||
|
||||
try:
|
||||
from cPickle import PicklingError
|
||||
@@ -467,7 +467,7 @@ def cython_import(filename, verbose=Fals
|
||||
use_cache=use_cache,
|
||||
create_local_c_file=create_local_c_file)
|
||||
sys.path.append(build_dir)
|
||||
- return __builtin__.__import__(name)
|
||||
+ return builtins.__import__(name)
|
||||
|
||||
|
||||
def cython_import_all(filename, globals, verbose=False, compile_message=False,
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig 2018-08-29 08:44:38.823169061 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2018-10-25 13:30:55.707737342 -0600
|
||||
@@ -20,6 +20,7 @@ import shutil
|
||||
import textwrap
|
||||
import time
|
||||
from cgi import escape
|
||||
+from sys import maxsize
|
||||
|
||||
from sagenb.misc.misc import (word_wrap, strip_string_literals,
|
||||
set_restrictive_permissions, unicode_str,
|
||||
@@ -701,9 +702,8 @@ class Cell(Cell_generic):
|
||||
|
||||
# start with a random integer so that evaluations of the cell
|
||||
# from different runs have different version numbers.
|
||||
- from sys import maxint
|
||||
from random import randint
|
||||
- self._version = randint(0,maxint)
|
||||
+ self._version = randint(0,maxsize)
|
||||
|
||||
def __repr__(self):
|
||||
"""
|
||||
@@ -2189,9 +2189,8 @@ class Cell(Cell_generic):
|
||||
except AttributeError:
|
||||
# start with a random integer so that evaluations of the cell
|
||||
# from different runs have different version numbers.
|
||||
- from sys import maxint
|
||||
from random import randint
|
||||
- self._version = randint(0,maxint)
|
||||
+ self._version = randint(0,maxsize)
|
||||
return self._version
|
||||
|
||||
def time(self):
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig 2018-01-24 04:17:38.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2018-10-25 13:35:09.227001150 -0600
|
||||
@@ -7,7 +7,7 @@ file.
|
||||
|
||||
This takes an HTML document, i.e., Sage documentation, and returns it in
|
||||
the editable format (notebook worksheet format with evaluable examples). It
|
||||
-also returns a string representing the CSS link for the document. The SGML
|
||||
+also returns a string representing the CSS link for the document. The HTML
|
||||
parser is setup to return only the body of the HTML documentation page and
|
||||
to re-format Sage examples and type-setting.
|
||||
|
||||
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 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2019-01-04 10:39:26.659076379 -0700
|
||||
@@ -25,7 +25,7 @@ This module contains three classes:
|
||||
|
||||
.. NOTE::
|
||||
.. NOTE::
|
||||
|
||||
- This extension of sgmllib.SGMLParser was partly inspired by Mark
|
||||
- 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:
|
||||
@@ -111,14 +111,14 @@ WARNING:
|
||||
#############################################################################
|
||||
from __future__ import unicode_literals
|
||||
|
||||
-from sgmllib import SGMLParser
|
||||
+from html.parser import HTMLParser
|
||||
from htmlentitydefs import entitydefs
|
||||
|
||||
from flask import Markup
|
||||
from sagenb.misc.misc import unicode_str
|
||||
|
||||
|
||||
-class genericHTMLProcessor(SGMLParser):
|
||||
+class genericHTMLProcessor(HTMLParser):
|
||||
r"""
|
||||
This class gathers the methods that are common to both classes
|
||||
:class:`sagenb.notebook.SphinxHTMLProcessor` and
|
||||
@@ -155,16 +155,16 @@ class genericHTMLProcessor(SGMLParser):
|
||||
@@ -155,7 +155,7 @@ class genericHTMLProcessor(HTMLParser):
|
||||
u'<h1 class="title">Title</h1>\n\n<p>nSome text</p>\n\n\n\n'
|
||||
|
||||
"""
|
||||
- # self.feed() is a SGMLParser method and starts everything
|
||||
"""
|
||||
- # 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
|
||||
- # SGMLParser, and may never actually be visibly called here.
|
||||
+ # HTMLParser, and may never actually be visibly called here.
|
||||
# HTMLParser, and may never actually be visibly called here.
|
||||
|
||||
# This module works with unicode literals. In case that input data is
|
||||
# ascii, exceptions may occur. So, input data must be converted to
|
||||
# unicode if it were not.
|
||||
doc_in = unicode_str(doc_in)
|
||||
- self.feed(doc_in) #SGMLParser call
|
||||
- self.close() #SGMLParser call
|
||||
+ self.feed(doc_in) #HTMLParser call
|
||||
+ self.close() #HTMLParser call
|
||||
self.hand_off_temp_pieces('to_doc_pieces')
|
||||
return self.all_pieces.replace('\\(', '').replace('\\)', '').replace('\\[', '').replace('\\]', '')
|
||||
|
||||
@@ -390,7 +390,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
else:
|
||||
# first occurrence of an output string
|
||||
# write /// denoting output
|
||||
- if output_flag == False:
|
||||
+ if output_flag is False:
|
||||
piece += '///'
|
||||
if p:
|
||||
piece += '\n' + p
|
||||
@@ -400,7 +400,29 @@ class genericHTMLProcessor(SGMLParser):
|
||||
piece += p
|
||||
piece += '\n}}}\n\n'
|
||||
return Markup(piece).unescape()
|
||||
-
|
||||
+
|
||||
+ def handle_starttag(self, tag, attrs):
|
||||
+ """
|
||||
+ introduced when replacing SGMLParser by HTMLParser
|
||||
+ """
|
||||
+ try:
|
||||
+ method = getattr(self, 'start_' + tag)
|
||||
+ except AttributeError:
|
||||
+ self.unknown_starttag(tag, attrs)
|
||||
+ else:
|
||||
+ method(attrs)
|
||||
+
|
||||
+ def handle_endtag(self, tag):
|
||||
+ """
|
||||
+ introduced when replacing SGMLParser by HTMLParser
|
||||
+ """
|
||||
+ try:
|
||||
+ method = getattr(self, 'end_' + tag)
|
||||
+ except AttributeError:
|
||||
+ self.unknown_endtag(tag)
|
||||
+ else:
|
||||
+ method()
|
||||
+
|
||||
##############################################
|
||||
## General tag handlers
|
||||
## These just append their HTML to self.temp_pieces.
|
||||
@@ -473,6 +495,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append(data)
|
||||
+
|
||||
def handle_charref(self, ref):
|
||||
r"""
|
||||
INPUT:
|
||||
@@ -540,6 +563,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append("<!--%(data)s-->" % locals())
|
||||
+
|
||||
def handle_pi(self, text):
|
||||
r"""
|
||||
Handle processing instructions
|
||||
@@ -585,7 +609,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append("<!%(text)s>" % locals())
|
||||
-
|
||||
+
|
||||
##############################################
|
||||
## Specific tag handlers
|
||||
def start_body(self, attrs):
|
||||
@@ -634,6 +658,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
['bunch ', 'of ', 'tmp ', 'strings']
|
||||
"""
|
||||
pass
|
||||
+
|
||||
def end_html(self):
|
||||
r"""
|
||||
INPUT:
|
||||
@@ -658,7 +683,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
def reset(self):
|
||||
r"""
|
||||
Initialize necessary variables. Called by
|
||||
- :meth:`SGMLParser.__init__`.
|
||||
+ :meth:`HTMLParser.__init__`.
|
||||
|
||||
EXAMPLES::
|
||||
|
||||
@@ -685,8 +710,8 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
|
||||
# counters
|
||||
self.cellcount = 0
|
||||
-
|
||||
- SGMLParser.reset(self)
|
||||
+
|
||||
+ HTMLParser.reset(self)
|
||||
|
||||
def false_positive_input_output_cell(self, cell_piece):
|
||||
r"""
|
||||
@@ -733,7 +758,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
Once we hit the <div> tag in a highlighted block,
|
||||
hand of all of the pieces we've encountered so far
|
||||
and ignore the tag.
|
||||
-
|
||||
+
|
||||
INPUT:
|
||||
|
||||
- ``attrs`` - list of tuple
|
||||
@@ -835,7 +860,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
self.hand_off_temp_pieces('to_cell_pieces')
|
||||
return
|
||||
self.temp_pieces.append("</div>")
|
||||
-
|
||||
+
|
||||
def start_pre(self, attrs):
|
||||
r"""
|
||||
Ignore tag <pre> when inside highligh div.
|
||||
@@ -1000,6 +1025,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
if self.in_highlight_div:
|
||||
return
|
||||
self.unknown_starttag('span', attrs)
|
||||
+
|
||||
def end_span(self):
|
||||
r"""
|
||||
Ignore all spans that occur within highlighted blocks
|
||||
@@ -1095,7 +1121,7 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
def reset(self):
|
||||
r"""
|
||||
Initialize necessary variables. Called by
|
||||
- :meth:`SGMLParser.__init__`.
|
||||
+ :meth:`HTMLParser.__init__`.
|
||||
|
||||
EXAMPLES::
|
||||
|
||||
@@ -1125,8 +1151,8 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
|
||||
# counters
|
||||
self.cellcount = 0
|
||||
-
|
||||
- SGMLParser.reset(self)
|
||||
+
|
||||
+ HTMLParser.reset(self)
|
||||
|
||||
def false_positive_input_output_cell(self, cell_piece):
|
||||
r"""
|
||||
@@ -1162,7 +1188,7 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
piece = piece.replace('}','} ')
|
||||
piece += '\n</pre>'
|
||||
return piece
|
||||
-
|
||||
+
|
||||
#############################################
|
||||
## Specific tag handlers
|
||||
##
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/notebook.py.orig 2018-05-22 10:16:28.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/notebook.py 2018-10-25 13:35:37.122921027 -0600
|
||||
@@ -1268,7 +1268,7 @@ class Notebook(object):
|
||||
W.set_not_computing()
|
||||
|
||||
def quit(self):
|
||||
- for W in self.__worksheets.values():
|
||||
+ for W in list(self.__worksheets.values()):
|
||||
W.quit()
|
||||
|
||||
def update_worksheet_processes(self):
|
||||
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 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py 2019-01-05 10:36:28.072250833 -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'(^|(?<!\w))',
|
||||
+ 'url_guard': r'(^|(?<!\w))',
|
||||
'url': url_pattern,
|
||||
'punct': punct_pattern,
|
||||
}
|
||||
diff -up build/pkgs/sagetex/src/extractsagecode.py.orig build/pkgs/sagetex/src/extractsagecode.py
|
||||
--- build/pkgs/sagetex/src/extractsagecode.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/extractsagecode.py 2018-10-25 13:36:23.465787905 -0600
|
||||
+++ build/pkgs/sagetex/src/extractsagecode.py 2019-01-04 10:40:25.729978335 -0700
|
||||
@@ -45,8 +45,8 @@ See the SageTeX documentation for more d
|
||||
|
||||
try:
|
||||
|
@ -347,8 +66,9 @@
|
|||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
diff -up build/pkgs/sagetex/src/makestatic.py.orig build/pkgs/sagetex/src/makestatic.py
|
||||
--- build/pkgs/sagetex/src/makestatic.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/makestatic.py 2018-10-25 13:36:41.193736977 -0600
|
||||
+++ build/pkgs/sagetex/src/makestatic.py 2019-01-04 10:40:50.967509206 -0700
|
||||
@@ -45,8 +45,8 @@ See the SageTeX documentation for more d
|
||||
|
||||
try:
|
||||
|
@ -360,8 +80,9 @@
|
|||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
diff -up build/pkgs/sagetex/src/remote-sagetex.py.orig build/pkgs/sagetex/src/remote-sagetex.py
|
||||
--- build/pkgs/sagetex/src/remote-sagetex.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/remote-sagetex.py 2018-10-25 13:38:40.218395127 -0600
|
||||
+++ build/pkgs/sagetex/src/remote-sagetex.py 2019-01-04 10:43:03.728041391 -0700
|
||||
@@ -24,12 +24,11 @@
|
||||
## You should have received a copy of the GNU General Public License along
|
||||
## with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
@ -424,8 +145,9 @@
|
|||
|
||||
if not password:
|
||||
from getpass import getpass
|
||||
diff -up build/pkgs/sagetex/src/run-sagetex-if-necessary.py.orig build/pkgs/sagetex/src/run-sagetex-if-necessary.py
|
||||
--- build/pkgs/sagetex/src/run-sagetex-if-necessary.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/run-sagetex-if-necessary.py 2018-10-25 13:39:39.506224849 -0600
|
||||
+++ build/pkgs/sagetex/src/run-sagetex-if-necessary.py 2019-01-04 10:44:12.087770682 -0700
|
||||
@@ -58,7 +58,7 @@ with open(src + '.tex') as texf:
|
||||
break
|
||||
|
||||
|
@ -465,8 +187,9 @@
|
|||
else:
|
||||
- print 'Not necessary to run Sage on {0}.'.format(src)
|
||||
+ print('Not necessary to run Sage on {0}.'.format(src))
|
||||
diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sagetexparse.py
|
||||
--- build/pkgs/sagetex/src/sagetexparse.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetexparse.py 2018-10-25 13:40:02.522158738 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetexparse.py 2019-01-04 10:44:35.398337372 -0700
|
||||
@@ -52,7 +52,7 @@ class SoutParser():
|
||||
try:
|
||||
OneOrMore(parselabel).parseFile(fn)
|
||||
|
@ -476,8 +199,9 @@
|
|||
sys.exit(1)
|
||||
def newlabel(self, s, l, t):
|
||||
self.label.append(t.result[1:-1])
|
||||
diff -up build/pkgs/sagetex/src/sagetex.py.orig build/pkgs/sagetex/src/sagetex.py
|
||||
--- build/pkgs/sagetex/src/sagetex.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetex.py 2018-10-25 13:42:20.168763355 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetex.py 2019-01-04 10:46:09.685584716 -0700
|
||||
@@ -73,10 +73,10 @@ from your current version of Sage; see
|
||||
http://www.sagemath.org/doc/installation/sagetex.html.""".format(jobname,
|
||||
version, pyversion)
|
||||
|
@ -530,8 +254,9 @@
|
|||
_p_.save(filename=newfilename, **kwargs)
|
||||
break
|
||||
else:
|
||||
--- src/doc/common/conf.py.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/doc/common/conf.py 2018-10-25 13:43:39.882534395 -0600
|
||||
diff -up src/doc/common/conf.py.orig src/doc/common/conf.py
|
||||
--- src/doc/common/conf.py.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/doc/common/conf.py 2019-01-04 10:46:46.293895744 -0700
|
||||
@@ -490,7 +490,7 @@ skip_picklability_check_modules = [
|
||||
#'sage.misc.nested_class_test', # for test only
|
||||
'sage.misc.latex',
|
||||
|
@ -550,48 +275,30 @@
|
|||
return True
|
||||
|
||||
objname = getattr(obj, "__name__", None)
|
||||
--- src/sage/arith/long.pxd.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/arith/long.pxd 2018-10-25 13:46:00.073131738 -0600
|
||||
@@ -19,7 +19,7 @@ from cpython.object cimport Py_SIZE
|
||||
from cpython.int cimport PyInt_AS_LONG
|
||||
from cpython.long cimport PyLong_AsLong
|
||||
from cpython.number cimport PyNumber_Index, PyIndex_Check
|
||||
-from cpython.longintrepr cimport PyLongObject, PyLong_SHIFT, digit
|
||||
+from cpython.longintrepr cimport py_long, PyLong_SHIFT, digit
|
||||
|
||||
from sage.libs.gmp.mpz cimport mpz_fits_slong_p, mpz_get_si
|
||||
from sage.rings.integer_fake cimport is_Integer, Integer_AS_MPZ
|
||||
@@ -208,7 +208,7 @@ cdef inline bint integer_check_long_py(x
|
||||
return 0
|
||||
|
||||
# x is a Python "long" (called "int" on Python 3)
|
||||
- cdef const digit* D = (<PyLongObject*>x).ob_digit
|
||||
+ cdef const digit* D = (<py_long>x).ob_digit
|
||||
cdef Py_ssize_t size = Py_SIZE(x)
|
||||
|
||||
# We assume that PyLong_SHIFT is 15 on a 32-bit system and 30 on a
|
||||
--- src/sage/combinat/finite_state_machine.py.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/combinat/finite_state_machine.py 2018-10-25 13:47:08.277935821 -0600
|
||||
@@ -937,7 +937,7 @@ from six.moves import range
|
||||
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 2018-12-22 16:37:07.000000000 -0700
|
||||
+++ src/sage/combinat/finite_state_machine.py 2019-01-04 10:49:30.519802159 -0700
|
||||
@@ -934,7 +934,7 @@ import six
|
||||
from six.moves import range, zip_longest, zip
|
||||
from six import itervalues
|
||||
from six.moves import zip_longest
|
||||
|
||||
-import collections
|
||||
+import collections.abc
|
||||
import itertools
|
||||
|
||||
import sage
|
||||
@@ -14140,7 +14140,7 @@ def is_FSMProcessIterator(PI):
|
||||
from sage.calculus.var import var
|
||||
@@ -14253,7 +14253,7 @@ def is_FSMProcessIterator(PI):
|
||||
|
||||
|
||||
class FSMProcessIterator(sage.structure.sage_object.SageObject,
|
||||
class FSMProcessIterator(SageObject,
|
||||
- collections.Iterator):
|
||||
+ collections.abc.Iterator):
|
||||
"""
|
||||
This class takes an input, feeds it into a finite state machine
|
||||
(automaton or transducer, in particular), tests whether this was
|
||||
--- src/sage/cpython/dict_del_by_value.pyx.orig 2018-10-17 17:13:36.000000000 -0600
|
||||
+++ src/sage/cpython/dict_del_by_value.pyx 2018-10-25 13:48:05.887770337 -0600
|
||||
diff -up src/sage/cpython/dict_del_by_value.pyx.orig src/sage/cpython/dict_del_by_value.pyx
|
||||
--- src/sage/cpython/dict_del_by_value.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/cpython/dict_del_by_value.pyx 2019-01-04 10:50:27.178734667 -0700
|
||||
@@ -347,8 +347,8 @@ ELIF PY_VERSION_HEX>=0x03060000:
|
||||
cdef MyPyDictKeysObject * keys = <MyPyDictKeysObject *>(mp.ma_keys)
|
||||
cdef size_t perturb
|
||||
|
@ -603,48 +310,135 @@
|
|||
|
||||
if mp.ma_values != NULL:
|
||||
print ("del_dictitem_by_exact_value cannot be applied to a shared key dict")
|
||||
--- src/sage/libs/gap/util.pyx.orig 2018-10-17 17:13:52.000000000 -0600
|
||||
+++ src/sage/libs/gap/util.pyx 2018-10-25 13:50:51.168295628 -0600
|
||||
@@ -171,7 +171,7 @@ def gap_root():
|
||||
return GAP_ROOT_DIR
|
||||
print('The gap-4.5.5.spkg (or later) seems to be not installed!')
|
||||
gap_sh = open(os.path.join(SAGE_LOCAL, 'bin', 'gap')).read().splitlines()
|
||||
- gapdir = filter(lambda dir:dir.strip().startswith('GAP_DIR'), gap_sh)[0]
|
||||
+ gapdir = next(filter(lambda dir:dir.strip().startswith('GAP_DIR'), gap_sh))
|
||||
gapdir = gapdir.split('"')[1]
|
||||
gapdir = gapdir.replace('$SAGE_LOCAL', SAGE_LOCAL)
|
||||
return gapdir
|
||||
--- src/sage/libs/gmp/pylong.pyx.orig 2018-10-17 17:13:52.000000000 -0600
|
||||
+++ src/sage/libs/gmp/pylong.pyx 2018-10-25 13:52:12.296063129 -0600
|
||||
@@ -28,7 +28,7 @@ AUTHORS:
|
||||
from cpython.object cimport Py_SIZE
|
||||
from cpython.int cimport PyInt_FromLong
|
||||
from cpython.long cimport PyLong_FromLong
|
||||
-from cpython.longintrepr cimport _PyLong_New, PyLongObject, digit, PyLong_SHIFT
|
||||
+from cpython.longintrepr cimport _PyLong_New, py_long, digit, PyLong_SHIFT
|
||||
from .mpz cimport *
|
||||
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 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/geometry/triangulation/point_configuration.py 2019-01-15 14:12:54.343637341 -0700
|
||||
@@ -625,7 +625,7 @@ class PointConfiguration(UniqueRepresent
|
||||
['{{0,1,2,4},{1,2,3,4}}']
|
||||
"""
|
||||
timeout = 600
|
||||
- proc = pexpect.spawn(executable, timeout=timeout)
|
||||
+ proc = pexpect.spawn(executable, timeout=timeout, encoding='utf-8')
|
||||
proc.expect(r'Evaluating Commandline Options \.\.\.')
|
||||
proc.expect(r'\.\.\. done\.')
|
||||
proc.setecho(0)
|
||||
diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py
|
||||
--- src/sage/interfaces/frobby.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/frobby.py 2019-01-15 14:09:39.587064736 -0700
|
||||
@@ -77,7 +77,7 @@ class Frobby:
|
||||
print("Frobby command: ", repr(command))
|
||||
print("Frobby input:\n", input)
|
||||
|
||||
cdef extern from *:
|
||||
@@ -54,7 +54,7 @@ cdef mpz_get_pylong_large(mpz_srcptr z):
|
||||
cdef size_t nbits = mpz_sizeinbase(z, 2)
|
||||
cdef size_t pylong_size = (nbits + PyLong_SHIFT - 1) // PyLong_SHIFT
|
||||
L = _PyLong_New(pylong_size)
|
||||
- mpz_export((<PyLongObject*>L).ob_digit, NULL,
|
||||
+ mpz_export(L.ob_digit, NULL,
|
||||
-1, sizeof(digit), 0, PyLong_nails, z)
|
||||
if mpz_sgn(z) < 0:
|
||||
# Set correct size (use a pointer to hack around Cython's
|
||||
@@ -91,7 +91,7 @@ cdef int mpz_set_pylong(mpz_ptr z, L) ex
|
||||
if pylong_size < 0:
|
||||
pylong_size = -pylong_size
|
||||
mpz_import(z, pylong_size, -1, sizeof(digit), 0, PyLong_nails,
|
||||
- (<PyLongObject*>L).ob_digit)
|
||||
+ (<py_long>L).ob_digit)
|
||||
if Py_SIZE(L) < 0:
|
||||
mpz_neg(z, z)
|
||||
- process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE)
|
||||
+ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, encoding='utf-8')
|
||||
output, err = process.communicate(input = input)
|
||||
|
||||
--- src/sage/misc/parser.pyx.orig 2018-10-17 17:13:54.000000000 -0600
|
||||
+++ src/sage/misc/parser.pyx 2018-10-25 13:57:47.183108335 -0600
|
||||
if verbose:
|
||||
diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py
|
||||
--- src/sage/interfaces/gfan.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/gfan.py 2019-01-17 16:15:45.185372585 -0700
|
||||
@@ -66,7 +66,7 @@ class Gfan(object):
|
||||
if six.PY2:
|
||||
enc_kwargs = {}
|
||||
else:
|
||||
- enc_kwargs = {'encoding': 'latin-1'}
|
||||
+ enc_kwargs = {'encoding': 'utf-8'}
|
||||
|
||||
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 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/gp.py 2019-01-15 15:32:12.479565952 -0700
|
||||
@@ -934,17 +934,6 @@ class GpElement(ExpectElement):
|
||||
"""
|
||||
return repr(self.type()) == 't_STR'
|
||||
|
||||
- def __long__(self):
|
||||
- """
|
||||
- Return Python long.
|
||||
-
|
||||
- EXAMPLES::
|
||||
-
|
||||
- sage: long(gp(10))
|
||||
- 10L
|
||||
- """
|
||||
- return long(str(self))
|
||||
-
|
||||
def __float__(self):
|
||||
"""
|
||||
Return Python float.
|
||||
diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
|
||||
--- src/sage/interfaces/latte.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/latte.py 2019-01-16 09:44:45.946769879 -0700
|
||||
@@ -147,6 +147,7 @@ def count(arg, ehrhart_polynomial=False,
|
||||
latte_proc = Popen(args,
|
||||
stdin=PIPE, stdout=PIPE,
|
||||
stderr=(None if verbose else PIPE),
|
||||
+ encoding='utf-8',
|
||||
cwd=str(SAGE_TMP))
|
||||
|
||||
ans, err = latte_proc.communicate(arg)
|
||||
@@ -352,6 +353,7 @@ def integrate(arg, polynomial=None, algo
|
||||
latte_proc = Popen(args,
|
||||
stdin=PIPE, stdout=PIPE,
|
||||
stderr=(None if verbose else PIPE),
|
||||
+ encoding='utf-8',
|
||||
cwd=str(SAGE_TMP))
|
||||
|
||||
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 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/sagespawn.pyx 2019-01-16 12:08:26.371966835 -0700
|
||||
@@ -1,6 +1,6 @@
|
||||
"""
|
||||
Sage wrapper around pexpect's ``spawn`` class and
|
||||
-the ptyprocess's ``PtyProcess`` class.
|
||||
+the ptyprocess's ``PtyProcessUnicode`` class.
|
||||
|
||||
AUTHOR:
|
||||
|
||||
@@ -21,7 +21,7 @@ AUTHOR:
|
||||
#*****************************************************************************
|
||||
|
||||
from pexpect import *
|
||||
-from ptyprocess import PtyProcess
|
||||
+from ptyprocess import PtyProcessUnicode
|
||||
|
||||
from cpython.ref cimport Py_INCREF
|
||||
from libc.signal cimport *
|
||||
@@ -30,7 +30,6 @@ from posix.unistd cimport getpid, getpgi
|
||||
|
||||
from time import sleep
|
||||
|
||||
-from sage.cpython.string cimport str_to_bytes
|
||||
from sage.interfaces.process cimport ContainChildren
|
||||
|
||||
|
||||
@@ -171,7 +170,7 @@ class SageSpawn(spawn):
|
||||
return ret
|
||||
|
||||
|
||||
-class SagePtyProcess(PtyProcess):
|
||||
+class SagePtyProcess(PtyProcessUnicode):
|
||||
def close(self, force=None):
|
||||
"""
|
||||
Quit the child process: send the quit string, close the
|
||||
@@ -192,11 +191,7 @@ class SagePtyProcess(PtyProcess):
|
||||
if self.quit_string is not None:
|
||||
try:
|
||||
# This can fail if the process already exited
|
||||
- # PtyProcess.write takes bytes; ideally we would use
|
||||
- # an encoding picked specifically for the target process
|
||||
- # but the default (UTF-8) will do now, since I don't
|
||||
- # think we have any non-ASCII quit_strings anyways.
|
||||
- self.write(str_to_bytes(self.quit_string))
|
||||
+ self.write(self.quit_string)
|
||||
except (OSError, IOError):
|
||||
pass
|
||||
self.fileobj.close()
|
||||
diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx
|
||||
--- src/sage/misc/parser.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/misc/parser.pyx 2019-01-04 10:57:51.277367597 -0700
|
||||
@@ -96,7 +96,7 @@ def token_to_str(int token):
|
||||
|
||||
|
||||
|
@ -943,20 +737,22 @@
|
|||
tokens.backtrack()
|
||||
return self.p_list(tokens)
|
||||
else:
|
||||
--- src/sage/plot/plot3d/plot3d.py.orig 2018-10-17 17:14:08.000000000 -0600
|
||||
+++ src/sage/plot/plot3d/plot3d.py 2018-10-25 13:58:48.502933505 -0600
|
||||
@@ -194,7 +194,8 @@ class _Coordinates(object):
|
||||
diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py
|
||||
--- src/sage/plot/plot3d/plot3d.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/plot/plot3d/plot3d.py 2019-01-04 10:58:51.476233419 -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)
|
||||
"""
|
||||
import inspect
|
||||
- all_vars = getargspec(self.transform).args[1:]
|
||||
- all_vars = sage_getargspec(self.transform).args[1:]
|
||||
+ args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = inspect.getfullargspec(self.transform)
|
||||
+ all_vars=args[1:]
|
||||
if set(all_vars) != set(indep_vars + [dep_var]):
|
||||
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
|
||||
--- src/sage/plot/point.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/plot/point.py 2018-10-25 13:59:15.278857161 -0600
|
||||
diff -up src/sage/plot/point.py.orig src/sage/plot/point.py
|
||||
--- src/sage/plot/point.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/plot/point.py 2019-01-04 10:59:15.506780663 -0700
|
||||
@@ -29,7 +29,7 @@ TESTS::
|
||||
from sage.misc.decorators import options, rename_keyword
|
||||
from sage.plot.colors import to_mpl_color
|
||||
|
@ -975,8 +771,9 @@
|
|||
points = list(points)
|
||||
|
||||
try:
|
||||
--- src/sage/repl/display/fancy_repr.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/repl/display/fancy_repr.py 2018-10-25 14:00:10.301700282 -0600
|
||||
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 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/repl/display/fancy_repr.py 2019-01-04 11:00:18.210599287 -0700
|
||||
@@ -15,7 +15,7 @@ Representations of objects.
|
||||
import types
|
||||
|
||||
|
@ -995,20 +792,23 @@
|
|||
p.text(klass_repr(obj))
|
||||
else:
|
||||
# A user-provided repr. Find newlines and replace them with p.break_()
|
||||
--- src/sage/repl/ipython_kernel/interact.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/repl/ipython_kernel/interact.py 2018-10-25 14:00:53.038578439 -0600
|
||||
@@ -36,7 +36,7 @@ EXAMPLES::
|
||||
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 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/repl/ipython_kernel/interact.py 2019-01-04 11:01:50.722856305 -0700
|
||||
@@ -35,7 +35,8 @@ EXAMPLES::
|
||||
|
||||
from ipywidgets.widgets import SelectionSlider, ValueWidget, ToggleButtons
|
||||
from ipywidgets.widgets.interaction import interactive, signature
|
||||
from copy import copy
|
||||
-from collections import Iterable, Iterator
|
||||
-from collections import Iterable, Iterator, OrderedDict
|
||||
+from collections.abc import Iterable, Iterator
|
||||
+from collections import OrderedDict
|
||||
from .widgets import EvalText, SageColorPicker
|
||||
from sage.structure.element import parent
|
||||
from sage.symbolic.ring import SR
|
||||
--- src/sage/rings/integer.pyx.orig 2018-10-17 17:14:11.000000000 -0600
|
||||
+++ src/sage/rings/integer.pyx 2018-10-25 14:01:31.320469294 -0600
|
||||
@@ -6940,7 +6940,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
|
||||
diff -up src/sage/rings/integer.pyx.orig
|
||||
--- src/sage/rings/integer.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/rings/integer.pyx 2019-01-04 11:02:56.122624135 -0700
|
||||
@@ -6976,7 +6976,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
|
||||
while x[0] == c' ': x += 1 # Strip spaces
|
||||
|
||||
# Disallow a sign here
|
||||
|
@ -1017,8 +817,22 @@
|
|||
x = "" # Force an error below
|
||||
|
||||
assert base >= 2
|
||||
--- src/sage/rings/real_mpfi.pyx.orig 2018-10-17 17:14:17.000000000 -0600
|
||||
+++ src/sage/rings/real_mpfi.pyx 2018-10-25 14:02:07.823365223 -0600
|
||||
diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbori.pyx
|
||||
--- src/sage/rings/polynomial/pbori.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/polynomial/pbori.pyx 2019-01-04 12:21:06.204500703 -0700
|
||||
@@ -4782,8 +4782,7 @@ cdef class PolynomialConstruct:
|
||||
# So, it is just a conversion. [Simon King]
|
||||
return (<BooleanPolynomialRing>ring)._element_constructor_(x)
|
||||
|
||||
- raise TypeError("Cannot generate Boolean polynomial from %s , %s%" %
|
||||
- (type(x), type(ring)))
|
||||
+ raise TypeError(f"Cannot generate Boolean polynomial from {type(x)}, {type(ring)}")
|
||||
|
||||
|
||||
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 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/real_mpfi.pyx 2019-01-04 11:03:53.650540277 -0700
|
||||
@@ -1951,12 +1951,12 @@ cdef class RealIntervalFieldElement(Ring
|
||||
|
||||
cdef long digits
|
||||
|
@ -1043,8 +857,33 @@
|
|||
digits -= 1
|
||||
mant_string = bytes_to_str(tmp_cstr+1)
|
||||
sign_string = bytes_to_str(b'-')
|
||||
--- src/sage/symbolic/expression.pyx.orig 2018-10-17 17:14:17.000000000 -0600
|
||||
+++ src/sage/symbolic/expression.pyx 2018-10-25 14:03:50.129073537 -0600
|
||||
diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx
|
||||
--- src/sage/rings/real_mpfr.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/real_mpfr.pyx 2019-01-04 12:22:18.194171036 -0700
|
||||
@@ -2032,7 +2032,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)
|
||||
- if s[0] == '-':
|
||||
+ if s[0] == c'-':
|
||||
sgn = "-"
|
||||
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 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/structure/sage_object.pyx 2019-01-04 13:48:09.055790438 -0700
|
||||
@@ -665,7 +665,7 @@ cdef class SageObject:
|
||||
try:
|
||||
s = self._interface_init_(I)
|
||||
except Exception:
|
||||
- raise NotImplementedError("coercion of object %s to %s not implemented:\n%s\n%s" % (repr(self), I))
|
||||
+ raise NotImplementedError(f"coercion of object {repr(self)} to {I} not implemented")
|
||||
X = I(s)
|
||||
if c:
|
||||
try:
|
||||
diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
|
||||
--- src/sage/symbolic/expression.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/symbolic/expression.pyx 2019-01-04 11:04:35.829745704 -0700
|
||||
@@ -12955,7 +12955,7 @@ cdef class hold_class:
|
||||
sage: SR(2)^5
|
||||
32
|
||||
|
@ -1063,12 +902,14 @@
|
|||
|
||||
def start(self):
|
||||
"""
|
||||
--- src/setup.py.orig 2018-10-25 11:40:44.402943434 -0600
|
||||
+++ src/setup.py 2018-10-25 14:04:15.582000968 -0600
|
||||
@@ -284,6 +284,7 @@ class sage_build_cython(Command):
|
||||
diff -up src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2019-01-04 10:27:47.032123257 -0700
|
||||
+++ src/setup.py 2019-01-04 11:05:11.337077724 -0700
|
||||
@@ -284,7 +284,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,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py
|
||||
--- src/sage/interfaces/qepcad.py.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/interfaces/qepcad.py 2018-08-29 10:43:25.856903772 -0600
|
||||
--- src/sage/interfaces/qepcad.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/qepcad.py 2019-01-16 09:46:44.714638633 -0700
|
||||
@@ -530,7 +530,7 @@ TESTS:
|
||||
|
||||
Check the qepcad configuration file::
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/all.py.orig src/sage/all.py
|
||||
--- src/sage/all.py.orig 2018-08-03 05:10:08.000000000 -0600
|
||||
+++ src/sage/all.py 2018-08-29 08:45:06.117831555 -0600
|
||||
--- src/sage/all.py.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/sage/all.py 2019-01-16 09:43:07.639533969 -0700
|
||||
@@ -284,11 +284,11 @@ def _write_started_file():
|
||||
|
||||
Check that the file exists when Sage is running::
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
diff -up src/module_list.py.orig src/module_list.py
|
||||
--- src/module_list.py.orig 2018-08-29 08:34:50.846439644 -0600
|
||||
+++ src/module_list.py 2018-08-29 08:35:19.927079956 -0600
|
||||
@@ -3,7 +3,7 @@ from glob import glob
|
||||
--- src/module_list.py.orig 2019-01-16 09:42:29.021226961 -0700
|
||||
+++ src/module_list.py 2019-01-16 09:42:41.397004883 -0700
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
from distutils.extension import Extension
|
||||
from sage.env import SAGE_LOCAL
|
||||
|
||||
|
@ -11,9 +11,9 @@ diff -up src/module_list.py.orig src/module_list.py
|
|||
#########################################################
|
||||
### pkg-config setup
|
||||
diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py
|
||||
--- src/sage/misc/cython.py.orig 2018-08-03 05:10:09.000000000 -0600
|
||||
+++ src/sage/misc/cython.py 2018-08-29 08:35:19.954079622 -0600
|
||||
@@ -601,7 +601,7 @@ def cython(filename, verbose=0, compile_
|
||||
--- src/sage/misc/cython.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/misc/cython.py 2019-01-04 10:27:47.031123276 -0700
|
||||
@@ -600,7 +600,7 @@ def cython(filename, verbose=0, compile_
|
||||
ext = Extension(name,
|
||||
sources=[pyxfile] + extra_sources,
|
||||
libraries=libs,
|
||||
|
@ -23,9 +23,9 @@ diff -up src/sage/misc/cython.py.orig src/sage/misc/cython.py
|
|||
language=language)
|
||||
|
||||
diff -up src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2018-08-03 05:10:09.000000000 -0600
|
||||
+++ src/setup.py 2018-08-29 08:35:19.955079610 -0600
|
||||
@@ -370,9 +370,8 @@ class sage_build_cython(Command):
|
||||
--- src/setup.py.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/setup.py 2019-01-04 10:27:47.032123257 -0700
|
||||
@@ -371,9 +371,8 @@ class sage_build_cython(Command):
|
||||
# Debugging
|
||||
gdb_debug=self.debug,
|
||||
output_dir=os.path.join(self.build_lib, "sage"),
|
||||
|
@ -37,7 +37,7 @@ diff -up src/setup.py.orig src/setup.py
|
|||
)
|
||||
|
||||
# Filter out extensions with skip_build=True
|
||||
@@ -881,9 +880,6 @@ class sage_install(install):
|
||||
@@ -882,9 +881,6 @@ class sage_install(install):
|
||||
install.run(self)
|
||||
self.install_kernel_spec()
|
||||
log.info('Cleaning up stale installed files....')
|
||||
|
@ -47,7 +47,7 @@ diff -up src/setup.py.orig src/setup.py
|
|||
|
||||
def install_kernel_spec(self):
|
||||
"""
|
||||
@@ -900,40 +896,6 @@ class sage_install(install):
|
||||
@@ -901,40 +897,6 @@ class sage_install(install):
|
||||
# the install_data directory for installing our Jupyter files.
|
||||
SageKernelSpec.update(prefix=self.install_data)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py
|
||||
--- src/sage/doctest/control.py.orig 2018-10-17 17:13:36.000000000 -0600
|
||||
+++ src/sage/doctest/control.py 2018-10-25 11:40:58.936908341 -0600
|
||||
--- src/sage/doctest/control.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/doctest/control.py 2019-01-16 09:42:51.238828275 -0700
|
||||
@@ -106,7 +106,6 @@ class DocTestDefaults(SageObject):
|
||||
self.valgrind = False
|
||||
self.massif = False
|
||||
|
@ -9,7 +9,7 @@ diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py
|
|||
self.failed = False
|
||||
self.new = False
|
||||
self.show_skipped = False
|
||||
@@ -308,7 +307,7 @@ class DocTestController(SageObject):
|
||||
@@ -309,7 +308,7 @@ class DocTestController(SageObject):
|
||||
if options.gdb or options.debug:
|
||||
# Interactive debuggers: "infinite" timeout
|
||||
options.timeout = 0
|
||||
|
@ -18,7 +18,7 @@ diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py
|
|||
# Non-interactive debuggers: 48 hours
|
||||
options.timeout = int(os.getenv('SAGE_TIMEOUT_VALGRIND', 48 * 60 * 60))
|
||||
elif options.long:
|
||||
@@ -1094,13 +1093,8 @@ class DocTestController(SageObject):
|
||||
@@ -1099,13 +1098,8 @@ class DocTestController(SageObject):
|
||||
elif opt.cachegrind:
|
||||
toolname = "cachegrind"
|
||||
flags = os.getenv("SAGE_CACHEGRIND_FLAGS", "")
|
||||
|
@ -32,7 +32,7 @@ diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py
|
|||
if "%s" in flags:
|
||||
flags %= toolname + ".%p" # replace %s with toolname
|
||||
cmd += flags + sage_cmd
|
||||
@@ -1185,10 +1179,10 @@ class DocTestController(SageObject):
|
||||
@@ -1190,10 +1184,10 @@ class DocTestController(SageObject):
|
||||
|
||||
"""
|
||||
opt = self.options
|
||||
|
@ -46,8 +46,8 @@ diff -up src/sage/doctest/control.py.orig src/sage/doctest/control.py
|
|||
return self.run_val_gdb()
|
||||
else:
|
||||
diff -up src/sage/interfaces/singular.py.orig src/sage/interfaces/singular.py
|
||||
--- src/sage/interfaces/singular.py.orig 2018-10-25 11:40:58.937908339 -0600
|
||||
+++ src/sage/interfaces/singular.py 2018-10-25 13:11:10.256190334 -0600
|
||||
--- src/sage/interfaces/singular.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/singular.py 2019-01-16 09:42:51.240828239 -0700
|
||||
@@ -2264,7 +2264,7 @@ def generate_docstring_dictionary():
|
||||
node_names.clear()
|
||||
|
||||
|
@ -70,8 +70,8 @@ diff -up src/sage/interfaces/singular.py.orig src/sage/interfaces/singular.py
|
|||
m = re.match(new_node,line)
|
||||
if m:
|
||||
diff -up src/sage_setup/docbuild/ext/multidocs.py.orig src/sage_setup/docbuild/ext/multidocs.py
|
||||
--- src/sage_setup/docbuild/ext/multidocs.py.orig 2018-10-17 17:14:18.000000000 -0600
|
||||
+++ src/sage_setup/docbuild/ext/multidocs.py 2018-10-25 11:40:58.937908339 -0600
|
||||
--- src/sage_setup/docbuild/ext/multidocs.py.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage_setup/docbuild/ext/multidocs.py 2019-01-16 09:42:51.241828221 -0700
|
||||
@@ -84,8 +84,11 @@ def merge_environment(app, env):
|
||||
for ind in newalldoc:
|
||||
# treat subdocument source as orphaned file and don't complain
|
||||
|
@ -87,8 +87,8 @@ diff -up src/sage_setup/docbuild/ext/multidocs.py.orig src/sage_setup/docbuild/e
|
|||
newcite = {}
|
||||
citations = docenv.domaindata["std"]["citations"]
|
||||
diff -up src/sage_setup/docbuild/__init__.py.orig src/sage_setup/docbuild/__init__.py
|
||||
--- src/sage_setup/docbuild/__init__.py.orig 2018-10-25 11:40:58.938908336 -0600
|
||||
+++ src/sage_setup/docbuild/__init__.py 2018-10-25 13:12:56.110881282 -0600
|
||||
--- src/sage_setup/docbuild/__init__.py.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage_setup/docbuild/__init__.py 2019-01-16 09:42:51.242828203 -0700
|
||||
@@ -279,13 +279,14 @@ def build_many(target, args):
|
||||
# map_async handles KeyboardInterrupt correctly. Plain map and
|
||||
# apply_async does not, so don't use it.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
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-01-24 04:17:47.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2018-08-29 08:44:38.823169061 -0600
|
||||
--- 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
|
||||
|
@ -8,7 +8,7 @@ diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sage
|
|||
-# Make flask use the old session foo from <=flask-0.9
|
||||
-from flask_oldsessions import OldSecureCookieSessionInterface
|
||||
|
||||
from flask.ext.autoindex import AutoIndex
|
||||
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):
|
||||
|
@ -40,9 +40,9 @@ diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sage
|
|||
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 2017-06-02 16:24:20.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/misc.py 2018-08-29 08:44:38.823169061 -0600
|
||||
@@ -184,7 +184,8 @@ def pad_zeros(s, size=3):
|
||||
--- 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]
|
||||
|
||||
|
@ -53,9 +53,9 @@ diff -up build/pkgs/sagenb/src/sagenb/misc/misc.py.orig build/pkgs/sagenb/src/sa
|
|||
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-01-24 04:17:38.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2018-08-29 08:44:38.823169061 -0600
|
||||
@@ -2384,8 +2384,8 @@ class Cell(Cell_generic):
|
||||
--- 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(
|
||||
|
@ -67,8 +67,8 @@ diff -up build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig build/pkgs/sagenb/sr
|
|||
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-05-22 10:16:28.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py 2018-08-29 08:44:38.824169048 -0600
|
||||
--- 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 #
|
||||
#########
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/bin/sage.orig src/bin/sage
|
||||
--- src/bin/sage.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/bin/sage 2018-10-24 15:19:11.805131334 -0600
|
||||
--- src/bin/sage.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/bin/sage 2019-01-16 09:42:10.064567132 -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"
|
||||
|
@ -618,9 +618,9 @@ diff -up src/bin/sage.orig src/bin/sage
|
|||
exec sage-startuptime.py "$@"
|
||||
fi
|
||||
diff -up src/bin/sage-runtests.orig src/bin/sage-runtests
|
||||
--- src/bin/sage-runtests.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/bin/sage-runtests 2018-10-24 15:19:11.805131334 -0600
|
||||
@@ -76,10 +76,6 @@ if __name__ == "__main__":
|
||||
--- src/bin/sage-runtests.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/bin/sage-runtests 2019-01-16 09:42:10.065567115 -0700
|
||||
@@ -79,10 +79,6 @@ if __name__ == "__main__":
|
||||
help="run doctests using Valgrind's cachegrind tool. The log "
|
||||
"files are named sage-cachegrind.PID and can be found in " +
|
||||
os.path.join(DOT_SAGE, "valgrind"))
|
||||
|
@ -632,8 +632,8 @@ diff -up src/bin/sage-runtests.orig src/bin/sage-runtests
|
|||
parser.add_option("-f", "--failed", action="store_true", default=False,
|
||||
help="doctest only those files that failed in the previous run")
|
||||
diff -up src/bin/sage-valgrind.orig src/bin/sage-valgrind
|
||||
--- src/bin/sage-valgrind.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/bin/sage-valgrind 2018-10-24 15:19:11.805131334 -0600
|
||||
--- src/bin/sage-valgrind.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/bin/sage-valgrind 2019-01-16 09:42:10.065567115 -0700
|
||||
@@ -1,16 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
|
|
146
sagemath-sigfpe.patch
Normal file
146
sagemath-sigfpe.patch
Normal file
|
@ -0,0 +1,146 @@
|
|||
diff -up src/sage/libs/ecl.pyx.orig src/sage/libs/ecl.pyx
|
||||
--- src/sage/libs/ecl.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/ecl.pyx 2019-01-17 10:00:52.554236288 -0700
|
||||
@@ -16,7 +16,7 @@ from __future__ import print_function, a
|
||||
#adapted to work with pure Python types.
|
||||
|
||||
from libc.stdlib cimport abort
|
||||
-from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD
|
||||
+from libc.signal cimport SIGINT, SIGBUS, SIGSEGV, SIGCHLD, SIGFPE
|
||||
from libc.signal cimport raise_ as signal_raise
|
||||
from posix.signal cimport sigaction, sigaction_t
|
||||
cimport cysignals.signals
|
||||
@@ -48,9 +48,14 @@ cdef extern from "eclsig.h":
|
||||
void ecl_sig_off()
|
||||
cdef sigaction_t ecl_sigint_handler
|
||||
cdef sigaction_t ecl_sigbus_handler
|
||||
+ cdef sigaction_t ecl_sigfpe_handler
|
||||
cdef sigaction_t ecl_sigsegv_handler
|
||||
cdef mpz_t ecl_mpz_from_bignum(cl_object obj)
|
||||
cdef cl_object ecl_bignum_from_mpz(mpz_t num)
|
||||
+ cdef int fegetexcept()
|
||||
+ cdef int feenableexcept(int)
|
||||
+ cdef int fedisableexcept(int)
|
||||
+ cdef int ecl_feflags
|
||||
|
||||
cdef cl_object string_to_object(char * s):
|
||||
return ecl_read_from_cstring(s)
|
||||
@@ -239,6 +244,7 @@ def init_ecl():
|
||||
global ecl_has_booted
|
||||
cdef char *argv[1]
|
||||
cdef sigaction_t sage_action[32]
|
||||
+ cdef int sage_fpes
|
||||
cdef int i
|
||||
|
||||
if ecl_has_booted:
|
||||
@@ -258,6 +264,8 @@ def init_ecl():
|
||||
for i in range(1,32):
|
||||
sigaction(i, NULL, &sage_action[i])
|
||||
|
||||
+ sage_fpes = fegetexcept()
|
||||
+
|
||||
#initialize ECL
|
||||
ecl_set_option(ECL_OPT_SIGNAL_HANDLING_THREAD, 0)
|
||||
cl_boot(1, argv)
|
||||
@@ -265,8 +273,12 @@ def init_ecl():
|
||||
#save signal handler from ECL
|
||||
sigaction(SIGINT, NULL, &ecl_sigint_handler)
|
||||
sigaction(SIGBUS, NULL, &ecl_sigbus_handler)
|
||||
+ sigaction(SIGFPE, NULL, &ecl_sigfpe_handler)
|
||||
sigaction(SIGSEGV, NULL, &ecl_sigsegv_handler)
|
||||
|
||||
+ #save ECL's floating point exception flags
|
||||
+ ecl_feflags = fegetexcept()
|
||||
+
|
||||
#verify that no SIGCHLD handler was installed
|
||||
cdef sigaction_t sig_test
|
||||
sigaction(SIGCHLD, NULL, &sig_test)
|
||||
@@ -277,6 +289,9 @@ def init_ecl():
|
||||
for i in range(1,32):
|
||||
sigaction(i, &sage_action[i], NULL)
|
||||
|
||||
+ fedisableexcept(ecl_feflags)
|
||||
+ feenableexcept(sage_fpes)
|
||||
+
|
||||
#initialise list of objects and bind to global variable
|
||||
# *SAGE-LIST-OF-OBJECTS* to make it rooted in the reachable tree for the GC
|
||||
list_of_objects=cl_cons(Cnil,cl_cons(Cnil,Cnil))
|
||||
diff -up src/sage/libs/eclsig.h.orig src/sage/libs/eclsig.h
|
||||
--- src/sage/libs/eclsig.h.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/eclsig.h 2019-01-17 10:07:23.060570460 -0700
|
||||
@@ -9,25 +9,59 @@
|
||||
|
||||
|
||||
#include <signal.h>
|
||||
+
|
||||
+/* Rummage around to determine how ECL was configured */
|
||||
+#define ECL_AVOID_FPE_H /* Prevent some local includes */
|
||||
+#include <ecl/config-internal.h>
|
||||
+
|
||||
+#ifdef HAVE_FENV_H
|
||||
+#include <fenv.h>
|
||||
+#ifndef FE_ALL_EXCEPT
|
||||
+#define FE_ALL_EXCEPT FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID
|
||||
+#endif
|
||||
+#else
|
||||
+#ifndef FE_ALL_EXCEPT
|
||||
+#define FE_ALL_EXCEPT 0
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#ifndef HAVE_FEENABLEEXCEPT
|
||||
+/* These are GNU extensions */
|
||||
+#define fegetexcept() 0
|
||||
+#define feenablexcept(flags)
|
||||
+#define fdisableexcept(flags)
|
||||
+#endif
|
||||
+
|
||||
static struct sigaction ecl_sigint_handler;
|
||||
static struct sigaction ecl_sigbus_handler;
|
||||
+static struct sigaction ecl_sigfpe_handler;
|
||||
static struct sigaction ecl_sigsegv_handler;
|
||||
static struct sigaction sage_sigint_handler;
|
||||
static struct sigaction sage_sigbus_handler;
|
||||
+static struct sigaction sage_sigfpe_handler;
|
||||
static struct sigaction sage_sigsegv_handler;
|
||||
+static int ecl_feflags;
|
||||
+static int sage_feflags;
|
||||
|
||||
static inline void set_ecl_signal_handler(void)
|
||||
{
|
||||
sigaction(SIGINT, &ecl_sigint_handler, &sage_sigint_handler);
|
||||
sigaction(SIGBUS, &ecl_sigbus_handler, &sage_sigbus_handler);
|
||||
+ sigaction(SIGFPE, &ecl_sigfpe_handler, &sage_sigfpe_handler);
|
||||
sigaction(SIGSEGV, &ecl_sigsegv_handler, &sage_sigsegv_handler);
|
||||
+ /* sage_feflags should be 0; we don't set them otherwise */
|
||||
+ sage_feflags = fedisableexcept(FE_ALL_EXCEPT);
|
||||
+ feenableexcept(ecl_feflags);
|
||||
}
|
||||
|
||||
static inline void unset_ecl_signal_handler(void)
|
||||
{
|
||||
sigaction(SIGINT, &sage_sigint_handler, NULL);
|
||||
sigaction(SIGBUS, &sage_sigbus_handler, NULL);
|
||||
+ sigaction(SIGFPE, &sage_sigfpe_handler, NULL);
|
||||
sigaction(SIGSEGV, &sage_sigsegv_handler, NULL);
|
||||
+ ecl_feflags = fedisableexcept(FE_ALL_EXCEPT);
|
||||
+ feenableexcept(sage_feflags);
|
||||
}
|
||||
|
||||
/* This MUST be a macro because sig_on() must be in the same
|
||||
diff -up src/sage/libs/mpmath/ext_impl.pyx.orig src/sage/libs/mpmath/ext_impl.pyx
|
||||
--- src/sage/libs/mpmath/ext_impl.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/libs/mpmath/ext_impl.pyx 2019-01-17 09:53:24.350937873 -0700
|
||||
@@ -164,9 +164,9 @@ opts_double_precision.rounding = ROUND_N
|
||||
opts_mini_prec.prec = 5
|
||||
opts_mini_prec.rounding = ROUND_D
|
||||
|
||||
-cdef double _double_inf = float("1e300") * float("1e300")
|
||||
-cdef double _double_ninf = -_double_inf
|
||||
-cdef double _double_nan = _double_inf - _double_inf
|
||||
+cdef double _double_inf = float("inf")
|
||||
+cdef double _double_ninf = float("-inf")
|
||||
+cdef double _double_nan = float("nan")
|
||||
|
||||
cdef inline void MPF_init(MPF *x):
|
||||
"""Allocate space and set value to zero.
|
|
@ -1,6 +1,6 @@
|
|||
diff -up src/sage/env.py.orig src/sage/env.py
|
||||
--- src/sage/env.py.orig 2018-05-05 16:21:23.000000000 -0600
|
||||
+++ src/sage/env.py 2018-05-16 13:42:40.591238911 -0600
|
||||
--- src/sage/env.py.orig 2019-01-04 11:08:22.825475344 -0700
|
||||
+++ src/sage/env.py 2019-01-16 09:46:26.932957717 -0700
|
||||
@@ -117,7 +117,7 @@ _add_variable_or_fallback('HOSTNAME',
|
||||
_add_variable_or_fallback('LOCAL_IDENTIFIER','$HOSTNAME.%s'%os.getpid())
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
%global _python_bytecompile_extra 0
|
||||
|
||||
%bcond_with bundled_pexpect
|
||||
%bcond_with bundled_ipython
|
||||
%bcond_without bundled_ipython
|
||||
%bcond_without bundled_ipywidgets
|
||||
%bcond_without bundled_thebe
|
||||
%bcond_without bundled_threejs
|
||||
|
@ -45,6 +45,7 @@
|
|||
%global graphs_pkg graphs-20161026
|
||||
%if %{with bundled_ipython}
|
||||
%global ipython_pkg ipython-5.8.0
|
||||
%global prompt_tookit_pkg prompt_toolkit-1.0.15
|
||||
%endif
|
||||
%if %{with bundled_ipywidgets}
|
||||
%global ipywidgets_pkg ipywidgets-7.2.0
|
||||
|
@ -54,7 +55,7 @@
|
|||
%endif
|
||||
%global polytopes_db_pkg polytopes_db-20170220
|
||||
%global rubiks_pkg rubiks-20070912
|
||||
%global sagenb_pkg sagenb-1.0.3
|
||||
%global sagenb_pkg sagenb-1.1.1
|
||||
%global sagenb_export_pkg sagenb_export-3.2
|
||||
%global sagetex_pkg sagetex-3.0
|
||||
%global Sphinx_pkg Sphinx-1.7.6
|
||||
|
@ -72,7 +73,7 @@
|
|||
# Spkg equivalents of required rpms; we pretend they are installed as spkgs.
|
||||
# The version numbers shown are those of the latest released spkg, if the Fedora
|
||||
# version is not behind.
|
||||
%global SAGE_REQUIRED_PKGS 4ti2-1.6.7 cbc-2.9.4 CoCoALib-0.99564 cryptominisat-5.0.1 gap_packages-4.8.6new2 gmp-6.1.2 gmpy2-2.1.0a1 lrslib-062+autotools-2017-03-03 qepcad-B.1.71 saclib-2.2.7 sirocco-2.0 surf-1.0.6-gcc6
|
||||
%global SAGE_REQUIRED_PKGS 4ti2-1.6.7 cbc-2.9.4 CoCoALib-0.99564 cryptominisat-5.0.1 gap_packages-4.8.6new2.p0 gmp-6.1.2 gmpy2-2.1.0a4.p0 lrslib-062+autotools-2017-03-03 qepcad-B.1.71 saclib-2.2.7 sirocco-2.0 surf-1.0.6-gcc6
|
||||
|
||||
%global SAGE_ROOT %{_libdir}/sagemath
|
||||
%global SAGE_LOCAL %{SAGE_ROOT}/local
|
||||
|
@ -85,7 +86,7 @@
|
|||
|
||||
Name: sagemath
|
||||
Summary: A free open-source mathematics software system
|
||||
Version: 8.4
|
||||
Version: 8.5
|
||||
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
|
||||
|
@ -97,6 +98,12 @@ Source1: gprc.expect
|
|||
# Follow maxima's ExclusiveArch
|
||||
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
|
||||
|
||||
# Fix ecm interact() command
|
||||
Patch0: %{name}-ecm.patch
|
||||
|
||||
# Adapt a giac doctest to recent versions of giac
|
||||
Patch1: %{name}-giac.patch
|
||||
|
||||
# Set of patches to work with system wide packages
|
||||
Patch2: %{name}-scripts.patch
|
||||
|
||||
|
@ -148,7 +155,6 @@ Patch13: %{name}-nauty.patch
|
|||
# remove the buildroot path from Cython output
|
||||
Patch14: %{name}-buildroot.patch
|
||||
|
||||
# correct path to Lfunction include
|
||||
# update c++ standard to fix FTBFS
|
||||
Patch15: %{name}-lcalc.patch
|
||||
|
||||
|
@ -186,7 +192,11 @@ Patch25: %{name}-includes.patch
|
|||
# Use openblas
|
||||
Patch26: %{name}-openblas.patch
|
||||
|
||||
BuildRequires: gdb
|
||||
# Fix paths to latte-integrale binaries
|
||||
Patch27: %{name}-latte.patch
|
||||
|
||||
# Upstream fixes for random SIGFPEs due to ecl messing with the fp state
|
||||
Patch28: %{name}-sigfpe.patch
|
||||
|
||||
BuildRequires: 4ti2
|
||||
BuildRequires: arb-devel
|
||||
|
@ -217,6 +227,7 @@ BuildRequires: gap-pkg-toric
|
|||
BuildRequires: gc-devel
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gd-devel
|
||||
BuildRequires: gdb
|
||||
BuildRequires: gfan
|
||||
BuildRequires: giac-devel
|
||||
BuildRequires: glpk-devel
|
||||
|
@ -297,7 +308,6 @@ BuildRequires: python3dist(pexpect)
|
|||
%endif
|
||||
BuildRequires: python3dist(pickleshare)
|
||||
BuildRequires: python3dist(pip)
|
||||
BuildRequires: python3dist(prompt-toolkit)
|
||||
BuildRequires: python3dist(pkgconfig)
|
||||
BuildRequires: python3dist(psutil)
|
||||
BuildRequires: python3dist(ptyprocess)
|
||||
|
@ -398,7 +408,7 @@ Requires: python3dist(matplotlib)
|
|||
Requires: python3dist(networkx)
|
||||
Requires: python3dist(notebook)
|
||||
%if %{with bundled_ipython}
|
||||
Requires: python3dist(path)
|
||||
Requires: python3dist(path.py)
|
||||
%endif
|
||||
Requires: python3dist(pathlib2)
|
||||
%if %{without bundled_pexpect}
|
||||
|
@ -406,7 +416,6 @@ Requires: python3dist(pexpect)
|
|||
%endif
|
||||
Requires: python3dist(pickleshare)
|
||||
Requires: python3dist(pillow)
|
||||
Requires: python3dist(prompt-toolkit)
|
||||
Requires: python3dist(psutil)
|
||||
Requires: python3dist(ptyprocess)
|
||||
Requires: python3dist(pycryptosat)
|
||||
|
@ -422,7 +431,7 @@ Requires: python3dist(sphinx)
|
|||
Requires: python3dist(sympy)
|
||||
Requires: python3dist(twisted)
|
||||
%if %{with bundled_ipython}
|
||||
Requires: python3dist(zmq)
|
||||
Requires: python3dist(pyzmq)
|
||||
%endif
|
||||
Requires: python3dist(zodb3)
|
||||
Requires: qepcad-B
|
||||
|
@ -461,6 +470,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||
Obsoletes: %{name}-devel < 6.8-1
|
||||
%if %{with bundled_ipython}
|
||||
Provides: bundled(ipython) = %(cut -d- -f2- <<< %{ipython_pkg})
|
||||
Provides: bundled(prompt_toolkit) = %(cut -d- -f2- <<< %{prompt_tookit_pkg})
|
||||
%endif
|
||||
%if %{with bundled_ipywidgets}
|
||||
Provides: bundled(ipywidgets) = %(cut -d- -f2- <<< %{ipywidgets_pkg})
|
||||
|
@ -733,6 +743,11 @@ pushd build/pkgs/ipython
|
|||
tar zxf ../../../upstream/%{ipython_pkg}.tar.gz
|
||||
mv %{ipython_pkg} src
|
||||
popd
|
||||
|
||||
pushd build/pkgs/prompt_toolkit
|
||||
tar zxf ../../../upstream/%{prompt_tookit_pkg}.tar.gz
|
||||
mv %{prompt_tookit_pkg} src
|
||||
popd
|
||||
%endif
|
||||
|
||||
%if %{with bundled_ipywidgets}
|
||||
|
@ -823,6 +838,8 @@ pushd build/pkgs/widgetsnbextension
|
|||
popd
|
||||
%endif
|
||||
|
||||
%patch0
|
||||
%patch1
|
||||
%patch2
|
||||
%patch3
|
||||
%patch4
|
||||
|
@ -853,6 +870,8 @@ popd
|
|||
%patch24
|
||||
%patch25
|
||||
%patch26
|
||||
%patch27
|
||||
%patch28
|
||||
|
||||
sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \
|
||||
-e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \
|
||||
|
@ -888,6 +907,7 @@ grep -FrlZ '#!%{_bindir}/env python' | \
|
|||
xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{__python3},'
|
||||
grep -FrlZ '#!%{_bindir}/env sage-python23' | \
|
||||
xargs -0 sed -i 's,#!%{_bindir}/env sage-python23,#!%{__python3},'
|
||||
grep -FrlZ 'sage-python23' | xargs -0 sed -i 's,sage-python23,#!%{__python3},'
|
||||
grep -FrlZ '#!%{_bindir}/env' | \
|
||||
xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,'
|
||||
grep -rlZ '#!%{_bindir}/python$' | xargs -0 sed -i 's,#!%{_bindir}/python$,&3,'
|
||||
|
@ -956,6 +976,11 @@ pushd build/pkgs/ipython/src
|
|||
%__python3 setup.py build
|
||||
%__python3 setup.py install --root %{_builddir}
|
||||
popd
|
||||
|
||||
pushd build/pkgs/prompt_toolkit/src
|
||||
%__python3 setup.py build
|
||||
%__python3 setup.py install --root %{_builddir}
|
||||
popd
|
||||
%endif
|
||||
|
||||
%if %{with bundled_ipywidgets}
|
||||
|
@ -1065,8 +1090,8 @@ pushd src/ext
|
|||
if [ $COUNT -gt 0 ]; then
|
||||
cp -far $dir $SAGE_ETC
|
||||
fi
|
||||
cp -far pari $SAGE_ETC
|
||||
done
|
||||
cp -far pari $SAGE_ETC
|
||||
cp -fa %{SOURCE1} $SAGE_ETC
|
||||
popd
|
||||
|
||||
|
@ -1236,6 +1261,7 @@ popd
|
|||
#------------------------------------------------------------------------
|
||||
%if %{with bundled_ipython}
|
||||
mv %{_builddir}%{python3_sitelib}/IPython %{buildroot}%{SAGE_PYTHONPATH}
|
||||
mv %{_builddir}%{python3_sitelib}/prompt_toolkit %{buildroot}%{SAGE_PYTHONPATH}
|
||||
mv %{_builddir}%{_bindir}/ip* %{buildroot}%{SAGE_LOCAL}/bin
|
||||
%endif
|
||||
|
||||
|
@ -1271,7 +1297,7 @@ popd
|
|||
cat > %{buildroot}%{_bindir}/sage << EOF
|
||||
#!/bin/bash -i
|
||||
|
||||
export CUR=\`pwd\`
|
||||
export CUR=\$PWD
|
||||
##export DOT_SAGE="\$HOME/.sage"
|
||||
mkdir -p \$DOT_SAGE/{maxima,sympow,tmp}
|
||||
export SAGE_TESTDIR=\$DOT_SAGE/tmp
|
||||
|
@ -1283,7 +1309,7 @@ export SAGE_ETC="$SAGE_ETC"
|
|||
export SAGE_SRC="%{buildroot}%{SAGE_SRC}"
|
||||
##export SAGE_DOC="$SAGE_DOC"
|
||||
##export SAGE_DOC_SRC="\$SAGE_DOC"
|
||||
##export SAGE_PKGS="\$SAGE_LOCAL//var/lib/sage/installed"
|
||||
##export SAGE_PKGS="\$SAGE_LOCAL/var/lib/sage/installed"
|
||||
module load 4ti2-%{_arch}
|
||||
module load lrcalc-%{_arch}
|
||||
module load surf-geometry-%{_arch}
|
||||
|
@ -1292,14 +1318,13 @@ export SINGULAR_DATA_DIR=%{_datadir}
|
|||
export SINGULAR_BIN_DIR=%{_libdir}/Singular
|
||||
export SINGULAR_SO=%{_libdir}/libSingular-4.1.1.so
|
||||
##export PYTHONPATH="$SAGE_PYTHONPATH:\$SAGE_LOCAL/bin"
|
||||
export SAGE_CBLAS=blas
|
||||
export SAGE_FORTRAN=%{_bindir}/gfortran
|
||||
export SAGE_FORTRAN_LIB=\`gfortran --print-file-name=libgfortran.so\`
|
||||
export SYMPOW_DIR="\$DOT_SAGE/sympow"
|
||||
export LC_ALL=C.UTF-8
|
||||
export LD_LIBRARY_PATH=\$SAGE_ROOT/lib:\$LD_LIBRARY_PATH
|
||||
# Required for sage -gdb
|
||||
export SAGE_DEBUG=no
|
||||
: \${SAGE_DEBUG:=no}
|
||||
export SAGE_DEBUG
|
||||
$SAGE_LOCAL/bin/sage "\$@"
|
||||
EOF
|
||||
#------------------------------------------------------------------------
|
||||
|
@ -1357,7 +1382,7 @@ pushd src/doc
|
|||
export SAGE_DOC_SRC=$SAGE_DOC
|
||||
# python -m sage_setup.docbuild
|
||||
# Build with an X server running, required by some doc builders
|
||||
SAGE_NUM_THREADS=2 LANGUAGES="ca de en fr hu it ja pt ru tr" \
|
||||
SAGE_NUM_THREADS=2 \
|
||||
xvfb-run -a -n 1 %__python3 -m docbuild --no-pdf-links -k all html -j
|
||||
rm -f %{buildroot}%{SAGE_SRC}/doc
|
||||
ln -sf %{SAGE_DOC} %{buildroot}%{SAGE_SRC}/doc
|
||||
|
@ -1518,9 +1543,6 @@ chmod +x %{buildroot}%{SAGE_LOCAL}/bin/sage-list-packages
|
|||
# last install command
|
||||
rm -fr $DOT_SAGE
|
||||
|
||||
########################################################################
|
||||
%ldconfig_scriptlets core
|
||||
|
||||
########################################################################
|
||||
%files
|
||||
# GPLv2+
|
||||
|
@ -1573,6 +1595,7 @@ rm -fr $DOT_SAGE
|
|||
%endif
|
||||
%if %{with bundled_ipython}
|
||||
%{SAGE_PYTHONPATH}/IPython
|
||||
%{SAGE_PYTHONPATH}/prompt_toolkit
|
||||
%endif
|
||||
%if %{with bundled_ipywidgets}
|
||||
%{SAGE_PYTHONPATH}/ipywidgets
|
||||
|
@ -1793,6 +1816,17 @@ rm -fr $DOT_SAGE
|
|||
|
||||
########################################################################
|
||||
%changelog
|
||||
* Thu Jan 17 2019 Jerry James <loganjerry@gmail.com> - 8.5-1
|
||||
- Update to sagemath 8.5
|
||||
- Bundle ipython again; Fedora version is too far ahead. Also have to bundle
|
||||
prompt_toolkit since Fedora version is too far ahead of bundled ipython.
|
||||
- Drop LANGUAGES variable setting, now ignored by the sagemath build system
|
||||
- Drop unused SAGE_CBLAS variable from /usr/bin/sage
|
||||
- Do not force the C locale when launching sagemath
|
||||
- Allow the user to override SAGE_DEBUG in /usr/bin/sage
|
||||
- Add -ecm, -giac, and -latte patches to fix interactions with external tools
|
||||
- Add -sigfpe patch from upstream
|
||||
|
||||
* Thu Oct 25 2018 Jerry James <loganjerry@gmail.com> - 8.4-1
|
||||
- Update to sagemath 8.4
|
||||
- Build for python 3 instead of python 2 due to upcoming python 2 removal
|
||||
|
|
2
sources
2
sources
|
@ -1 +1 @@
|
|||
SHA512 (sage-8.4.tar.gz) = 500c5005420c226993b79e89b761a3c9fe57d5ff6d6d71abedaf347ab2fd16b2f5e3b2caa660c4a0d984ba07038f9b4ffce8eb7b6cb28d2448c62d5e18acd871
|
||||
SHA512 (sage-8.5.tar.gz) = ebe373c7be50dc1df96de8a26ce41455869d79159eb584570525bc8a886d95c2605985bdecfa3e5d0ca50248d6bef605e3b8006266eafb39c4fb351bdc3510f4
|
||||
|
|
Loading…
Add table
Reference in a new issue