Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use list comprehensions to create transformed lists #7597

Merged
merged 4 commits into from Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 1 addition & 3 deletions Tests/test_file_apng.py
Expand Up @@ -356,9 +356,7 @@ def test_apng_save(tmp_path):
assert im.getpixel((64, 32)) == (0, 255, 0, 255)

with Image.open("Tests/images/apng/single_frame_default.png") as im:
frames = []
for frame_im in ImageSequence.Iterator(im):
frames.append(frame_im.copy())
frames = [frame_im.copy() for frame_im in ImageSequence.Iterator(im)]
frames[0].save(
test_file, save_all=True, default_image=True, append_images=frames[1:]
)
Expand Down
9 changes: 4 additions & 5 deletions src/PIL/FpxImagePlugin.py
Expand Up @@ -97,16 +97,15 @@ def _open_index(self, index=1):

s = prop[0x2000002 | id]

colors = []
bands = i32(s, 4)
if bands > 4:
msg = "Invalid number of bands"
raise OSError(msg)
for i in range(bands):
# note: for now, we ignore the "uncalibrated" flag
colors.append(i32(s, 8 + i * 4) & 0x7FFFFFFF)

self._mode, self.rawmode = MODES[tuple(colors)]
# note: for now, we ignore the "uncalibrated" flag
colors = tuple(i32(s, 8 + i * 4) & 0x7FFFFFFF for i in range(bands))

self._mode, self.rawmode = MODES[colors]

# load JPEG tables, if any
self.jpeg = {}
Expand Down
16 changes: 5 additions & 11 deletions src/PIL/Image.py
Expand Up @@ -1288,9 +1288,9 @@ def filter(self, filter):
if self.im.bands == 1 or multiband:
return self._new(filter.filter(self.im))

ims = []
for c in range(self.im.bands):
ims.append(self._new(filter.filter(self.im.getband(c))))
ims = [
self._new(filter.filter(self.im.getband(c))) for c in range(self.im.bands)
]
return merge(self.mode, ims)

def getbands(self):
Expand Down Expand Up @@ -1339,10 +1339,7 @@ def getcolors(self, maxcolors=256):
self.load()
if self.mode in ("1", "L", "P"):
h = self.im.histogram()
out = []
for i in range(256):
if h[i]:
out.append((h[i], i))
out = [(h[i], i) for i in range(256) if h[i]]
if len(out) > maxcolors:
return None
return out
Expand Down Expand Up @@ -1383,10 +1380,7 @@ def getextrema(self):

self.load()
if self.im.bands > 1:
extrema = []
for i in range(self.im.bands):
extrema.append(self.im.getband(i).getextrema())
return tuple(extrema)
return tuple(self.im.getband(i).getextrema() for i in range(self.im.bands))
return self.im.getextrema()

def _getxmp(self, xmp_tags):
Expand Down
7 changes: 2 additions & 5 deletions src/PIL/ImageCms.py
Expand Up @@ -787,11 +787,8 @@ def getProfileInfo(profile):
# info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint
description = profile.profile.profile_description
cpright = profile.profile.copyright
arr = []
for elt in (description, cpright):
if elt:
arr.append(elt)
return "\r\n\r\n".join(arr) + "\r\n\r\n"
elements = [element for element in (description, cpright) if element]
return "\r\n\r\n".join(elements) + "\r\n\r\n"
homm marked this conversation as resolved.
Show resolved Hide resolved

except (AttributeError, OSError, TypeError, ValueError) as v:
raise PyCMSError(v) from v
Expand Down
8 changes: 2 additions & 6 deletions src/PIL/ImageOps.py
Expand Up @@ -557,9 +557,7 @@ def invert(image):
:param image: The image to invert.
:return: An image.
"""
lut = []
for i in range(256):
lut.append(255 - i)
lut = list(range(255, -1, -1))
return image.point(lut) if image.mode == "1" else _lut(image, lut)


Expand All @@ -581,10 +579,8 @@ def posterize(image, bits):
:param bits: The number of bits to keep for each channel (1-8).
:return: An image.
"""
lut = []
mask = ~(2 ** (8 - bits) - 1)
for i in range(256):
lut.append(i & mask)
lut = [i & mask for i in range(256)]
return _lut(image, lut)


Expand Down
20 changes: 6 additions & 14 deletions src/PIL/ImagePalette.py
Expand Up @@ -200,21 +200,15 @@ def raw(rawmode, data):


def make_linear_lut(black, white):
lut = []
if black == 0:
for i in range(256):
lut.append(white * i // 255)
else:
msg = "unavailable when black is non-zero"
raise NotImplementedError(msg) # FIXME
return lut
return [white * i // 255 for i in range(256)]

msg = "unavailable when black is non-zero"
raise NotImplementedError(msg) # FIXME


def make_gamma_lut(exp):
lut = []
for i in range(256):
lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5))
return lut
return [int(((i / 255.0) ** exp) * 255.0 + 0.5) for i in range(256)]


def negative(mode="RGB"):
Expand All @@ -226,9 +220,7 @@ def negative(mode="RGB"):
def random(mode="RGB"):
from random import randint

palette = []
for i in range(256 * len(mode)):
palette.append(randint(0, 255))
palette = [randint(0, 255) for i in range(256 * len(mode))]
hugovk marked this conversation as resolved.
Show resolved Hide resolved
return ImagePalette(mode, palette)


Expand Down
18 changes: 6 additions & 12 deletions src/PIL/ImageQt.py
Expand Up @@ -103,12 +103,10 @@ def align8to32(bytes, width, mode):
if not extra_padding:
return bytes

new_data = []
for i in range(len(bytes) // bytes_per_line):
new_data.append(
bytes[i * bytes_per_line : (i + 1) * bytes_per_line]
+ b"\x00" * extra_padding
)
new_data = [
bytes[i * bytes_per_line : (i + 1) * bytes_per_line] + b"\x00" * extra_padding
for i in range(len(bytes) // bytes_per_line)
]

return b"".join(new_data)

Expand All @@ -131,15 +129,11 @@ def _toqclass_helper(im):
format = qt_format.Format_Mono
elif im.mode == "L":
format = qt_format.Format_Indexed8
colortable = []
for i in range(256):
colortable.append(rgb(i, i, i))
colortable = [rgb(i, i, i) for i in range(256)]
elif im.mode == "P":
format = qt_format.Format_Indexed8
colortable = []
palette = im.getpalette()
for i in range(0, len(palette), 3):
colortable.append(rgb(*palette[i : i + 3]))
colortable = [rgb(*palette[i : i + 3]) for i in range(0, len(palette), 3)]
elif im.mode == "RGB":
# Populate the 4th channel with 255
im = im.convert("RGBA")
Expand Down
34 changes: 8 additions & 26 deletions src/PIL/ImageStat.py
Expand Up @@ -59,14 +59,10 @@ def minmax(histogram):
x = max(x, i)
return n, x # returns (255, 0) if there's no data in the histogram

v = []
for i in range(0, len(self.h), 256):
v.append(minmax(self.h[i:]))
return v
return [minmax(self.h[i:]) for i in range(0, len(self.h), 256)]

def _getcount(self):
"""Get total number of pixels in each layer"""

return [sum(self.h[i : i + 256]) for i in range(0, len(self.h), 256)]

def _getsum(self):
Expand All @@ -93,11 +89,7 @@ def _getsum2(self):

def _getmean(self):
"""Get average pixel level for each layer"""

v = []
for i in self.bands:
v.append(self.sum[i] / self.count[i])
return v
return [self.sum[i] / self.count[i] for i in self.bands]

def _getmedian(self):
"""Get median pixel level for each layer"""
Expand All @@ -116,28 +108,18 @@ def _getmedian(self):

def _getrms(self):
"""Get RMS for each layer"""

v = []
for i in self.bands:
v.append(math.sqrt(self.sum2[i] / self.count[i]))
return v
return [math.sqrt(self.sum2[i] / self.count[i]) for i in self.bands]

def _getvar(self):
"""Get variance for each layer"""

v = []
for i in self.bands:
n = self.count[i]
v.append((self.sum2[i] - (self.sum[i] ** 2.0) / n) / n)
return v
return [
(self.sum2[i] - (self.sum[i] ** 2.0) / self.count[i]) / self.count[i]
for i in self.bands
]

def _getstddev(self):
"""Get standard deviation for each layer"""

v = []
for i in self.bands:
v.append(math.sqrt(self.var[i]))
return v
return [math.sqrt(self.var[i]) for i in self.bands]


Global = Stat # compatibility
4 changes: 1 addition & 3 deletions src/PIL/JpegImagePlugin.py
Expand Up @@ -233,9 +233,7 @@ def SOF(self, marker):
# fixup icc profile
self.icclist.sort() # sort by sequence number
if self.icclist[0][13] == len(self.icclist):
profile = []
for p in self.icclist:
profile.append(p[14:])
profile = [p[14:] for p in self.icclist]
icc_profile = b"".join(profile)
else:
icc_profile = None # wrong number of fragments
Expand Down
9 changes: 5 additions & 4 deletions src/PIL/MicImagePlugin.py
Expand Up @@ -51,10 +51,11 @@ def _open(self):
# find ACI subfiles with Image members (maybe not the
# best way to identify MIC files, but what the... ;-)

self.images = []
for path in self.ole.listdir():
if path[1:] and path[0][-4:] == ".ACI" and path[1] == "Image":
self.images.append(path)
self.images = [
path
for path in self.ole.listdir()
if path[1:] and path[0][-4:] == ".ACI" and path[1] == "Image"
]

# if we didn't find any images, this is probably not
# an MIC file.
Expand Down
16 changes: 5 additions & 11 deletions src/PIL/PcfFontFile.py
Expand Up @@ -129,9 +129,8 @@ def _load_properties(self):
nprops = i32(fp.read(4))

# read property description
p = []
for i in range(nprops):
p.append((i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4))))
p = [(i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4))) for _ in range(nprops)]

if nprops & 3:
fp.seek(4 - (nprops & 3), io.SEEK_CUR) # pad

Expand Down Expand Up @@ -186,8 +185,6 @@ def _load_bitmaps(self, metrics):
#
# bitmap data

bitmaps = []

fp, format, i16, i32 = self._getformat(PCF_BITMAPS)

nbitmaps = i32(fp.read(4))
Expand All @@ -196,13 +193,9 @@ def _load_bitmaps(self, metrics):
msg = "Wrong number of bitmaps"
raise OSError(msg)

offsets = []
for i in range(nbitmaps):
offsets.append(i32(fp.read(4)))
offsets = [i32(fp.read(4)) for _ in range(nbitmaps)]

bitmap_sizes = []
for i in range(4):
bitmap_sizes.append(i32(fp.read(4)))
bitmap_sizes = [i32(fp.read(4)) for _ in range(4)]

# byteorder = format & 4 # non-zero => MSB
bitorder = format & 8 # non-zero => MSB
Expand All @@ -218,6 +211,7 @@ def _load_bitmaps(self, metrics):
if bitorder:
mode = "1"

bitmaps = []
for i in range(nbitmaps):
xsize, ysize = metrics[i][:2]
b, e = offsets[i : i + 2]
Expand Down
4 changes: 1 addition & 3 deletions src/PIL/SpiderImagePlugin.py
Expand Up @@ -238,9 +238,7 @@ def makeSpiderHeader(im):
if nvalues < 23:
return []

hdr = []
for i in range(nvalues):
hdr.append(0.0)
hdr = [0.0] * nvalues

# NB these are Fortran indices
hdr[1] = 1.0 # nslice (=1 for an image)
Expand Down