From 72c62b53b3768f8622bd4020861d84e32456cb51 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 9 May 2024 21:14:50 -0400 Subject: [PATCH] TST: Fix tests with older versions of ipython I only went back as far as 7.0.0, as due to #16263, we probably don't want to be supporting all the way back to IPython 1. --- .github/workflows/tests.yml | 2 +- lib/matplotlib/testing/__init__.py | 18 +++++++----------- lib/matplotlib/testing/__init__.pyi | 3 +-- lib/matplotlib/tests/test_backend_macosx.py | 2 +- lib/matplotlib/tests/test_backend_qt.py | 2 +- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d67dfb3a752c..9ecf76a7290b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -60,7 +60,7 @@ jobs: - os: ubuntu-20.04 python-version: 3.9 # One CI run tests ipython/matplotlib-inline before backend mapping moved to mpl - extra-requirements: '-r requirements/testing/extra.txt "ipython<8.24" "matplotlib-inline<0.1.7"' + extra-requirements: '-r requirements/testing/extra.txt "ipython==7.19" "matplotlib-inline<0.1.7"' CFLAGS: "-fno-lto" # Ensure that disabling LTO works. # https://github.com/matplotlib/matplotlib/pull/26052#issuecomment-1574595954 # https://www.riverbankcomputing.com/pipermail/pyqt/2023-November/045606.html diff --git a/lib/matplotlib/testing/__init__.py b/lib/matplotlib/testing/__init__.py index 779149dec2dc..c3af36230d4b 100644 --- a/lib/matplotlib/testing/__init__.py +++ b/lib/matplotlib/testing/__init__.py @@ -179,11 +179,7 @@ def _has_tex_package(package): return False -def ipython_in_subprocess( - requested_backend_or_gui_framework, - expected_backend_old_ipython, # IPython < 8.24 - expected_backend_new_ipython, # IPython >= 8.24 -): +def ipython_in_subprocess(requested_backend_or_gui_framework, all_expected_backends): import pytest IPython = pytest.importorskip("IPython") @@ -194,12 +190,12 @@ def ipython_in_subprocess( requested_backend_or_gui_framework == "osx"): pytest.skip("Bug using macosx backend in IPython 8.24.0 fixed in 8.24.1") - if IPython.version_info[:2] >= (8, 24): - expected_backend = expected_backend_new_ipython - else: - # This code can be removed when Python 3.12, the latest version supported by - # IPython < 8.24, reaches end-of-life in late 2028. - expected_backend = expected_backend_old_ipython + # This code can be removed when Python 3.12, the latest version supported + # by IPython < 8.24, reaches end-of-life in late 2028. + for min_version, backend in all_expected_backends.items(): + if IPython.version_info[:2] >= min_version: + expected_backend = backend + break code = ("import matplotlib as mpl, matplotlib.pyplot as plt;" "fig, ax=plt.subplots(); ax.plot([1, 3, 2]); mpl.get_backend()") diff --git a/lib/matplotlib/testing/__init__.pyi b/lib/matplotlib/testing/__init__.pyi index b0399476b6aa..1f52a8ccb8ee 100644 --- a/lib/matplotlib/testing/__init__.pyi +++ b/lib/matplotlib/testing/__init__.pyi @@ -49,6 +49,5 @@ def _check_for_pgf(texsystem: str) -> bool: ... def _has_tex_package(package: str) -> bool: ... def ipython_in_subprocess( requested_backend_or_gui_framework: str, - expected_backend_old_ipython: str, - expected_backend_new_ipython: str, + all_expected_backends: dict[tuple[int, int], str], ) -> None: ... diff --git a/lib/matplotlib/tests/test_backend_macosx.py b/lib/matplotlib/tests/test_backend_macosx.py index a4350fe3b6c6..3041bda9f423 100644 --- a/lib/matplotlib/tests/test_backend_macosx.py +++ b/lib/matplotlib/tests/test_backend_macosx.py @@ -48,4 +48,4 @@ def new_choose_save_file(title, directory, filename): def test_ipython(): from matplotlib.testing import ipython_in_subprocess - ipython_in_subprocess("osx", "MacOSX", "macosx") + ipython_in_subprocess("osx", {(8, 24): "macosx", (7, 0): "MacOSX"}) diff --git a/lib/matplotlib/tests/test_backend_qt.py b/lib/matplotlib/tests/test_backend_qt.py index 026a49b1441e..7c9e24d066fd 100644 --- a/lib/matplotlib/tests/test_backend_qt.py +++ b/lib/matplotlib/tests/test_backend_qt.py @@ -378,4 +378,4 @@ def custom_handler(signum, frame): def test_ipython(): from matplotlib.testing import ipython_in_subprocess - ipython_in_subprocess("qt", "QtAgg", "qtagg") + ipython_in_subprocess("qt", {(8, 24): "qtagg", (8, 15): "QtAgg", (7, 0): "Qt5Agg"})