diff --git a/.github/workflows/end_to_end.yml b/.github/workflows/end_to_end.yml index 8b93d22d..b3c7b2bf 100644 --- a/.github/workflows/end_to_end.yml +++ b/.github/workflows/end_to_end.yml @@ -10,13 +10,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest python-version: '3.9' - os: macos-latest - python-version: '3.13' + python-version: '3.14' steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} @@ -30,7 +30,7 @@ jobs: - name: Run end to end tests run: invoke end-to-end - - if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.13 + - if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.14 name: Upload integration codecov report uses: codecov/codecov-action@v4 with: diff --git a/.github/workflows/minimum.yml b/.github/workflows/minimum.yml index c63fa6b1..f207b04a 100644 --- a/.github/workflows/minimum.yml +++ b/.github/workflows/minimum.yml @@ -14,13 +14,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest python-version: '3.9' - os: macos-latest - python-version: '3.13' + python-version: '3.14' steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/numerical.yml b/.github/workflows/numerical.yml index cd21fd5c..0abfc42e 100644 --- a/.github/workflows/numerical.yml +++ b/.github/workflows/numerical.yml @@ -14,13 +14,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest python-version: '3.9' - os: macos-latest - python-version: '3.13' + python-version: '3.14' steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/readme.yml b/.github/workflows/readme.yml index 9b58ba63..4516672b 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'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/tutorials.yml b/.github/workflows/tutorials.yml index d58fef57..1d8241da 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'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 24f83bb1..d84bdc0c 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -14,13 +14,13 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] os: [ubuntu-latest, windows-latest] include: - os: macos-latest python-version: '3.9' - os: macos-latest - python-version: '3.13' + python-version: '3.14' steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} @@ -34,7 +34,7 @@ jobs: - name: Run unit tests run: invoke unit - - if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.13 + - if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.14 name: Upload unit codecov report uses: codecov/codecov-action@v4 with: diff --git a/INSTALL.md b/INSTALL.md index 57d34ab0..6b4cf8b7 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 and 3.13](https://www.python.org/downloads/) +[Python 3.9, 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 f87b6c10..c2f1abb1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,28 +13,32 @@ classifiers = [ 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Topic :: Scientific/Engineering :: Artificial Intelligence', ] keywords = [ 'copulas' ] dynamic = ["version"] license = { text = 'BSL-1.1' } -requires-python = '>=3.9,<3.14' +requires-python = '>=3.9,<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.26.0;python_version>='3.12' and python_version<'3.13'", - "numpy>=2.1.0;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'", "pandas>=1.4.0;python_version<'3.11'", "pandas>=1.5.0;python_version>='3.11' and python_version<'3.12'", "pandas>=2.1.1;python_version>='3.12' and python_version<'3.13'", - "pandas>=2.2.3;python_version>='3.13'", + "pandas>=2.2.3;python_version>='3.13' and python_version<'3.14'", + "pandas>=2.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.12.0;python_version>='3.12' and python_version<'3.13'", - "scipy>=1.14.1;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'", ] [project.urls] @@ -176,7 +180,7 @@ preview = true line-length = 100 indent-width = 4 src = ["copulas"] -target-version = "py312" +target-version = "py314" exclude = [ "docs", ".git", @@ -208,7 +212,6 @@ ignore = [ # pydocstyle "D107", # Missing docstring in __init__ "D417", # Missing argument descriptions in the docstring, this is a bug from pydocstyle: https://github.com/PyCQA/pydocstyle/issues/449 - "PD901", "PD101", ] diff --git a/tests/unit/multivariate/test_tree.py b/tests/unit/multivariate/test_tree.py index cc0c93b6..ad9f5790 100644 --- a/tests/unit/multivariate/test_tree.py +++ b/tests/unit/multivariate/test_tree.py @@ -1,3 +1,4 @@ +import re import sys from unittest import TestCase from unittest.mock import MagicMock, patch @@ -497,7 +498,7 @@ def test_identify_eds_not_adjacent(self): # As they are not adjacent, we can asure calling _identify_eds_ing will raise a ValueError. assert not first.is_adjacent(second) - error_msg = r'too many values to unpack \(expected 2\)' + error_msg = re.escape('too many values to unpack (expected 2') with pytest.raises(ValueError, match=error_msg): Edge._identify_eds_ing(first, second)