From dc6747f7af8215700a35dd164dd2b39c306c17fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Sat, 5 Jul 2025 10:56:42 +0300 Subject: [PATCH 1/6] Run subprocess-starting tests on separate runners I suspect that we are running out of process IDs, or the scheduler is not letting all subprocesses execute, leading to timeouts in tests that start subprocesses when other long-running tests are executing. This happens often with Python 3.14 tests for some reason. Add a new pytest marker for the tests that start a subprocess at top level, and run these tests in separate runners without pytest-xdist parallelization. --- .github/workflows/tests.yml | 89 ++++++++++++++++++- azure-pipelines.yml | 42 +++++++-- lib/matplotlib/testing/conftest.py | 1 + lib/matplotlib/tests/test_backend_inline.py | 1 + lib/matplotlib/tests/test_backend_nbagg.py | 1 + lib/matplotlib/tests/test_backend_webagg.py | 1 + .../tests/test_backends_interactive.py | 3 + lib/matplotlib/tests/test_basic.py | 3 + lib/matplotlib/tests/test_determinism.py | 2 + lib/matplotlib/tests/test_font_manager.py | 1 + lib/matplotlib/tests/test_matplotlib.py | 2 + lib/matplotlib/tests/test_preprocess_data.py | 1 + lib/matplotlib/tests/test_pyplot.py | 1 + lib/matplotlib/tests/test_rcparams.py | 3 + lib/matplotlib/tests/test_sphinxext.py | 1 + lib/matplotlib/tests/test_texmanager.py | 1 + 16 files changed, 141 insertions(+), 12 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 85ace93445b6..84abece58192 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,13 +40,15 @@ jobs: ) permissions: contents: read - name: "Python ${{ matrix.python-version }} on ${{ matrix.os }} ${{ matrix.name-suffix }}" + name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}, ${{ matrix.test_type}} ${{ matrix.name-suffix }}" runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: + # Each run appears twice, with test_type=parallel and test_type=serial + # Fix this once implemented - name-suffix: "(Minimum Versions)" os: ubuntu-22.04 python-version: '3.11' @@ -54,40 +56,107 @@ jobs: delete-font-cache: true # https://github.com/matplotlib/matplotlib/issues/29844 pygobject-ver: '<3.52.0' + test_type: parallel + - name-suffix: "(Minimum Versions)" + os: ubuntu-22.04 + python-version: '3.11' + extra-requirements: '-c requirements/testing/minver.txt' + delete-font-cache: true + # https://github.com/matplotlib/matplotlib/issues/29844 + pygobject-ver: '<3.52.0' + test_type: serial + + - os: ubuntu-22.04 + python-version: '3.11' + CFLAGS: "-fno-lto" # Ensure that disabling LTO works. + extra-requirements: '-r requirements/testing/extra.txt' + # https://github.com/matplotlib/matplotlib/issues/29844 + pygobject-ver: '<3.52.0' + test_type: parallel - os: ubuntu-22.04 python-version: '3.11' CFLAGS: "-fno-lto" # Ensure that disabling LTO works. extra-requirements: '-r requirements/testing/extra.txt' # https://github.com/matplotlib/matplotlib/issues/29844 pygobject-ver: '<3.52.0' + test_type: serial + - os: ubuntu-22.04-arm python-version: '3.12' # https://github.com/matplotlib/matplotlib/issues/29844 pygobject-ver: '<3.52.0' + test_type: parallel + - os: ubuntu-22.04-arm + python-version: '3.12' + # https://github.com/matplotlib/matplotlib/issues/29844 + pygobject-ver: '<3.52.0' + test_type: serial + + - name-suffix: "(Extra TeX packages)" + os: ubuntu-22.04 + python-version: '3.13' + extra-packages: 'texlive-fonts-extra texlive-lang-cyrillic' + # https://github.com/matplotlib/matplotlib/issues/29844 + pygobject-ver: '<3.52.0' + test_type: parallel - name-suffix: "(Extra TeX packages)" os: ubuntu-22.04 python-version: '3.13' extra-packages: 'texlive-fonts-extra texlive-lang-cyrillic' # https://github.com/matplotlib/matplotlib/issues/29844 pygobject-ver: '<3.52.0' + test_type: serial + - name-suffix: "Free-threaded" os: ubuntu-22.04 python-version: '3.13t' # https://github.com/matplotlib/matplotlib/issues/29844 pygobject-ver: '<3.52.0' + test_type: parallel + - name-suffix: "Free-threaded" + os: ubuntu-22.04 + python-version: '3.13t' + # https://github.com/matplotlib/matplotlib/issues/29844 + pygobject-ver: '<3.52.0' + test_type: serial + - os: ubuntu-24.04 python-version: '3.12' + test_type: parallel + - os: ubuntu-24.04 + python-version: '3.12' + test_type: serial + + - os: macos-13 # This runner is on Intel chips. + # merge numpy and pandas install in nighties test when this runner is dropped + python-version: '3.11' + test_type: parallel - os: macos-13 # This runner is on Intel chips. # merge numpy and pandas install in nighties test when this runner is dropped python-version: '3.11' + test_type: serial + + - os: macos-14 # This runner is on M1 (arm64) chips. + python-version: '3.12' + # https://github.com/matplotlib/matplotlib/issues/29732 + pygobject-ver: '<3.52.0' + test_type: parallel - os: macos-14 # This runner is on M1 (arm64) chips. python-version: '3.12' # https://github.com/matplotlib/matplotlib/issues/29732 pygobject-ver: '<3.52.0' + test_type: serial + + - os: macos-14 # This runner is on M1 (arm64) chips. + python-version: '3.13' + # https://github.com/matplotlib/matplotlib/issues/29732 + pygobject-ver: '<3.52.0' + test_type: parallel - os: macos-14 # This runner is on M1 (arm64) chips. python-version: '3.13' # https://github.com/matplotlib/matplotlib/issues/29732 pygobject-ver: '<3.52.0' + test_type: serial steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -337,9 +406,21 @@ jobs: if [[ "${{ matrix.python-version }}" == '3.13t' ]]; then export PYTHON_GIL=0 fi - pytest -rfEsXR -n auto \ - --maxfail=50 --timeout=300 --durations=25 \ - --cov-report=xml --cov=lib --log-level=DEBUG --color=yes + FLAGS=( + -rfEsXR + --maxfail=50 + --timeout=300 + --durations=25 + --cov-report=xml + --cov=lib + --log-level=DEBUG + --color=yes + ) + if [[ "${{ matrix.test_type }}" == 'serial' ]]; then + pytest "${FLAGS[@]}" -m subprocess -n 0 + else + pytest "${FLAGS[@]}" -m 'not subprocess' -n auto + fi - name: Cleanup non-failed image files if: failure() diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d68a9d36f0d3..0f52752292c2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -49,15 +49,30 @@ stages: - job: Pytest strategy: matrix: - Windows_py311: + Windows_py311_parallel: vmImage: 'windows-2022' # Keep one job pinned to the oldest image python.version: '3.11' - Windows_py312: + test.type: 'parallel' + Windows_py311_serial: + vmImage: 'windows-2022' # Keep one job pinned to the oldest image + python.version: '3.11' + test.type: 'serial' + Windows_py312_parallel: vmImage: 'windows-latest' python.version: '3.12' - Windows_py313: + test.type: 'parallel' + Windows_py312_serial: + vmImage: 'windows-latest' + python.version: '3.12' + test.type: 'serial' + Windows_py313_parallel: vmImage: 'windows-latest' python.version: '3.13' + test.type: 'parallel' + Windows_py313_serial: + vmImage: 'windows-latest' + python.version: '3.13' + test.type: 'serial' maxParallel: 4 pool: vmImage: '$(vmImage)' @@ -120,10 +135,20 @@ stages: echo "##vso[task.setvariable variable=VS_COVERAGE_TOOL]$TOOL" - PYTHONFAULTHANDLER=1 pytest -rfEsXR -n 2 \ - --maxfail=50 --timeout=300 --durations=25 \ - --junitxml=junit/test-results.xml --cov-report=xml --cov=lib - + FLAGS=( + -rfEsXR + --maxfail=50 + --timeout=300 + --durations=25 + --cov-report=xml + --cov=lib + --junitxml=junit/test-results.xml + ) + if [[ "$TEST_TYPE" == serial ]]; then + PYTHONFAULTHANDLER=1 pytest "${FLAGS[@]}" -m subprocess -n 0 + else + PYTHONFAULTHANDLER=1 pytest "${FLAGS[@]}" -m 'not subprocess' -n 2 + fi if [[ $VS_VER == 2022 ]]; then "$TOOL" shutdown $SESSION_ID echo "Coverage collection log" @@ -153,7 +178,8 @@ stages: - task: PublishTestResults@2 inputs: - testResultsFiles: '**/test-results.xml' + mergeTestResults: true + testResultsFiles: '**/test-results*.xml' testRunTitle: 'Python $(python.version)' condition: succeededOrFailed() diff --git a/lib/matplotlib/testing/conftest.py b/lib/matplotlib/testing/conftest.py index 2961e7f02f3f..4efc10766be7 100644 --- a/lib/matplotlib/testing/conftest.py +++ b/lib/matplotlib/testing/conftest.py @@ -15,6 +15,7 @@ def pytest_configure(config): ("markers", "backend: Set alternate Matplotlib backend temporarily."), ("markers", "baseline_images: Compare output against references."), ("markers", "pytz: Tests that require pytz to be installed."), + ("markers", "subprocess: Tests that start a subprocess."), ("filterwarnings", "error"), ("filterwarnings", "ignore:.*The py23 module has been deprecated:DeprecationWarning"), diff --git a/lib/matplotlib/tests/test_backend_inline.py b/lib/matplotlib/tests/test_backend_inline.py index 997e1e7186b1..2cc1022b7939 100644 --- a/lib/matplotlib/tests/test_backend_inline.py +++ b/lib/matplotlib/tests/test_backend_inline.py @@ -10,6 +10,7 @@ pytest.importorskip('nbconvert') pytest.importorskip('ipykernel') pytest.importorskip('matplotlib_inline') +pytestmark = pytest.mark.subprocess def test_ipynb(): diff --git a/lib/matplotlib/tests/test_backend_nbagg.py b/lib/matplotlib/tests/test_backend_nbagg.py index ccf74df20aab..5b082f159c36 100644 --- a/lib/matplotlib/tests/test_backend_nbagg.py +++ b/lib/matplotlib/tests/test_backend_nbagg.py @@ -9,6 +9,7 @@ nbformat = pytest.importorskip('nbformat') pytest.importorskip('nbconvert') pytest.importorskip('ipykernel') +pytestmark = pytest.mark.subprocess # From https://blog.thedataincubator.com/2016/06/testing-jupyter-notebooks/ diff --git a/lib/matplotlib/tests/test_backend_webagg.py b/lib/matplotlib/tests/test_backend_webagg.py index 1d6769494ef9..e09d85ce2e26 100644 --- a/lib/matplotlib/tests/test_backend_webagg.py +++ b/lib/matplotlib/tests/test_backend_webagg.py @@ -6,6 +6,7 @@ from matplotlib.testing import subprocess_run_for_testing +@pytest.mark.subprocess @pytest.mark.parametrize("backend", ["webagg", "nbagg"]) def test_webagg_fallback(backend): pytest.importorskip("tornado") diff --git a/lib/matplotlib/tests/test_backends_interactive.py b/lib/matplotlib/tests/test_backends_interactive.py index 9f8522a9df4a..ceb3ee501279 100644 --- a/lib/matplotlib/tests/test_backends_interactive.py +++ b/lib/matplotlib/tests/test_backends_interactive.py @@ -22,6 +22,9 @@ from matplotlib.testing import subprocess_run_helper as _run_helper, is_ci_environment +pytestmark = pytest.mark.subprocess + + class _WaitForStringPopen(subprocess.Popen): """ A Popen that passes flags that allow triggering KeyboardInterrupt. diff --git a/lib/matplotlib/tests/test_basic.py b/lib/matplotlib/tests/test_basic.py index f6aa1e458555..10e94ee3be9d 100644 --- a/lib/matplotlib/tests/test_basic.py +++ b/lib/matplotlib/tests/test_basic.py @@ -5,6 +5,8 @@ from matplotlib.testing import subprocess_run_for_testing +import pytest + def test_simple(): assert 1 + 1 == 2 @@ -28,6 +30,7 @@ def test_override_builtins(): assert overridden <= ok_to_override +@pytest.mark.subprocess def test_lazy_imports(): source = textwrap.dedent(""" import sys diff --git a/lib/matplotlib/tests/test_determinism.py b/lib/matplotlib/tests/test_determinism.py index 2ecc40dbd3c0..dd1669894d98 100644 --- a/lib/matplotlib/tests/test_determinism.py +++ b/lib/matplotlib/tests/test_determinism.py @@ -21,6 +21,8 @@ from matplotlib.text import TextPath from matplotlib.transforms import IdentityTransform +pytestmark = pytest.mark.subprocess + def _save_figure(objects='mhip', fmt="pdf", usetex=False): mpl.use(fmt) diff --git a/lib/matplotlib/tests/test_font_manager.py b/lib/matplotlib/tests/test_font_manager.py index 97ee8672b1d4..3e9b95f4fd5a 100644 --- a/lib/matplotlib/tests/test_font_manager.py +++ b/lib/matplotlib/tests/test_font_manager.py @@ -288,6 +288,7 @@ def test_fontcache_thread_safe(): subprocess_run_helper(_test_threading, timeout=10) +@pytest.mark.subprocess def test_lockfilefailure(tmp_path): # The logic here: # 1. get a temp directory from pytest diff --git a/lib/matplotlib/tests/test_matplotlib.py b/lib/matplotlib/tests/test_matplotlib.py index d0a3f8c617e1..3a28ecb985a7 100644 --- a/lib/matplotlib/tests/test_matplotlib.py +++ b/lib/matplotlib/tests/test_matplotlib.py @@ -19,6 +19,7 @@ def test_parse_to_version_info(version_str, version_tuple): assert matplotlib._parse_to_version_info(version_str) == version_tuple +@pytest.mark.subprocess @pytest.mark.skipif(sys.platform == "win32", reason="chmod() doesn't work as is on Windows") @pytest.mark.skipif(sys.platform != "win32" and os.geteuid() == 0, @@ -37,6 +38,7 @@ def test_tmpconfigdir_warning(tmp_path): os.chmod(tmp_path, mode) +@pytest.mark.subprocess def test_importable_with_no_home(tmp_path): subprocess_run_for_testing( [sys.executable, "-c", diff --git a/lib/matplotlib/tests/test_preprocess_data.py b/lib/matplotlib/tests/test_preprocess_data.py index c983d78786e1..3825a0aecd09 100644 --- a/lib/matplotlib/tests/test_preprocess_data.py +++ b/lib/matplotlib/tests/test_preprocess_data.py @@ -245,6 +245,7 @@ def funcy(ax, x, y, z, t=None): funcy.__doc__) +@pytest.mark.subprocess def test_data_parameter_replacement(): """ Test that the docstring contains the correct *data* parameter stub diff --git a/lib/matplotlib/tests/test_pyplot.py b/lib/matplotlib/tests/test_pyplot.py index 55f7c33cb52e..336847f4b7ef 100644 --- a/lib/matplotlib/tests/test_pyplot.py +++ b/lib/matplotlib/tests/test_pyplot.py @@ -12,6 +12,7 @@ from matplotlib import pyplot as plt +@pytest.mark.subprocess def test_pyplot_up_to_date(tmp_path): pytest.importorskip("black") diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index 2235f98b720f..ee9a6476703a 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -528,6 +528,7 @@ def test_rcparams_reset_after_fail(): assert mpl.rcParams['text.usetex'] is False +@pytest.mark.subprocess @pytest.mark.skipif(sys.platform != "linux", reason="Linux only") def test_backend_fallback_headless_invalid_backend(tmp_path): env = {**os.environ, @@ -545,6 +546,7 @@ def test_backend_fallback_headless_invalid_backend(tmp_path): env=env, check=True, stderr=subprocess.DEVNULL) +@pytest.mark.subprocess @pytest.mark.skipif(sys.platform != "linux", reason="Linux only") def test_backend_fallback_headless_auto_backend(tmp_path): # specify a headless mpl environment, but request a graphical (tk) backend @@ -567,6 +569,7 @@ def test_backend_fallback_headless_auto_backend(tmp_path): assert backend.strip().lower() == "agg" +@pytest.mark.subprocess @pytest.mark.skipif( sys.platform == "linux" and not _c_internal_utils.xdisplay_is_valid(), reason="headless") diff --git a/lib/matplotlib/tests/test_sphinxext.py b/lib/matplotlib/tests/test_sphinxext.py index ede3166a2e1b..5b6e2e6b6e70 100644 --- a/lib/matplotlib/tests/test_sphinxext.py +++ b/lib/matplotlib/tests/test_sphinxext.py @@ -16,6 +16,7 @@ tinypages = Path(__file__).parent / 'data/tinypages' +@pytest.mark.subprocess def build_sphinx_html(source_dir, doctree_dir, html_dir, extra_args=None): # Build the pages with warnings turned into errors extra_args = [] if extra_args is None else extra_args diff --git a/lib/matplotlib/tests/test_texmanager.py b/lib/matplotlib/tests/test_texmanager.py index 64dcbf46456d..d7adda36e615 100644 --- a/lib/matplotlib/tests/test_texmanager.py +++ b/lib/matplotlib/tests/test_texmanager.py @@ -63,6 +63,7 @@ def test_unicode_characters(): fig.canvas.draw() +@pytest.mark.subprocess @needs_usetex def test_openin_any_paranoid(): completed = subprocess_run_for_testing( From 07b0486505b9daaf19121f47702bf065527dff60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 9 Jul 2025 11:10:46 +0300 Subject: [PATCH 2/6] Try to work around buffering issues - set PYTHONUNBUFFERED=1 to make the subprocess Python unbuffered - set bufsize=0 making the parent process pipe unbuffered - because that can return short reads, check if the subprocess exited, and if not, yield the CPU - set stdin to DEVNULL and stderr to STDOUT to avoid blocking related to those --- lib/matplotlib/tests/test_backends_interactive.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/tests/test_backends_interactive.py b/lib/matplotlib/tests/test_backends_interactive.py index ceb3ee501279..4bfc45405773 100644 --- a/lib/matplotlib/tests/test_backends_interactive.py +++ b/lib/matplotlib/tests/test_backends_interactive.py @@ -36,8 +36,10 @@ def __init__(self, *args, **kwargs): super().__init__( *args, **kwargs, # Force Agg so that each test can switch to its desired backend. - env={**os.environ, "MPLBACKEND": "Agg", "SOURCE_DATE_EPOCH": "0"}, - stdout=subprocess.PIPE, universal_newlines=True) + env={**os.environ, "MPLBACKEND": "Agg", "SOURCE_DATE_EPOCH": "0", + "PYTHONUNBUFFERED": "1"}, + bufsize=0, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, universal_newlines=True) def wait_for(self, terminator): """Read until the terminator is reached.""" @@ -45,8 +47,12 @@ def wait_for(self, terminator): while True: c = self.stdout.read(1) if not c: - raise RuntimeError( - f'Subprocess died before emitting expected {terminator!r}') + if self.poll() is None: + os.sched_yield() + else: + raise RuntimeError( + f'Subprocess died before emitting expected {terminator!r}\n' + f'\nSubprocess output:\n{buf}') buf += c if buf.endswith(terminator): return From 5a21c14e1e4819e9b5afc5672ec095ba636e998b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 9 Jul 2025 11:29:57 +0300 Subject: [PATCH 3/6] Add verbosity --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 84abece58192..c7999edd7fab 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -417,7 +417,7 @@ jobs: --color=yes ) if [[ "${{ matrix.test_type }}" == 'serial' ]]; then - pytest "${FLAGS[@]}" -m subprocess -n 0 + pytest "${FLAGS[@]}" -m subprocess -n 0 -vv else pytest "${FLAGS[@]}" -m 'not subprocess' -n auto fi From b18413ee308c19b43e80ebb143a43ac894f216b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 9 Jul 2025 14:11:44 +0300 Subject: [PATCH 4/6] Speed up: lower maxfail, no reruns --- .github/workflows/tests.yml | 2 +- lib/matplotlib/tests/test_backends_interactive.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c7999edd7fab..6ccf8573d252 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -408,7 +408,7 @@ jobs: fi FLAGS=( -rfEsXR - --maxfail=50 + --maxfail=5 --timeout=300 --durations=25 --cov-report=xml diff --git a/lib/matplotlib/tests/test_backends_interactive.py b/lib/matplotlib/tests/test_backends_interactive.py index 4bfc45405773..1e0efd4c5966 100644 --- a/lib/matplotlib/tests/test_backends_interactive.py +++ b/lib/matplotlib/tests/test_backends_interactive.py @@ -246,7 +246,7 @@ def check_alt_backend(alt_backend): @pytest.mark.parametrize("env", _get_testable_interactive_backends()) @pytest.mark.parametrize("toolbar", ["toolbar2", "toolmanager"]) -@pytest.mark.flaky(reruns=3) +#@pytest.mark.flaky(reruns=3) def test_interactive_backend(env, toolbar): if env["MPLBACKEND"] == "macosx": if toolbar == "toolmanager": @@ -338,7 +338,7 @@ def _test_thread_impl(): @pytest.mark.parametrize("env", _thread_safe_backends) -@pytest.mark.flaky(reruns=3) +#@pytest.mark.flaky(reruns=3) def test_interactive_thread_safety(env): proc = _run_helper(_test_thread_impl, timeout=_test_timeout, extra_env=env) assert proc.stdout.count("CloseEvent") == 1 @@ -626,7 +626,7 @@ def _test_number_of_draws_script(): @pytest.mark.parametrize("env", _blit_backends) # subprocesses can struggle to get the display, so rerun a few times -@pytest.mark.flaky(reruns=4) +#@pytest.mark.flaky(reruns=4) def test_blitting_events(env): proc = _run_helper( _test_number_of_draws_script, timeout=_test_timeout, extra_env=env) From 70aeb118bfc44c9e8c55c6a814eba2145e372347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 9 Jul 2025 14:14:17 +0300 Subject: [PATCH 5/6] Remove most tests --- .github/workflows/tests.yml | 107 ------------------------------------ 1 file changed, 107 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6ccf8573d252..080e3eddbd0f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -47,117 +47,10 @@ jobs: fail-fast: false matrix: include: - # Each run appears twice, with test_type=parallel and test_type=serial - # Fix this once implemented - - name-suffix: "(Minimum Versions)" - os: ubuntu-22.04 - python-version: '3.11' - extra-requirements: '-c requirements/testing/minver.txt' - delete-font-cache: true - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: parallel - - name-suffix: "(Minimum Versions)" - os: ubuntu-22.04 - python-version: '3.11' - extra-requirements: '-c requirements/testing/minver.txt' - delete-font-cache: true - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: serial - - - os: ubuntu-22.04 - python-version: '3.11' - CFLAGS: "-fno-lto" # Ensure that disabling LTO works. - extra-requirements: '-r requirements/testing/extra.txt' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: parallel - - os: ubuntu-22.04 - python-version: '3.11' - CFLAGS: "-fno-lto" # Ensure that disabling LTO works. - extra-requirements: '-r requirements/testing/extra.txt' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: serial - - - os: ubuntu-22.04-arm - python-version: '3.12' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: parallel - - os: ubuntu-22.04-arm - python-version: '3.12' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: serial - - - name-suffix: "(Extra TeX packages)" - os: ubuntu-22.04 - python-version: '3.13' - extra-packages: 'texlive-fonts-extra texlive-lang-cyrillic' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: parallel - - name-suffix: "(Extra TeX packages)" - os: ubuntu-22.04 - python-version: '3.13' - extra-packages: 'texlive-fonts-extra texlive-lang-cyrillic' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: serial - - - name-suffix: "Free-threaded" - os: ubuntu-22.04 - python-version: '3.13t' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: parallel - - name-suffix: "Free-threaded" - os: ubuntu-22.04 - python-version: '3.13t' - # https://github.com/matplotlib/matplotlib/issues/29844 - pygobject-ver: '<3.52.0' - test_type: serial - - - os: ubuntu-24.04 - python-version: '3.12' - test_type: parallel - os: ubuntu-24.04 python-version: '3.12' test_type: serial - - os: macos-13 # This runner is on Intel chips. - # merge numpy and pandas install in nighties test when this runner is dropped - python-version: '3.11' - test_type: parallel - - os: macos-13 # This runner is on Intel chips. - # merge numpy and pandas install in nighties test when this runner is dropped - python-version: '3.11' - test_type: serial - - - os: macos-14 # This runner is on M1 (arm64) chips. - python-version: '3.12' - # https://github.com/matplotlib/matplotlib/issues/29732 - pygobject-ver: '<3.52.0' - test_type: parallel - - os: macos-14 # This runner is on M1 (arm64) chips. - python-version: '3.12' - # https://github.com/matplotlib/matplotlib/issues/29732 - pygobject-ver: '<3.52.0' - test_type: serial - - - os: macos-14 # This runner is on M1 (arm64) chips. - python-version: '3.13' - # https://github.com/matplotlib/matplotlib/issues/29732 - pygobject-ver: '<3.52.0' - test_type: parallel - - os: macos-14 # This runner is on M1 (arm64) chips. - python-version: '3.13' - # https://github.com/matplotlib/matplotlib/issues/29732 - pygobject-ver: '<3.52.0' - test_type: serial - steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: From c8f49ea743cdb49c40d023aac387239d13b07eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 9 Jul 2025 14:31:14 +0300 Subject: [PATCH 6/6] Disable capturing so we see the output sooner --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 080e3eddbd0f..f301021ec30c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -310,7 +310,7 @@ jobs: --color=yes ) if [[ "${{ matrix.test_type }}" == 'serial' ]]; then - pytest "${FLAGS[@]}" -m subprocess -n 0 -vv + pytest "${FLAGS[@]}" -m subprocess -n 0 -vv -s else pytest "${FLAGS[@]}" -m 'not subprocess' -n auto fi pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy