diff -r 6c6c873c0059 Doc/library/multiprocessing.rst --- a/Doc/library/multiprocessing.rst Tue Mar 10 19:40:37 2015 -0700 +++ b/Doc/library/multiprocessing.rst Wed Mar 11 16:40:10 2015 +0200 @@ -1834,7 +1834,7 @@ itself. This means, for example, that o >>> l = manager.list(range(10)) >>> l._callmethod('__len__') 10 - >>> l._callmethod('__getslice__', (2, 7)) # equiv to `l[2:7]` + >>> l._callmethod('__getitem__', (slice(2, 7),)) # equiv to `l[2:7]` [2, 3, 4, 5, 6] >>> l._callmethod('__getitem__', (20,)) # equiv to `l[20]` Traceback (most recent call last): diff -r 6c6c873c0059 Doc/library/unittest.mock.rst --- a/Doc/library/unittest.mock.rst Tue Mar 10 19:40:37 2015 -0700 +++ b/Doc/library/unittest.mock.rst Wed Mar 11 16:40:10 2015 +0200 @@ -1621,19 +1621,19 @@ The full list of supported magic methods * ``__hash__``, ``__sizeof__``, ``__repr__`` and ``__str__`` * ``__dir__``, ``__format__`` and ``__subclasses__`` * ``__floor__``, ``__trunc__`` and ``__ceil__`` -* Comparisons: ``__cmp__``, ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, +* Comparisons: ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, ``__eq__`` and ``__ne__`` * Container methods: ``__getitem__``, ``__setitem__``, ``__delitem__``, - ``__contains__``, ``__len__``, ``__iter__``, ``__getslice__``, - ``__setslice__``, ``__reversed__`` and ``__missing__`` + ``__contains__``, ``__len__``, ``__iter__``, ``__reversed__`` + and ``__missing__`` * Context manager: ``__enter__`` and ``__exit__`` * Unary numeric methods: ``__neg__``, ``__pos__`` and ``__invert__`` * The numeric methods (including right hand and in-place variants): - ``__add__``, ``__sub__``, ``__mul__``, ``__div__``, + ``__add__``, ``__sub__``, ``__mul__``, ``__matmul__``, ``__truediv__``, ``__floordiv__``, ``__mod__``, ``__divmod__``, ``__lshift__``, ``__rshift__``, ``__and__``, ``__xor__``, ``__or__``, and ``__pow__`` -* Numeric conversion methods: ``__complex__``, ``__int__``, ``__float__``, - ``__index__`` and ``__coerce__`` +* Numeric conversion methods: ``__complex__``, ``__int__``, ``__float__`` + and ``__index__`` * Descriptor methods: ``__get__``, ``__set__`` and ``__delete__`` * Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, ``__getnewargs__``, ``__getstate__`` and ``__setstate__`` diff -r 6c6c873c0059 Lib/_pydecimal.py --- a/Lib/_pydecimal.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/_pydecimal.py Wed Mar 11 16:40:10 2015 +0200 @@ -960,13 +960,12 @@ class Decimal(object): return self._cmp(other) >= 0 def compare(self, other, context=None): - """Compares one to another. - - -1 => a < b - 0 => a = b - 1 => a > b - NaN => one is NaN - Like __cmp__, but returns Decimal instances. + """Compare self to other. Return a decimal value: + + a or b is a NaN ==> Decimal('NaN') + a < b ==> Decimal('-1') + a == b ==> Decimal('0') + a > b ==> Decimal('1') """ other = _convert_other(other, raiseit=True) diff -r 6c6c873c0059 Lib/datetime.py --- a/Lib/datetime.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/datetime.py Wed Mar 11 16:40:10 2015 +0200 @@ -651,7 +651,7 @@ class date: Operators: __repr__, __str__ - __cmp__, __hash__ + __eq__, __le__, __lt__, __ge__, __gt__, __hash__ __add__, __radd__, __sub__ (add/radd only with timedelta arg) Methods: @@ -786,7 +786,8 @@ class date: """day (1-31)""" return self._day - # Standard conversions, __cmp__, __hash__ (and helpers) + # Standard conversions, __eq__, __le__, __lt__, __ge__, __gt__, + # __hash__ (and helpers) def timetuple(self): "Return local time tuple compatible with time.localtime()." @@ -1010,7 +1011,7 @@ class time: Operators: __repr__, __str__ - __cmp__, __hash__ + __eq__, __le__, __lt__, __ge__, __gt__, __hash__ Methods: diff -r 6c6c873c0059 Lib/multiprocessing/sharedctypes.py --- a/Lib/multiprocessing/sharedctypes.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/multiprocessing/sharedctypes.py Wed Mar 11 16:40:10 2015 +0200 @@ -225,14 +225,6 @@ class SynchronizedArray(SynchronizedBase with self: self._obj[i] = value - def __getslice__(self, start, stop): - with self: - return self._obj[start:stop] - - def __setslice__(self, start, stop, values): - with self: - self._obj[start:stop] = values - class SynchronizedString(SynchronizedArray): value = make_property('value') diff -r 6c6c873c0059 Lib/sqlite3/test/types.py --- a/Lib/sqlite3/test/types.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/sqlite3/test/types.py Wed Mar 11 16:40:10 2015 +0200 @@ -88,19 +88,10 @@ class DeclTypesTests(unittest.TestCase): _val = _val.decode('utf-8') self.val = _val - def __cmp__(self, other): + def __eq__(self, other): if not isinstance(other, DeclTypesTests.Foo): - raise ValueError - if self.val == other.val: - return 0 - else: - return 1 - - def __eq__(self, other): - c = self.__cmp__(other) - if c is NotImplemented: - return c - return c == 0 + return NotImplemented + return self.val == other.val def __conform__(self, protocol): if protocol is sqlite.PrepareProtocol: diff -r 6c6c873c0059 Lib/test/mapping_tests.py --- a/Lib/test/mapping_tests.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/mapping_tests.py Wed Mar 11 16:40:10 2015 +0200 @@ -64,7 +64,7 @@ class BasicTestMappingProtocol(unittest. self.assertEqual(d, d) self.assertNotEqual(p, d) self.assertNotEqual(d, p) - #__non__zero__ + #bool if p: self.fail("Empty mapping must compare to False") if not d: self.fail("Full mapping must compare to True") # keys(), items(), iterkeys() ... diff -r 6c6c873c0059 Lib/test/test_abc.py --- a/Lib/test/test_abc.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_abc.py Wed Mar 11 16:40:10 2015 +0200 @@ -194,9 +194,9 @@ class TestABC(unittest.TestCase): # check that the property's __isabstractmethod__ descriptor does the # right thing when presented with a value that fails truth testing: class NotBool(object): - def __nonzero__(self): + def __bool__(self): raise ValueError() - __len__ = __nonzero__ + __len__ = __bool__ with self.assertRaises(ValueError): class F(C): def bar(self): diff -r 6c6c873c0059 Lib/test/test_augassign.py --- a/Lib/test/test_augassign.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_augassign.py Wed Mar 11 16:40:10 2015 +0200 @@ -144,14 +144,6 @@ class AugAssignTest(unittest.TestCase): output.append("__imatmul__ called") return self - def __div__(self, val): - output.append("__div__ called") - def __rdiv__(self, val): - output.append("__rdiv__ called") - def __idiv__(self, val): - output.append("__idiv__ called") - return self - def __floordiv__(self, val): output.append("__floordiv__ called") return self diff -r 6c6c873c0059 Lib/test/test_class.py --- a/Lib/test/test_class.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_class.py Wed Mar 11 16:40:10 2015 +0200 @@ -13,8 +13,12 @@ testmeths = [ "rsub", "mul", "rmul", + "matmul", + "rmatmul", "truediv", "rtruediv", + "floordiv", + "rfloordiv", "mod", "rmod", "divmod", @@ -174,15 +178,31 @@ class ClassTests(unittest.TestCase): 1 * testme self.assertCallStack([("__rmul__", (testme, 1))]) - if 1/2 == 0: - callLst[:] = [] - testme / 1 - self.assertCallStack([("__div__", (testme, 1))]) + callLst[:] = [] + testme @ 1 + self.assertCallStack([("__matmul__", (testme, 1))]) + callLst[:] = [] + 1 @ testme + self.assertCallStack([("__rmatmul__", (testme, 1))]) - callLst[:] = [] - 1 / testme - self.assertCallStack([("__rdiv__", (testme, 1))]) + callLst[:] = [] + testme / 1 + self.assertCallStack([("__truediv__", (testme, 1))]) + + + callLst[:] = [] + 1 / testme + self.assertCallStack([("__rtruediv__", (testme, 1))]) + + callLst[:] = [] + testme // 1 + self.assertCallStack([("__floordiv__", (testme, 1))]) + + + callLst[:] = [] + 1 // testme + self.assertCallStack([("__rfloordiv__", (testme, 1))]) callLst[:] = [] testme % 1 @@ -444,12 +464,11 @@ class ClassTests(unittest.TestCase): def __int__(self): return None __float__ = __int__ + __complex__ = __int__ __str__ = __int__ __repr__ = __int__ - __oct__ = __int__ - __hex__ = __int__ - for f in [int, float, str, repr, oct, hex]: + for f in [int, float, complex, str, repr, bin, oct, hex]: self.assertRaises(TypeError, f, BadTypeClass()) def testHashStuff(self): diff -r 6c6c873c0059 Lib/test/test_descr.py --- a/Lib/test/test_descr.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_descr.py Wed Mar 11 16:40:10 2015 +0200 @@ -21,7 +21,9 @@ class OperatorsTest(unittest.TestCase): 'add': '+', 'sub': '-', 'mul': '*', - 'div': '/', + 'matmul': '@', + 'truediv': '/', + 'floordiv': '//', 'divmod': 'divmod', 'pow': '**', 'lshift': '<<', @@ -52,8 +54,6 @@ class OperatorsTest(unittest.TestCase): 'invert': '~', 'int': 'int', 'float': 'float', - 'oct': 'oct', - 'hex': 'hex', } for name, expr in list(self.unops.items()): @@ -82,12 +82,6 @@ class OperatorsTest(unittest.TestCase): def binop_test(self, a, b, res, expr="a+b", meth="__add__"): d = {'a': a, 'b': b} - # XXX Hack so this passes before 2.3 when -Qnew is specified. - if meth == "__div__" and 1/2 == 0.5: - meth = "__truediv__" - - if meth == '__divmod__': pass - self.assertEqual(eval(expr, d), res) t = type(a) m = getattr(t, meth) @@ -221,7 +215,7 @@ class OperatorsTest(unittest.TestCase): def number_operators(self, a, b, skip=[]): dict = {'a': a, 'b': b} - for name, expr in list(self.binops.items()): + for name, expr in self.binops.items(): if name not in skip: name = "__%s__" % name if hasattr(a, name): @@ -261,7 +255,7 @@ class OperatorsTest(unittest.TestCase): # Testing complex operations... self.number_operators(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge', 'int', 'float', - 'divmod', 'mod']) + 'floordiv', 'divmod', 'mod']) class Number(complex): __slots__ = ['prec'] @@ -4177,9 +4171,8 @@ order (MRO) for bases """ ('__sub__', 'x - y', 'x -= y'), ('__mul__', 'x * y', 'x *= y'), ('__matmul__', 'x @ y', 'x @= y'), - ('__truediv__', 'operator.truediv(x, y)', None), - ('__floordiv__', 'operator.floordiv(x, y)', None), - ('__div__', 'x / y', 'x /= y'), + ('__truediv__', 'x / y', 'x /= y'), + ('__floordiv__', 'x // y', 'x //= y'), ('__mod__', 'x % y', 'x %= y'), ('__divmod__', 'divmod(x, y)', None), ('__pow__', 'x ** y', 'x **= y'), @@ -4241,8 +4234,8 @@ order (MRO) for bases """ # Also check type_getattro for correctness. class Meta(type): pass - class X(object): - __metaclass__ = Meta + class X(metaclass=Meta): + pass X.a = 42 Meta.a = Descr("a") self.assertEqual(X.a, 42) diff -r 6c6c873c0059 Lib/test/test_dynamicclassattribute.py --- a/Lib/test/test_dynamicclassattribute.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_dynamicclassattribute.py Wed Mar 11 16:40:10 2015 +0200 @@ -158,9 +158,9 @@ class PropertyTests(unittest.TestCase): # check that the DynamicClassAttribute's __isabstractmethod__ descriptor does the # right thing when presented with a value that fails truth testing: class NotBool(object): - def __nonzero__(self): + def __bool__(self): raise ValueError() - __len__ = __nonzero__ + __len__ = __bool__ with self.assertRaises(ValueError): class C(object): def foo(self): diff -r 6c6c873c0059 Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_inspect.py Wed Mar 11 16:40:10 2015 +0200 @@ -800,7 +800,7 @@ class TestClassesAndFunctions(unittest.T class Meta(type): fish = 'slap' def __dir__(self): - return ['__class__', '__modules__', '__name__', 'fish'] + return ['__class__', '__module__', '__name__', 'fish'] class Class(metaclass=Meta): pass should_find = inspect.Attribute('fish', 'data', Meta, 'slap') diff -r 6c6c873c0059 Lib/test/test_itertools.py --- a/Lib/test/test_itertools.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_itertools.py Wed Mar 11 16:40:10 2015 +0200 @@ -698,7 +698,7 @@ class TestBasicOps(unittest.TestCase): # iter.__next__ failure on inner object self.assertRaises(ExpectedError, gulp, delayed_raise(1)) - # __cmp__ failure + # __eq__ failure class DummyCmp: def __eq__(self, dst): raise ExpectedError diff -r 6c6c873c0059 Lib/test/test_property.py --- a/Lib/test/test_property.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_property.py Wed Mar 11 16:40:10 2015 +0200 @@ -140,9 +140,9 @@ class PropertyTests(unittest.TestCase): # check that the property's __isabstractmethod__ descriptor does the # right thing when presented with a value that fails truth testing: class NotBool(object): - def __nonzero__(self): + def __bool__(self): raise ValueError() - __len__ = __nonzero__ + __len__ = __bool__ with self.assertRaises(ValueError): class C(object): def foo(self): diff -r 6c6c873c0059 Lib/test/test_unicode.py --- a/Lib/test/test_unicode.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/test/test_unicode.py Wed Mar 11 16:40:10 2015 +0200 @@ -2017,64 +2017,24 @@ class UnicodeTest(string_tests.CommonTes self.fail("Should have raised UnicodeDecodeError") def test_conversion(self): - # Make sure __unicode__() works properly + # Make sure __str__() works properly class Foo0: def __str__(self): return "foo" - class Foo1: - def __str__(self): - return "foo" - - class Foo2(object): - def __str__(self): - return "foo" - - class Foo3(object): - def __str__(self): - return "foo" - class Foo4(str): def __str__(self): return "foo" - class Foo5(str): - def __str__(self): - return "foo" - - class Foo6(str): - def __str__(self): - return "foos" - - def __str__(self): - return "foou" - - class Foo7(str): - def __str__(self): - return "foos" - def __str__(self): - return "foou" - class Foo8(str): def __new__(cls, content=""): return str.__new__(cls, 2*content) def __str__(self): return self - class Foo9(str): - def __str__(self): - return "not unicode" - self.assertEqual(str(Foo0()), "foo") - self.assertEqual(str(Foo1()), "foo") - self.assertEqual(str(Foo2()), "foo") - self.assertEqual(str(Foo3()), "foo") self.assertEqual(str(Foo4("bar")), "foo") - self.assertEqual(str(Foo5("bar")), "foo") - self.assertEqual(str(Foo6("bar")), "foou") - self.assertEqual(str(Foo7("bar")), "foou") self.assertEqual(str(Foo8("foo")), "foofoo") - self.assertEqual(str(Foo9("foo")), "not unicode") def test_unicode_repr(self): class s1: diff -r 6c6c873c0059 Lib/unittest/mock.py --- a/Lib/unittest/mock.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Lib/unittest/mock.py Wed Mar 11 16:40:10 2015 +0200 @@ -1668,7 +1668,7 @@ magic_methods = ( ) numerics = ( - "add sub mul div floordiv mod lshift rshift and xor or pow truediv" + "add sub mul matmul truediv floordiv mod lshift rshift and xor or pow" ) inplace = ' '.join('i%s' % n for n in numerics.split()) right = ' '.join('r%s' % n for n in numerics.split()) @@ -1682,6 +1682,7 @@ right = ' '.join('r%s' % n for n in nume '__reduce__', '__reduce_ex__', '__getinitargs__', '__getnewargs__', '__getstate__', '__setstate__', '__getformat__', '__setformat__', '__repr__', '__dir__', '__subclasses__', '__format__', + '__getnewargs_ex__', } diff -r 6c6c873c0059 Modules/_decimal/tests/deccheck.py --- a/Modules/_decimal/tests/deccheck.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Modules/_decimal/tests/deccheck.py Wed Mar 11 16:40:10 2015 +0200 @@ -127,7 +127,7 @@ ContextFunctions = { # Functions that require a restricted exponent range for reasonable runtimes. UnaryRestricted = [ - '__ceil__', '__floor__', '__int__', '__long__', '__trunc__', + '__ceil__', '__floor__', '__int__', '__trunc__', 'to_integral', 'to_integral_value' ] diff -r 6c6c873c0059 Modules/mathmodule.c --- a/Modules/mathmodule.c Tue Mar 10 19:40:37 2015 -0700 +++ b/Modules/mathmodule.c Wed Mar 11 16:40:10 2015 +0200 @@ -1021,7 +1021,7 @@ FUNC1(tanh, tanh, 0, Note 4: A similar implementation is in Modules/cmathmodule.c. Be sure to update both when making changes. - Note 5: The signature of math.fsum() differs from __builtin__.sum() + Note 5: The signature of math.fsum() differs from builtins.sum() because the start argument doesn't make sense in the context of accurate summation. Since the partials table is collapsed before returning a result, sum(seq2, start=sum(seq1)) may not equal the diff -r 6c6c873c0059 Tools/clinic/clinic.py --- a/Tools/clinic/clinic.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Tools/clinic/clinic.py Wed Mar 11 16:40:10 2015 +0200 @@ -1831,9 +1831,9 @@ unsupported_special_methods = set(""" __hash__ __iadd__ __iand__ -__idivmod__ __ifloordiv__ __ilshift__ +__imatmul__ __imod__ __imul__ __index__ @@ -1850,6 +1850,7 @@ unsupported_special_methods = set(""" __len__ __lshift__ __lt__ +__matmul__ __mod__ __mul__ __neg__ @@ -1864,6 +1865,7 @@ unsupported_special_methods = set(""" __repr__ __rfloordiv__ __rlshift__ +__rmatmul__ __rmod__ __rmul__ __ror__ diff -r 6c6c873c0059 Tools/pynche/ColorDB.py --- a/Tools/pynche/ColorDB.py Tue Mar 10 19:40:37 2015 -0700 +++ b/Tools/pynche/ColorDB.py Wed Mar 11 16:40:10 2015 +0200 @@ -23,7 +23,6 @@ color formats, and for calculating other import sys import re from types import * -import operator class BadColor(Exception): pass @@ -232,7 +231,7 @@ def triplet_to_rrggbb(rgbtuple): _maxtuple = (256.0,) * 3 def triplet_to_fractional_rgb(rgbtuple): - return list(map(operator.__div__, rgbtuple, _maxtuple)) + return [x / y for x, y in zip(rgbtuple, _maxtuple)] def triplet_to_brightness(rgbtuple):