From 508a4c1d66b8b54ff31f383d1574e53e83dc5c5f Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 10:59:25 +0100 Subject: [PATCH 01/28] Update gh-ci-cron.yaml --- .github/workflows/gh-ci-cron.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index d1f64ced2a4..bd82e2d717d 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -190,7 +190,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 @@ -233,10 +233,8 @@ jobs: matrix: # Stick to macos-13 because some of our # optional deps don't support arm64 (i.e. macos-14) - # - # add "3.13" once conda-forge packages are available (see #4805) os: [ubuntu-latest, macos-13] - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 @@ -252,10 +250,8 @@ jobs: create-args: >- python=${{ matrix.python-version }} pip - # using jaime's shim to avoid pulling down the cudatoolkit condarc: | channels: - - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - bioconda From 82a9735cdb17fba4eb0a95ffda3b76a0e168f5c8 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 11:01:17 +0100 Subject: [PATCH 02/28] Update gh-ci.yaml --- .github/workflows/gh-ci.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index 549624278f4..d155719a1ff 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -28,29 +28,29 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, ] - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.11", "3.12", "3.13"] full-deps: [true, ] codecov: [true, ] include: - - name: python_313 + - name: python_314 os: ubuntu-latest - python-version: "3.13" + python-version: "3.14" full-deps: false codecov: true - - name: macOS_14_arm64_py312 + - name: macOS_14_arm64_py313 os: macOS-14 - python-version: "3.12" + python-version: "3.13" full-deps: false codecov: true - name: numpy_min os: ubuntu-latest - python-version: "3.10" + python-version: "3.11" full-deps: false codecov: true numpy: numpy=1.23.2 - name: asv_check os: ubuntu-latest - python-version: "3.10" + python-version: "3.11" full-deps: true codecov: false extra-pip-deps: asv @@ -151,12 +151,11 @@ jobs: with: environment-name: mda create-args: >- - python=3.10 + python=3.11 pip # using jaime's shim to avoid pulling down the cudatoolkit condarc: | channels: - - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - bioconda From 9ce0772be6a21c6ba6b959908c00ec5d07a3bc32 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 11:02:12 +0100 Subject: [PATCH 03/28] Update linters.yaml --- .github/workflows/linters.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml index f8b24dcd091..2946bfcaea7 100644 --- a/.github/workflows/linters.yaml +++ b/.github/workflows/linters.yaml @@ -31,7 +31,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: "3.10" + python-version: "3.11" - uses: psf/black@stable with: @@ -55,7 +55,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: "3.10" + python-version: "3.11" - name: install run: | @@ -80,12 +80,10 @@ jobs: with: environment-name: mda create-args: >- - python=3.10 + python=3.11 pip - # using jaime's shim to avoid pulling down the cudatoolkit condarc: | channels: - - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - bioconda From 9e8cde982913ff655c3833e0a75ee5ef9f9e9072 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 11:04:02 +0100 Subject: [PATCH 04/28] Update gh-ci-cron.yaml --- .github/workflows/gh-ci-cron.yaml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index bd82e2d717d..a6a5544cdac 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -5,9 +5,9 @@ on: - cron: "0 3 * * 2,5" workflow_dispatch: # Uncomment when you need to test on a PR - # pull_request: - # branches: - # - develop + pull_request: + branches: + - develop concurrency: @@ -107,7 +107,6 @@ jobs: pip condarc: | channels: - - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - bioconda @@ -141,7 +140,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-20.04, macos-13] + os: [ubuntu-22.04, macos-13] steps: - uses: actions/checkout@v4 @@ -156,11 +155,10 @@ jobs: with: environment-name: mda create-args: >- - python=3.10 + python=3.11 pip condarc: | channels: - - jaimergp/label/unsupported-cudatoolkit-shim - conda-forge - bioconda @@ -190,7 +188,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 From d138fd60f56917eecc7fc5797e678100a741f945 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 11:05:44 +0100 Subject: [PATCH 05/28] Update deploy.yaml --- .github/workflows/deploy.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index ff2fa627e81..41b0e76d17d 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -4,6 +4,7 @@ on: pull_request: branches: - "package-*" + - "develop" push: branches: - "package-*" @@ -41,7 +42,7 @@ jobs: - [macos-13, macosx_*, x86_64] - [windows-2022, win_amd64, AMD64] - [macos-14, macosx_*, arm64] - python: ["cp310", "cp311", "cp312", "cp313"] + python: ["cp311", "cp312", "cp313", "cp314"] defaults: run: working-directory: ./package @@ -246,15 +247,15 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13", "3.14"] type: ["FULL", "MIN"] exclude: # Multiple deps don't like windows - os: windows-latest type: "FULL" # Chemfiles won't install over py3.13 - - python-version: "3.13" - type: "FULL" + #- python-version: "3.13" + # type: "FULL" env: MPLBACKEND: agg From cf1a39413a7b365f4444bf532b0156564860ff01 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 11:23:04 +0100 Subject: [PATCH 06/28] Update deploy.yaml --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 41b0e76d17d..4fbe33ebe60 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -52,7 +52,7 @@ jobs: fetch-depth: 0 - name: Build wheels - uses: pypa/cibuildwheel@v2.23.0 + uses: pypa/cibuildwheel@v3.2.0 with: package-dir: package env: From 67066b5282891ba3d865172ac2fa0f7d08493707 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 12:53:41 +0100 Subject: [PATCH 07/28] Update gh-ci.yaml --- .github/workflows/gh-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index d155719a1ff..fd37d730002 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -47,7 +47,7 @@ jobs: python-version: "3.11" full-deps: false codecov: true - numpy: numpy=1.23.2 + numpy: numpy=1.26.0 - name: asv_check os: ubuntu-latest python-version: "3.11" From b1ff70dc37a94761025a137870eefe0009e6d584 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 12:54:20 +0100 Subject: [PATCH 08/28] Update linters.yaml --- .github/workflows/linters.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml index 2946bfcaea7..118ced31f3b 100644 --- a/.github/workflows/linters.yaml +++ b/.github/workflows/linters.yaml @@ -92,7 +92,7 @@ jobs: with: micromamba: true full-deps: true - numpy: numpy=1.23.2 + numpy: numpy=1.26.0 rdkit: rdkit=2023.09.3 - name: install From 77cbae86edeca81c5e6b635dbace956a4a106180 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Thu, 9 Oct 2025 12:57:53 +0100 Subject: [PATCH 09/28] Update gh-ci-cron.yaml --- .github/workflows/gh-ci-cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index a6a5544cdac..966b63d435c 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -300,7 +300,7 @@ jobs: if [ "${{ matrix.wheels }}" == "false" ]; then INSTALL_FLAGS="-vvv --no-binary" fi - pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests pytest-xdist pytest-timeout + pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests pytest-xdist pytest-timeout "numpy<2.3" - name: run_tests shell: bash From 486b06c9fe2cb34167d630b05b2ec9dfb284dd13 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 12:31:20 +0100 Subject: [PATCH 10/28] Update .github/workflows/gh-ci-cron.yaml --- .github/workflows/gh-ci-cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 966b63d435c..f61af057615 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -300,7 +300,7 @@ jobs: if [ "${{ matrix.wheels }}" == "false" ]; then INSTALL_FLAGS="-vvv --no-binary" fi - pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests pytest-xdist pytest-timeout "numpy<2.3" + pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" - name: run_tests shell: bash From 7875b586704943ae1e99cd7c84e2ea50154627ff Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 12:44:34 +0100 Subject: [PATCH 11/28] update changelog, setup, and pipelines --- azure-pipelines.yml | 26 +++++++++++++------------- package/CHANGELOG | 2 ++ package/pyproject.toml | 8 ++++---- testsuite/pyproject.toml | 6 +++--- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e3a65315c2b..ab50b930f5f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -21,39 +21,39 @@ jobs: MPLBACKEND: agg strategy: matrix: - Win-Python310-64bit-full: - PYTHON_VERSION: '3.10' + Win-Python311-64bit-full: + PYTHON_VERSION: '3.11' PYTHON_ARCH: 'x64' BUILD_TYPE: 'normal' imageName: 'windows-2019' - Win-Python312-64bit-full: - PYTHON_VERSION: '3.12' + Win-Python313-64bit-full: + PYTHON_VERSION: '3.13' PYTHON_ARCH: 'x64' BUILD_TYPE: 'normal' imageName: 'windows-2019' - Win-Python312-64bit-full-wheel: - PYTHON_VERSION: '3.12' + Win-Python313-64bit-full-wheel: + PYTHON_VERSION: '3.13' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' NUMPY_MIN: '1.26.0' imageName: 'windows-2019' - Win-Python310-64bit-full-wheel: - PYTHON_VERSION: '3.10' + Win-Python311-64bit-full-wheel: + PYTHON_VERSION: '3.11' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' NUMPY_MIN: '1.23.2' imageName: 'windows-2019' - Linux-Python312-64bit-full-wheel: - PYTHON_VERSION: '3.12' + Linux-Python313-64bit-full-wheel: + PYTHON_VERSION: '3.13' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' NUMPY_MIN: '2.1.0' imageName: 'ubuntu-latest' - Linux-Python310-64bit-full-wheel: - PYTHON_VERSION: '3.10' + Linux-Python311-64bit-full-wheel: + PYTHON_VERSION: '3.11' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' - NUMPY_MIN: '1.23.2' + NUMPY_MIN: '1.26.0' imageName: 'ubuntu-latest' pool: vmImage: $(imageName) diff --git a/package/CHANGELOG b/package/CHANGELOG index 01af33d6de7..e148f78323e 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -42,6 +42,7 @@ Fixes directly passing them. (Issue #3520, PR #5006) Enhancements + * Support for Python 3.14 was added (PR #5121). * Added support for reading and processing streamed data in `coordinates.base` with new `StreamFrameIteratorSliced` and `StreamReaderBase` (Issue #4827, PR #4923) * New coordinate reader: Added `IMDReader` for reading real-time streamed @@ -80,6 +81,7 @@ Enhancements Changes + * Support for Python 3.10 was removed, in line with SPEC0 (PR #5121). * Refactored the RDKit converter code to move the inferring code in a separate `RDKitInferring` module. The bond order and charges inferrer has been move to an `MDAnalysisInferrer` dataclass in there. (PR #4305) diff --git a/package/pyproject.toml b/package/pyproject.toml index bb9d9d48929..4d2f42dbe4f 100644 --- a/package/pyproject.toml +++ b/package/pyproject.toml @@ -27,9 +27,9 @@ authors = [ maintainers = [ {name = 'MDAnalysis Core Developers', email = 'mdanalysis@numfocus.org'} ] -requires-python = ">=3.10" +requires-python = ">=3.11" dependencies = [ - 'numpy>=1.23.2', + 'numpy>=1.26.0', 'GridDataFormats>=0.4.0', 'mmtf-python>=1.0.0', 'joblib>=0.12', @@ -55,10 +55,10 @@ classifiers = [ 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Programming Language :: C', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Bio-Informatics', @@ -126,7 +126,7 @@ MDAnalysis = [ [tool.black] line-length = 79 -target-version = ['py310', 'py311', 'py312', 'py313'] +target-version = ['py311', 'py312', 'py313', 'py314'] extend-exclude = ''' ( __pycache__ diff --git a/testsuite/pyproject.toml b/testsuite/pyproject.toml index 5e5cf5fe30f..d2f61bce180 100644 --- a/testsuite/pyproject.toml +++ b/testsuite/pyproject.toml @@ -24,10 +24,10 @@ classifiers = [ "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: C", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Bio-Informatics", @@ -35,7 +35,7 @@ classifiers = [ "Topic :: Software Development :: Libraries :: Python Modules", ] readme = {file = "README", content-type = "text/x-rst"} -requires-python = ">=3.10" +requires-python = ">=3.11" dynamic = ["version", "dependencies"] [project.urls] @@ -156,7 +156,7 @@ filterwarnings = [ [tool.black] line-length = 79 -target-version = ['py310', 'py311', 'py312', 'py313'] +target-version = ['py311', 'py312', 'py313', 'py314'] extend-exclude = ''' ( testsuite/MDAnalysisTests/datafiles\.py From 3961b669205337f6c393c83b20ff6d226299cdd8 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 12:47:00 +0100 Subject: [PATCH 12/28] try something --- .github/workflows/gh-ci-cron.yaml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index f61af057615..01818b22f88 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -292,15 +292,20 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: install_deps + shell: bash + run: | + pip install pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" + - name: install_mdanalysis shell: bash run: | # If wheels is False we build directly from source so we use the --no-binary flag # to avoid pulling down wheels for MDAnalysis (which are already precompiled) if [ "${{ matrix.wheels }}" == "false" ]; then - INSTALL_FLAGS="-vvv --no-binary" + INSTALL_FLAGS="--no-binary" fi - pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" + pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests - name: run_tests shell: bash From cc5f950e559375f49c58d0c023fcb2bf519bb967 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 12:58:20 +0100 Subject: [PATCH 13/28] try an earlier pin --- .github/workflows/gh-ci-cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 01818b22f88..91e35fdc1a9 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -295,7 +295,7 @@ jobs: - name: install_deps shell: bash run: | - pip install pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" + pip install pytest-xdist pytest-timeout "numpy<2.2" "cython<3.1" - name: install_mdanalysis shell: bash From 6f94d17a758f1525e152849042accc0b7b483a86 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:05:22 +0100 Subject: [PATCH 14/28] update rtd build --- maintainer/conda/environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maintainer/conda/environment.yml b/maintainer/conda/environment.yml index 7b69149302c..e20ad6de080 100644 --- a/maintainer/conda/environment.yml +++ b/maintainer/conda/environment.yml @@ -17,9 +17,9 @@ dependencies: - mmtf-python - mock - networkx - - numpy>=1.23.2 + - numpy>=1.26.0 - pytest - - python==3.10 + - python==3.11 - pytng>=0.2.3 - scikit-learn - scipy From 784216c166d3b5c647f24b509a90e689e530ebe7 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:08:18 +0100 Subject: [PATCH 15/28] turn off build isolation when building non-wheels --- .github/workflows/gh-ci-cron.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 91e35fdc1a9..5b2d68fe30e 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -295,7 +295,7 @@ jobs: - name: install_deps shell: bash run: | - pip install pytest-xdist pytest-timeout "numpy<2.2" "cython<3.1" + pip install pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" - name: install_mdanalysis shell: bash @@ -303,7 +303,7 @@ jobs: # If wheels is False we build directly from source so we use the --no-binary flag # to avoid pulling down wheels for MDAnalysis (which are already precompiled) if [ "${{ matrix.wheels }}" == "false" ]; then - INSTALL_FLAGS="--no-binary" + INSTALL_FLAGS="--no-binary --no-build-isolation" fi pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests From 6a8588c9e54f2d995ab4ac8f6fa3a7f199143bc2 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:13:30 +0100 Subject: [PATCH 16/28] fix linters --- package/pyproject.toml | 2 +- testsuite/pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package/pyproject.toml b/package/pyproject.toml index 4d2f42dbe4f..a4cac10486f 100644 --- a/package/pyproject.toml +++ b/package/pyproject.toml @@ -126,7 +126,7 @@ MDAnalysis = [ [tool.black] line-length = 79 -target-version = ['py311', 'py312', 'py313', 'py314'] +target-version = ['py311', 'py312', 'py313'] extend-exclude = ''' ( __pycache__ diff --git a/testsuite/pyproject.toml b/testsuite/pyproject.toml index d2f61bce180..bc0b236535a 100644 --- a/testsuite/pyproject.toml +++ b/testsuite/pyproject.toml @@ -156,7 +156,7 @@ filterwarnings = [ [tool.black] line-length = 79 -target-version = ['py311', 'py312', 'py313', 'py314'] +target-version = ['py311', 'py312', 'py313'] extend-exclude = ''' ( testsuite/MDAnalysisTests/datafiles\.py From 0924b35408f3808ce3f89265930f89bf5a3b7dba Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:14:38 +0100 Subject: [PATCH 17/28] reverse flag order --- .github/workflows/gh-ci-cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 5b2d68fe30e..e36bf974812 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -303,7 +303,7 @@ jobs: # If wheels is False we build directly from source so we use the --no-binary flag # to avoid pulling down wheels for MDAnalysis (which are already precompiled) if [ "${{ matrix.wheels }}" == "false" ]; then - INSTALL_FLAGS="--no-binary --no-build-isolation" + INSTALL_FLAGS="--no-build-isolation --no-binary" fi pip install ${INSTALL_FLAGS} mdanalysis mdanalysistests From 1a95096203a17bed9df47cc19106da4be4e1161d Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:38:11 +0100 Subject: [PATCH 18/28] add build deps --- .github/workflows/gh-ci-cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index e36bf974812..73eb91399d2 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -295,7 +295,7 @@ jobs: - name: install_deps shell: bash run: | - pip install pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" + pip install pytest-xdist pytest-timeout "numpy<2.3" "cython<3.1" wheel "setuptools>=40.9.0" packaging - name: install_mdanalysis shell: bash From 7597da29d62fd5eaf7d122fd51f9b4c55c836073 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 13:51:42 +0100 Subject: [PATCH 19/28] try ditching cython 3.1 lower pin --- package/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/pyproject.toml b/package/pyproject.toml index a4cac10486f..3dc32092fcb 100644 --- a/package/pyproject.toml +++ b/package/pyproject.toml @@ -1,7 +1,7 @@ [build-system] # Minimum requirements for the build system to execute requires = [ - "Cython>=0.28,<3.1", + "Cython>=0.28", "packaging", # numpy requirement for wheel builds for distribution on PyPI - building # against 2.x yields wheels that are also compatible with numpy 1.x at From f85e875c658028c176c9824eba403c4c0c12c5da Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 14:51:12 +0100 Subject: [PATCH 20/28] Update deploy.yaml --- .github/workflows/deploy.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 4fbe33ebe60..b1e985c1938 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -4,7 +4,6 @@ on: pull_request: branches: - "package-*" - - "develop" push: branches: - "package-*" From 733eb2e6f153ad5fbc05e00ce3a621cf71224c9c Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 14:56:08 +0100 Subject: [PATCH 21/28] Update gh-ci.yaml --- .github/workflows/gh-ci.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index fd37d730002..6b09520446a 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -31,23 +31,33 @@ jobs: python-version: ["3.11", "3.12", "3.13"] full-deps: [true, ] codecov: [true, ] + cython: ["cython<3.1", ] include: - - name: python_314 + - name: python_314_nocov os: ubuntu-latest python-version: "3.14" full-deps: false - codecov: true + codecov: false + cython: "cython" + - name: python_311_nocov + os: ubuntu-latest + python-version: "3.11" + full-deps: false + codecov: false + cython: "cython" - name: macOS_14_arm64_py313 os: macOS-14 python-version: "3.13" full-deps: false codecov: true + cython: "cython<3.1" - name: numpy_min os: ubuntu-latest python-version: "3.11" full-deps: false codecov: true numpy: numpy=1.26.0 + cython: "cython<3.1" - name: asv_check os: ubuntu-latest python-version: "3.11" @@ -88,7 +98,7 @@ jobs: # disable GSD because it occasionally introduce hanging in testing #4209 gsd: '' # pin cython - cython: 'cython<3.1' + cython: ${{ matrix.cython }} # in most cases will just default to empty, i.e. pick up max version from other deps numpy: ${{ matrix.numpy }} extra-pip-deps: ${{ matrix.extra-pip-deps }} From 0d53715f745fa57d6f1751e7e304967ba2283db6 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 15:01:39 +0100 Subject: [PATCH 22/28] Issue #5123 --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ab50b930f5f..b2e42487872 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -110,7 +110,8 @@ jobs: mmtf-python networkx parmed - pytng>=0.2.3 + # Disable PyTNG checking, see issue #5123 + # pytng>=0.2.3 rdkit>=2024.03.4 tidynamics>=1.0.0 imdclient>=0.2.2 From f98792aa48f15cb1c041768f4fa58f5d5524ba31 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 15:14:39 +0100 Subject: [PATCH 23/28] Update azure-pipelines.yml --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b2e42487872..c1643a2ce48 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -100,6 +100,8 @@ jobs: python -m pip install numpy==$(NUMPY_MIN) displayName: 'pin to older NumPy (wheel test)' condition: and(succeeded(), ne(variables['NUMPY_MIN'], '')) + # Disabled PyTNG checking, see issue #5123 + # TODO: add pytng>=0.2.3 back once resolved - script: >- python -m pip install -vvv biopython @@ -110,8 +112,6 @@ jobs: mmtf-python networkx parmed - # Disable PyTNG checking, see issue #5123 - # pytng>=0.2.3 rdkit>=2024.03.4 tidynamics>=1.0.0 imdclient>=0.2.2 From 7ce6ecc979b156c149a71f7aa053aaa4615ac805 Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 15:23:22 +0100 Subject: [PATCH 24/28] Update azure-pipelines.yml --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c1643a2ce48..1775bc3592b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -35,13 +35,13 @@ jobs: PYTHON_VERSION: '3.13' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' - NUMPY_MIN: '1.26.0' + NUMPY_MIN: '2.1.0' imageName: 'windows-2019' Win-Python311-64bit-full-wheel: PYTHON_VERSION: '3.11' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' - NUMPY_MIN: '1.23.2' + NUMPY_MIN: '1.26.0' imageName: 'windows-2019' Linux-Python313-64bit-full-wheel: PYTHON_VERSION: '3.13' From 29b2cc6a9386ab39b17ce89d9f219f3a9ff70203 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 15:36:14 +0100 Subject: [PATCH 25/28] fix flaky warnings check --- testsuite/MDAnalysisTests/analysis/test_helix_analysis.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/testsuite/MDAnalysisTests/analysis/test_helix_analysis.py b/testsuite/MDAnalysisTests/analysis/test_helix_analysis.py index 3a291050d46..e8e50717a24 100644 --- a/testsuite/MDAnalysisTests/analysis/test_helix_analysis.py +++ b/testsuite/MDAnalysisTests/analysis/test_helix_analysis.py @@ -508,16 +508,13 @@ def test_multiple_atoms_per_residues(self): def test_residue_gaps_split(self, psf_ca): sel = "resid 6:50 or resid 100:130 or resid 132:148" - with pytest.warns(UserWarning) as rec: + wmsg = "has gaps in the residues. Splitting into 3 helices" + with pytest.warns(UserWarning, match=wmsg): ha = hel.HELANAL(psf_ca, select=sel).run() assert len(ha.atomgroups) == 3 assert len(ha.atomgroups[0]) == 45 assert len(ha.atomgroups[1]) == 31 assert len(ha.atomgroups[2]) == 17 - assert len(rec) == 1 - warnmsg = rec[0].message.args[0] - assert "has gaps in the residues" in warnmsg - assert "Splitting into 3 helices" in warnmsg def test_residue_gaps_no_split(self, psf_ca): sel = "resid 6:50 or resid 100:130 or resid 132:148" From aa4e95be2c934a55bbbcf93d25edf48b8cdde3bb Mon Sep 17 00:00:00 2001 From: Irfan Alibay Date: Sun, 12 Oct 2025 19:28:51 +0100 Subject: [PATCH 26/28] Update deploy.yaml --- .github/workflows/deploy.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index b1e985c1938..0d751bececf 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -252,9 +252,8 @@ jobs: # Multiple deps don't like windows - os: windows-latest type: "FULL" - # Chemfiles won't install over py3.13 - #- python-version: "3.13" - # type: "FULL" + - python-version: "3.14" + type: "FULL" env: MPLBACKEND: agg From 3b5dcde60a311cf2cd010b921515c113acdd6f9a Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 19:31:41 +0100 Subject: [PATCH 27/28] Add comment --- .github/workflows/gh-ci-cron.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 73eb91399d2..395b571e632 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -5,9 +5,9 @@ on: - cron: "0 3 * * 2,5" workflow_dispatch: # Uncomment when you need to test on a PR - pull_request: - branches: - - develop + # pull_request: + # branches: + # - develop concurrency: @@ -302,6 +302,7 @@ jobs: run: | # If wheels is False we build directly from source so we use the --no-binary flag # to avoid pulling down wheels for MDAnalysis (which are already precompiled) + # Also need to add `--no-build-isolation` until next release, see Issue #5125 if [ "${{ matrix.wheels }}" == "false" ]; then INSTALL_FLAGS="--no-build-isolation --no-binary" fi From 80e9c05f2e1c772d6262a97d0a86c9ce8731acf1 Mon Sep 17 00:00:00 2001 From: IAlibay Date: Sun, 12 Oct 2025 19:38:10 +0100 Subject: [PATCH 28/28] Cython >=3.1 tests --- .github/workflows/gh-ci.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index 6b09520446a..f63bf1e04be 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -33,18 +33,22 @@ jobs: codecov: [true, ] cython: ["cython<3.1", ] include: + # Including 3.14 and 3.11 without coverage + # and cython >=3.1 to deal temporarily with + # keeping on testing Cython whilst issue #5057 + # is not fixed - name: python_314_nocov os: ubuntu-latest python-version: "3.14" full-deps: false codecov: false - cython: "cython" + cython: "cython>=3.1" - name: python_311_nocov os: ubuntu-latest python-version: "3.11" full-deps: false codecov: false - cython: "cython" + cython: "cython>=3.1" - name: macOS_14_arm64_py313 os: macOS-14 python-version: "3.13"