return Fraction(a._numerator ** power,
a._denominator ** power,
_normalize=False)
- else:
+ elif a._numerator >= 0:
return Fraction(a._denominator ** -power,
a._numerator ** -power,
_normalize=False)
+ else:
+ return Fraction((-a._denominator) ** -power,
+ (-a._numerator) ** -power,
+ _normalize=False)
else:
# A fractional power will generally produce an
# irrational number.
z = pow(F(-1), F(1, 2))
self.assertAlmostEqual(z.real, 0)
self.assertEqual(z.imag, 1)
+ # Regression test for #27539.
+ p = F(-1, 2) ** 0
+ self.assertEqual(p, F(1, 1))
+ self.assertEqual(p.numerator, 1)
+ self.assertEqual(p.denominator, 1)
+ p = F(-1, 2) ** -1
+ self.assertEqual(p, F(-2, 1))
+ self.assertEqual(p.numerator, -2)
+ self.assertEqual(p.denominator, 1)
+ p = F(-1, 2) ** -2
+ self.assertEqual(p, F(4, 1))
+ self.assertEqual(p.numerator, 4)
+ self.assertEqual(p.denominator, 1)
def testMixedArithmetic(self):
self.assertTypedEquals(F(11, 10), F(1, 10) + 1)
Library
-------
+- Issue #27539: Fix unnormalised ``Fraction.__pow__`` result in the case
+ of negative exponent and negative base.
+
- Issue #21718: cursor.description is now available for queries using CTEs.
- Issue #2466: posixpath.ismount now correctly recognizes mount points which