diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index d00f0e21fbc6..6e0cfdd6f733 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -344,7 +344,7 @@ jobs: uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main with: enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize spark-rapids-jni" + ignored_pr_jobs: "telemetry-summarize spark-rapids-jni cuml-compat-tests" conda-cpp-build: needs: checks permissions: @@ -775,6 +775,26 @@ jobs: container_image: "rapidsai/ci-conda:26.08-latest" script: | ci/cudf_pandas_scripts/third-party-integration/test.sh python/cudf/cudf_pandas_tests/third_party_integration_tests/dependencies.yaml + cuml-compat-tests: + needs: [conda-python-build, conda-python-build-noarch, changed-files] + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + secrets: inherit # zizmor: ignore[secrets-inherit] + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda && fromJSON(needs.changed-files.outputs.changed_file_groups).neither_cudf_polars_nor_dask_cudf + with: + build_type: pull-request + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.06-latest" + script: "ci/test_cuml_compat.sh" pandas-tests: # run the Pandas unit tests using PR branch needs: [wheel-build-cudf, changed-files] diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1725eb4ad54b..e1bbb6961c15 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -237,6 +237,24 @@ jobs: script: | ci/cudf_pandas_scripts/third-party-integration/test.sh python/cudf/cudf_pandas_tests/third_party_integration_tests/dependencies.yaml continue-on-error: true + cuml-compat-tests: + permissions: + actions: read + contents: read + id-token: write + packages: read + pull-requests: read + secrets: inherit # zizmor: ignore[secrets-inherit] + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + with: + build_type: ${{ inputs.build_type }} + branch: ${{ inputs.branch }} + date: ${{ inputs.date }} + sha: ${{ inputs.sha }} + node_type: "gpu-l4-latest-1" + continue-on-error: true + container_image: "rapidsai/ci-conda:26.06-latest" + script: "ci/test_cuml_compat.sh" wheel-tests-cudf-polars: permissions: actions: read diff --git a/ci/test_cuml_compat.sh b/ci/test_cuml_compat.sh new file mode 100755 index 000000000000..804e03e4b6f9 --- /dev/null +++ b/ci/test_cuml_compat.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +cd "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"/../ +source ./ci/test_python_common.sh test_python_cudf test_cuml + +# Clone cuml at the matching RAPIDS branch to get test files +# (the conda package doesn't ship cuml/tests/) + +# This makes sure we read RAPIDS_BRANCH from the top level of the repo, no matter +# what the current working directory is. +RAPIDS_BRANCH="$(cat "$(dirname "$(realpath "${BASH_SOURCE[0]}")")"/../RAPIDS_BRANCH)" +rapids-logger "Cloning cuml at branch ${RAPIDS_BRANCH}" +git clone https://github.com/rapidsai/cuml.git --branch "${RAPIDS_BRANCH}" --depth 1 /tmp/cuml + + +CUML_TESTS_DIR=/tmp/cuml/python/cuml/tests + +rapids-logger "pytest cuml cuDF-compat subset" + +timeout 15m python -m pytest \ + --cache-clear \ + "${CUML_TESTS_DIR}/test_array.py" \ + "${CUML_TESTS_DIR}/test_compose.py" \ + "${CUML_TESTS_DIR}/test_input_utils.py" \ + "${CUML_TESTS_DIR}/test_kneighbors_classifier.py" \ + "${CUML_TESTS_DIR}/test_kneighbors_regressor.py" \ + "${CUML_TESTS_DIR}/test_label_encoder.py" \ + "${CUML_TESTS_DIR}/test_elastic_net.py" \ + "${CUML_TESTS_DIR}/test_linear_regression.py" \ + "${CUML_TESTS_DIR}/test_logistic_regression.py" \ + "${CUML_TESTS_DIR}/test_ridge.py" \ + "${CUML_TESTS_DIR}/test_metrics.py" \ + "${CUML_TESTS_DIR}/test_one_hot_encoder.py" \ + "${CUML_TESTS_DIR}/test_ordinal_encoder.py" \ + "${CUML_TESTS_DIR}/test_random_forest.py" \ + "${CUML_TESTS_DIR}/test_reflection.py" \ + "${CUML_TESTS_DIR}/test_sgd.py" \ + "${CUML_TESTS_DIR}/test_split.py" \ + "${CUML_TESTS_DIR}/test_svm.py" \ + "${CUML_TESTS_DIR}/test_target_encoder.py" \ + "${CUML_TESTS_DIR}/test_text_feature_extraction.py" \ + "${CUML_TESTS_DIR}/test_train_test_split.py" \ + "${CUML_TESTS_DIR}/test_validation.py" diff --git a/dependencies.yaml b/dependencies.yaml index c2e4af468d4b..21c3e06df8b3 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -92,6 +92,10 @@ files: - depends_on_libcudf - depends_on_numba_cuda - depends_on_numba_cuda_mlir + test_cuml: + output: none + includes: + - depends_on_cuml test_python_pylibcudf: output: none includes: @@ -1605,6 +1609,11 @@ dependencies: - output_types: conda packages: - dask-cudf==26.8.*,>=0.0.0a0 + depends_on_cuml: + common: + - output_types: conda + packages: + - cuml==26.8.*,>=0.0.0a0 depends_on_custreamz: common: - output_types: conda