diff --git a/matplotlib-pr22780-Pillow-deprecations.patch b/matplotlib-pr22780-Pillow-deprecations.patch new file mode 100644 index 0000000..9b1a4e6 --- /dev/null +++ b/matplotlib-pr22780-Pillow-deprecations.patch @@ -0,0 +1,128 @@ +From 0205618d243c2c9ac43fc66558daae9364c394d0 Mon Sep 17 00:00:00 2001 +From: Oscar Gustafsson +Date: Mon, 4 Apr 2022 17:50:15 +0200 +Subject: [PATCH 1/2] Backport PR #22766: FIX: account for constant + deprecations in Pillow 9.1 + +--- + azure-pipelines.yml | 3 +++ + lib/matplotlib/animation.py | 18 ++++++++++-------- + lib/matplotlib/backends/backend_pdf.py | 9 +++++++-- + 3 files changed, 20 insertions(+), 10 deletions(-) + +diff --git a/azure-pipelines.yml b/azure-pipelines.yml +index 2c794033a494..c9a3ec83b70d 100644 +--- a/azure-pipelines.yml ++++ b/azure-pipelines.yml +@@ -134,6 +134,9 @@ stages: + - script: env + displayName: 'print env' + ++ - script: pip list ++ displayName: 'print pip' ++ + - bash: | + PYTHONFAULTHANDLER=1 python -m pytest --junitxml=junit/test-results.xml -raR --maxfail=50 --timeout=300 --durations=25 --cov-report= --cov=lib -n 2 || + [[ "$PYTHON_VERSION" = 'Pre' ]] +diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py +index 879aa945b00d..4eae790d8200 100644 +--- a/lib/matplotlib/animation.py ++++ b/lib/matplotlib/animation.py +@@ -17,6 +17,7 @@ + # * Can blit be enabled for movies? + # * Need to consider event sources to allow clicking through multiple figures + ++ + import abc + import base64 + import contextlib +@@ -481,14 +482,15 @@ def grab_frame(self, **savefig_kwargs): + def finish(self): + # Call run here now that all frame grabbing is done. All temp files + # are available to be assembled. +- self._run() +- super().finish() # Will call clean-up +- +- def _cleanup(self): # Inline to finish() once cleanup() is removed. +- super()._cleanup() +- if self._tmpdir: +- _log.debug('MovieWriter: clearing temporary path=%s', self._tmpdir) +- self._tmpdir.cleanup() ++ try: ++ self._run() ++ super().finish() ++ finally: ++ if self._tmpdir: ++ _log.debug( ++ 'MovieWriter: clearing temporary path=%s', self._tmpdir ++ ) ++ self._tmpdir.cleanup() + + + @writers.register('pillow') +diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py +index 9ca791db0c5a..d035d1680da1 100644 +--- a/lib/matplotlib/backends/backend_pdf.py ++++ b/lib/matplotlib/backends/backend_pdf.py +@@ -1718,8 +1718,13 @@ def _writeImg(self, data, id, smask=None): + # Convert to indexed color if there are 256 colors or fewer + # This can significantly reduce the file size + num_colors = len(img_colors) +- img = img.convert(mode='P', dither=Image.NONE, +- palette=Image.ADAPTIVE, colors=num_colors) ++ # These constants were converted to IntEnums and deprecated in ++ # Pillow 9.2 ++ dither = getattr(Image, 'Dither', Image).NONE ++ pmode = getattr(Image, 'Palette', Image).ADAPTIVE ++ img = img.convert( ++ mode='P', dither=dither, palette=pmode, colors=num_colors ++ ) + png_data, bit_depth, palette = self._writePng(img) + if bit_depth is None or palette is None: + raise RuntimeError("invalid PNG header") + +From 520120b1646a16f82c3f1f392c9f8b084a0fec23 Mon Sep 17 00:00:00 2001 +From: Oscar Gustafsson +Date: Mon, 4 Apr 2022 18:13:01 +0200 +Subject: [PATCH 2/2] Revert the clenaup changes + +--- + lib/matplotlib/animation.py | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py +index 4eae790d8200..879aa945b00d 100644 +--- a/lib/matplotlib/animation.py ++++ b/lib/matplotlib/animation.py +@@ -17,7 +17,6 @@ + # * Can blit be enabled for movies? + # * Need to consider event sources to allow clicking through multiple figures + +- + import abc + import base64 + import contextlib +@@ -482,15 +481,14 @@ def grab_frame(self, **savefig_kwargs): + def finish(self): + # Call run here now that all frame grabbing is done. All temp files + # are available to be assembled. +- try: +- self._run() +- super().finish() +- finally: +- if self._tmpdir: +- _log.debug( +- 'MovieWriter: clearing temporary path=%s', self._tmpdir +- ) +- self._tmpdir.cleanup() ++ self._run() ++ super().finish() # Will call clean-up ++ ++ def _cleanup(self): # Inline to finish() once cleanup() is removed. ++ super()._cleanup() ++ if self._tmpdir: ++ _log.debug('MovieWriter: clearing temporary path=%s', self._tmpdir) ++ self._tmpdir.cleanup() + + + @writers.register('pillow') diff --git a/python-matplotlib.changes b/python-matplotlib.changes index 85f2c57..824b250 100644 --- a/python-matplotlib.changes +++ b/python-matplotlib.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Apr 12 21:15:39 UTC 2022 - Ben Greiner + +- Add matplotlib-pr22780-Pillow-deprecations.patch for + deprecation errors with Pillow -- gh#matplotlib/matplotlib#22780 +- Skip any test with svg png or pdf in its id for non x86_64, as + image comparison tests compare to x86_64 references. + ------------------------------------------------------------------- Tue Dec 14 18:40:21 UTC 2021 - Ben Greiner diff --git a/python-matplotlib.spec b/python-matplotlib.spec index f858541..0e9d955 100644 --- a/python-matplotlib.spec +++ b/python-matplotlib.spec @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -41,7 +41,8 @@ Source1: matplotlib-mplsetup.cfg # Bundled version of freetype and qhull for testing purposes only Source98: http://www.qhull.org/download/qhull-2020-src-8.0.2.tgz Source99: https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz - +# PATCH-FIX-UPSTREAM matplotlib-pr22780-Pillow-deprecations.patch -- gh#matplotlib/matplotlib#22780 +Patch1: https://github.com/matplotlib/matplotlib/pull/22780.patch#/matplotlib-pr22780-Pillow-deprecations.patch BuildRequires: %{python_module Cycler >= 0.10} BuildRequires: %{python_module FontTools >= 4.22.0} BuildRequires: %{python_module devel} @@ -244,7 +245,7 @@ This package includes the wxWidgets-based wxagg backend for %{name} plotting package %prep -%setup -q -n matplotlib-%{version} +%autosetup -p1 -n matplotlib-%{version} #copy freetype to the right location, so that matplotlib will not try to download it mkdir -p ~/.cache/matplotlib/ SHA=($(sha256sum %{SOURCE98})) @@ -289,6 +290,12 @@ skip_tests+=" or (test_fig_close and Qt4Agg)" skip_tests+=" or test_invisible_Line_rendering" # too much memory consumption on obs parallel workers skip_tests+=" or (test_agg and chunksize) or test_throw_rendering_complexity_exceeded" +%ifnarch x86_64 +# image comparison failures due to precisions dicrepancies to the x86 produced references +skip_tests+=" or png or svg or pdf" +# flaky signal termination tests inside obs +skip_tests+=" or _sigint" +%endif %{pytest_arch --pyargs matplotlib.tests \ --pyargs mpl_toolkits.tests \ -n auto \