summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-06-03 09:29:01 (GMT)
committerGitHub <noreply@github.com>2024-06-03 09:29:01 (GMT)
commitd7fcaa73b71f4c49c1b24cac04c9b6f1cf69b944 (patch)
treeea5305290c6306b7ee740cc3dcfc8498df36dcda
parent70934fb46982ad2ae677cca485a730b39635919c (diff)
downloadcpython-d7fcaa73b71f4c49c1b24cac04c9b6f1cf69b944.zip
cpython-d7fcaa73b71f4c49c1b24cac04c9b6f1cf69b944.tar.gz
cpython-d7fcaa73b71f4c49c1b24cac04c9b6f1cf69b944.tar.bz2
gh-119838: Treat Fraction as a real value in mixed arithmetic operations with complex (GH-119839)
-rw-r--r--Lib/fractions.py4
-rw-r--r--Lib/test/test_fractions.py5
-rw-r--r--Misc/NEWS.d/next/Library/2024-05-31-13-56-21.gh-issue-119838.H6XHlE.rst3
3 files changed, 6 insertions, 6 deletions
diff --git a/Lib/fractions.py b/Lib/fractions.py
index 95adccd..5655039 100644
--- a/Lib/fractions.py
+++ b/Lib/fractions.py
@@ -668,7 +668,7 @@ class Fraction(numbers.Rational):
elif isinstance(b, float):
return fallback_operator(float(a), b)
elif handle_complex and isinstance(b, complex):
- return fallback_operator(complex(a), b)
+ return fallback_operator(float(a), b)
else:
return NotImplemented
forward.__name__ = '__' + fallback_operator.__name__ + '__'
@@ -681,7 +681,7 @@ class Fraction(numbers.Rational):
elif isinstance(a, numbers.Real):
return fallback_operator(float(a), float(b))
elif handle_complex and isinstance(a, numbers.Complex):
- return fallback_operator(complex(a), complex(b))
+ return fallback_operator(complex(a), float(b))
else:
return NotImplemented
reverse.__name__ = '__r' + fallback_operator.__name__ + '__'
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index 3c7780e..71865f6 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -806,10 +806,7 @@ class FractionTest(unittest.TestCase):
self.assertTypedEquals(F(3, 2) * Polar(4, 2), Polar(F(6, 1), 2))
self.assertTypedEquals(F(3, 2) * Polar(4.0, 2), Polar(6.0, 2))
self.assertTypedEquals(F(3, 2) * Rect(4, 3), Rect(F(6, 1), F(9, 2)))
- with self.assertWarnsRegex(DeprecationWarning,
- "argument 'real' must be a real number, not complex"):
- self.assertTypedEquals(F(3, 2) * RectComplex(4, 3),
- RectComplex(6.0+0j, 4.5+0j))
+ self.assertTypedEquals(F(3, 2) * RectComplex(4, 3), RectComplex(6.0, 4.5))
self.assertRaises(TypeError, operator.mul, Polar(4, 2), F(3, 2))
self.assertTypedEquals(Rect(4, 3) * F(3, 2), 6.0 + 4.5j)
self.assertEqual(F(3, 2) * SymbolicComplex('X'), SymbolicComplex('3/2 * X'))
diff --git a/Misc/NEWS.d/next/Library/2024-05-31-13-56-21.gh-issue-119838.H6XHlE.rst b/Misc/NEWS.d/next/Library/2024-05-31-13-56-21.gh-issue-119838.H6XHlE.rst
new file mode 100644
index 0000000..17a8732
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-05-31-13-56-21.gh-issue-119838.H6XHlE.rst
@@ -0,0 +1,3 @@
+In mixed arithmetic operations with :class:`~fractions.Fraction` and
+complex, the fraction is now converted to :class:`float` instead of
+:class:`complex`.