Skip to content
Draft
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
18 changes: 17 additions & 1 deletion onedal/tests/utils/_dataframes_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@
except ImportError:
dpnp_available = False

try:
import torch

torch_available = True
except ImportError:
torch_available = False

try:
# This should be lazy imported in the
# future along with other popular
Expand All @@ -50,7 +57,7 @@
from onedal.tests.utils._device_selection import get_queues

test_frameworks = os.environ.get(
"ONEDAL_PYTEST_FRAMEWORKS", "numpy,pandas,dpnp,array_api"
"ONEDAL_PYTEST_FRAMEWORKS", "numpy,pandas,dpnp,array_api,torch"
)


Expand Down Expand Up @@ -116,6 +123,8 @@ def get_df_and_q(dataframe: str):
or array_api_enabled()
):
dataframes_and_queues.append(pytest.param("array_api", None, id="array_api"))
if torch_available and "torch" in dataframe_filter_:
dataframes_and_queues.extend(get_df_and_q("torch"))

return dataframes_and_queues

Expand All @@ -124,6 +133,8 @@ def _as_numpy(obj, *args, **kwargs):
"""Converted input object to numpy.ndarray format."""
if dpnp_available and isinstance(obj, dpnp.ndarray):
return obj.asnumpy(*args, **kwargs)
if torch_available and isinstance(obj, torch.Tensor):
return obj.cpu().detach().numpy(*args, **kwargs)
if isinstance(obj, pd.DataFrame) or isinstance(obj, pd.Series):
return obj.to_numpy(*args, **kwargs)
if sp.issparse(obj):
Expand Down Expand Up @@ -162,5 +173,10 @@ def _convert_to_dataframe(obj, sycl_queue=None, target_df=None, *args, **kwargs)

xp = array_api_modules[target_df]
return xp.asarray(obj)
elif target_df == "torch":
if hasattr(torch, "xpu") and torch.xpu.is_available():
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should probably be documented to prevent confusion

return torch.as_tensor(obj, device="xpu", *args, **kwargs)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems we are testing np.float32/np.float64 dtypes in convert_to_dataframe and torch does not take this, maybe we need to conver to torch dtype before passing to as_tensor

else:
return torch.as_tensor(obj, device="cpu", *args, **kwargs)

raise RuntimeError("Unsupported dataframe conversion")
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_basic_stats_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -82,7 +82,7 @@ def test_basic_stats_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("array_api_dispatch", [True, False])
@pytest.mark.mpi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("weighted", [True, False])
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
Expand Down Expand Up @@ -104,7 +104,7 @@ def test_incremental_basic_statistics_fit_spmd_gold(dataframe, queue, weighted,
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("num_blocks", [1, 2])
@pytest.mark.parametrize("weighted", [True, False])
Expand Down Expand Up @@ -178,7 +178,7 @@ def test_incremental_basic_statistics_partial_fit_spmd_gold(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("num_blocks", [1, 2])
@pytest.mark.parametrize("weighted", [True, False])
Expand Down Expand Up @@ -247,7 +247,7 @@ def test_incremental_basic_statistics_single_option_partial_fit_spmd_gold(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("num_blocks", [1, 2])
@pytest.mark.parametrize("weighted", [True, False])
Expand Down
4 changes: 2 additions & 2 deletions sklearnex/spmd/cluster/tests/test_dbscan_spmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_dbscan_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -67,7 +67,7 @@ def test_dbscan_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("min_samples", [2, 5, 15])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
4 changes: 2 additions & 2 deletions sklearnex/spmd/cluster/tests/test_kmeans_spmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_kmeans_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -107,7 +107,7 @@ def test_kmeans_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("n_clusters", [2, 5, 15])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
4 changes: 2 additions & 2 deletions sklearnex/spmd/covariance/tests/test_covariance_spmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_covariance_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -83,7 +83,7 @@ def test_covariance_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("assume_centered", [True, False])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("assume_centered", [True, False])
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
Expand Down Expand Up @@ -88,7 +88,7 @@ def test_incremental_covariance_fit_spmd_gold(dataframe, queue, assume_centered,
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("num_blocks", [1, 2])
@pytest.mark.parametrize("assume_centered", [True, False])
Expand Down Expand Up @@ -149,7 +149,7 @@ def test_incremental_covariance_partial_fit_spmd_gold(
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("array_api_dispatch", [True, False])
@pytest.mark.mpi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("whiten", [True, False])
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
Expand Down Expand Up @@ -95,7 +95,7 @@ def test_incremental_pca_fit_spmd_gold(dataframe, queue, whiten, dtype):
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("whiten", [True, False])
@pytest.mark.parametrize("num_blocks", [1, 2])
Expand Down Expand Up @@ -159,7 +159,7 @@ def test_incremental_pca_partial_fit_spmd_gold(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("whiten", [True, False])
@pytest.mark.parametrize("n_components", [None, 2, 5])
Expand Down Expand Up @@ -211,7 +211,7 @@ def test_incremental_pca_fit_spmd_random(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("whiten", [True, False])
@pytest.mark.parametrize("n_components", [None, 2, 5])
Expand Down
4 changes: 2 additions & 2 deletions sklearnex/spmd/decomposition/tests/test_pca_spmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_pca_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -90,7 +90,7 @@ def test_pca_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("whiten", [True, False])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
8 changes: 4 additions & 4 deletions sklearnex/spmd/ensemble/tests/test_forest_spmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_rfcls_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -107,7 +107,7 @@ def test_rfcls_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("local_trees_mode", [False, True])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down Expand Up @@ -173,7 +173,7 @@ def test_rfcls_spmd_synthetic(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_rfreg_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -242,7 +242,7 @@ def test_rfreg_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("local_trees_mode", [False, True])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("fit_intercept", [True, False])
@pytest.mark.parametrize("macro_block", [None, 1024])
Expand Down Expand Up @@ -112,7 +112,7 @@ def test_incremental_linear_regression_fit_spmd_gold(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("fit_intercept", [True, False])
@pytest.mark.parametrize("num_blocks", [1, 2])
Expand Down Expand Up @@ -196,7 +196,7 @@ def test_incremental_linear_regression_partial_fit_spmd_gold(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("fit_intercept", [True, False])
@pytest.mark.parametrize("num_samples", [100, 1000])
Expand Down Expand Up @@ -261,7 +261,7 @@ def test_incremental_linear_regression_fit_spmd_random(
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("fit_intercept", [True, False])
@pytest.mark.parametrize("num_blocks", [1, 2])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_linear_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -102,7 +102,7 @@ def test_linear_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("n_features", [10, 100])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
)
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.mpi
def test_logistic_spmd_gold(dataframe, queue):
Expand Down Expand Up @@ -112,7 +112,7 @@ def test_logistic_spmd_gold(dataframe, queue):
@pytest.mark.parametrize("tol", [1e-2, 1e-4])
@pytest.mark.parametrize(
"dataframe,queue",
get_dataframes_and_queues(dataframe_filter_="dpnp", device_filter_="gpu"),
get_dataframes_and_queues(dataframe_filter_="dpnp,torch", device_filter_="gpu"),
)
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
@pytest.mark.parametrize("array_api_dispatch", [True, False])
Expand Down
Loading
Loading