Type annotations: Add stubs for _imaging; aliases into aliases.py.

This commit is contained in:
neiljp (Neil Pilgrim) 2017-08-18 10:48:25 -07:00 committed by Eric Soroos
parent cd26623083
commit 0b005596b1
3 changed files with 115 additions and 10 deletions

100
PIL/_imaging.pyi Normal file
View File

@ -0,0 +1,100 @@
if False:
from PIL.aliases import *
from typing import Any # temporarily, hopefully ;)
from typing import Optional, List
PILLOW_VERSION = ...
DEFAULT_STRATEGY = ...
FILTERED = ...
HUFFMAN_ONLY = ...
RLE = ...
FIXED = ...
# List of functions is incomplete
def alpha_composite(core1: ImagingCore, core2: ImagingCore) -> ImagingCore: ...
def blend(core1: ImagingCore, core2: ImagingCore, alpha: float) -> ImagingCore: ...
def fill(mode: Mode, size: Size, color: Any) -> Any: ...
def new(mode: Mode, size: Size) -> ImagingCore: ...
def map_buffer(data, size, decoder_name, isNone, isint, args): ...
def crc32(): ... ###
def effect_mandelbrot(size, extent, quality): ...
def effect_noise(size, sigma): ...
def linear_gradient(mode): ...
def radial_gradient(mode): ...
def wedge(something): ...
class ImagingCore:
mode = ... # type: str
size = ... # type: Size ## close enough?
bands = ... # type: int
id = ... ### use? size_t? int?
ptr = ... ###
def getpixel(self, xy: XY) -> Optional[Any]: ...
def putpixel(self, xy: XY, value: Any) -> None: ...
def pixel_access(self, readonly: bool) -> Any: ...
def convert(self, mode, dither, paletteimage): ...
def convert2(self): ... ###
def convert_matrix(self, a): ...
def convert_transparent(self, a, b): ...
def copy(self) -> ImagingCore: ...
def crop(self, bbox: LURD) -> ImagingCore: ...
def expand(self, xmargin: int, ymargin: int, mode: Mode) -> Any: ...
def filter(self, xy, divisor, offset, kernel): ...
def histogram(self, tuple2: Optional[Any], coremask: Optional[Any]) -> List[int]: ...
def modefilter(self, i: int) -> Any: ...
# def offset(self): ... ### Function removed?
def paste(self, core: ImagingCore, box: LURD, coremask: ImagingCore) -> None: ...
def point(self, lut, mode): ...
def point_transform(self, scale, offset): ...
def putdata(self, data, scale, offset): ...
def quantize(self, colors, method, kmeans): ...
def rankfilter(self): ... ###
def resize(self, size, resample): ...
def transpose(self, method): ...
def transform2(self, box, core, method, data, resample, fill): ...
def isblock(self): ... ###
def getbbox(self) -> Optional[LURD]: ...
def getcolors(self, maxcolors): ...
def getextrema(self): ... ###
def getprojection(self): ... # returns tuple x, y
def getband(self, band): ...
# each band has: getextrema() which may return a 2tuple?
def putband(self, alphacore, band): ...
def split(self): ...
def fillband(self, band, alpha): ...
def setmode(self, mode): ...
def getpalette(self, mode): ...
def getpalettemode(self): ... ###
def putpalette(self, a): ...
def putpalettealpha(self, a, b): ...
def putpalettealphas(self, a): ...
### chop_* here
### gaussian_blur and unsharp_mask here
### box_blur here
def effect_spread(self, distance): ...
def new_block(self): ... ###
def save_ppm(self, file): ... ###

11
PIL/aliases.py Normal file
View File

@ -0,0 +1,11 @@
from typing import Tuple
# Type aliases; names subject to change
LURD = Tuple[int, int, int, int] # left, up(per), right, down = x0, y0, x1, y1
XY = Tuple[int, int]
Coord = XY
Size = XY # NOTE: All XY aliases will be interchangeable
Matrix4 = Tuple[float, float, float, float]
Matrix12 = Tuple[float, float, float, float, float, float, float, float, float, float, float, float]
Mode = str

View File

@ -27,14 +27,7 @@
if False: if False:
from typing import Any, Text, Optional, Tuple, List, Sequence, Union, Callable, Dict from typing import Any, Text, Optional, Tuple, List, Sequence, Union, Callable, Dict
# Type aliases; names subject to change from PIL.aliases import *
LURD = Tuple[int, int, int, int] # left, up(per), right, down = x0, y0, x1, y1
XY = Tuple[int, int]
Coord = XY
Size = XY # NOTE: All XY aliases will be interchangeable
Matrix4 = Tuple[float, float, float, float]
Matrix12 = Tuple[float, float, float, float, float, float, float, float, float, float, float, float]
Mode = str
# Just required for typing, or gradual module inclusion while adding annotation? # Just required for typing, or gradual module inclusion while adding annotation?
from io import BytesIO from io import BytesIO
@ -43,6 +36,7 @@ if False:
from . import ImageFilter from . import ImageFilter
from ImageFile import PyDecoder from ImageFile import PyDecoder
from ImageFile import PyEncoder from ImageFile import PyEncoder
from _imaging import ImagingCore
from . import VERSION, PILLOW_VERSION, _plugins from . import VERSION, PILLOW_VERSION, _plugins
@ -552,7 +546,7 @@ class Image(object):
# type: () -> None # type: () -> None
# FIXME: take "new" parameters / other image? # FIXME: take "new" parameters / other image?
# FIXME: turn mode and size into delegating properties? # FIXME: turn mode and size into delegating properties?
self.im = None # type: Optional[Any] self.im = None # type: Optional[ImagingCore]
self.mode = "" self.mode = ""
self.size = (0, 0) self.size = (0, 0)
self.palette = None # type: Optional[ImagePalette.ImagePalette] self.palette = None # type: Optional[ImagePalette.ImagePalette]
@ -1135,7 +1129,7 @@ class Image(object):
return self._new(self._crop(self.im, box)) return self._new(self._crop(self.im, box))
def _crop(self, im, box): def _crop(self, im, box):
# type: (Image, LURD) -> Image # type: (ImagingCore, LURD) -> Image
""" """
Returns a rectangular region from the core image object im. Returns a rectangular region from the core image object im.