@@ -47,13 +47,12 @@ class _HasMaskAndRect(_HasRect, Protocol):
4747class _HasRadiusAndRect (_HasRect , Protocol ):
4848 radius : float
4949
50- # generic Group, used in Sprite
51- _TGroup = TypeVar ( "_TGroup" , bound = AbstractGroup )
50+ # non- generic Group, used in Sprite
51+ _Group = AbstractGroup [ _SupportsSprite ]
5252
5353# protocol helps with structural subtyping for typevars in sprite group generics
5454# and allows the use of any class with the required attributes and methods
55- class _SupportsSprite (Generic [_TGroup ], _HasImageAndRect , Protocol ):
56- def __class_getitem__ (cls , item : type [AbstractGroup ], / ) -> types .GenericAlias : ...
55+ class _SupportsSprite (_HasImageAndRect , Protocol ):
5756 @property
5857 def image (self ) -> Optional [Surface ]: ...
5958 @image .setter
@@ -66,17 +65,17 @@ class _SupportsSprite(Generic[_TGroup], _HasImageAndRect, Protocol):
6665 def layer (self ) -> int : ...
6766 @layer .setter
6867 def layer (self , value : int ) -> None : ...
69- def add_internal (self , group : _TGroup ) -> None : ...
70- def remove_internal (self , group : _TGroup ) -> None : ...
68+ def add_internal (self , group : _Group ) -> None : ...
69+ def remove_internal (self , group : _Group ) -> None : ...
7170 def update (self , * args : Any , ** kwargs : Any ) -> None : ...
72- def add (self , * groups : _TGroup ) -> None : ...
73- def remove (self , * groups : _TGroup ) -> None : ...
71+ def add (self , * groups : _Group ) -> None : ...
72+ def remove (self , * groups : _Group ) -> None : ...
7473 def kill (self ) -> None : ...
7574 def alive (self ) -> bool : ...
76- def groups (self ) -> list [_TGroup ]: ...
75+ def groups (self ) -> list [_Group ]: ...
7776
7877# also a protocol
79- class _SupportsDirtySprite (_SupportsSprite [ _TGroup ] , Protocol ):
78+ class _SupportsDirtySprite (_SupportsSprite , Protocol ):
8079 dirty : int
8180 blendmode : int
8281 source_rect : Union [FRect , Rect ]
@@ -86,7 +85,7 @@ class _SupportsDirtySprite(_SupportsSprite[_TGroup], Protocol):
8685 def _get_visible (self ) -> int : ...
8786
8887# concrete sprite implementation class
89- class Sprite (_SupportsSprite [ _TGroup ] ):
88+ class Sprite (_SupportsSprite ):
9089 @property
9190 def image (self ) -> Optional [Surface ]: ...
9291 @image .setter
@@ -99,18 +98,18 @@ class Sprite(_SupportsSprite[_TGroup]):
9998 def layer (self ) -> int : ...
10099 @layer .setter
101100 def layer (self , value : int ) -> None : ...
102- def __init__ (self , * groups : _TGroup ) -> None : ...
103- def add_internal (self , group : _TGroup ) -> None : ...
104- def remove_internal (self , group : _TGroup ) -> None : ...
101+ def __init__ (self , * groups : _Group ) -> None : ...
102+ def add_internal (self , group : _Group ) -> None : ...
103+ def remove_internal (self , group : _Group ) -> None : ...
105104 def update (self , * args : Any , ** kwargs : Any ) -> None : ...
106- def add (self , * groups : _TGroup ) -> None : ...
107- def remove (self , * groups : _TGroup ) -> None : ...
105+ def add (self , * groups : _Group ) -> None : ...
106+ def remove (self , * groups : _Group ) -> None : ...
108107 def kill (self ) -> None : ...
109108 def alive (self ) -> bool : ...
110- def groups (self ) -> list [_TGroup ]: ...
109+ def groups (self ) -> list [_Group ]: ...
111110
112111# concrete dirty sprite implementation class
113- class DirtySprite (Sprite [ _TGroup ] , _SupportsDirtySprite [ _TGroup ] ):
112+ class DirtySprite (Sprite , _SupportsDirtySprite ):
114113 dirty : int
115114 blendmode : int
116115 source_rect : Union [FRect , Rect ]
@@ -122,33 +121,32 @@ class DirtySprite(Sprite[_TGroup], _SupportsDirtySprite[_TGroup]):
122121# typevar bound to Sprite, _SupportsSprite Protocol ensures sprite
123122# subclass passed to group has image and rect attributes
124123_TSprite = TypeVar ("_TSprite" , bound = _SupportsSprite )
124+ _TSprite_co = TypeVar ("_TSprite_co" , bound = _SupportsSprite , covariant = True )
125125_TSprite2 = TypeVar ("_TSprite2" , bound = _SupportsSprite )
126126
127127# almost the same as _TSprite but bound to DirtySprite
128- _TDirtySprite = TypeVar ("_TDirtySprite " , bound = _SupportsDirtySprite )
128+ _TDirtySprite_co = TypeVar ("_TDirtySprite_co " , bound = _SupportsDirtySprite , covariant = True )
129129
130130# typevar for sprite or iterable of sprites, used in Group init, add and remove
131- _SpriteOrIterable = Union [_TSprite , Iterable [_SpriteOrIterable [_TSprite ]]]
131+ _SpriteOrIterable = Union [_TSprite_co , Iterable [_SpriteOrIterable [_TSprite_co ]]]
132132
133- class AbstractGroup (Generic [_TSprite ]):
134- spritedict : dict [_TSprite , Optional [Union [FRect , Rect ]]]
133+ class AbstractGroup (Generic [_TSprite_co ]):
134+ spritedict : dict [_TSprite_co , Optional [Union [FRect , Rect ]]]
135135 lostsprites : list [Union [FRect , Rect ]]
136- def __class_getitem__ (
137- cls , item : type [_SupportsSprite ], /
138- ) -> types .GenericAlias : ...
136+ def __class_getitem__ (cls , item : Any , / ) -> types .GenericAlias : ...
139137 def __init__ (self ) -> None : ...
140138 def __len__ (self ) -> int : ...
141- def __iter__ (self ) -> Iterator [_TSprite ]: ...
139+ def __iter__ (self ) -> Iterator [_TSprite_co ]: ...
142140 def __bool__ (self ) -> bool : ...
143141 def __contains__ (self , item : Any ) -> bool : ...
144- def add_internal (self , sprite : _TSprite , layer : None = None ) -> None : ...
145- def remove_internal (self , sprite : _TSprite ) -> None : ...
146- def has_internal (self , sprite : _TSprite ) -> bool : ...
142+ def add_internal (self , sprite : _SupportsSprite , layer : None = None ) -> None : ...
143+ def remove_internal (self , sprite : _SupportsSprite ) -> None : ...
144+ def has_internal (self , sprite : _SupportsSprite ) -> bool : ...
147145 def copy (self ) -> Self : ...
148- def sprites (self ) -> list [_TSprite ]: ...
149- def add (self , * sprites : _SpriteOrIterable [_TSprite ]) -> None : ...
150- def remove (self , * sprites : _SpriteOrIterable [_TSprite ]) -> None : ...
151- def has (self , * sprites : _SpriteOrIterable [_TSprite ]) -> bool : ...
146+ def sprites (self ) -> list [_TSprite_co ]: ...
147+ def add (self , * sprites : _SpriteOrIterable [_TSprite_co ]) -> None : ...
148+ def remove (self , * sprites : _SpriteOrIterable [_TSprite_co ]) -> None : ...
149+ def has (self , * sprites : _SpriteOrIterable [_TSprite_co ]) -> bool : ...
152150 def update (self , * args : Any , ** kwargs : Any ) -> None : ...
153151 def draw (
154152 self , surface : Surface , bgd : Optional [Surface ] = None , special_flags : int = 0
@@ -160,41 +158,41 @@ class AbstractGroup(Generic[_TSprite]):
160158 ) -> None : ...
161159 def empty (self ) -> None : ...
162160
163- class Group (AbstractGroup [_TSprite ]):
164- def __init__ (self , * sprites : _SpriteOrIterable [_TSprite ]) -> None : ...
161+ class Group (AbstractGroup [_TSprite_co ]):
162+ def __init__ (self , * sprites : _SpriteOrIterable [_TSprite_co ]) -> None : ...
165163
166164# these are aliased in the code too
167165@deprecated ("Use `pygame.sprite.Group` instead" )
168- class RenderPlain (Group [_TSprite ]): ...
166+ class RenderPlain (Group [_TSprite_co ]): ...
169167
170168@deprecated ("Use `pygame.sprite.Group` instead" )
171- class RenderClear (Group [_TSprite ]): ...
169+ class RenderClear (Group [_TSprite_co ]): ...
172170
173- class RenderUpdates (Group [_TSprite ]): ...
171+ class RenderUpdates (Group [_TSprite_co ]): ...
174172
175173@deprecated ("Use `pygame.sprite.RenderUpdates` instead" )
176- class OrderedUpdates (RenderUpdates [_TSprite ]): ...
174+ class OrderedUpdates (RenderUpdates [_TSprite_co ]): ...
177175
178- class LayeredUpdates (AbstractGroup [_TSprite ]):
176+ class LayeredUpdates (AbstractGroup [_TSprite_co ]):
179177 def __init__ (
180- self , * sprites : _SpriteOrIterable [_TSprite ], ** kwargs : Any
178+ self , * sprites : _SpriteOrIterable [_TSprite_co ], ** kwargs : Any
181179 ) -> None : ...
182- def add (self , * sprites : _SpriteOrIterable [_TSprite ], ** kwargs : Any ) -> None : ...
183- def get_sprites_at (self , pos : Point ) -> list [_TSprite ]: ...
184- def get_sprite (self , idx : int ) -> _TSprite : ...
185- def remove_sprites_of_layer (self , layer_nr : int ) -> list [_TSprite ]: ...
180+ def add (self , * sprites : _SpriteOrIterable [_TSprite_co ], ** kwargs : Any ) -> None : ...
181+ def get_sprites_at (self , pos : Point ) -> list [_TSprite_co ]: ...
182+ def get_sprite (self , idx : int ) -> _TSprite_co : ...
183+ def remove_sprites_of_layer (self , layer_nr : int ) -> list [_TSprite_co ]: ...
186184 def layers (self ) -> list [int ]: ...
187- def change_layer (self , sprite : _TSprite , new_layer : int ) -> None : ...
188- def get_layer_of_sprite (self , sprite : _TSprite ) -> int : ...
185+ def change_layer (self , sprite : _SupportsSprite , new_layer : int ) -> None : ...
186+ def get_layer_of_sprite (self , sprite : _SupportsSprite ) -> int : ...
189187 def get_top_layer (self ) -> int : ...
190188 def get_bottom_layer (self ) -> int : ...
191- def move_to_front (self , sprite : _TSprite ) -> None : ...
192- def move_to_back (self , sprite : _TSprite ) -> None : ...
193- def get_top_sprite (self ) -> _TSprite : ...
194- def get_sprites_from_layer (self , layer : int ) -> list [_TSprite ]: ...
189+ def move_to_front (self , sprite : _SupportsSprite ) -> None : ...
190+ def move_to_back (self , sprite : _SupportsSprite ) -> None : ...
191+ def get_top_sprite (self ) -> _TSprite_co : ...
192+ def get_sprites_from_layer (self , layer : int ) -> list [_TSprite_co ]: ...
195193 def switch_layer (self , layer1_nr : int , layer2_nr : int ) -> None : ...
196194
197- class LayeredDirty (LayeredUpdates [_TDirtySprite ]):
195+ class LayeredDirty (LayeredUpdates [_TDirtySprite_co ]):
198196 def draw (
199197 self ,
200198 surface : Surface ,
0 commit comments