diff --git a/stdlib/@tests/test_cases/builtins/check_pow.py b/stdlib/@tests/test_cases/builtins/check_pow.py index 6ad6116cf578..b9fec17d47a4 100644 --- a/stdlib/@tests/test_cases/builtins/check_pow.py +++ b/stdlib/@tests/test_cases/builtins/check_pow.py @@ -51,10 +51,16 @@ assert_type(Fraction() ** 4, Fraction) assert_type(pow(Fraction(3, 7), complex(1, 8)), complex) -assert_type(Fraction(3, 7) ** complex(1, 8), complex) +assert_type(Fraction(3, 7) ** complex(1, 8), Fraction | float | complex) + +assert_type(Fraction(-2).__pow__(0.5), Fraction | float | complex) +assert_type(Fraction(-2).__rpow__(0.5), Fraction | float | complex) + +assert_type(Fraction(2).__pow__(Fraction(4)), Fraction | float | complex) +assert_type(Fraction(2).__rpow__(Fraction(4)), Fraction | float | complex) assert_type(pow(complex(4, -8), Fraction(2, 3)), complex) -assert_type(complex(4, -8) ** Fraction(2, 3), complex) +assert_type(complex(4, -8) ** Fraction(2, 3), Fraction | float | complex) assert_type(pow(Decimal("1.0"), Decimal("1.6")), Decimal) assert_type(Decimal("1.0") ** Decimal("1.6"), Decimal) diff --git a/stdlib/fractions.pyi b/stdlib/fractions.pyi index 42947f2e2266..8c8f21ed469b 100644 --- a/stdlib/fractions.pyi +++ b/stdlib/fractions.pyi @@ -128,27 +128,17 @@ class Fraction(Rational): @overload def __pow__(a, b: int, modulo: None = None) -> Fraction: ... @overload - def __pow__(a, b: float | Fraction, modulo: None = None) -> float: ... - @overload - def __pow__(a, b: complex, modulo: None = None) -> complex: ... + def __pow__(a, b: complex | Fraction, modulo: None = None) -> Fraction | float | complex: ... else: @overload def __pow__(a, b: int) -> Fraction: ... @overload - def __pow__(a, b: float | Fraction) -> float: ... - @overload - def __pow__(a, b: complex) -> complex: ... + def __pow__(a, b: complex | Fraction) -> Fraction | float | complex: ... if sys.version_info >= (3, 14): - @overload - def __rpow__(b, a: float | Fraction, modulo: None = None) -> float: ... - @overload - def __rpow__(b, a: complex, modulo: None = None) -> complex: ... + def __rpow__(b, a: complex | Fraction, modulo: None = None) -> Fraction | float | complex: ... else: - @overload - def __rpow__(b, a: float | Fraction) -> float: ... - @overload - def __rpow__(b, a: complex) -> complex: ... + def __rpow__(b, a: complex | Fraction) -> Fraction | float | complex: ... def __pos__(a) -> Fraction: ... def __neg__(a) -> Fraction: ...