@@ -30,7 +30,7 @@ from _typeshed import (
3030 SupportsRichComparisonT ,
3131 SupportsWrite ,
3232)
33- from collections .abc import Awaitable , Callable , Iterable , Iterator , MutableSet , Reversible , Set as AbstractSet , Sized
33+ from collections .abc import Awaitable , Callable , Hashable , Iterable , Iterator , MutableSet , Reversible , Set as AbstractSet , Sized
3434from io import BufferedRandom , BufferedReader , BufferedWriter , FileIO , TextIOWrapper
3535from os import PathLike
3636from types import CellType , CodeType , EllipsisType , GenericAlias , NotImplementedType , TracebackType
@@ -75,14 +75,19 @@ _I = TypeVar("_I", default=int)
7575_T_co = TypeVar ("_T_co" , covariant = True )
7676_T_contra = TypeVar ("_T_contra" , contravariant = True )
7777_R_co = TypeVar ("_R_co" , covariant = True )
78- _KT = TypeVar ("_KT" )
78+ _KT = TypeVar ("_KT" , bound = Hashable )
7979_VT = TypeVar ("_VT" )
8080_S = TypeVar ("_S" )
8181_T1 = TypeVar ("_T1" )
8282_T2 = TypeVar ("_T2" )
8383_T3 = TypeVar ("_T3" )
8484_T4 = TypeVar ("_T4" )
8585_T5 = TypeVar ("_T5" )
86+ _H1 = TypeVar ("_H1" , bound = Hashable )
87+ _H2 = TypeVar ("_H2" , bound = Hashable )
88+ _H1_co = TypeVar ("_H1_co" , bound = Hashable )
89+ _H2_co = TypeVar ("_H2_co" , bound = Hashable )
90+
8691_SupportsNextT_co = TypeVar ("_SupportsNextT_co" , bound = SupportsNext [Any ], covariant = True )
8792_SupportsAnextT_co = TypeVar ("_SupportsAnextT_co" , bound = SupportsAnext [Any ], covariant = True )
8893_AwaitableT = TypeVar ("_AwaitableT" , bound = Awaitable [Any ])
@@ -1226,10 +1231,10 @@ class dict(MutableMapping[_KT, _VT]):
12261231 # See #3800 & https://github.com/python/typing/issues/548#issuecomment-683336963.
12271232 @classmethod
12281233 @overload
1229- def fromkeys (cls , iterable : Iterable [_T ], value : None = None , / ) -> dict [_T , Any | None ]: ...
1234+ def fromkeys (cls , iterable : Iterable [_H1 ], value : None = None , / ) -> dict [_H1 , Any | None ]: ...
12301235 @classmethod
12311236 @overload
1232- def fromkeys (cls , iterable : Iterable [_T ], value : _S , / ) -> dict [_T , _S ]: ...
1237+ def fromkeys (cls , iterable : Iterable [_H1 ], value : _T , / ) -> dict [_H1 , _T ]: ...
12331238 # Positional-only in dict, but not in MutableMapping
12341239 @overload # type: ignore[override]
12351240 def get (self , key : _KT , default : None = None , / ) -> _VT | None : ...
@@ -1253,14 +1258,14 @@ class dict(MutableMapping[_KT, _VT]):
12531258 __hash__ : ClassVar [None ] # type: ignore[assignment]
12541259 def __class_getitem__ (cls , item : Any , / ) -> GenericAlias : ...
12551260 if sys .version_info >= (3 , 15 ):
1256- def __or__ (self , value : dict [_T1 , _T2 ] | frozendict [_T1 , _T2 ], / ) -> dict [_KT | _T1 , _VT | _T2 ]: ...
1261+ def __or__ (self , value : dict [_H1 , _T ] | frozendict [_H1 , _T ], / ) -> dict [_KT | _H1 , _VT | _T ]: ...
12571262 @overload
1258- def __ror__ (self , value : dict [_T1 , _T2 ], / ) -> dict [_KT | _T1 , _VT | _T2 ]: ...
1263+ def __ror__ (self , value : dict [_H1 , _T ], / ) -> dict [_KT | _H1 , _VT | _T ]: ...
12591264 @overload
1260- def __ror__ (self , value : frozendict [_T1 , _T2 ], / ) -> frozendict [_KT | _T1 , _VT | _T2 ]: ...
1265+ def __ror__ (self , value : frozendict [_H1 , _T ], / ) -> frozendict [_KT | _H1 , _VT | _T ]: ...
12611266 else :
1262- def __or__ (self , value : dict [_T1 , _T2 ], / ) -> dict [_KT | _T1 , _VT | _T2 ]: ...
1263- def __ror__ (self , value : dict [_T1 , _T2 ], / ) -> dict [_KT | _T1 , _VT | _T2 ]: ...
1267+ def __or__ (self , value : dict [_H1 , _T ], / ) -> dict [_KT | _H1 , _VT | _T ]: ...
1268+ def __ror__ (self , value : dict [_H1 , _T ], / ) -> dict [_KT | _H1 , _VT | _T ]: ...
12641269 # dict.__ior__ should be kept roughly in line with MutableMapping.update()
12651270 @overload # type: ignore[misc]
12661271 def __ior__ (self , value : SupportsKeysAndGetItem [_KT , _VT ], / ) -> Self : ...
@@ -1271,7 +1276,7 @@ if sys.version_info >= (3, 15):
12711276 @disjoint_base
12721277 class frozendict (Mapping [_KT , _VT ]):
12731278 @overload
1274- def __new__ (cls , / ) -> frozendict [Any , Any ]: ...
1279+ def __new__ (cls , / ) -> frozendict [Hashable , Any ]: ...
12751280 @overload
12761281 def __new__ (cls : type [frozendict [str , _VT ]], / , ** kwargs : _VT ) -> frozendict [str , _VT ]: ...
12771282 @overload
@@ -1290,10 +1295,10 @@ if sys.version_info >= (3, 15):
12901295 def copy (self ) -> frozendict [_KT , _VT ]: ...
12911296 @overload
12921297 @classmethod
1293- def fromkeys (cls , iterable : Iterable [_T ], value : None = None , / ) -> frozendict [_T , Any | None ]: ...
1298+ def fromkeys (cls , iterable : Iterable [_H1 ], value : None = None , / ) -> frozendict [_H1 , Any | None ]: ...
12941299 @overload
12951300 @classmethod
1296- def fromkeys (cls , iterable : Iterable [_T ], value : _S , / ) -> frozendict [_T , _S ]: ...
1301+ def fromkeys (cls , iterable : Iterable [_H1 ], value : _T , / ) -> frozendict [_H1 , _T ]: ...
12971302 @overload # type: ignore[override]
12981303 def get (self , key : _KT , default : None = None , / ) -> _VT | None : ...
12991304 @overload
@@ -1316,70 +1321,70 @@ if sys.version_info >= (3, 15):
13161321 def __ror__ (self , value : frozendict [_T1 , _T2 ], / ) -> frozendict [_KT | _T1 , _VT | _T2 ]: ...
13171322
13181323@disjoint_base
1319- class set (MutableSet [_T ]):
1324+ class set (MutableSet [_H1 ]):
13201325 @overload
13211326 def __init__ (self ) -> None : ...
13221327 @overload
1323- def __init__ (self , iterable : Iterable [_T ], / ) -> None : ...
1324- def add (self , element : _T , / ) -> None : ...
1325- def copy (self ) -> set [_T ]: ...
1326- def difference (self , * s : Iterable [object ]) -> set [_T ]: ...
1327- def difference_update (self , * s : Iterable [object ]) -> None : ...
1328- def discard (self , element : object , / ) -> None : ...
1329- def intersection (self , * s : Iterable [object ]) -> set [_T ]: ...
1330- def intersection_update (self , * s : Iterable [object ]) -> None : ...
1331- def isdisjoint (self , s : Iterable [object ], / ) -> bool : ...
1332- def issubset (self , s : Iterable [object ], / ) -> bool : ...
1333- def issuperset (self , s : Iterable [object ], / ) -> bool : ...
1334- def remove (self , element : _T , / ) -> None : ...
1335- def symmetric_difference (self , s : Iterable [_S ], / ) -> set [_T | _S ]: ...
1336- def symmetric_difference_update (self , s : Iterable [_T ], / ) -> None : ...
1337- def union (self , * s : Iterable [_S ]) -> set [_T | _S ]: ...
1338- def update (self , * s : Iterable [_T ]) -> None : ...
1328+ def __init__ (self , iterable : Iterable [_H1 ], / ) -> None : ...
1329+ def add (self , element : _H1 , / ) -> None : ...
1330+ def copy (self ) -> set [_H1 ]: ...
1331+ def difference (self , * s : Iterable [Hashable ]) -> set [_H1 ]: ...
1332+ def difference_update (self , * s : Iterable [Hashable ]) -> None : ...
1333+ def discard (self , element : Hashable , / ) -> None : ...
1334+ def intersection (self , * s : Iterable [Hashable ]) -> set [_H1 ]: ...
1335+ def intersection_update (self , * s : Iterable [Hashable ]) -> None : ...
1336+ def isdisjoint (self , s : Iterable [Hashable ], / ) -> bool : ...
1337+ def issubset (self , s : Iterable [Hashable ], / ) -> bool : ...
1338+ def issuperset (self , s : Iterable [Hashable ], / ) -> bool : ...
1339+ def remove (self , element : _H1 , / ) -> None : ...
1340+ def symmetric_difference (self , s : Iterable [_H2 ], / ) -> set [_H1 | _H2 ]: ...
1341+ def symmetric_difference_update (self , s : Iterable [_H1 ], / ) -> None : ...
1342+ def union (self , * s : Iterable [_H2 ]) -> set [_H1 | _H2 ]: ...
1343+ def update (self , * s : Iterable [_H1 ]) -> None : ...
13391344 def __len__ (self ) -> int : ...
1340- def __contains__ (self , o : object , / ) -> bool : ...
1341- def __iter__ (self ) -> Iterator [_T ]: ...
1342- def __and__ (self , value : AbstractSet [object ], / ) -> set [_T ]: ...
1343- def __iand__ (self , value : AbstractSet [object ], / ) -> Self : ...
1344- def __or__ (self , value : AbstractSet [_S ], / ) -> set [_T | _S ]: ...
1345- def __ior__ (self , value : AbstractSet [_T ], / ) -> Self : ... # type: ignore[override,misc]
1346- def __sub__ (self , value : AbstractSet [object ], / ) -> set [_T ]: ...
1347- def __isub__ (self , value : AbstractSet [object ], / ) -> Self : ...
1348- def __xor__ (self , value : AbstractSet [_S ], / ) -> set [_T | _S ]: ...
1349- def __ixor__ (self , value : AbstractSet [_T ], / ) -> Self : ... # type: ignore[override,misc]
1350- def __le__ (self , value : AbstractSet [object ], / ) -> bool : ...
1351- def __lt__ (self , value : AbstractSet [object ], / ) -> bool : ...
1352- def __ge__ (self , value : AbstractSet [object ], / ) -> bool : ...
1353- def __gt__ (self , value : AbstractSet [object ], / ) -> bool : ...
1345+ def __contains__ (self , o : Hashable , / ) -> bool : ...
1346+ def __iter__ (self ) -> Iterator [_H1 ]: ...
1347+ def __and__ (self , value : AbstractSet [Hashable ], / ) -> set [_H1 ]: ...
1348+ def __iand__ (self , value : AbstractSet [Hashable ], / ) -> Self : ...
1349+ def __or__ (self , value : AbstractSet [_H2 ], / ) -> set [_H1 | _H2 ]: ...
1350+ def __ior__ (self , value : AbstractSet [_H1 ], / ) -> Self : ... # type: ignore[override,misc]
1351+ def __sub__ (self , value : AbstractSet [Hashable ], / ) -> set [_H1 ]: ...
1352+ def __isub__ (self , value : AbstractSet [Hashable ], / ) -> Self : ...
1353+ def __xor__ (self , value : AbstractSet [_H2 ], / ) -> set [_H1 | _H2 ]: ...
1354+ def __ixor__ (self , value : AbstractSet [_H1 ], / ) -> Self : ... # type: ignore[override,misc]
1355+ def __le__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1356+ def __lt__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1357+ def __ge__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1358+ def __gt__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
13541359 def __eq__ (self , value : object , / ) -> bool : ...
13551360 __hash__ : ClassVar [None ] # type: ignore[assignment]
13561361 def __class_getitem__ (cls , item : Any , / ) -> GenericAlias : ...
13571362
13581363@disjoint_base
1359- class frozenset (AbstractSet [_T_co ]):
1364+ class frozenset (AbstractSet [_H1_co ]):
13601365 @overload
13611366 def __new__ (cls ) -> Self : ...
13621367 @overload
1363- def __new__ (cls , iterable : Iterable [_T_co ], / ) -> Self : ...
1364- def copy (self ) -> frozenset [_T_co ]: ...
1365- def difference (self , * s : Iterable [object ]) -> frozenset [_T_co ]: ...
1366- def intersection (self , * s : Iterable [object ]) -> frozenset [_T_co ]: ...
1367- def isdisjoint (self , s : Iterable [object ], / ) -> bool : ...
1368- def issubset (self , s : Iterable [object ], / ) -> bool : ...
1369- def issuperset (self , s : Iterable [object ], / ) -> bool : ...
1370- def symmetric_difference (self , s : Iterable [_S ], / ) -> frozenset [_T_co | _S ]: ...
1371- def union (self , * s : Iterable [_S ]) -> frozenset [_T_co | _S ]: ...
1368+ def __new__ (cls , iterable : Iterable [_H1_co ], / ) -> Self : ...
1369+ def copy (self ) -> frozenset [_H1_co ]: ...
1370+ def difference (self , * s : Iterable [Hashable ]) -> frozenset [_H1_co ]: ...
1371+ def intersection (self , * s : Iterable [Hashable ]) -> frozenset [_H1_co ]: ...
1372+ def isdisjoint (self , s : Iterable [Hashable ], / ) -> bool : ...
1373+ def issubset (self , s : Iterable [Hashable ], / ) -> bool : ...
1374+ def issuperset (self , s : Iterable [Hashable ], / ) -> bool : ...
1375+ def symmetric_difference (self , s : Iterable [_H1 ], / ) -> frozenset [_H1_co | _H1 ]: ...
1376+ def union (self , * s : Iterable [_H1 ]) -> frozenset [_H1_co | _H1 ]: ...
13721377 def __len__ (self ) -> int : ...
1373- def __contains__ (self , o : object , / ) -> bool : ...
1374- def __iter__ (self ) -> Iterator [_T_co ]: ...
1375- def __and__ (self , value : AbstractSet [object ], / ) -> frozenset [_T_co ]: ...
1376- def __or__ (self , value : AbstractSet [_S ], / ) -> frozenset [_T_co | _S ]: ...
1377- def __sub__ (self , value : AbstractSet [object ], / ) -> frozenset [_T_co ]: ...
1378- def __xor__ (self , value : AbstractSet [_S ], / ) -> frozenset [_T_co | _S ]: ...
1379- def __le__ (self , value : AbstractSet [object ], / ) -> bool : ...
1380- def __lt__ (self , value : AbstractSet [object ], / ) -> bool : ...
1381- def __ge__ (self , value : AbstractSet [object ], / ) -> bool : ...
1382- def __gt__ (self , value : AbstractSet [object ], / ) -> bool : ...
1378+ def __contains__ (self , o : Hashable , / ) -> bool : ...
1379+ def __iter__ (self ) -> Iterator [_H1_co ]: ...
1380+ def __and__ (self , value : AbstractSet [Hashable ], / ) -> frozenset [_H1_co ]: ...
1381+ def __or__ (self , value : AbstractSet [_H1 ], / ) -> frozenset [_H1_co | _H1 ]: ...
1382+ def __sub__ (self , value : AbstractSet [Hashable ], / ) -> frozenset [_H1_co ]: ...
1383+ def __xor__ (self , value : AbstractSet [_H1 ], / ) -> frozenset [_H1_co | _H1 ]: ...
1384+ def __le__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1385+ def __lt__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1386+ def __ge__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
1387+ def __gt__ (self , value : AbstractSet [Hashable ], / ) -> bool : ...
13831388 def __eq__ (self , value : object , / ) -> bool : ...
13841389 def __hash__ (self ) -> int : ...
13851390 def __class_getitem__ (cls , item : Any , / ) -> GenericAlias : ...
0 commit comments