Version 9.0 (bz 1756780, 1770880).

Also:
- Drop upstreamed -ecm and -primecount patches.
- Add -escape patch.
- The old notebook (sagenb) is no longer shipped, so drop the -sagenb
  and -sagenb-python3 patches, the -notebook subpackage, and some BRs.
- New -jupyter subpackage.
- Add suitesparse BR.
- Drop pathlib2 BR (bz 1797116).
This commit is contained in:
Jerry James 2020-02-28 09:38:49 -07:00
parent 65c5f9e579
commit 2fac775552
13 changed files with 3724 additions and 956 deletions

View file

@ -1,21 +0,0 @@
diff -up src/sage/interfaces/ecm.py.orig src/sage/interfaces/ecm.py
--- src/sage/interfaces/ecm.py.orig 2019-06-26 14:41:04.000000000 -0600
+++ src/sage/interfaces/ecm.py 2019-09-04 09:29:09.529723744 -0600
@@ -39,7 +39,7 @@ from __future__ import print_function
from six import iteritems, PY2
-import os
+import subprocess
import re
from sage.structure.sage_object import SageObject
@@ -256,7 +256,7 @@ class ECM(SageObject):
"""
print("Enter numbers to run ECM on them.")
print("Press control-C to exit.")
- os.system(self._cmd)
+ subprocess.call(self._cmd)
# Recommended settings from
# http://www.mersennewiki.org/index.php/Elliptic_Curve_Method

View file

@ -1,6 +1,6 @@
diff -up src/sage/env.py.orig src/sage/env.py
--- src/sage/env.py.orig 2019-10-03 16:59:18.202495553 -0300
+++ src/sage/env.py 2019-10-03 17:00:31.167931299 -0300
--- src/sage/env.py.orig 2020-02-27 16:09:10.913012356 -0700
+++ src/sage/env.py 2020-02-27 16:16:34.080052271 -0700
@@ -151,11 +151,11 @@ var('SAGE_DATE', version.date)
var('SAGE_VERSION_BANNER', version.banner)
@ -27,11 +27,15 @@ diff -up src/sage/env.py.orig src/sage/env.py
var('CONWAY_POLYNOMIALS_DATA_DIR', join(SAGE_SHARE, 'conway_polynomials'))
var('GRAPHS_DATA_DIR', join(SAGE_SHARE, 'graphs'))
var('ELLCURVE_DATA_DIR', join(SAGE_SHARE, 'ellcurves'))
@@ -181,11 +181,11 @@ var('CREMONA_MINI_DATA_DIR', joi
@@ -179,13 +179,13 @@ var('THEBE_DIR', joi
var('COMBINATORIAL_DESIGN_DATA_DIR', join(SAGE_SHARE, 'combinatorial_designs'))
var('CREMONA_MINI_DATA_DIR', join(SAGE_SHARE, 'cremona'))
var('CREMONA_LARGE_DATA_DIR', join(SAGE_SHARE, 'cremona'))
var('JMOL_DIR', join(SAGE_SHARE, 'jmol'))
var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol'))
-var('JMOL_DIR', join(SAGE_SHARE, 'jmol'))
-var('JSMOL_DIR', join(SAGE_SHARE, 'jsmol'))
-var('MATHJAX_DIR', join(SAGE_SHARE, 'mathjax'))
+var('JMOL_DIR', join('/usr', 'share', 'java', 'jmol'))
+var('JSMOL_DIR', join('/usr', 'share', 'javascript', 'jsmol'))
+var('MATHJAX_DIR', join('/usr', 'share', 'javascript', 'mathjax'))
var('MTXLIB', join(SAGE_SHARE, 'meataxe'))
var('THREEJS_DIR', join(SAGE_SHARE, 'threejs'))

3536
sagemath-escape.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,6 @@
--- src/module_list.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/module_list.py 2020-01-06 20:27:37.840293653 -0700
diff -up src/module_list.py.orig src/module_list.py
--- src/module_list.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/module_list.py 2020-02-25 13:38:22.980350735 -0700
@@ -389,16 +389,16 @@ ext_modules = [
Extension('sage.graphs.matchpoly',
sources = ['sage/graphs/matchpoly.pyx']),
@ -35,7 +36,7 @@
Extension('sage.graphs.spanning_tree',
sources = ['sage/graphs/spanning_tree.pyx']),
@@ -476,9 +475,9 @@ ext_modules = [
@@ -479,9 +478,9 @@ ext_modules = [
##
################################
@ -47,7 +48,7 @@
Extension('*', ['sage/interfaces/*.pyx']),
@@ -497,21 +496,19 @@ ext_modules = [
@@ -500,21 +499,19 @@ ext_modules = [
##
################################
@ -74,7 +75,7 @@
Extension('sage.libs.flint.flint',
sources = ["sage/libs/flint/flint.pyx"],
@@ -540,13 +537,14 @@ ext_modules = [
@@ -543,13 +540,14 @@ ext_modules = [
sources = ["sage/libs/homfly.pyx"],
libraries = ["homfly", "gc"]),
@ -92,7 +93,7 @@
Extension('sage.libs.lcalc.lcalc_Lfunction',
sources = ['sage/libs/lcalc/lcalc_Lfunction.pyx'],
@@ -563,10 +561,9 @@ ext_modules = [
@@ -566,10 +564,9 @@ ext_modules = [
Extension('sage.libs.lrcalc.lrcalc',
sources = ["sage/libs/lrcalc/lrcalc.pyx"]),
@ -105,7 +106,7 @@
Extension('*', ['sage/libs/pari/*.pyx']),
@@ -812,7 +809,8 @@ ext_modules = [
@@ -815,7 +812,8 @@ ext_modules = [
include_dirs = cblas_include_dirs),
Extension('sage.matrix.matrix_integer_sparse',
@ -115,7 +116,7 @@
Extension('sage.matrix.matrix_mod2_dense',
sources = ['sage/matrix/matrix_mod2_dense.pyx'],
@@ -831,20 +829,21 @@ ext_modules = [
@@ -834,20 +832,21 @@ ext_modules = [
Extension('sage.matrix.matrix_modn_dense_float',
sources = ['sage/matrix/matrix_modn_dense_float.pyx'],
language="c++",
@ -140,7 +141,7 @@
Extension('sage.matrix.matrix_mpolynomial_dense',
sources = ['sage/matrix/matrix_mpolynomial_dense.pyx']),
@@ -874,10 +873,9 @@ ext_modules = [
@@ -877,10 +876,9 @@ ext_modules = [
Extension('sage.matrix.matrix_window',
sources = ['sage/matrix/matrix_window.pyx']),
@ -153,7 +154,7 @@
Extension('sage.matrix.misc',
sources = ['sage/matrix/misc.pyx']),
@@ -1053,26 +1051,25 @@ ext_modules = [
@@ -1056,26 +1054,25 @@ ext_modules = [
Extension("sage.numerical.backends.interactivelp_backend",
["sage/numerical/backends/interactivelp_backend.pyx"]),

View file

@ -1,5 +1,6 @@
--- src/module_list.py.orig 2020-01-06 20:29:14.108070190 -0700
+++ src/module_list.py 2020-01-06 20:29:39.724010734 -0700
diff -up src/module_list.py.orig src/module_list.py
--- src/module_list.py.orig 2020-02-25 13:53:37.097039897 -0700
+++ src/module_list.py 2020-02-26 14:43:39.912744735 -0700
@@ -44,6 +44,9 @@ zlib_libs = zlib_pc['libraries']
zlib_library_dirs = zlib_pc['library_dirs']
zlib_include_dirs = zlib_pc['include_dirs']
@ -35,7 +36,7 @@
Extension('*', sources = ['sage/algebras/finite_dimensional_algebras/*.pyx']),
@@ -559,7 +571,8 @@ ext_modules = [
@@ -562,7 +574,8 @@ ext_modules = [
[])),
Extension('sage.libs.lrcalc.lrcalc',
@ -45,7 +46,7 @@
Extension("sage.libs.meataxe",
sources = ['sage/libs/meataxe.pyx'],
@@ -580,23 +593,28 @@ ext_modules = [
@@ -583,23 +596,28 @@ ext_modules = [
sources = ['sage/libs/readline.pyx'],
libraries = ['readline']),
@ -79,7 +80,7 @@
###################################
##
@@ -604,7 +622,8 @@ ext_modules = [
@@ -607,7 +625,8 @@ ext_modules = [
##
###################################
@ -89,7 +90,7 @@
###################################
##
@@ -776,7 +795,8 @@ ext_modules = [
@@ -779,7 +798,8 @@ ext_modules = [
Extension("sage.matrix.matrix_complex_ball_dense",
["sage/matrix/matrix_complex_ball_dense.pyx"],
@ -99,7 +100,7 @@
Extension('sage.matrix.matrix_complex_double_dense',
sources = ['sage/matrix/matrix_complex_double_dense.pyx']),
@@ -784,6 +804,7 @@ ext_modules = [
@@ -787,6 +807,7 @@ ext_modules = [
Extension('sage.matrix.matrix_cyclo_dense',
sources = ['sage/matrix/matrix_cyclo_dense.pyx'],
language = "c++",
@ -107,7 +108,7 @@
libraries=['ntl']),
Extension('sage.matrix.matrix_gap',
@@ -846,6 +867,7 @@ ext_modules = [
@@ -849,6 +870,7 @@ ext_modules = [
libraries = ['gomp']),
Extension('sage.matrix.matrix_mpolynomial_dense',
@ -115,7 +116,7 @@
sources = ['sage/matrix/matrix_mpolynomial_dense.pyx']),
Extension('sage.matrix.matrix_polynomial_dense',
@@ -1132,7 +1154,8 @@ ext_modules = [
@@ -1135,7 +1157,8 @@ ext_modules = [
language = 'c++'),
Extension("sage.rings.complex_arb",
@ -125,7 +126,7 @@
Extension('sage.rings.complex_double',
sources = ['sage/rings/complex_double.pyx'],
@@ -1208,7 +1231,8 @@ ext_modules = [
@@ -1211,7 +1234,8 @@ ext_modules = [
sources = ['sage/rings/real_interval_absolute.pyx']),
Extension("sage.rings.real_arb",
@ -135,7 +136,7 @@
Extension('sage.rings.real_lazy',
sources = ['sage/rings/real_lazy.pyx']),
@@ -1291,6 +1315,7 @@ ext_modules = [
@@ -1294,6 +1318,7 @@ ext_modules = [
Extension('sage.rings.number_field.number_field_element_quadratic',
sources = ['sage/rings/number_field/number_field_element_quadratic.pyx'],
@ -143,7 +144,7 @@
libraries=['ntl'],
language = 'c++'),
@@ -1430,12 +1455,15 @@ ext_modules = [
@@ -1433,12 +1458,15 @@ ext_modules = [
sources = ['sage/rings/polynomial/multi_polynomial.pyx']),
Extension('sage.rings.polynomial.multi_polynomial_ideal_libsingular',
@ -159,7 +160,7 @@
sources = ['sage/rings/polynomial/multi_polynomial_libsingular.pyx']),
Extension('sage.rings.polynomial.multi_polynomial_ring_base',
@@ -1448,7 +1476,8 @@ ext_modules = [
@@ -1451,7 +1479,8 @@ ext_modules = [
sources = ['sage/rings/polynomial/polydict.pyx']),
Extension('sage.rings.polynomial.polynomial_complex_arb',
@ -169,8 +170,9 @@
Extension('sage.rings.polynomial.polynomial_compiled',
sources = ['sage/rings/polynomial/polynomial_compiled.pyx']),
--- src/setup.py.orig 2020-01-06 20:29:10.564078418 -0700
+++ src/setup.py 2020-01-06 20:29:39.725010732 -0700
diff -up src/setup.py.orig src/setup.py
--- src/setup.py.orig 2020-02-26 15:43:14.065012133 -0700
+++ src/setup.py 2020-02-26 15:52:14.558846775 -0700
@@ -85,6 +85,7 @@ keep_going = False
# search for dependencies and add to gcc -I<path>

View file

@ -1,110 +0,0 @@
diff -up src/sage/interfaces/primecount.pyx.orig src/sage/interfaces/primecount.pyx
--- src/sage/interfaces/primecount.pyx.orig 2019-06-26 14:41:04.000000000 -0600
+++ src/sage/interfaces/primecount.pyx 2019-09-17 16:13:46.316032782 -0600
@@ -22,7 +22,7 @@ cdef inline int _do_sig(int64_t n):
"threshold for sig_on/sig_off"
return n >> 26
-cpdef int64_t prime_pi(int64_t n, method=None) except -1:
+cpdef int64_t prime_pi(int64_t n) except -1:
r"""
Return the number of prime numbers smaller or equal than ``n``.
@@ -30,76 +30,22 @@ cpdef int64_t prime_pi(int64_t n, method
- ``n`` - an integer
- - ``method`` - ``None`` or a string that determines the primecount
- function to be called
-
- - ``"deleglise_rivat"``
- - ``"legendre"``
- - ``"lehmer"``
- - ``"lmo"``
- - ``"meissel"``
- - ``"primesieve"``
-
EXAMPLES::
sage: from sage.interfaces.primecount import prime_pi # optional - primecount
sage: prime_pi(1000) == 168 # optional - primecount
True
- sage: prime_pi(1000, "deleglise_rivat") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "legendre") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "lehmer") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "lmo") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "meissel") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "primesieve") == 168 # optional - primecount
- True
- sage: prime_pi(1000, "youpi") # optional - primecount
- Traceback (most recent call last):
- ...
- ValueError: unknown method 'youpi'
"""
cdef int64_t ans
- if method is None:
- if _do_sig(n): sig_on()
- ans = primecount.pi(n)
- if _do_sig(n): sig_off()
- elif method == "deleglise_rivat":
- if _do_sig(n): sig_on()
- ans = primecount.pi_deleglise_rivat(n)
- if _do_sig(n): sig_off()
- elif method == "legendre":
- if _do_sig(n): sig_on()
- ans = primecount.pi_legendre(n)
- if _do_sig(n): sig_off()
- elif method == "lehmer":
- if _do_sig(n): sig_on()
- ans = primecount.pi_lehmer(n)
- if _do_sig(n): sig_off()
- elif method == "lmo":
- if _do_sig(n): sig_on()
- ans = primecount.pi_lmo(n)
- if _do_sig(n): sig_off()
- elif method == "meissel":
- if _do_sig(n): sig_on()
- ans = primecount.pi_meissel(n)
- if _do_sig(n): sig_off()
- elif method == "primesieve":
- if _do_sig(n): sig_on()
- ans = primecount.pi_primesieve(n)
- if _do_sig(n): sig_off()
- else:
- raise ValueError("unknown method {!r}".format(method))
-
+ if _do_sig(n): sig_on()
+ ans = primecount.pi(n)
+ if _do_sig(n): sig_off()
return ans
cpdef prime_pi_128(n):
r"""
- Return the number of prime number smaller than ``n``.
+ Return the number of prime numbers smaller than ``n``.
EXAMPLES::
diff -up src/sage/libs/primecount.pxd.orig src/sage/libs/primecount.pxd
--- src/sage/libs/primecount.pxd.orig 2019-06-26 14:41:05.000000000 -0600
+++ src/sage/libs/primecount.pxd 2019-09-17 16:11:06.678851358 -0600
@@ -9,13 +9,6 @@ cdef extern from "primecount.hpp" namesp
cppstring pi(const cppstring& x)
- int64_t pi_deleglise_rivat(int64_t x)
- int64_t pi_legendre(int64_t x)
- int64_t pi_lehmer(int64_t x)
- int64_t pi_lmo(int64_t x)
- int64_t pi_meissel(int64_t x)
- int64_t pi_primesieve(int64_t x)
-
int64_t nth_prime(int64_t n)
int64_t phi(int64_t x, int64_t a)

View file

@ -1,51 +1,6 @@
diff -up build/pkgs/sagenb/src/sagenb/misc/support.py.orig build/pkgs/sagenb/src/sagenb/misc/support.py
--- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2019-02-01 06:34:20.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2020-01-07 19:57:46.756664911 -0700
@@ -178,7 +178,7 @@ def completions(s, globs, format=False,
try:
if not '.' in s and not '(' in s:
v = [x for x in globs.keys() if x[:n] == s] + \
- [x for x in __builtins__.keys() if x[:n] == s]
+ [x for x in builtins.keys() if x[:n] == s]
else:
if not ')' in s:
i = s.rfind('.')
diff -up build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py
--- build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig 2019-02-01 05:37:36.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2020-01-07 19:57:46.757664910 -0700
@@ -25,7 +25,7 @@ This module contains three classes:
.. NOTE::
- This extension of htmllib.HTMLParser was partly inspired by Mark
+ This extension of html.parser.HTMLParser was partly inspired by Mark
Pilgrim's 'Dive Into Python' examples.
AUTHORS:
@@ -155,7 +155,7 @@ class genericHTMLProcessor(HTMLParser):
u'<h1 class="title">Title</h1>\n\n<p>nSome text</p>\n\n\n\n'
"""
- # self.feed() is a HTMLParser method and starts everything
+ # self.feed() is an HTMLParser method and starts everything
# off; Most of the functions here are extensions to
# HTMLParser, and may never actually be visibly called here.
diff -up build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py
--- build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig 2019-02-01 05:37:36.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py 2020-01-07 19:57:46.758664910 -0700
@@ -59,7 +59,7 @@ class Parser:
'parent': r'(?:%s)?' % re.escape(PARENT_PREFIX),
}
url_rule = r'%(url_guard)s(%(url)s)\:([^\s\<%(punct)s]|([%(punct)s][^\s\<%(punct)s]))+' % {
- 'url_guard': ur'(^|(?<!\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 2019-06-11 04:58:29.000000000 -0600
+++ build/pkgs/sagetex/src/extractsagecode.py 2020-01-07 19:57:46.759664909 -0700
--- build/pkgs/sagetex/src/extractsagecode.py.orig 2019-11-14 04:02:40.000000000 -0700
+++ build/pkgs/sagetex/src/extractsagecode.py 2020-02-25 13:42:46.674646884 -0700
@@ -45,7 +45,7 @@ See the SageTeX documentation for more d
try:
@ -56,8 +11,8 @@ diff -up build/pkgs/sagetex/src/extractsagecode.py.orig build/pkgs/sagetex/src/e
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 2019-06-11 04:58:29.000000000 -0600
+++ build/pkgs/sagetex/src/makestatic.py 2020-01-07 19:57:46.759664909 -0700
--- build/pkgs/sagetex/src/makestatic.py.orig 2019-11-14 04:02:40.000000000 -0700
+++ build/pkgs/sagetex/src/makestatic.py 2020-02-25 13:42:46.674646884 -0700
@@ -45,7 +45,7 @@ See the SageTeX documentation for more d
try:
@ -68,8 +23,8 @@ diff -up build/pkgs/sagetex/src/makestatic.py.orig build/pkgs/sagetex/src/makest
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 2019-06-11 04:58:29.000000000 -0600
+++ build/pkgs/sagetex/src/remote-sagetex.py 2020-01-07 19:57:46.760664908 -0700
--- build/pkgs/sagetex/src/remote-sagetex.py.orig 2019-11-14 04:02:40.000000000 -0700
+++ build/pkgs/sagetex/src/remote-sagetex.py 2020-02-25 13:42:46.674646884 -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/>.
@ -133,8 +88,8 @@ diff -up build/pkgs/sagetex/src/remote-sagetex.py.orig build/pkgs/sagetex/src/re
if not password:
from getpass import getpass
diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sagetexparse.py
--- build/pkgs/sagetex/src/sagetexparse.py.orig 2019-06-11 04:58:29.000000000 -0600
+++ build/pkgs/sagetex/src/sagetexparse.py 2020-01-07 19:57:46.760664908 -0700
--- build/pkgs/sagetex/src/sagetexparse.py.orig 2019-11-14 04:02:40.000000000 -0700
+++ build/pkgs/sagetex/src/sagetexparse.py 2020-02-25 13:42:46.674646884 -0700
@@ -132,7 +132,7 @@ class SageCodeExtractor():
def plotout(self, s, l, t):
@ -145,8 +100,8 @@ diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sage
self.result += t.code[1:-1] + '\n\n'
diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite_state_machine.py
--- src/sage/combinat/finite_state_machine.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/combinat/finite_state_machine.py 2020-01-07 19:57:46.766664904 -0700
--- src/sage/combinat/finite_state_machine.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/combinat/finite_state_machine.py 2020-02-25 13:42:46.676646848 -0700
@@ -936,7 +936,7 @@ from six.moves import range, zip_longest
from six import itervalues
@ -156,7 +111,7 @@ diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite
import itertools
from copy import copy, deepcopy
@@ -14166,7 +14166,7 @@ def is_FSMProcessIterator(PI):
@@ -14161,7 +14161,7 @@ def is_FSMProcessIterator(PI):
class FSMProcessIterator(SageObject,
@ -165,21 +120,9 @@ diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite
"""
This class takes an input, feeds it into a finite state machine
(automaton or transducer, in particular), tests whether this was
diff -up src/sage/combinat/multiset_partition_into_sets_ordered.py.orig src/sage/combinat/multiset_partition_into_sets_ordered.py
--- src/sage/combinat/multiset_partition_into_sets_ordered.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/combinat/multiset_partition_into_sets_ordered.py 2020-01-07 19:57:46.768664902 -0700
@@ -1952,7 +1952,7 @@ class OrderedMultisetPartitionsIntoSets(
# slice by 'order'
if "alphabet" in fc:
- no_alpha = {k: v for (k, v) in iteritems(self.constraints) if k is not "alphabet"}
+ no_alpha = {k: v for (k, v) in iteritems(self.constraints) if k != "alphabet"}
return OrderedMultisetPartitionsIntoSets(fc["alphabet"], size, **no_alpha)
# slice by 'size'
diff -up src/sage/combinat/root_system/branching_rules.py.orig src/sage/combinat/root_system/branching_rules.py
--- src/sage/combinat/root_system/branching_rules.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/combinat/root_system/branching_rules.py 2020-01-07 19:57:46.769664902 -0700
--- src/sage/combinat/root_system/branching_rules.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/combinat/root_system/branching_rules.py 2020-02-25 13:42:46.678646812 -0700
@@ -1750,7 +1750,7 @@ def branching_rule(Rtype, Stype, rule="d
elif rule == "tensor" or rule == "tensor-debug":
if not Stype.is_compound():
@ -190,9 +133,9 @@ diff -up src/sage/combinat/root_system/branching_rules.py.orig src/sage/combinat
if Rtype[0] == 'A':
nr = Rtype[1]+1
diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/geometry/triangulation/point_configuration.py
--- src/sage/geometry/triangulation/point_configuration.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/geometry/triangulation/point_configuration.py 2020-01-07 19:57:46.770664901 -0700
@@ -619,7 +619,7 @@ class PointConfiguration(UniqueRepresent
--- src/sage/geometry/triangulation/point_configuration.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/geometry/triangulation/point_configuration.py 2020-02-26 14:41:58.109624057 -0700
@@ -619,11 +619,11 @@ class PointConfiguration(UniqueRepresent
['{{0,1,2,4},{1,2,3,4}}']
"""
timeout = 600
@ -201,9 +144,14 @@ diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/ge
proc.expect(r'Evaluating Commandline Options \.\.\.')
proc.expect(r'\.\.\. done\.')
proc.setecho(0)
- assert proc.readline().strip() == b''
+ assert proc.readline().strip() == ''
if verbose:
print("#### TOPCOM input ####")
diff -up src/sage/graphs/graph_latex.py.orig src/sage/graphs/graph_latex.py
--- src/sage/graphs/graph_latex.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/graphs/graph_latex.py 2020-01-07 19:59:40.240580166 -0700
--- src/sage/graphs/graph_latex.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/graphs/graph_latex.py 2020-02-25 13:42:46.679646794 -0700
@@ -1156,7 +1156,7 @@ class GraphLatex(SageObject):
#
elif name in color_dicts:
@ -263,20 +211,20 @@ diff -up src/sage/graphs/graph_latex.py.orig src/sage/graphs/graph_latex.py
for key, p in value.items():
if not((isinstance(p, tuple)) and (len(p) == 2) and (p[0] >= 0) and (p[1] in compass_points)):
diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py
--- src/sage/interfaces/frobby.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/interfaces/frobby.py 2020-01-07 19:57:46.771664900 -0700
@@ -77,7 +77,7 @@ class Frobby:
--- src/sage/interfaces/frobby.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/interfaces/frobby.py 2020-02-26 14:41:07.262562710 -0700
@@ -79,7 +79,7 @@ class Frobby:
print("Frobby command: ", repr(command))
print("Frobby input:\n", input)
- process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE)
+ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, enconding='utf-8')
output, err = process.communicate(input = input)
if verbose:
+ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, encoding='utf-8')
if input:
frinput = str_to_bytes(input)
else:
diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py
--- src/sage/interfaces/gfan.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/interfaces/gfan.py 2020-01-07 19:57:46.772664899 -0700
--- src/sage/interfaces/gfan.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/interfaces/gfan.py 2020-02-25 13:42:46.679646794 -0700
@@ -66,7 +66,7 @@ class Gfan(object):
if six.PY2:
enc_kwargs = {}
@ -287,8 +235,8 @@ diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py
gfan_processes = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE,
**enc_kwargs)
diff -up src/sage/interfaces/gp.py.orig src/sage/interfaces/gp.py
--- src/sage/interfaces/gp.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/interfaces/gp.py 2020-01-07 19:57:46.773664899 -0700
--- src/sage/interfaces/gp.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/interfaces/gp.py 2020-02-25 13:42:46.680646776 -0700
@@ -934,17 +934,6 @@ class GpElement(ExpectElement):
"""
return repr(self.type()) == 't_STR'
@ -308,8 +256,8 @@ diff -up src/sage/interfaces/gp.py.orig src/sage/interfaces/gp.py
"""
Return Python float.
diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
--- src/sage/interfaces/latte.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/interfaces/latte.py 2020-01-07 19:57:46.773664899 -0700
--- src/sage/interfaces/latte.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/interfaces/latte.py 2020-02-25 13:42:46.680646776 -0700
@@ -152,6 +152,7 @@ def count(arg, ehrhart_polynomial=False,
latte_proc = Popen(args,
stdin=PIPE, stdout=PIPE,
@ -327,8 +275,8 @@ diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
ans, err = latte_proc.communicate(arg)
diff -up src/sage/interfaces/sagespawn.pyx.orig src/sage/interfaces/sagespawn.pyx
--- src/sage/interfaces/sagespawn.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/interfaces/sagespawn.pyx 2020-01-07 19:57:46.774664898 -0700
--- src/sage/interfaces/sagespawn.pyx.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/interfaces/sagespawn.pyx 2020-02-25 13:42:46.680646776 -0700
@@ -1,6 +1,6 @@
"""
Sage wrapper around pexpect's ``spawn`` class and
@ -377,8 +325,8 @@ diff -up src/sage/interfaces/sagespawn.pyx.orig src/sage/interfaces/sagespawn.py
pass
self.fileobj.close()
diff -up src/sage/libs/coxeter3/coxeter.pyx.orig src/sage/libs/coxeter3/coxeter.pyx
--- src/sage/libs/coxeter3/coxeter.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/libs/coxeter3/coxeter.pyx 2020-01-07 19:57:46.776664896 -0700
--- src/sage/libs/coxeter3/coxeter.pyx.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/libs/coxeter3/coxeter.pyx 2020-02-25 13:42:46.680646776 -0700
@@ -33,7 +33,7 @@ cdef class String:
EXAMPLES::
@ -512,9 +460,9 @@ diff -up src/sage/libs/coxeter3/coxeter.pyx.orig src/sage/libs/coxeter3/coxeter.
if rank == 0:
raise NotImplementedError("Coxeter group of type ['A',0] using Coxeter 3 not yet implemented")
diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx
--- src/sage/misc/parser.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/misc/parser.pyx 2020-01-07 19:57:46.777664896 -0700
@@ -96,7 +96,7 @@ def token_to_str(int token):
--- src/sage/misc/parser.pyx.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/misc/parser.pyx 2020-02-25 13:42:46.681646759 -0700
@@ -95,7 +95,7 @@ def token_to_str(int token):
cdef inline bint is_alphanumeric(char c):
@ -813,8 +761,8 @@ diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx
return self.p_list(tokens)
else:
diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py
--- src/sage/plot/plot3d/plot3d.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/plot/plot3d/plot3d.py 2020-01-07 19:57:46.778664895 -0700
--- src/sage/plot/plot3d/plot3d.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/plot/plot3d/plot3d.py 2020-02-25 13:42:46.681646759 -0700
@@ -188,7 +188,8 @@ class _Coordinates(object):
sage: arb((x+z,y*z,z), z, (x,y))
Arbitrary Coordinates coordinate transform (z in terms of x, y)
@ -826,8 +774,8 @@ diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py
raise ValueError('variables were specified incorrectly for this coordinate system; incorrect variables were %s'%list(set(all_vars).symmetric_difference(set(indep_vars+[dep_var]))))
self.dep_var = dep_var
diff -up src/sage/plot/point.py.orig src/sage/plot/point.py
--- src/sage/plot/point.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/plot/point.py 2020-01-07 19:57:46.779664894 -0700
--- src/sage/plot/point.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/plot/point.py 2020-02-25 13:42:46.681646759 -0700
@@ -29,7 +29,7 @@ TESTS::
from sage.misc.decorators import options, rename_keyword
from sage.plot.colors import to_mpl_color
@ -847,8 +795,8 @@ diff -up src/sage/plot/point.py.orig src/sage/plot/point.py
try:
diff -up src/sage/repl/display/fancy_repr.py.orig src/sage/repl/display/fancy_repr.py
--- src/sage/repl/display/fancy_repr.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/repl/display/fancy_repr.py 2020-01-07 19:57:46.780664894 -0700
--- src/sage/repl/display/fancy_repr.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/repl/display/fancy_repr.py 2020-02-25 13:42:46.682646741 -0700
@@ -15,7 +15,7 @@ Representations of objects.
import types
@ -868,8 +816,8 @@ diff -up src/sage/repl/display/fancy_repr.py.orig src/sage/repl/display/fancy_re
else:
# A user-provided repr. Find newlines and replace them with p.break_()
diff -up src/sage/repl/ipython_kernel/interact.py.orig src/sage/repl/ipython_kernel/interact.py
--- src/sage/repl/ipython_kernel/interact.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/repl/ipython_kernel/interact.py 2020-01-07 19:57:46.781664893 -0700
--- src/sage/repl/ipython_kernel/interact.py.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/repl/ipython_kernel/interact.py 2020-02-25 13:42:46.682646741 -0700
@@ -35,7 +35,8 @@ EXAMPLES::
from ipywidgets.widgets import SelectionSlider, ValueWidget, ToggleButtons
@ -881,9 +829,9 @@ diff -up src/sage/repl/ipython_kernel/interact.py.orig src/sage/repl/ipython_ker
from .widgets_sagenb import input_grid
from sage.structure.element import parent
diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx
--- src/sage/rings/integer.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/rings/integer.pyx 2020-01-07 19:57:46.785664890 -0700
@@ -7124,7 +7124,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
--- src/sage/rings/integer.pyx.orig 2020-02-27 10:29:19.004788998 -0700
+++ src/sage/rings/integer.pyx 2020-02-27 15:48:31.176289587 -0700
@@ -7123,7 +7123,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
while x[0] == c' ': x += 1 # Strip spaces
# Disallow a sign here
@ -892,22 +840,10 @@ diff -up src/sage/rings/integer.pyx.orig src/sage/rings/integer.pyx
x = "" # Force an error below
assert base >= 2
diff -up src/sage/rings/multi_power_series_ring_element.py.orig src/sage/rings/multi_power_series_ring_element.py
--- src/sage/rings/multi_power_series_ring_element.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/rings/multi_power_series_ring_element.py 2020-01-07 19:57:46.786664889 -0700
@@ -1396,7 +1396,7 @@ class MPowerSeries(PowerSeries):
# at this stage, self is probably a non-zero
# element of the base ring
for a in range(len(self._bg_value.list())):
- if self._bg_value.list()[a] is not 0:
+ if self._bg_value.list()[a] != 0:
return a
def is_nilpotent(self):
diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbori.pyx
--- src/sage/rings/polynomial/pbori.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/rings/polynomial/pbori.pyx 2020-01-07 19:57:46.788664888 -0700
@@ -4765,8 +4765,7 @@ cdef class PolynomialConstruct:
--- src/sage/rings/polynomial/pbori.pyx.orig 2020-02-27 10:58:59.991311061 -0700
+++ src/sage/rings/polynomial/pbori.pyx 2020-02-27 15:48:31.177289568 -0700
@@ -4764,8 +4764,7 @@ cdef class PolynomialConstruct:
# So, it is just a conversion. [Simon King]
return (<BooleanPolynomialRing>ring)._element_constructor_(x)
@ -918,9 +854,9 @@ diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbor
cdef class MonomialConstruct:
diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
--- src/sage/rings/real_mpfi.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/rings/real_mpfi.pyx 2020-01-07 19:57:46.790664886 -0700
@@ -1943,12 +1943,12 @@ cdef class RealIntervalFieldElement(Ring
--- src/sage/rings/real_mpfi.pyx.orig 2020-02-27 10:14:36.381371499 -0700
+++ src/sage/rings/real_mpfi.pyx 2020-02-27 15:48:31.178289550 -0700
@@ -1941,12 +1941,12 @@ cdef class RealIntervalFieldElement(Ring
cdef long digits
digits = strlen(lower_s)
@ -935,7 +871,7 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
digits -= 1
upper_expo -= digits
@@ -2117,7 +2117,7 @@ cdef class RealIntervalFieldElement(Ring
@@ -2115,7 +2115,7 @@ cdef class RealIntervalFieldElement(Ring
raise MemoryError("Unable to allocate memory for the mantissa of an interval")
mpz_get_str(tmp_cstr, base, lower_mpz)
digits = strlen(tmp_cstr)
@ -945,9 +881,9 @@ diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
mant_string = bytes_to_str(tmp_cstr+1)
sign_string = bytes_to_str(b'-')
diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx
--- src/sage/rings/real_mpfr.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/rings/real_mpfr.pyx 2020-01-07 19:57:46.791664885 -0700
@@ -2039,7 +2039,7 @@ cdef class RealNumber(sage.structure.ele
--- src/sage/rings/real_mpfr.pyx.orig 2020-02-27 10:16:40.188177426 -0700
+++ src/sage/rings/real_mpfr.pyx 2020-02-27 15:48:31.179289531 -0700
@@ -2037,7 +2037,7 @@ cdef class RealNumber(sage.structure.ele
if s is NULL:
raise RuntimeError("unable to convert an mpfr number to a string")
# t contains just digits (no sign, decimal point or exponent)
@ -957,9 +893,9 @@ diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx
t = char_to_str(s + 1)
else:
diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.pyx
--- src/sage/structure/sage_object.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/structure/sage_object.pyx 2020-01-07 19:57:46.791664885 -0700
@@ -665,7 +665,7 @@ cdef class SageObject:
--- src/sage/structure/sage_object.pyx.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/structure/sage_object.pyx 2020-02-25 13:42:56.898464506 -0700
@@ -671,7 +671,7 @@ cdef class SageObject:
try:
s = self._interface_init_(I)
except Exception:
@ -969,9 +905,9 @@ diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.
if c:
try:
diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
--- src/sage/symbolic/expression.pyx.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/symbolic/expression.pyx 2020-01-07 19:57:46.794664883 -0700
@@ -12916,7 +12916,7 @@ cdef class hold_class:
--- src/sage/symbolic/expression.pyx.orig 2020-02-27 09:30:14.669819391 -0700
+++ src/sage/symbolic/expression.pyx 2020-02-27 15:48:31.182289476 -0700
@@ -12945,7 +12945,7 @@ cdef class hold_class:
sage: SR(2)^5
32
"""
@ -980,7 +916,7 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
def __exit__(self, *args):
"""
@@ -12929,7 +12929,7 @@ cdef class hold_class:
@@ -12958,7 +12958,7 @@ cdef class hold_class:
sage: SR(2)^5
32
"""
@ -989,15 +925,3 @@ diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
def start(self):
"""
diff -up src/setup.py.orig src/setup.py
--- src/setup.py.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/setup.py 2020-01-07 19:57:46.794664883 -0700
@@ -232,7 +232,7 @@ class sage_build_cython(Command):
cdivision=True,
embedsignature=True,
fast_getattr=True,
- language_level="2",
+ language_level=3,
preliminary_late_includes_cy28=True,
profile=self.profile,
)

View file

@ -1,351 +0,0 @@
diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py
--- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2019-09-05 13:19:45.878376777 -0300
+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2019-09-05 13:27:08.353250002 -0300
@@ -140,7 +140,7 @@ def localization_js():
locale=repr(get_locale())
if _localization_cache.get(locale,None) is None:
data = render_template(os.path.join('js/localization.js'), N_=N_, nN_=nN_)
- _localization_cache[locale] = (data, sha1(repr(data)).hexdigest())
+ _localization_cache[locale] = (data, sha1(repr(data).encode('ascii')).hexdigest())
data,datahash = _localization_cache[locale]
if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
@@ -158,7 +158,7 @@ def mathjax_js():
if _mathjax_js_cache is None:
from sagenb.misc.misc import mathjax_macros
data = render_template('js/mathjax_sage.js', theme_mathjax_macros=mathjax_macros)
- _mathjax_js_cache = (data, sha1(repr(data)).hexdigest())
+ _mathjax_js_cache = (data, sha1(repr(data).encode('ascii')).hexdigest())
data,datahash = _mathjax_js_cache
if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
@@ -173,7 +173,7 @@ def mathjax_js():
def keyboard_js(browser_os):
from sagenb.notebook.keyboards import get_keyboard
data = get_keyboard(browser_os)
- datahash=sha1(data).hexdigest()
+ datahash=sha1(str(data).encode('ascii')).hexdigest()
if request.environ.get('HTTP_IF_NONE_MATCH', None) == datahash:
response = make_response('',304)
else:
@@ -490,7 +490,7 @@ def create_app(path_to_notebook, *args,
filename = os.path.join(SRC, path)
if os.path.isfile(filename):
from cgi import escape
- src = escape(open(filename).read().decode('utf-8','ignore'))
+ src = escape(open(filename).read().decode('ascii'))
if (os.path.splitext(filename)[1] in
['.py','.c','.cc','.h','.hh','.pyx','.pxd']):
return render_template(os.path.join('html', 'source_code.html'),
diff -up build/pkgs/sagenb/src/sagenb/misc/format.py.orig build/pkgs/sagenb/src/sagenb/misc/format.py
--- build/pkgs/sagenb/src/sagenb/misc/format.py.orig 2019-09-05 13:20:21.507608139 -0300
+++ build/pkgs/sagenb/src/sagenb/misc/format.py 2019-09-05 13:27:08.353250002 -0300
@@ -126,7 +126,7 @@ import sys
sys.ps1 = "%s"
print("START%s")
%s
-""" % (prompt, number, displayhook_hack(string).encode('utf-8', 'ignore'))
+""" % (prompt, number, displayhook_hack(string).encode('ascii'))
try:
string = '# -*- coding: utf-8 -*-\n' + relocate_future_imports(string)
except SyntaxError:
diff -up build/pkgs/sagenb/src/sagenb/misc/misc.py.orig build/pkgs/sagenb/src/sagenb/misc/misc.py
--- build/pkgs/sagenb/src/sagenb/misc/misc.py.orig 2019-09-05 13:20:31.231671284 -0300
+++ build/pkgs/sagenb/src/sagenb/misc/misc.py 2019-09-05 13:27:08.354250008 -0300
@@ -424,7 +424,7 @@ def set_permissive_permissions(filename)
stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | \
stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP)
-def encoded_str(obj, encoding='utf-8'):
+def encoded_str(obj, encoding='ascii'):
r"""
Takes an object and returns an encoded str human-readable representation.
@@ -445,7 +445,7 @@ def encoded_str(obj, encoding='utf-8'):
return binary_type(obj)
-def unicode_str(obj, encoding='utf-8'):
+def unicode_str(obj, encoding='ascii'):
r"""
Takes an object and returns a unicode human-readable representation.
diff -up build/pkgs/sagenb/src/sagenb/misc/support.py.orig build/pkgs/sagenb/src/sagenb/misc/support.py
--- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2019-09-05 13:20:40.258729902 -0300
+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2019-09-05 13:27:08.356250022 -0300
@@ -279,7 +279,7 @@ def docstring(obj_name, globs, system='s
s += newline
s += sageinspect.sage_getdoc(obj, obj_name)
s = s.rstrip()
- return html_markup(s.decode('utf-8'))
+ return html_markup(s.decode('ascii'))
def html_markup(s):
@@ -433,7 +433,7 @@ def syseval(system, cmd, dir=None):
if hasattr(system.__class__, 'chdir'):
system.chdir(dir)
if isinstance(cmd, text_type):
- cmd = cmd.encode('utf-8', 'ignore')
+ cmd = cmd.encode('ascii')
return system.eval(cmd, sage_globals, locals=sage_globals)
######################################################################
diff -up build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py.orig build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py
--- build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py.orig 2019-09-05 13:20:49.848792176 -0300
+++ build/pkgs/sagenb/src/sagenb/misc/worksheet2rst.py 2019-09-05 13:27:08.356250022 -0300
@@ -200,5 +200,5 @@ if __name__=='__main__':
text = sys.stdin.read()
images_dir = sys.argv[2] if len(sys.argv)>2 else ''
- print(worksheet2rst(text, images_dir).encode('utf-8'))
+ print(worksheet2rst(text, images_dir).encode('ascii'))
diff -up build/pkgs/sagenb/src/sagenb/notebook/challenge.py.orig build/pkgs/sagenb/src/sagenb/notebook/challenge.py
--- build/pkgs/sagenb/src/sagenb/notebook/challenge.py.orig 2019-09-05 13:20:58.515848457 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/challenge.py 2019-09-05 13:27:08.356250022 -0300
@@ -529,7 +529,7 @@ class reCAPTCHAChallenge(AbstractChallen
def encode_if_necessary(s):
if isinstance(s, unicode):
- return s.encode('utf-8')
+ return s.encode('ascii')
return s
params = urlencode({
diff -up build/pkgs/sagenb/src/sagenb/notebook/css.py.orig build/pkgs/sagenb/src/sagenb/notebook/css.py
--- build/pkgs/sagenb/src/sagenb/notebook/css.py.orig 2019-09-05 13:21:08.792915193 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/css.py 2019-09-05 13:27:08.357250028 -0300
@@ -58,5 +58,5 @@ def css(color='default'):
user_css = '\n' + open(user_css_path).read()
data = main_css + user_css
- _css_cache = (data, sha1(data).hexdigest())
+ _css_cache = (data, sha1(str(data).encode('ascii')).hexdigest())
return _css_cache
diff -up build/pkgs/sagenb/src/sagenb/notebook/js.py.orig build/pkgs/sagenb/src/sagenb/notebook/js.py
--- build/pkgs/sagenb/src/sagenb/notebook/js.py.orig 2019-09-05 13:21:17.511971810 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/js.py 2019-09-05 13:27:08.357250028 -0300
@@ -84,7 +84,7 @@ def javascript():
if debug_mode:
# TODO: maybe we should return a random hash so that the code
# is reloaded on every refresh
- return s, sha1(s).hexdigest()
+ return s, sha1(str(s).encode('ascii')).hexdigest()
# TODO: use minify here, which is more standard (and usually safer
# and with gzip compression, smaller); But first inquire about the
@@ -92,7 +92,7 @@ def javascript():
# Evil" clause in the license. Does that prevent us from
# distributing it (i.e., it adds an extra condition to the
# software)? See http://www.crockford.com/javascript/jsmin.py.txt
- s = JavaScriptCompressor().getPacked(s.encode('utf-8'))
+ s = JavaScriptCompressor().getPacked(s.encode('ascii'))
_cache_javascript = (s, sha1(s).hexdigest())
return _cache_javascript
diff -up build/pkgs/sagenb/src/sagenb/notebook/register.py.orig build/pkgs/sagenb/src/sagenb/notebook/register.py
--- build/pkgs/sagenb/src/sagenb/notebook/register.py.orig 2019-09-05 13:21:26.247028528 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/register.py 2019-09-05 13:27:08.358250034 -0300
@@ -22,7 +22,7 @@ def build_msg(key, username, addr, port,
'%(url_prefix)s://%(addr)s:%(port)s/confirm?key=%(key)s\n\n'
'You will be taken to a page which will confirm that you have indeed registered.',
url_prefix=url_prefix, addr=addr, port=port, key=key)
- return s.encode('utf-8')
+ return s.encode('ascii')
def build_password_msg(key, username, addr, port, secure):
url_prefix = "https" if secure else "http"
@@ -31,7 +31,7 @@ def build_password_msg(key, username, ad
'Sign in at %(url_prefix)s://%(addr)s:%(port)s/\n\n'
'Make sure to reset your password by going to Settings in the upper right bar.',
key=key, url_prefix=url_prefix, addr=addr, port=port)
- return s.encode('utf-8')
+ return s.encode('ascii')
def make_key():
from random import randint
diff -up build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py.orig build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py
--- build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py.orig 2019-09-05 13:21:35.087085930 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/smtpsend.py 2019-09-05 13:27:08.358250034 -0300
@@ -18,20 +18,15 @@ AUTHOR:
Bobby Moretti
"""
-from twisted.mail import smtp, relaymanager # problematic with python 3
-from email.mime.base import MIMEBase
-from email.mime.multipart import MIMEMultipart
-import sys
-
+from twisted.mail.smtp import sendmail
+from twisted.internet.task import react
+from email.mime.text import MIMEText
def buildMessage(fromaddr, toaddr, subject, body):
- message = MIMEMultipart()
+ message = MIMEText(body)
message['From'] = fromaddr
message['To'] = toaddr
message['Subject'] = subject
- textPart = MIMEBase('text', 'plain')
- textPart.set_payload(body)
- message.attach(textPart)
return message
def sendComplete(result):
@@ -42,16 +37,10 @@ def handleError(error):
def send_mail(fromaddr, toaddr, subject, body, on_success=sendComplete, on_failure=handleError):
try:
- recpt_domain = toaddr.split('@')[1].encode("ascii")
- except (ValueError, IndexError, UnicodeDecodeError):
- raise ValueError("mal-formed destination address")
- message = buildMessage(fromaddr, toaddr, subject, body)
- messageData = message.as_string(unixfrom=False)
-
- def on_found_record(mx_rec):
- smtp_server = str(mx_rec.name)
- sending = smtp.sendmail(smtp_server, fromaddr, [toaddr], messageData)
- sending.addCallback(on_success).addErrback(on_failure)
-
- relaymanager.MXCalculator().getMX(recpt_domain).addCallback(on_found_record)
+ d = sendmail("localhost", fromaddr, toaddr, message)
+ d.addBoth(print)
+ except:
+ handleError(sys.exc_info()[0])
+ return
+ sendComplete()
diff -up build/pkgs/sagenb/src/sagenb/notebook/user_manager.py.orig build/pkgs/sagenb/src/sagenb/notebook/user_manager.py
--- build/pkgs/sagenb/src/sagenb/notebook/user_manager.py.orig 2019-09-05 13:21:45.143151229 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/user_manager.py 2019-09-05 13:27:08.360250047 -0300
@@ -461,7 +461,7 @@ class SimpleUserManager(UserManager):
if encrypt:
salt = user.generate_salt()
new_password = 'sha256${0}${1}'.format(salt,
- hashlib.sha256(salt + new_password).hexdigest())
+ hashlib.sha256(str(salt + new_password).encode('ascii')).hexdigest())
self._passwords[username] = new_password
# need to make sure password in the user object is synced
# for compatibility only the user object data is stored in the 'users.pickle'
diff -up build/pkgs/sagenb/src/sagenb/notebook/user.py.orig build/pkgs/sagenb/src/sagenb/notebook/user.py
--- build/pkgs/sagenb/src/sagenb/notebook/user.py.orig 2019-09-05 13:21:54.855214298 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/user.py 2019-09-05 13:27:08.360250047 -0300
@@ -185,7 +185,7 @@ class User(object):
if encrypt:
salt = generate_salt()
self._password = 'sha256${0}${1}'.format(salt,
- hashlib.sha256(salt + password).hexdigest())
+ hashlib.sha256(str(salt + password).encode('ascii')).hexdigest())
else:
self._password = password
self._temporary_password = ''
diff -up build/pkgs/sagenb/src/sagenb/notebook/worksheet.py.orig build/pkgs/sagenb/src/sagenb/notebook/worksheet.py
--- build/pkgs/sagenb/src/sagenb/notebook/worksheet.py.orig 2019-09-05 13:26:14.467900092 -0300
+++ build/pkgs/sagenb/src/sagenb/notebook/worksheet.py 2019-09-05 13:27:08.361250054 -0300
@@ -313,7 +313,7 @@ class Worksheet(object):
d = {#############
# basic identification
- 'name': unicode(self.name()),
+ 'name': str(self.name().encode('ascii')),
'id_number': int(self.id_number()),
#############
@@ -2157,9 +2157,9 @@ class Worksheet(object):
filename = self.worksheet_html_filename()
if os.path.exists(filename):
- contents = open(filename).read().decode('utf-8', 'ignore')
+ contents = open(filename).read().decode('ascii')
else:
- contents = u' '
+ contents = ' '
try:
r = [unicode(x.lower()) for x in [self.owner(), self.publisher(), self.name(), contents]]
@@ -2190,8 +2190,8 @@ class Worksheet(object):
if E is None:
E = self.edit_text()
worksheet_html = self.worksheet_html_filename()
- open(filename, 'w').write(bz2.compress(E.encode('utf-8', 'ignore')))
- open(worksheet_html, 'w').write(self.body().encode('utf-8', 'ignore'))
+ open(filename, 'w').write(bz2.compress(E.encode('ascii')))
+ open(worksheet_html, 'w').write(self.body().encode('ascii'))
self.limit_snapshots()
try:
X = self.__saved_by_info
@@ -3930,7 +3930,7 @@ except (KeyError, IOError):
"""
# The extra newline below is necessary, since otherwise source
# code introspection doesn't include the last line.
- return 'open("%s","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("%s"),globals())+"\\n"); execfile(os.path.abspath("%s"))'%(CODE_PY, base64.b64encode(s.encode('utf-8', 'ignore')), CODE_PY)
+ return 'open("%s","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("%s"),globals())+"\\n"); execfile(os.path.abspath("%s"))'%(CODE_PY, base64.b64encode(s.encode('ascii')), CODE_PY)
##########################################################
# Loading and attaching files
@@ -4114,7 +4114,7 @@ except (KeyError, IOError):
os.makedirs(code)
spyx = os.path.abspath(os.path.join(code, 'sage%s.spyx'%id))
if not (os.path.exists(spyx) and open(spyx).read() == cmd):
- open(spyx,'w').write(cmd.encode('utf-8', 'ignore'))
+ open(spyx,'w').write(cmd.encode('ascii'))
return '_support_.cython_import_all("%s", globals())'%spyx
def check_for_system_switching(self, input, cell):
diff -up build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py.orig build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py
--- build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py.orig 2019-09-05 13:22:17.198359375 -0300
+++ build/pkgs/sagenb/src/sagenb/storage/filesystem_storage.py 2019-09-05 13:27:08.361250054 -0300
@@ -106,7 +106,7 @@ class FilesystemDatastore(Datastore):
def _deep_user_path(self, username):
from hashlib import md5
- h = md5(username).hexdigest()
+ h = md5(str(username).encode('ascii')).hexdigest()
base = ['__store__', h[:1], h[:2], h[:3], h[:4]]
path = os.path.join(*base)
self._makepath(self._abspath(os.path.join(self._home_path, path)))
@@ -397,7 +397,7 @@ class FilesystemDatastore(Datastore):
# todo -- add check if changed
filename = self._worksheet_html_filename(username, id_number)
with atomic_write(self._abspath(filename)) as f:
- f.write(worksheet.body().encode('utf-8', 'ignore'))
+ f.write(str(worksheet.body()))
def create_worksheet(self, username, id_number):
"""
@@ -548,7 +548,7 @@ class FilesystemDatastore(Datastore):
worksheet_txt = members[0].name
W = self.load_worksheet(username, id_number)
- W.edit_save_old_format(T.extractfile(worksheet_txt).read().decode('utf-8', 'ignore'))
+ W.edit_save_old_format(T.extractfile(worksheet_txt).read().decode('ascii'))
# '/' is right, since old worksheets always unix
dir = worksheet_txt.split('/')[0]
diff -up build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py.orig build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py
--- build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py.orig 2019-09-05 13:22:27.220424454 -0300
+++ build/pkgs/sagenb/src/sagenb/testing/selenium/selenium.py 2019-09-05 13:27:08.361250054 -0300
@@ -199,9 +199,9 @@ class selenium:
def do_command(self, verb, args):
conn = http.client.HTTPConnection(self.host, self.port)
- body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('utf-8'))
+ body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('ascii'))
for i in range(len(args)):
- body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('utf-8'))
+ body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('ascii'))
if (None != self.sessionId):
body += "&sessionId=" + unicode(self.sessionId)
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"}
diff -up build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html.orig ./build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html
--- build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html.orig 2019-09-05 15:39:56.829175774 -0300
+++ build/pkgs/sagenb/src/sagenb/data/sage/html/worksheet_listing.html 2019-09-05 15:40:26.822369920 -0300
@@ -45,6 +45,7 @@ INPUT:
<h1>{{ gettext('Account is read only. You may download or delete worksheets or data.') }}</h1>
{% endif %}
<h3><a href="https://trac.sagemath.org/ticket/25837">{{ gettext('This notebook is deprecated. Click here for details.') }}</a></h3>
+<h5>The sagemath rpm package was built with python3, but the sagemath notebook is discontinued and has not been ported to python3.<br>Only minimal functionality to browse documentation is available.<br>Please run the shell command:<br><code>$ sage -n jupyter</code><br>to use the jupyter notebook.</h5>
<div id="user-main-controls" class="user-controls">
{% if pub is not defined or not pub %}
<a href="/new_worksheet" target="_blank">{{ gettext('New Worksheet') }}</a>

View file

@ -1,88 +0,0 @@
diff -up build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig build/pkgs/sagenb/src/sagenb/flask_version/base.py
--- build/pkgs/sagenb/src/sagenb/flask_version/base.py.orig 2018-11-05 08:45:39.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/flask_version/base.py 2019-01-04 10:28:38.099158223 -0700
@@ -7,8 +7,6 @@ from functools import partial
from flask import Flask, Blueprint, url_for, request, session, redirect, g, make_response, current_app, render_template
from .decorators import login_required, guest_or_login_required, with_lock
from .decorators import global_lock
-# Make flask use the old session foo from <=flask-0.9
-from flask_oldsessions import OldSecureCookieSessionInterface
from flask_autoindex import AutoIndex
from sage.env import SAGE_SRC, SAGE_DOC
@@ -28,7 +26,6 @@ class SageNBFlask(Flask):
def __init__(self, *args, **kwds):
self.startup_token = kwds.pop('startup_token', None)
Flask.__init__(self, *args, **kwds)
- self.session_interface = OldSecureCookieSessionInterface()
self.config['SESSION_COOKIE_HTTPONLY'] = False
@@ -39,13 +36,13 @@ class SageNBFlask(Flask):
self.add_static_path('/javascript', DATA)
self.add_static_path('/static', DATA)
self.add_static_path('/java', DATA)
- self.add_static_path('/java/jmol', os.path.join(os.environ["SAGE_SHARE"],"jmol"))
- self.add_static_path('/jsmol', os.path.join(os.environ["SAGE_SHARE"],"jsmol"))
- self.add_static_path('/jsmol/js', os.path.join(os.environ["SAGE_SHARE"],"jsmol","js"))
- self.add_static_path('/j2s', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s"))
- self.add_static_path('/jsmol/j2s', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s"))
- self.add_static_path('/j2s/core', os.path.join(os.environ["SAGE_SHARE"],"jsmol","j2s","core"))
- self.add_static_path('/threejs', os.path.join(os.environ["SAGE_SHARE"],"threejs"))
+ self.add_static_path('/java/jmol', os.path.join(os.environ["SAGE_ROOT"],"share","jmol"))
+ self.add_static_path('/jsmol', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol"))
+ self.add_static_path('/jsmol/js', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","js"))
+ self.add_static_path('/j2s', os.path.join(os.environ["SAGE_ROOT"],"jsmol","j2s"))
+ self.add_static_path('/jsmol/j2s', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","j2s"))
+ self.add_static_path('/j2s/core', os.path.join(os.environ["SAGE_ROOT"],"share","jsmol","j2s","core"))
+ self.add_static_path('/threejs', os.path.join(os.environ["SAGE_ROOT"],"share","threejs"))
import mimetypes
mimetypes.add_type('text/plain','.jmol')
diff -up build/pkgs/sagenb/src/sagenb/misc/misc.py.orig build/pkgs/sagenb/src/sagenb/misc/misc.py
--- build/pkgs/sagenb/src/sagenb/misc/misc.py.orig 2018-11-05 08:45:39.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/misc/misc.py 2019-01-04 10:28:38.099158223 -0700
@@ -196,7 +196,8 @@ def pad_zeros(s, size=3):
SAGENB_ROOT = os.path.split(resource_filename(__name__, ''))[0]
-DATA = os.path.join(SAGENB_ROOT, 'data')
+import sage.env
+DATA = os.path.join(sage.env.SAGE_SRC, 'sagenb', 'data')
if 'DOT_SAGENB' in os.environ:
DOT_SAGENB = os.environ['DOT_SAGENB']
diff -up build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig build/pkgs/sagenb/src/sagenb/notebook/cell.py
--- build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig 2018-11-05 08:45:39.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2019-01-04 10:28:38.100158204 -0700
@@ -2387,8 +2387,8 @@ class Cell(Cell_generic):
with open(jmol_name, 'r') as f:
jmol_script = f.read()
jmol_script = jmol_script.replace(
- 'defaultdirectory "',
- 'defaultdirectory "{0}/'.format(self.url_to_worksheet()))
+ 'defaultdirectory "',
+ 'defaultdirectory "/home/' + self.worksheet_filename() + '/')
with open(jmol_name, 'w') as f:
f.write(jmol_script)
diff -up build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py
--- build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py.orig 2018-11-05 08:45:39.000000000 -0700
+++ build/pkgs/sagenb/src/sagenb/notebook/run_notebook.py 2019-01-04 10:28:38.101158185 -0700
@@ -53,12 +53,11 @@ sagenb.notebook.misc.DIR = %(cwd)r #We s
# Flask #
#########
import os, sys, random
-import sagenb.flask_version.base as flask_base
-opts={}
+sagenb_dir = os.path.join(os.environ['SAGE_ROOT'], 'src', 'sagenb')
+sys.path.append(sagenb_dir)
+import flask_version.base as flask_base
startup_token = '{0:x}'.format(random.randint(0, 2**128))
-if %(automatic_login)s:
- opts['startup_token'] = startup_token
-flask_app = flask_base.create_app(%(notebook_opts)s, **opts)
+flask_app = flask_base.create_app(%(notebook_opts)s, startup_token=startup_token)
def save_notebook(notebook):
print("Quitting all running worksheets...")

View file

@ -1,6 +1,6 @@
diff -up src/bin/sage.orig src/bin/sage
--- src/bin/sage.orig 2019-10-03 14:38:40.429507574 -0300
+++ src/bin/sage 2019-10-03 14:47:00.852631198 -0300
--- src/bin/sage.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/bin/sage 2020-02-25 13:37:42.510072662 -0700
@@ -26,13 +26,10 @@ usage() {
echo " file.[sage|py|spyx] -- run given .sage, .py or .spyx file"
echo " -advanced -- list all command line options"
@ -585,7 +585,7 @@ diff -up src/bin/sage.orig src/bin/sage
- # tends to ask interactive questions if something goes wrong. These
- # cause the build to hang. If stdin is /dev/null, TeX just aborts.
- shift
- exec sage-python23 -m sage_setup.docbuild "$@" </dev/null
- exec sage-python -m sage_setup.docbuild "$@" </dev/null
-fi
-
if [ "$1" = '-gdb' -o "$1" = "--gdb" ]; then
@ -605,8 +605,8 @@ diff -up src/bin/sage.orig src/bin/sage
exec sage-startuptime.py "$@"
fi
diff -up src/bin/sage-valgrind.orig src/bin/sage-valgrind
--- src/bin/sage-valgrind.orig 2019-10-03 14:47:13.247708565 -0300
+++ src/bin/sage-valgrind 2019-10-03 14:47:46.404915531 -0300
--- src/bin/sage-valgrind.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/bin/sage-valgrind 2020-02-25 13:36:02.973848216 -0700
@@ -4,17 +4,7 @@ if [ -z $SAGE_EXTCODE ]; then
SAGE_EXTCODE=`${0/-valgrind} -c "from sage.env import SAGE_EXTCODE; print(SAGE_EXTCODE)"`
fi

View file

@ -1,5 +1,6 @@
--- src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp.orig 2019-09-29 17:03:11.000000000 -0600
+++ src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp 2020-01-06 10:58:12.087355771 -0700
diff -up src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp.orig src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp
--- src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp.orig 2020-01-01 04:03:10.000000000 -0700
+++ src/sage/graphs/graph_decompositions/tdlib/sage_tdlib.cpp 2020-02-25 13:59:23.612853911 -0700
@@ -2,8 +2,8 @@
#include <map>

View file

@ -18,9 +18,6 @@
%bcond_with docs
%endif
# not functional due to missing jar dependencies
%bcond_with sage3d
# use a workaround to match upstream sagemath patched sphinx
%bcond_without sphinx_hack
@ -40,7 +37,7 @@
%global combinatorial_designs_pkg combinatorial_designs-20140630
%global conway_polynomials_pkg conway_polynomials-0.5
%global cremona_ver 2016-10-17
%global cremona_ver 2019-10-29
%global elliptic_curves_pkg elliptic_curves-0.8.1
%global flintqs_pkg flintqs-1.0
%global graphs_pkg graphs-20161026
@ -59,8 +56,7 @@
%endif
%global polytopes_db_pkg polytopes_db-20170220
%global rubiks_pkg rubiks-20070912
%global sagenb_pkg sagenb-1.1.2
%global sagetex_pkg sagetex-3.3
%global sagetex_pkg sagetex-3.4
%global Sphinx_pkg Sphinx-1.8.5
%global singular_pkg singular-4.1.1p2
%if %{with bundled_thebe}
@ -68,7 +64,7 @@
%global thebe_pkg thebe-%{thebe_ver}
%endif
%if %{with bundled_threejs}
%global threejs_ver r105
%global threejs_ver r110
%global threejs_pkg threejs-%{threejs_ver}
%endif
%if %{with bundled_widgetsnbextension}
@ -77,7 +73,7 @@
%endif
# Spkg equivalents of required rpms; we pretend they are installed as spkgs.
%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 cbc-2.10.3 CoCoALib-0.99601 coxeter3-1.1 cryptominisat-5.6.8 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.10.2 gmp-6.1.2 libsirocco-2.0 lrslib-070 mcqd-1.0 meataxe-1.0 primecount-5.1 qepcad-B.1.72 saclib-2.2.7 surf-1.0.6-gcc6 tdlib-0.9.0
%global SAGE_REQUIRED_PKGS 4ti2-1.6.9 bliss-0.73 cbc-2.10.4 CoCoALib-0.99650 coxeter3-3.1 cryptominisat-5.6.8 database_cremona_ellcurve-%{cremona_ver} gap_packages-4.10.2 gmp-6.1.2 libsirocco-2.0.2 lrslib-070 mcqd-1.0 meataxe-1.0 primecount-5.3 qepcad-B.1.72 saclib-2.2.7 surf-1.0.6-gcc6 tdlib-0.9.0
%ifarch %{ix86} x86_64
%global SAGE_REQUIRED_PKGS %{SAGE_REQUIRED_PKGS} fes-0.2
@ -94,8 +90,8 @@
Name: sagemath
Summary: A free open-source mathematics software system
Version: 8.9
Release: 3%{?dist}
Version: 9.0
Release: 1%{?dist}
# The file ${SAGE_ROOT}/COPYING.txt is the upstream license breakdown file
# Additionally, every $files section has a comment with the license name
# before files with that license
@ -107,8 +103,8 @@ Source2: gprc.expect
# Follow maxima's ExclusiveArch
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
# Fix ecm interact() command
Patch0: %{name}-ecm.patch
# Fix stray escapes in python strings
Patch0: %{name}-escape.patch
# Fix a "random" bit chooser that always chooses 0
Patch1: %{name}-random.patch
@ -122,7 +118,7 @@ Patch3: %{name}-extensions.patch
# helper to:
# o respect a DESTDIR environment variable
# o avoid double '//' in pathnames, what can confused debugedit & co
# o avoid double '//' in pathnames, which can confuse debugedit & co
# o minor change to help in incremental builds by avoiding rebuilding
# files
# o do not assume there is an installed sagemath
@ -131,92 +127,83 @@ Patch4: %{name}-rpmbuild.patch
# build documentation in buildroot environment
Patch5: %{name}-sagedoc.patch
# sage notebook rpm and system environment adjustments
Patch6: %{name}-sagenb.patch
# do not attempt to create state files in system directories
Patch7: %{name}-readonly.patch
Patch6: %{name}-readonly.patch
# work with all maxima-runtime lisp backend packages
Patch8: %{name}-maxima.patch
Patch7: %{name}-maxima.patch
# execute 4ti2 programs in $PATH not in $SAGE_ROOT/local/bin
Patch9: %{name}-4ti2.patch
Patch8: %{name}-4ti2.patch
# use jmol itself to export preview images
# FIXME besides not using X and told so, fails if DISPLAY is not set
Patch10: %{name}-jmol.patch
Patch9: %{name}-jmol.patch
# tell the user how to install the large Cremona database
# add a missing commit() that causes large database construction to fail
Patch11: %{name}-cremona.patch
Patch10: %{name}-cremona.patch
# adapt to python 3 and cython running in python 3 mode
Patch12: %{name}-python3.patch
Patch11: %{name}-python3.patch
# correct path to the nauty geng program
Patch13: %{name}-nauty.patch
Patch12: %{name}-nauty.patch
# remove the buildroot path from Cython output
Patch14: %{name}-buildroot.patch
Patch13: %{name}-buildroot.patch
# update c++ standard to fix FTBFS
Patch15: %{name}-lcalc.patch
Patch14: %{name}-lcalc.patch
# avoid assertion in coin backend
Patch16: %{name}-cbc.patch
Patch15: %{name}-cbc.patch
# Use system gap directories
Patch17: %{name}-libgap.patch
Patch16: %{name}-libgap.patch
# Build fes
Patch18: %{name}-fes-build.patch
Patch17: %{name}-fes-build.patch
# Disable fes
Patch19: %{name}-fes.patch
Patch18: %{name}-fes.patch
# Side effect of using distro packages
# https://bugzilla.redhat.com/show_bug.cgi?id=974769
Patch20: %{name}-sympy.patch
Patch19: %{name}-sympy.patch
# Correct unable to start QEPCAD within sage
# https://bugzilla.redhat.com/show_bug.cgi?id=1243590
Patch21: %{name}-qepcad.patch
Patch20: %{name}-qepcad.patch
# Correct path to arb headers
Patch22: %{name}-arb.patch
Patch21: %{name}-arb.patch
# Add missing include paths
Patch23: %{name}-includes.patch
Patch22: %{name}-includes.patch
# Use openblas
Patch24: %{name}-openblas.patch
Patch23: %{name}-openblas.patch
# Fix paths to latte-integrale binaries
Patch25: %{name}-latte.patch
Patch24: %{name}-latte.patch
# Upstream fixes for random SIGFPEs due to ecl messing with the fp state
Patch26: %{name}-sigfpe.patch
Patch25: %{name}-sigfpe.patch
# Add some missing #includes and types in the rubiks code
Patch27: %{name}-rubiks.patch
Patch26: %{name}-rubiks.patch
# Fix an indentation error in sagetex
Patch28: %{name}-sagetex.patch
Patch27: %{name}-sagetex.patch
# Fix some path settings in the sage environment
Patch29: %{name}-env.patch
# Make notebook minimally function until upstream finally removes it
Patch30: %{name}-sagenb-python3.patch
# Adapt to primecount 5.x
Patch31: %{name}-primecount.patch
Patch28: %{name}-env.patch
# Adapt to recent tdlib 0.9
Patch32: %{name}-tdlib.patch
Patch29: %{name}-tdlib.patch
# Use local objects.inv for intersphinx since no network on koji builders
Patch33: %{name}-intersphinx.patch
Patch30: %{name}-intersphinx.patch
BuildRequires: 4ti2
BuildRequires: arb-devel
@ -275,7 +262,7 @@ BuildRequires: iml-devel
BuildRequires: jmol
BuildRequires: jsmath-fonts
# To have a proper link
#BuildRequires: jsmol
BuildRequires: jsmol
BuildRequires: L-function-devel
BuildRequires: lapack-devel
BuildRequires: latte-integrale
@ -319,10 +306,6 @@ BuildRequires: python3dist(brial)
BuildRequires: python3dist(cvxopt)
BuildRequires: python3dist(cython)
BuildRequires: python3dist(docutils)
BuildRequires: python3dist(flask-autoindex)
BuildRequires: python3dist(flask-babel)
BuildRequires: python3dist(flask-openid)
BuildRequires: python3dist(flask-silk)
BuildRequires: python3dist(fpylll)
BuildRequires: python3dist(future)
BuildRequires: python3dist(gmpy2)
@ -340,7 +323,6 @@ BuildRequires: python3dist(networkx)
BuildRequires: python3dist(notebook)
%if %{with bundled_ipython}
BuildRequires: python3dist(path.py)
BuildRequires: python3dist(pathlib2)
%endif
%if %{without bundled_pexpect}
BuildRequires: python3dist(pexpect)
@ -359,7 +341,6 @@ BuildRequires: python3dist(pyzmq)
BuildRequires: python3dist(rpy2)
BuildRequires: python3dist(scipy)
BuildRequires: python3dist(scons)
BuildRequires: python3dist(send2trash)
BuildRequires: python3dist(setuptools)
%if %{with bundled_ipython}
BuildRequires: python3dist(simplegeneric)
@ -368,7 +349,6 @@ BuildRequires: python3dist(six)
BuildRequires: python3dist(speaklater)
BuildRequires: python3dist(sphinx)
BuildRequires: python3dist(sympy)
BuildRequires: python3dist(twisted)
BuildRequires: python3dist(zodb3)
BuildRequires: qepcad-B
BuildRequires: R
@ -378,14 +358,14 @@ BuildRequires: rw-devel
BuildRequires: sharedmeataxe-devel
BuildRequires: Singular-devel
BuildRequires: sirocco-devel
BuildRequires: stix-math-fonts
BuildRequires: stix-fonts
BuildRequires: suitesparse-devel
BuildRequires: symmetrica-devel
BuildRequires: sympow
BuildRequires: tachyon
BuildRequires: texlive
BuildRequires: tex(anyfontsize.sty)
BuildRequires: tex(makecmds.sty)
BuildRequires: vecmath
# For _jsdir macro
BuildRequires: web-assets-devel
BuildRequires: xorg-x11-fonts-Type1
@ -394,14 +374,14 @@ BuildRequires: zlib-devel
BuildRequires: zn_poly-devel
Requires: hicolor-icon-theme
Requires: %{name}-core
Requires: %{name}-data
Requires: %{name}-core = %{version}-%{release}
Requires: %{name}-data = %{version}-%{release}
%if %{with docs}
Requires: %{name}-doc-en
Requires: %{name}-doc-en = %{version}-%{release}
%endif
Requires: %{name}-notebook
Requires: %{name}-rubiks
Requires: %{name}-sagetex
Requires: %{name}-jupyter = %{version}-%{release}
Requires: %{name}-rubiks = %{version}-%{release}
Requires: %{name}-sagetex = %{version}-%{release}
%if %{with bundled_thebe}
Provides: bundled(thebe) = %{thebe_ver}
@ -479,7 +459,6 @@ Requires: python3dist(matplotlib)
Requires: python3dist(networkx)
%if %{with bundled_ipython}
Requires: python3dist(path.py)
Requires: python3dist(pathlib2)
%endif
%if %{without bundled_pexpect}
Requires: python3dist(pexpect)
@ -505,8 +484,8 @@ Requires: python3dist(sympy)
Requires: python3dist(zodb3)
Requires: qepcad-B
Requires: Singular
# Required by widgetsnbextension and thebe; remove when they are unbundled
Requires: stix-math-fonts
# Required by thebe; remove when it is unbundled
Requires: stix-fonts
Requires: sympow
Requires: tachyon
Requires: texlive
@ -701,17 +680,18 @@ This package contains the Turkish %{name} documentation.
%endif
#------------------------------------------------------------------------
%package notebook
Summary: The Sage Notebook
%package jupyter
Summary: Jupyter integration for sagemath
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python-jupyter-filesystem
Requires: python3dist(flask-silk)
Requires: python3dist(send2trash)
Requires: vecmath
%description notebook
The Sage Notebook is a web-based graphical user interface for
mathematical software.
# This can be removed when Fedora 31 reaches EOL
Obsoletes: sagemath-notebook < 9.0-1
Provides: sagemath-notebook = %{version}-%{release}
%description jupyter
This package contains a Jupyter integration for sagemath, replacing the
defunct notebook functionality.
#------------------------------------------------------------------------
%package rubiks
@ -835,11 +815,6 @@ pushd build/pkgs/rubiks
popd
popd
pushd build/pkgs/sagenb
tar jxf ../../../upstream/%{sagenb_pkg}.tar.bz2
mv %{sagenb_pkg} src
popd
pushd build/pkgs/sagetex
tar zxf ../../../upstream/%{sagetex_pkg}.tar.gz
mv %{sagetex_pkg} src
@ -901,14 +876,14 @@ popd
%patch14
%patch15
%patch16
%patch17
%if %{with fes}
%patch18
%patch17
%else
%patch19
%patch18
%endif
%patch19
%patch20
%patch21
%patch22
@ -920,9 +895,6 @@ popd
%patch28
%patch29
%patch30
%patch31
%patch32
%patch33
sed -e 's|@@SAGE_ROOT@@|%{SAGE_ROOT}|' \
-e 's|@@SAGE_DOC@@|%{SAGE_DOC}|' \
@ -933,19 +905,10 @@ sed -e 's|@@CYSIGNALS@@|%{python3_sitearch}/cysignals|' \
-e 's|@@BUILDROOT@@|%{buildroot}|' \
-i src/setup.py
sed -e "/flask-oldsessions/d" \
-i build/pkgs/sagenb/src/setup.py
#------------------------------------------------------------------------
# some .c files are not (re)generated
find src/sage \( -name \*.pyx -o -name \*.pxd \) -exec touch {} \+
# remove bundled jar files before build
rm build/pkgs/sagenb/src/sagenb/data/sage3d/lib/sage3d.jar
# remove binary egg
rm -r build/pkgs/sagenb/src/sagenb.egg-info
# fix Singular paths
singver=$(sed 's/.*-\([.[:digit:]]*\).*/\1/' <<< %{singular_pkg})
sed -e "s,SINGULARPATH=\",&%{_datadir}/singular/LIB:," \
@ -961,8 +924,8 @@ grep -FrlZ '#!%{_bindir}/env python' | \
xargs -0 sed -i 's,#!%{_bindir}/env python,#!%{__python3},g'
grep -FrlZ '#!%{_bindir}/env sage-system-python' | \
xargs -0 sed -i 's,#!%{_bindir}/env sage-system-python,#!%{__python3},g'
grep -FrlZ '#!%{_bindir}/env sage-python23' | \
xargs -0 sed -i 's,#!%{_bindir}/env sage-python23,#!%{__python3},g'
grep -FrlZ '#!%{_bindir}/env sage-python' | \
xargs -0 sed -i 's,#!%{_bindir}/env sage-python,#!%{__python3},g'
grep -FrlZ 'sage-python23' | xargs -0 sed -i 's,sage-python23,python3,g'
grep -FrlZ '#!%{_bindir}/env' | \
xargs -0 sed -i 's,#!%{_bindir}/env ,#!%{_bindir}/,'
@ -1089,10 +1052,6 @@ pushd src
popd
#------------------------------------------------------------------------
pushd build/pkgs/sagenb/src
%__python3 ./setup.py build
popd
pushd build/pkgs/sagetex/src
%__python3 ./setup.py build
popd
@ -1181,22 +1140,6 @@ pushd src
%endif
popd
#------------------------------------------------------------------------
pushd build/pkgs/sagenb/src
rm -f %{buildroot}%{python3_sitearch}/sagenb/data/sage3d/sage3d
%py3_install "--install-purelib=%{python3_sitearch}"
# jsmol
ln -sf %{_jsdir}/jsmol $SAGE_SHARE/jsmol
# sage3d
rm -f %{buildroot}%{_bindir}/sage3d
%if %{with sage3d}
ln -sf %{SAGE_LOCAL}/bin/sage3d %{buildroot}%{python3_sitearch}/sagenb/data/sage3d/sage3d
%endif
ln -sf %{python3_sitearch}/sagenb %{buildroot}%{SAGE_SRC}/sagenb
# use system mathjax
ln -sf %{_jsdir}/mathjax %{buildroot}%{python3_sitearch}/sagenb/data/mathjax
popd
#------------------------------------------------------------------------
%if %{with bundled_pexpect}
pushd build/pkgs/pexpect/src
@ -1407,16 +1350,6 @@ EOF
#------------------------------------------------------------------------
chmod +x %{buildroot}%{_bindir}/sage
#------------------------------------------------------------------------
%if %{with sage3d}
cat > %{buildroot}%{SAGE_LOCAL}/bin/sage3d << EOF
#!/bin/sh
java -classpath %{SAGE_SRC}/sage/sagenb/data/sage3d/lib/sage3d.jar:%{_javadir}/j3dcore.jar:%{_javadir}/vecmath.jar:%{_javadir}/j3dutils.jar org.sagemath.sage3d.ObjectViewerApp "\$1"
EOF
chmod +x %{buildroot}%{SAGE_LOCAL}/bin/sage3d
%endif
#------------------------------------------------------------------------
# adjust cython interface:
# o install csage headers
@ -1546,13 +1479,6 @@ rm -fr %{buildroot}%{SAGE_DOC}/output/inventory
find %{buildroot}%{SAGE_DOC} -type d -name _sources -exec rm -fr {} \+
%endif
# remove .po files
rm %{buildroot}%{python3_sitearch}/sagenb/translations/*/LC_MESSAGES/*.po
%if %{without sage3d}
rm -r %{buildroot}%{python3_sitearch}/sagenb/data/sage3d
%endif
# remove build directory in buildroot
[ -d %{buildroot}%{SAGE_SRC}/build ] &&
rm -r %{buildroot}%{SAGE_SRC}/build
@ -1841,75 +1767,9 @@ rm -fr %{SAGE_LOCAL}/var/lib/sage/installed/database_cremona_ellcurve-%{cremona_
%endif
#------------------------------------------------------------------------
%files notebook
%files jupyter
%{SAGE_ETC}/notebook-ipython
# GPLv2+
%{SAGE_SRC}/sagenb
%dir %{python3_sitearch}/sagenb
%{python3_sitearch}/sagenb/*.py*
%{python3_sitearch}/sagenb/__pycache__/
%{python3_sitearch}/sagenb/data/__pycache__/
%{python3_sitearch}/sagenb/testing/__pycache__/
%{python3_sitearch}/sagenb-*.egg-info
%dir %{python3_sitearch}/sagenb/data
# BSD
%{python3_sitearch}/sagenb/data/codemirror
# MIT
%{python3_sitearch}/sagenb/data/graph_editor
# ASL 2.0
%{python3_sitearch}/sagenb/data/highlight
# LGPLv2+
%{SAGE_SHARE}/jsmol
# (MIT or GPLv2) and (MIT and BSD and GPL)
%{python3_sitearch}/sagenb/data/jquery
# (MIT or GPLv2) and (MIT and BSD and GPL)
%{python3_sitearch}/sagenb/data/jqueryui
# Public Domain
%{python3_sitearch}/sagenb/data/json
# Symbolic link to $_jsdir/mathjax
%{python3_sitearch}/sagenb/data/mathjax
# Empty (do not run doctests flag file)
%{python3_sitearch}/sagenb/data/nodoctest.py*
# BSD
%{python3_sitearch}/sagenb/data/openid-realselector
# GPLv2+
%{python3_sitearch}/sagenb/data/sage
%if %{with sage3d}
# GPLv2+
%{python3_sitearch}/sagenb/data/sage3d
%endif
# LGPLv2+
%{python3_sitearch}/sagenb/data/tiny_mce
# LGPLv2+
%{python3_sitearch}/sagenb/data/zorn
# GPLv2+
%{python3_sitearch}/sagenb/flask_version
# GPLv2+
%{python3_sitearch}/sagenb/interfaces
# GPLv2+
%{python3_sitearch}/sagenb/misc
# GPLv2+
%{python3_sitearch}/sagenb/notebook
# GPLv2+
%{python3_sitearch}/sagenb/simple
# GPLv2+
%{python3_sitearch}/sagenb/storage
# GPLv2+
%dir %{python3_sitearch}/sagenb/testing
%{python3_sitearch}/sagenb/testing/*.py*
%{python3_sitearch}/sagenb/testing/tests
# ASL 2.0
%{python3_sitearch}/sagenb/testing/selenium
# GPLv2+
%dir %{python3_sitearch}/sagenb/translations
%lang(cs_CZ) %{python3_sitearch}/sagenb/translations/cs_CZ
%lang(de_AT) %{python3_sitearch}/sagenb/translations/de_AT
%lang(de_AT) %{python3_sitearch}/sagenb/translations/en_US
%lang(de_AT) %{python3_sitearch}/sagenb/translations/es_ES
%lang(de_AT) %{python3_sitearch}/sagenb/translations/fr_FR
%lang(pt_BR) %{python3_sitearch}/sagenb/translations/pt_BR
%lang(ru_RU) %{python3_sitearch}/sagenb/translations/ru_RU
%lang(uk_UA) %{python3_sitearch}/sagenb/translations/uk_UA
%if %{with bundled_widgetsnbextension}
%config(noreplace) %{_sysconfdir}/jupyter/nbconfig/notebook.d/*.json
%{_datadir}/jupyter/nbextensions/*
@ -1939,6 +1799,16 @@ rm -fr %{SAGE_LOCAL}/var/lib/sage/installed/database_cremona_ellcurve-%{cremona_
########################################################################
%changelog
* Fri Feb 28 2020 Jerry James <loganjerry@gmail.com> - 9.0-1
- Version 9.0 (bz 1756780, 1770880)
- Drop upstreamed -ecm and -primecount patches
- Add -escape patch
- The old notebook (sagenb) is no longer shipped, so drop the -sagenb and
-sagenb-python3 patches, the -notebook subpackage, and some BRs
- New -jupyter subpackage
- Add suitesparse BR
- Drop pathlib2 BR (bz 1797116)
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.9-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

View file

@ -1,2 +1,2 @@
SHA512 (cremona-2016-10-17.tar.gz) = 61f55ec5c15e32b5fdaf1fe8f2f3d50ba9afa542d8634918ec9493d739127f8c06a44b3cb1227a2979522baf61951ac37a67ae2b12c920958b04f8198d07ff57
SHA512 (sage-8.9.tar.gz) = 056646488f0b3fc092057c7ff807762c2f98d13748e14540ae9a67ceb3a3d62f8c0263c80c61a36c423353d7051e2dfae466a3f452f3910d9ba95ef26b385e94
SHA512 (cremona-2019-10-29.tar.gz) = 32fbb828f26f87191e39123762cfbd796aac9abf346f0dc981e8e3f390435b22d281be3031ea92ae7e18f4ce41af8054784ca0d550a08f17b05c54ca08b4c9c8
SHA512 (sage-9.0.tar.gz) = b0d3af3e8e9dd587314a33ec2f68e901dcd18cdd2cce4444fea5f04669dab6bb3e7db7642ff3e9ef1b1ffaf7a6f3c26272f889e1f5fb8fd63d5f5b68b5d168ed