Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/actions/build-wheel/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.3.0
with:
version: "0.9.0"
version: "0.12.10"
enable-cache: false

### cibuildwheel configuration
Expand All @@ -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.3.1
env:
CIBW_ARCHS: ${{ inputs.arch == 'amd64' && 'AMD64' || inputs.arch }}
CIBW_BUILD: ${{ inputs.python }}-${{ inputs.cibw-system }}_${{ inputs.arch }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/cleanup_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ jobs:
exit 1

- name: Install Astral UV
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v10.3.0
with:
version: "0.9.0"
version: "0.12.10"

- name: Install dependencies
run: uv sync --only-group pypi --no-install-project
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/code_quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ jobs:
persist-credentials: false

- name: Install Astral UV
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v10.3.0
with:
version: "0.9.0"
version: "0.12.10"
python-version: "3.12"

- name: pre-commit (cache)
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.3.0
with:
version: "0.9.0"
version: "0.12.10"
python-version: 3.12
enable-cache: true
cache-suffix: -${{ github.workflow }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/packaging_sdist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ jobs:
fi

- name: Install Astral UV
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v10.3.0
with:
version: "0.9.0"
version: "0.12.10"
python-version: 3.12

- name: Build sdist
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/packaging_wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/targeted_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ jobs:
submodules: true

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v10.3.0
with:
version: "0.9.0"
version: "0.12.10"
enable-cache: false
python-version: ${{ inputs.python_version }}

Expand Down
52 changes: 30 additions & 22 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"}]
Expand Down Expand Up @@ -198,16 +199,14 @@ exclude = [
#
# This section has dependency groups for testing and development. Tread carefully, the current setup makes sure that
# test dependencies can be installed on as many platforms we build wheel for. Especially picky are:
# - tensorflow: we can only run tests on cp310-cp311, for osx there is no tensorflow-cpu, for windows we need
# tensorflow-cpu-aws and there is no distribution availalbe for Linux aarch64.
# - tensorflow: wheels exist for cp310-cp313 only. tensorflow-cpu covers Linux x86_64 and Windows AMD64. The full
# tensorflow package covers macOS arm64 and Linux aarch64. There are no wheels for macOS x86_64 or Windows
# ARM64. >=2.20 is first release w/o a numpy upper bound.
# - torch: since we can't use gpu acceleration, we need to rely on torch-cpu, which isn't available on pypi. We use
# `tool.uv.index` and `tool.uv.sources` to make sure the official pytorch index is used. Even there, we don't
# have a wheel available for x86_64 OSX + cp313.
# - numpy: tensorflow doesn't play nice with numpy>2 so for every platform that can run tensorflow (cp310-cp311) we use
# numpy<2. numpy<2 has no wheels for cp31[2|3], meaning an sdist will be used. However, on Windows amd64 +
# cp313 this results in a segfault / access violation. To get around this, we install numpy>=2 on all >=cp312
# platforms. Then for windows arm64, for which there is no tensorflow, we only allow numpy>=2.3 because that
# ships arm64 win32 wheels.
# - numpy: numpy 1.x is EOL and pyarrow>=26 requires numpy>=2, so numpy>=2 everywhere. Windows ARM64 needs
# numpy>=2.3 because that is the first release with win32 arm64 wheels.
######################################################################################################

[tool.uv]
Expand Down Expand Up @@ -256,7 +255,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",
Expand All @@ -277,35 +276,37 @@ 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.6; 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>=26.0.0; 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'",
"torch>=2.2.2,<2.11.0; python_version >= '3.13' and python_version < '3.14' and ( sys_platform != 'darwin' or platform_machine != 'x86_64' ) and ( sys_platform != 'win32' or platform_machine != 'ARM64' )",
"torch>=2.10.0; python_version >= '3.14' and ( sys_platform != 'darwin' or platform_machine != 'x86_64' ) and ( sys_platform != 'win32' or platform_machine != 'ARM64' )",
"tensorflow==2.14.0; sys_platform == 'darwin' and python_version < '3.12'",
"tensorflow-cpu>=2.14.0; sys_platform == 'linux' and platform_machine != 'aarch64' and python_version < '3.12'",
"tensorflow-cpu>=2.14.0; sys_platform == 'win32' and platform_machine != 'ARM64' and python_version < '3.12'",
"tensorflow-cpu-aws==2.15.1; sys_platform == 'linux' and platform_machine == 'aarch64' and python_version < '3.12'",
"tensorflow-cpu>=2.20.0; python_version < '3.14' and ( ( sys_platform == 'linux' and platform_machine == 'x86_64' ) or ( sys_platform == 'win32' and platform_machine == 'AMD64' ) )",
"tensorflow>=2.20.0; python_version < '3.14' and ( ( sys_platform == 'darwin' and platform_machine == 'arm64' ) or ( sys_platform == 'linux' and platform_machine == 'aarch64' ) )",
"typing-extensions",
"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'",
"numpy>=2; ( sys_platform != 'win32' or platform_machine != 'ARM64' ) and python_version < '3.15'",
"numpy>=2.3; sys_platform == 'win32' and platform_machine == 'ARM64' and python_version >= '3.11' and python_version < '3.15'",
"numpy>=2.5.2; python_version >= '3.15'",
]
bench = [ # Pinned deps for the benchmark suite (see benchmarks/README.md). Minimal, not the heavy `test` group.
# Constraints mirror `test` so the lockfile resolves identically; torch/tf are local-only (importorskip).
"pytest",
"pytest_codspeed",
"polars>=1.33.0",
"pytz",
"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'",
"numpy>=2; ( sys_platform != 'win32' or platform_machine != 'ARM64' ) and python_version < '3.15'",
"numpy>=2.3; sys_platform == 'win32' and platform_machine == 'ARM64' and python_version >= '3.11' and python_version < '3.15'",
"numpy>=2.5.2; python_version >= '3.15'",
"pandas>=3.0.0; python_version >= '3.11' and python_version < '3.15'",
"pandas>=3.0.6; 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>=26.0.0; 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
Expand All @@ -328,6 +329,11 @@ build = [
"ninja>=1.10",
"nanobind>=3.0",
"scikit_build_core>=0.11.4",
# numpy C API headers; mirrors [build-system].requires, needed because the dev flow uses
# --no-build-isolation. Markers match the test/bench groups so the lock resolves.
"numpy>=2; ( sys_platform != 'win32' or platform_machine != 'ARM64' ) and python_version < '3.15'",
"numpy>=2.3; sys_platform == 'win32' and platform_machine == 'ARM64' and python_version >= '3.11' and python_version < '3.15'",
"numpy>=2.5.2; python_version >= '3.15'",
]
dev = [ # tooling like uv will install this automatically when syncing the environment
"pre-commit",
Expand Down Expand Up @@ -363,6 +369,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]
Expand Down
Loading