mirror of
https://src.fedoraproject.org/rpms/sagemath.git
synced 2025-04-22 11:45:56 -04:00
Update to sagemath 8.5.
Also: - Bundle ipython again; Fedora version is too far ahead. Also have to bundle prompt_toolkit since Fedora version is too far ahead of bundled ipython. - Drop LANGUAGES variable setting, now ignored by the sagemath build system. - Drop unused SAGE_CBLAS variable from /usr/bin/sage. - Do not force the C locale when launching sagemath. - Allow the user to override SAGE_DEBUG in /usr/bin/sage. - Add -ecm, -giac, and -latte patches to fix interactions with external tools. - Add -sigfpe patch from upstream.
This commit is contained in:
parent
eaa777c690
commit
55beead27c
31 changed files with 674 additions and 684 deletions
|
@ -1,53 +1,7 @@
|
|||
--- build/pkgs/sagenb/src/sagenb/flask_version/worksheet_listing.py.orig 2018-01-24 04:17:47.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/flask_version/worksheet_listing.py 2018-10-25 13:25:53.284617298 -0600
|
||||
@@ -2,7 +2,12 @@
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
-import urllib, urlparse
|
||||
+try:
|
||||
+ from urllib.request import urlopen
|
||||
+ from urllib.parse import urlparse
|
||||
+except ImportError:
|
||||
+ from urlparse import urlparse
|
||||
+ from urllib import urlopen
|
||||
from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app
|
||||
from .decorators import login_required, guest_or_login_required, with_lock
|
||||
from flask_babel import Babel, gettext, ngettext, lazy_gettext
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig 2018-06-10 13:56:16.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/sphinxify.py 2018-10-25 13:29:39.187960000 -0600
|
||||
@@ -19,6 +19,7 @@ AUTHORS:
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
+import six.moves
|
||||
from tempfile import mkdtemp
|
||||
|
||||
# We import Sphinx on demand, to reduce Sage startup time.
|
||||
@@ -94,9 +95,8 @@ def sphinxify(docstring, format='html'):
|
||||
suffix = '.txt'
|
||||
output_name = base_name + suffix
|
||||
|
||||
- filed = open(rst_name, 'w')
|
||||
- filed.write(docstring)
|
||||
- filed.close()
|
||||
+ with open(rst_name, 'w') as filed:
|
||||
+ filed.write(docstring)
|
||||
|
||||
# Sphinx constructor: Sphinx(srcdir, confdir, outdir, doctreedir,
|
||||
# buildername, confoverrides, status, warning, freshenv).
|
||||
@@ -120,8 +120,8 @@ def sphinxify(docstring, format='html'):
|
||||
sys.path = old_sys_path
|
||||
|
||||
#We need to remove "_" from __builtin__ that the gettext module installs
|
||||
- import __builtin__
|
||||
- __builtin__.__dict__.pop('_', None)
|
||||
+ from six.moves import builtins
|
||||
+ builtins.__dict__.pop('_', None)
|
||||
|
||||
if os.path.exists(output_name):
|
||||
output = open(output_name, 'r').read()
|
||||
@@ -481,7 +481,7 @@ skip_picklability_check_modules = [
|
||||
diff -up build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig build/pkgs/sagenb/src/sagenb/misc/sphinxify.py
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/sphinxify.py.orig 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/sphinxify.py 2019-01-04 10:34:03.550082474 -0700
|
||||
@@ -480,7 +480,7 @@ skip_picklability_check_modules = [
|
||||
#'sage.misc.nested_class_test', # for test only
|
||||
'sage.misc.latex',
|
||||
'sage.misc.explain_pickle',
|
||||
|
@ -56,7 +10,7 @@
|
|||
]
|
||||
|
||||
def check_nested_class_picklability(app, what, name, obj, skip, options):
|
||||
@@ -532,7 +532,7 @@ def skip_member(app, what, name, obj, sk
|
||||
@@ -531,7 +531,7 @@ def skip_member(app, what, name, obj, sk
|
||||
if 'SAGE_CHECK_NESTED' in os.environ:
|
||||
check_nested_class_picklability(app, what, name, obj, skip, options)
|
||||
|
||||
|
@ -65,277 +19,42 @@
|
|||
return True
|
||||
|
||||
if (hasattr(obj, '__name__') and obj.__name__.find('.') != -1 and
|
||||
--- build/pkgs/sagenb/src/sagenb/misc/support.py.orig 2018-05-22 10:01:48.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/misc/support.py 2018-10-25 13:30:02.499892169 -0600
|
||||
@@ -17,7 +17,7 @@ import sys
|
||||
import pydoc
|
||||
|
||||
from six import iteritems
|
||||
-import __builtin__
|
||||
+import builtins
|
||||
|
||||
try:
|
||||
from cPickle import PicklingError
|
||||
@@ -467,7 +467,7 @@ def cython_import(filename, verbose=Fals
|
||||
use_cache=use_cache,
|
||||
create_local_c_file=create_local_c_file)
|
||||
sys.path.append(build_dir)
|
||||
- return __builtin__.__import__(name)
|
||||
+ return builtins.__import__(name)
|
||||
|
||||
|
||||
def cython_import_all(filename, globals, verbose=False, compile_message=False,
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/cell.py.orig 2018-08-29 08:44:38.823169061 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/cell.py 2018-10-25 13:30:55.707737342 -0600
|
||||
@@ -20,6 +20,7 @@ import shutil
|
||||
import textwrap
|
||||
import time
|
||||
from cgi import escape
|
||||
+from sys import maxsize
|
||||
|
||||
from sagenb.misc.misc import (word_wrap, strip_string_literals,
|
||||
set_restrictive_permissions, unicode_str,
|
||||
@@ -701,9 +702,8 @@ class Cell(Cell_generic):
|
||||
|
||||
# start with a random integer so that evaluations of the cell
|
||||
# from different runs have different version numbers.
|
||||
- from sys import maxint
|
||||
from random import randint
|
||||
- self._version = randint(0,maxint)
|
||||
+ self._version = randint(0,maxsize)
|
||||
|
||||
def __repr__(self):
|
||||
"""
|
||||
@@ -2189,9 +2189,8 @@ class Cell(Cell_generic):
|
||||
except AttributeError:
|
||||
# start with a random integer so that evaluations of the cell
|
||||
# from different runs have different version numbers.
|
||||
- from sys import maxint
|
||||
from random import randint
|
||||
- self._version = randint(0,maxint)
|
||||
+ self._version = randint(0,maxsize)
|
||||
return self._version
|
||||
|
||||
def time(self):
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig 2018-01-24 04:17:38.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2018-10-25 13:35:09.227001150 -0600
|
||||
@@ -7,7 +7,7 @@ file.
|
||||
|
||||
This takes an HTML document, i.e., Sage documentation, and returns it in
|
||||
the editable format (notebook worksheet format with evaluable examples). It
|
||||
-also returns a string representing the CSS link for the document. The SGML
|
||||
+also returns a string representing the CSS link for the document. The HTML
|
||||
parser is setup to return only the body of the HTML documentation page and
|
||||
to re-format Sage examples and type-setting.
|
||||
|
||||
diff -up build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py.orig 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/docHTMLProcessor.py 2019-01-04 10:39:26.659076379 -0700
|
||||
@@ -25,7 +25,7 @@ This module contains three classes:
|
||||
|
||||
.. NOTE::
|
||||
.. NOTE::
|
||||
|
||||
- This extension of sgmllib.SGMLParser was partly inspired by Mark
|
||||
- This extension of htmllib.HTMLParser was partly inspired by Mark
|
||||
+ This extension of html.parser.HTMLParser was partly inspired by Mark
|
||||
Pilgrim's 'Dive Into Python' examples.
|
||||
|
||||
AUTHORS:
|
||||
@@ -111,14 +111,14 @@ WARNING:
|
||||
#############################################################################
|
||||
from __future__ import unicode_literals
|
||||
|
||||
-from sgmllib import SGMLParser
|
||||
+from html.parser import HTMLParser
|
||||
from htmlentitydefs import entitydefs
|
||||
|
||||
from flask import Markup
|
||||
from sagenb.misc.misc import unicode_str
|
||||
|
||||
|
||||
-class genericHTMLProcessor(SGMLParser):
|
||||
+class genericHTMLProcessor(HTMLParser):
|
||||
r"""
|
||||
This class gathers the methods that are common to both classes
|
||||
:class:`sagenb.notebook.SphinxHTMLProcessor` and
|
||||
@@ -155,16 +155,16 @@ class genericHTMLProcessor(SGMLParser):
|
||||
@@ -155,7 +155,7 @@ class genericHTMLProcessor(HTMLParser):
|
||||
u'<h1 class="title">Title</h1>\n\n<p>nSome text</p>\n\n\n\n'
|
||||
|
||||
"""
|
||||
- # self.feed() is a SGMLParser method and starts everything
|
||||
"""
|
||||
- # self.feed() is a HTMLParser method and starts everything
|
||||
+ # self.feed() is an HTMLParser method and starts everything
|
||||
# off; Most of the functions here are extensions to
|
||||
- # SGMLParser, and may never actually be visibly called here.
|
||||
+ # HTMLParser, and may never actually be visibly called here.
|
||||
# HTMLParser, and may never actually be visibly called here.
|
||||
|
||||
# This module works with unicode literals. In case that input data is
|
||||
# ascii, exceptions may occur. So, input data must be converted to
|
||||
# unicode if it were not.
|
||||
doc_in = unicode_str(doc_in)
|
||||
- self.feed(doc_in) #SGMLParser call
|
||||
- self.close() #SGMLParser call
|
||||
+ self.feed(doc_in) #HTMLParser call
|
||||
+ self.close() #HTMLParser call
|
||||
self.hand_off_temp_pieces('to_doc_pieces')
|
||||
return self.all_pieces.replace('\\(', '').replace('\\)', '').replace('\\[', '').replace('\\]', '')
|
||||
|
||||
@@ -390,7 +390,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
else:
|
||||
# first occurrence of an output string
|
||||
# write /// denoting output
|
||||
- if output_flag == False:
|
||||
+ if output_flag is False:
|
||||
piece += '///'
|
||||
if p:
|
||||
piece += '\n' + p
|
||||
@@ -400,7 +400,29 @@ class genericHTMLProcessor(SGMLParser):
|
||||
piece += p
|
||||
piece += '\n}}}\n\n'
|
||||
return Markup(piece).unescape()
|
||||
-
|
||||
+
|
||||
+ def handle_starttag(self, tag, attrs):
|
||||
+ """
|
||||
+ introduced when replacing SGMLParser by HTMLParser
|
||||
+ """
|
||||
+ try:
|
||||
+ method = getattr(self, 'start_' + tag)
|
||||
+ except AttributeError:
|
||||
+ self.unknown_starttag(tag, attrs)
|
||||
+ else:
|
||||
+ method(attrs)
|
||||
+
|
||||
+ def handle_endtag(self, tag):
|
||||
+ """
|
||||
+ introduced when replacing SGMLParser by HTMLParser
|
||||
+ """
|
||||
+ try:
|
||||
+ method = getattr(self, 'end_' + tag)
|
||||
+ except AttributeError:
|
||||
+ self.unknown_endtag(tag)
|
||||
+ else:
|
||||
+ method()
|
||||
+
|
||||
##############################################
|
||||
## General tag handlers
|
||||
## These just append their HTML to self.temp_pieces.
|
||||
@@ -473,6 +495,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append(data)
|
||||
+
|
||||
def handle_charref(self, ref):
|
||||
r"""
|
||||
INPUT:
|
||||
@@ -540,6 +563,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append("<!--%(data)s-->" % locals())
|
||||
+
|
||||
def handle_pi(self, text):
|
||||
r"""
|
||||
Handle processing instructions
|
||||
@@ -585,7 +609,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
"""
|
||||
if self.keep_data:
|
||||
self.temp_pieces.append("<!%(text)s>" % locals())
|
||||
-
|
||||
+
|
||||
##############################################
|
||||
## Specific tag handlers
|
||||
def start_body(self, attrs):
|
||||
@@ -634,6 +658,7 @@ class genericHTMLProcessor(SGMLParser):
|
||||
['bunch ', 'of ', 'tmp ', 'strings']
|
||||
"""
|
||||
pass
|
||||
+
|
||||
def end_html(self):
|
||||
r"""
|
||||
INPUT:
|
||||
@@ -658,7 +683,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
def reset(self):
|
||||
r"""
|
||||
Initialize necessary variables. Called by
|
||||
- :meth:`SGMLParser.__init__`.
|
||||
+ :meth:`HTMLParser.__init__`.
|
||||
|
||||
EXAMPLES::
|
||||
|
||||
@@ -685,8 +710,8 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
|
||||
# counters
|
||||
self.cellcount = 0
|
||||
-
|
||||
- SGMLParser.reset(self)
|
||||
+
|
||||
+ HTMLParser.reset(self)
|
||||
|
||||
def false_positive_input_output_cell(self, cell_piece):
|
||||
r"""
|
||||
@@ -733,7 +758,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
Once we hit the <div> tag in a highlighted block,
|
||||
hand of all of the pieces we've encountered so far
|
||||
and ignore the tag.
|
||||
-
|
||||
+
|
||||
INPUT:
|
||||
|
||||
- ``attrs`` - list of tuple
|
||||
@@ -835,7 +860,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
self.hand_off_temp_pieces('to_cell_pieces')
|
||||
return
|
||||
self.temp_pieces.append("</div>")
|
||||
-
|
||||
+
|
||||
def start_pre(self, attrs):
|
||||
r"""
|
||||
Ignore tag <pre> when inside highligh div.
|
||||
@@ -1000,6 +1025,7 @@ class SphinxHTMLProcessor(genericHTMLPro
|
||||
if self.in_highlight_div:
|
||||
return
|
||||
self.unknown_starttag('span', attrs)
|
||||
+
|
||||
def end_span(self):
|
||||
r"""
|
||||
Ignore all spans that occur within highlighted blocks
|
||||
@@ -1095,7 +1121,7 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
def reset(self):
|
||||
r"""
|
||||
Initialize necessary variables. Called by
|
||||
- :meth:`SGMLParser.__init__`.
|
||||
+ :meth:`HTMLParser.__init__`.
|
||||
|
||||
EXAMPLES::
|
||||
|
||||
@@ -1125,8 +1151,8 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
|
||||
# counters
|
||||
self.cellcount = 0
|
||||
-
|
||||
- SGMLParser.reset(self)
|
||||
+
|
||||
+ HTMLParser.reset(self)
|
||||
|
||||
def false_positive_input_output_cell(self, cell_piece):
|
||||
r"""
|
||||
@@ -1162,7 +1188,7 @@ class docutilsHTMLProcessor(genericHTMLP
|
||||
piece = piece.replace('}','} ')
|
||||
piece += '\n</pre>'
|
||||
return piece
|
||||
-
|
||||
+
|
||||
#############################################
|
||||
## Specific tag handlers
|
||||
##
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/notebook.py.orig 2018-05-22 10:16:28.000000000 -0600
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/notebook.py 2018-10-25 13:35:37.122921027 -0600
|
||||
@@ -1268,7 +1268,7 @@ class Notebook(object):
|
||||
W.set_not_computing()
|
||||
|
||||
def quit(self):
|
||||
- for W in self.__worksheets.values():
|
||||
+ for W in list(self.__worksheets.values()):
|
||||
W.quit()
|
||||
|
||||
def update_worksheet_processes(self):
|
||||
diff -up build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py
|
||||
--- build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py.orig 2018-11-05 08:45:39.000000000 -0700
|
||||
+++ build/pkgs/sagenb/src/sagenb/notebook/wiki2html.py 2019-01-05 10:36:28.072250833 -0700
|
||||
@@ -59,7 +59,7 @@ class Parser:
|
||||
'parent': r'(?:%s)?' % re.escape(PARENT_PREFIX),
|
||||
}
|
||||
url_rule = r'%(url_guard)s(%(url)s)\:([^\s\<%(punct)s]|([%(punct)s][^\s\<%(punct)s]))+' % {
|
||||
- 'url_guard': ur'(^|(?<!\w))',
|
||||
+ 'url_guard': r'(^|(?<!\w))',
|
||||
'url': url_pattern,
|
||||
'punct': punct_pattern,
|
||||
}
|
||||
diff -up build/pkgs/sagetex/src/extractsagecode.py.orig build/pkgs/sagetex/src/extractsagecode.py
|
||||
--- build/pkgs/sagetex/src/extractsagecode.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/extractsagecode.py 2018-10-25 13:36:23.465787905 -0600
|
||||
+++ build/pkgs/sagetex/src/extractsagecode.py 2019-01-04 10:40:25.729978335 -0700
|
||||
@@ -45,8 +45,8 @@ See the SageTeX documentation for more d
|
||||
|
||||
try:
|
||||
|
@ -347,8 +66,9 @@
|
|||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
diff -up build/pkgs/sagetex/src/makestatic.py.orig build/pkgs/sagetex/src/makestatic.py
|
||||
--- build/pkgs/sagetex/src/makestatic.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/makestatic.py 2018-10-25 13:36:41.193736977 -0600
|
||||
+++ build/pkgs/sagetex/src/makestatic.py 2019-01-04 10:40:50.967509206 -0700
|
||||
@@ -45,8 +45,8 @@ See the SageTeX documentation for more d
|
||||
|
||||
try:
|
||||
|
@ -360,8 +80,9 @@
|
|||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
diff -up build/pkgs/sagetex/src/remote-sagetex.py.orig build/pkgs/sagetex/src/remote-sagetex.py
|
||||
--- build/pkgs/sagetex/src/remote-sagetex.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/remote-sagetex.py 2018-10-25 13:38:40.218395127 -0600
|
||||
+++ build/pkgs/sagetex/src/remote-sagetex.py 2019-01-04 10:43:03.728041391 -0700
|
||||
@@ -24,12 +24,11 @@
|
||||
## You should have received a copy of the GNU General Public License along
|
||||
## with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
@ -424,8 +145,9 @@
|
|||
|
||||
if not password:
|
||||
from getpass import getpass
|
||||
diff -up build/pkgs/sagetex/src/run-sagetex-if-necessary.py.orig build/pkgs/sagetex/src/run-sagetex-if-necessary.py
|
||||
--- build/pkgs/sagetex/src/run-sagetex-if-necessary.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/run-sagetex-if-necessary.py 2018-10-25 13:39:39.506224849 -0600
|
||||
+++ build/pkgs/sagetex/src/run-sagetex-if-necessary.py 2019-01-04 10:44:12.087770682 -0700
|
||||
@@ -58,7 +58,7 @@ with open(src + '.tex') as texf:
|
||||
break
|
||||
|
||||
|
@ -465,8 +187,9 @@
|
|||
else:
|
||||
- print 'Not necessary to run Sage on {0}.'.format(src)
|
||||
+ print('Not necessary to run Sage on {0}.'.format(src))
|
||||
diff -up build/pkgs/sagetex/src/sagetexparse.py.orig build/pkgs/sagetex/src/sagetexparse.py
|
||||
--- build/pkgs/sagetex/src/sagetexparse.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetexparse.py 2018-10-25 13:40:02.522158738 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetexparse.py 2019-01-04 10:44:35.398337372 -0700
|
||||
@@ -52,7 +52,7 @@ class SoutParser():
|
||||
try:
|
||||
OneOrMore(parselabel).parseFile(fn)
|
||||
|
@ -476,8 +199,9 @@
|
|||
sys.exit(1)
|
||||
def newlabel(self, s, l, t):
|
||||
self.label.append(t.result[1:-1])
|
||||
diff -up build/pkgs/sagetex/src/sagetex.py.orig build/pkgs/sagetex/src/sagetex.py
|
||||
--- build/pkgs/sagetex/src/sagetex.py.orig 2015-08-26 17:28:42.000000000 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetex.py 2018-10-25 13:42:20.168763355 -0600
|
||||
+++ build/pkgs/sagetex/src/sagetex.py 2019-01-04 10:46:09.685584716 -0700
|
||||
@@ -73,10 +73,10 @@ from your current version of Sage; see
|
||||
http://www.sagemath.org/doc/installation/sagetex.html.""".format(jobname,
|
||||
version, pyversion)
|
||||
|
@ -530,8 +254,9 @@
|
|||
_p_.save(filename=newfilename, **kwargs)
|
||||
break
|
||||
else:
|
||||
--- src/doc/common/conf.py.orig 2018-10-17 17:13:34.000000000 -0600
|
||||
+++ src/doc/common/conf.py 2018-10-25 13:43:39.882534395 -0600
|
||||
diff -up src/doc/common/conf.py.orig src/doc/common/conf.py
|
||||
--- src/doc/common/conf.py.orig 2018-12-22 16:37:06.000000000 -0700
|
||||
+++ src/doc/common/conf.py 2019-01-04 10:46:46.293895744 -0700
|
||||
@@ -490,7 +490,7 @@ skip_picklability_check_modules = [
|
||||
#'sage.misc.nested_class_test', # for test only
|
||||
'sage.misc.latex',
|
||||
|
@ -550,48 +275,30 @@
|
|||
return True
|
||||
|
||||
objname = getattr(obj, "__name__", None)
|
||||
--- src/sage/arith/long.pxd.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/arith/long.pxd 2018-10-25 13:46:00.073131738 -0600
|
||||
@@ -19,7 +19,7 @@ from cpython.object cimport Py_SIZE
|
||||
from cpython.int cimport PyInt_AS_LONG
|
||||
from cpython.long cimport PyLong_AsLong
|
||||
from cpython.number cimport PyNumber_Index, PyIndex_Check
|
||||
-from cpython.longintrepr cimport PyLongObject, PyLong_SHIFT, digit
|
||||
+from cpython.longintrepr cimport py_long, PyLong_SHIFT, digit
|
||||
|
||||
from sage.libs.gmp.mpz cimport mpz_fits_slong_p, mpz_get_si
|
||||
from sage.rings.integer_fake cimport is_Integer, Integer_AS_MPZ
|
||||
@@ -208,7 +208,7 @@ cdef inline bint integer_check_long_py(x
|
||||
return 0
|
||||
|
||||
# x is a Python "long" (called "int" on Python 3)
|
||||
- cdef const digit* D = (<PyLongObject*>x).ob_digit
|
||||
+ cdef const digit* D = (<py_long>x).ob_digit
|
||||
cdef Py_ssize_t size = Py_SIZE(x)
|
||||
|
||||
# We assume that PyLong_SHIFT is 15 on a 32-bit system and 30 on a
|
||||
--- src/sage/combinat/finite_state_machine.py.orig 2018-10-17 17:13:35.000000000 -0600
|
||||
+++ src/sage/combinat/finite_state_machine.py 2018-10-25 13:47:08.277935821 -0600
|
||||
@@ -937,7 +937,7 @@ from six.moves import range
|
||||
diff -up src/sage/combinat/finite_state_machine.py.orig src/sage/combinat/finite_state_machine.py
|
||||
--- src/sage/combinat/finite_state_machine.py.orig 2018-12-22 16:37:07.000000000 -0700
|
||||
+++ src/sage/combinat/finite_state_machine.py 2019-01-04 10:49:30.519802159 -0700
|
||||
@@ -934,7 +934,7 @@ import six
|
||||
from six.moves import range, zip_longest, zip
|
||||
from six import itervalues
|
||||
from six.moves import zip_longest
|
||||
|
||||
-import collections
|
||||
+import collections.abc
|
||||
import itertools
|
||||
|
||||
import sage
|
||||
@@ -14140,7 +14140,7 @@ def is_FSMProcessIterator(PI):
|
||||
from sage.calculus.var import var
|
||||
@@ -14253,7 +14253,7 @@ def is_FSMProcessIterator(PI):
|
||||
|
||||
|
||||
class FSMProcessIterator(sage.structure.sage_object.SageObject,
|
||||
class FSMProcessIterator(SageObject,
|
||||
- collections.Iterator):
|
||||
+ collections.abc.Iterator):
|
||||
"""
|
||||
This class takes an input, feeds it into a finite state machine
|
||||
(automaton or transducer, in particular), tests whether this was
|
||||
--- src/sage/cpython/dict_del_by_value.pyx.orig 2018-10-17 17:13:36.000000000 -0600
|
||||
+++ src/sage/cpython/dict_del_by_value.pyx 2018-10-25 13:48:05.887770337 -0600
|
||||
diff -up src/sage/cpython/dict_del_by_value.pyx.orig src/sage/cpython/dict_del_by_value.pyx
|
||||
--- src/sage/cpython/dict_del_by_value.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/cpython/dict_del_by_value.pyx 2019-01-04 10:50:27.178734667 -0700
|
||||
@@ -347,8 +347,8 @@ ELIF PY_VERSION_HEX>=0x03060000:
|
||||
cdef MyPyDictKeysObject * keys = <MyPyDictKeysObject *>(mp.ma_keys)
|
||||
cdef size_t perturb
|
||||
|
@ -603,48 +310,135 @@
|
|||
|
||||
if mp.ma_values != NULL:
|
||||
print ("del_dictitem_by_exact_value cannot be applied to a shared key dict")
|
||||
--- src/sage/libs/gap/util.pyx.orig 2018-10-17 17:13:52.000000000 -0600
|
||||
+++ src/sage/libs/gap/util.pyx 2018-10-25 13:50:51.168295628 -0600
|
||||
@@ -171,7 +171,7 @@ def gap_root():
|
||||
return GAP_ROOT_DIR
|
||||
print('The gap-4.5.5.spkg (or later) seems to be not installed!')
|
||||
gap_sh = open(os.path.join(SAGE_LOCAL, 'bin', 'gap')).read().splitlines()
|
||||
- gapdir = filter(lambda dir:dir.strip().startswith('GAP_DIR'), gap_sh)[0]
|
||||
+ gapdir = next(filter(lambda dir:dir.strip().startswith('GAP_DIR'), gap_sh))
|
||||
gapdir = gapdir.split('"')[1]
|
||||
gapdir = gapdir.replace('$SAGE_LOCAL', SAGE_LOCAL)
|
||||
return gapdir
|
||||
--- src/sage/libs/gmp/pylong.pyx.orig 2018-10-17 17:13:52.000000000 -0600
|
||||
+++ src/sage/libs/gmp/pylong.pyx 2018-10-25 13:52:12.296063129 -0600
|
||||
@@ -28,7 +28,7 @@ AUTHORS:
|
||||
from cpython.object cimport Py_SIZE
|
||||
from cpython.int cimport PyInt_FromLong
|
||||
from cpython.long cimport PyLong_FromLong
|
||||
-from cpython.longintrepr cimport _PyLong_New, PyLongObject, digit, PyLong_SHIFT
|
||||
+from cpython.longintrepr cimport _PyLong_New, py_long, digit, PyLong_SHIFT
|
||||
from .mpz cimport *
|
||||
diff -up src/sage/geometry/triangulation/point_configuration.py.orig src/sage/geometry/triangulation/point_configuration.py
|
||||
--- src/sage/geometry/triangulation/point_configuration.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/geometry/triangulation/point_configuration.py 2019-01-15 14:12:54.343637341 -0700
|
||||
@@ -625,7 +625,7 @@ class PointConfiguration(UniqueRepresent
|
||||
['{{0,1,2,4},{1,2,3,4}}']
|
||||
"""
|
||||
timeout = 600
|
||||
- proc = pexpect.spawn(executable, timeout=timeout)
|
||||
+ proc = pexpect.spawn(executable, timeout=timeout, encoding='utf-8')
|
||||
proc.expect(r'Evaluating Commandline Options \.\.\.')
|
||||
proc.expect(r'\.\.\. done\.')
|
||||
proc.setecho(0)
|
||||
diff -up src/sage/interfaces/frobby.py.orig src/sage/interfaces/frobby.py
|
||||
--- src/sage/interfaces/frobby.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/frobby.py 2019-01-15 14:09:39.587064736 -0700
|
||||
@@ -77,7 +77,7 @@ class Frobby:
|
||||
print("Frobby command: ", repr(command))
|
||||
print("Frobby input:\n", input)
|
||||
|
||||
cdef extern from *:
|
||||
@@ -54,7 +54,7 @@ cdef mpz_get_pylong_large(mpz_srcptr z):
|
||||
cdef size_t nbits = mpz_sizeinbase(z, 2)
|
||||
cdef size_t pylong_size = (nbits + PyLong_SHIFT - 1) // PyLong_SHIFT
|
||||
L = _PyLong_New(pylong_size)
|
||||
- mpz_export((<PyLongObject*>L).ob_digit, NULL,
|
||||
+ mpz_export(L.ob_digit, NULL,
|
||||
-1, sizeof(digit), 0, PyLong_nails, z)
|
||||
if mpz_sgn(z) < 0:
|
||||
# Set correct size (use a pointer to hack around Cython's
|
||||
@@ -91,7 +91,7 @@ cdef int mpz_set_pylong(mpz_ptr z, L) ex
|
||||
if pylong_size < 0:
|
||||
pylong_size = -pylong_size
|
||||
mpz_import(z, pylong_size, -1, sizeof(digit), 0, PyLong_nails,
|
||||
- (<PyLongObject*>L).ob_digit)
|
||||
+ (<py_long>L).ob_digit)
|
||||
if Py_SIZE(L) < 0:
|
||||
mpz_neg(z, z)
|
||||
- process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE)
|
||||
+ process = Popen(command, stdin = PIPE, stdout = PIPE, stderr = PIPE, encoding='utf-8')
|
||||
output, err = process.communicate(input = input)
|
||||
|
||||
--- src/sage/misc/parser.pyx.orig 2018-10-17 17:13:54.000000000 -0600
|
||||
+++ src/sage/misc/parser.pyx 2018-10-25 13:57:47.183108335 -0600
|
||||
if verbose:
|
||||
diff -up src/sage/interfaces/gfan.py.orig src/sage/interfaces/gfan.py
|
||||
--- src/sage/interfaces/gfan.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/gfan.py 2019-01-17 16:15:45.185372585 -0700
|
||||
@@ -66,7 +66,7 @@ class Gfan(object):
|
||||
if six.PY2:
|
||||
enc_kwargs = {}
|
||||
else:
|
||||
- enc_kwargs = {'encoding': 'latin-1'}
|
||||
+ enc_kwargs = {'encoding': 'utf-8'}
|
||||
|
||||
gfan_processes = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE,
|
||||
**enc_kwargs)
|
||||
diff -up src/sage/interfaces/gp.py.orig src/sage/interfaces/gp.py
|
||||
--- src/sage/interfaces/gp.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/gp.py 2019-01-15 15:32:12.479565952 -0700
|
||||
@@ -934,17 +934,6 @@ class GpElement(ExpectElement):
|
||||
"""
|
||||
return repr(self.type()) == 't_STR'
|
||||
|
||||
- def __long__(self):
|
||||
- """
|
||||
- Return Python long.
|
||||
-
|
||||
- EXAMPLES::
|
||||
-
|
||||
- sage: long(gp(10))
|
||||
- 10L
|
||||
- """
|
||||
- return long(str(self))
|
||||
-
|
||||
def __float__(self):
|
||||
"""
|
||||
Return Python float.
|
||||
diff -up src/sage/interfaces/latte.py.orig src/sage/interfaces/latte.py
|
||||
--- src/sage/interfaces/latte.py.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/latte.py 2019-01-16 09:44:45.946769879 -0700
|
||||
@@ -147,6 +147,7 @@ def count(arg, ehrhart_polynomial=False,
|
||||
latte_proc = Popen(args,
|
||||
stdin=PIPE, stdout=PIPE,
|
||||
stderr=(None if verbose else PIPE),
|
||||
+ encoding='utf-8',
|
||||
cwd=str(SAGE_TMP))
|
||||
|
||||
ans, err = latte_proc.communicate(arg)
|
||||
@@ -352,6 +353,7 @@ def integrate(arg, polynomial=None, algo
|
||||
latte_proc = Popen(args,
|
||||
stdin=PIPE, stdout=PIPE,
|
||||
stderr=(None if verbose else PIPE),
|
||||
+ encoding='utf-8',
|
||||
cwd=str(SAGE_TMP))
|
||||
|
||||
ans, err = latte_proc.communicate(arg)
|
||||
diff -up src/sage/interfaces/sagespawn.pyx.orig src/sage/interfaces/sagespawn.pyx
|
||||
--- src/sage/interfaces/sagespawn.pyx.orig 2018-12-22 16:37:08.000000000 -0700
|
||||
+++ src/sage/interfaces/sagespawn.pyx 2019-01-16 12:08:26.371966835 -0700
|
||||
@@ -1,6 +1,6 @@
|
||||
"""
|
||||
Sage wrapper around pexpect's ``spawn`` class and
|
||||
-the ptyprocess's ``PtyProcess`` class.
|
||||
+the ptyprocess's ``PtyProcessUnicode`` class.
|
||||
|
||||
AUTHOR:
|
||||
|
||||
@@ -21,7 +21,7 @@ AUTHOR:
|
||||
#*****************************************************************************
|
||||
|
||||
from pexpect import *
|
||||
-from ptyprocess import PtyProcess
|
||||
+from ptyprocess import PtyProcessUnicode
|
||||
|
||||
from cpython.ref cimport Py_INCREF
|
||||
from libc.signal cimport *
|
||||
@@ -30,7 +30,6 @@ from posix.unistd cimport getpid, getpgi
|
||||
|
||||
from time import sleep
|
||||
|
||||
-from sage.cpython.string cimport str_to_bytes
|
||||
from sage.interfaces.process cimport ContainChildren
|
||||
|
||||
|
||||
@@ -171,7 +170,7 @@ class SageSpawn(spawn):
|
||||
return ret
|
||||
|
||||
|
||||
-class SagePtyProcess(PtyProcess):
|
||||
+class SagePtyProcess(PtyProcessUnicode):
|
||||
def close(self, force=None):
|
||||
"""
|
||||
Quit the child process: send the quit string, close the
|
||||
@@ -192,11 +191,7 @@ class SagePtyProcess(PtyProcess):
|
||||
if self.quit_string is not None:
|
||||
try:
|
||||
# This can fail if the process already exited
|
||||
- # PtyProcess.write takes bytes; ideally we would use
|
||||
- # an encoding picked specifically for the target process
|
||||
- # but the default (UTF-8) will do now, since I don't
|
||||
- # think we have any non-ASCII quit_strings anyways.
|
||||
- self.write(str_to_bytes(self.quit_string))
|
||||
+ self.write(self.quit_string)
|
||||
except (OSError, IOError):
|
||||
pass
|
||||
self.fileobj.close()
|
||||
diff -up src/sage/misc/parser.pyx.orig src/sage/misc/parser.pyx
|
||||
--- src/sage/misc/parser.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/misc/parser.pyx 2019-01-04 10:57:51.277367597 -0700
|
||||
@@ -96,7 +96,7 @@ def token_to_str(int token):
|
||||
|
||||
|
||||
|
@ -943,20 +737,22 @@
|
|||
tokens.backtrack()
|
||||
return self.p_list(tokens)
|
||||
else:
|
||||
--- src/sage/plot/plot3d/plot3d.py.orig 2018-10-17 17:14:08.000000000 -0600
|
||||
+++ src/sage/plot/plot3d/plot3d.py 2018-10-25 13:58:48.502933505 -0600
|
||||
@@ -194,7 +194,8 @@ class _Coordinates(object):
|
||||
diff -up src/sage/plot/plot3d/plot3d.py.orig src/sage/plot/plot3d/plot3d.py
|
||||
--- src/sage/plot/plot3d/plot3d.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/plot/plot3d/plot3d.py 2019-01-04 10:58:51.476233419 -0700
|
||||
@@ -188,7 +188,8 @@ class _Coordinates(object):
|
||||
sage: arb((x+z,y*z,z), z, (x,y))
|
||||
Arbitrary Coordinates coordinate transform (z in terms of x, y)
|
||||
"""
|
||||
import inspect
|
||||
- all_vars = getargspec(self.transform).args[1:]
|
||||
- all_vars = sage_getargspec(self.transform).args[1:]
|
||||
+ args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = inspect.getfullargspec(self.transform)
|
||||
+ all_vars=args[1:]
|
||||
if set(all_vars) != set(indep_vars + [dep_var]):
|
||||
raise ValueError('variables were specified incorrectly for this coordinate system; incorrect variables were %s'%list(set(all_vars).symmetric_difference(set(indep_vars+[dep_var]))))
|
||||
self.dep_var = dep_var
|
||||
--- src/sage/plot/point.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/plot/point.py 2018-10-25 13:59:15.278857161 -0600
|
||||
diff -up src/sage/plot/point.py.orig src/sage/plot/point.py
|
||||
--- src/sage/plot/point.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/plot/point.py 2019-01-04 10:59:15.506780663 -0700
|
||||
@@ -29,7 +29,7 @@ TESTS::
|
||||
from sage.misc.decorators import options, rename_keyword
|
||||
from sage.plot.colors import to_mpl_color
|
||||
|
@ -975,8 +771,9 @@
|
|||
points = list(points)
|
||||
|
||||
try:
|
||||
--- src/sage/repl/display/fancy_repr.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/repl/display/fancy_repr.py 2018-10-25 14:00:10.301700282 -0600
|
||||
diff -up src/sage/repl/display/fancy_repr.py.orig src/sage/repl/display/fancy_repr.py
|
||||
--- src/sage/repl/display/fancy_repr.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/repl/display/fancy_repr.py 2019-01-04 11:00:18.210599287 -0700
|
||||
@@ -15,7 +15,7 @@ Representations of objects.
|
||||
import types
|
||||
|
||||
|
@ -995,20 +792,23 @@
|
|||
p.text(klass_repr(obj))
|
||||
else:
|
||||
# A user-provided repr. Find newlines and replace them with p.break_()
|
||||
--- src/sage/repl/ipython_kernel/interact.py.orig 2018-10-17 17:14:09.000000000 -0600
|
||||
+++ src/sage/repl/ipython_kernel/interact.py 2018-10-25 14:00:53.038578439 -0600
|
||||
@@ -36,7 +36,7 @@ EXAMPLES::
|
||||
diff -up src/sage/repl/ipython_kernel/interact.py.orig src/sage/repl/ipython_kernel/interact.py
|
||||
--- src/sage/repl/ipython_kernel/interact.py.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/repl/ipython_kernel/interact.py 2019-01-04 11:01:50.722856305 -0700
|
||||
@@ -35,7 +35,8 @@ EXAMPLES::
|
||||
|
||||
from ipywidgets.widgets import SelectionSlider, ValueWidget, ToggleButtons
|
||||
from ipywidgets.widgets.interaction import interactive, signature
|
||||
from copy import copy
|
||||
-from collections import Iterable, Iterator
|
||||
-from collections import Iterable, Iterator, OrderedDict
|
||||
+from collections.abc import Iterable, Iterator
|
||||
+from collections import OrderedDict
|
||||
from .widgets import EvalText, SageColorPicker
|
||||
from sage.structure.element import parent
|
||||
from sage.symbolic.ring import SR
|
||||
--- src/sage/rings/integer.pyx.orig 2018-10-17 17:14:11.000000000 -0600
|
||||
+++ src/sage/rings/integer.pyx 2018-10-25 14:01:31.320469294 -0600
|
||||
@@ -6940,7 +6940,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
|
||||
diff -up src/sage/rings/integer.pyx.orig
|
||||
--- src/sage/rings/integer.pyx.orig 2018-12-22 16:37:09.000000000 -0700
|
||||
+++ src/sage/rings/integer.pyx 2019-01-04 11:02:56.122624135 -0700
|
||||
@@ -6976,7 +6976,7 @@ cdef int mpz_set_str_python(mpz_ptr z, c
|
||||
while x[0] == c' ': x += 1 # Strip spaces
|
||||
|
||||
# Disallow a sign here
|
||||
|
@ -1017,8 +817,22 @@
|
|||
x = "" # Force an error below
|
||||
|
||||
assert base >= 2
|
||||
--- src/sage/rings/real_mpfi.pyx.orig 2018-10-17 17:14:17.000000000 -0600
|
||||
+++ src/sage/rings/real_mpfi.pyx 2018-10-25 14:02:07.823365223 -0600
|
||||
diff -up src/sage/rings/polynomial/pbori.pyx.orig src/sage/rings/polynomial/pbori.pyx
|
||||
--- src/sage/rings/polynomial/pbori.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/polynomial/pbori.pyx 2019-01-04 12:21:06.204500703 -0700
|
||||
@@ -4782,8 +4782,7 @@ cdef class PolynomialConstruct:
|
||||
# So, it is just a conversion. [Simon King]
|
||||
return (<BooleanPolynomialRing>ring)._element_constructor_(x)
|
||||
|
||||
- raise TypeError("Cannot generate Boolean polynomial from %s , %s%" %
|
||||
- (type(x), type(ring)))
|
||||
+ raise TypeError(f"Cannot generate Boolean polynomial from {type(x)}, {type(ring)}")
|
||||
|
||||
|
||||
cdef class MonomialConstruct:
|
||||
diff -up src/sage/rings/real_mpfi.pyx.orig src/sage/rings/real_mpfi.pyx
|
||||
--- src/sage/rings/real_mpfi.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/real_mpfi.pyx 2019-01-04 11:03:53.650540277 -0700
|
||||
@@ -1951,12 +1951,12 @@ cdef class RealIntervalFieldElement(Ring
|
||||
|
||||
cdef long digits
|
||||
|
@ -1043,8 +857,33 @@
|
|||
digits -= 1
|
||||
mant_string = bytes_to_str(tmp_cstr+1)
|
||||
sign_string = bytes_to_str(b'-')
|
||||
--- src/sage/symbolic/expression.pyx.orig 2018-10-17 17:14:17.000000000 -0600
|
||||
+++ src/sage/symbolic/expression.pyx 2018-10-25 14:03:50.129073537 -0600
|
||||
diff -up src/sage/rings/real_mpfr.pyx.orig src/sage/rings/real_mpfr.pyx
|
||||
--- src/sage/rings/real_mpfr.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/rings/real_mpfr.pyx 2019-01-04 12:22:18.194171036 -0700
|
||||
@@ -2032,7 +2032,7 @@ cdef class RealNumber(sage.structure.ele
|
||||
if s is NULL:
|
||||
raise RuntimeError("unable to convert an mpfr number to a string")
|
||||
# t contains just digits (no sign, decimal point or exponent)
|
||||
- if s[0] == '-':
|
||||
+ if s[0] == c'-':
|
||||
sgn = "-"
|
||||
t = char_to_str(s + 1)
|
||||
else:
|
||||
diff -up src/sage/structure/sage_object.pyx.orig src/sage/structure/sage_object.pyx
|
||||
--- src/sage/structure/sage_object.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/structure/sage_object.pyx 2019-01-04 13:48:09.055790438 -0700
|
||||
@@ -665,7 +665,7 @@ cdef class SageObject:
|
||||
try:
|
||||
s = self._interface_init_(I)
|
||||
except Exception:
|
||||
- raise NotImplementedError("coercion of object %s to %s not implemented:\n%s\n%s" % (repr(self), I))
|
||||
+ raise NotImplementedError(f"coercion of object {repr(self)} to {I} not implemented")
|
||||
X = I(s)
|
||||
if c:
|
||||
try:
|
||||
diff -up src/sage/symbolic/expression.pyx.orig src/sage/symbolic/expression.pyx
|
||||
--- src/sage/symbolic/expression.pyx.orig 2018-12-22 16:37:10.000000000 -0700
|
||||
+++ src/sage/symbolic/expression.pyx 2019-01-04 11:04:35.829745704 -0700
|
||||
@@ -12955,7 +12955,7 @@ cdef class hold_class:
|
||||
sage: SR(2)^5
|
||||
32
|
||||
|
@ -1063,12 +902,14 @@
|
|||
|
||||
def start(self):
|
||||
"""
|
||||
--- src/setup.py.orig 2018-10-25 11:40:44.402943434 -0600
|
||||
+++ src/setup.py 2018-10-25 14:04:15.582000968 -0600
|
||||
@@ -284,6 +284,7 @@ class sage_build_cython(Command):
|
||||
diff -up src/setup.py.orig src/setup.py
|
||||
--- src/setup.py.orig 2019-01-04 10:27:47.032123257 -0700
|
||||
+++ src/setup.py 2019-01-04 11:05:11.337077724 -0700
|
||||
@@ -284,7 +284,7 @@ class sage_build_cython(Command):
|
||||
cdivision=True,
|
||||
embedsignature=True,
|
||||
fast_getattr=True,
|
||||
- language_level="2",
|
||||
+ language_level=3,
|
||||
preliminary_late_includes_cy28=True,
|
||||
profile=self.profile,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue