Remove Image.coerce_e, deprecated in 9.2.0

This commit is contained in:
Hugo van Kemenade 2023-04-02 22:16:13 +03:00
parent 584f8c39de
commit b25bf5161a
3 changed files with 16 additions and 32 deletions

View File

@ -1,7 +1,5 @@
import pytest import pytest
from PIL import Image
from .helper import assert_image_equal, hopper from .helper import assert_image_equal, hopper
@ -62,8 +60,3 @@ def test_f_mode():
im = hopper("F") im = hopper("F")
with pytest.raises(ValueError): with pytest.raises(ValueError):
im.point(None) im.point(None)
def test_coerce_e_deprecation():
with pytest.warns(DeprecationWarning):
assert Image.coerce_e(2).data == 2

View File

@ -12,14 +12,6 @@ Deprecated features
Below are features which are considered deprecated. Where appropriate, Below are features which are considered deprecated. Where appropriate,
a ``DeprecationWarning`` is issued. a ``DeprecationWarning`` is issued.
Image.coerce_e
~~~~~~~~~~~~~~
.. deprecated:: 9.2.0
This undocumented method has been deprecated and will be removed in Pillow 10
(2023-07-01).
.. _Font size and offset methods: .. _Font size and offset methods:
Font size and offset methods Font size and offset methods
@ -222,6 +214,14 @@ Support for PyQt5 and PySide2 has been removed from ``ImageQt``. Upgrade to
`PyQt6 <https://www.riverbankcomputing.com/static/Docs/PyQt6/>`_ or `PyQt6 <https://www.riverbankcomputing.com/static/Docs/PyQt6/>`_ or
`PySide6 <https://doc.qt.io/qtforpython/>`_ instead. `PySide6 <https://doc.qt.io/qtforpython/>`_ instead.
Image.coerce_e
~~~~~~~~~~~~~~
.. deprecated:: 9.2.0
.. versionremoved:: 10.0.0
This undocumented method has been removed.
PILLOW_VERSION constant PILLOW_VERSION constant
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -56,7 +56,6 @@ from . import (
_plugins, _plugins,
) )
from ._binary import i32le, o32be, o32le from ._binary import i32le, o32be, o32le
from ._deprecate import deprecate
from ._util import DeferredError, is_path from ._util import DeferredError, is_path
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -421,26 +420,18 @@ def _getencoder(mode, encoder_name, args, extra=()):
# Simple expression analyzer # Simple expression analyzer
def coerce_e(value):
deprecate("coerce_e", 10)
return value if isinstance(value, _E) else _E(1, value)
# _E(scale, offset) represents the affine transformation scale * x + offset.
# The "data" field is named for compatibility with the old implementation,
# and should be renamed once coerce_e is removed.
class _E: class _E:
def __init__(self, scale, data): def __init__(self, scale, offset):
self.scale = scale self.scale = scale
self.data = data self.offset = offset
def __neg__(self): def __neg__(self):
return _E(-self.scale, -self.data) return _E(-self.scale, -self.offset)
def __add__(self, other): def __add__(self, other):
if isinstance(other, _E): if isinstance(other, _E):
return _E(self.scale + other.scale, self.data + other.data) return _E(self.scale + other.scale, self.offset + other.offset)
return _E(self.scale, self.data + other) return _E(self.scale, self.offset + other)
__radd__ = __add__ __radd__ = __add__
@ -453,19 +444,19 @@ class _E:
def __mul__(self, other): def __mul__(self, other):
if isinstance(other, _E): if isinstance(other, _E):
return NotImplemented return NotImplemented
return _E(self.scale * other, self.data * other) return _E(self.scale * other, self.offset * other)
__rmul__ = __mul__ __rmul__ = __mul__
def __truediv__(self, other): def __truediv__(self, other):
if isinstance(other, _E): if isinstance(other, _E):
return NotImplemented return NotImplemented
return _E(self.scale / other, self.data / other) return _E(self.scale / other, self.offset / other)
def _getscaleoffset(expr): def _getscaleoffset(expr):
a = expr(_E(1, 0)) a = expr(_E(1, 0))
return (a.scale, a.data) if isinstance(a, _E) else (0, a) return (a.scale, a.offset) if isinstance(a, _E) else (0, a)
# -------------------------------------------------------------------- # --------------------------------------------------------------------