Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
c65a0a4
Remove scripts to tests rapidsmpf in separate jobs
mroeschke Feb 18, 2026
b7e9cce
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 18, 2026
96fe32c
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 18, 2026
8fb8b75
Ensure shuffle method is set to rapidsmpf
mroeschke Feb 18, 2026
7452bd8
Adjust some config tests
mroeschke Feb 18, 2026
4b9c5e7
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 19, 2026
e46518f
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 24, 2026
8623f22
Pass CUDF_POLARS__PARQUET_OPTIONS__USE_RAPIDSMPF_NATIVE
mroeschke Feb 24, 2026
fea7ee9
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 25, 2026
5556a7e
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Feb 26, 2026
6816244
Use small block size in unit tests
mroeschke Feb 26, 2026
e6a7f80
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 2, 2026
f10b5f5
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 3, 2026
e5223f5
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 4, 2026
a7a9c81
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 6, 2026
30294dd
Update test_log_query_plan after https://github.com/rapidsai/cudf/pul…
mroeschke Mar 6, 2026
8e9cbd2
Remove comment about dynamic planning
mroeschke Mar 6, 2026
2e30436
Fix shuffle fallback warning, check warning in test_grouped_rolling_u…
mroeschke Mar 6, 2026
b45dbd9
Try using threadpoolexecutor in contextmanager to fix resourcewarnings
mroeschke Mar 6, 2026
acaef66
Remove warning filter
mroeschke Mar 6, 2026
2cd190b
Make warning more generic
mroeschke Mar 6, 2026
8b08f62
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 6, 2026
f635088
Workaround xfail in test_merge_sorted_without_nulls
mroeschke Mar 6, 2026
eeef8e8
xfail the zero column, height tests for now
mroeschke Mar 7, 2026
aa8c67b
Add cudf_polars trace to test_python_other, preemtive import or skip …
mroeschke Mar 7, 2026
3c8eb10
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 7, 2026
63ecdae
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 9, 2026
c02cb36
Re-enable importorskip
mroeschke Mar 9, 2026
87ba76a
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 9, 2026
9318457
Start adding xfails to failing rapidsmpf tests
mroeschke Mar 10, 2026
1704866
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 10, 2026
202cca5
Change comments to echo for log
mroeschke Mar 10, 2026
415d5ea
Add xfails to test_groupby_sorted_keys
mroeschke Mar 10, 2026
ab95752
Missed 2 tests
mroeschke Mar 10, 2026
17f84a4
xfail tests in test_groupby with rapidsmpf
mroeschke Mar 10, 2026
151be46
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 10, 2026
a401aa3
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 10, 2026
35e2d15
Remove not expr condition
mroeschke Mar 10, 2026
70791cd
Change xfail nodes again, may need to skip due to unstable shuffling
mroeschke Mar 11, 2026
1cfcb2e
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 11, 2026
5da9dac
Mark test_groupby_sorted_keys as xfail strict=False
mroeschke Mar 11, 2026
916b164
xfail test_shift_by_expression_get
mroeschke Mar 11, 2026
0990377
xfail params of test_non_coalesce_join
mroeschke Mar 11, 2026
c6d598e
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 11, 2026
0b54d50
Revert xfails on test_shift_by_expression_get and test_non_coalesce_join
mroeschke Mar 11, 2026
c7b6d5d
xfail strict=False test_non_coalesce_join
mroeschke Mar 11, 2026
2056a38
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 11, 2026
54fe379
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 11, 2026
b29fc5e
Ensure rapidsmpf is installed in cudf_polars wheels tests
mroeschke Mar 11, 2026
4997229
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 12, 2026
26f0fe1
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 13, 2026
384f878
Fix shift not passing stream to_py
mroeschke Mar 13, 2026
01fa311
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 13, 2026
d2095ae
nocover a importerror, keep skipping test_groupby for older polars ve…
mroeschke Mar 13, 2026
9b28ea7
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 16, 2026
d74ba8b
Ignore coverage requirements for new job
mroeschke Mar 16, 2026
61bd956
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 16, 2026
1144a2a
Change more Rapidsmpf Shuffler.wait_on to Shuffler.wait
mroeschke Mar 16, 2026
609cf99
Pass df.stream to to_py call in shift
mroeschke Mar 16, 2026
d19b49f
Merge branch 'bug/cudf_polars/rmf_wait' into ci/cudf_polars/unit_test…
mroeschke Mar 16, 2026
7bb6520
Merge remote-tracking branch 'upstream/main' into ci/cudf_polars/unit…
mroeschke Mar 16, 2026
804cf3b
xfail test_groupby_aggs_keep_unsupported_as_null for quantile and pol…
mroeschke Mar 16, 2026
8f642f3
add temp? no coverage failure to dask tests
mroeschke Mar 16, 2026
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
11 changes: 0 additions & 11 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -480,17 +480,6 @@ jobs:
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: pull-request
script: "ci/test_wheel_cudf_polars.sh"
wheel-tests-cudf-polars-with-rapidsmpf:
needs: [wheel-build-cudf-polars, changed-files]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_nor_dask_cudf
with:
# This selects "ARCH=amd64 + the latest supported Python + CUDA" to minimize CI usage.
# (rapidsmpf compatibility already validated in rapidsmpf CI)
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: pull-request
script: "ci/test_cudf_polars_with_rapidsmpf.sh"
cudf-polars-polars-tests:
needs: [wheel-build-cudf-polars, changed-files]
secrets: inherit
Expand Down
13 changes: 0 additions & 13 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -153,19 +153,6 @@ jobs:
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
script: "ci/test_wheel_cudf_polars.sh"
wheel-tests-cudf-polars-with-rapidsmpf:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
with:
# This selects "ARCH=amd64 + the latest supported Python + CUDA" to minimize CI usage.
# (rapidsmpf compatibility already validated in rapidsmpf CI)
matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))]))
build_type: ${{ inputs.build_type }}
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
script: "ci/test_cudf_polars_with_rapidsmpf.sh"
continue-on-error: true
cudf-polars-polars-tests:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
Expand Down
25 changes: 20 additions & 5 deletions ci/run_cudf_polars_pytests.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION.
# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail
Expand All @@ -9,17 +9,32 @@ set -euo pipefail
# Support invoking run_cudf_polars_pytests.sh outside the script directory
cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"/../python/cudf_polars/

# Test the "in-memory" executor
echo "Test the in-memory executor"
python -m pytest --cache-clear "$@" tests --executor in-memory

# Test the default "streaming" executor
echo "Test the default streaming executor"
python -m pytest --cache-clear "$@" tests --executor streaming

# Test the "streaming" executor with small blocksize
echo "Test the streaming executor with small blocksize"
python -m pytest --cache-clear "$@" tests --executor streaming --blocksize-mode small

# Run experimental tests with Distributed cluster
echo "Test the (future default) streaming executor with rapidsmpf"
CUDF_POLARS__PARQUET_OPTIONS__USE_RAPIDSMPF_NATIVE=1 CUDF_POLARS__EXECUTOR__SHUFFLE_METHOD=rapidsmpf python -m pytest --cache-clear "$@" tests \
--executor streaming \
--blocksize-mode small \
--cluster single \
--runtime rapidsmpf \
--cov-fail-under=0 # TODO? missing coverage may be due to old task-based paths

echo "Run experimental tests with Distributed cluster"
python -m pytest --cache-clear "$@" "tests/experimental" \
--executor streaming \
--cluster distributed \
--cov-fail-under=0 # No code-coverage requirement for these tests.

echo "Run experimental tests with the distributed cluster mode and the rapidsmpf runtime"
python -m pytest --cache-clear "$@" "tests/experimental" \
--executor streaming \
--cluster distributed \
--runtime rapidsmpf \
--cov-fail-under=0 # No code-coverage requirement for these tests(?)
27 changes: 0 additions & 27 deletions ci/run_cudf_polars_with_rapidsmpf_pytests.sh

This file was deleted.

60 changes: 0 additions & 60 deletions ci/test_cudf_polars_with_rapidsmpf.sh

This file was deleted.

2 changes: 1 addition & 1 deletion ci/test_wheel_cudf_polars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ rapids-pip-retry install \
-v \
--constraint ./constraints.txt \
--constraint "${PIP_CONSTRAINT}" \
"$(echo "${CUDF_POLARS_WHEELHOUSE}"/cudf_polars_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)[test,experimental]" \
"$(echo "${CUDF_POLARS_WHEELHOUSE}"/cudf_polars_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)[test,experimental,rapidsmpf]" \
"$(echo "${LIBCUDF_WHEELHOUSE}"/libcudf_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)" \
"$(echo "${PYLIBCUDF_WHEELHOUSE}"/pylibcudf_"${RAPIDS_PY_CUDA_SUFFIX}"*.whl)"

Expand Down
2 changes: 2 additions & 0 deletions dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ files:
- depends_on_cudf_kafka
- depends_on_custreamz
- depends_on_cudf_polars
- depends_on_rapidsmpf
- cudf_polars_trace
test_java:
output: none
includes:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES.
# SPDX-License-Identifier: Apache-2.0

"""Dask function registrations such as serializers and dispatch implementations."""
Expand Down Expand Up @@ -215,7 +215,7 @@ def _(x: DataFrame) -> int:
from rapidsmpf.integrations.dask.spilling import register_dask_serialize

register_dask_serialize() # pragma: no cover; rapidsmpf dependency not included yet
except ImportError:
except ImportError: # pragma: no cover
pass

# Register the tokenizer for NamedExpr and DataType. This is a performance
Expand Down
7 changes: 6 additions & 1 deletion python/cudf_polars/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES.
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations

Expand Down Expand Up @@ -28,6 +28,11 @@ def clear_memory_resource_cache():
cudf_polars.callback.default_memory_resource.cache_clear()


@pytest.fixture
def using_rapidsmpf():
return cudf_polars.testing.asserts.DEFAULT_RUNTIME == "rapidsmpf"


def pytest_addoption(parser):
parser.addoption(
"--executor",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
@pytest.mark.skipif(DEFAULT_CLUSTER != "single", reason="Requires 'single' cluster.")
def test_structlog_streaming_node_events():
"""Test that structlog emits 'Streaming Actor' events when tracing is enabled."""
pytest.importorskip("structlog")
# Run in subprocess to control CUDF_POLARS_LOG_TRACES environment variable
code = textwrap.dedent("""\
import polars as pl
Expand Down
8 changes: 7 additions & 1 deletion python/cudf_polars/tests/expressions/test_agg.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,13 @@ def test_implode_agg_unsupported():
assert_ir_translation_raises(q, NotImplementedError)


def test_decimal_aggs(decimal_df: pl.LazyFrame) -> None:
def test_decimal_aggs(decimal_df: pl.LazyFrame, using_rapidsmpf, request) -> None:
request.applymarker(
pytest.mark.xfail(
condition=using_rapidsmpf,
reason="https://github.com/rapidsai/cudf/issues/21645",
)
)
q = decimal_df.with_columns(
sum=pl.col("a").sum(),
min=pl.col("a").min(),
Expand Down
8 changes: 7 additions & 1 deletion python/cudf_polars/tests/expressions/test_len.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,13 @@ def test_len(dtype, empty):


@pytest.mark.parametrize("data", [[1, 2, 3], [1, 2, None]])
def test_col_len(data):
def test_col_len(data, using_rapidsmpf, request):
request.applymarker(
pytest.mark.xfail(
condition=using_rapidsmpf,
reason="https://github.com/rapidsai/cudf/issues/21645",
)
)
data = {"a": list("xyz"), "b": data}
q = pl.LazyFrame(data).select(
pl.col("a").len().alias("l"),
Expand Down
12 changes: 11 additions & 1 deletion python/cudf_polars/tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from __future__ import annotations

import os
import sys
from typing import Any, cast

Expand Down Expand Up @@ -381,8 +382,12 @@ def test_scheduler_deprecated() -> None:

def test_validate_shuffle_method_defaults(
*,
monkeypatch: pytest.MonkeyPatch,
rapidsmpf_distributed_available: bool,
) -> None:
# TODO: Can remove once removed from ci/run_cudf_polars_pytests.sh
# and the default shuffle method changes to "rapidsmpf"
monkeypatch.delenv("CUDF_POLARS__EXECUTOR__SHUFFLE_METHOD", raising=False)
config = ConfigOptions.from_polars_engine(
pl.GPUEngine(
executor="streaming",
Expand Down Expand Up @@ -804,7 +809,12 @@ def test_cuda_stream_policy_from_env(
elif runtime == "rapidsmpf":
with pytest.raises(ValueError, match="The rapidsmpf streaming engine"):
ConfigOptions.from_polars_engine(engine)
else:
elif (
os.environ.get("CUDF_POLARS__EXECUTOR__SHUFFLE_METHOD", "") != "rapidsmpf"
and not rapidsmpf_single_available
):
# CUDF_POLARS__EXECUTOR__SHUFFLE_METHOD set in ci/run_cudf_polars_pytests.sh
# Would raise since rapidsmpf shuffle requires rapidsmpf to be installed
config = ConfigOptions.from_polars_engine(engine)
assert config.cuda_stream_policy == env

Expand Down
8 changes: 7 additions & 1 deletion python/cudf_polars/tests/test_dataframescan.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,13 @@ def test_dataframescan_with_decimals():
POLARS_VERSION_LT_138,
reason="height parameter added in Polars 1.38",
)
def test_dataframescan_zero_width_with_rows():
def test_dataframescan_zero_width_with_rows(request, using_rapidsmpf):
request.applymarker(
pytest.mark.xfail(
using_rapidsmpf,
reason="https://github.com/rapidsai/cudf/issues/21644",
)
)
df = pl.LazyFrame(height=5)
q = df.select(pl.len())
assert_gpu_result_equal(q)
Expand Down
10 changes: 9 additions & 1 deletion python/cudf_polars/tests/test_drop_nulls.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,15 @@ def test_drop_null(null_data):
[0, pl.col("a").mean(), pl.col("b")],
ids=["scalar", "aggregation", "column_expression"],
)
def test_fill_null(null_data, value):
def test_fill_null(null_data, value, using_rapidsmpf, request):
request.applymarker(
pytest.mark.xfail(
condition=using_rapidsmpf
and "mean" in str(value)
and len(null_data.collect()) == 2,
reason="https://github.com/rapidsai/cudf/issues/21721",
)
)
q = null_data.select(pl.col("a").fill_null(value))
assert_gpu_result_equal(q)

Expand Down
Loading
Loading