Skip to content

Commit 4244dc2

Browse files
authored
Merge pull request #153 from sympy/python-2-modernize
Modernize Python 2 code for migration to Python 3
2 parents 6cbda8a + 0a56fc1 commit 4244dc2

18 files changed

+77
-47
lines changed

app/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from __future__ import absolute_import
12
import sys
23
import os.path
34

app/logic/diffsteps.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
from __future__ import absolute_import
12
import sympy
23
import collections
34

4-
import stepprinter
5-
from stepprinter import functionnames, replace_u_var
5+
from . import stepprinter
6+
from .stepprinter import functionnames, replace_u_var
67

78
from sympy.core.function import AppliedUndef
89
from sympy.functions.elementary.trigonometric import TrigonometricFunction
910
from sympy.strategies.core import switch, identity
11+
from six.moves import map
12+
from six.moves import range
13+
from six.moves import zip
14+
from functools import reduce
1015
def Rule(name, props=""):
1116
return collections.namedtuple(name, props + " context symbol")
1217

@@ -219,7 +224,7 @@ def eval_default(*args):
219224

220225
@evaluates(MulRule)
221226
def eval_mul(terms, substeps, expr, symbol):
222-
diffs = map(diff, substeps)
227+
diffs = list(map(diff, substeps))
223228

224229
result = sympy.S.Zero
225230
for i in range(len(terms)):
@@ -347,9 +352,8 @@ def print_Mul(self, rule):
347352
self.append("Apply the product rule:".format(
348353
self.format_math(rule.context)))
349354

350-
fnames = map(lambda n: sympy.Function(n)(rule.symbol),
351-
functionnames(len(rule.terms)))
352-
derivatives = map(lambda f: sympy.Derivative(f, rule.symbol), fnames)
355+
fnames = [sympy.Function(n)(rule.symbol) for n in functionnames(len(rule.terms))]
356+
derivatives = [sympy.Derivative(f, rule.symbol) for f in fnames]
353357
ruleform = []
354358
for index in range(len(rule.terms)):
355359
buf = []

app/logic/intsteps.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
from __future__ import absolute_import
12
import sympy
23
import collections
34
from contextlib import contextmanager
4-
import stepprinter
5-
from stepprinter import functionnames, Rule, replace_u_var
5+
from . import stepprinter
6+
from .stepprinter import functionnames, Rule, replace_u_var
67

78
from sympy.integrals.manualintegrate import (
89
manualintegrate, _manualintegrate, integral_steps, evaluates,
@@ -40,7 +41,7 @@ def contains_dont_know(rule):
4041

4142
def filter_unknown_alternatives(rule):
4243
if isinstance(rule, AlternativeRule):
43-
alternatives = list(filter(lambda r: not contains_dont_know(r), rule.alternatives))
44+
alternatives = list([r for r in rule.alternatives if not contains_dont_know(r)])
4445
if not alternatives:
4546
alternatives = rule.alternatives
4647
return AlternativeRule(alternatives, rule.context, rule.symbol)
@@ -157,7 +158,7 @@ def print_Parts(self, rule):
157158
with self.new_step():
158159
self.append("Use integration by parts:")
159160

160-
u, v, du, dv = map(lambda f: sympy.Function(f)(rule.symbol), 'u v du dv'.split())
161+
u, v, du, dv = [sympy.Function(f)(rule.symbol) for f in 'u v du dv'.split()]
161162
self.append(self.format_math_display(
162163
r"""\int \operatorname{u} \operatorname{dv}
163164
= \operatorname{u}\operatorname{v} -
@@ -185,7 +186,7 @@ def print_CyclicParts(self, rule):
185186
self.append("Use integration by parts, noting that the integrand"
186187
" eventually repeats itself.")
187188

188-
u, v, du, dv = map(lambda f: sympy.Function(f)(rule.symbol), 'u v du dv'.split())
189+
u, v, du, dv = [sympy.Function(f)(rule.symbol) for f in 'u v du dv'.split()]
189190
current_integrand = rule.context
190191
total_result = sympy.S.Zero
191192
with self.new_level():

app/logic/logic.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1+
from __future__ import absolute_import
12
import sys
23
import traceback
34
import collections
4-
from utils import Eval, latexify, arguments, removeSymPy, \
5+
from .utils import Eval, latexify, arguments, removeSymPy, \
56
custom_implicit_transformation, synonyms, OTHER_SYMPY_FUNCTIONS, \
67
close_matches
7-
from resultsets import find_result_set, get_card, format_by_type, \
8+
from .resultsets import find_result_set, get_card, format_by_type, \
89
is_function_handled, find_learn_more_set
910
from sympy import latex, series, sympify, solve, Derivative, \
1011
Integral, Symbol, diff, integrate
1112
import sympy
1213
from sympy.core.function import FunctionClass
1314
from sympy.parsing.sympy_parser import stringify_expr, eval_expr, \
1415
standard_transformations, convert_xor, TokenError
16+
from six.moves import map
1517

1618
PREEXEC = """from __future__ import division
1719
from sympy import *
@@ -115,7 +117,7 @@ def disambiguate(self, arguments):
115117

116118
def eval_input(self, s):
117119
namespace = {}
118-
exec PREEXEC in {}, namespace
120+
exec(PREEXEC, {}, namespace)
119121

120122
def plot(f=None, **kwargs):
121123
"""Plot functions. Not the same as SymPy's plot.
@@ -222,7 +224,7 @@ def prepare_cards(self, parsed, arguments, evaluator, evaluated):
222224
if any(get_card(c).is_multivariate() for c in cards):
223225
result[-1].update({
224226
"num_variables": len(components['variables']),
225-
"variables": map(repr, components['variables']),
227+
"variables": list(map(repr, components['variables'])),
226228
"variable": repr(components['variable'])
227229
})
228230

app/logic/nlcommand.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def extraneous(word):
2828
return (word in prepositions) or (word in pronouns) or (word in articles)
2929

3030
def interpret(command):
31-
words = filter(lambda word: not extraneous(word), command.lower().split())
31+
words = [word for word in command.lower().split() if not extraneous(word)]
3232
modifier = 'default'
3333
modifier_priority = -1
3434
cmds = []

app/logic/resultsets.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
from __future__ import absolute_import
12
import sys
23
import json
34
import itertools
45
import sympy
56
from sympy.core.function import FunctionClass
67
from sympy.core.symbol import Symbol
78
import docutils.core
8-
import diffsteps
9-
import intsteps
9+
from . import diffsteps
10+
from . import intsteps
11+
import six
12+
from six.moves import map
13+
from six.moves import zip
1014

1115

1216
class ResultCard(object):
@@ -383,12 +387,12 @@ def _format_dict(dictionary, formatter):
383387
'<thead><tr><th>{}</th><th>{}</th></tr></thead>'.format(*title),
384388
'<tbody>']
385389
try:
386-
fdict = dictionary.iteritems()
390+
fdict = six.iteritems(dictionary)
387391
if not any(isinstance(i,Symbol) for i in dictionary.keys()):
388-
fdict = sorted(dictionary.iteritems())
392+
fdict = sorted(six.iteritems(dictionary))
389393
for key, val in fdict:
390394
html.append('<tr><td>{}</td><td>{}</td></tr>'.format(key, val))
391-
except AttributeError, TypeError: # not iterable/not a dict
395+
except AttributeError as TypeError: # not iterable/not a dict
392396
return formatter(dictionary)
393397
html.append('</tbody></table>')
394398
return '\n'.join(html)
@@ -654,14 +658,14 @@ def trim(docstring):
654658
# and split into a list of lines:
655659
lines = docstring.expandtabs().splitlines()
656660
# Determine minimum indentation (first line doesn't count):
657-
indent = sys.maxint
661+
indent = sys.maxsize
658662
for line in lines[1:]:
659663
stripped = line.lstrip()
660664
if stripped:
661665
indent = min(indent, len(line) - len(stripped))
662666
# Remove indentation (first line is special):
663667
trimmed = [lines[0].strip()]
664-
if indent < sys.maxint:
668+
if indent < sys.maxsize:
665669
for line in lines[1:]:
666670
trimmed.append(line[indent:].rstrip())
667671
# Strip off trailing and leading blank lines:
@@ -683,7 +687,7 @@ def eval_truth_table(evaluator, components, parameters=None):
683687

684688
result = []
685689
for combination in itertools.product([True, False], repeat=len(variables)):
686-
result.append(combination +(expr.subs(zip(variables, combination)),))
690+
result.append(combination +(expr.subs(list(zip(variables, combination))),))
687691
return variables, result
688692

689693

app/logic/stepprinter.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
from __future__ import absolute_import
12
import sympy
23
import collections
34
from contextlib import contextmanager
45

56
from sympy import latex
7+
import six
8+
from six.moves import range
69

710
def Rule(name, props=""):
811
# GOTCHA: namedtuple class name not considered!
@@ -94,7 +97,7 @@ def format_math(self, math):
9497
latex(math))
9598

9699
def format_math_display(self, math):
97-
if not isinstance(math, basestring):
100+
if not isinstance(math, six.string_types):
98101
math = latex(math)
99102
return '<script type="math/tex; mode=display">{}</script>'.format(
100103
math)

app/logic/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from __future__ import division
2+
from __future__ import absolute_import
23
import difflib
34
import collections
45
import traceback
@@ -11,6 +12,8 @@
1112
from sympy.core.relational import Relational
1213
import sympy.parsing.sympy_tokenize as sympy_tokenize
1314
from token import NAME
15+
from six.moves import map
16+
from six.moves import zip
1417

1518
OTHER_SYMPY_FUNCTIONS = ('sqrt',)
1619

@@ -236,7 +239,7 @@ def format_diophantine(node, visitor):
236239
klass = sympy.Sum
237240
else:
238241
klass = sympy.Product
239-
return sympy.latex(klass(*map(visitor.evaluator.eval_node, node.args)))
242+
return sympy.latex(klass(*list(map(visitor.evaluator.eval_node, node.args))))
240243

241244
@LatexVisitor.formats_function('help')
242245
def format_help(node, visitor):

app/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from __future__ import absolute_import
12
import six
23
import os
34
# https://github.com/googleapis/python-ndb/issues/249#issuecomment-560957294

app/templatetags/extra_tags.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from __future__ import absolute_import
12
from django import template
2-
import urllib
3+
import six.moves.urllib.request, six.moves.urllib.parse, six.moves.urllib.error
4+
import six
35
register = template.Library()
46

57
@register.inclusion_tag('card.html')
@@ -24,10 +26,10 @@ def __init__(self, query):
2426
self.query = template.Variable(query)
2527

2628
def render(self, context):
27-
if isinstance(self.query, unicode):
28-
return "/input/?i=" + urllib.quote(self.query[1:-1])
29+
if isinstance(self.query, six.text_type):
30+
return "/input/?i=" + six.moves.urllib.parse.quote(self.query[1:-1])
2931
else:
30-
return "/input/?i=" + urllib.quote(self.query.resolve(context))
32+
return "/input/?i=" + six.moves.urllib.parse.quote(self.query.resolve(context))
3133

3234
@register.tag(name='make_query_link')
3335
def do_make_query(parser, token):
@@ -47,12 +49,12 @@ def __init__(self, query):
4749
self.query = template.Variable(query)
4850

4951
def render(self, context):
50-
if isinstance(self.query, unicode) or isinstance(self.query, str):
52+
if isinstance(self.query, six.text_type) or isinstance(self.query, str):
5153
q = self.query[1:-1]
5254
else:
5355
q = self.query.resolve(context)
5456

55-
link = '<a href="/input/?i={0}">{1}</a>'.format(urllib.quote(q), q)
57+
link = '<a href="/input/?i={0}">{1}</a>'.format(six.moves.urllib.parse.quote(q), q)
5658
return link
5759

5860
@register.tag(name='make_example')
@@ -83,5 +85,5 @@ def render(self, context):
8385
buf.append('<span>{}</span>'.format(title))
8486

8587
buf.append('<a href="/input/?i={0}">{1}</a>'.format(
86-
urllib.quote(example), example))
88+
six.moves.urllib.parse.quote(example), example))
8789
return ' '.join(buf)

0 commit comments

Comments
 (0)