From 2788304996c4ad46123f6c071cb1f7f26a542323 Mon Sep 17 00:00:00 2001 From: Tim Head Date: Tue, 14 Jan 2025 08:13:27 -0800 Subject: [PATCH] Skip dispatching to GPU for unimplemented metrics --- python/cuml/cuml/manifold/umap.pyx | 16 ++++++++++++ .../estimators_hyperparams/test_accel_umap.py | 26 +++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/python/cuml/cuml/manifold/umap.pyx b/python/cuml/cuml/manifold/umap.pyx index 079b270d0a..9e4f3a6551 100644 --- a/python/cuml/cuml/manifold/umap.pyx +++ b/python/cuml/cuml/manifold/umap.pyx @@ -334,6 +334,22 @@ class UMAP(UniversalBase, _cpu_estimator_import_path = 'umap.UMAP' embedding_ = CumlArrayDescriptor(order='C') + _hyperparam_interop_translator = { + "metric": { + "sokalsneath": "NotImplemented", + "rogerstanimoto": "NotImplemented", + "sokalmichener": "NotImplemented", + "yule": "NotImplemented", + "ll_dirichlet": "NotImplemented", + "russelrao": "NotImplemented", + "kulsinski": "NotImplemented", + "dice": "NotImplemented", + "wminkowski": "NotImplemented", + "mahalanobis": "NotImplemented", + "haversine": "NotImplemented", + } + } + @device_interop_preparation def __init__(self, *, n_neighbors=15, diff --git a/python/cuml/cuml/tests/experimental/accel/estimators_hyperparams/test_accel_umap.py b/python/cuml/cuml/tests/experimental/accel/estimators_hyperparams/test_accel_umap.py index 543d545caf..1994fa2542 100644 --- a/python/cuml/cuml/tests/experimental/accel/estimators_hyperparams/test_accel_umap.py +++ b/python/cuml/cuml/tests/experimental/accel/estimators_hyperparams/test_accel_umap.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2024, NVIDIA CORPORATION. +# Copyright (c) 2024-2025, NVIDIA CORPORATION. # # Licensed under the Apache License, Version 2.0 (the “License”); # you may not use this file except in compliance with the License. @@ -46,10 +46,32 @@ def test_umap_min_dist(manifold_data, min_dist): @pytest.mark.parametrize( - "metric", ["euclidean", "manhattan", "chebyshev", "cosine"] + "metric", + [ + "euclidean", + "manhattan", + "chebyshev", + "cosine", + # These metrics are currently not supported in cuml, + # we test them here to make sure no exception is raised + "sokalsneath", + "rogerstanimoto", + "sokalmichener", + "yule", + "ll_dirichlet", + "russellrao", + "kulsinski", + "dice", + "wminkowski", + "mahalanobis", + "haversine", + ], ) def test_umap_metric(manifold_data, metric): X = manifold_data + # haversine only works for 2D data + if metric == "haversine": + X = X[:, :2] umap = UMAP(metric=metric, random_state=42) X_embedded = umap.fit_transform(X) trust = trustworthiness(X, X_embedded, n_neighbors=5)