From ebef6c0b50d94ca7daef6fdb38d043e0183ab7d1 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Mon, 7 Sep 2020 09:28:04 -0700 Subject: [PATCH] bpo-41720: Add "return NotImplemented" in turtle.Vec2D.__rmul__(). (GH-22092) (cherry picked from commit fd4cafd4700dc03cb05fc2e5263c2666d785d6e3) Co-authored-by: Serhiy Storchaka --- Lib/test/test_turtle.py | 18 ++++++++++++++++-- Lib/turtle.py | 1 + .../2020-09-04-20-45-38.bpo-41720.PW9MzZ.rst | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-09-04-20-45-38.bpo-41720.PW9MzZ.rst diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py index 2fd10ccd505..571981fc6b6 100644 --- a/Lib/test/test_turtle.py +++ b/Lib/test/test_turtle.py @@ -127,6 +127,14 @@ class VectorComparisonMixin: self.assertAlmostEqual( i, j, msg='values at index {} do not match'.format(idx)) +class Multiplier: + + def __mul__(self, other): + return f'M*{other}' + + def __rmul__(self, other): + return f'{other}*M' + class TestVec2D(VectorComparisonMixin, unittest.TestCase): @@ -208,9 +216,15 @@ class TestVec2D(VectorComparisonMixin, unittest.TestCase): self.assertAlmostEqual(answer, expected) vec = Vec2D(0.5, 3) - answer = vec * 10 expected = Vec2D(5, 30) - self.assertVectorsAlmostEqual(answer, expected) + self.assertVectorsAlmostEqual(vec * 10, expected) + self.assertVectorsAlmostEqual(10 * vec, expected) + self.assertVectorsAlmostEqual(vec * 10.0, expected) + self.assertVectorsAlmostEqual(10.0 * vec, expected) + + M = Multiplier() + self.assertEqual(vec * M, Vec2D(f"{vec[0]}*M", f"{vec[1]}*M")) + self.assertEqual(M * vec, f'M*{vec}') def test_vector_negative(self): vec = Vec2D(10, -10) diff --git a/Lib/turtle.py b/Lib/turtle.py index ee67a351b54..ba8288daf83 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -258,6 +258,7 @@ class Vec2D(tuple): def __rmul__(self, other): if isinstance(other, int) or isinstance(other, float): return Vec2D(self[0]*other, self[1]*other) + return NotImplemented def __sub__(self, other): return Vec2D(self[0]-other[0], self[1]-other[1]) def __neg__(self): diff --git a/Misc/NEWS.d/next/Library/2020-09-04-20-45-38.bpo-41720.PW9MzZ.rst b/Misc/NEWS.d/next/Library/2020-09-04-20-45-38.bpo-41720.PW9MzZ.rst new file mode 100644 index 00000000000..5d2a5094dde --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-04-20-45-38.bpo-41720.PW9MzZ.rst @@ -0,0 +1,2 @@ +Fixed :meth:`turtle.Vec2D.__rmul__` for arguments which are not int or +float.