Add patches to fix build with Python 3.8 and Numpy 1.17
Signed-off-by: Robert-André Mauchin <zebob.m@gmail.com>
This commit is contained in:
parent
24fe7598b1
commit
7bb3831609
71
0001-Exception-changed-after-numpy-1.17.patch
Normal file
71
0001-Exception-changed-after-numpy-1.17.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From 01af15a136bdfe6bbd0c3c155711632a69e55f98 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "S.Y. Lee" <sylee957@gmail.com>
|
||||||
|
Date: Fri, 2 Aug 2019 07:48:19 +0900
|
||||||
|
Subject: [PATCH 1/2] Exception changed after numpy 1.17
|
||||||
|
|
||||||
|
---
|
||||||
|
sympy/utilities/lambdify.py | 9 +++++++--
|
||||||
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/sympy/utilities/lambdify.py b/sympy/utilities/lambdify.py
|
||||||
|
index 35ae7f83d0f..bb0f51a6bd7 100644
|
||||||
|
--- a/sympy/utilities/lambdify.py
|
||||||
|
+++ b/sympy/utilities/lambdify.py
|
||||||
|
@@ -484,10 +484,15 @@ def lambdify(args, expr, modules=None, p
|
||||||
|
|
||||||
|
But if we try to pass in a SymPy expression, it fails
|
||||||
|
|
||||||
|
- >>> g(x + 1)
|
||||||
|
+ >>> try:
|
||||||
|
+ ... g(x + 1)
|
||||||
|
+ ... # NumPy release after 1.17 raises TypeError instead of
|
||||||
|
+ ... # AttributeError
|
||||||
|
+ ... except (AttributeError, TypeError):
|
||||||
|
+ ... raise AttributeError() # doctest: +IGNORE_EXCEPTION_DETAIL
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
- AttributeError: 'Add' object has no attribute 'sin'
|
||||||
|
+ AttributeError:
|
||||||
|
|
||||||
|
Now, let's look at what happened. The reason this fails is that ``g``
|
||||||
|
calls ``numpy.sin`` on the input expression, and ``numpy.sin`` does not
|
||||||
|
|
||||||
|
From 59c2f96043713fa2fdb7cbf4f0335bbb9667fb54 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "S.Y. Lee" <sylee957@gmail.com>
|
||||||
|
Date: Fri, 2 Aug 2019 10:06:44 +0900
|
||||||
|
Subject: [PATCH 2/2] Make numpy test version aware
|
||||||
|
|
||||||
|
---
|
||||||
|
sympy/external/tests/test_numpy.py | 12 ++++++++++--
|
||||||
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/sympy/external/tests/test_numpy.py b/sympy/external/tests/test_numpy.py
|
||||||
|
index 6663d1afd76..1b752bcfc1b 100644
|
||||||
|
--- a/sympy/external/tests/test_numpy.py
|
||||||
|
+++ b/sympy/external/tests/test_numpy.py
|
||||||
|
@@ -4,6 +4,7 @@
|
||||||
|
# Always write regular SymPy tests for anything, that can be tested in pure
|
||||||
|
# Python (without numpy). Here we test everything, that a user may need when
|
||||||
|
# using SymPy with NumPy
|
||||||
|
+from distutils.version import LooseVersion
|
||||||
|
|
||||||
|
from sympy.external import import_module
|
||||||
|
|
||||||
|
@@ -231,8 +232,15 @@ def test_lambdify():
|
||||||
|
f = lambdify(x, sin(x), "numpy")
|
||||||
|
prec = 1e-15
|
||||||
|
assert -prec < f(0.2) - sin02 < prec
|
||||||
|
- with raises(AttributeError):
|
||||||
|
- f(x) # if this succeeds, it can't be a numpy function
|
||||||
|
+
|
||||||
|
+ # if this succeeds, it can't be a numpy function
|
||||||
|
+
|
||||||
|
+ if LooseVersion(numpy.__version__) >= LooseVersion('1.17'):
|
||||||
|
+ with raises(TypeError):
|
||||||
|
+ f(x)
|
||||||
|
+ else:
|
||||||
|
+ with raises(AttributeError):
|
||||||
|
+ f(x)
|
||||||
|
|
||||||
|
|
||||||
|
def test_lambdify_matrix():
|
193
0001-Fix-more-compatibility-issues-with-Python3.8.patch
Normal file
193
0001-Fix-more-compatibility-issues-with-Python3.8.patch
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
From 5ea93bc9ab7ae9829ed596e2d53976962164ba78 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vighnesh Shenoy <vighneshq@gmail.com>
|
||||||
|
Date: Sun, 9 Jun 2019 23:34:21 +0530
|
||||||
|
Subject: [PATCH] Issue #16977, fix more compatibility issues with Python3.8.
|
||||||
|
|
||||||
|
xml.dom.minidom preserves attribute order in Python3.8 which causes
|
||||||
|
some test failures. Modified the order of attribute insertion to
|
||||||
|
ensure that tests run on both 3.8 & earlier versions. Modified the use
|
||||||
|
of officially removed time.clock with a conditional import in
|
||||||
|
sympy/core/compatibility.py
|
||||||
|
---
|
||||||
|
examples/advanced/pidigits.py | 2 +-
|
||||||
|
examples/advanced/pyglet_plotting.py | 4 ++--
|
||||||
|
sympy/core/compatibility.py | 5 ++++
|
||||||
|
sympy/plotting/pygletplot/plot_window.py | 2 +-
|
||||||
|
sympy/printing/mathml.py | 30 ++++++++++++------------
|
||||||
|
5 files changed, 24 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/examples/advanced/pidigits.py b/examples/advanced/pidigits.py
|
||||||
|
index 430ea5aaf83..e444ba2276b 100755
|
||||||
|
--- a/examples/advanced/pidigits.py
|
||||||
|
+++ b/examples/advanced/pidigits.py
|
||||||
|
@@ -10,7 +10,7 @@ from mpmath import libmp, pi
|
||||||
|
from mpmath import functions as mpf_funs
|
||||||
|
|
||||||
|
import math
|
||||||
|
-from time import clock
|
||||||
|
+from sympy.core.compatibility import clock
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/examples/advanced/pyglet_plotting.py b/examples/advanced/pyglet_plotting.py
|
||||||
|
index 16d13ac5137..c12ed54f5b1 100755
|
||||||
|
--- a/examples/advanced/pyglet_plotting.py
|
||||||
|
+++ b/examples/advanced/pyglet_plotting.py
|
||||||
|
@@ -8,10 +8,10 @@ Suggested Usage: python -i pyglet_plo
|
||||||
|
|
||||||
|
|
||||||
|
from sympy import symbols, sin, cos, pi, sqrt
|
||||||
|
-from sympy.core.compatibility import range
|
||||||
|
+from sympy.core.compatibility import range, clock
|
||||||
|
from sympy.plotting.pygletplot import PygletPlot
|
||||||
|
|
||||||
|
-from time import sleep, clock
|
||||||
|
+from time import sleep
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
diff --git a/sympy/core/compatibility.py b/sympy/core/compatibility.py
|
||||||
|
index 2827b40ca17..9b6a644d847 100644
|
||||||
|
--- a/sympy/core/compatibility.py
|
||||||
|
+++ b/sympy/core/compatibility.py
|
||||||
|
@@ -945,3 +945,8 @@ try:
|
||||||
|
except ImportError: # Python 2.7
|
||||||
|
def filterfalse(pred, itr):
|
||||||
|
return filter(lambda x: not pred(x), itr)
|
||||||
|
+
|
||||||
|
+try:
|
||||||
|
+ from time import clock
|
||||||
|
+except ImportError: # Python 3.8+
|
||||||
|
+ from time import perf_counter as clock
|
||||||
|
diff --git a/sympy/plotting/pygletplot/plot_window.py b/sympy/plotting/pygletplot/plot_window.py
|
||||||
|
index 91bf42cc532..193093229b4 100644
|
||||||
|
--- a/sympy/plotting/pygletplot/plot_window.py
|
||||||
|
+++ b/sympy/plotting/pygletplot/plot_window.py
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
from __future__ import print_function, division
|
||||||
|
|
||||||
|
-from time import clock
|
||||||
|
+from sympy.core.compatibility import clock
|
||||||
|
|
||||||
|
import pyglet.gl as pgl
|
||||||
|
|
||||||
|
diff --git a/sympy/printing/mathml.py b/sympy/printing/mathml.py
|
||||||
|
index c1eba60b3d4..e5012efe74d 100644
|
||||||
|
--- a/sympy/printing/mathml.py
|
||||||
|
+++ b/sympy/printing/mathml.py
|
||||||
|
@@ -654,8 +654,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
return table
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
if self._settings["mat_delim"] == "[":
|
||||||
|
- brac.setAttribute('open', '[')
|
||||||
|
brac.setAttribute('close', ']')
|
||||||
|
+ brac.setAttribute('open', '[')
|
||||||
|
brac.appendChild(table)
|
||||||
|
return brac
|
||||||
|
|
||||||
|
@@ -961,8 +961,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
|
||||||
|
def _print_AccumulationBounds(self, i):
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
- brac.setAttribute('open', u'\u27e8')
|
||||||
|
brac.setAttribute('close', u'\u27e9')
|
||||||
|
+ brac.setAttribute('open', u'\u27e8')
|
||||||
|
brac.appendChild(self._print(i.min))
|
||||||
|
brac.appendChild(self._print(i.max))
|
||||||
|
return brac
|
||||||
|
@@ -1106,19 +1106,19 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
if i.start == i.end:
|
||||||
|
# Most often, this type of Interval is converted to a FiniteSet
|
||||||
|
- brac.setAttribute('open', '{')
|
||||||
|
brac.setAttribute('close', '}')
|
||||||
|
+ brac.setAttribute('open', '{')
|
||||||
|
brac.appendChild(self._print(i.start))
|
||||||
|
else:
|
||||||
|
- if i.left_open:
|
||||||
|
- brac.setAttribute('open', '(')
|
||||||
|
- else:
|
||||||
|
- brac.setAttribute('open', '[')
|
||||||
|
-
|
||||||
|
if i.right_open:
|
||||||
|
brac.setAttribute('close', ')')
|
||||||
|
else:
|
||||||
|
brac.setAttribute('close', ']')
|
||||||
|
+
|
||||||
|
+ if i.left_open:
|
||||||
|
+ brac.setAttribute('open', '(')
|
||||||
|
+ else:
|
||||||
|
+ brac.setAttribute('open', '[')
|
||||||
|
brac.appendChild(self._print(i.start))
|
||||||
|
brac.appendChild(self._print(i.end))
|
||||||
|
|
||||||
|
@@ -1128,8 +1128,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
def _print_Abs(self, expr, exp=None):
|
||||||
|
mrow = self.dom.createElement('mrow')
|
||||||
|
x = self.dom.createElement('mfenced')
|
||||||
|
- x.setAttribute('open', '|')
|
||||||
|
x.setAttribute('close', '|')
|
||||||
|
+ x.setAttribute('open', '|')
|
||||||
|
x.appendChild(self._print(expr.args[0]))
|
||||||
|
mrow.appendChild(x)
|
||||||
|
return mrow
|
||||||
|
@@ -1191,8 +1191,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
def _print_set(self, s):
|
||||||
|
items = sorted(s, key=default_sort_key)
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
- brac.setAttribute('open', '{')
|
||||||
|
brac.setAttribute('close', '}')
|
||||||
|
+ brac.setAttribute('open', '{')
|
||||||
|
for item in items:
|
||||||
|
brac.appendChild(self._print(item))
|
||||||
|
return brac
|
||||||
|
@@ -1309,8 +1309,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
def _print_Range(self, s):
|
||||||
|
dots = u"\u2026"
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
- brac.setAttribute('open', '{')
|
||||||
|
brac.setAttribute('close', '}')
|
||||||
|
+ brac.setAttribute('open', '{')
|
||||||
|
|
||||||
|
if s.start.is_infinite:
|
||||||
|
printset = dots, s[-1] - s.step, s[-1]
|
||||||
|
@@ -1507,8 +1507,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
power = expr.args[2]
|
||||||
|
sup = self.dom.createElement('msup')
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
- brac.setAttribute('open', u'\u27e8')
|
||||||
|
brac.setAttribute('close', u'\u27e9')
|
||||||
|
+ brac.setAttribute('open', u'\u27e8')
|
||||||
|
brac.appendChild(self._print(shift))
|
||||||
|
sup.appendChild(brac)
|
||||||
|
sup.appendChild(self._print(power))
|
||||||
|
@@ -1674,8 +1674,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
def _print_floor(self, e):
|
||||||
|
mrow = self.dom.createElement('mrow')
|
||||||
|
x = self.dom.createElement('mfenced')
|
||||||
|
- x.setAttribute('open', u'\u230A')
|
||||||
|
x.setAttribute('close', u'\u230B')
|
||||||
|
+ x.setAttribute('open', u'\u230A')
|
||||||
|
x.appendChild(self._print(e.args[0]))
|
||||||
|
mrow.appendChild(x)
|
||||||
|
return mrow
|
||||||
|
@@ -1683,8 +1683,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
def _print_ceiling(self, e):
|
||||||
|
mrow = self.dom.createElement('mrow')
|
||||||
|
x = self.dom.createElement('mfenced')
|
||||||
|
- x.setAttribute('open', u'\u2308')
|
||||||
|
x.setAttribute('close', u'\u2309')
|
||||||
|
+ x.setAttribute('open', u'\u2308')
|
||||||
|
x.appendChild(self._print(e.args[0]))
|
||||||
|
mrow.appendChild(x)
|
||||||
|
return mrow
|
||||||
|
@@ -1727,8 +1727,8 @@ class MathMLPresentationPrinter(MathMLPr
|
||||||
|
x = self.dom.createElement('msub')
|
||||||
|
x.appendChild(self.parenthesize(e.parent, PRECEDENCE["Atom"], strict = True))
|
||||||
|
brac = self.dom.createElement('mfenced')
|
||||||
|
- brac.setAttribute("open", "")
|
||||||
|
brac.setAttribute("close", "")
|
||||||
|
+ brac.setAttribute("open", "")
|
||||||
|
for i in e.indices:
|
||||||
|
brac.appendChild(self._print(i))
|
||||||
|
x.appendChild(brac)
|
@ -0,0 +1,179 @@
|
|||||||
|
From af7fab8860ee152a51b7c29a197b4a37b2f88a87 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vighnesh Shenoy <vighneshq@gmail.com>
|
||||||
|
Date: Fri, 7 Jun 2019 02:31:23 +0530
|
||||||
|
Subject: [PATCH] Modify literal comparisons as per python3.8 guidelines
|
||||||
|
|
||||||
|
This is in regards to issue #16973, Python 3.8 beta raises a warning
|
||||||
|
when comparing with string, int literals using is. The .travis.yml compileall
|
||||||
|
command has been added another flag to error if the convention is not followed.
|
||||||
|
A dummy test has been added in utilities/tests, this must cause the travis
|
||||||
|
build to fail in 3.8. If it does as expected, it can be removed, else the
|
||||||
|
compileall command will have to be changed.
|
||||||
|
---
|
||||||
|
.travis.yml | 5 ++++-
|
||||||
|
sympy/core/tests/test_containers.py | 2 +-
|
||||||
|
sympy/geometry/tests/test_plane.py | 2 +-
|
||||||
|
sympy/physics/vector/printing.py | 2 +-
|
||||||
|
sympy/plotting/plot.py | 6 +++---
|
||||||
|
sympy/polys/agca/modules.py | 4 ++--
|
||||||
|
sympy/solvers/diophantine.py | 2 +-
|
||||||
|
sympy/utilities/tests/test_travis.py | 6 ++++++
|
||||||
|
sympy/vector/coordsysrect.py | 4 ++--
|
||||||
|
9 files changed, 21 insertions(+), 12 deletions(-)
|
||||||
|
create mode 100644 sympy/utilities/tests/test_travis.py
|
||||||
|
|
||||||
|
diff --git a/.travis.yml b/.travis.yml
|
||||||
|
index 00b03d918fd..23f9ea8e15e 100644
|
||||||
|
--- a/.travis.yml
|
||||||
|
+++ b/.travis.yml
|
||||||
|
@@ -283,6 +283,9 @@ install:
|
||||||
|
- pip install mpmath
|
||||||
|
# -We:invalid makes invalid escape sequences error in Python 3.6. See
|
||||||
|
# -#12028.
|
||||||
|
+ # SyntaxWarning flag for catching errors in Python3.8
|
||||||
|
+ # Issue - #16973. -We:invalid can be dropped from 3.8 onwards, but
|
||||||
|
+ # it needs to be there for earlier versions.
|
||||||
|
- |
|
||||||
|
if [[ "${TEST_SETUP}" == "true" ]]; then
|
||||||
|
# The install cycle below is to test installation on systems without
|
||||||
|
@@ -292,7 +295,7 @@ install:
|
||||||
|
~/.venv-no-setuptools/bin/pip uninstall -y setuptools;
|
||||||
|
~/.venv-no-setuptools/bin/python -We:invalid setup.py -q install;
|
||||||
|
fi
|
||||||
|
- python -We:invalid -m compileall -f -q sympy/;
|
||||||
|
+ python -We:invalid -We::SyntaxWarning -m compileall -f -q sympy/;
|
||||||
|
python -We:invalid setup.py -q install;
|
||||||
|
pip list --format=columns;
|
||||||
|
|
||||||
|
diff --git a/sympy/core/tests/test_containers.py b/sympy/core/tests/test_containers.py
|
||||||
|
index 79e3c9b85ba..af871de597a 100644
|
||||||
|
--- a/sympy/core/tests/test_containers.py
|
||||||
|
+++ b/sympy/core/tests/test_containers.py
|
||||||
|
@@ -52,7 +52,7 @@ def test_Tuple_concatenation():
|
||||||
|
|
||||||
|
|
||||||
|
def test_Tuple_equality():
|
||||||
|
- assert Tuple(1, 2) is not (1, 2)
|
||||||
|
+ assert not isinstance(Tuple(1, 2), tuple)
|
||||||
|
assert (Tuple(1, 2) == (1, 2)) is True
|
||||||
|
assert (Tuple(1, 2) != (1, 2)) is False
|
||||||
|
assert (Tuple(1, 2) == (1, 3)) is False
|
||||||
|
diff --git a/sympy/geometry/tests/test_plane.py b/sympy/geometry/tests/test_plane.py
|
||||||
|
index dec80b4bb99..959b9ff546a 100644
|
||||||
|
--- a/sympy/geometry/tests/test_plane.py
|
||||||
|
+++ b/sympy/geometry/tests/test_plane.py
|
||||||
|
@@ -187,7 +187,7 @@ def test_plane():
|
||||||
|
assert pl8.intersection(Plane(p1, normal_vector=(-1, -1, -11)))[0].equals(
|
||||||
|
Line3D(p1, direction_ratio=(1, -1, 0)))
|
||||||
|
assert pl3.random_point() in pl3
|
||||||
|
- assert len(pl8.intersection(Ray3D(Point3D(0, 2, 3), Point3D(1, 0, 3)))) is 0
|
||||||
|
+ assert len(pl8.intersection(Ray3D(Point3D(0, 2, 3), Point3D(1, 0, 3)))) == 0
|
||||||
|
# check if two plane are equals
|
||||||
|
assert pl6.intersection(pl6)[0].equals(pl6)
|
||||||
|
assert pl8.equals(Plane(p1, normal_vector=(0, 12, 0))) is False
|
||||||
|
diff --git a/sympy/physics/vector/printing.py b/sympy/physics/vector/printing.py
|
||||||
|
index 9d1e769a700..86f4159974a 100644
|
||||||
|
--- a/sympy/physics/vector/printing.py
|
||||||
|
+++ b/sympy/physics/vector/printing.py
|
||||||
|
@@ -152,7 +152,7 @@ class VectorLatexPrinter(LatexPrinter):
|
||||||
|
base = r"\ddddot{%s}" % base
|
||||||
|
else: # Fallback to standard printing
|
||||||
|
return LatexPrinter().doprint(der_expr)
|
||||||
|
- if len(base_split) is not 1:
|
||||||
|
+ if len(base_split) != 1:
|
||||||
|
base += '_' + base_split[1]
|
||||||
|
return base
|
||||||
|
|
||||||
|
diff --git a/sympy/plotting/plot.py b/sympy/plotting/plot.py
|
||||||
|
index 7ad4f550b2f..8d87b93be92 100644
|
||||||
|
--- a/sympy/plotting/plot.py
|
||||||
|
+++ b/sympy/plotting/plot.py
|
||||||
|
@@ -506,7 +506,7 @@ class LineOver1DRangeSeries(Line2DBaseSe
|
||||||
|
#at both ends. If there is a real value in between, then
|
||||||
|
#sample those points further.
|
||||||
|
elif p[1] is None and q[1] is None:
|
||||||
|
- if self.xscale is 'log':
|
||||||
|
+ if self.xscale == 'log':
|
||||||
|
xarray = np.logspace(p[0],q[0], 10)
|
||||||
|
else:
|
||||||
|
xarray = np.linspace(p[0], q[0], 10)
|
||||||
|
@@ -539,14 +539,14 @@ class LineOver1DRangeSeries(Line2DBaseSe
|
||||||
|
def get_points(self):
|
||||||
|
np = import_module('numpy')
|
||||||
|
if self.only_integers is True:
|
||||||
|
- if self.xscale is 'log':
|
||||||
|
+ if self.xscale == 'log':
|
||||||
|
list_x = np.logspace(int(self.start), int(self.end),
|
||||||
|
num=int(self.end) - int(self.start) + 1)
|
||||||
|
else:
|
||||||
|
list_x = np.linspace(int(self.start), int(self.end),
|
||||||
|
num=int(self.end) - int(self.start) + 1)
|
||||||
|
else:
|
||||||
|
- if self.xscale is 'log':
|
||||||
|
+ if self.xscale == 'log':
|
||||||
|
list_x = np.logspace(self.start, self.end, num=self.nb_of_points)
|
||||||
|
else:
|
||||||
|
list_x = np.linspace(self.start, self.end, num=self.nb_of_points)
|
||||||
|
diff --git a/sympy/polys/agca/modules.py b/sympy/polys/agca/modules.py
|
||||||
|
index aa296c52314..88e1618be11 100644
|
||||||
|
--- a/sympy/polys/agca/modules.py
|
||||||
|
+++ b/sympy/polys/agca/modules.py
|
||||||
|
@@ -26,7 +26,7 @@ from sympy.polys.agca.ideals import Idea
|
||||||
|
from sympy.polys.domains.field import Field
|
||||||
|
from sympy.polys.orderings import ProductOrder, monomial_key
|
||||||
|
from sympy.polys.polyerrors import CoercionFailed
|
||||||
|
-
|
||||||
|
+from sympy.core.basic import _aresame
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# - module saturation
|
||||||
|
@@ -357,7 +357,7 @@ class FreeModule(Module):
|
||||||
|
if len(tpl) != self.rank:
|
||||||
|
raise CoercionFailed
|
||||||
|
return FreeModuleElement(self, tpl)
|
||||||
|
- elif elem is 0:
|
||||||
|
+ elif _aresame(elem, 0):
|
||||||
|
return FreeModuleElement(self, (self.ring.convert(0),)*self.rank)
|
||||||
|
else:
|
||||||
|
raise CoercionFailed
|
||||||
|
diff --git a/sympy/solvers/diophantine.py b/sympy/solvers/diophantine.py
|
||||||
|
index 1c048d1e57d..2772b08e930 100644
|
||||||
|
--- a/sympy/solvers/diophantine.py
|
||||||
|
+++ b/sympy/solvers/diophantine.py
|
||||||
|
@@ -3183,7 +3183,7 @@ def power_representation(n, p, k, zeros=
|
||||||
|
'''Todd G. Will, "When Is n^2 a Sum of k Squares?", [online].
|
||||||
|
Available: https://www.maa.org/sites/default/files/Will-MMz-201037918.pdf'''
|
||||||
|
return
|
||||||
|
- if feasible is 1: # it's prime and k == 2
|
||||||
|
+ if feasible is not True: # it's prime and k == 2
|
||||||
|
yield prime_as_sum_of_two_squares(n)
|
||||||
|
return
|
||||||
|
|
||||||
|
diff --git a/sympy/utilities/tests/test_travis.py b/sympy/utilities/tests/test_travis.py
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..f49eaa0cad1
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sympy/utilities/tests/test_travis.py
|
||||||
|
@@ -0,0 +1,6 @@
|
||||||
|
+def test_travis_issue_16986():
|
||||||
|
+ # If this causes the travis build to fail with Python3.8,
|
||||||
|
+ # then the changes made in PR #16986 are working as
|
||||||
|
+ # intended, and this file can be deleted.
|
||||||
|
+
|
||||||
|
+ assert int(1) is 1
|
||||||
|
diff --git a/sympy/vector/coordsysrect.py b/sympy/vector/coordsysrect.py
|
||||||
|
index a7b0e91c413..e629824c3cd 100644
|
||||||
|
--- a/sympy/vector/coordsysrect.py
|
||||||
|
+++ b/sympy/vector/coordsysrect.py
|
||||||
|
@@ -167,9 +167,9 @@ class CoordSys3D(Basic):
|
||||||
|
if isinstance(transformation, Lambda):
|
||||||
|
variable_names = ["x1", "x2", "x3"]
|
||||||
|
elif isinstance(transformation, Symbol):
|
||||||
|
- if transformation.name is 'spherical':
|
||||||
|
+ if transformation.name == 'spherical':
|
||||||
|
variable_names = ["r", "theta", "phi"]
|
||||||
|
- elif transformation.name is 'cylindrical':
|
||||||
|
+ elif transformation.name == 'cylindrical':
|
||||||
|
variable_names = ["r", "theta", "z"]
|
||||||
|
else:
|
||||||
|
variable_names = ["x", "y", "z"]
|
14
sympy.spec
14
sympy.spec
@ -1,6 +1,6 @@
|
|||||||
Name: sympy
|
Name: sympy
|
||||||
Version: 1.4
|
Version: 1.4
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: A Python library for symbolic mathematics
|
Summary: A Python library for symbolic mathematics
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: http://sympy.org/
|
URL: http://sympy.org/
|
||||||
@ -13,6 +13,15 @@ Patch1: %{name}-doc.patch
|
|||||||
Patch2: %{name}-python3.patch
|
Patch2: %{name}-python3.patch
|
||||||
# Convert TypeError to SympifyError inside sympify()
|
# Convert TypeError to SympifyError inside sympify()
|
||||||
Patch3: %{name}-sympify.patch
|
Patch3: %{name}-sympify.patch
|
||||||
|
# Fix tests failing after numpy 1.17
|
||||||
|
# https://github.com/sympy/sympy/commit/3866c3c59a68ed23100213ad93f4811d3f47dcb7
|
||||||
|
Patch4: 0001-Exception-changed-after-numpy-1.17.patch
|
||||||
|
# Modify comparisons to adhere to Python 3.8 guidelines
|
||||||
|
# https://github.com/sympy/sympy/commit/5f2b57688b7a51cd8455055b35928320076a589f
|
||||||
|
Patch5: 0001-Modify-literal-comparisons-as-per-python3.8-guidelines.patch
|
||||||
|
# Fix more compatibility issues with Python3.8.
|
||||||
|
# https://github.com/sympy/sympy/commit/a193dcf9ed0715b3a0336e7d91460f338686c015
|
||||||
|
Patch6: 0001-Fix-more-compatibility-issues-with-Python3.8.patch
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
@ -193,6 +202,9 @@ xvfb-run -a -n $dnum \
|
|||||||
%{_docdir}/%{name}-doc/html
|
%{_docdir}/%{name}-doc/html
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Aug 24 2019 Robert-André Mauchin <zebob.m@gmail.com> - 1.4-4
|
||||||
|
- Add patches to fix build with Python 3.8 and Numpy 1.17
|
||||||
|
|
||||||
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.4-3
|
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.4-3
|
||||||
- Rebuilt for Python 3.8
|
- Rebuilt for Python 3.8
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user