Skip to content

Commit 52b441d

Browse files
committed
Revert group's TypeVar to invariant
1 parent 6ec4728 commit 52b441d

File tree

1 file changed

+39
-44
lines changed

1 file changed

+39
-44
lines changed

buildconfig/stubs/pygame/sprite.pyi

Lines changed: 39 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class _HasRadiusAndRect(_HasRect, Protocol):
4848
radius: float
4949

5050
# non-generic Group, used in Sprite
51-
_Group = AbstractGroup[_SupportsSprite]
51+
_Group = AbstractGroup[Any]
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
@@ -118,35 +118,32 @@ class DirtySprite(Sprite, _SupportsDirtySprite):
118118
def _set_visible(self, val: int) -> None: ...
119119
def _get_visible(self) -> int: ...
120120

121-
# covariant typevar bound to Sprite, _SupportsSprite Protocol ensures sprite
121+
# typevar bound to Sprite, _SupportsSprite Protocol ensures sprite
122122
# subclass passed to group has image and rect attributes
123-
# covariant is required for _Group to work with any AbstractGroup
124-
# otherwise Sprite.add/remove do not accept AbstractGroup as arguments
125-
_TSprite_co = TypeVar("_TSprite_co", bound=_SupportsSprite, covariant=True)
126-
_TDirtySprite_co = TypeVar(
127-
"_TDirtySprite_co", bound=_SupportsDirtySprite, covariant=True
128-
)
123+
_TSprite = TypeVar("_TSprite", bound=_SupportsSprite)
124+
_TSprite2 = TypeVar("_TSprite2", bound=_SupportsSprite)
125+
_TDirtySprite = TypeVar("_TDirtySprite", bound=_SupportsDirtySprite)
129126

130127
# typevar for sprite or iterable of sprites, used in Group init, add and remove
131-
_SpriteOrIterable = Union[_TSprite_co, Iterable[_SpriteOrIterable[_TSprite_co]]]
128+
_SpriteOrIterable = Union[_TSprite, Iterable[_SpriteOrIterable[_TSprite]]]
132129

133-
class AbstractGroup(Generic[_TSprite_co]):
134-
spritedict: dict[_TSprite_co, Optional[Union[FRect, Rect]]]
130+
class AbstractGroup(Generic[_TSprite]):
131+
spritedict: dict[_TSprite, Optional[Union[FRect, Rect]]]
135132
lostsprites: list[Union[FRect, Rect]]
136133
def __class_getitem__(cls, item: Any, /) -> types.GenericAlias: ...
137134
def __init__(self) -> None: ...
138135
def __len__(self) -> int: ...
139-
def __iter__(self) -> Iterator[_TSprite_co]: ...
136+
def __iter__(self) -> Iterator[_TSprite]: ...
140137
def __bool__(self) -> bool: ...
141138
def __contains__(self, item: Any) -> 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: ...
139+
def add_internal(self, sprite: _TSprite, layer: None = None) -> None: ...
140+
def remove_internal(self, sprite: _TSprite) -> None: ...
141+
def has_internal(self, sprite: _TSprite) -> bool: ...
145142
def copy(self) -> Self: ...
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: ...
143+
def sprites(self) -> list[_TSprite]: ...
144+
def add(self, *sprites: _SpriteOrIterable[_TSprite]) -> None: ...
145+
def remove(self, *sprites: _SpriteOrIterable[_TSprite]) -> None: ...
146+
def has(self, *sprites: _SpriteOrIterable[_TSprite]) -> bool: ...
150147
def update(self, *args: Any, **kwargs: Any) -> None: ...
151148
def draw(
152149
self, surface: Surface, bgd: Optional[Surface] = None, special_flags: int = 0
@@ -158,41 +155,41 @@ class AbstractGroup(Generic[_TSprite_co]):
158155
) -> None: ...
159156
def empty(self) -> None: ...
160157

161-
class Group(AbstractGroup[_TSprite_co]):
162-
def __init__(self, *sprites: _SpriteOrIterable[_TSprite_co]) -> None: ...
158+
class Group(AbstractGroup[_TSprite]):
159+
def __init__(self, *sprites: _SpriteOrIterable[_TSprite]) -> None: ...
163160

164161
# these are aliased in the code too
165162
@deprecated("Use `pygame.sprite.Group` instead")
166-
class RenderPlain(Group[_TSprite_co]): ...
163+
class RenderPlain(Group[_TSprite]): ...
167164

168165
@deprecated("Use `pygame.sprite.Group` instead")
169-
class RenderClear(Group[_TSprite_co]): ...
166+
class RenderClear(Group[_TSprite]): ...
170167

171-
class RenderUpdates(Group[_TSprite_co]): ...
168+
class RenderUpdates(Group[_TSprite]): ...
172169

173170
@deprecated("Use `pygame.sprite.RenderUpdates` instead")
174-
class OrderedUpdates(RenderUpdates[_TSprite_co]): ...
171+
class OrderedUpdates(RenderUpdates[_TSprite]): ...
175172

176-
class LayeredUpdates(AbstractGroup[_TSprite_co]):
173+
class LayeredUpdates(AbstractGroup[_TSprite]):
177174
def __init__(
178-
self, *sprites: _SpriteOrIterable[_TSprite_co], **kwargs: Any
175+
self, *sprites: _SpriteOrIterable[_TSprite], **kwargs: Any
179176
) -> None: ...
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]: ...
177+
def add(self, *sprites: _SpriteOrIterable[_TSprite], **kwargs: Any) -> None: ...
178+
def get_sprites_at(self, pos: Point) -> list[_TSprite]: ...
179+
def get_sprite(self, idx: int) -> _TSprite: ...
180+
def remove_sprites_of_layer(self, layer_nr: int) -> list[_TSprite]: ...
184181
def layers(self) -> list[int]: ...
185-
def change_layer(self, sprite: _SupportsSprite, new_layer: int) -> None: ...
186-
def get_layer_of_sprite(self, sprite: _SupportsSprite) -> int: ...
182+
def change_layer(self, sprite: _TSprite, new_layer: int) -> None: ...
183+
def get_layer_of_sprite(self, sprite: _TSprite) -> int: ...
187184
def get_top_layer(self) -> int: ...
188185
def get_bottom_layer(self) -> int: ...
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]: ...
186+
def move_to_front(self, sprite: _TSprite) -> None: ...
187+
def move_to_back(self, sprite: _TSprite) -> None: ...
188+
def get_top_sprite(self) -> _TSprite: ...
189+
def get_sprites_from_layer(self, layer: int) -> list[_TSprite]: ...
193190
def switch_layer(self, layer1_nr: int, layer2_nr: int) -> None: ...
194191

195-
class LayeredDirty(LayeredUpdates[_TDirtySprite_co]):
192+
class LayeredDirty(LayeredUpdates[_TDirtySprite]):
196193
def draw(
197194
self,
198195
surface: Surface,
@@ -210,9 +207,9 @@ class LayeredDirty(LayeredUpdates[_TDirtySprite_co]):
210207
)
211208
def set_timing_treshold(self, time_ms: SupportsFloat) -> None: ...
212209

213-
class GroupSingle(AbstractGroup[_TSprite_co]):
214-
sprite: _TSprite_co
215-
def __init__(self, sprite: Optional[_TSprite_co] = None) -> None: ...
210+
class GroupSingle(AbstractGroup[_TSprite]):
211+
sprite: _TSprite
212+
def __init__(self, sprite: Optional[_TSprite] = None) -> None: ...
216213

217214
# argument to collide_rect must have rect attribute
218215
def collide_rect(left: _HasRect, right: _HasRect) -> bool: ...
@@ -244,9 +241,7 @@ def collide_mask(
244241
left: _SupportsCollideMask, right: _SupportsCollideMask
245242
) -> Optional[tuple[int, int]]: ...
246243

247-
# typevars for sprite collide functions
248-
_TSprite = TypeVar("_TSprite", bound=_SupportsSprite)
249-
_TSprite2 = TypeVar("_TSprite2", bound=_SupportsSprite)
244+
# _HasRect typevar for sprite collide functions
250245
_THasRect = TypeVar("_THasRect", bound=_HasRect)
251246

252247
def spritecollide(

0 commit comments

Comments
 (0)