Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8447965

Browse files
committed
Issue #27539: Fix unnormalised Fraction.__pow__ result for negative exponent and base. Thanks Vedran Čačić.
1 parent 6afe858 commit 8447965

4 files changed

Lines changed: 22 additions & 1 deletion

File tree

Lib/fractions.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,10 +484,14 @@ def __pow__(a, b):
484484
return Fraction(a._numerator ** power,
485485
a._denominator ** power,
486486
_normalize=False)
487-
else:
487+
elif a._numerator >= 0:
488488
return Fraction(a._denominator ** -power,
489489
a._numerator ** -power,
490490
_normalize=False)
491+
else:
492+
return Fraction((-a._denominator) ** -power,
493+
(-a._numerator) ** -power,
494+
_normalize=False)
491495
else:
492496
# A fractional power will generally produce an
493497
# irrational number.

Lib/test/test_fractions.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,19 @@ def testArithmetic(self):
356356
z = pow(F(-1), F(1, 2))
357357
self.assertAlmostEqual(z.real, 0)
358358
self.assertEqual(z.imag, 1)
359+
# Regression test for #27539.
360+
p = F(-1, 2) ** 0
361+
self.assertEqual(p, F(1, 1))
362+
self.assertEqual(p.numerator, 1)
363+
self.assertEqual(p.denominator, 1)
364+
p = F(-1, 2) ** -1
365+
self.assertEqual(p, F(-2, 1))
366+
self.assertEqual(p.numerator, -2)
367+
self.assertEqual(p.denominator, 1)
368+
p = F(-1, 2) ** -2
369+
self.assertEqual(p, F(4, 1))
370+
self.assertEqual(p.numerator, 4)
371+
self.assertEqual(p.denominator, 1)
359372

360373
def testMixedArithmetic(self):
361374
self.assertTypedEquals(F(11, 10), F(1, 10) + 1)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ Katherine Busch
217217
Ralph Butler
218218
Laurent De Buyst
219219
Zach Byrne
220+
Vedran Čačić
220221
Nicolas Cadou
221222
Jp Calderone
222223
Arnaud Calmettes

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ Core and Builtins
4646
Library
4747
-------
4848

49+
- Issue #27539: Fix unnormalised ``Fraction.__pow__`` result in the case
50+
of negative exponent and negative base.
51+
4952
- Issue #21718: cursor.description is now available for queries using CTEs.
5053

5154
- Issue #2466: posixpath.ismount now correctly recognizes mount points which

0 commit comments

Comments
 (0)