@@ -176,6 +176,9 @@ class super(object):
176
176
@overload
177
177
def __init__ (self ) -> None : ...
178
178
179
+ _PositiveInteger = Literal [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 ]
180
+ _NegativeInteger = Literal [- 1 , - 2 , - 3 , - 4 , - 5 , - 6 , - 7 , - 8 , - 9 , - 10 , - 11 , - 12 , - 13 , - 14 , - 15 , - 16 , - 17 , - 18 , - 19 , - 20 ]
181
+
179
182
class int :
180
183
@overload
181
184
def __new__ (cls : Type [_T ], __x : str | bytes | SupportsInt | SupportsIndex | SupportsTrunc = ...) -> _T : ...
@@ -217,11 +220,15 @@ class int:
217
220
@overload
218
221
def __pow__ (self , __x : int , __modulo : Literal [0 ]) -> NoReturn : ...
219
222
@overload
220
- def __pow__ (self , __x : Literal [2 , 3 , 4 , 5 ], __modulo : int | None = ...) -> int : ...
223
+ def __pow__ (self , __x : int , __modulo : int ) -> int : ...
224
+ @overload
225
+ def __pow__ (self , __x : _PositiveInteger , __modulo : None = ...) -> int : ...
226
+ @overload
227
+ def __pow__ (self , __x : _NegativeInteger , __modulo : None = ...) -> float : ...
221
228
# positive x -> int; negative x -> float
222
229
# return type must be Any as `int | float` causes too many false-positive errors
223
230
@overload
224
- def __pow__ (self , __x : int , __modulo : int | None = ...) -> Any : ...
231
+ def __pow__ (self , __x : int , __modulo : None = ...) -> Any : ...
225
232
def __rpow__ (self , __x : int , __mod : int | None = ...) -> Any : ...
226
233
def __and__ (self , __n : int ) -> int : ...
227
234
def __or__ (self , __n : int ) -> int : ...
@@ -1279,44 +1286,74 @@ _M = TypeVar("_M", contravariant=True)
1279
1286
class _SupportsPow2 (Protocol [_E , _T_co ]):
1280
1287
def __pow__ (self , __other : _E ) -> _T_co : ...
1281
1288
1289
+ class _SupportsPow3NoneOnly (Protocol [_E , _T_co ]):
1290
+ def __pow__ (self , __other : _E , __modulo : None = ...) -> _T_co : ...
1291
+
1282
1292
class _SupportsPow3 (Protocol [_E , _M , _T_co ]):
1283
1293
def __pow__ (self , __other : _E , __modulo : _M ) -> _T_co : ...
1284
1294
1295
+ _SupportsSomeKindOfPow = Union [_SupportsPow2 [Any , Any ], _SupportsPow3NoneOnly [Any , Any ], _SupportsPow3 [Any , Any , Any ]]
1296
+
1285
1297
if sys .version_info >= (3 , 8 ):
1286
1298
@overload
1287
1299
def pow (base : int , exp : int , mod : Literal [0 ]) -> NoReturn : ...
1300
+ @overload
1301
+ def pow (base : int , exp : int , mod : int ) -> int : ...
1302
+ @overload
1303
+ def pow (base : int , exp : _PositiveInteger , mod : None = ...) -> int : ... # type: ignore[misc]
1304
+ @overload
1305
+ def pow (base : int , exp : _NegativeInteger , mod : None = ...) -> float : ... # type: ignore[misc]
1288
1306
# int base & positive-int exp -> int; int base & negative-int exp -> float
1289
1307
# return type must be Any as `int | float` causes too many false-positive errors
1290
1308
@overload
1291
1309
def pow (base : int , exp : int , mod : None = ...) -> Any : ...
1292
1310
@overload
1293
- def pow (base : int , exp : int , mod : int ) -> int : ...
1294
- @overload
1295
1311
def pow (base : float , exp : int , mod : None = ...) -> float : ...
1296
1312
# float base & float exp could return float or complex
1297
- # return type must be Any as `float | complex` causes too many false-positive errors
1313
+ # return type must be Any (same as complex base, complex exp),
1314
+ # as `float | complex` causes too many false-positive errors
1315
+ @overload
1316
+ def pow (base : float , exp : complex | _SupportsSomeKindOfPow , mod : None = ...) -> Any : ...
1298
1317
@overload
1299
- def pow (base : float , exp : float , mod : None = ...) -> Any : ...
1318
+ def pow (base : complex , exp : complex | _SupportsSomeKindOfPow , mod : None = ...) -> complex : ...
1300
1319
@overload
1301
- def pow (base : _SupportsPow2 [_E , _T_co ], exp : _E ) -> _T_co : ...
1320
+ def pow (base : _SupportsPow2 [_E , _T_co ], exp : _E , mod : None = ... ) -> _T_co : ...
1302
1321
@overload
1303
- def pow (base : _SupportsPow3 [_E , _M , _T_co ], exp : _E , mod : _M ) -> _T_co : ...
1322
+ def pow (base : _SupportsPow3NoneOnly [_E , _T_co ], exp : _E , mod : None = ...) -> _T_co : ...
1323
+ @overload
1324
+ def pow (base : _SupportsPow3 [_E , _M , _T_co ], exp : _E , mod : _M = ...) -> _T_co : ...
1325
+ @overload
1326
+ def pow (base : _SupportsSomeKindOfPow , exp : float , mod : None = ...) -> Any : ...
1327
+ @overload
1328
+ def pow (base : _SupportsSomeKindOfPow , exp : complex , mod : None = ...) -> complex : ...
1304
1329
1305
1330
else :
1306
1331
@overload
1307
1332
def pow (__base : int , __exp : int , __mod : Literal [0 ]) -> NoReturn : ...
1308
1333
@overload
1309
- def pow (__base : int , __exp : int , __mod : None = ...) -> Any : ...
1310
- @overload
1311
1334
def pow (__base : int , __exp : int , __mod : int ) -> int : ...
1312
1335
@overload
1336
+ def pow (__base : int , __exp : _PositiveInteger , __mod : None = ...) -> int : ... # type: ignore[misc]
1337
+ @overload
1338
+ def pow (__base : int , __exp : _NegativeInteger , __mod : None = ...) -> float : ... # type: ignore[misc]
1339
+ @overload
1340
+ def pow (__base : int , __exp : int , __mod : None = ...) -> Any : ...
1341
+ @overload
1313
1342
def pow (__base : float , __exp : int , __mod : None = ...) -> float : ...
1314
1343
@overload
1315
- def pow (__base : float , __exp : float , __mod : None = ...) -> Any : ...
1344
+ def pow (__base : float , __exp : complex | _SupportsSomeKindOfPow , __mod : None = ...) -> Any : ...
1345
+ @overload
1346
+ def pow (__base : complex , __exp : complex | _SupportsSomeKindOfPow , __mod : None = ...) -> complex : ...
1347
+ @overload
1348
+ def pow (__base : _SupportsPow2 [_E , _T_co ], __exp : _E , __mod : None = ...) -> _T_co : ...
1349
+ @overload
1350
+ def pow (__base : _SupportsPow3NoneOnly [_E , _T_co ], __exp : _E , __mod : None = ...) -> _T_co : ...
1351
+ @overload
1352
+ def pow (__base : _SupportsPow3 [_E , _M , _T_co ], __exp : _E , __mod : _M = ...) -> _T_co : ...
1316
1353
@overload
1317
- def pow (__base : _SupportsPow2 [ _E , _T_co ], __exp : _E ) -> _T_co : ...
1354
+ def pow (__base : _SupportsSomeKindOfPow , __exp : float , __mod : None = ... ) -> Any : ...
1318
1355
@overload
1319
- def pow (__base : _SupportsPow3 [ _E , _M , _T_co ], __exp : _E , __mod : _M ) -> _T_co : ...
1356
+ def pow (__base : _SupportsSomeKindOfPow , __exp : complex , __mod : None = ... ) -> complex : ...
1320
1357
1321
1358
def quit (code : object = ...) -> NoReturn : ...
1322
1359
0 commit comments