From a7b1de40b779b6e6770af5276a30342eb7db1d8c Mon Sep 17 00:00:00 2001 From: rwedge Date: Wed, 28 Oct 2026 16:58:53 -0500 Subject: [PATCH 1/3] add upgradepip make command and use in workflows --- .github/workflows/dependency_checker.yml | 1 + .github/workflows/docs.yml | 2 +- .github/workflows/end_to_end.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/minimum.yml | 2 +- .github/workflows/numerical.yml | 2 +- .github/workflows/prepare_release.yml | 2 +- .github/workflows/readme.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/tutorials.yml | 2 +- .github/workflows/unit.yml | 2 +- Makefile | 5 +++++ 12 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dependency_checker.yml b/.github/workflows/dependency_checker.yml index 64353c25..cb6e7368 100644 --- a/.github/workflows/dependency_checker.yml +++ b/.github/workflows/dependency_checker.yml @@ -14,6 +14,7 @@ jobs: python-version-file: 'pyproject.toml' - name: Install dependencies run: | + make upgradepip python -m pip install .[dev] make check-deps OUTPUT_FILEPATH=latest_requirements.txt make fix-lint diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b98d851c..5ff24bd5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,7 +17,7 @@ jobs: - name: Build run: | sudo apt-get install pandoc - python -m pip install --upgrade pip + make upgradepip pip install -e .[dev] make docs - name: Deploy diff --git a/.github/workflows/end_to_end.yml b/.github/workflows/end_to_end.yml index 8334e132..4fbe1eed 100644 --- a/.github/workflows/end_to_end.yml +++ b/.github/workflows/end_to_end.yml @@ -25,7 +25,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke .[test] - name: Run end to end tests run: invoke end-to-end diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d329a306..f9d7d135 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,7 +20,7 @@ jobs: python-version-file: 'pyproject.toml' - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke .[dev] - name: Run lint checks run: invoke lint diff --git a/.github/workflows/minimum.yml b/.github/workflows/minimum.yml index befc5c1e..94d9f81f 100644 --- a/.github/workflows/minimum.yml +++ b/.github/workflows/minimum.yml @@ -29,7 +29,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke .[test] - name: Test with minimum versions run: invoke minimum diff --git a/.github/workflows/numerical.yml b/.github/workflows/numerical.yml index 79f31658..91d1709c 100644 --- a/.github/workflows/numerical.yml +++ b/.github/workflows/numerical.yml @@ -29,7 +29,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke .[test] - name: Run numerical tests run: invoke numerical diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml index b313bc14..fe5947d2 100644 --- a/.github/workflows/prepare_release.yml +++ b/.github/workflows/prepare_release.yml @@ -26,7 +26,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install requests==2.31.0 python -m pip install bandit==1.9.2 python -m pip install .[test] diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml index feab89c6..76228718 100644 --- a/.github/workflows/readme.yml +++ b/.github/workflows/readme.yml @@ -24,7 +24,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke tomli rundoc . - name: Run the README.md run: invoke readme diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6dc0e282..fc73280e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install .[dev] - name: Create wheel diff --git a/.github/workflows/tutorials.yml b/.github/workflows/tutorials.yml index 569475ab..34cbfdc9 100644 --- a/.github/workflows/tutorials.yml +++ b/.github/workflows/tutorials.yml @@ -23,7 +23,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install package and dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke tomli jupyter .[tutorials] - name: invoke tutorials run: invoke tutorials diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 6fcc96fc..b8bef5a4 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -29,7 +29,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip + make upgradepip python -m pip install invoke .[test] - name: Run unit tests run: invoke unit diff --git a/Makefile b/Makefile index 6589da79..c37d96af 100644 --- a/Makefile +++ b/Makefile @@ -246,6 +246,11 @@ check-deps: # Dependency targets $(eval allow_list='numpy=|pandas=|scipy=|plotly=') pip freeze | grep -v "Copulas.git" | grep -E $(allow_list) | sort > $(OUTPUT_FILEPATH) +.PHONY: upgradepip +upgradepip: + python -m pip install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70" + python -m pip install --upgrade pip + .PHONY: check-release check-release: check-clean check-candidate check-main check-history ## Check if the release can be made @echo "A new release can be made" From 8b2dfcc3bb4da2df0cb34398a67cb357d8c1e4da Mon Sep 17 00:00:00 2001 From: rwedge Date: Wed, 28 Oct 2026 17:05:19 -0500 Subject: [PATCH 2/3] remove Python 3.9 support --- .github/workflows/end_to_end.yml | 4 ++-- .github/workflows/minimum.yml | 4 ++-- .github/workflows/numerical.yml | 4 ++-- .github/workflows/readme.yml | 2 +- .github/workflows/tutorials.yml | 2 +- .github/workflows/unit.yml | 4 ++-- INSTALL.md | 2 +- pyproject.toml | 9 +++------ 8 files changed, 14 insertions(+), 17 deletions(-) diff --git a/.github/workflows/end_to_end.yml b/.github/workflows/end_to_end.yml index 4fbe1eed..865c15b1 100644 --- a/.github/workflows/end_to_end.yml +++ b/.github/workflows/end_to_end.yml @@ -10,11 +10,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest - python-version: '3.9' + python-version: '3.10' - os: macos-latest python-version: '3.14' steps: diff --git a/.github/workflows/minimum.yml b/.github/workflows/minimum.yml index 94d9f81f..d4aacab9 100644 --- a/.github/workflows/minimum.yml +++ b/.github/workflows/minimum.yml @@ -14,11 +14,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest - python-version: '3.9' + python-version: '3.10' - os: macos-latest python-version: '3.14' steps: diff --git a/.github/workflows/numerical.yml b/.github/workflows/numerical.yml index 91d1709c..53c6a857 100644 --- a/.github/workflows/numerical.yml +++ b/.github/workflows/numerical.yml @@ -14,11 +14,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest - python-version: '3.9' + python-version: '3.10' - os: macos-latest python-version: '3.14' steps: diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml index 76228718..1aba7846 100644 --- a/.github/workflows/readme.yml +++ b/.github/workflows/readme.yml @@ -14,7 +14,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/tutorials.yml b/.github/workflows/tutorials.yml index 34cbfdc9..adf3dd94 100644 --- a/.github/workflows/tutorials.yml +++ b/.github/workflows/tutorials.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index b8bef5a4..604caaf3 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -14,11 +14,11 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest - python-version: '3.9' + python-version: '3.10' - os: macos-latest python-version: '3.14' steps: diff --git a/INSTALL.md b/INSTALL.md index 6b4cf8b7..6b59d1f8 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,7 +3,7 @@ ## Requirements **Copulas** has been developed and tested on -[Python 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14](https://www.python.org/downloads/) +[Python 3.10, 3.11, 3.12, 3.13 and 3.14](https://www.python.org/downloads/) Also, although it is not strictly required, the usage of a [virtualenv]( https://virtualenv.pypa.io/en/latest/) is highly recommended in order to avoid diff --git a/pyproject.toml b/pyproject.toml index 4535bc5f..dab465c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,6 @@ classifiers = [ 'Intended Audience :: Developers', 'Natural Language :: English', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', @@ -19,11 +18,10 @@ keywords = [ 'copulas' ] dynamic = ["version"] license = 'BUSL-1.1' license-files = ['LICENSE'] -requires-python = '>=3.9,<3.15' +requires-python = '>=3.10,<3.15' readme = 'README.md' dependencies = [ - "numpy>=1.21.0;python_version<'3.10'", - "numpy>=1.23.3;python_version>='3.10' and python_version<'3.12'", + "numpy>=1.23.3;python_version<'3.12'", "numpy>=1.26.0;python_version>='3.12' and python_version<'3.13'", "numpy>=2.1.0;python_version>='3.13' and python_version<'3.14'", "numpy>=2.3.2;python_version>='3.14'", @@ -34,8 +32,7 @@ dependencies = [ "pandas>=2.3.3,<3;python_version>='3.14'", "plotly>=5.10.0;python_version<'3.13'", "plotly>=5.12.0;python_version>='3.13'", - "scipy>=1.7.3;python_version<'3.10'", - "scipy>=1.9.2;python_version>='3.10' and python_version<'3.12'", + "scipy>=1.9.2;python_version<'3.12'", "scipy>=1.12.0;python_version>='3.12' and python_version<'3.13'", "scipy>=1.14.1;python_version>='3.13' and python_version<'3.14'", "scipy>=1.16.1;python_version>='3.14'", From c274a2d1a543cd0731eda52ae4cfaefe2f5da827 Mon Sep 17 00:00:00 2001 From: rwedge Date: Thu, 29 Oct 2026 12:27:24 -0500 Subject: [PATCH 3/3] pin plotly below 7 --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dab465c0..3d3ba5a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,8 +30,8 @@ dependencies = [ "pandas>=2.1.1,<3;python_version>='3.12' and python_version<'3.13'", "pandas>=2.2.3,<3;python_version>='3.13' and python_version<'3.14'", "pandas>=2.3.3,<3;python_version>='3.14'", - "plotly>=5.10.0;python_version<'3.13'", - "plotly>=5.12.0;python_version>='3.13'", + "plotly>=5.10.0,<7;python_version<'3.13'", + "plotly>=5.12.0,<7;python_version>='3.13'", "scipy>=1.9.2;python_version<'3.12'", "scipy>=1.12.0;python_version>='3.12' and python_version<'3.13'", "scipy>=1.14.1;python_version>='3.13' and python_version<'3.14'",