diff --git a/av/audio/__init__.pyi b/av/audio/__init__.pyi index 71a653189..540589f3f 100644 --- a/av/audio/__init__.pyi +++ b/av/audio/__init__.pyi @@ -4,7 +4,7 @@ from .frame import AudioFrame as AudioFrame from .stream import AudioStream as AudioStream # FFmpeg 9.0 encoders and the codec descriptor aliases that resolve to them. -_AudioCodecName = Literal[ +type _AudioCodecName = Literal[ "aac", "aac_at", "aac_mf", diff --git a/av/audio/frame.pyi b/av/audio/frame.pyi index 4604f177b..dd5ac4082 100644 --- a/av/audio/frame.pyi +++ b/av/audio/frame.pyi @@ -10,7 +10,7 @@ from .layout import AudioLayout from .plane import AudioPlane format_dtypes: dict[str, str] -_SupportedNDarray = ( +type _SupportedNDarray = ( npt.NDArray[np.float64] | npt.NDArray[np.float32] | npt.NDArray[np.int32] diff --git a/av/packet.pyi b/av/packet.pyi index 57351003e..11b9168f3 100644 --- a/av/packet.pyi +++ b/av/packet.pyi @@ -1,7 +1,7 @@ from collections.abc import Buffer as _BufferLike from collections.abc import Iterator from fractions import Fraction -from typing import Generic, Literal, TypeVar, final, overload +from typing import Literal, final, overload from av.audio.frame import AudioFrame from av.audio.stream import AudioStream @@ -80,15 +80,12 @@ class PacketSideData(Buffer): def packet_sidedata_type_to_literal(dtype: int) -> PktSideDataT: ... def packet_sidedata_type_from_literal(dtype: PktSideDataT) -> int: ... -# TypeVar for stream types - bound to Stream so it can be any stream type -_StreamT = TypeVar("_StreamT", bound=Stream) - @final -class Packet(Buffer, Generic[_StreamT]): +class Packet[StreamT: Stream](Buffer): @property - def stream(self) -> _StreamT | None: ... + def stream(self) -> StreamT | None: ... @stream.setter - def stream(self, value: _StreamT) -> None: ... + def stream(self, value: StreamT) -> None: ... stream_index: int @property def time_base(self) -> AVRational: ... diff --git a/av/rational.pyi b/av/rational.pyi index ab3764ac7..64f905787 100644 --- a/av/rational.pyi +++ b/av/rational.pyi @@ -3,7 +3,7 @@ from fractions import Fraction from numbers import Rational from typing import final, overload -_Comparable = AVRational | Rational | Decimal | float +type _Comparable = AVRational | Rational | Decimal | float @final class AVRational: diff --git a/av/sidedata/sidedata.pyi b/av/sidedata/sidedata.pyi index 269f9cc6e..99beaa035 100644 --- a/av/sidedata/sidedata.pyi +++ b/av/sidedata/sidedata.pyi @@ -1,6 +1,6 @@ from collections.abc import Iterator, Mapping, Sequence from enum import Enum -from typing import Literal, Self, TypeVar, overload +from typing import Literal, Self, overload from typing_extensions import disjoint_base @@ -10,8 +10,6 @@ from av.frame import Frame from .encparams import VideoEncParams from .motionvectors import MotionVectors -_T = TypeVar("_T") - class Type(Enum): _value_: int PANSCAN = ... @@ -47,8 +45,8 @@ class Type(Enum): THREE_D_REFERENCE_DISPLAYS = ... EXIF = ... -_MotionVectorsKey = Literal["MOTION_VECTORS", Type.MOTION_VECTORS] -_VideoEncParamsKey = Literal["VIDEO_ENC_PARAMS", Type.VIDEO_ENC_PARAMS] +type _MotionVectorsKey = Literal["MOTION_VECTORS", Type.MOTION_VECTORS] +type _VideoEncParamsKey = Literal["VIDEO_ENC_PARAMS", Type.VIDEO_ENC_PARAMS] @disjoint_base class SideData(Buffer): @@ -69,6 +67,6 @@ class SideDataContainer(Mapping[Type, SideData]): @overload def get(self, key: str | int | Type, /) -> SideData | None: ... @overload - def get( - self, key: str | int | Type, default: SideData | _T, / - ) -> SideData | _T: ... + def get[T]( + self, key: str | int | Type, default: SideData | T, / + ) -> SideData | T: ... diff --git a/av/subtitles/__init__.pyi b/av/subtitles/__init__.pyi index 9d10afe0a..004efc264 100644 --- a/av/subtitles/__init__.pyi +++ b/av/subtitles/__init__.pyi @@ -1,7 +1,7 @@ from typing import Literal # FFmpeg 9.0 encoders and the codec descriptor aliases that resolve to them. -_SubtitleCodecName = Literal[ +type _SubtitleCodecName = Literal[ "ass", "dvb_subtitle", "dvbsub", diff --git a/av/video/__init__.pyi b/av/video/__init__.pyi index 3763244b1..4b473249b 100644 --- a/av/video/__init__.pyi +++ b/av/video/__init__.pyi @@ -4,7 +4,7 @@ from .frame import VideoFrame as VideoFrame from .stream import VideoStream as VideoStream # FFmpeg 9.0 encoders and the codec descriptor aliases that resolve to them. -_VideoCodecName = Literal[ +type _VideoCodecName = Literal[ "a64_multi", "a64_multi5", "a64multi", diff --git a/av/video/frame.pyi b/av/video/frame.pyi index 033cd5809..b9dc83806 100644 --- a/av/video/frame.pyi +++ b/av/video/frame.pyi @@ -12,7 +12,7 @@ from .format import VideoFormat from .plane import VideoPlane from .reformatter import ColorPrimaries, ColorTrc -_SupportedNDarray = ( +type _SupportedNDarray = ( npt.NDArray[np.uint8] | npt.NDArray[np.uint16] | npt.NDArray[np.float16] @@ -78,8 +78,6 @@ class VideoFrame(Frame): @property def sw_format(self) -> VideoFormat | None: ... @property - def time(self) -> float | None: ... - @property def width(self) -> int: ... @property def height(self) -> int: ... diff --git a/tests/common.py b/tests/common.py index 19984c77c..d9785551b 100644 --- a/tests/common.py +++ b/tests/common.py @@ -21,12 +21,10 @@ if TYPE_CHECKING: from collections.abc import Callable - from typing import Any, TypeVar + from typing import Any from PIL.Image import Image - T = TypeVar("T") - __all__ = ("fate_suite",) @@ -84,7 +82,7 @@ def sandboxed( # Decorator for running a test in the sandbox directory -def run_in_sandbox(func: Callable[..., T]) -> Callable[..., T]: +def run_in_sandbox[T](func: Callable[..., T]) -> Callable[..., T]: @functools.wraps(func) def _inner(self: Any, *args: Any, **kwargs: Any) -> T: current_dir = os.getcwd()