[pypy-commit] pypy more_strategies: Revert the sorted list experiment.

ltratt noreply at buildbot.pypy.org
Sun Nov 24 21:26:23 CET 2013


Author: Laurence Tratt <laurie at tratt.net>
Branch: more_strategies
Changeset: r68313:b80e7392cb94
Date: 2013-11-24 20:17 +0000
http://bitbucket.org/pypy/pypy/changeset/b80e7392cb94/

Log:	Revert the sorted list experiment.

diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py
--- a/pypy/objspace/std/listobject.py
+++ b/pypy/objspace/std/listobject.py
@@ -896,7 +896,7 @@
 
     def switch_to_correct_strategy(self, w_list, w_item):
         if type(w_item) is W_IntObject:
-            strategy = self.space.fromcache(IntegerListAscendingStrategy)
+            strategy = self.space.fromcache(IntegerListStrategy)
         elif type(w_item) is W_StringObject:
             strategy = self.space.fromcache(StringListStrategy)
         elif type(w_item) is W_UnicodeObject:
@@ -1010,11 +1010,7 @@
 
     def switch_to_integer_strategy(self, w_list):
         items = self._getitems_range(w_list, False)
-        start, step, length = self.unerase(w_list.lstorage)
-        if step > 0:
-            strategy = w_list.strategy = self.space.fromcache(IntegerListAscendingStrategy)
-        else:
-            strategy = w_list.strategy = self.space.fromcache(IntegerListStrategy)
+        strategy = w_list.strategy = self.space.fromcache(IntegerListStrategy)
         w_list.lstorage = strategy.erase(items)
 
     def wrap(self, intval):
@@ -1522,25 +1518,6 @@
     def unwrap(self, w_int):
         return self.space.int_w(w_int)
 
-    def init_from_list_w(self, w_list, list_w):
-        # While unpacking integer elements, also determine whether they're
-        # pre-sorted.
-        assert len(list_w) > 0
-        asc = True
-        l = [0] * len(list_w)
-        lst = l[0] = self.unwrap(list_w[0])
-        for i in range(1, len(list_w)):
-            item_w = list_w[i]
-            it = self.unwrap(item_w)
-            if asc and it < lst:
-                asc = False
-            l[i] = it
-            lst = it
-        w_list.lstorage = self.erase(l)
-        if asc:
-            # The list was already sorted into ascending order.
-            w_list.strategy = self.space.fromcache(IntegerListAscendingStrategy)
-
     erase, unerase = rerased.new_erasing_pair("integer")
     erase = staticmethod(erase)
     unerase = staticmethod(unerase)
@@ -1549,8 +1526,7 @@
         return type(w_obj) is W_IntObject
 
     def list_is_correct_type(self, w_list):
-        return w_list.strategy is self.space.fromcache(IntegerListStrategy) \
-          or w_list.strategy is self.space.fromcache(IntegerListAscendingStrategy)
+        return w_list.strategy is self.space.fromcache(IntegerListStrategy)
 
     def sort(self, w_list, reverse):
         l = self.unerase(w_list.lstorage)
@@ -1558,8 +1534,6 @@
         sorter.sort()
         if reverse:
             l.reverse()
-        else:
-            w_list.strategy = self.space.fromcache(IntegerListAscendingStrategy)
 
     def getitems_int(self, w_list):
         return self.unerase(w_list.lstorage)
@@ -1637,94 +1611,6 @@
                     self.space, storage, self)
         return self._base_setslice(w_list, start, step, slicelength, w_other)
 
-class IntegerListAscendingStrategy(IntegerListStrategy):
-    def sort(self, w_list, reverse):
-        if reverse:
-            self.unerase(w_list.lstorage).reverse()
-            w_list.strategy = self.space.fromcache(IntegerListStrategy)
-
-    def append(self, w_list, w_item):
-        if type(w_item) is W_IntObject:
-            l = self.unerase(w_list.lstorage)
-            length = len(l)
-            item = self.unwrap(w_item)
-            if length == 0 or l[length - 1] <= item:
-                l.append(item)
-                return
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy.append(self, w_list, w_item)
-
-    def insert(self, w_list, index, w_item):
-        if type(w_item) is W_IntObject:
-            l = self.unerase(w_list.lstorage)
-            length = len(l)
-            item = self.unwrap(w_item)
-            if length == 0 or \
-              ((index == 0 or l[index - 1] <= item) and (index == length or l[index] >= item)):
-                l.insert(index, item)
-                return
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy.insert(self, w_list, index, w_item)
-
-    def _extend_from_list(self, w_list, w_item):
-        if type(w_item) is W_ListObject and \
-          w_item.strategy is self.space.fromcache(IntegerListAscendingStrategy):
-            self_l = self.unerase(w_list.lstorage)
-            other_l = self.unerase(w_item.lstorage)
-            if len(self_l) == 0 or len(other_l) == 0 or self_l[len(self_l) - 1] <= other_l[0]:
-                self_l.extend(other_l)
-                return
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy._extend_from_list(self,w_list, w_item)
-
-    def setitem(self, w_list, index, w_item):
-        if type(w_item) is W_IntObject:
-            item = self.unwrap(w_item)
-            l = self.unerase(w_list.lstorage)
-            length = len(l)
-            assert len(l) > 0
-            if (index == 0 or l[index - 1] <= item) \
-              and (index == length - 1 or l[index + 1] >= item):
-                l[index] = item
-                return
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy.setitem(self, w_list, index, w_item)
-
-    def setslice(self, w_list, start, step, slicelength, w_other):
-        # XXX could be supported if really desired
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy.setslice(self, w_list, start, step, slicelength, w_other)
-
-    def inplace_mul(self, w_list, times):
-        l = self.unerase(w_list.lstorage)
-        length = len(l)
-        if length == 0:
-            return
-        if l[0] != l[length - 1]:
-            w_list.strategy = self.space.fromcache(IntegerListStrategy)
-        IntegerListStrategy.inplace_mul(self, w_list, times)
-
-    def reverse(self, w_list):
-        self.unerase(w_list.lstorage).reverse()
-        w_list.strategy = self.space.fromcache(IntegerListStrategy)
-
-    def _safe_find(self, w_list, obj, start, stop):
-        if w_list.length() < 16:
-            return IntegerListStrategy._safe_find(self, w_list, obj, start, stop)
-        l = self.unerase(w_list.lstorage)
-        start -= 1
-        stop += 1
-        while stop - start > 1:
-            p = (start + stop) / 2
-            if l[p] < obj:
-                start = p
-            else:
-                stop = p
-        if stop == len(l) or l[stop] != obj:
-            raise ValueError
-        return stop
-
-
 class FloatListStrategy(ListStrategy):
     import_from_mixin(AbstractUnwrappedStrategy)
 
@@ -1754,7 +1640,7 @@
         elif w_objt is W_IntObject or w_objt is W_LongObject:
             return self._safe_find(w_list, w_obj.float_w(self.space), start, stop)
         elif w_objt is W_StringObject or w_objt is W_UnicodeObject \
-          or self.space.type(w_obj).compares_by_identity():
+          or self.space.type(w_obj).compares_by_identity(): 
             raise ValueError
         return ListStrategy.find(self, w_list, w_obj, start, stop)
 
diff --git a/pypy/objspace/std/test/test_listobject.py b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -526,12 +526,6 @@
         assert not l.__contains__(-20)
         assert not l.__contains__(-21)
 
-        l = list(range(1000))
-        assert l.index(123) == 123
-        del l[123]
-        raises(ValueError, "l.index(123)")
-        assert l.index(124) == 123
-
     def test_call_list(self):
         assert list('') == []
         assert list('abc') == ['a', 'b', 'c']
@@ -583,10 +577,6 @@
         assert m == [5,2,3]
         assert l == [1,2,3]
 
-        l = [1,2,3]
-        l.extend([3,4])
-        assert l == [1, 2, 3, 3, 4]
-
     def test_extend_tuple(self):
         l = l0 = [1]
         l.extend((2,))
diff --git a/pypy/objspace/std/test/test_liststrategies.py b/pypy/objspace/std/test/test_liststrategies.py
--- a/pypy/objspace/std/test/test_liststrategies.py
+++ b/pypy/objspace/std/test/test_liststrategies.py
@@ -1,8 +1,5 @@
 import sys
-from pypy.objspace.std.listobject import W_ListObject, EmptyListStrategy, \
-  ObjectListStrategy, IntegerListStrategy, IntegerListAscendingStrategy, \
-  FloatListStrategy, StringListStrategy, RangeListStrategy, make_range_list, \
-  UnicodeListStrategy
+from pypy.objspace.std.listobject import W_ListObject, EmptyListStrategy, ObjectListStrategy, IntegerListStrategy, FloatListStrategy, StringListStrategy, RangeListStrategy, make_range_list, UnicodeListStrategy
 from pypy.objspace.std import listobject
 from pypy.objspace.std.test.test_listobject import TestW_ListObject
 
@@ -345,6 +342,7 @@
         r = make_range_list(space, 1,3,7)
         empty.extend(r)
         assert isinstance(empty.strategy, RangeListStrategy)
+        print empty.getitem(6)
         assert space.is_true(space.eq(empty.getitem(1), w(4)))
 
         empty = W_ListObject(space, [])
@@ -482,8 +480,7 @@
         l1 = make_range_list(self.space, 0, 1, 100)
         l2 = W_ListObject(self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])
         l3 = self.space.add(l2, l1)
-        assert isinstance(l2.strategy, IntegerListAscendingStrategy)
-        assert isinstance(l3.strategy, IntegerListStrategy)
+        assert l3.strategy is l2.strategy
 
     def test_mul(self):
         l1 = W_ListObject(self.space, [self.space.wrap(1), self.space.wrap(2), self.space.wrap(3)])
@@ -662,80 +659,6 @@
         list_copy[0] = 42
         assert list_orig == [1, 2, 3]
 
-    def test_integerascending(self):
-        space = self.space
-        w_l = W_ListObject(space, [space.wrap(1), space.wrap(3)])
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.append(space.wrap(5))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-
-        w_l.insert(0, space.wrap(0))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.insert(4, space.wrap(6))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        assert space.listview_int(w_l) == [0, 1, 3, 5 ,6]
-
-        w_l = W_ListObject(space, [])
-        w_l.insert(0, space.wrap(1))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-
-        w_l = W_ListObject(space, [space.wrap(3), space.wrap(2), space.wrap(4), space.wrap(1)])
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-        l2 = [1, 2, 3, 4] 
-        space.call_method(w_l, "sort")
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        assert space.listview_int(w_l) == l2
-        space.call_method(w_l, "sort")
-        assert space.listview_int(w_l) == l2
-        w_l.append(space.wrap(5))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.append(space.wrap(0))
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-
-        w_l = W_ListObject(space, [])
-        space.call_method(w_l, "extend", W_ListObject(space, [space.wrap(1), space.wrap(2)]))
-        assert space.listview_int(w_l) == [1, 2]
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-
-        space.call_method(w_l, "extend", W_ListObject(space, [space.wrap(4)]))
-        assert space.listview_int(w_l) == [1, 2, 4]
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-
-        space.call_method(w_l, "pop")
-        space.call_method(w_l, "pop")
-        space.call_method(w_l, "pop")
-        assert space.listview_int(w_l) == []
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        space.call_method(w_l, "extend", W_ListObject(space, [space.wrap(4)]))
-        assert space.listview_int(w_l) == [4]
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-
-        space.call_method(w_l, "extend", W_ListObject(space, [space.wrap(0)]))
-        assert space.listview_int(w_l) == [4, 0]
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-
-        w_l = W_ListObject(space, [space.wrap(1), space.wrap(3), space.wrap(5)])
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.setitem(0, space.wrap(0))
-        w_l.setitem(1, space.wrap(4))
-        w_l.setitem(2, space.wrap(6))
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.setitem(1, space.wrap(7))
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-
-        w_l = W_ListObject(space, [space.wrap(1), space.wrap(1)])
-        w_l.inplace_mul(2)
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.append(space.wrap(2))
-        w_l.inplace_mul(2)
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-
-        w_l = W_ListObject(space, [space.wrap(1), space.wrap(2)])
-        assert isinstance(w_l.strategy, IntegerListAscendingStrategy)
-        w_l.sort(True)
-        assert isinstance(w_l.strategy, IntegerListStrategy)
-        assert space.listview_int(w_l) == [2, 1]
-
 
 class TestW_ListStrategiesDisabled:
     spaceconfig = {"objspace.std.withliststrategies": False}


More information about the pypy-commit mailing list