From d2dc8d3a6e326866b39266958dc8515632af7cfc Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 24 Dec 2023 15:59:12 +1100 Subject: [PATCH 1/2] Added type hints --- src/PIL/ImageSequence.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/PIL/ImageSequence.py b/src/PIL/ImageSequence.py index e09b001e82d..2c185027630 100644 --- a/src/PIL/ImageSequence.py +++ b/src/PIL/ImageSequence.py @@ -16,6 +16,10 @@ ## from __future__ import annotations +from typing import Callable + +from . import Image + class Iterator: """ @@ -29,14 +33,14 @@ class Iterator: :param im: An image object. """ - def __init__(self, im): + def __init__(self, im: Image.Image): if not hasattr(im, "seek"): msg = "im must have seek method" raise AttributeError(msg) self.im = im self.position = getattr(self.im, "_min_frame", 0) - def __getitem__(self, ix): + def __getitem__(self, ix: int) -> Image.Image: try: self.im.seek(ix) return self.im @@ -44,10 +48,10 @@ def __getitem__(self, ix): msg = "end of sequence" raise IndexError(msg) from e - def __iter__(self): + def __iter__(self) -> Iterator: return self - def __next__(self): + def __next__(self) -> Image.Image: try: self.im.seek(self.position) self.position += 1 @@ -57,7 +61,10 @@ def __next__(self): raise StopIteration(msg) from e -def all_frames(im, func=None): +def all_frames( + im: Image.Image | list[Image.Image], + func: Callable[[Image.Image], Image.Image] | None = None, +) -> list[Image.Image]: """ Applies a given function to all frames in an image or a list of images. The frames are returned as a list of separate images. From f8d75032dbbe5931d5536ee8134e164c36b8e049 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 25 Dec 2023 18:58:47 +1100 Subject: [PATCH 2/2] Added strict type hints --- src/PIL/Image.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 1cb484b8528..d04801cba75 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1181,7 +1181,7 @@ def quantize( return im - def copy(self): + def copy(self) -> Image: """ Copies this image. Use this method if you wish to paste things into an image, but still retain the original. @@ -2450,7 +2450,7 @@ def save(self, fp, format=None, **params): if open_fp: fp.close() - def seek(self, frame): + def seek(self, frame) -> Image: """ Seeks to the given frame in this sequence file. If you seek beyond the end of the sequence, the method raises an @@ -2537,7 +2537,7 @@ def getchannel(self, channel): return self._new(self.im.getband(channel)) - def tell(self): + def tell(self) -> int: """ Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`.