99from abc import ABCMeta ,abstractmethod
1010import sys
1111
12+ GenericAlias = type (list [int ])
13+
1214__all__ = ["Awaitable" ,"Coroutine" ,
1315"AsyncIterable" ,"AsyncIterator" ,"AsyncGenerator" ,
1416"Hashable" ,"Iterable" ,"Iterator" ,"Generator" ,"Reversible" ,
@@ -110,6 +112,8 @@ def __subclasshook__(cls, C):
110112return _check_methods (C ,"__await__" )
111113return NotImplemented
112114
115+ __class_getitem__ = classmethod (GenericAlias )
116+
113117
114118class Coroutine (Awaitable ):
115119
@@ -169,6 +173,8 @@ def __subclasshook__(cls, C):
169173return _check_methods (C ,"__aiter__" )
170174return NotImplemented
171175
176+ __class_getitem__ = classmethod (GenericAlias )
177+
172178
173179class AsyncIterator (AsyncIterable ):
174180
@@ -255,6 +261,8 @@ def __subclasshook__(cls, C):
255261return _check_methods (C ,"__iter__" )
256262return NotImplemented
257263
264+ __class_getitem__ = classmethod (GenericAlias )
265+
258266
259267class Iterator (Iterable ):
260268
@@ -274,6 +282,7 @@ def __subclasshook__(cls, C):
274282return _check_methods (C ,'__iter__' ,'__next__' )
275283return NotImplemented
276284
285+
277286Iterator .register (bytes_iterator )
278287Iterator .register (bytearray_iterator )
279288#Iterator.register(callable_iterator)
@@ -353,6 +362,7 @@ def __subclasshook__(cls, C):
353362'send' ,'throw' ,'close' )
354363return NotImplemented
355364
365+
356366Generator .register (generator )
357367
358368
@@ -385,6 +395,9 @@ def __subclasshook__(cls, C):
385395return _check_methods (C ,"__contains__" )
386396return NotImplemented
387397
398+ __class_getitem__ = classmethod (GenericAlias )
399+
400+
388401class Collection (Sized ,Iterable ,Container ):
389402
390403__slots__ = ()
@@ -395,6 +408,7 @@ def __subclasshook__(cls, C):
395408return _check_methods (C ,"__len__" ,"__iter__" ,"__contains__" )
396409return NotImplemented
397410
411+
398412class Callable (metaclass = ABCMeta ):
399413
400414__slots__ = ()
@@ -409,6 +423,8 @@ def __subclasshook__(cls, C):
409423return _check_methods (C ,"__call__" )
410424return NotImplemented
411425
426+ __class_getitem__ = classmethod (GenericAlias )
427+
412428
413429### SETS ###
414430
@@ -550,6 +566,7 @@ def _hash(self):
550566h = 590923713
551567return h
552568
569+
553570Set .register (frozenset )
554571
555572
@@ -632,6 +649,7 @@ def __isub__(self, it):
632649self .discard (value )
633650return self
634651
652+
635653MutableSet .register (set )
636654
637655
@@ -688,6 +706,7 @@ def __eq__(self, other):
688706
689707__reversed__ = None
690708
709+
691710Mapping .register (mappingproxy )
692711
693712
@@ -704,6 +723,8 @@ def __len__(self):
704723def __repr__ (self ):
705724return '{0.__class__.__name__}({0._mapping!r})' .format (self )
706725
726+ __class_getitem__ = classmethod (GenericAlias )
727+
707728
708729class KeysView (MappingView ,Set ):
709730
@@ -719,6 +740,7 @@ def __contains__(self, key):
719740def __iter__ (self ):
720741yield from self ._mapping
721742
743+
722744KeysView .register (dict_keys )
723745
724746
@@ -743,6 +765,7 @@ def __iter__(self):
743765for key in self ._mapping :
744766yield (key ,self ._mapping [key ])
745767
768+
746769ItemsView .register (dict_items )
747770
748771
@@ -761,6 +784,7 @@ def __iter__(self):
761784for key in self ._mapping :
762785yield self ._mapping [key ]
763786
787+
764788ValuesView .register (dict_values )
765789
766790
@@ -847,6 +871,7 @@ def setdefault(self, key, default=None):
847871self [key ]= default
848872return default
849873
874+
850875MutableMapping .register (dict )
851876
852877
@@ -914,6 +939,7 @@ def count(self, value):
914939'S.count(value) -> integer -- return number of occurrences of value'
915940return sum (1 for v in self if v is value or v == value )
916941
942+
917943Sequence .register (tuple )
918944Sequence .register (str )
919945Sequence .register (range )
@@ -1000,5 +1026,6 @@ def __iadd__(self, values):
10001026self .extend (values )
10011027return self
10021028
1029+
10031030MutableSequence .register (list )
10041031MutableSequence .register (bytearray )# Multiply inheriting, see ByteString