From: Stuart Henderson Subject: Re: [update] matplotlib 3.8.3 -> 3.9.4 To: Daniel Dickman Cc: ports@openbsd.org Date: Tue, 20 May 2025 08:24:08 +0100 On 2025/05/18 16:20, Daniel Dickman wrote: > Now that we have numpy2, here's an update of matplotlib to the 3.9.x > series. > > As per the dev change notes: > - the build system changed to meson > - mplsetup.cfg was moved into meson_options.txt > - the test data flag was moved into pyproject.toml > > The matplotlib system states an upper bound of meson-python of 16.x, > however since what we have in-tree is newer and seems to work, I've > loosened it to allow 18.x. Based on https://github.com/matplotlib/matplotlib/commit/03fa1ffb1b26733f109ae10ac67c8432f48ec320 it looks like they were avoiding a known-buggy version which we've already passed, so I think it would be good to remove the upper bound on mesonpy. ok. > Index: Makefile > =================================================================== > RCS file: /cvs/ports/graphics/py-matplotlib/Makefile,v > diff -u -p -u -r1.102 Makefile > --- Makefile 15 May 2025 21:38:54 -0000 1.102 > +++ Makefile 18 May 2025 20:14:11 -0000 > @@ -1,9 +1,8 @@ > COMMENT = Python charting and plotting API > > -MODPY_DISTV = 3.8.3 > +MODPY_DISTV = 3.9.4 > DISTNAME = matplotlib-${MODPY_DISTV} > PKGNAME = py-${DISTNAME} > -REVISION = 3 > > CATEGORIES = graphics devel math > > @@ -21,13 +20,14 @@ COMPILER = base-clang ports-gcc base-gc > MODULES = lang/python > > MODPY_PI = Yes > -MODPY_PYBUILD = setuptools_scm > +MODPY_PYBUILD = mesonpy > > MODPY_TEST_LINK_SO = Yes > MODPY_TEST_LINK_SRC = ${WRKSRC}/lib > > BUILD_DEPENDS = devel/py-certifi>=2020.06.20 \ > devel/py-pybind11>=2.6 \ > + devel/py-setuptools_scm \ > math/qhull \ > math/py-numpy>=1.25 \ > textproc/py-sphinx > @@ -56,12 +56,8 @@ MAKE_ENV+= LDSHARED="${CC} -shared -fPIC > > EXAMPLESDIR= ${PREFIX}/share/examples/${MODPY_PY_PREFIX}matplotlib > > -post-patch: > - cp ${WRKSRC}/mplsetup.cfg{.template,} > - > pre-configure: > find ${WRKSRC}/galleries/examples -name \*.py -exec ${MODPY_BIN_ADJ} {} + > - ${SUBST_CMD} ${WRKSRC}/setupext.py > > post-install: > ${INSTALL_DATA_DIR} ${EXAMPLESDIR} > Index: distinfo > =================================================================== > RCS file: /cvs/ports/graphics/py-matplotlib/distinfo,v > diff -u -p -u -r1.23 distinfo > --- distinfo 23 Feb 2024 02:36:51 -0000 1.23 > +++ distinfo 18 May 2025 20:14:11 -0000 > @@ -1,2 +1,2 @@ > -SHA256 (matplotlib-3.8.3.tar.gz) = e0FiOemuOL5UsCirv5BIr/UFSpq6VBa+8L0X+RYs4WE= > -SIZE (matplotlib-3.8.3.tar.gz) = 35879872 > +SHA256 (matplotlib-3.9.4.tar.gz) = HgDovnOTy9xv7fqKb7oCzz6DgUsoXbHGC5BqAjukG8M= > +SIZE (matplotlib-3.9.4.tar.gz) = 36106529 > Index: patches/patch-meson_options > =================================================================== > RCS file: patches/patch-meson_options > diff -N patches/patch-meson_options > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-meson_options 18 May 2025 20:14:11 -0000 > @@ -0,0 +1,15 @@ > +Index: meson.options > +--- meson.options.orig > ++++ meson.options > +@@ -5,9 +5,9 @@ > + # Qhull. You may use the following options to instead link against a system > + # FreeType/Qhull. As an exception, Matplotlib defaults to the system version of > + # FreeType on AIX. > +-option('system-freetype', type: 'boolean', value: false, > ++option('system-freetype', type: 'boolean', value: true, > + description: 'Build against system version of FreeType') > +-option('system-qhull', type: 'boolean', value: false, > ++option('system-qhull', type: 'boolean', value: true, > + description: 'Build against system version of Qhull') > + > + # Some of Matplotlib's components are optional: the MacOSX backend (installed > Index: patches/patch-mplsetup_cfg_template > =================================================================== > RCS file: patches/patch-mplsetup_cfg_template > diff -N patches/patch-mplsetup_cfg_template > --- patches/patch-mplsetup_cfg_template 16 Jan 2023 17:09:43 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,23 +0,0 @@ > -Index: mplsetup.cfg.template > ---- mplsetup.cfg.template.orig > -+++ mplsetup.cfg.template > -@@ -11,8 +11,8 @@ > - # FreeType/Qhull. As an exception, Matplotlib defaults to the system version > - # of FreeType on AIX. > - # > --#system_freetype = False > --#system_qhull = False > -+system_freetype = True > -+system_qhull = True > - > - [packages] > - # Some of Matplotlib's components are optional: the MacOSX backend (installed > -@@ -22,7 +22,7 @@ > - # lines. Note that the MacOSX backend is never built on Linux or Windows, > - # regardless of the config value. > - # > --#tests = False > -+tests = True > - #macosx = True > - > - [rc_options] > Index: patches/patch-pyproject_toml > =================================================================== > RCS file: patches/patch-pyproject_toml > diff -N patches/patch-pyproject_toml > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-pyproject_toml 18 May 2025 20:14:11 -0000 > @@ -0,0 +1,21 @@ > +Index: pyproject.toml > +--- pyproject.toml.orig > ++++ pyproject.toml > +@@ -73,7 +73,7 @@ dev = [ > + build-backend = "mesonpy" > + # Also keep in sync with optional dependencies above. > + requires = [ > +- "meson-python>=0.13.1,<0.17.0", > ++ "meson-python>=0.13.1,<0.19.0", > + "pybind11>=2.6,!=2.13.3", > + "setuptools_scm>=7", > + > +@@ -91,7 +91,7 @@ requires = [ > + ] > + > + [tool.meson-python.args] > +-install = ['--tags=data,python-runtime,runtime'] > ++install = ['--tags=data,python-runtime,runtime,tests'] > + > + [tool.setuptools_scm] > + version_scheme = "release-branch-semver" > Index: patches/patch-setupext_py > =================================================================== > RCS file: patches/patch-setupext_py > diff -N patches/patch-setupext_py > --- patches/patch-setupext_py 22 Jan 2024 23:13:46 -0000 1.25 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,19 +0,0 @@ > -Index: setupext.py > ---- setupext.py.orig > -+++ setupext.py > -@@ -445,6 +445,7 @@ class Matplotlib(SetupPackage): > - ext = Extension( > - "matplotlib._qhull", ["src/_qhull_wrapper.cpp"], > - define_macros=[("MPL_DEVNULL", os.devnull)]) > -+ ext.include_dirs.extend(['${PREFIX}/include']) > - add_numpy_flags(ext) > - Qhull.add_flags(ext) > - yield ext > -@@ -458,6 +459,7 @@ class Matplotlib(SetupPackage): > - libraries={"linux": ["dl"], "win32": ["comctl32", "psapi"], > - "cygwin": ["comctl32", "psapi"]}.get(sys.platform, []), > - extra_link_args={"win32": ["-mwindows"]}.get(sys.platform, [])) > -+ ext.include_dirs.extend(['${X11BASE}/include']) > - add_numpy_flags(ext) > - add_libagg_flags(ext) > - yield ext > Index: pkg/PLIST > =================================================================== > RCS file: /cvs/ports/graphics/py-matplotlib/pkg/PLIST,v > diff -u -p -u -r1.29 PLIST > --- pkg/PLIST 29 Apr 2025 10:38:37 -0000 1.29 > +++ pkg/PLIST 18 May 2025 20:14:13 -0000 > @@ -4,24 +4,10 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/${MODPY_PYCACHE}pylab.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/ > lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/ > +lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/LICENSE > lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/METADATA > lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/RECORD > lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/WHEEL > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/ > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/ > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_AMSFONTS > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_BAKOMA > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_CARLOGO > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_COLORBREWER > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_COURIERTEN > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_JSXTOOLS_RESIZE_OBSERVER > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_QHULL > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_QT4_EDITOR > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_SOLARIZED > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_STIX > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/licenses/LICENSE/LICENSE_YORICK > -lib/python${MODPY_VERSION}/site-packages/matplotlib-${MODPY_DISTV}.dist-info/top_level.txt > lib/python${MODPY_VERSION}/site-packages/matplotlib/__init__.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/__init__.pyi > ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/matplotlib/${MODPY_PYCACHE}/ > @@ -316,6 +302,8 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/${MODPY_PYCACHE}backend_wxcairo.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/${MODPY_PYCACHE}qt_compat.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/${MODPY_PYCACHE}qt_compat.${MODPY_PYC_MAGIC_TAG}pyc > +lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/${MODPY_PYCACHE}registry.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/${MODPY_PYCACHE}registry.${MODPY_PYC_MAGIC_TAG}pyc > @so lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/_backend_agg.${MODPY_PYC_MAGIC_TAG}so > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/_backend_agg.pyi > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/_backend_gtk.py > @@ -365,10 +353,8 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/qt_editor/${MODPY_PYCACHE}figureoptions.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/qt_editor/_formlayout.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/qt_editor/figureoptions.py > +lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/registry.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/ > -lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/.eslintrc.js > -lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/.prettierignore > -lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/.prettierrc > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/all_figures.html > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/css/ > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/css/boilerplate.css > @@ -381,7 +367,6 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/js/mpl_tornado.js > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/js/nbagg_mpl.js > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/nbagg_uat.ipynb > -lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/package.json > lib/python${MODPY_VERSION}/site-packages/matplotlib/backends/web_backend/single_figure.html > lib/python${MODPY_VERSION}/site-packages/matplotlib/bezier.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/bezier.pyi > @@ -681,9 +666,12 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/${MODPY_PYCACHE}mathmpl.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/${MODPY_PYCACHE}plot_directive.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/${MODPY_PYCACHE}plot_directive.${MODPY_PYC_MAGIC_TAG}pyc > +lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/${MODPY_PYCACHE}roles.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/${MODPY_PYCACHE}roles.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/figmpl_directive.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/mathmpl.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/plot_directive.py > +lib/python${MODPY_VERSION}/site-packages/matplotlib/sphinxext/roles.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/spines.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/spines.pyi > lib/python${MODPY_VERSION}/site-packages/matplotlib/stackplot.py > @@ -757,6 +745,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/testing/widgets.pyi > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/ > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/Courier10PitchBT-Bold.pfb > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/README > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/__init__.py > ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}/ > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > @@ -815,8 +804,6 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_basic.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_bbox_tight.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_bbox_tight.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_bezier.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_bezier.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_category.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_category.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_cbook.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > @@ -839,6 +826,8 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_cycles.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_dates.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_dates.${MODPY_PYC_MAGIC_TAG}pyc > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_datetime.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_datetime.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_determinism.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_determinism.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/${MODPY_PYCACHE}test_doc.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > @@ -1000,6 +989,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.svg > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axhvlinespan_interpolation.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axis_options.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axisbelow.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf > @@ -1268,6 +1258,8 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/step_linestyle.pdf > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/step_linestyle.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/step_linestyle.svg > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/sticky_tolerance.png > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/sticky_tolerance_cf.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/symlog.pdf > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/symlog2.pdf > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/test_alpha.pdf > @@ -1296,6 +1288,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_horiz_showextrema.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_horiz_showmeans.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_horiz_showmedians.png > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_sides.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_vert_baseline.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_vert_custompoints_10.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_axes/violinplot_vert_custompoints_200.png > @@ -1487,6 +1480,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_contour/contour_manual_labels.svg > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_contour/contour_test_label_transforms.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_contour/contour_uneven.png > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_contour/contourf_hatch_colors.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_dates/ > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.png > @@ -1500,6 +1494,8 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/alpha_background.svg > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_align_labels.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_align_labels.svg > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_align_titles_constrained.png > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_align_titles_tight.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_legend.pdf > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_legend.png > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/baseline_images/test_figure/figure_legend.svg > @@ -3373,7 +3369,6 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_backends_interactive.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_basic.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_bbox_tight.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_bezier.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_category.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_cbook.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_collections.py > @@ -3385,6 +3380,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_contour.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_cycles.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_dates.py > +lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_datetime.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_determinism.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_doc.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tests/test_dviread.py > @@ -3490,22 +3486,6 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}_trirefine.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}_tritools.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}_tritools.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triangulation.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triangulation.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tricontour.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tricontour.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}trifinder.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}trifinder.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triinterpolate.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triinterpolate.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tripcolor.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tripcolor.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triplot.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}triplot.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}trirefine.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}trirefine.${MODPY_PYC_MAGIC_TAG}pyc > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tritools.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/${MODPY_PYCACHE}tritools.${MODPY_PYC_MAGIC_TAG}pyc > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_triangulation.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_triangulation.pyi > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_tricontour.py > @@ -3522,14 +3502,6 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_trirefine.pyi > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_tritools.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/_tritools.pyi > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/triangulation.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/tricontour.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/trifinder.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/triinterpolate.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/tripcolor.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/triplot.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/trirefine.py > -lib/python${MODPY_VERSION}/site-packages/matplotlib/tri/tritools.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/typing.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/units.py > lib/python${MODPY_VERSION}/site-packages/matplotlib/widgets.py > @@ -3746,6 +3718,7 @@ lib/python${MODPY_VERSION}/site-packages > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/proj3d_axes_cube.png > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/proj3d_axes_cube_ortho.png > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/quiver3d.png > +lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/quiver3d_colorcoded.png > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/quiver3d_masked.png > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/scatter3d.png > lib/python${MODPY_VERSION}/site-packages/mpl_toolkits/mplot3d/tests/baseline_images/test_axes3d/scatter3d_color.png > @@ -3807,7 +3780,6 @@ share/examples/${MODPY_PY_PREFIX}matplot > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_axes_grid2.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_axes_hbox_divider.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_axes_rgb.py > -share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_colorbar_of_inset_axes.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_colorbar_with_axes_divider.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_colorbar_with_inset_locator.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/demo_edge_colorbar.py > @@ -3825,7 +3797,6 @@ share/examples/${MODPY_PY_PREFIX}matplot > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/simple_axesgrid.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/simple_axesgrid2.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/simple_axisline4.py > -share/examples/${MODPY_PY_PREFIX}matplotlib/axes_grid1/simple_colorbar.py > share/examples/${MODPY_PY_PREFIX}matplotlib/axisartist/ > share/examples/${MODPY_PY_PREFIX}matplotlib/axisartist/README.txt > share/examples/${MODPY_PY_PREFIX}matplotlib/axisartist/axis_direction.py > @@ -4025,6 +3996,8 @@ share/examples/${MODPY_PY_PREFIX}matplot > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/custom_shaded_3d_surface.py > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/errorbar3d.py > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/hist3d.py > +share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/imshow3d.py > +share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/intersecting_planes.py > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/lines3d.py > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/lorenz_attractor.py > share/examples/${MODPY_PY_PREFIX}matplotlib/mplot3d/mixed_subplots.py > @@ -4110,6 +4083,7 @@ share/examples/${MODPY_PY_PREFIX}matplot > share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/firefox.py > share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/integral.py > share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/mandelbrot.py > +share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/pan_zoom_overlap.py > share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/stock_prices.py > share/examples/${MODPY_PY_PREFIX}matplotlib/showcase/xkcd.py > share/examples/${MODPY_PY_PREFIX}matplotlib/specialty_plots/ > @@ -4149,10 +4123,11 @@ share/examples/${MODPY_PY_PREFIX}matplot > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/errorbars_and_boxes.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/hexbin_demo.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/hist.py > +share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_bihistogram.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_cumulative.py > -share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_features.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_histtypes.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_multihist.py > +share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/histogram_normalization.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/multiple_histograms_side_by_side.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/time_series_histogram.py > share/examples/${MODPY_PY_PREFIX}matplotlib/statistics/violinplot.py >