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

Skip to content

Commit 0add84b

Browse files
committed
Issue #27539: Merge from 3.5.
2 parents dc65c68 + 8447965 commit 0add84b

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
@@ -460,10 +460,14 @@ def __pow__(a, b):
460460
return Fraction(a._numerator ** power,
461461
a._denominator ** power,
462462
_normalize=False)
463-
else:
463+
elif a._numerator >= 0:
464464
return Fraction(a._denominator ** -power,
465465
a._numerator ** -power,
466466
_normalize=False)
467+
else:
468+
return Fraction((-a._denominator) ** -power,
469+
(-a._numerator) ** -power,
470+
_normalize=False)
467471
else:
468472
# A fractional power will generally produce an
469473
# 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
@@ -218,6 +218,7 @@ Katherine Busch
218218
Ralph Butler
219219
Laurent De Buyst
220220
Zach Byrne
221+
Vedran Čačić
221222
Nicolas Cadou
222223
Jp Calderone
223224
Arnaud Calmettes

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ Core and Builtins
3838
Library
3939
-------
4040

41+
- Issue #27539: Fix unnormalised ``Fraction.__pow__`` result in the case
42+
of negative exponent and negative base.
43+
4144
- Issue #21718: cursor.description is now available for queries using CTEs.
4245

4346
- Issue #27819: In distutils sdists, simply produce the "gztar" (gzipped tar

0 commit comments

Comments
 (0)