diff --git a/.github/actions/build-wheel/action.yml b/.github/actions/build-wheel/action.yml index 6c5071da..c819359a 100644 --- a/.github/actions/build-wheel/action.yml +++ b/.github/actions/build-wheel/action.yml @@ -104,9 +104,9 @@ runs: save: ${{ inputs.ccache-save }} # Install Astral UV, which will be used as build-frontend for cibuildwheel - - uses: astral-sh/setup-uv@v7 + - uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" enable-cache: false ### cibuildwheel configuration @@ -122,7 +122,7 @@ runs: # traversing the full filesystem, which produces an error on Windows. # - CIBW_TEST_SKIP we always skip tests for *-macosx_universal2 builds, because we run tests for arm64 and x86_64. - name: Build${{ inputs.testsuite != 'none' && ' and test ' || ' ' }}wheel - uses: pypa/cibuildwheel@v4.2.0 + uses: pypa/cibuildwheel@v4.2.1 env: CIBW_ARCHS: ${{ inputs.arch == 'amd64' && 'AMD64' || inputs.arch }} CIBW_BUILD: ${{ inputs.python }}-${{ inputs.cibw-system }}_${{ inputs.arch }} diff --git a/.github/workflows/cleanup_pypi.yml b/.github/workflows/cleanup_pypi.yml index 51c8b257..599124a8 100644 --- a/.github/workflows/cleanup_pypi.yml +++ b/.github/workflows/cleanup_pypi.yml @@ -70,9 +70,9 @@ jobs: exit 1 - name: Install Astral UV - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" - name: Install dependencies run: uv sync --only-group pypi --no-install-project diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index bec5f886..7193f119 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -29,9 +29,9 @@ jobs: persist-credentials: false - name: Install Astral UV - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" python-version: "3.12" - name: pre-commit (cache) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 3b51e641..8bf2cf30 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -68,9 +68,9 @@ jobs: sudo apt-get -y install ccache - name: Install Astral UV and enable the cache - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" python-version: 3.12 enable-cache: true cache-suffix: -${{ github.workflow }} diff --git a/.github/workflows/packaging_sdist.yml b/.github/workflows/packaging_sdist.yml index 912b26d1..a5c846f8 100644 --- a/.github/workflows/packaging_sdist.yml +++ b/.github/workflows/packaging_sdist.yml @@ -70,9 +70,9 @@ jobs: fi - name: Install Astral UV - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" python-version: 3.12 - name: Build sdist diff --git a/.github/workflows/packaging_wheels.yml b/.github/workflows/packaging_wheels.yml index b86ec800..e45ca448 100644 --- a/.github/workflows/packaging_wheels.yml +++ b/.github/workflows/packaging_wheels.yml @@ -127,7 +127,7 @@ jobs: strategy: fail-fast: false matrix: - python: [ cp311, cp312, cp313 ] + python: [ cp311, cp312, cp313, cp315 ] platform: - { os: windows-2022, arch: amd64, cibw_system: win } - { os: windows-11-arm, arch: ARM64, cibw_system: win } # cibw requires ARM64 to be uppercase diff --git a/.github/workflows/targeted_test.yml b/.github/workflows/targeted_test.yml index eff62fe2..b3729674 100644 --- a/.github/workflows/targeted_test.yml +++ b/.github/workflows/targeted_test.yml @@ -55,9 +55,9 @@ jobs: submodules: true - name: Install uv - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v10.0.1 with: - version: "0.9.0" + version: "0.12.10" enable-cache: false python-version: ${{ inputs.python_version }} diff --git a/pyproject.toml b/pyproject.toml index 78d42c9a..f960ef64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: C++", ] authors = [{name = "DuckDB Foundation"}] @@ -240,9 +241,22 @@ name = "pytorch-cpu" url = "https://download.pytorch.org/whl/cpu" explicit = true +[[tool.uv.index]] +# TODO: Remove after 3.15.0 release +name = "scientific-python-nightly" +url = "https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" +explicit = true + [tool.uv.sources] torch = [ { index = "pytorch-cpu" } ] torchvision = [ { index = "pytorch-cpu" } ] +pandas = [ + { index = "scientific-python-nightly", marker = "python_version >= '3.15'" }, +] +pyarrow = [ + # win/ARM64 has no pyarrow wheels & nightly doesn't have sdist + { index = "scientific-python-nightly", marker = "python_version >= '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')" }, +] # todo: adjust for windows arm64 while test dependencies become available [dependency-groups] # used for development only, requires pip >=25.1.0 @@ -256,7 +270,7 @@ stubdeps = [ # dependencies used for typehints in the stubs "typing-extensions", ] test = [ # dependencies used for running tests - "adbc-driver-manager>=1.10.0; python_version >= '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", + "adbc-driver-manager>=1.10.0; python_version >= '3.10' and python_version < '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "adbc-driver-manager>=1.7.0; python_version < '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "pytest", "pytest-reraise", @@ -266,9 +280,11 @@ test = [ # dependencies used for running tests "pytest_codspeed", "coverage", "gcovr; sys_platform != 'win32' or platform_machine != 'ARM64'", - "gcsfs; sys_platform != 'win32' or platform_machine != 'ARM64'", + "gcsfs; python_version < '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "packaging", - "polars>=1.33.0", + + # polars tests fail on 3.15 due to: https://github.com/pola-rs/polars/issues/28347 + "polars>=1.33.0; python_version < '3.15'", "psutil", "py4j", "pyotp", @@ -277,9 +293,11 @@ test = [ # dependencies used for running tests "requests", "urllib3", "fsspec>=2022.11.0; sys_platform != 'win32' or platform_machine != 'ARM64'", - "pandas>=3.0.0; python_version > '3.10'", + "pandas>=3.0.0; python_version >= '3.11' and python_version < '3.15'", + "pandas>=3.0.0.dev0; python_version >= '3.15'", "pandas<3.0.0; python_version < '3.11'", - "pyarrow>=23.0.0; python_version >= '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", + "pyarrow>=23.0.0; python_version >= '3.10' and python_version < '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", + "pyarrow>=23.0.0.dev0; python_version >= '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "pyarrow>=18.0.0; python_version < '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "torch>=2.2.2; python_version < '3.13' and ( sys_platform != 'win32' or platform_machine != 'ARM64' )", "torch>=2.2.2,<2.12.1; python_version > '3.11' and python_version < '3.13' and sys_platform == 'win32' and platform_machine == 'ARM64'", @@ -303,9 +321,11 @@ bench = [ # Pinned deps for the benchmark suite (see benchmarks/README.md). Mini "numpy<2; ( sys_platform != 'win32' or platform_machine != 'ARM64' ) and python_version < '3.12'", "numpy>=2; ( sys_platform != 'win32' or platform_machine != 'ARM64' ) and python_version >= '3.12'", "numpy>=2.3; sys_platform == 'win32' and platform_machine == 'ARM64' and python_version >= '3.11'", - "pandas>=3.0.0; python_version > '3.10'", + "pandas>=3.0.0; python_version >= '3.11' and python_version < '3.15'", + "pandas>=3.0.0.dev0; python_version >= '3.15'", "pandas<3.0.0; python_version < '3.11'", - "pyarrow>=23.0.0; python_version >= '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", + "pyarrow>=23.0.0; python_version >= '3.10' and python_version < '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", + "pyarrow>=23.0.0.dev0; python_version >= '3.15' and (sys_platform != 'win32' or platform_machine != 'ARM64')", "pyarrow>=18.0.0; python_version < '3.10' and (sys_platform != 'win32' or platform_machine != 'ARM64')", ] scripts = [ # dependencies used for running scripts @@ -363,6 +383,8 @@ filterwarnings = [ # Pyspark is throwing these warnings "ignore:distutils Version classes are deprecated:DeprecationWarning", "ignore:is_datetime64tz_dtype is deprecated:DeprecationWarning", + # pandas 3.1.0.dev0 deprecates the inplace keyword with a warning + "ignore::pandas.errors.Pandas4Warning", ] [tool.mypy]