diff --git a/sagemath-4ti2.patch b/sagemath-4ti2.patch index 1d07f24..38487a4 100644 --- a/sagemath-4ti2.patch +++ b/sagemath-4ti2.patch @@ -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 diff --git a/sagemath-arb.patch b/sagemath-arb.patch index 85d7c48..e99a302 100644 --- a/sagemath-arb.patch +++ b/sagemath-arb.patch @@ -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": diff --git a/sagemath-buildroot.patch b/sagemath-buildroot.patch index e4d28eb..4788307 100644 --- a/sagemath-buildroot.patch +++ b/sagemath-buildroot.patch @@ -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) diff --git a/sagemath-cbc.patch b/sagemath-cbc.patch index 709f238..196fa31 100644 --- a/sagemath-cbc.patch +++ b/sagemath-cbc.patch @@ -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 diff --git a/sagemath-cremona.patch b/sagemath-cremona.patch index 723f035..fa4baa4 100644 --- a/sagemath-cremona.patch +++ b/sagemath-cremona.patch @@ -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: diff --git a/sagemath-ecm.patch b/sagemath-ecm.patch new file mode 100644 index 0000000..a8e5034 --- /dev/null +++ b/sagemath-ecm.patch @@ -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 diff --git a/sagemath-escape.patch b/sagemath-escape.patch index 9c3a8e1..45a1292 100644 --- a/sagemath-escape.patch +++ b/sagemath-escape.patch @@ -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('(?{ +- x+1; +- x+2; +- } ++ (x)->[x+1,x+2] + sage: giac.g(5) + 7 + """ diff --git a/sagemath-includes.patch b/sagemath-includes.patch index 3201dde..11e9334 100644 --- a/sagemath-includes.patch +++ b/sagemath-includes.patch @@ -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 diff --git a/sagemath-jmol.patch b/sagemath-jmol.patch index 4a76bb1..fdb53b2 100644 --- a/sagemath-jmol.patch +++ b/sagemath-jmol.patch @@ -1,6 +1,6 @@ diff -up src/sage/interfaces/jmoldata.py.orig src/sage/interfaces/jmoldata.py ---- src/sage/interfaces/jmoldata.py.orig 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 diff --git a/sagemath-latte.patch b/sagemath-latte.patch new file mode 100644 index 0000000..ec7ee91 --- /dev/null +++ b/sagemath-latte.patch @@ -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 + diff --git a/sagemath-lcalc.patch b/sagemath-lcalc.patch index fb52eec..122c93c 100644 --- a/sagemath-lcalc.patch +++ b/sagemath-lcalc.patch @@ -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": -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', diff --git a/sagemath-libgap.patch b/sagemath-libgap.patch index 1e7cbf0..d744dda 100644 --- a/sagemath-libgap.patch +++ b/sagemath-libgap.patch @@ -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() diff --git a/sagemath-maxima.patch b/sagemath-maxima.patch index b74db06..29e77f6 100644 --- a/sagemath-maxima.patch +++ b/sagemath-maxima.patch @@ -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* "") @@ -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', diff --git a/sagemath-mpfr.patch b/sagemath-mpfr.patch index 4d59f01..c5b83c1 100644 --- a/sagemath-mpfr.patch +++ b/sagemath-mpfr.patch @@ -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() diff --git a/sagemath-nauty.patch b/sagemath-nauty.patch index 12a341b..6cb38b5 100644 --- a/sagemath-nauty.patch +++ b/sagemath-nauty.patch @@ -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'} diff --git a/sagemath-openblas.patch b/sagemath-openblas.patch index 5d625e8..7f20d28 100644 --- a/sagemath-openblas.patch +++ b/sagemath-openblas.patch @@ -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 diff --git a/sagemath-python3.patch b/sagemath-python3.patch index 500ebaa..1f8c4d7 100644 --- a/sagemath-python3.patch +++ b/sagemath-python3.patch @@ -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'

Title

\n\n

nSome text

\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. - - # 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("" % 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("" % 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
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("
") -- -+ - def start_pre(self, attrs): - r""" - Ignore tag
 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
' - 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): + # HTMLParser, and may never actually be visibly called here. + +diff -up build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py +--- build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig 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'(^|(?. @@ -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 = (x).ob_digit -+ cdef const digit* D = (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 = (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 * - - 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((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, -- (L).ob_digit) -+ (L).ob_digit) - if Py_SIZE(L) < 0: - mpz_neg(z, z) - ---- 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 +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) + +- 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) + + 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 (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, diff --git a/sagemath-qepcad.patch b/sagemath-qepcad.patch index c8c3695..c5b1a59 100644 --- a/sagemath-qepcad.patch +++ b/sagemath-qepcad.patch @@ -1,6 +1,6 @@ diff -up src/sage/interfaces/qepcad.py.orig src/sage/interfaces/qepcad.py ---- src/sage/interfaces/qepcad.py.orig 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:: diff --git a/sagemath-readonly.patch b/sagemath-readonly.patch index 9186879..9b30f80 100644 --- a/sagemath-readonly.patch +++ b/sagemath-readonly.patch @@ -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:: diff --git a/sagemath-rpmbuild.patch b/sagemath-rpmbuild.patch index d0c6002..ad50ca3 100644 --- a/sagemath-rpmbuild.patch +++ b/sagemath-rpmbuild.patch @@ -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) diff --git a/sagemath-sagedoc.patch b/sagemath-sagedoc.patch index 00a98c8..6e31698 100644 --- a/sagemath-sagedoc.patch +++ b/sagemath-sagedoc.patch @@ -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. diff --git a/sagemath-sagenb.patch b/sagemath-sagenb.patch index 1d2a5a5..24d25c1 100644 --- a/sagemath-sagenb.patch +++ b/sagemath-sagenb.patch @@ -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 # ######### diff --git a/sagemath-scripts.patch b/sagemath-scripts.patch index c5c91f0..312689a 100644 --- a/sagemath-scripts.patch +++ b/sagemath-scripts.patch @@ -1,6 +1,6 @@ diff -up src/bin/sage.orig src/bin/sage ---- src/bin/sage.orig 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 diff --git a/sagemath-sigfpe.patch b/sagemath-sigfpe.patch new file mode 100644 index 0000000..f69bd00 --- /dev/null +++ b/sagemath-sigfpe.patch @@ -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 ++ ++/* Rummage around to determine how ECL was configured */ ++#define ECL_AVOID_FPE_H /* Prevent some local includes */ ++#include ++ ++#ifdef HAVE_FENV_H ++#include ++#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. diff --git a/sagemath-sympy.patch b/sagemath-sympy.patch index 8f561cc..c939fac 100644 --- a/sagemath-sympy.patch +++ b/sagemath-sympy.patch @@ -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()) diff --git a/sagemath.spec b/sagemath.spec index a386d27..37f3bee 100644 --- a/sagemath.spec +++ b/sagemath.spec @@ -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 @@ -1519,9 +1544,6 @@ chmod +x %{buildroot}%{SAGE_LOCAL}/bin/sage-list-packages rm -fr $DOT_SAGE ######################################################################## -%ldconfig_scriptlets core - -######################################################################## %files # GPLv2+ %dir %{SAGE_ROOT} @@ -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 - 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 - 8.4-1 - Update to sagemath 8.4 - Build for python 3 instead of python 2 due to upcoming python 2 removal diff --git a/sources b/sources index f7792fd..ebeb72a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (sage-8.4.tar.gz) = 500c5005420c226993b79e89b761a3c9fe57d5ff6d6d71abedaf347ab2fd16b2f5e3b2caa660c4a0d984ba07038f9b4ffce8eb7b6cb28d2448c62d5e18acd871 +SHA512 (sage-8.5.tar.gz) = ebe373c7be50dc1df96de8a26ce41455869d79159eb584570525bc8a886d95c2605985bdecfa3e5d0ca50248d6bef605e3b8006266eafb39c4fb351bdc3510f4