From 7c62f87e6af3d202fa78797e946abc1b6024495f Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 14 Mar 2024 11:27:31 -0400 Subject: [PATCH 01/14] Backport PR #27921: Avoid modifying user input to Axes.bar --- lib/matplotlib/axes/_axes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 3bd355bdc663..0285ec6bdaed 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -2394,7 +2394,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", # checking and processing will be left to the errorbar method. xerr = kwargs.pop('xerr', None) yerr = kwargs.pop('yerr', None) - error_kw = kwargs.pop('error_kw', {}) + error_kw = kwargs.pop('error_kw', None) + error_kw = {} if error_kw is None else error_kw.copy() ezorder = error_kw.pop('zorder', None) if ezorder is None: ezorder = kwargs.get('zorder', None) @@ -2550,9 +2551,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", error_kw.setdefault("label", '_nolegend_') - errorbar = self.errorbar(ex, ey, - yerr=yerr, xerr=xerr, - fmt='none', **error_kw) + errorbar = self.errorbar(ex, ey, yerr=yerr, xerr=xerr, fmt='none', + **error_kw) else: errorbar = None From 1004e032a4f102e88ec4a19153233c21f6123458 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Thu, 14 Mar 2024 13:39:33 -0400 Subject: [PATCH 02/14] Backport PR #27875: macosx: Clean up single-shot timers correctly --- lib/matplotlib/backends/backend_macosx.py | 4 ---- src/_macosx.m | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/backends/backend_macosx.py b/lib/matplotlib/backends/backend_macosx.py index a39f5b5b1497..726a2ada8425 100644 --- a/lib/matplotlib/backends/backend_macosx.py +++ b/lib/matplotlib/backends/backend_macosx.py @@ -64,13 +64,9 @@ def draw_idle(self): def _single_shot_timer(self, callback): """Add a single shot timer with the given callback""" - # We need to explicitly stop and remove the timer after - # firing, otherwise segfaults will occur when trying to deallocate - # the singleshot timers. def callback_func(callback, timer): callback() self._timers.remove(timer) - timer.stop() timer = self.new_timer(interval=0) timer.single_shot = True timer.add_callback(callback_func, callback, timer) diff --git a/src/_macosx.m b/src/_macosx.m index 3fac8b41f84e..eaf4f8292546 100755 --- a/src/_macosx.m +++ b/src/_macosx.m @@ -1741,6 +1741,11 @@ - (void)flagsChanged:(NSEvent *)event repeats: !single block: ^(NSTimer *timer) { gil_call_method((PyObject*)self, "_on_timer"); + if (single) { + // A single-shot timer will be automatically invalidated when it fires, so + // we shouldn't do it ourselves when the object is deleted. + self->timer = NULL; + } }]; // Schedule the timer on the main run loop which is needed // when updating the UI from a background thread From 45d72fd364f48272199ea92f1f72c610de14ce17 Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Fri, 15 Mar 2024 11:53:07 -0500 Subject: [PATCH 03/14] Backport PR #27933: Update "Created with" url in hand.svg --- lib/matplotlib/mpl-data/images/hand.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/mpl-data/images/hand.svg b/lib/matplotlib/mpl-data/images/hand.svg index f246f51e57d5..28b96a2a9c4a 100644 --- a/lib/matplotlib/mpl-data/images/hand.svg +++ b/lib/matplotlib/mpl-data/images/hand.svg @@ -5,7 +5,7 @@ ]> - + Date: Mon, 25 Mar 2024 21:05:44 -0400 Subject: [PATCH 04/14] Backport PR #27975: DOC: Fix typo in ```ax.transData.inversed()``` --- galleries/users_explain/artists/transforms_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galleries/users_explain/artists/transforms_tutorial.py b/galleries/users_explain/artists/transforms_tutorial.py index c6e71ad111d7..2d63b548a606 100644 --- a/galleries/users_explain/artists/transforms_tutorial.py +++ b/galleries/users_explain/artists/transforms_tutorial.py @@ -86,7 +86,7 @@ `.Transform.inverted`) to generate a transform from output coordinate system back to the input coordinate system. For example, ``ax.transData`` converts values in data coordinates to display coordinates and -``ax.transData.inversed()`` is a :class:`matplotlib.transforms.Transform` that +``ax.transData.inverted()`` is a :class:`matplotlib.transforms.Transform` that goes from display coordinates to data coordinates. This is particularly useful when processing events from the user interface, which typically occur in display space, and you want to know where the mouse click or key-press occurred From fe5744eea83b868e982c0d772fd6cf267b5f7d71 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 25 Mar 2024 21:05:44 -0400 Subject: [PATCH 05/14] Backport PR #27975: DOC: Fix typo in ```ax.transData.inversed()``` --- galleries/users_explain/artists/transforms_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galleries/users_explain/artists/transforms_tutorial.py b/galleries/users_explain/artists/transforms_tutorial.py index c6e71ad111d7..2d63b548a606 100644 --- a/galleries/users_explain/artists/transforms_tutorial.py +++ b/galleries/users_explain/artists/transforms_tutorial.py @@ -86,7 +86,7 @@ `.Transform.inverted`) to generate a transform from output coordinate system back to the input coordinate system. For example, ``ax.transData`` converts values in data coordinates to display coordinates and -``ax.transData.inversed()`` is a :class:`matplotlib.transforms.Transform` that +``ax.transData.inverted()`` is a :class:`matplotlib.transforms.Transform` that goes from display coordinates to data coordinates. This is particularly useful when processing events from the user interface, which typically occur in display space, and you want to know where the mouse click or key-press occurred From b22bb88fb63455d7dce4129e18f91911779b8533 Mon Sep 17 00:00:00 2001 From: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Date: Thu, 28 Mar 2024 07:17:45 +0100 Subject: [PATCH 06/14] Backport PR #27985: TST: Remove superfluous chdir from tests --- lib/matplotlib/tests/test_backend_pdf.py | 32 +++++++++++++----------- lib/matplotlib/tests/test_backend_pgf.py | 32 +++++++++++++----------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/lib/matplotlib/tests/test_backend_pdf.py b/lib/matplotlib/tests/test_backend_pdf.py index 68ce02cc366c..c697821d7273 100644 --- a/lib/matplotlib/tests/test_backend_pdf.py +++ b/lib/matplotlib/tests/test_backend_pdf.py @@ -81,43 +81,47 @@ def test_multipage_properfinalize(): def test_multipage_keep_empty(tmp_path): - os.chdir(tmp_path) - # test empty pdf files # an empty pdf is left behind with keep_empty unset - with pytest.warns(mpl.MatplotlibDeprecationWarning), PdfPages("a.pdf") as pdf: + fn = tmp_path / "a.pdf" + with pytest.warns(mpl.MatplotlibDeprecationWarning), PdfPages(fn) as pdf: pass - assert os.path.exists("a.pdf") + assert fn.exists() # an empty pdf is left behind with keep_empty=True + fn = tmp_path / "b.pdf" with pytest.warns(mpl.MatplotlibDeprecationWarning), \ - PdfPages("b.pdf", keep_empty=True) as pdf: + PdfPages(fn, keep_empty=True) as pdf: pass - assert os.path.exists("b.pdf") + assert fn.exists() # an empty pdf deletes itself afterwards with keep_empty=False - with PdfPages("c.pdf", keep_empty=False) as pdf: + fn = tmp_path / "c.pdf" + with PdfPages(fn, keep_empty=False) as pdf: pass - assert not os.path.exists("c.pdf") + assert not fn.exists() # test pdf files with content, they should never be deleted # a non-empty pdf is left behind with keep_empty unset - with PdfPages("d.pdf") as pdf: + fn = tmp_path / "d.pdf" + with PdfPages(fn) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("d.pdf") + assert fn.exists() # a non-empty pdf is left behind with keep_empty=True + fn = tmp_path / "e.pdf" with pytest.warns(mpl.MatplotlibDeprecationWarning), \ - PdfPages("e.pdf", keep_empty=True) as pdf: + PdfPages(fn, keep_empty=True) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("e.pdf") + assert fn.exists() # a non-empty pdf is left behind with keep_empty=False - with PdfPages("f.pdf", keep_empty=False) as pdf: + fn = tmp_path / "f.pdf" + with PdfPages(fn, keep_empty=False) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("f.pdf") + assert fn.exists() def test_composite_image(): diff --git a/lib/matplotlib/tests/test_backend_pgf.py b/lib/matplotlib/tests/test_backend_pgf.py index a866916c58c6..8a83515f161c 100644 --- a/lib/matplotlib/tests/test_backend_pgf.py +++ b/lib/matplotlib/tests/test_backend_pgf.py @@ -288,43 +288,47 @@ def test_pdf_pages_metadata_check(monkeypatch, system): @needs_pgf_xelatex def test_multipage_keep_empty(tmp_path): - os.chdir(tmp_path) - # test empty pdf files # an empty pdf is left behind with keep_empty unset - with pytest.warns(mpl.MatplotlibDeprecationWarning), PdfPages("a.pdf") as pdf: + fn = tmp_path / "a.pdf" + with pytest.warns(mpl.MatplotlibDeprecationWarning), PdfPages(fn) as pdf: pass - assert os.path.exists("a.pdf") + assert fn.exists() # an empty pdf is left behind with keep_empty=True + fn = tmp_path / "b.pdf" with pytest.warns(mpl.MatplotlibDeprecationWarning), \ - PdfPages("b.pdf", keep_empty=True) as pdf: + PdfPages(fn, keep_empty=True) as pdf: pass - assert os.path.exists("b.pdf") + assert fn.exists() # an empty pdf deletes itself afterwards with keep_empty=False - with PdfPages("c.pdf", keep_empty=False) as pdf: + fn = tmp_path / "c.pdf" + with PdfPages(fn, keep_empty=False) as pdf: pass - assert not os.path.exists("c.pdf") + assert not fn.exists() # test pdf files with content, they should never be deleted # a non-empty pdf is left behind with keep_empty unset - with PdfPages("d.pdf") as pdf: + fn = tmp_path / "d.pdf" + with PdfPages(fn) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("d.pdf") + assert fn.exists() # a non-empty pdf is left behind with keep_empty=True + fn = tmp_path / "e.pdf" with pytest.warns(mpl.MatplotlibDeprecationWarning), \ - PdfPages("e.pdf", keep_empty=True) as pdf: + PdfPages(fn, keep_empty=True) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("e.pdf") + assert fn.exists() # a non-empty pdf is left behind with keep_empty=False - with PdfPages("f.pdf", keep_empty=False) as pdf: + fn = tmp_path / "f.pdf" + with PdfPages(fn, keep_empty=False) as pdf: pdf.savefig(plt.figure()) - assert os.path.exists("f.pdf") + assert fn.exists() @needs_pgf_xelatex From 0fb44b5c62f11f375f9c5c02450474188e247350 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Fri, 29 Mar 2024 06:45:40 +0100 Subject: [PATCH 07/14] Backport PR #27988: gtk: Ensure pending draws are done before GTK draw --- lib/matplotlib/backends/backend_gtk3agg.py | 7 ++++++- lib/matplotlib/backends/backend_gtk3cairo.py | 7 ++++++- lib/matplotlib/backends/backend_gtk4agg.py | 7 ++++++- lib/matplotlib/backends/backend_gtk4cairo.py | 7 ++++++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/backends/backend_gtk3agg.py b/lib/matplotlib/backends/backend_gtk3agg.py index a006a4c6f127..90b38ffa4ec3 100644 --- a/lib/matplotlib/backends/backend_gtk3agg.py +++ b/lib/matplotlib/backends/backend_gtk3agg.py @@ -2,7 +2,7 @@ from .. import cbook, transforms from . import backend_agg, backend_gtk3 -from .backend_gtk3 import Gtk, _BackendGTK3 +from .backend_gtk3 import GLib, Gtk, _BackendGTK3 import cairo # Presence of cairo is already checked by _backend_gtk. @@ -14,6 +14,11 @@ def __init__(self, figure): self._bbox_queue = [] def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + scale = self.device_pixel_ratio allocation = self.get_allocation() w = allocation.width * scale diff --git a/lib/matplotlib/backends/backend_gtk3cairo.py b/lib/matplotlib/backends/backend_gtk3cairo.py index 1da8419e5381..24a26111f062 100644 --- a/lib/matplotlib/backends/backend_gtk3cairo.py +++ b/lib/matplotlib/backends/backend_gtk3cairo.py @@ -1,11 +1,16 @@ from contextlib import nullcontext from .backend_cairo import FigureCanvasCairo -from .backend_gtk3 import Gtk, FigureCanvasGTK3, _BackendGTK3 +from .backend_gtk3 import GLib, Gtk, FigureCanvasGTK3, _BackendGTK3 class FigureCanvasGTK3Cairo(FigureCanvasCairo, FigureCanvasGTK3): def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + with (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar else nullcontext()): self._renderer.set_context(ctx) diff --git a/lib/matplotlib/backends/backend_gtk4agg.py b/lib/matplotlib/backends/backend_gtk4agg.py index efddfec56075..0af07850a30a 100644 --- a/lib/matplotlib/backends/backend_gtk4agg.py +++ b/lib/matplotlib/backends/backend_gtk4agg.py @@ -2,7 +2,7 @@ from .. import cbook from . import backend_agg, backend_gtk4 -from .backend_gtk4 import Gtk, _BackendGTK4 +from .backend_gtk4 import GLib, Gtk, _BackendGTK4 import cairo # Presence of cairo is already checked by _backend_gtk. @@ -11,6 +11,11 @@ class FigureCanvasGTK4Agg(backend_agg.FigureCanvasAgg, backend_gtk4.FigureCanvasGTK4): def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + scale = self.device_pixel_ratio allocation = self.get_allocation() diff --git a/lib/matplotlib/backends/backend_gtk4cairo.py b/lib/matplotlib/backends/backend_gtk4cairo.py index d57f53fb28d6..b1d543704351 100644 --- a/lib/matplotlib/backends/backend_gtk4cairo.py +++ b/lib/matplotlib/backends/backend_gtk4cairo.py @@ -1,13 +1,18 @@ from contextlib import nullcontext from .backend_cairo import FigureCanvasCairo -from .backend_gtk4 import Gtk, FigureCanvasGTK4, _BackendGTK4 +from .backend_gtk4 import GLib, Gtk, FigureCanvasGTK4, _BackendGTK4 class FigureCanvasGTK4Cairo(FigureCanvasCairo, FigureCanvasGTK4): _context_is_scaled = True def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + with (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar else nullcontext()): self._renderer.set_context(ctx) From 79ee5af504d217c55054632ffb51828a4c887b42 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Mon, 1 Apr 2024 17:10:56 +0100 Subject: [PATCH 08/14] Backport PR #28000: Fix color sequence data for Set2 and Set3 --- lib/matplotlib/colors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index bd89e70049c3..81db1611550b 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -127,8 +127,8 @@ class ColorSequenceRegistry(Mapping): 'Accent': _cm._Accent_data, 'Dark2': _cm._Dark2_data, 'Set1': _cm._Set1_data, - 'Set2': _cm._Set1_data, - 'Set3': _cm._Set1_data, + 'Set2': _cm._Set2_data, + 'Set3': _cm._Set3_data, } def __init__(self): From 0ec177469dfb731905832c7e05c78f6db5bf312b Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Fri, 29 Mar 2024 12:44:45 -0500 Subject: [PATCH 09/14] Unpin numpy 2 for install, build against numpy rc for isolated builds --- .github/workflows/cibuildwheel.yml | 4 ++-- pyproject.toml | 13 ++++++++++++- setup.py | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index 95b46216cf39..d1dbbb2c47bf 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -94,10 +94,10 @@ jobs: runs-on: ${{ matrix.os }} env: CIBW_BEFORE_BUILD: >- - pip install certifi numpy>=1.25 && + pip install certifi && rm -rf {package}/build CIBW_BEFORE_BUILD_WINDOWS: >- - pip install certifi delvewheel numpy>=1.25 && + pip install certifi delvewheel && rm -rf {package}/build CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >- delvewheel repair -w {dest_dir} {wheel} diff --git a/pyproject.toml b/pyproject.toml index 7131609c633a..44f56d8cc122 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,10 +2,21 @@ build-backend = "setuptools.build_meta" requires = [ "certifi>=2020.06.20", - "numpy>=1.25", "pybind11>=2.6", "setuptools>=64", "setuptools_scm>=7", + + # Comments on numpy build requirement range: + # + # 1. >=2.0.x is the numpy requirement for wheel builds for distribution + # on PyPI - building against 2.x yields wheels that are also + # ABI-compatible with numpy 1.x at runtime. + # 2. Note that building against numpy 1.x works fine too - users and + # redistributors can do this by installing the numpy version they like + # and disabling build isolation. + # 3. The <2.3 upper bound is for matching the numpy deprecation policy, + # it should not be loosened. + "numpy>=2.0.0rc1,<2.3", ] [tool.setuptools_scm] diff --git a/setup.py b/setup.py index 6f277d4e4d7d..899021a83254 100644 --- a/setup.py +++ b/setup.py @@ -333,7 +333,7 @@ def make_release_tree(self, base_dir, files): "cycler>=0.10", "fonttools>=4.22.0", "kiwisolver>=1.3.1", - "numpy>=1.21,<2", + "numpy>=1.21", "packaging>=20.0", "pillow>=8", "pyparsing>=2.3.1", From dea6de9002313a1a68d40fcad0d144d85f572ecc Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Wed, 3 Apr 2024 15:11:18 -0400 Subject: [PATCH 10/14] Backport PR #27955: Add a draw during show for macos backend --- lib/matplotlib/backends/backend_macosx.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/matplotlib/backends/backend_macosx.py b/lib/matplotlib/backends/backend_macosx.py index 726a2ada8425..66bc9bfc99d3 100644 --- a/lib/matplotlib/backends/backend_macosx.py +++ b/lib/matplotlib/backends/backend_macosx.py @@ -179,6 +179,8 @@ def start_main_loop(cls): _macosx.show() def show(self): + if self.canvas.figure.stale: + self.canvas.draw_idle() if not self._shown: self._show() self._shown = True From e5dd407ce2251d44009c552c670c63f81922927b Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Wed, 3 Apr 2024 16:53:17 -0500 Subject: [PATCH 11/14] Github stats for v3.8.4 --- doc/users/github_stats.rst | 157 ++++++------------ .../prev_whats_new/github_stats_3.8.3.rst | 139 ++++++++++++++++ 2 files changed, 187 insertions(+), 109 deletions(-) create mode 100644 doc/users/prev_whats_new/github_stats_3.8.3.rst diff --git a/doc/users/github_stats.rst b/doc/users/github_stats.rst index 22226b89fa82..8dab8484d6fd 100644 --- a/doc/users/github_stats.rst +++ b/doc/users/github_stats.rst @@ -1,142 +1,81 @@ .. _github-stats: -GitHub statistics for 3.8.3 (Feb 14, 2024) +GitHub statistics for 3.8.4 (Apr 03, 2024) ========================================== -GitHub statistics for 2023/11/17 (tag: v3.8.2) - 2024/02/14 +GitHub statistics for 2023/09/15 (tag: v3.8.0) - 2024/04/03 These lists are automatically generated, and may be incomplete or contain duplicates. -We closed 18 issues and merged 74 pull requests. -The full list can be seen `on GitHub `__ +We closed 3 issues and merged 27 pull requests. +The full list can be seen `on GitHub `__ -The following 25 authors contributed 133 commits. +The following 26 authors contributed 351 commits. -* Allan Haldane +* 0taj +* Alec Vercruysse +* Alexander Volkov * Antony Lee -* Christoph Hasse +* Anvi Verma +* Chiraag Balu +* David Gilbertson * David Stansby * dependabot[bot] * Elliott Sales de Andrade +* Eric Firing * Greg Lucas +* Gurudatta Shanbhag * hannah * James Salsman * Jody Klymak -* Joshua Stevenson -* judfs * Kyle Sunden +* lkkmpn +* Lucia Korpas * Matthew Morrison * Oscar Gustafsson * Ruth Comer * Samuel Diebolt -* saranti -* sdiebolt -* Shriya Kalakata -* Stefan -* Steffen Rehberg -* stevezhang1999 * Thomas A Caswell * Tim Hoffmann +* wemi3 GitHub issues and pull requests: -Pull Requests (74): +Pull Requests (27): -* :ghpull:`27790`: Backport PR #27785 on branch v3.8.x (FIX: be careful about communicating with subprocess) -* :ghpull:`27789`: Backport PR #27756 on branch v3.8.x (Add protections against infinite loop in bezier calculations) -* :ghpull:`27785`: FIX: be careful about communicating with subprocess -* :ghpull:`27756`: Add protections against infinite loop in bezier calculations -* :ghpull:`27779`: Manual backport of dependabot cibw upgrades -* :ghpull:`27778`: Backport PR #27773 on branch v3.8.x (MNT: pcolormesh robust underflow) -* :ghpull:`27773`: MNT: pcolormesh robust underflow -* :ghpull:`27777`: Backport PR #27776 on branch v3.8.x (Better document the relation between figure and manager) -* :ghpull:`27776`: Better document the relation between figure and manager -* :ghpull:`27759`: Backport PR #27755 on branch v3.8.x (Allow threads during macos event loop) -* :ghpull:`27755`: Allow threads during macos event loop -* :ghpull:`27742`: Backport PR #27708 on branch v3.8.x (DOC: update colors from colormaps example) -* :ghpull:`27718`: Backport PR #27716 on branch v3.8.x (fix default image format in gtk4 savefig dialog) -* :ghpull:`27716`: fix default image format in gtk4 savefig dialog -* :ghpull:`27697`: Backport PR #27044 on branch v3.8.x (Fix quiver key plot when angles='xy' and/or scale_units='xy') -* :ghpull:`27044`: Fix quiver key plot when angles='xy' and/or scale_units='xy' -* :ghpull:`27691`: Backport PR #27681 on branch v3.8.x (doc: fix Patch.contains_point docstring example) -* :ghpull:`27681`: doc: fix Patch.contains_point docstring example -* :ghpull:`27683`: Backport PR #27670 on branch v3.8.x (Implement macos AppDelegate) -* :ghpull:`27670`: Implement macos AppDelegate -* :ghpull:`27680`: Backport PR #27678 on branch v3.8.x (DOC: selecting individual colors from a colormap) -* :ghpull:`27664`: Backport PR #27581: CI: install German language packs on ubuntu test … -* :ghpull:`27661`: Backport of pr 27647 on v3.8.x -* :ghpull:`27662`: Backport PR #27657 on branch v3.8.x (Fix Numpy 2.0 related test failures) -* :ghpull:`27657`: Fix Numpy 2.0 related test failures -* :ghpull:`27647`: Fix error that occurs when minorticks are on multi-Axes Figure with more than one boxplot -* :ghpull:`27660`: Backport PR #27624 on branch v3.8.x (Prepare for Pytest v8) -* :ghpull:`27624`: Prepare for Pytest v8 -* :ghpull:`27636`: Backport PR #27634 on branch v3.8.x (circle: Make deploy stage into a normal step) -* :ghpull:`27622`: Backport PR #27620 on branch v3.8.x (DOC: simplify histogram animation example) -* :ghpull:`27612`: Backport PR #27606 on branch v3.8.x (Pin black version) -* :ghpull:`27606`: Pin black version -* :ghpull:`27598`: Backport PR #27594 on branch v3.8.x (Cleanup viewlims example.) -* :ghpull:`27597`: Backport PR #27595 on branch v3.8.x (Fix is_sorted_and_has_non_nan for byteswapped inputs.) -* :ghpull:`27595`: Fix is_sorted_and_has_non_nan for byteswapped inputs. -* :ghpull:`27586`: Backport PR #27578 on branch v3.8.x (Fix polar labels with negative theta limit) -* :ghpull:`27578`: Fix polar labels with negative theta limit -* :ghpull:`27581`: CI: install German language packs on ubuntu test runners -* :ghpull:`27544`: Backport PR #27527 on branch v3.8.x (FIX: Add macos timers to the main thread) -* :ghpull:`27527`: FIX: Add macos timers to the main thread -* :ghpull:`27537`: Backport PR #27535 on branch v3.8.x (Update ax.legend input types) -* :ghpull:`27535`: Update ax.legend input types -* :ghpull:`27536`: Backport PR #27534 on branch v3.8.x (Clarify AxLine Params) -* :ghpull:`27534`: Clarify AxLine Params -* :ghpull:`27530`: Backport PR #27528 on branch v3.8.x (FIX: Remove runloop execution while waiting for stdin) -* :ghpull:`27528`: FIX: Remove runloop execution while waiting for stdin -* :ghpull:`27510`: Backport PR #27346 on branch v3.8.x (DOC: Show and correct default alignment parameters in text.py) -* :ghpull:`27346`: DOC: Show and correct default alignment parameters in text.py -* :ghpull:`27506`: Backport PR #27504 on branch v3.8.x (DOC: correct return type for axline) -* :ghpull:`27504`: DOC: correct return type for axline -* :ghpull:`27501`: Backport PR #27496 on branch v3.8.x (Bump actions/setup-python from 4 to 5) -* :ghpull:`27496`: Bump actions/setup-python from 4 to 5 -* :ghpull:`27484`: Backport PR #27481 on branch v3.8.x (Fixing Pylab documentation in API interface overview) -* :ghpull:`27481`: Fixing Pylab documentation in API interface overview -* :ghpull:`27467`: Manual backport of #27395 on v3.8.x -* :ghpull:`27464`: Backport PR #27316 on branch v3.8.x (DOC: Synchronize LICENSE_STIX files) -* :ghpull:`27316`: DOC: Synchronize LICENSE_STIX files -* :ghpull:`27453`: Backport PR #27434 on branch v3.8.x (FIX: Expand stairs plot-type entry intro (reattempt)) -* :ghpull:`27446`: Backport PR #27397 on branch v3.8.x (SpanSelector widget: Improve doc for ``extents``) -* :ghpull:`27397`: SpanSelector widget: Improve doc for ``extents`` -* :ghpull:`27444`: Backport PR #27441 on branch v3.8.x (Fix some minor issues with hexbin bins argument) -* :ghpull:`27441`: Fix some minor issues with hexbin bins argument -* :ghpull:`27429`: Backport PR #27411 on branch v3.8.x (DOC: multilevel tick example) -* :ghpull:`27420`: Backport PR #27325 on branch v3.8.x (Fixing Sentence Case on Section Titles in users_explain) -* :ghpull:`27413`: Backport PR #27412 on branch v3.8.x (ci: Block PyQt6 6.6.0 on Ubuntu) -* :ghpull:`27412`: ci: Block PyQt6 6.6.0 on Ubuntu -* :ghpull:`27403`: Backport PR #27386 on branch v3.8.x (Doc: add a "please use dev version" to top of contribute docs) -* :ghpull:`27384`: Backport PR #27377 on branch v3.8.x (TST: Make test_movie_writer_invalid_path locale-agnostic) -* :ghpull:`27377`: TST: Make test_movie_writer_invalid_path locale-agnostic -* :ghpull:`27379`: Backport PR #27376 on branch v3.8.x ([MNT] fix type annotations of ``fignum_exists``) -* :ghpull:`27376`: [MNT] fix type annotations of ``fignum_exists`` -* :ghpull:`27369`: Backport PR #27365 on branch v3.8.x ([DOC]: Fix menu example) -* :ghpull:`27365`: [DOC]: Fix menu example -* :ghpull:`27354`: Backport PR #27348 on branch v3.8.x (updated api/animation documentation as per standards) +* :ghpull:`28015`: Backport PR #27955 on branch v3.8.x (Add a draw during show for macos backend) +* :ghpull:`27993`: Unpin numpy 2, build against prerelease numpy in CIBW +* :ghpull:`27955`: Add a draw during show for macos backend +* :ghpull:`28001`: Backport PR #28000 on branch v3.8.x (Fix color sequence data for Set2 and Set3) +* :ghpull:`28000`: Fix color sequence data for Set2 and Set3 +* :ghpull:`27990`: Backport PR #27988 on branch v3.8.x (gtk: Ensure pending draws are done before GTK draw) +* :ghpull:`27988`: gtk: Ensure pending draws are done before GTK draw +* :ghpull:`27986`: Backport PR #27985 on branch v3.8.x (TST: Remove superfluous chdir from tests) +* :ghpull:`27985`: TST: Remove superfluous chdir from tests +* :ghpull:`27976`: Backport PR #27975 on branch v3.8.x (DOC: Fix typo in ``ax.transData.inversed()``) +* :ghpull:`27934`: Backport PR #27933 on branch v3.8.x (Update "Created with" url in hand.svg) +* :ghpull:`27933`: Update "Created with" url in hand.svg +* :ghpull:`27926`: Backport PR #27875 on branch v3.8.x (macosx: Clean up single-shot timers correctly) +* :ghpull:`27925`: Backport PR #27921 on branch v3.8.x (Avoid modifying user input to Axes.bar) +* :ghpull:`27875`: macosx: Clean up single-shot timers correctly +* :ghpull:`27921`: Avoid modifying user input to Axes.bar +* :ghpull:`27903`: Merge 3.8.3-doc into 3.8.x +* :ghpull:`27889`: Backport PR #27888 on branch v3.8.x (DOC: fix stray release note entry) +* :ghpull:`27888`: DOC: fix stray release note entry +* :ghpull:`27849`: Backport PR #27754 on branch v3.8.x (fix quiver3d incorrect arrow colors) +* :ghpull:`27859`: Backport PR #27858 on branch v3.8.x (pin pytest) +* :ghpull:`27858`: pin pytest +* :ghpull:`27754`: fix quiver3d incorrect arrow colors +* :ghpull:`27847`: Backport PR #27846 on branch v3.8.x (Make example in legend_elements doc more generalisable) +* :ghpull:`27846`: Make example in legend_elements doc more generalisable +* :ghpull:`27802`: Backport PR #27794 on branch v3.8.x (Remove old reference to 72 DPI in figure_size_units.py) +* :ghpull:`27794`: Remove old reference to 72 DPI in figure_size_units.py -Issues (18): +Issues (3): -* :ghissue:`27437`: [Bug]: PGF backend crashes at program exit after creating a plot -* :ghissue:`27770`: [Bug]: pcolormesh issue with np.seterr(under='raise') -* :ghissue:`27720`: [Bug]: pyplot hangs at pause in sonoma 14.3 with backend MacOSX -* :ghissue:`26316`: [Bug]: quiverkey shows multiple arrows under geographical projection and angle='xy' -* :ghissue:`23178`: [Bug]: ``contains_point()`` does not appear to work? -* :ghissue:`27389`: [Bug]: Warning after update to macOS 14 "WARNING: Secure coding is not enabled for restorable state! Enable secure coding by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState: and returning YES." -* :ghissue:`27645`: [TST] Upcoming dependency test failures -* :ghissue:`26484`: [Bug]: Turning on minor gridlines in a multi-Axes Figure, created with subplots(), that contains >1 boxplot results in a ValueError -* :ghissue:`27596`: [Bug]: Markers with numeric name like CARETLEFT cannot be specified using a cycler -* :ghissue:`25995`: [Bug]: _path.is_sorted is wrong for the non-native byteorder case -* :ghissue:`25568`: [Bug]: unexpected thetalim behavior in polar plot -* :ghissue:`27507`: [Bug]: Argument types for ``handles`` and ``labels`` are too strict for method ``Axes.legend`` -* :ghissue:`27503`: [Bug]: Cannot Create lines.AxLine -* :ghissue:`27515`: [Bug]: Python interpreter becomes slow at reading inputs after plotting with matplotlib -* :ghissue:`27345`: [Doc]: text alignment defaults -* :ghissue:`27461`: [Doc]: API interface overview pylab incorrect import statement: from matplotlib.pyplot import * -* :ghissue:`27383`: [Bug]: Error in Hexbin plot in Matplotlib 3.0 onward -* :ghissue:`27358`: [Doc]: Garbled menu widget example output +* :ghissue:`27953`: [Bug]: Pyplot can no longer set axes properties +* :ghissue:`11759`: The color of the 3D arrow head does not match that of the arrow body +* :ghissue:`27826`: [Bug]: Unexpected behavior of scatter.legend_elements Previous GitHub statistics diff --git a/doc/users/prev_whats_new/github_stats_3.8.3.rst b/doc/users/prev_whats_new/github_stats_3.8.3.rst new file mode 100644 index 000000000000..c91e046fd6ae --- /dev/null +++ b/doc/users/prev_whats_new/github_stats_3.8.3.rst @@ -0,0 +1,139 @@ +.. _github-stats-3-8-3: + +GitHub statistics for 3.8.3 (Feb 14, 2024) +========================================== + +GitHub statistics for 2023/11/17 (tag: v3.8.2) - 2024/02/14 + +These lists are automatically generated, and may be incomplete or contain duplicates. + +We closed 18 issues and merged 74 pull requests. +The full list can be seen `on GitHub `__ + +The following 25 authors contributed 133 commits. + +* Allan Haldane +* Antony Lee +* Christoph Hasse +* David Stansby +* dependabot[bot] +* Elliott Sales de Andrade +* Greg Lucas +* hannah +* James Salsman +* Jody Klymak +* Joshua Stevenson +* judfs +* Kyle Sunden +* Matthew Morrison +* Oscar Gustafsson +* Ruth Comer +* Samuel Diebolt +* saranti +* sdiebolt +* Shriya Kalakata +* Stefan +* Steffen Rehberg +* stevezhang1999 +* Thomas A Caswell +* Tim Hoffmann + +GitHub issues and pull requests: + +Pull Requests (74): + +* :ghpull:`27790`: Backport PR #27785 on branch v3.8.x (FIX: be careful about communicating with subprocess) +* :ghpull:`27789`: Backport PR #27756 on branch v3.8.x (Add protections against infinite loop in bezier calculations) +* :ghpull:`27785`: FIX: be careful about communicating with subprocess +* :ghpull:`27756`: Add protections against infinite loop in bezier calculations +* :ghpull:`27779`: Manual backport of dependabot cibw upgrades +* :ghpull:`27778`: Backport PR #27773 on branch v3.8.x (MNT: pcolormesh robust underflow) +* :ghpull:`27773`: MNT: pcolormesh robust underflow +* :ghpull:`27777`: Backport PR #27776 on branch v3.8.x (Better document the relation between figure and manager) +* :ghpull:`27776`: Better document the relation between figure and manager +* :ghpull:`27759`: Backport PR #27755 on branch v3.8.x (Allow threads during macos event loop) +* :ghpull:`27755`: Allow threads during macos event loop +* :ghpull:`27742`: Backport PR #27708 on branch v3.8.x (DOC: update colors from colormaps example) +* :ghpull:`27718`: Backport PR #27716 on branch v3.8.x (fix default image format in gtk4 savefig dialog) +* :ghpull:`27716`: fix default image format in gtk4 savefig dialog +* :ghpull:`27697`: Backport PR #27044 on branch v3.8.x (Fix quiver key plot when angles='xy' and/or scale_units='xy') +* :ghpull:`27044`: Fix quiver key plot when angles='xy' and/or scale_units='xy' +* :ghpull:`27691`: Backport PR #27681 on branch v3.8.x (doc: fix Patch.contains_point docstring example) +* :ghpull:`27681`: doc: fix Patch.contains_point docstring example +* :ghpull:`27683`: Backport PR #27670 on branch v3.8.x (Implement macos AppDelegate) +* :ghpull:`27670`: Implement macos AppDelegate +* :ghpull:`27680`: Backport PR #27678 on branch v3.8.x (DOC: selecting individual colors from a colormap) +* :ghpull:`27664`: Backport PR #27581: CI: install German language packs on ubuntu test … +* :ghpull:`27661`: Backport of pr 27647 on v3.8.x +* :ghpull:`27662`: Backport PR #27657 on branch v3.8.x (Fix Numpy 2.0 related test failures) +* :ghpull:`27657`: Fix Numpy 2.0 related test failures +* :ghpull:`27647`: Fix error that occurs when minorticks are on multi-Axes Figure with more than one boxplot +* :ghpull:`27660`: Backport PR #27624 on branch v3.8.x (Prepare for Pytest v8) +* :ghpull:`27624`: Prepare for Pytest v8 +* :ghpull:`27636`: Backport PR #27634 on branch v3.8.x (circle: Make deploy stage into a normal step) +* :ghpull:`27622`: Backport PR #27620 on branch v3.8.x (DOC: simplify histogram animation example) +* :ghpull:`27612`: Backport PR #27606 on branch v3.8.x (Pin black version) +* :ghpull:`27606`: Pin black version +* :ghpull:`27598`: Backport PR #27594 on branch v3.8.x (Cleanup viewlims example.) +* :ghpull:`27597`: Backport PR #27595 on branch v3.8.x (Fix is_sorted_and_has_non_nan for byteswapped inputs.) +* :ghpull:`27595`: Fix is_sorted_and_has_non_nan for byteswapped inputs. +* :ghpull:`27586`: Backport PR #27578 on branch v3.8.x (Fix polar labels with negative theta limit) +* :ghpull:`27578`: Fix polar labels with negative theta limit +* :ghpull:`27581`: CI: install German language packs on ubuntu test runners +* :ghpull:`27544`: Backport PR #27527 on branch v3.8.x (FIX: Add macos timers to the main thread) +* :ghpull:`27527`: FIX: Add macos timers to the main thread +* :ghpull:`27537`: Backport PR #27535 on branch v3.8.x (Update ax.legend input types) +* :ghpull:`27535`: Update ax.legend input types +* :ghpull:`27536`: Backport PR #27534 on branch v3.8.x (Clarify AxLine Params) +* :ghpull:`27534`: Clarify AxLine Params +* :ghpull:`27530`: Backport PR #27528 on branch v3.8.x (FIX: Remove runloop execution while waiting for stdin) +* :ghpull:`27528`: FIX: Remove runloop execution while waiting for stdin +* :ghpull:`27510`: Backport PR #27346 on branch v3.8.x (DOC: Show and correct default alignment parameters in text.py) +* :ghpull:`27346`: DOC: Show and correct default alignment parameters in text.py +* :ghpull:`27506`: Backport PR #27504 on branch v3.8.x (DOC: correct return type for axline) +* :ghpull:`27504`: DOC: correct return type for axline +* :ghpull:`27501`: Backport PR #27496 on branch v3.8.x (Bump actions/setup-python from 4 to 5) +* :ghpull:`27496`: Bump actions/setup-python from 4 to 5 +* :ghpull:`27484`: Backport PR #27481 on branch v3.8.x (Fixing Pylab documentation in API interface overview) +* :ghpull:`27481`: Fixing Pylab documentation in API interface overview +* :ghpull:`27467`: Manual backport of #27395 on v3.8.x +* :ghpull:`27464`: Backport PR #27316 on branch v3.8.x (DOC: Synchronize LICENSE_STIX files) +* :ghpull:`27316`: DOC: Synchronize LICENSE_STIX files +* :ghpull:`27453`: Backport PR #27434 on branch v3.8.x (FIX: Expand stairs plot-type entry intro (reattempt)) +* :ghpull:`27446`: Backport PR #27397 on branch v3.8.x (SpanSelector widget: Improve doc for ``extents``) +* :ghpull:`27397`: SpanSelector widget: Improve doc for ``extents`` +* :ghpull:`27444`: Backport PR #27441 on branch v3.8.x (Fix some minor issues with hexbin bins argument) +* :ghpull:`27441`: Fix some minor issues with hexbin bins argument +* :ghpull:`27429`: Backport PR #27411 on branch v3.8.x (DOC: multilevel tick example) +* :ghpull:`27420`: Backport PR #27325 on branch v3.8.x (Fixing Sentence Case on Section Titles in users_explain) +* :ghpull:`27413`: Backport PR #27412 on branch v3.8.x (ci: Block PyQt6 6.6.0 on Ubuntu) +* :ghpull:`27412`: ci: Block PyQt6 6.6.0 on Ubuntu +* :ghpull:`27403`: Backport PR #27386 on branch v3.8.x (Doc: add a "please use dev version" to top of contribute docs) +* :ghpull:`27384`: Backport PR #27377 on branch v3.8.x (TST: Make test_movie_writer_invalid_path locale-agnostic) +* :ghpull:`27377`: TST: Make test_movie_writer_invalid_path locale-agnostic +* :ghpull:`27379`: Backport PR #27376 on branch v3.8.x ([MNT] fix type annotations of ``fignum_exists``) +* :ghpull:`27376`: [MNT] fix type annotations of ``fignum_exists`` +* :ghpull:`27369`: Backport PR #27365 on branch v3.8.x ([DOC]: Fix menu example) +* :ghpull:`27365`: [DOC]: Fix menu example +* :ghpull:`27354`: Backport PR #27348 on branch v3.8.x (updated api/animation documentation as per standards) + +Issues (18): + +* :ghissue:`27437`: [Bug]: PGF backend crashes at program exit after creating a plot +* :ghissue:`27770`: [Bug]: pcolormesh issue with np.seterr(under='raise') +* :ghissue:`27720`: [Bug]: pyplot hangs at pause in sonoma 14.3 with backend MacOSX +* :ghissue:`26316`: [Bug]: quiverkey shows multiple arrows under geographical projection and angle='xy' +* :ghissue:`23178`: [Bug]: ``contains_point()`` does not appear to work? +* :ghissue:`27389`: [Bug]: Warning after update to macOS 14 "WARNING: Secure coding is not enabled for restorable state! Enable secure coding by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState: and returning YES." +* :ghissue:`27645`: [TST] Upcoming dependency test failures +* :ghissue:`26484`: [Bug]: Turning on minor gridlines in a multi-Axes Figure, created with subplots(), that contains >1 boxplot results in a ValueError +* :ghissue:`27596`: [Bug]: Markers with numeric name like CARETLEFT cannot be specified using a cycler +* :ghissue:`25995`: [Bug]: _path.is_sorted is wrong for the non-native byteorder case +* :ghissue:`25568`: [Bug]: unexpected thetalim behavior in polar plot +* :ghissue:`27507`: [Bug]: Argument types for ``handles`` and ``labels`` are too strict for method ``Axes.legend`` +* :ghissue:`27503`: [Bug]: Cannot Create lines.AxLine +* :ghissue:`27515`: [Bug]: Python interpreter becomes slow at reading inputs after plotting with matplotlib +* :ghissue:`27345`: [Doc]: text alignment defaults +* :ghissue:`27461`: [Doc]: API interface overview pylab incorrect import statement: from matplotlib.pyplot import * +* :ghissue:`27383`: [Bug]: Error in Hexbin plot in Matplotlib 3.0 onward +* :ghissue:`27358`: [Doc]: Garbled menu widget example output From 149521e514ce97bff35ad5060663ef8a1d278b89 Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Wed, 3 Apr 2024 17:30:31 -0500 Subject: [PATCH 12/14] Release prep v3.8.4 --- doc/_static/switcher.json | 4 ++-- doc/users/release_notes.rst | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/_static/switcher.json b/doc/_static/switcher.json index e5c3abbe5bce..75301fbb142a 100644 --- a/doc/_static/switcher.json +++ b/doc/_static/switcher.json @@ -11,8 +11,8 @@ }, { "name": "3.7", - "version": "3.7.3", - "url": "https://matplotlib.org/3.7.3/" + "version": "3.7.5", + "url": "https://matplotlib.org/3.7.5/" }, { "name": "3.6", diff --git a/doc/users/release_notes.rst b/doc/users/release_notes.rst index 88296e60c08f..e81efe77bbe3 100644 --- a/doc/users/release_notes.rst +++ b/doc/users/release_notes.rst @@ -22,6 +22,7 @@ Version 3.8 ../api/prev_api_changes/api_changes_3.8.1.rst ../api/prev_api_changes/api_changes_3.8.0.rst github_stats.rst + prev_whats_new/github_stats_3.8.3.rst prev_whats_new/github_stats_3.8.2.rst prev_whats_new/github_stats_3.8.1.rst prev_whats_new/github_stats_3.8.0.rst From 8fb842c78f1b57b13a3d0fe63e83f3d31694f887 Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Wed, 3 Apr 2024 17:36:51 -0500 Subject: [PATCH 13/14] REL: v3.8.4 This is the fourth micro release of the 3.8 series. Highlights of the 3.8.4 release include: - Enable building against numpy 2.0; released wheels are built against numpy 2 - macosx: Clean up single-shot timers correctly - Add a draw during show for macos backend - Fix color sequence data for Set2 and Set3 - gtk: Ensure pending draws are done before GTK draw - Update "Created with" url in hand.svg - Avoid modifying user input to Axes.bar - fix quiver3d incorrect arrow colors From daa1ca992ab46919ab88f06eb9c99210c58cc279 Mon Sep 17 00:00:00 2001 From: Kyle Sunden Date: Wed, 3 Apr 2024 17:38:38 -0500 Subject: [PATCH 14/14] Bump from v3.8.4 tag