mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Issue #23641: Cleaned out legacy dunder names from tests and docs.
Fixed 2 to 3 porting bug in pynche.ColorDB. Added few tests for __truediv__, __floordiv__ and __matmul__.
This commit is contained in:
		
						commit
						c2ccce791c
					
				
					 19 changed files with 86 additions and 124 deletions
				
			
		|  | @ -1834,7 +1834,7 @@ itself.  This means, for example, that one shared object can contain a second: | ||||||
|          >>> l = manager.list(range(10)) |          >>> l = manager.list(range(10)) | ||||||
|          >>> l._callmethod('__len__') |          >>> l._callmethod('__len__') | ||||||
|          10 |          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] |          [2, 3, 4, 5, 6] | ||||||
|          >>> l._callmethod('__getitem__', (20,))     # equiv to `l[20]` |          >>> l._callmethod('__getitem__', (20,))     # equiv to `l[20]` | ||||||
|          Traceback (most recent call last): |          Traceback (most recent call last): | ||||||
|  |  | ||||||
|  | @ -1621,19 +1621,19 @@ The full list of supported magic methods is: | ||||||
| * ``__hash__``, ``__sizeof__``, ``__repr__`` and ``__str__`` | * ``__hash__``, ``__sizeof__``, ``__repr__`` and ``__str__`` | ||||||
| * ``__dir__``, ``__format__`` and ``__subclasses__`` | * ``__dir__``, ``__format__`` and ``__subclasses__`` | ||||||
| * ``__floor__``, ``__trunc__`` and ``__ceil__`` | * ``__floor__``, ``__trunc__`` and ``__ceil__`` | ||||||
| * Comparisons: ``__cmp__``, ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, | * Comparisons: ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, | ||||||
|   ``__eq__`` and ``__ne__`` |   ``__eq__`` and ``__ne__`` | ||||||
| * Container methods: ``__getitem__``, ``__setitem__``, ``__delitem__``, | * Container methods: ``__getitem__``, ``__setitem__``, ``__delitem__``, | ||||||
|   ``__contains__``, ``__len__``, ``__iter__``, ``__getslice__``, |   ``__contains__``, ``__len__``, ``__iter__``, ``__reversed__`` | ||||||
|   ``__setslice__``, ``__reversed__`` and ``__missing__`` |   and ``__missing__`` | ||||||
| * Context manager: ``__enter__`` and ``__exit__`` | * Context manager: ``__enter__`` and ``__exit__`` | ||||||
| * Unary numeric methods: ``__neg__``, ``__pos__`` and ``__invert__`` | * Unary numeric methods: ``__neg__``, ``__pos__`` and ``__invert__`` | ||||||
| * The numeric methods (including right hand and in-place variants): | * The numeric methods (including right hand and in-place variants): | ||||||
|   ``__add__``, ``__sub__``, ``__mul__``, ``__div__``, |   ``__add__``, ``__sub__``, ``__mul__``, ``__matmul__``, ``__div__``, ``__truediv__``, | ||||||
|   ``__floordiv__``, ``__mod__``, ``__divmod__``, ``__lshift__``, |   ``__floordiv__``, ``__mod__``, ``__divmod__``, ``__lshift__``, | ||||||
|   ``__rshift__``, ``__and__``, ``__xor__``, ``__or__``, and ``__pow__`` |   ``__rshift__``, ``__and__``, ``__xor__``, ``__or__``, and ``__pow__`` | ||||||
| * Numeric conversion methods: ``__complex__``, ``__int__``, ``__float__``, | * Numeric conversion methods: ``__complex__``, ``__int__``, ``__float__`` | ||||||
|   ``__index__`` and ``__coerce__`` |   and ``__index__`` | ||||||
| * Descriptor methods: ``__get__``, ``__set__`` and ``__delete__`` | * Descriptor methods: ``__get__``, ``__set__`` and ``__delete__`` | ||||||
| * Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, | * Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, | ||||||
|   ``__getnewargs__``, ``__getstate__`` and ``__setstate__`` |   ``__getnewargs__``, ``__getstate__`` and ``__setstate__`` | ||||||
|  |  | ||||||
|  | @ -960,13 +960,12 @@ def __ge__(self, other, context=None): | ||||||
|         return self._cmp(other) >= 0 |         return self._cmp(other) >= 0 | ||||||
| 
 | 
 | ||||||
|     def compare(self, other, context=None): |     def compare(self, other, context=None): | ||||||
|         """Compares one to another. |         """Compare self to other.  Return a decimal value: | ||||||
| 
 | 
 | ||||||
|         -1 => a < b |         a or b is a NaN ==> Decimal('NaN') | ||||||
|         0  => a = b |         a < b           ==> Decimal('-1') | ||||||
|         1  => a > b |         a == b          ==> Decimal('0') | ||||||
|         NaN => one is NaN |         a > b           ==> Decimal('1') | ||||||
|         Like __cmp__, but returns Decimal instances. |  | ||||||
|         """ |         """ | ||||||
|         other = _convert_other(other, raiseit=True) |         other = _convert_other(other, raiseit=True) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -651,7 +651,7 @@ class date: | ||||||
|     Operators: |     Operators: | ||||||
| 
 | 
 | ||||||
|     __repr__, __str__ |     __repr__, __str__ | ||||||
|     __cmp__, __hash__ |     __eq__, __le__, __lt__, __ge__, __gt__, __hash__ | ||||||
|     __add__, __radd__, __sub__ (add/radd only with timedelta arg) |     __add__, __radd__, __sub__ (add/radd only with timedelta arg) | ||||||
| 
 | 
 | ||||||
|     Methods: |     Methods: | ||||||
|  | @ -786,7 +786,8 @@ def day(self): | ||||||
|         """day (1-31)""" |         """day (1-31)""" | ||||||
|         return self._day |         return self._day | ||||||
| 
 | 
 | ||||||
|     # Standard conversions, __cmp__, __hash__ (and helpers) |     # Standard conversions, __eq__, __le__, __lt__, __ge__, __gt__, | ||||||
|  |     # __hash__ (and helpers) | ||||||
| 
 | 
 | ||||||
|     def timetuple(self): |     def timetuple(self): | ||||||
|         "Return local time tuple compatible with time.localtime()." |         "Return local time tuple compatible with time.localtime()." | ||||||
|  | @ -1010,7 +1011,7 @@ class time: | ||||||
|     Operators: |     Operators: | ||||||
| 
 | 
 | ||||||
|     __repr__, __str__ |     __repr__, __str__ | ||||||
|     __cmp__, __hash__ |     __eq__, __le__, __lt__, __ge__, __gt__, __hash__ | ||||||
| 
 | 
 | ||||||
|     Methods: |     Methods: | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -88,19 +88,10 @@ def __init__(self, _val): | ||||||
|                 _val = _val.decode('utf-8') |                 _val = _val.decode('utf-8') | ||||||
|             self.val = _val |             self.val = _val | ||||||
| 
 | 
 | ||||||
|         def __cmp__(self, other): |  | ||||||
|             if not isinstance(other, DeclTypesTests.Foo): |  | ||||||
|                 raise ValueError |  | ||||||
|             if self.val == other.val: |  | ||||||
|                 return 0 |  | ||||||
|             else: |  | ||||||
|                 return 1 |  | ||||||
| 
 |  | ||||||
|         def __eq__(self, other): |         def __eq__(self, other): | ||||||
|             c = self.__cmp__(other) |             if not isinstance(other, DeclTypesTests.Foo): | ||||||
|             if c is NotImplemented: |                 return NotImplemented | ||||||
|                 return c |             return self.val == other.val | ||||||
|             return c == 0 |  | ||||||
| 
 | 
 | ||||||
|         def __conform__(self, protocol): |         def __conform__(self, protocol): | ||||||
|             if protocol is sqlite.PrepareProtocol: |             if protocol is sqlite.PrepareProtocol: | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ def test_read(self): | ||||||
|         self.assertEqual(d, d) |         self.assertEqual(d, d) | ||||||
|         self.assertNotEqual(p, d) |         self.assertNotEqual(p, d) | ||||||
|         self.assertNotEqual(d, p) |         self.assertNotEqual(d, p) | ||||||
|         #__non__zero__ |         #bool | ||||||
|         if p: self.fail("Empty mapping must compare to False") |         if p: self.fail("Empty mapping must compare to False") | ||||||
|         if not d: self.fail("Full mapping must compare to True") |         if not d: self.fail("Full mapping must compare to True") | ||||||
|         # keys(), items(), iterkeys() ... |         # keys(), items(), iterkeys() ... | ||||||
|  |  | ||||||
|  | @ -194,9 +194,9 @@ def foo(self, val): pass | ||||||
|         # check that the property's __isabstractmethod__ descriptor does the |         # check that the property's __isabstractmethod__ descriptor does the | ||||||
|         # right thing when presented with a value that fails truth testing: |         # right thing when presented with a value that fails truth testing: | ||||||
|         class NotBool(object): |         class NotBool(object): | ||||||
|             def __nonzero__(self): |             def __bool__(self): | ||||||
|                 raise ValueError() |                 raise ValueError() | ||||||
|             __len__ = __nonzero__ |             __len__ = __bool__ | ||||||
|         with self.assertRaises(ValueError): |         with self.assertRaises(ValueError): | ||||||
|             class F(C): |             class F(C): | ||||||
|                 def bar(self): |                 def bar(self): | ||||||
|  |  | ||||||
|  | @ -144,14 +144,6 @@ def __imatmul__(self, val): | ||||||
|                 output.append("__imatmul__ called") |                 output.append("__imatmul__ called") | ||||||
|                 return self |                 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): |             def __floordiv__(self, val): | ||||||
|                 output.append("__floordiv__ called") |                 output.append("__floordiv__ called") | ||||||
|                 return self |                 return self | ||||||
|  |  | ||||||
|  | @ -13,8 +13,12 @@ | ||||||
|     "rsub", |     "rsub", | ||||||
|     "mul", |     "mul", | ||||||
|     "rmul", |     "rmul", | ||||||
|  |     "matmul", | ||||||
|  |     "rmatmul", | ||||||
|     "truediv", |     "truediv", | ||||||
|     "rtruediv", |     "rtruediv", | ||||||
|  |     "floordiv", | ||||||
|  |     "rfloordiv", | ||||||
|     "mod", |     "mod", | ||||||
|     "rmod", |     "rmod", | ||||||
|     "divmod", |     "divmod", | ||||||
|  | @ -174,15 +178,31 @@ def testBinaryOps(self): | ||||||
|         1 * testme |         1 * testme | ||||||
|         self.assertCallStack([("__rmul__", (testme, 1))]) |         self.assertCallStack([("__rmul__", (testme, 1))]) | ||||||
| 
 | 
 | ||||||
|         if 1/2 == 0: |         callLst[:] = [] | ||||||
|             callLst[:] = [] |         testme @ 1 | ||||||
|             testme / 1 |         self.assertCallStack([("__matmul__", (testme, 1))]) | ||||||
|             self.assertCallStack([("__div__", (testme, 1))]) | 
 | ||||||
|  |         callLst[:] = [] | ||||||
|  |         1 @ testme | ||||||
|  |         self.assertCallStack([("__rmatmul__", (testme, 1))]) | ||||||
|  | 
 | ||||||
|  |         callLst[:] = [] | ||||||
|  |         testme / 1 | ||||||
|  |         self.assertCallStack([("__truediv__", (testme, 1))]) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|             callLst[:] = [] |         callLst[:] = [] | ||||||
|             1 / testme |         1 / testme | ||||||
|             self.assertCallStack([("__rdiv__", (testme, 1))]) |         self.assertCallStack([("__rtruediv__", (testme, 1))]) | ||||||
|  | 
 | ||||||
|  |         callLst[:] = [] | ||||||
|  |         testme // 1 | ||||||
|  |         self.assertCallStack([("__floordiv__", (testme, 1))]) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         callLst[:] = [] | ||||||
|  |         1 // testme | ||||||
|  |         self.assertCallStack([("__rfloordiv__", (testme, 1))]) | ||||||
| 
 | 
 | ||||||
|         callLst[:] = [] |         callLst[:] = [] | ||||||
|         testme % 1 |         testme % 1 | ||||||
|  | @ -444,12 +464,16 @@ class BadTypeClass: | ||||||
|             def __int__(self): |             def __int__(self): | ||||||
|                 return None |                 return None | ||||||
|             __float__ = __int__ |             __float__ = __int__ | ||||||
|  |             __complex__ = __int__ | ||||||
|             __str__ = __int__ |             __str__ = __int__ | ||||||
|             __repr__ = __int__ |             __repr__ = __int__ | ||||||
|             __oct__ = __int__ |             __bytes__ = __int__ | ||||||
|             __hex__ = __int__ |             __bool__ = __int__ | ||||||
|  |             __index__ = __int__ | ||||||
|  |         def index(x): | ||||||
|  |             return [][x] | ||||||
| 
 | 
 | ||||||
|         for f in [int, float, str, repr, oct, hex]: |         for f in [float, complex, str, repr, bytes, bin, oct, hex, bool, index]: | ||||||
|             self.assertRaises(TypeError, f, BadTypeClass()) |             self.assertRaises(TypeError, f, BadTypeClass()) | ||||||
| 
 | 
 | ||||||
|     def testHashStuff(self): |     def testHashStuff(self): | ||||||
|  |  | ||||||
|  | @ -21,7 +21,9 @@ def __init__(self, *args, **kwargs): | ||||||
|             'add': '+', |             'add': '+', | ||||||
|             'sub': '-', |             'sub': '-', | ||||||
|             'mul': '*', |             'mul': '*', | ||||||
|             'div': '/', |             'matmul': '@', | ||||||
|  |             'truediv': '/', | ||||||
|  |             'floordiv': '//', | ||||||
|             'divmod': 'divmod', |             'divmod': 'divmod', | ||||||
|             'pow': '**', |             'pow': '**', | ||||||
|             'lshift': '<<', |             'lshift': '<<', | ||||||
|  | @ -52,8 +54,6 @@ def __init__(self, *args, **kwargs): | ||||||
|             'invert': '~', |             'invert': '~', | ||||||
|             'int': 'int', |             'int': 'int', | ||||||
|             'float': 'float', |             'float': 'float', | ||||||
|             'oct': 'oct', |  | ||||||
|             'hex': 'hex', |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         for name, expr in list(self.unops.items()): |         for name, expr in list(self.unops.items()): | ||||||
|  | @ -82,12 +82,6 @@ def unop_test(self, a, res, expr="len(a)", meth="__len__"): | ||||||
|     def binop_test(self, a, b, res, expr="a+b", meth="__add__"): |     def binop_test(self, a, b, res, expr="a+b", meth="__add__"): | ||||||
|         d = {'a': a, 'b': b} |         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) |         self.assertEqual(eval(expr, d), res) | ||||||
|         t = type(a) |         t = type(a) | ||||||
|         m = getattr(t, meth) |         m = getattr(t, meth) | ||||||
|  | @ -221,7 +215,7 @@ def test_dicts(self): | ||||||
|     def number_operators(self, a, b, skip=[]): |     def number_operators(self, a, b, skip=[]): | ||||||
|         dict = {'a': a, 'b': b} |         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: |             if name not in skip: | ||||||
|                 name = "__%s__" % name |                 name = "__%s__" % name | ||||||
|                 if hasattr(a, name): |                 if hasattr(a, name): | ||||||
|  | @ -261,7 +255,7 @@ def test_complexes(self): | ||||||
|         # Testing complex operations... |         # Testing complex operations... | ||||||
|         self.number_operators(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge', |         self.number_operators(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge', | ||||||
|                                                   'int', 'float', |                                                   'int', 'float', | ||||||
|                                                   'divmod', 'mod']) |                                                   'floordiv', 'divmod', 'mod']) | ||||||
| 
 | 
 | ||||||
|         class Number(complex): |         class Number(complex): | ||||||
|             __slots__ = ['prec'] |             __slots__ = ['prec'] | ||||||
|  | @ -4177,9 +4171,8 @@ def check(expr, x, y): | ||||||
|                 ('__sub__',      'x - y',                   'x -= y'), |                 ('__sub__',      'x - y',                   'x -= y'), | ||||||
|                 ('__mul__',      'x * y',                   'x *= y'), |                 ('__mul__',      'x * y',                   'x *= y'), | ||||||
|                 ('__matmul__',   'x @ y',                   'x @= y'), |                 ('__matmul__',   'x @ y',                   'x @= y'), | ||||||
|                 ('__truediv__',  'operator.truediv(x, y)',  None), |                 ('__truediv__',  'x / y',                   'x /= y'), | ||||||
|                 ('__floordiv__', 'operator.floordiv(x, y)', None), |                 ('__floordiv__', 'x // y',                  'x //= y'), | ||||||
|                 ('__div__',      'x / y',                   'x /= y'), |  | ||||||
|                 ('__mod__',      'x % y',                   'x %= y'), |                 ('__mod__',      'x % y',                   'x %= y'), | ||||||
|                 ('__divmod__',   'divmod(x, y)',            None), |                 ('__divmod__',   'divmod(x, y)',            None), | ||||||
|                 ('__pow__',      'x ** y',                  'x **= y'), |                 ('__pow__',      'x ** y',                  'x **= y'), | ||||||
|  | @ -4241,8 +4234,8 @@ class X(object): | ||||||
|         # Also check type_getattro for correctness. |         # Also check type_getattro for correctness. | ||||||
|         class Meta(type): |         class Meta(type): | ||||||
|             pass |             pass | ||||||
|         class X(object): |         class X(metaclass=Meta): | ||||||
|             __metaclass__ = Meta |             pass | ||||||
|         X.a = 42 |         X.a = 42 | ||||||
|         Meta.a = Descr("a") |         Meta.a = Descr("a") | ||||||
|         self.assertEqual(X.a, 42) |         self.assertEqual(X.a, 42) | ||||||
|  |  | ||||||
|  | @ -158,9 +158,9 @@ def foo(self): | ||||||
|         # check that the DynamicClassAttribute's __isabstractmethod__ descriptor does the |         # check that the DynamicClassAttribute's __isabstractmethod__ descriptor does the | ||||||
|         # right thing when presented with a value that fails truth testing: |         # right thing when presented with a value that fails truth testing: | ||||||
|         class NotBool(object): |         class NotBool(object): | ||||||
|             def __nonzero__(self): |             def __bool__(self): | ||||||
|                 raise ValueError() |                 raise ValueError() | ||||||
|             __len__ = __nonzero__ |             __len__ = __bool__ | ||||||
|         with self.assertRaises(ValueError): |         with self.assertRaises(ValueError): | ||||||
|             class C(object): |             class C(object): | ||||||
|                 def foo(self): |                 def foo(self): | ||||||
|  |  | ||||||
|  | @ -800,7 +800,7 @@ def test_classify_metaclass_class_attribute(self): | ||||||
|         class Meta(type): |         class Meta(type): | ||||||
|             fish = 'slap' |             fish = 'slap' | ||||||
|             def __dir__(self): |             def __dir__(self): | ||||||
|                 return ['__class__', '__modules__', '__name__', 'fish'] |                 return ['__class__', '__module__', '__name__', 'fish'] | ||||||
|         class Class(metaclass=Meta): |         class Class(metaclass=Meta): | ||||||
|             pass |             pass | ||||||
|         should_find = inspect.Attribute('fish', 'data', Meta, 'slap') |         should_find = inspect.Attribute('fish', 'data', Meta, 'slap') | ||||||
|  |  | ||||||
|  | @ -698,7 +698,7 @@ def gulp(iterable, keyp=None, func=list): | ||||||
|         # iter.__next__ failure on inner object |         # iter.__next__ failure on inner object | ||||||
|         self.assertRaises(ExpectedError, gulp, delayed_raise(1)) |         self.assertRaises(ExpectedError, gulp, delayed_raise(1)) | ||||||
| 
 | 
 | ||||||
|         # __cmp__ failure |         # __eq__ failure | ||||||
|         class DummyCmp: |         class DummyCmp: | ||||||
|             def __eq__(self, dst): |             def __eq__(self, dst): | ||||||
|                 raise ExpectedError |                 raise ExpectedError | ||||||
|  |  | ||||||
|  | @ -140,9 +140,9 @@ def foo(self): | ||||||
|         # check that the property's __isabstractmethod__ descriptor does the |         # check that the property's __isabstractmethod__ descriptor does the | ||||||
|         # right thing when presented with a value that fails truth testing: |         # right thing when presented with a value that fails truth testing: | ||||||
|         class NotBool(object): |         class NotBool(object): | ||||||
|             def __nonzero__(self): |             def __bool__(self): | ||||||
|                 raise ValueError() |                 raise ValueError() | ||||||
|             __len__ = __nonzero__ |             __len__ = __bool__ | ||||||
|         with self.assertRaises(ValueError): |         with self.assertRaises(ValueError): | ||||||
|             class C(object): |             class C(object): | ||||||
|                 def foo(self): |                 def foo(self): | ||||||
|  |  | ||||||
|  | @ -2017,64 +2017,26 @@ def test_ucs4(self): | ||||||
|             self.fail("Should have raised UnicodeDecodeError") |             self.fail("Should have raised UnicodeDecodeError") | ||||||
| 
 | 
 | ||||||
|     def test_conversion(self): |     def test_conversion(self): | ||||||
|         # Make sure __unicode__() works properly |         # Make sure __str__() works properly | ||||||
|         class Foo0: |         class ObjectToStr: | ||||||
|             def __str__(self): |             def __str__(self): | ||||||
|                 return "foo" |                 return "foo" | ||||||
| 
 | 
 | ||||||
|         class Foo1: |         class StrSubclassToStr(str): | ||||||
|             def __str__(self): |             def __str__(self): | ||||||
|                 return "foo" |                 return "foo" | ||||||
| 
 | 
 | ||||||
|         class Foo2(object): |         class StrSubclassToStrSubclass(str): | ||||||
|             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=""): |             def __new__(cls, content=""): | ||||||
|                 return str.__new__(cls, 2*content) |                 return str.__new__(cls, 2*content) | ||||||
|             def __str__(self): |             def __str__(self): | ||||||
|                 return self |                 return self | ||||||
| 
 | 
 | ||||||
|         class Foo9(str): |         self.assertEqual(str(ObjectToStr()), "foo") | ||||||
|             def __str__(self): |         self.assertEqual(str(StrSubclassToStr("bar")), "foo") | ||||||
|                 return "not unicode" |         s = str(StrSubclassToStrSubclass("foo")) | ||||||
| 
 |         self.assertEqual(s, "foofoo") | ||||||
|         self.assertEqual(str(Foo0()), "foo") |         self.assertIs(type(s), StrSubclassToStrSubclass) | ||||||
|         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): |     def test_unicode_repr(self): | ||||||
|         class s1: |         class s1: | ||||||
|  |  | ||||||
|  | @ -127,7 +127,7 @@ | ||||||
| 
 | 
 | ||||||
| # Functions that require a restricted exponent range for reasonable runtimes. | # Functions that require a restricted exponent range for reasonable runtimes. | ||||||
| UnaryRestricted = [ | UnaryRestricted = [ | ||||||
|   '__ceil__', '__floor__', '__int__', '__long__', '__trunc__', |   '__ceil__', '__floor__', '__int__', '__trunc__', | ||||||
|   'to_integral', 'to_integral_value' |   'to_integral', 'to_integral_value' | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1021,7 +1021,7 @@ FUNC1(tanh, tanh, 0, | ||||||
|    Note 4: A similar implementation is in Modules/cmathmodule.c. |    Note 4: A similar implementation is in Modules/cmathmodule.c. | ||||||
|    Be sure to update both when making changes. |    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 |    because the start argument doesn't make sense in the context of | ||||||
|    accurate summation.  Since the partials table is collapsed before |    accurate summation.  Since the partials table is collapsed before | ||||||
|    returning a result, sum(seq2, start=sum(seq1)) may not equal the |    returning a result, sum(seq2, start=sum(seq1)) may not equal the | ||||||
|  |  | ||||||
|  | @ -1831,9 +1831,9 @@ def __repr__(self): | ||||||
| __hash__ | __hash__ | ||||||
| __iadd__ | __iadd__ | ||||||
| __iand__ | __iand__ | ||||||
| __idivmod__ |  | ||||||
| __ifloordiv__ | __ifloordiv__ | ||||||
| __ilshift__ | __ilshift__ | ||||||
|  | __imatmul__ | ||||||
| __imod__ | __imod__ | ||||||
| __imul__ | __imul__ | ||||||
| __index__ | __index__ | ||||||
|  | @ -1850,6 +1850,7 @@ def __repr__(self): | ||||||
| __len__ | __len__ | ||||||
| __lshift__ | __lshift__ | ||||||
| __lt__ | __lt__ | ||||||
|  | __matmul__ | ||||||
| __mod__ | __mod__ | ||||||
| __mul__ | __mul__ | ||||||
| __neg__ | __neg__ | ||||||
|  | @ -1864,6 +1865,7 @@ def __repr__(self): | ||||||
| __repr__ | __repr__ | ||||||
| __rfloordiv__ | __rfloordiv__ | ||||||
| __rlshift__ | __rlshift__ | ||||||
|  | __rmatmul__ | ||||||
| __rmod__ | __rmod__ | ||||||
| __rmul__ | __rmul__ | ||||||
| __ror__ | __ror__ | ||||||
|  |  | ||||||
|  | @ -23,7 +23,6 @@ | ||||||
| import sys | import sys | ||||||
| import re | import re | ||||||
| from types import * | from types import * | ||||||
| import operator |  | ||||||
| 
 | 
 | ||||||
| class BadColor(Exception): | class BadColor(Exception): | ||||||
|     pass |     pass | ||||||
|  | @ -230,9 +229,8 @@ def triplet_to_rrggbb(rgbtuple): | ||||||
|     return hexname |     return hexname | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| _maxtuple = (256.0,) * 3 |  | ||||||
| def triplet_to_fractional_rgb(rgbtuple): | def triplet_to_fractional_rgb(rgbtuple): | ||||||
|     return list(map(operator.__div__, rgbtuple, _maxtuple)) |     return [x / 256 for x in rgbtuple] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def triplet_to_brightness(rgbtuple): | def triplet_to_brightness(rgbtuple): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka