Development changes
-------------------


Increase to minimum supported versions of dependencies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For Matplotlib 3.8, the :ref:`minimum supported versions <dependencies>` are
being bumped:

+------------+-----------------+---------------+
| Dependency |  min in mpl3.7  | min in mpl3.8 |
+============+=================+===============+
|   Python   |       3.8       |      3.9      |
+------------+-----------------+---------------+
| kiwisolver |       1.0.1     |      1.3.1    |
+------------+-----------------+---------------+
|   NumPy    |       1.20.0    |      1.21.0   |
+------------+-----------------+---------------+
|   Pillow   |       6.2.1     |      8.0      |
+------------+-----------------+---------------+

This is consistent with our :ref:`min_deps_policy` and `NEP29
<https://numpy.org/neps/nep-0029-deprecation_policy.html>`__


Increase to minimum supported optional dependencies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For Matplotlib 3.8, the :ref:`minimum supported versions of optional dependencies
<optional_dependencies>` are being bumped:

+------------+-----------------+---------------+
| Dependency |  min in mpl3.7  | min in mpl3.8 |
+============+=================+===============+
|   Tk       |      8.4        |     8.5       |
+------------+-----------------+---------------+
|   Qt       |      5.10       |     5.12      |
+------------+-----------------+---------------+

- There are no wheels or conda packages that support both Qt 5.11 (or older) and
  Python 3.9 (or newer).

This is consistent with our :ref:`min_deps_policy`

Provisional support for PEP484 Type Hint Annotations
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

New public API should be type hinted in ``.pyi`` stub files (except ``pyplot`` and tests
which are typed in-line).
Tests should be type hinted minimally, essentially only when ``mypy`` generates errors.

CI and configuration for running ``mypy`` have been added.

Generation of ``pyplot.py`` requires ``black``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The autogenerated portions of ``pyplot.py`` use ``black`` autoformatting to ensure
syntax-correct, readable output code.

As such ``black`` is now a development and test requirement (for the test which
regenerates ``pyplot``).

Wheels for some systems are no longer distributed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Pre-compiled wheels for 32-bit Linux and Windows are no longer provided on PyPI
since Matplotlib 3.8.

Multi-architecture ``universal2`` wheels for macOS are no longer provided on PyPI since
Matplotlib 3.8. In general, ``pip`` will always prefer the architecture-specific
(``amd64``- or ``arm64``-only) wheels, so these provided little benefit.

New wheel architectures
~~~~~~~~~~~~~~~~~~~~~~~

Wheels have been added for:

- musl based systems
