From 73b67310b856eec4ec8503c9222bf3198a680899 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich <kevin@archlinuxarm.org> Date: Sat, 29 Oct 2022 20:55:33 +0000 Subject: [PATCH] community/python-matplotlib to 3.6.1-1 --- community/python-matplotlib/PKGBUILD | 14 +- community/python-matplotlib/freetype.patch | 75 +++++--- ...CAB59E3332F94D26BEF0378D86E7FAE5EB0C10.asc | 168 ++++++++++++++++++ 3 files changed, 230 insertions(+), 27 deletions(-) create mode 100644 community/python-matplotlib/keys/pgp/23CAB59E3332F94D26BEF0378D86E7FAE5EB0C10.asc diff --git a/community/python-matplotlib/PKGBUILD b/community/python-matplotlib/PKGBUILD index eed7d7003..127900222 100644 --- a/community/python-matplotlib/PKGBUILD +++ b/community/python-matplotlib/PKGBUILD @@ -10,7 +10,7 @@ # - disable lto via setup.cfg pkgname=python-matplotlib -pkgver=3.5.2 +pkgver=3.6.1 pkgrel=1 pkgdesc="A python plotting library, making publication quality plots" arch=(x86_64) @@ -38,14 +38,16 @@ checkdepends=(python-pytest python-pytest-xdist python-pytest-runner python-pyte texlive-bin texlive-core texlive-latexextra texlive-pictures ghostscript inkscape ffmpeg imagemagick gtk4 python-cairo python-gobject python-pyqt5 pyside2 python-pyqt6 pyside6 python-tornado python-wxpython tk jupyter-nbconvert jupyter-nbformat python-ipykernel python-pandas python-pikepdf python-pytz) -_tag=af8c92817e9c1b5cb51bd060ceb99ed956e714c1 # git rev-parse v${pkgver} +_tag=2aad0d94ff80a81cd2e735b46f11f4f4b5e3e59d # git rev-parse v${pkgver} _ftver=2.12.1 source=(git+https://github.com/matplotlib/matplotlib.git#tag=${_tag}?signed https://github.com/QuLogic/mpl-images/archive/v${pkgver}-with-freetype-${_ftver}/mpl-images-${pkgver}-ft${_ftver}.tar.gz - freetype.patch) + freetype.patch + matplotlib-pyside-6.4.patch::https://github.com/matplotlib/matplotlib/commit/c744161b.patch) b2sums=('SKIP' - 'b3dc00bd2e2ffb36e8d61ae570dee19a7bf54155fd91d4dc03b3f0ac439466efddc9564a27c44bb3eb9b46b7505cb4920f35c1a2c74a3ab7396a4b7bbbc6a9be' - '0f41283060ecd070e04efa51b32321f378fbcd50d2fc3105df517f55ea5b0268f2d4494dd742e463c4790fa18ecdac26e6c6ab6adcaa134cda152a523911ece1') + 'b2980e8812bd2ede44e448f70ada23ec3c313fd9d1024daa71320468857546818bbc9461a9f9e511de7c7883d8d810271acc13db6fb36a56f82d60b2ed1ada5e' + 'b821f938cace434932a43b15b42b93d0f8eaffea4e28fbf1d5a7263ec947c26252bafccaea60c1a1cb2fad4c71280ca2cf62527994f270af2467a242287470bb' + 'f85435d7925a3b8300eff92f995d0a43f7bc9db3c078a76a8a6a0eb01be830bf6a72011bb149a12561abf562420c9403094e062be5d2d19623381d5ee717b254') validpgpkeys=(23CAB59E3332F94D26BEF0378D86E7FAE5EB0C10) # Elliott Sales de Andrade <quantum.analyst@gmail.com> prepare() { @@ -56,6 +58,8 @@ prepare() { # Use system freetype and qhull, disable LTO sed -e 's|#system_freetype = False|system_freetype = True|' -e 's|#system_qhull = False|system_qhull = True|' -e 's|#enable_lto = True|enable_lto = False|' mplsetup.cfg.template > mplsetup.cfg patch -p1 < ../freetype.patch # From Fedora/upstream + # Fix tests with PySide 6.4 + patch -p1 < ../matplotlib-pyside-6.4.patch # Install tests for check() sed -i 's|#tests = False|tests = True|' mplsetup.cfg # Use appropriate baseline images for tests diff --git a/community/python-matplotlib/freetype.patch b/community/python-matplotlib/freetype.patch index ccb9a6b39..3a4a0b141 100644 --- a/community/python-matplotlib/freetype.patch +++ b/community/python-matplotlib/freetype.patch @@ -1,22 +1,23 @@ -From 200afb4b8503031e1aad437482b2bc61b1cede32 Mon Sep 17 00:00:00 2001 +From 00c02f0c02e9927d5bf9cab6f7d276d03afad558 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade <quantum.analyst@gmail.com> Date: Fri, 14 Feb 2020 06:05:42 -0500 +Subject: [PATCH 2/4] Set FreeType version to 2.12.1 and update tolerances. Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> --- lib/matplotlib/__init__.py | 2 +- lib/matplotlib/tests/test_axes.py | 4 ++-- - lib/matplotlib/tests/test_constrainedlayout.py | 2 +- + lib/matplotlib/tests/test_constrainedlayout.py | 6 +++--- lib/matplotlib/tests/test_polar.py | 2 +- lib/matplotlib/tests/test_tightlayout.py | 10 +++++----- - setupext.py | 9 +++++++++++++-- - 6 files changed, 23 insertions(+), 12 deletions(-) + setupext.py | 15 +++++++++++++-- + 6 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py -index bc800e1322..10ff904c8e 100644 +index 5eae4b50e2..1e68e9b991 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py -@@ -1201,7 +1201,7 @@ default_test_modules = [ +@@ -1212,7 +1212,7 @@ default_test_modules = [ def _init_tests(): # The version of FreeType to install locally for running the # tests. This must match the value in `setupext.py` @@ -26,10 +27,10 @@ index bc800e1322..10ff904c8e 100644 from matplotlib import ft2font if (ft2font.__freetype_version__ != LOCAL_FREETYPE_VERSION or diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py -index eb4c34382b..03b92d34fa 100644 +index a230af2ac1..9cadbd7975 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py -@@ -6710,7 +6710,7 @@ def test_normal_axes(): +@@ -7203,7 +7203,7 @@ def test_normal_axes(): ] for nn, b in enumerate(bbaxis): targetbb = mtransforms.Bbox.from_bounds(*target[nn]) @@ -38,7 +39,7 @@ index eb4c34382b..03b92d34fa 100644 target = [ [150.0, 119.999, 930.0, 11.111], -@@ -6728,7 +6728,7 @@ def test_normal_axes(): +@@ -7221,7 +7221,7 @@ def test_normal_axes(): target = [85.5138, 75.88888, 1021.11, 1017.11] targetbb = mtransforms.Bbox.from_bounds(*target) @@ -47,8 +48,21 @@ index eb4c34382b..03b92d34fa 100644 # test that get_position roundtrips to get_window_extent axbb = ax.get_position().transformed(fig.transFigure).bounds +diff --git a/lib/matplotlib/tests/test_backend_svg.py b/lib/matplotlib/tests/test_backend_svg.py +index 680efd6737..1c1900a443 100644 +--- a/lib/matplotlib/tests/test_backend_svg.py ++++ b/lib/matplotlib/tests/test_backend_svg.py +@@ -74,7 +74,7 @@ def test_bold_font_output(): + ax.set_title('bold-title', fontweight='bold') + + +-@image_comparison(['bold_font_output_with_none_fonttype.svg']) ++@image_comparison(['bold_font_output_with_none_fonttype.svg'], tol=15) + def test_bold_font_output_with_none_fonttype(): + plt.rcParams['svg.fonttype'] = 'none' + fig, ax = plt.subplots() diff --git a/lib/matplotlib/tests/test_constrainedlayout.py b/lib/matplotlib/tests/test_constrainedlayout.py -index 8fd3cc5a35..b1e0fa57cd 100644 +index 35eb850fcd..31086ae5b7 100644 --- a/lib/matplotlib/tests/test_constrainedlayout.py +++ b/lib/matplotlib/tests/test_constrainedlayout.py @@ -431,7 +431,7 @@ def test_hidden_axes(): @@ -60,8 +74,26 @@ index 8fd3cc5a35..b1e0fa57cd 100644 def test_colorbar_align(): +@@ -637,7 +637,7 @@ def test_compressed1(): + fig.draw_without_rendering() + + pos = axs[0, 0].get_position() +- np.testing.assert_allclose(pos.x0, 0.2344, atol=1e-3) ++ np.testing.assert_allclose(pos.x0, 0.2344, atol=1e-2) + pos = axs[0, 1].get_position() + np.testing.assert_allclose(pos.x1, 0.7024, atol=1e-3) + +@@ -652,7 +652,7 @@ def test_compressed1(): + + pos = axs[0, 0].get_position() + np.testing.assert_allclose(pos.x0, 0.06195, atol=1e-3) +- np.testing.assert_allclose(pos.y1, 0.8537, atol=1e-3) ++ np.testing.assert_allclose(pos.y1, 0.8537, atol=1e-2) + pos = axs[1, 2].get_position() + np.testing.assert_allclose(pos.x1, 0.8618, atol=1e-3) + np.testing.assert_allclose(pos.y0, 0.1934, atol=1e-3) diff --git a/lib/matplotlib/tests/test_polar.py b/lib/matplotlib/tests/test_polar.py -index 85aece5fce..9fea856af4 100644 +index c51508ae22..942ffcb521 100644 --- a/lib/matplotlib/tests/test_polar.py +++ b/lib/matplotlib/tests/test_polar.py @@ -314,7 +314,7 @@ def test_get_tightbbox_polar(): @@ -74,10 +106,10 @@ index 85aece5fce..9fea856af4 100644 @check_figures_equal(extensions=["png"]) diff --git a/lib/matplotlib/tests/test_tightlayout.py b/lib/matplotlib/tests/test_tightlayout.py -index e9b01b160d..beab853489 100644 +index 1eb7b4b453..697eba3211 100644 --- a/lib/matplotlib/tests/test_tightlayout.py +++ b/lib/matplotlib/tests/test_tightlayout.py -@@ -172,12 +172,12 @@ def test_outward_ticks(): +@@ -173,12 +173,12 @@ def test_outward_ticks(): plt.tight_layout() # These values were obtained after visual checking that they correspond # to a tight layouting that did take the ticks into account. @@ -96,10 +128,10 @@ index e9b01b160d..beab853489 100644 diff --git a/setupext.py b/setupext.py -index 90bc304531..7ae976b8fa 100644 +index 69835c12f7..79ee6174e1 100644 --- a/setupext.py +++ b/setupext.py -@@ -167,6 +167,16 @@ _freetype_hashes = { +@@ -168,13 +168,23 @@ _freetype_hashes = { '955e17244e9b38adb0c98df66abb50467312e6bb70eac07e49ce6bd1a20e809a', '2.10.1': '3a60d391fd579440561bf0e7f31af2222bc610ad6ce4d9d7bd2165bca8669110', @@ -115,18 +147,17 @@ index 90bc304531..7ae976b8fa 100644 + '2.12.0': + '7940a46eeb0255baaa87c553d72778c4f8daa2b8888c8e2a05766a2a8686740c', + '2.12.1': -+ 'efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938' ++ 'efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938', } -@@ -174,7 +184,7 @@ _freetype_hashes = { - # must match the value in lib/matplotlib.__init__.py and also needs to be - # changed below in the embedded windows build script (grep for "REMINDER" in - # this file). Also update the cache path in `.circleci/config.yml`. + # This is the version of FreeType to use when building a local version. It + # must match the value in lib/matplotlib.__init__.py, and the cache path in + # `.circleci/config.yml`. -TESTING_VERSION_OF_FREETYPE = '2.6.1' +TESTING_VERSION_OF_FREETYPE = '2.12.1' if sys.platform.startswith('win') and platform.machine() == 'ARM64': # older versions of freetype are not supported for win/arm64 # Matplotlib tests will not pass -@@ -590,6 +600,7 @@ class FreeType(SetupPackage): +@@ -584,6 +594,7 @@ class FreeType(SetupPackage): ext.extra_objects.insert( 0, str(src_path / 'objs' / '.libs' / libfreetype)) ext.define_macros.append(('FREETYPE_BUILD_TYPE', 'local')) @@ -135,5 +166,5 @@ index 90bc304531..7ae976b8fa 100644 def do_custom_build(self, env): # We're using a system freetype -- -2.35.1 +2.36.1 diff --git a/community/python-matplotlib/keys/pgp/23CAB59E3332F94D26BEF0378D86E7FAE5EB0C10.asc b/community/python-matplotlib/keys/pgp/23CAB59E3332F94D26BEF0378D86E7FAE5EB0C10.asc new file mode 100644 index 000000000..a2871b954 --- /dev/null +++ b/community/python-matplotlib/keys/pgp/23CAB59E3332F94D26BEF0378D86E7FAE5EB0C10.asc @@ -0,0 +1,168 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFJOIOQBEACzwa7UOQqh5rn1C//164pw+BzcSuA5ERVYhf6a7lmHXEzTpRak +SkWvZRYCHVYw3q+eqcR6Czq002h22js36KiwegRaNru2G6ZxymJBsGm6n6euzQXW +w3Pzfsj7FQK23R++rDBZVloef45kdNVO6v1LA2g6u7UbF1QC+N8nIhacB7K+tTlp +5bk+kJReiYEZj90xUeaB/G9ZS8eiDYRZlwFWDAQX3As0GwGiTR/KGmAQROGOPepM +bn4MT9FjGbPuwjL6efFvJLFuoMknBgdS6VEK+gxVW+91xhlYl5xfExW3glqAFe7d +kpazzXOC/vRRo2wqu7DX3M2e8R0STJKUlS66BPkMVYxhh7Sa/Hrvd8KQFIMH4eXH +KkY77DCSLuB81g6vtMVOgiCSv2O2/cHzAAtP4h+f2K3Kyy4tgBWil80aDKZheKDf +MhoKE5Qmao6JKMYfTTPevv4bLHGaXrqB0i+KU06k+vkPEC6naNwYhXqATQPKyyAp +C+0NFrPgPT5zYq4f6AEvaHHJMK7kI+GwTuhw/y6vJ8K0dk1EufUaij2mKq/Sd8ps +K5VMDW7gyMGqQuTeazTOpRTFg+r+JYy2y8hoG9koR/phQZ7bY3G2xOBZpOpVjxMc +8S/uKH74HIDSNyCPYTUWQcD+Yg+W7xh9h0TW6FAmZChP8QLnWPFXiWBvTQARAQAB +tDRFbGxpb3R0IFNhbGVzIGRlIEFuZHJhZGUgPHF1YW50dW0uYW5hbHlzdEBnbWFp +bC5jb20+iQJABBMBCgAqAhsDBQkSzAMABQsJCAcDBRUKCQgLBRYCAwEAAh4BAheA +BQJSTidFAhkBAAoJEI2G5/rl6wwQ/xkP/3YIQ0pI0BKQQ1lcaLxHVlD6TuymTrAZ +xKJ7GEaDO3hCbDTZqu/2H1dZqU748q+CvJIw6h/vDYSPcPiz23f/L094v3fzf9ZS +svnkqevx24qtPvZ8Msx7nUjm/2uhVe2qvWJh2cM1VrAcIhYI4Qgp7gdUz7yDdcKk +OGt5fO4NqFRXGRzuX3yVTdRwglg89D6wiQykxH6dJWjfQB6tbMR4tD7CitIkyDVt +ZcVtF6hM/Ig7Q2JgXRDjQ6ta3BzO8T85Hqd3zPBHLZSXzxE3QkCEMsET36NrEtWN +u/xqlQrRB+ArTqe6k+Fvrr7mm7CfEz7zpeUCJq9txEumhtVNdzbzZesqQ/izu439 +vAzpUXS8wrVzam6SpEO5hdg6WyztH6A6V44QsxTH2XaQTEr2Z2Zc+ig4R8DWkKF0 +CzUrdib0vHrfJZ0FoamWoKXqXZQjchbLLtXO/Gsh1WE2HfGANNpPOk34EtGt53We +yN4DaRcEQwwsfuQsw7cIIgG8yS2Z0dDgYei1XfJDUIq8Vf2vGA1lRmxlKYCOGGM9 ++EQ6VTxSgiRuyGv6qG1i31p1irN1gWELVrO86/Dec8n0bhBpHQCcLeaovfWtMZeB ++dHwYI8W/2DAmT3wvfpq1MfOK5hd/HvDM6t55eTQ2y32JC+CMYO9xARcIfWw3Q5n +wzXslg7+Y7LYtDdFbGxpb3R0IFNhbGVzIGRlIEFuZHJhZGUgPGVzYWxlc2RlQHBo +eXNpY3MudXRvcm9udG8uY2E+iQI9BBMBCgAnBQJSTia0AhsDBQkSzAMABQsJCAcD +BRUKCQgLBRYCAwEAAh4BAheAAAoJEI2G5/rl6wwQ5qUP/3YZX1OZCb99JzYltX8+ +kywgdfxL47S9BQtbScT2nmjIXMDCmQ6ud7x+lCKiskdr2yl8LyQvLUvCJPOgl5C+ +pFnn8sGOLVHYjuCyV5gHtE1SD8ka2g/hh6M8K6GUfFc3Y5KL7eQF3ucGX92J5eXI +9kCv40T4xf3ZdaMSqmNhN1M0YATLTdeGtmLbw5gER0AWAIQ2b6UhFyNHyiqBBoKp +0U0s1mQ2UWVGESWNNmTxX4Ks/5PE179MVg22FhXhvbqOHcUqdMbjfNf5RfWWHMnc +pvopW/WQKiLJP2WqvmAU5ccxrUUhLv/iVjYgi121HYBkGMqTYqYywkDPk1cfDIBS +uO/4edcOWe4+GlyfLbdj8LChGoM5buxAetj+pj12DaA7tH1Qno+db8ndZupHn6SO +JKyZEnMR60YQosndkOAKw+8AuKqW7dN6G0cVEq3wb2FP3N/hU/8zQmsuHU9EyiJM +wT2Gai/h7wDOG8dIPmHTua51QR9dTkmyuL0l2qBiatJn/wI0E9aEy/TvUeyCtDLP +uaW+HkWCWvUi50MYO1HFEmsuk2KsXkS5gMjX0wH42J/55IRfeJliepunziYSP/Al +j2Ys5cFIxYW67FZANvf4h6pBvDeD6DxtPDlPSjIsAODShj4Q03iWjJ0AkW4fMIN6 +hsJN77uUWW8JjBuXgfFJlRSm0dS51LcBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpG +SUYAAQEAAAEAAQAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4d +GhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0Y +MiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy +MjIyMjIy/8AAEQgAhwCHAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAAB +AgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQci +cRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeo +qaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 ++v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQH +BQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDTh +JfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5 +eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT +1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A4qG2hUAsAPrW +hayQxyAiMN/KubWYNy0o/Or1vfKjD96CB6mkVc9w8F+LYbewFpNCVXJK7R0rmfGu +qtqupNJGjBRxjFc1b3r2yjzDLHkccnFVLu685iRKxpKErlcy3EkUKfmBz6Yq3p12 +LadWSHLA9SKxnJJ65oDpDy559BTkmlqJM9xXx0E8PI7xATldg59uteNazctc3cso +YfMc/eFI2rLBbeX5aMSP4s5FZMt+jZJiXnvWcb3KdkinMJCx+dR/wIVZtNX1Czjc +RX7hsjYrZZcd+KWIQ3IymMjqPSp0tYhjcQK3ULmLlYluPFWrS2wjVoUP8Txocn86 +5i6ujM5eZ2lc92Oa6C40+W/H2fT0LsBuc+1Z7eEtUB/1BqWoxdkPV6mVFetbuWhL +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 +=hKHi +-----END PGP PUBLIC KEY BLOCK-----