Skip to content

Commit 509036c

Browse files
committed
Fix the power operator for non float/complex values.
See python/cpython#119242
1 parent 123fa7c commit 509036c

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/quicktions.pyx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,10 @@ cdef class Fraction:
925925
return _pow(a.numerator, a.denominator, b, 1)
926926
elif isinstance(b, (Fraction, Rational)):
927927
return _pow(a.numerator, a.denominator, b.numerator, b.denominator)
928-
else:
928+
elif isinstance(b, (float, complex)):
929929
return (a.numerator / a.denominator) ** b
930+
else:
931+
return NotImplemented
930932

931933
def __rpow__(b, a, x):
932934
"""a ** b

src/test_fractions.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,21 +1129,21 @@ def testMixedPower(self):
11291129
self.assertTypedEquals(Root(4) ** F(2, 1), Root(4, F(1)))
11301130
self.assertTypedEquals(Root(4) ** F(-2, 1), Root(4, -F(1)))
11311131
self.assertTypedEquals(Root(4) ** F(-2, 3), Root(4, -3.0))
1132-
self.assertEqual(F(3, 2) ** SymbolicReal('X'), SymbolicReal('1.5 ** X'))
1132+
self.assertEqual(F(3, 2) ** SymbolicReal('X'), SymbolicReal('3/2 ** X'))
11331133
self.assertEqual(SymbolicReal('X') ** F(3, 2), SymbolicReal('X ** 1.5'))
11341134

1135-
self.assertTypedEquals(F(3, 2) ** Rect(2, 0), Polar(2.25, 0.0))
1136-
self.assertTypedEquals(F(1, 1) ** Rect(2, 3), Polar(1.0, 0.0))
1135+
self.assertTypedEquals(F(3, 2) ** Rect(2, 0), Polar(F(9,4), 0.0))
1136+
self.assertTypedEquals(F(1, 1) ** Rect(2, 3), Polar(F(1), 0.0))
11371137
self.assertTypedEquals(F(3, 2) ** RectComplex(2, 0), Polar(2.25, 0.0))
11381138
self.assertTypedEquals(F(1, 1) ** RectComplex(2, 3), Polar(1.0, 0.0))
11391139
self.assertTypedEquals(Polar(4, 2) ** F(3, 2), Polar(8.0, 3.0))
11401140
self.assertTypedEquals(Polar(4, 2) ** F(3, 1), Polar(64, 6))
11411141
self.assertTypedEquals(Polar(4, 2) ** F(-3, 1), Polar(0.015625, -6))
11421142
self.assertTypedEquals(Polar(4, 2) ** F(-3, 2), Polar(0.125, -3.0))
1143-
self.assertEqual(F(3, 2) ** SymbolicComplex('X'), SymbolicComplex('1.5 ** X'))
1143+
self.assertEqual(F(3, 2) ** SymbolicComplex('X'), SymbolicComplex('3/2 ** X'))
11441144
self.assertEqual(SymbolicComplex('X') ** F(3, 2), SymbolicComplex('X ** 1.5'))
11451145

1146-
self.assertEqual(F(3, 2) ** Symbolic('X'), Symbolic('1.5 ** X'))
1146+
self.assertEqual(F(3, 2) ** Symbolic('X'), Symbolic('3/2 ** X'))
11471147
self.assertEqual(Symbolic('X') ** F(3, 2), Symbolic('X ** 1.5'))
11481148

11491149
def testMixingWithDecimal(self):

0 commit comments

Comments
 (0)