diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 91e0e2ae8..211839631 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -114,7 +114,6 @@ jobs: matrix: os: ['ubuntu-latest', 'windows-latest', 'macos-14', 'macos-latest'] python-version: - - "3.9" - "3.10" - "3.11" - "3.12" @@ -127,24 +126,22 @@ jobs: include: # Basic dependencies only - os: ubuntu-latest - python-version: "3.9" + python-version: "3.10" architecture: 'x64' dependencies: 'none' # Absolute minimum dependencies - os: ubuntu-latest - python-version: "3.9" + python-version: "3.10" architecture: 'x64' dependencies: 'min' # Absolute minimum dependencies - os: ubuntu-latest - python-version: "3.10" + python-version: "3.11" architecture: 'x64' dependencies: 'min' exclude: # Use ubuntu-latest to cover the whole range of Python. For Windows # and macOS, checking oldest and newest should be sufficient. - - os: windows-latest - python-version: "3.10" - os: windows-latest python-version: "3.11" - os: windows-latest @@ -154,15 +151,13 @@ jobs: - os: windows-latest python-version: "3.13t" - os: macos-14 - python-version: "3.9" + python-version: "3.11" - os: macos-14 - python-version: "3.10" + python-version: "3.12" - os: macos-14 - python-version: "3.14" + python-version: "3.13" - os: macos-14 - python-version: "3.14t" - - os: macos-latest - python-version: "3.10" + python-version: "3.13t" - os: macos-latest python-version: "3.11" - os: macos-latest @@ -194,10 +189,10 @@ jobs: - os: macos-14 dependencies: pre # Drop pre tests for SPEC-0-unsupported Python versions - - python-version: '3.9' - dependencies: pre - python-version: '3.10' dependencies: pre + - python-version: '3.11' + dependencies: pre env: DEPENDS: ${{ matrix.dependencies }} diff --git a/pyproject.toml b/pyproject.toml index af76b76a8..22506f4f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ readme = "README.rst" license = "MIT" requires-python = ">=3.9" dependencies = [ - "numpy >=1.23", + "numpy >=1.24", "packaging >=20", "importlib_resources >=5.12; python_version < '3.12'", "typing_extensions >=4.6; python_version < '3.13'", @@ -27,6 +27,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering", ] # Version from setuptools_scm @@ -55,9 +56,9 @@ all = ["nibabel[dicomfs,indexed_gzip,minc2,spm,zstd]"] indexed_gzip = ["indexed_gzip >=1.6"] dicom = ["pydicom >=2.3"] dicomfs = ["nibabel[dicom]", "pillow >=8.4"] -minc2 = ["h5py >=3.5"] -spm = ["scipy >=1.8"] -viewers = ["matplotlib >=3.5"] +minc2 = ["h5py >=3.8"] +spm = ["scipy >=1.10"] +viewers = ["matplotlib >=3.7"] zstd = ["backports.zstd >=1.1; python_version<'3.14'"] # For doc and test, make easy to use outside of tox # tox should use these with extras instead of duplicating diff --git a/uv.lock b/uv.lock index 4ace6b6ba..d5c0e6db7 100644 --- a/uv.lock +++ b/uv.lock @@ -1841,14 +1841,14 @@ requires-dist = [ { name = "backports-zstd", marker = "python_full_version < '3.14' and extra == 'all'", specifier = ">=1.1" }, { name = "backports-zstd", marker = "python_full_version < '3.14' and extra == 'zstd'", specifier = ">=1.1" }, { name = "coverage", extras = ["toml"], marker = "extra == 'test'", specifier = ">=7.2" }, - { name = "h5py", marker = "extra == 'all'", specifier = ">=3.5" }, - { name = "h5py", marker = "extra == 'minc2'", specifier = ">=3.5" }, + { name = "h5py", marker = "extra == 'all'", specifier = ">=3.8" }, + { name = "h5py", marker = "extra == 'minc2'", specifier = ">=3.8" }, { name = "importlib-resources", marker = "python_full_version < '3.12'", specifier = ">=5.12" }, { name = "indexed-gzip", marker = "extra == 'all'", specifier = ">=1.6" }, { name = "indexed-gzip", marker = "extra == 'indexed-gzip'", specifier = ">=1.6" }, { name = "matplotlib", marker = "extra == 'doc'", specifier = ">=3.5" }, - { name = "matplotlib", marker = "extra == 'viewers'", specifier = ">=3.5" }, - { name = "numpy", specifier = ">=1.23" }, + { name = "matplotlib", marker = "extra == 'viewers'", specifier = ">=3.7" }, + { name = "numpy", specifier = ">=1.24" }, { name = "numpydoc", marker = "extra == 'doc'", specifier = ">=1.9" }, { name = "packaging", specifier = ">=20" }, { name = "pillow", marker = "extra == 'all'", specifier = ">=8.4" }, @@ -1861,8 +1861,8 @@ requires-dist = [ { name = "pytest-doctestplus", marker = "extra == 'test'", specifier = ">=1.4" }, { name = "pytest-httpserver", marker = "extra == 'test'", specifier = ">=1.0.7" }, { name = "pytest-xdist", marker = "extra == 'test'", specifier = ">=3.5" }, - { name = "scipy", marker = "extra == 'all'", specifier = ">=1.8" }, - { name = "scipy", marker = "extra == 'spm'", specifier = ">=1.8" }, + { name = "scipy", marker = "extra == 'all'", specifier = ">=1.10" }, + { name = "scipy", marker = "extra == 'spm'", specifier = ">=1.10" }, { name = "sphinx", marker = "extra == 'doc'", specifier = ">=7.4" }, { name = "texext", marker = "extra == 'doc'", specifier = ">=0.6.8" }, { name = "tomli", marker = "python_full_version < '3.11' and extra == 'doc'", specifier = ">=2.3" },