[pypy-commit] pypy py3.5: hg merge default
arigo
pypy.commits at gmail.com
Fri Dec 2 11:35:05 EST 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r88827:d61704606472
Date: 2016-12-02 17:29 +0100
http://bitbucket.org/pypy/pypy/changeset/d61704606472/
Log: hg merge default
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -5,6 +5,15 @@
.. this is a revision shortly after release-pypy2.7-v5.6
.. startrev: 7e9787939641
+
+Since a while now, PyPy preserves the order of dictionaries and sets.
+However, the set literal syntax ``{x, y, z}`` would by mistake build a
+set with the opposite order: ``set([z, y, x])``. This has been fixed.
+Note that CPython is inconsistent too: in 2.7.12, ``{5, 5.0}`` would be
+``set([5.0])``, but in 2.7.trunk it is ``set([5])``. PyPy's behavior
+changed in exactly the same way because of this fix.
+
+
.. branch: mappingproxy
.. branch: py3k-finish_time
.. branch: py3k-kwonly-builtin
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1376,9 +1376,10 @@
@jit.unroll_safe
def BUILD_SET(self, itemcount, next_instr):
w_set = self.space.newset()
- for i in range(itemcount):
- w_item = self.popvalue()
+ for i in range(itemcount-1, -1, -1):
+ w_item = self.peekvalue(i)
self.space.call_method(w_set, 'add', w_item)
+ self.popvalues(itemcount)
self.pushvalue(w_set)
@jit.unroll_safe
diff --git a/pypy/interpreter/test/test_compiler.py b/pypy/interpreter/test/test_compiler.py
--- a/pypy/interpreter/test/test_compiler.py
+++ b/pypy/interpreter/test/test_compiler.py
@@ -806,6 +806,8 @@
def setup_class(cls):
cls.w_runappdirect = cls.space.wrap(cls.runappdirect)
+ cls.w_host_is_pypy = cls.space.wrap(
+ '__pypy__' in sys.builtin_module_names)
def w_is_pypy(self):
import sys
@@ -952,6 +954,18 @@
else:
assert False, "Expected SyntaxError"
+ def test_dict_and_set_literal_order(self):
+ x = 1
+ l1 = list({1:'a', 3:'b', 2:'c', 4:'d'})
+ l2 = list({1, 3, 2, 4})
+ l3 = list({x:'a', 3:'b', 2:'c', 4:'d'})
+ l4 = list({x, 3, 2, 4})
+ if not self.host_is_pypy:
+ # the full test relies on the host Python providing ordered dicts
+ assert set(l1) == set(l2) == set(l3) == set(l4) == {1, 3, 2, 4}
+ else:
+ assert l1 == l2 == l3 == l4 == [1, 3, 2, 4]
+
def test_ast_equality(self):
import _ast
sample_code = [
diff --git a/pypy/interpreter/test/test_special.py b/pypy/interpreter/test/test_special.py
--- a/pypy/interpreter/test/test_special.py
+++ b/pypy/interpreter/test/test_special.py
@@ -4,9 +4,11 @@
def test_Ellipsis(self):
assert Ellipsis == Ellipsis
assert repr(Ellipsis) == 'Ellipsis'
+ assert Ellipsis.__class__.__name__ == 'ellipsis'
def test_NotImplemented(self):
def f():
return NotImplemented
assert f() == NotImplemented
assert repr(NotImplemented) == 'NotImplemented'
+ assert NotImplemented.__class__.__name__ == 'NotImplementedType'
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -860,13 +860,13 @@
)
assert not Cell.typedef.acceptable_as_base_class # no __new__
-Ellipsis.typedef = TypeDef("Ellipsis",
+Ellipsis.typedef = TypeDef("ellipsis",
__new__ = interp2app(Ellipsis.descr_new_ellipsis),
__repr__ = interp2app(Ellipsis.descr__repr__),
)
Ellipsis.typedef.acceptable_as_base_class = False
-NotImplemented.typedef = TypeDef("NotImplemented",
+NotImplemented.typedef = TypeDef("NotImplementedType",
__new__ = interp2app(NotImplemented.descr_new_notimplemented),
__repr__ = interp2app(NotImplemented.descr__repr__),
)
diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -374,17 +374,7 @@
def test_sum(self):
result = self.run("sum")
assert result == sum(range(30))
- self.check_vectorized(1, 1)
-
- def define_sum():
- return """
- a = |30|
- sum(a)
- """
- def test_sum(self):
- result = self.run("sum")
- assert result == sum(range(30))
- self.check_vectorized(1, 1)
+ self.check_vectorized(1, 0)
def define_sum_int():
return """
@@ -408,7 +398,7 @@
def test_sum_multi(self):
result = self.run("sum_multi")
assert result == sum(range(30)) + sum(range(60))
- self.check_vectorized(1, 1)
+ self.check_vectorized(1, 0)
def define_sum_float_to_int16():
return """
@@ -490,7 +480,7 @@
assert retval == sum(range(1,11))
# check that we got only one loop
assert len(get_stats().loops) == 1
- self.check_vectorized(2, 1)
+ self.check_vectorized(2, 0)
def test_reduce_axis_compile_only_once(self):
self.compile_graph()
@@ -501,7 +491,7 @@
retval = self.interp.eval_graph(self.graph, [i])
# check that we got only one loop
assert len(get_stats().loops) == 1
- self.check_vectorized(3, 1)
+ self.check_vectorized(3, 0)
def define_prod():
return """
diff --git a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py
--- a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py
@@ -76,7 +76,6 @@
arith_comb = [
('sum','int', 1742, 1742, 1),
- ('sum','float', 2581, 2581, 1),
('prod','int', 1, 3178, 1),
('any','int', 1, 2239, 1),
('any','int', 0, 4912, 0),
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -978,9 +978,7 @@
self.right is other.right
class AccumPack(Pack):
- SUPPORTED = { rop.FLOAT_ADD: '+',
- rop.INT_ADD: '+',
- }
+ SUPPORTED = { rop.INT_ADD: '+', }
def __init__(self, nodes, operator, position):
Pack.__init__(self, nodes)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
@@ -197,7 +197,7 @@
f13 = float_add(f12, f11)
""")
savings = self.savings(loop1)
- assert savings == 2
+ assert savings == -2
@py.test.mark.parametrize("bytes,s", [(4,0),(8,0)])
def test_sum_float_to_int(self, bytes, s):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
@@ -1162,32 +1162,32 @@
vopt = self.vectorize(loop,1)
self.assert_equal(loop, self.parse_loop(opt))
- def test_accumulate_basic(self):
- trace = """
- [p0, i0, f0]
- f1 = raw_load_f(p0, i0, descr=floatarraydescr)
- f2 = float_add(f0, f1)
- i1 = int_add(i0, 8)
- i2 = int_lt(i1, 100)
- guard_true(i2) [p0, i0, f2]
- jump(p0, i1, f2)
- """
- trace_opt = """
- [p0, i0, f0]
- v6[0xf64] = vec_f()
- v7[2xf64] = vec_float_xor(v6[0xf64], v6[0xf64])
- v2[2xf64] = vec_pack_f(v7[2xf64], f0, 0, 1)
- label(p0, i0, v2[2xf64])
- i1 = int_add(i0, 16)
- i2 = int_lt(i1, 100)
- guard_true(i2) [p0, i0, v2[2xf64]]
- v1[2xf64] = vec_load_f(p0, i0, 1, 0, descr=floatarraydescr)
- v3[2xf64] = vec_float_add(v2[2xf64], v1[2xf64])
- jump(p0, i1, v3[2xf64])
- """
- loop = self.parse_loop(trace)
- opt = self.vectorize(loop)
- self.assert_equal(loop, self.parse_loop(trace_opt))
+ #def test_accumulate_basic(self):
+ # trace = """
+ # [p0, i0, f0]
+ # f1 = raw_load_f(p0, i0, descr=floatarraydescr)
+ # f2 = float_add(f0, f1)
+ # i1 = int_add(i0, 8)
+ # i2 = int_lt(i1, 100)
+ # guard_true(i2) [p0, i0, f2]
+ # jump(p0, i1, f2)
+ # """
+ # trace_opt = """
+ # [p0, i0, f0]
+ # v6[0xf64] = vec_f()
+ # v7[2xf64] = vec_float_xor(v6[0xf64], v6[0xf64])
+ # v2[2xf64] = vec_pack_f(v7[2xf64], f0, 0, 1)
+ # label(p0, i0, v2[2xf64])
+ # i1 = int_add(i0, 16)
+ # i2 = int_lt(i1, 100)
+ # guard_true(i2) [p0, i0, v2[2xf64]]
+ # v1[2xf64] = vec_load_f(p0, i0, 1, 0, descr=floatarraydescr)
+ # v3[2xf64] = vec_float_add(v2[2xf64], v1[2xf64])
+ # jump(p0, i1, v3[2xf64])
+ # """
+ # loop = self.parse_loop(trace)
+ # opt = self.vectorize(loop)
+ # self.assert_equal(loop, self.parse_loop(trace_opt))
def test_element_f45_in_guard_failargs(self):
trace = self.parse_loop("""
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -842,7 +842,8 @@
oplist.append(vecop)
opnum = rop.VEC_INT_XOR
if datatype == FLOAT:
- opnum = rop.VEC_FLOAT_XOR
+ # see PRECISION loss below
+ raise NotImplementedError
vecop = VecOperation(opnum, [vecop, vecop],
vecop, count)
oplist.append(vecop)
More information about the pypy-commit
mailing list