Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r64293:a4bb67b9f4e1
Date: 2013-05-18 14:12 -0700
http://bitbucket.org/pypy/pypy/changeset/a4bb67b9f4e1/

Log:    reapply the py3k dict modifications

diff --git a/pypy/objspace/std/dictmultiobject.py 
b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -171,41 +171,7 @@
                 return space.w_False
         return space.w_True
 
-    def descr_lt(self, space, w_other):
-        if not isinstance(w_other, W_DictMultiObject):
-            return space.w_NotImplemented
-        return self._compare_lt(space, w_other)
-
-    def descr_gt(self, space, w_other):
-        if not isinstance(w_other, W_DictMultiObject):
-            return space.w_NotImplemented
-        return w_other._compare_lt(space, self)
-
-    def _compare_lt(self, space, w_other):
-        # Different sizes, no problem
-        if self.length() < w_other.length():
-            return space.w_True
-        if self.length() > w_other.length():
-            return space.w_False
-
-        # Same size
-        w_leftdiff, w_leftval = characterize(space, self, w_other)
-        if w_leftdiff is None:
-            return space.w_False
-        w_rightdiff, w_rightval = characterize(space, w_other, self)
-        if w_rightdiff is None:
-            # w_leftdiff is not None, w_rightdiff is None
-            return space.w_True
-        w_res = space.lt(w_leftdiff, w_rightdiff)
-        if (not space.is_true(w_res) and
-            space.eq_w(w_leftdiff, w_rightdiff) and
-            w_rightval is not None):
-            w_res = space.lt(w_leftval, w_rightval)
-        return w_res
-
     descr_ne = negate(descr_eq)
-    descr_le = negate(descr_gt)
-    descr_ge = negate(descr_lt)
 
     def descr_len(self, space):
         return space.wrap(self.length())
@@ -247,16 +213,16 @@
         return w_new
 
     def descr_items(self, space):
-        """D.items() -> list of D's (key, value) pairs, as 2-tuples"""
-        return space.newlist(self.items())
+        """D.items() -> a set-like object providing a view on D's items"""
+        return W_DictViewItemsObject(space, self)
 
     def descr_keys(self, space):
-        """D.keys() -> list of D's keys"""
-        return self.w_keys()
+        """D.keys() -> a set-like object providing a view on D's keys"""
+        return W_DictViewKeysObject(space, self)
 
     def descr_values(self, space):
-        """D.values() -> list of D's values"""
-        return space.newlist(self.values())
+        """D.values() -> an object providing a view on D's values"""
+        return W_DictViewValuesObject(space, self)
 
     def descr_iteritems(self, space):
         """D.iteritems() -> an iterator over the (key, value) items of D"""
@@ -270,22 +236,6 @@
         """D.itervalues() -> an iterator over the values of D"""
         return W_DictMultiIterValuesObject(space, self.itervalues())
 
-    def descr_viewitems(self, space):
-        """D.viewitems() -> a set-like object providing a view on D's items"""
-        return W_DictViewItemsObject(space, self)
-
-    def descr_viewkeys(self, space):
-        """D.viewkeys() -> a set-like object providing a view on D's keys"""
-        return W_DictViewKeysObject(space, self)
-
-    def descr_viewvalues(self, space):
-        """D.viewvalues() -> an object providing a view on D's values"""
-        return W_DictViewValuesObject(space, self)
-
-    def descr_has_key(self, space, w_key):
-        """D.has_key(k) -> True if D has a key k, else False"""
-        return space.newbool(self.getitem(w_key) is not None)
-
     def descr_clear(self, space):
         """D.clear() -> None.  Remove all items from D."""
         self.clear()
@@ -369,10 +319,11 @@
         currently_in_repr[dict_id] = 1
         try:
             items = []
-            # XXX for now, we cannot use iteritems() at app-level because
-            #     we want a reasonable result instead of a RuntimeError
-            #     even if the dict is mutated by the repr() in the loop.
-            for k, v in dict.items(d):
+            # XXX for now, we cannot use items() without list at
+            #     app-level because we want a reasonable result instead
+            #     of a RuntimeError even if the dict is mutated by the
+            #     repr() in the loop.
+            for k, v in list(dict.items(d)):
                 items.append(repr(k) + ": " + repr(v))
             return "{" +  ', '.join(items) + "}"
         finally:
@@ -404,10 +355,6 @@
 
     __eq__ = interp2app(W_DictMultiObject.descr_eq),
     __ne__ = interp2app(W_DictMultiObject.descr_ne),
-    __lt__ = interp2app(W_DictMultiObject.descr_lt),
-    __le__ = interp2app(W_DictMultiObject.descr_le),
-    __gt__ = interp2app(W_DictMultiObject.descr_gt),
-    __ge__ = interp2app(W_DictMultiObject.descr_ge),
 
     __len__ = interp2app(W_DictMultiObject.descr_len),
     __iter__ = interp2app(W_DictMultiObject.descr_iter),
@@ -422,13 +369,10 @@
     items = interp2app(W_DictMultiObject.descr_items),
     keys = interp2app(W_DictMultiObject.descr_keys),
     values = interp2app(W_DictMultiObject.descr_values),
+    # XXX:
     iteritems = interp2app(W_DictMultiObject.descr_iteritems),
     iterkeys = interp2app(W_DictMultiObject.descr_iterkeys),
     itervalues = interp2app(W_DictMultiObject.descr_itervalues),
-    viewkeys = interp2app(W_DictMultiObject.descr_viewkeys),
-    viewitems = interp2app(W_DictMultiObject.descr_viewitems),
-    viewvalues = interp2app(W_DictMultiObject.descr_viewvalues),
-    has_key = interp2app(W_DictMultiObject.descr_has_key),
     clear = interp2app(W_DictMultiObject.descr_clear),
     get = interp2app(W_DictMultiObject.descr_get),
     pop = interp2app(W_DictMultiObject.descr_pop),
@@ -1106,29 +1050,6 @@
     if space.is_true(w_kwds):
         update1(space, w_dict, w_kwds)
 
-def characterize(space, w_a, w_b):
-    """(similar to CPython)
-    returns the smallest key in acontent for which b's value is
-    different or absent and this value"""
-    w_smallest_diff_a_key = None
-    w_its_value = None
-    iteratorimplementation = w_a.iteritems()
-    while True:
-        w_key, w_val = iteratorimplementation.next_item()
-        if w_key is None:
-            break
-        if w_smallest_diff_a_key is None or space.is_true(space.lt(
-                w_key, w_smallest_diff_a_key)):
-            w_bvalue = w_b.getitem(w_key)
-            if w_bvalue is None:
-                w_its_value = w_val
-                w_smallest_diff_a_key = w_key
-            else:
-                if not space.eq_w(w_val, w_bvalue):
-                    w_its_value = w_val
-                    w_smallest_diff_a_key = w_key
-    return w_smallest_diff_a_key, w_its_value
-
 
 # ____________________________________________________________
 # Iteration
@@ -1161,7 +1082,7 @@
         This is of course not the standard way.
 
         XXX to do: remove this __reduce__ method and do
-        a registration with copy_reg, instead.
+        a registration with copyreg, instead.
         """
         w_mod    = space.getbuiltinmodule('_pickle_support')
         mod      = space.interp_w(MixedModule, w_mod)
@@ -1225,21 +1146,21 @@
 W_DictMultiIterItemsObject.typedef = StdTypeDef(
     "dict_iteritems",
     __iter__ = interp2app(W_DictMultiIterItemsObject.descr_iter),
-    next = interp2app(W_DictMultiIterItemsObject.descr_next),
+    __next__ = interp2app(W_DictMultiIterItemsObject.descr_next),
     __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
     )
 
 W_DictMultiIterKeysObject.typedef = StdTypeDef(
     "dict_iterkeys",
     __iter__ = interp2app(W_DictMultiIterKeysObject.descr_iter),
-    next = interp2app(W_DictMultiIterKeysObject.descr_next),
+    __next__ = interp2app(W_DictMultiIterKeysObject.descr_next),
     __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
     )
 
 W_DictMultiIterValuesObject.typedef = StdTypeDef(
     "dict_itervalues",
     __iter__ = interp2app(W_DictMultiIterValuesObject.descr_iter),
-    next = interp2app(W_DictMultiIterValuesObject.descr_next),
+    __next__ = interp2app(W_DictMultiIterValuesObject.descr_next),
     __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
     )
 
@@ -1252,10 +1173,10 @@
         w_self.w_dict = w_dict
 
     def descr_repr(self, space):
+        typename = space.type(self).getname(space).decode('utf-8')
         w_seq = space.call_function(space.w_list, self)
-        w_repr = space.repr(w_seq)
-        return space.wrap("%s(%s)" % (space.type(self).getname(space),
-                                      space.str_w(w_repr)))
+        seq_repr = space.unicode_w(space.repr(w_seq))
+        return space.wrap(u"%s(%s)" % (typename, seq_repr))
 
     def descr_len(self, space):
         return space.len(self.w_dict)
@@ -1321,6 +1242,27 @@
             return _all_contained_in(space, w_other, self)
         return space.w_False
 
+    def descr_isdisjoint(self, space, w_other):
+        """"Return True if the view and the given iterable have a null
+        intersection.
+        """
+        if self is w_other:
+            return space.newbool(space.len_w(self) == 0)
+
+        if _is_set_like(w_other):
+            # if w_other is set-like and it's longer, we iterate over
+            # self instead
+            len_self = space.len_w(self)
+            len_other = space.len_w(w_other)
+            if len_other > len_self:
+                self, w_other = w_other, self
+
+        w_iter = space.iter(w_other)
+        for w_item in space.iteriterable(w_iter):
+            if space.is_true(space.contains(self, w_item)):
+                return space.w_False
+        return space.w_True
+
     def _as_set_op(name, methname):
         @func_renamer('descr_' + name)
         def op(self, space, w_other):
@@ -1372,6 +1314,7 @@
     __ror__ = interp2app(W_DictViewItemsObject.descr_ror),
     __xor__ = interp2app(W_DictViewItemsObject.descr_xor),
     __rxor__ = interp2app(W_DictViewItemsObject.descr_rxor),
+    isdisjoint = interp2app(W_DictViewItemsObject.descr_isdisjoint),
     )
 
 W_DictViewKeysObject.typedef = StdTypeDef(
@@ -1395,6 +1338,7 @@
     __ror__ = interp2app(W_DictViewKeysObject.descr_ror),
     __xor__ = interp2app(W_DictViewKeysObject.descr_xor),
     __rxor__ = interp2app(W_DictViewKeysObject.descr_rxor),
+    isdisjoint = interp2app(W_DictViewKeysObject.descr_isdisjoint),
     )
 
 W_DictViewValuesObject.typedef = StdTypeDef(
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to