diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9579416e11..633b21787c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,7 +23,7 @@ jobs: uses: actions/setup-python@v5 with: # Python version should be the minimum supported version - python-version: "3.9" + python-version: "3.10" - name: Install build tools run: | diff --git a/.github/workflows/pytest-remote-data.yml b/.github/workflows/pytest-remote-data.yml index 6b214f7652..87b4346209 100644 --- a/.github/workflows/pytest-remote-data.yml +++ b/.github/workflows/pytest-remote-data.yml @@ -56,10 +56,10 @@ jobs: strategy: fail-fast: false # don't cancel other matrix jobs when one fails matrix: - python-version: [3.9, "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13"] suffix: [''] # the alternative to "-min" include: - - python-version: 3.9 + - python-version: "3.10" suffix: -min runs-on: ubuntu-latest @@ -103,7 +103,7 @@ jobs: run: pytest tests/iotools --cov=./ --cov-report=xml --remote-data - name: Upload coverage to Codecov - if: matrix.python-version == 3.9 && matrix.suffix == '' + if: matrix.python-version == "3.10" && matrix.suffix == '' uses: codecov/codecov-action@v4 with: fail_ci_if_error: true diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 0dde7993d3..b4715adf93 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -12,12 +12,12 @@ jobs: fail-fast: false # don't cancel other matrix jobs when one fails matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: [3.9, "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13"] environment-type: [conda, bare] suffix: [''] # placeholder as an alternative to "-min" include: - os: ubuntu-latest - python-version: 3.9 + python-version: "3.10" environment-type: conda suffix: -min exclude: @@ -83,7 +83,7 @@ jobs: pytest tests --cov=./ --cov-report=xml --ignore=tests/iotools - name: Upload coverage to Codecov - if: matrix.python-version == 3.9 && matrix.suffix == '' && matrix.os == 'ubuntu-latest' && matrix.environment-type == 'conda' + if: matrix.python-version == "3.10" && matrix.suffix == '' && matrix.os == 'ubuntu-latest' && matrix.environment-type == 'conda' uses: codecov/codecov-action@v4 with: fail_ci_if_error: true diff --git a/benchmarks/asv.conf.json b/benchmarks/asv.conf.json index 62a21bf505..3b2cee200e 100644 --- a/benchmarks/asv.conf.json +++ b/benchmarks/asv.conf.json @@ -113,19 +113,19 @@ "include": [ // minimum supported versions { - "python": "3.9", + "python": "3.10", "build": "", - "numpy": "1.19.5", - "pandas": "1.3.0", - "scipy": "1.6.0", + "numpy": "1.21.5", + "pandas": "1.4.1", // first anaconda version to support py 3.10 + "scipy": "1.7.2", // Note: these don't have a minimum in setup.py - "h5py": "3.1.0", - "ephem": "4.0.0.1", // first version to support py 3.9 - "numba": "0.53.0", // first version to support py 3.9 + "h5py": "3.6.0", // first version to support py 3.10 + "ephem": "4.1.1", // first version to support py 3.10 + "numba": "0.55.0", // first version to support py 3.10 }, // latest versions available { - "python": "3.9", + "python": "3.10", "build": "", "numpy": "", "pandas": "", diff --git a/ci/requirements-py3.9-min.yml b/ci/requirements-py3.10-min.yml similarity index 71% rename from ci/requirements-py3.9-min.yml rename to ci/requirements-py3.10-min.yml index d17df337fd..a6fa18dffb 100644 --- a/ci/requirements-py3.9-min.yml +++ b/ci/requirements-py3.10-min.yml @@ -8,14 +8,14 @@ dependencies: - pytest-cov - pytest-mock - pytest-timeout - - python=3.9 + - python=3.10 - pytz - requests - pip: - - h5py==3.0.0 - - numpy==1.19.3 - - pandas==1.3.0 # min version of pvlib - - scipy==1.6.0 + - h5py==3.6.0 + - numpy==1.21.2 + - pandas==1.3.3 # min version of pvlib + - scipy==1.7.2 - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock diff --git a/ci/requirements-py3.10.yml b/ci/requirements-py3.10.yml index fcb89d2e7f..444b7b58fe 100644 --- a/ci/requirements-py3.10.yml +++ b/ci/requirements-py3.10.yml @@ -8,8 +8,8 @@ dependencies: - ephem - h5py - numba - - numpy >= 1.17.3 - - pandas >= 1.3.0 + - numpy >= 1.21.2 + - pandas >= 1.3.3 - pip - pytest - pytest-cov @@ -21,7 +21,7 @@ dependencies: - python=3.10 - pytz - requests - - scipy >= 1.6.0 + - scipy >= 1.7.2 - statsmodels - pip: - nrel-pysam>=2.0 diff --git a/ci/requirements-py3.11.yml b/ci/requirements-py3.11.yml index f6556ecf94..c14676ab2f 100644 --- a/ci/requirements-py3.11.yml +++ b/ci/requirements-py3.11.yml @@ -8,8 +8,8 @@ dependencies: - ephem - h5py - numba - - numpy >= 1.17.3 - - pandas >= 1.3.0 + - numpy >= 1.21.2 + - pandas >= 1.3.3 - pip - pytest - pytest-cov @@ -21,7 +21,7 @@ dependencies: - python=3.11 - pytz - requests - - scipy >= 1.6.0 + - scipy >= 1.7.2 - statsmodels - pip: - nrel-pysam>=2.0 diff --git a/ci/requirements-py3.12.yml b/ci/requirements-py3.12.yml index 8293bffac0..1254dcb132 100644 --- a/ci/requirements-py3.12.yml +++ b/ci/requirements-py3.12.yml @@ -8,8 +8,8 @@ dependencies: - ephem - h5py - numba - - numpy >= 1.17.3 - - pandas >= 1.3.0 + - numpy >= 1.21.2 + - pandas >= 1.3.3 - pip - pytest - pytest-cov @@ -21,7 +21,7 @@ dependencies: - python=3.12 - pytz - requests - - scipy >= 1.6.0 + - scipy >= 1.7.2 - statsmodels - pip: - nrel-pysam>=2.0 diff --git a/ci/requirements-py3.13.yml b/ci/requirements-py3.13.yml index 21db6398cb..6647d72196 100644 --- a/ci/requirements-py3.13.yml +++ b/ci/requirements-py3.13.yml @@ -8,8 +8,8 @@ dependencies: - ephem - h5py - numba - - numpy >= 1.17.3 - - pandas >= 1.3.0 + - numpy >= 1.21.2 + - pandas >= 1.3.3 - pip - pytest - pytest-cov @@ -21,7 +21,7 @@ dependencies: - python=3.13 - pytz - requests - - scipy >= 1.6.0 + - scipy >= 1.7.2 - statsmodels - pip: - nrel-pysam>=2.0 diff --git a/ci/requirements-py3.9.yml b/ci/requirements-py3.9.yml deleted file mode 100644 index b5aa976b4b..0000000000 --- a/ci/requirements-py3.9.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: test_env -channels: - - defaults - - conda-forge -dependencies: - - coveralls - - cython - - ephem - - h5py - - numba - - numpy >= 1.17.3 - - pandas >= 1.3.0 - - pip - - pytest - - pytest-cov - - pytest-mock - - requests-mock - - pytest-timeout - - pytest-rerunfailures - - conda-forge::pytest-remotedata # version in default channel is old - - python=3.9 - - pytz - - requests - - scipy >= 1.6.0 - - statsmodels - - pip: - - nrel-pysam>=2.0 - - solarfactors \ No newline at end of file diff --git a/docs/sphinx/source/whatsnew/v0.13.1.rst b/docs/sphinx/source/whatsnew/v0.13.1.rst index 2b2eb23e42..c6ff294684 100644 --- a/docs/sphinx/source/whatsnew/v0.13.1.rst +++ b/docs/sphinx/source/whatsnew/v0.13.1.rst @@ -52,6 +52,10 @@ Benchmarking Requirements ~~~~~~~~~~~~ +* Drop support for Python 3.9 (reaches End of Life in Oct 2025). (:pull:`2547`) +* Advance minimum numpy to 1.21.2. (:pull:`2547`) +* Advance minimum scipy to 1.7.2. (:pull:`2547`) +* Advance minimum pandas to 1.3.3. (:pull:`2547`) Maintenance diff --git a/pyproject.toml b/pyproject.toml index f5f3d3c363..00ff4460aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,13 +9,13 @@ description = "A set of functions and classes for simulating the performance of authors = [ { name = "pvlib python Developers", email = "pvlib-admin@googlegroups.com" }, ] -requires-python = ">=3.9" +requires-python = ">=3.10" dependencies = [ - 'numpy >= 1.19.3', - 'pandas >= 1.3.0', + 'numpy >= 1.21.2', + 'pandas >= 1.3.3', 'pytz', 'requests', - 'scipy >= 1.6.0', + 'scipy >= 1.7.2', 'h5py', ] license = "BSD-3-Clause" @@ -108,8 +108,4 @@ testpaths = "tests" # https://docs.python.org/3/library/warnings.html#the-warnings-filter filterwarnings = [ "ignore:Using or importing the ABCs:DeprecationWarning:.*patsy:", - # deprecation warnings from numpy 1.20 - "ignore:`np.long` is a deprecated alias:DeprecationWarning:.*numba:", - "ignore:`np.int` is a deprecated alias:DeprecationWarning:.*(numba|scipy):", - "ignore:`np.bool` is a deprecated alias:DeprecationWarning:.*numba:", ]