From 2f655b055dce830b9c288827f11754ff632e9544 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Wed, 21 Oct 2026 11:38:08 -0400 Subject: [PATCH 1/2] Raise minimum supported Python version to 3.11 Python 3.10 reached end of life on October 1, 2026. Qiskit raised its own minimum to 3.11 in Qiskit/qiskit#17135, and qiskit-addon-sqd followed in Qiskit/qiskit-addon-sqd#415. That second one is what reaches us: our development version tests build qiskit-addon-sqd from source, so once 415 lands its `requires-python = ">=3.11"` leaves the 3.10 leg of that workflow with nothing to install. Note that neither upstream change is released yet. The newest qiskit on PyPI is 2.6.0, which still declares >=3.10, so the minimum and latest version jobs would both keep working on 3.10 for now. This is about following the floor our dependencies have already chosen rather than about a job that is red today. Drop 3.10 from requires-python, the classifiers, the tox env list and the notebook environment names, and from the matrices of the minimum, latest and development version workflows. The docs build also pinned 3.10; it now pins 3.11. No dependency floor had to move. The minimum-version job pins every `>=` specifier to `==`, and all of the current floors resolve on 3.11: numpy 1.26.0, pytest 8.0, pytest-mpi 0.6, qiskit-addon-sqd 0.13.1, pyscf 2.9 and nbmake 1.5.0 all publish 3.11-compatible distributions. mpi4py 4.0.0 has no wheel matching that interpreter, so it builds from its sdist, exactly as it already does on 3.10 -- it declares Requires-Python >=3.6, so this is a wheel coverage gap rather than a Python support boundary. --- .github/workflows/docs.yml | 2 +- .github/workflows/test_development_versions.yml | 2 +- .github/workflows/test_latest_versions.yml | 2 +- .github/workflows/test_minimum_versions.yml | 2 +- INSTALL.md | 2 +- pyproject.toml | 3 +-- .../notes/bump-minimum-python-38a75964047ebb47.yaml | 6 ++++++ tox.ini | 8 ++++---- 8 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 releasenotes/notes/bump-minimum-python-38a75964047ebb47.yaml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 64792fb..c73efc6 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -26,7 +26,7 @@ jobs: submodules: recursive - uses: actions/setup-python@v7 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependencies # autodoc imports the package, so the extension has to compile here -- hence the # same MPI and BLAS packages the test workflow installs, rather than the lighter diff --git a/.github/workflows/test_development_versions.yml b/.github/workflows/test_development_versions.yml index 303cc62..2d3a958 100644 --- a/.github/workflows/test_development_versions.yml +++ b/.github/workflows/test_development_versions.yml @@ -22,7 +22,7 @@ jobs: max-parallel: 4 matrix: os: [ubuntu-latest] - python-version: ["3.10", "3.14"] + python-version: ["3.11", "3.14"] steps: - uses: actions/checkout@v7 with: diff --git a/.github/workflows/test_latest_versions.yml b/.github/workflows/test_latest_versions.yml index 1944108..21079e2 100644 --- a/.github/workflows/test_latest_versions.yml +++ b/.github/workflows/test_latest_versions.yml @@ -24,7 +24,7 @@ jobs: max-parallel: 4 matrix: os: [ubuntu-latest, macos-latest] - 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@v7 with: diff --git a/.github/workflows/test_minimum_versions.yml b/.github/workflows/test_minimum_versions.yml index 1e775fe..2076d6c 100644 --- a/.github/workflows/test_minimum_versions.yml +++ b/.github/workflows/test_minimum_versions.yml @@ -20,7 +20,7 @@ jobs: max-parallel: 4 matrix: os: [ubuntu-latest] - python-version: ["3.10"] + python-version: ["3.11"] steps: - uses: actions/checkout@v7 with: diff --git a/INSTALL.md b/INSTALL.md index e1ea188..1c03d3a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -8,7 +8,7 @@ reads, building against a host MPI, and how to verify what you got. ## Prerequisites -**Required:** Python 3.10+, MPI (OpenMPI/MPICH), BLAS (OpenBLAS/MKL), pybind11, mpi4py, numpy, compiler with OpenMP. +**Required:** Python 3.11+, MPI (OpenMPI/MPICH), BLAS (OpenBLAS/MKL), pybind11, mpi4py, numpy, compiler with OpenMP. **On macOS:** Apple clang ships without OpenMP, so add `llvm-openmp` to the conda environment. Homebrew's `libomp` is used as a fallback if the env has none. Pin the diff --git a/pyproject.toml b/pyproject.toml index 5a66f34..8946b29 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "sbd-eigensolver" version = "1.7.0" description = "Python bindings for Selected Basis Diagonalization (SBD) library" readme = "README.md" -requires-python = ">=3.10" +requires-python = ">=3.11" license = "Apache-2.0" license-files = ["LICENSE.txt"] keywords = ["quantum chemistry", "diagonalization", "tensor product basis", "MPI"] @@ -19,7 +19,6 @@ classifiers = [ "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Physics", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", diff --git a/releasenotes/notes/bump-minimum-python-38a75964047ebb47.yaml b/releasenotes/notes/bump-minimum-python-38a75964047ebb47.yaml new file mode 100644 index 0000000..2223ff4 --- /dev/null +++ b/releasenotes/notes/bump-minimum-python-38a75964047ebb47.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - | + Support for Python 3.10 has been dropped. Python 3.11 or later is now + required. Python 3.10 reached `end of life `__ + on October 1, 2026. diff --git a/tox.ini b/tox.ini index d149506..974e0f7 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] minversion = 4.4.3 -envlist = py{310,311,312,313,314}{,-notebook}, mpi, docs +envlist = py{311,312,313,314}{,-notebook}, mpi, docs isolated_build = True [testenv] @@ -78,12 +78,12 @@ commands = mpirun -n {env:SBD_TEST_NPROCS} pytest --only-mpi {posargs} # Spelled out with the hyphen outside the braces. Writing this as -# {,py310-,py311-,...}notebook does not work: tox expands numeric ranges in a section +# {,py311-,py312-,...}notebook does not work: tox expands numeric ranges in a section # name before splitting it on braces, so `py314-` parses as `py3` plus the range `14-`, -# which produces junk environment names and never defines py310-notebook and friends -- +# which produces junk environment names and never defines py311-notebook and friends -- # those then silently fall through to [testenv] and run the unit tests instead. Nesting # braces is not an alternative either; it crashes tox outright. -[testenv:{notebook,py310-notebook,py311-notebook,py312-notebook,py313-notebook,py314-notebook}] +[testenv:{notebook,py311-notebook,py312-notebook,py313-notebook,py314-notebook}] # nbmake runs each notebook with its own directory as the working directory, so the # relative paths the examples use to reach the vendored data resolve as they would for # someone running the notebook by hand. From e236f44aff7e0f255b1e1ab8e56bc125cda7dead Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Wed, 21 Oct 2026 13:37:31 -0400 Subject: [PATCH 2/2] Update tox.ini Update to a version that passes HOME, which is necessary with most recent GitHub CI runner. See https://github.com/Qiskit/qiskit-addon-sqd/pull/411. --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 974e0f7..344d95a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -minversion = 4.4.3 +minversion = 4.4.4 envlist = py{311,312,313,314}{,-notebook}, mpi, docs isolated_build = True