scikit-learn-intelex 2025.4.0__py313-none-manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of scikit-learn-intelex might be problematic. Click here for more details.

Files changed (282) hide show
  1. daal4py/__init__.py +73 -0
  2. daal4py/__main__.py +58 -0
  3. daal4py/_daal4py.cpython-313-x86_64-linux-gnu.so +0 -0
  4. daal4py/doc/third-party-programs.txt +424 -0
  5. daal4py/mb/__init__.py +19 -0
  6. daal4py/mb/model_builders.py +377 -0
  7. daal4py/mpi_transceiver.cpython-313-x86_64-linux-gnu.so +0 -0
  8. daal4py/sklearn/__init__.py +40 -0
  9. daal4py/sklearn/_n_jobs_support.py +248 -0
  10. daal4py/sklearn/_utils.py +245 -0
  11. daal4py/sklearn/cluster/__init__.py +20 -0
  12. daal4py/sklearn/cluster/dbscan.py +165 -0
  13. daal4py/sklearn/cluster/k_means.py +597 -0
  14. daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. daal4py/sklearn/decomposition/__init__.py +19 -0
  16. daal4py/sklearn/decomposition/_pca.py +524 -0
  17. daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
  18. daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
  19. daal4py/sklearn/ensemble/__init__.py +27 -0
  20. daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. daal4py/sklearn/linear_model/__init__.py +29 -0
  23. daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. daal4py/sklearn/linear_model/_linear.py +272 -0
  25. daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  27. daal4py/sklearn/linear_model/linear.py +17 -0
  28. daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. daal4py/sklearn/linear_model/ridge.py +17 -0
  31. daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
  32. daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. daal4py/sklearn/manifold/__init__.py +19 -0
  34. daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. daal4py/sklearn/metrics/__init__.py +20 -0
  36. daal4py/sklearn/metrics/_pairwise.py +236 -0
  37. daal4py/sklearn/metrics/_ranking.py +210 -0
  38. daal4py/sklearn/model_selection/__init__.py +19 -0
  39. daal4py/sklearn/model_selection/_split.py +309 -0
  40. daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
  44. daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
  46. daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
  47. daal4py/sklearn/neighbors/__init__.py +21 -0
  48. daal4py/sklearn/neighbors/_base.py +503 -0
  49. daal4py/sklearn/neighbors/_classification.py +139 -0
  50. daal4py/sklearn/neighbors/_regression.py +74 -0
  51. daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. daal4py/sklearn/svm/__init__.py +19 -0
  54. daal4py/sklearn/svm/svm.py +734 -0
  55. daal4py/sklearn/utils/__init__.py +21 -0
  56. daal4py/sklearn/utils/base.py +75 -0
  57. daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. daal4py/sklearn/utils/validation.py +696 -0
  59. onedal/__init__.py +83 -0
  60. onedal/_config.py +54 -0
  61. onedal/_device_offload.py +204 -0
  62. onedal/_onedal_py_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
  63. onedal/_onedal_py_host.cpython-313-x86_64-linux-gnu.so +0 -0
  64. onedal/_onedal_py_spmd_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
  65. onedal/basic_statistics/__init__.py +20 -0
  66. onedal/basic_statistics/basic_statistics.py +107 -0
  67. onedal/basic_statistics/incremental_basic_statistics.py +175 -0
  68. onedal/basic_statistics/tests/test_basic_statistics.py +242 -0
  69. onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
  70. onedal/basic_statistics/tests/utils.py +50 -0
  71. onedal/cluster/__init__.py +27 -0
  72. onedal/cluster/dbscan.py +105 -0
  73. onedal/cluster/kmeans.py +557 -0
  74. onedal/cluster/kmeans_init.py +112 -0
  75. onedal/cluster/tests/test_dbscan.py +125 -0
  76. onedal/cluster/tests/test_kmeans.py +88 -0
  77. onedal/cluster/tests/test_kmeans_init.py +93 -0
  78. onedal/common/_base.py +38 -0
  79. onedal/common/_estimator_checks.py +47 -0
  80. onedal/common/_mixin.py +62 -0
  81. onedal/common/_policy.py +55 -0
  82. onedal/common/_spmd_policy.py +30 -0
  83. onedal/common/hyperparameters.py +125 -0
  84. onedal/common/tests/test_policy.py +76 -0
  85. onedal/common/tests/test_sycl.py +128 -0
  86. onedal/covariance/__init__.py +20 -0
  87. onedal/covariance/covariance.py +122 -0
  88. onedal/covariance/incremental_covariance.py +161 -0
  89. onedal/covariance/tests/test_covariance.py +50 -0
  90. onedal/covariance/tests/test_incremental_covariance.py +190 -0
  91. onedal/datatypes/__init__.py +19 -0
  92. onedal/datatypes/_data_conversion.py +121 -0
  93. onedal/datatypes/tests/common.py +126 -0
  94. onedal/datatypes/tests/test_data.py +475 -0
  95. onedal/decomposition/__init__.py +20 -0
  96. onedal/decomposition/incremental_pca.py +214 -0
  97. onedal/decomposition/pca.py +186 -0
  98. onedal/decomposition/tests/test_incremental_pca.py +285 -0
  99. onedal/ensemble/__init__.py +29 -0
  100. onedal/ensemble/forest.py +736 -0
  101. onedal/ensemble/tests/test_random_forest.py +97 -0
  102. onedal/linear_model/__init__.py +27 -0
  103. onedal/linear_model/incremental_linear_model.py +292 -0
  104. onedal/linear_model/linear_model.py +325 -0
  105. onedal/linear_model/logistic_regression.py +247 -0
  106. onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
  107. onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
  108. onedal/linear_model/tests/test_linear_regression.py +259 -0
  109. onedal/linear_model/tests/test_logistic_regression.py +95 -0
  110. onedal/linear_model/tests/test_ridge.py +95 -0
  111. onedal/neighbors/__init__.py +19 -0
  112. onedal/neighbors/neighbors.py +763 -0
  113. onedal/neighbors/tests/test_knn_classification.py +49 -0
  114. onedal/primitives/__init__.py +27 -0
  115. onedal/primitives/get_tree.py +25 -0
  116. onedal/primitives/kernel_functions.py +152 -0
  117. onedal/primitives/tests/test_kernel_functions.py +159 -0
  118. onedal/spmd/__init__.py +25 -0
  119. onedal/spmd/_base.py +30 -0
  120. onedal/spmd/basic_statistics/__init__.py +20 -0
  121. onedal/spmd/basic_statistics/basic_statistics.py +30 -0
  122. onedal/spmd/basic_statistics/incremental_basic_statistics.py +71 -0
  123. onedal/spmd/cluster/__init__.py +28 -0
  124. onedal/spmd/cluster/dbscan.py +23 -0
  125. onedal/spmd/cluster/kmeans.py +56 -0
  126. onedal/spmd/covariance/__init__.py +20 -0
  127. onedal/spmd/covariance/covariance.py +26 -0
  128. onedal/spmd/covariance/incremental_covariance.py +83 -0
  129. onedal/spmd/decomposition/__init__.py +20 -0
  130. onedal/spmd/decomposition/incremental_pca.py +124 -0
  131. onedal/spmd/decomposition/pca.py +26 -0
  132. onedal/spmd/ensemble/__init__.py +19 -0
  133. onedal/spmd/ensemble/forest.py +28 -0
  134. onedal/spmd/linear_model/__init__.py +21 -0
  135. onedal/spmd/linear_model/incremental_linear_model.py +101 -0
  136. onedal/spmd/linear_model/linear_model.py +30 -0
  137. onedal/spmd/linear_model/logistic_regression.py +38 -0
  138. onedal/spmd/neighbors/__init__.py +19 -0
  139. onedal/spmd/neighbors/neighbors.py +75 -0
  140. onedal/svm/__init__.py +19 -0
  141. onedal/svm/svm.py +556 -0
  142. onedal/svm/tests/test_csr_svm.py +351 -0
  143. onedal/svm/tests/test_nusvc.py +204 -0
  144. onedal/svm/tests/test_nusvr.py +210 -0
  145. onedal/svm/tests/test_svc.py +176 -0
  146. onedal/svm/tests/test_svr.py +243 -0
  147. onedal/tests/test_common.py +57 -0
  148. onedal/tests/utils/_dataframes_support.py +162 -0
  149. onedal/tests/utils/_device_selection.py +102 -0
  150. onedal/utils/__init__.py +49 -0
  151. onedal/utils/_array_api.py +81 -0
  152. onedal/utils/_dpep_helpers.py +56 -0
  153. onedal/utils/tests/test_validation.py +142 -0
  154. onedal/utils/validation.py +464 -0
  155. scikit_learn_intelex-2025.4.0.dist-info/LICENSE.txt +202 -0
  156. scikit_learn_intelex-2025.4.0.dist-info/METADATA +190 -0
  157. scikit_learn_intelex-2025.4.0.dist-info/RECORD +282 -0
  158. scikit_learn_intelex-2025.4.0.dist-info/WHEEL +5 -0
  159. scikit_learn_intelex-2025.4.0.dist-info/top_level.txt +3 -0
  160. sklearnex/__init__.py +66 -0
  161. sklearnex/__main__.py +58 -0
  162. sklearnex/_config.py +116 -0
  163. sklearnex/_device_offload.py +126 -0
  164. sklearnex/_utils.py +177 -0
  165. sklearnex/basic_statistics/__init__.py +20 -0
  166. sklearnex/basic_statistics/basic_statistics.py +261 -0
  167. sklearnex/basic_statistics/incremental_basic_statistics.py +352 -0
  168. sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
  169. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
  170. sklearnex/cluster/__init__.py +20 -0
  171. sklearnex/cluster/dbscan.py +197 -0
  172. sklearnex/cluster/k_means.py +397 -0
  173. sklearnex/cluster/tests/test_dbscan.py +38 -0
  174. sklearnex/cluster/tests/test_kmeans.py +157 -0
  175. sklearnex/conftest.py +82 -0
  176. sklearnex/covariance/__init__.py +19 -0
  177. sklearnex/covariance/incremental_covariance.py +405 -0
  178. sklearnex/covariance/tests/test_incremental_covariance.py +287 -0
  179. sklearnex/decomposition/__init__.py +19 -0
  180. sklearnex/decomposition/pca.py +427 -0
  181. sklearnex/decomposition/tests/test_pca.py +58 -0
  182. sklearnex/dispatcher.py +534 -0
  183. sklearnex/doc/third-party-programs.txt +424 -0
  184. sklearnex/ensemble/__init__.py +29 -0
  185. sklearnex/ensemble/_forest.py +2029 -0
  186. sklearnex/ensemble/tests/test_forest.py +140 -0
  187. sklearnex/glob/__main__.py +72 -0
  188. sklearnex/glob/dispatcher.py +101 -0
  189. sklearnex/linear_model/__init__.py +32 -0
  190. sklearnex/linear_model/coordinate_descent.py +30 -0
  191. sklearnex/linear_model/incremental_linear.py +495 -0
  192. sklearnex/linear_model/incremental_ridge.py +432 -0
  193. sklearnex/linear_model/linear.py +346 -0
  194. sklearnex/linear_model/logistic_regression.py +415 -0
  195. sklearnex/linear_model/ridge.py +390 -0
  196. sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
  197. sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
  198. sklearnex/linear_model/tests/test_linear.py +142 -0
  199. sklearnex/linear_model/tests/test_logreg.py +134 -0
  200. sklearnex/linear_model/tests/test_ridge.py +256 -0
  201. sklearnex/manifold/__init__.py +19 -0
  202. sklearnex/manifold/t_sne.py +26 -0
  203. sklearnex/manifold/tests/test_tsne.py +250 -0
  204. sklearnex/metrics/__init__.py +23 -0
  205. sklearnex/metrics/pairwise.py +22 -0
  206. sklearnex/metrics/ranking.py +20 -0
  207. sklearnex/metrics/tests/test_metrics.py +39 -0
  208. sklearnex/model_selection/__init__.py +21 -0
  209. sklearnex/model_selection/split.py +22 -0
  210. sklearnex/model_selection/tests/test_model_selection.py +34 -0
  211. sklearnex/neighbors/__init__.py +27 -0
  212. sklearnex/neighbors/_lof.py +236 -0
  213. sklearnex/neighbors/common.py +310 -0
  214. sklearnex/neighbors/knn_classification.py +231 -0
  215. sklearnex/neighbors/knn_regression.py +207 -0
  216. sklearnex/neighbors/knn_unsupervised.py +178 -0
  217. sklearnex/neighbors/tests/test_neighbors.py +82 -0
  218. sklearnex/preview/__init__.py +17 -0
  219. sklearnex/preview/covariance/__init__.py +19 -0
  220. sklearnex/preview/covariance/covariance.py +142 -0
  221. sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  222. sklearnex/preview/decomposition/__init__.py +19 -0
  223. sklearnex/preview/decomposition/incremental_pca.py +244 -0
  224. sklearnex/preview/decomposition/tests/test_incremental_pca.py +336 -0
  225. sklearnex/spmd/__init__.py +25 -0
  226. sklearnex/spmd/basic_statistics/__init__.py +20 -0
  227. sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
  228. sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  229. sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  230. sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +306 -0
  231. sklearnex/spmd/cluster/__init__.py +30 -0
  232. sklearnex/spmd/cluster/dbscan.py +50 -0
  233. sklearnex/spmd/cluster/kmeans.py +21 -0
  234. sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  235. sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +173 -0
  236. sklearnex/spmd/covariance/__init__.py +20 -0
  237. sklearnex/spmd/covariance/covariance.py +21 -0
  238. sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  239. sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  240. sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  241. sklearnex/spmd/decomposition/__init__.py +20 -0
  242. sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  243. sklearnex/spmd/decomposition/pca.py +21 -0
  244. sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  245. sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  246. sklearnex/spmd/ensemble/__init__.py +19 -0
  247. sklearnex/spmd/ensemble/forest.py +71 -0
  248. sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  249. sklearnex/spmd/linear_model/__init__.py +21 -0
  250. sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  251. sklearnex/spmd/linear_model/linear_model.py +21 -0
  252. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  253. sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +331 -0
  254. sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  255. sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  256. sklearnex/spmd/neighbors/__init__.py +19 -0
  257. sklearnex/spmd/neighbors/neighbors.py +25 -0
  258. sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  259. sklearnex/svm/__init__.py +29 -0
  260. sklearnex/svm/_common.py +339 -0
  261. sklearnex/svm/nusvc.py +371 -0
  262. sklearnex/svm/nusvr.py +170 -0
  263. sklearnex/svm/svc.py +399 -0
  264. sklearnex/svm/svr.py +167 -0
  265. sklearnex/svm/tests/test_svm.py +93 -0
  266. sklearnex/tests/test_common.py +491 -0
  267. sklearnex/tests/test_config.py +123 -0
  268. sklearnex/tests/test_hyperparameters.py +43 -0
  269. sklearnex/tests/test_memory_usage.py +347 -0
  270. sklearnex/tests/test_monkeypatch.py +269 -0
  271. sklearnex/tests/test_n_jobs_support.py +108 -0
  272. sklearnex/tests/test_parallel.py +48 -0
  273. sklearnex/tests/test_patching.py +377 -0
  274. sklearnex/tests/test_run_to_run_stability.py +326 -0
  275. sklearnex/tests/utils/__init__.py +48 -0
  276. sklearnex/tests/utils/base.py +436 -0
  277. sklearnex/tests/utils/spmd.py +198 -0
  278. sklearnex/utils/__init__.py +19 -0
  279. sklearnex/utils/_array_api.py +82 -0
  280. sklearnex/utils/parallel.py +59 -0
  281. sklearnex/utils/tests/test_validation.py +238 -0
  282. sklearnex/utils/validation.py +208 -0
@@ -0,0 +1,256 @@
1
+ # ===============================================================================
2
+ # Copyright 2024 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ import numpy as np
18
+ import pytest
19
+ from numpy.testing import assert_allclose
20
+ from sklearn.exceptions import NotFittedError
21
+
22
+ from daal4py.sklearn._utils import daal_check_version
23
+ from daal4py.sklearn.linear_model.tests.test_ridge import (
24
+ _test_multivariate_ridge_alpha_shape,
25
+ _test_multivariate_ridge_coefficients,
26
+ )
27
+ from onedal.tests.utils._dataframes_support import (
28
+ _as_numpy,
29
+ _convert_to_dataframe,
30
+ get_dataframes_and_queues,
31
+ )
32
+
33
+
34
+ def _compute_ridge_coefficients(X, y, alpha, fit_intercept):
35
+ """
36
+ Computes Ridge regression coefficients for single or multiple target variables.
37
+
38
+ Parameters:
39
+ X : array-like of shape (n_samples, n_features)
40
+ Training data.
41
+ y : array-like of shape (n_samples,) or (n_samples, n_targets)
42
+ Target values.
43
+ alpha : float
44
+ Regularization strength.
45
+ fit_intercept : bool
46
+ Whether to calculate the intercept for this model.
47
+
48
+ Returns:
49
+ coeffs : ndarray of shape (n_features, n_targets)
50
+ Estimated coefficients for each target variable.
51
+ intercept : ndarray of shape (n_targets,)
52
+ Intercept terms for each target variable.
53
+ """
54
+ n_samples, n_features = X.shape
55
+ X_copy = X.copy()
56
+ y = np.asarray(y)
57
+
58
+ # making single-target y also multi-dim array for consistency
59
+ if y.ndim == 1:
60
+ y = y[:, np.newaxis]
61
+ n_targets = y.shape[1]
62
+
63
+ if fit_intercept:
64
+ # adding column of ones to X for the intercept term
65
+ X_copy = np.hstack([np.ones((n_samples, 1)), X])
66
+ identity_matrix = np.diag([0] + [1] * n_features)
67
+ else:
68
+ identity_matrix = np.eye(n_features)
69
+
70
+ # normal equation: (X^T * X + alpha * I) * w = X^T * y
71
+ A = X_copy.T @ X_copy + alpha * identity_matrix
72
+ b = X_copy.T @ y
73
+ coeffs = np.linalg.solve(A, b)
74
+
75
+ if fit_intercept:
76
+ intercept = coeffs[0, :] # Shape (n_targets,)
77
+ coeffs = coeffs[1:, :] # Shape (n_features, n_targets)
78
+ else:
79
+ intercept = np.zeros((n_targets,)) # Shape (n_targets,)
80
+
81
+ # in case of single target, flattening both coefficients and intercept
82
+ if n_targets == 1:
83
+ coeffs = coeffs.flatten()
84
+ intercept = intercept[0]
85
+ else:
86
+ coeffs = coeffs.T
87
+
88
+ return coeffs, intercept
89
+
90
+
91
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
92
+ def test_sklearnex_import_ridge(dataframe, queue):
93
+ from sklearnex.linear_model import Ridge
94
+
95
+ X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
96
+ y = np.dot(X, np.array([1, 2])) + 3
97
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
98
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
99
+ ridge_reg = Ridge(alpha=0.5).fit(X_c, y_c)
100
+
101
+ if daal_check_version((2024, "P", 600)):
102
+ assert (
103
+ "sklearnex" in ridge_reg.__module__ and "preview" not in ridge_reg.__module__
104
+ )
105
+ else:
106
+ assert "daal4py" in ridge_reg.__module__
107
+
108
+ assert_allclose(ridge_reg.intercept_, 3.86, rtol=1e-2)
109
+ assert_allclose(ridge_reg.coef_, [0.91, 1.64], rtol=1e-2)
110
+
111
+
112
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
113
+ @pytest.mark.parametrize("sample_size", [100, 1000])
114
+ @pytest.mark.parametrize("feature_size", [10, 50])
115
+ @pytest.mark.parametrize("alpha", [0.1, 0.5, 1.0])
116
+ @pytest.mark.parametrize("fit_intercept", [True, False])
117
+ def test_ridge_coefficients(
118
+ dataframe, queue, sample_size, feature_size, alpha, fit_intercept
119
+ ):
120
+ from sklearnex.linear_model import Ridge
121
+
122
+ X = np.random.rand(sample_size, feature_size)
123
+ y = np.random.rand(sample_size)
124
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
125
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
126
+ ridge_reg = Ridge(fit_intercept=fit_intercept, alpha=alpha).fit(X_c, y_c)
127
+
128
+ coefficients_manual, intercept_manual = _compute_ridge_coefficients(
129
+ X, y, alpha, fit_intercept=fit_intercept
130
+ )
131
+
132
+ assert_allclose(ridge_reg.coef_, coefficients_manual, rtol=1e-6, atol=1e-6)
133
+ assert_allclose(ridge_reg.intercept_, intercept_manual, rtol=1e-6, atol=1e-6)
134
+
135
+
136
+ @pytest.mark.skipif(
137
+ not daal_check_version((2024, "P", 600)), reason="requires onedal 2024.6.0 or higher"
138
+ )
139
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
140
+ def test_ridge_score_before_fit(dataframe, queue):
141
+ from sklearnex.linear_model import Ridge
142
+
143
+ sample_count, feature_count = 10, 5
144
+
145
+ model = Ridge(fit_intercept=True, alpha=0.5)
146
+
147
+ X, y = np.random.rand(sample_count, feature_count), np.random.rand(sample_count)
148
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
149
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
150
+
151
+ with pytest.raises(NotFittedError):
152
+ model.score(X_c, y_c)
153
+
154
+
155
+ @pytest.mark.skipif(
156
+ not daal_check_version((2024, "P", 600)), reason="requires onedal 2024.6.0 or higher"
157
+ )
158
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
159
+ def test_ridge_predict_before_fit(dataframe, queue):
160
+ from sklearnex.linear_model import Ridge
161
+
162
+ sample_count, feature_count = 10, 5
163
+
164
+ model = Ridge(fit_intercept=True, alpha=0.5)
165
+
166
+ X = np.random.rand(sample_count, feature_count)
167
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
168
+
169
+ with pytest.raises(NotFittedError):
170
+ model.predict(X_c)
171
+
172
+
173
+ @pytest.mark.skip(reason="Forced to use original sklearn for now.")
174
+ def test_sklearnex_multivariate_ridge_coefs():
175
+ from sklearnex.linear_model import Ridge
176
+
177
+ _test_multivariate_ridge_coefficients(Ridge, random_state=0)
178
+
179
+
180
+ @pytest.mark.skip(reason="Forced to use original sklearn for now.")
181
+ def test_sklearnex_multivariate_ridge_alpha_shape():
182
+ from sklearnex.linear_model import Ridge
183
+
184
+ _test_multivariate_ridge_alpha_shape(Ridge, random_state=0)
185
+
186
+
187
+ @pytest.mark.skipif(
188
+ not daal_check_version((2025, "P", 100)), reason="requires onedal 2025.1.0 or higher"
189
+ )
190
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
191
+ @pytest.mark.parametrize("overdetermined", [True, False])
192
+ @pytest.mark.parametrize("alpha", [0.00001, 0.1, 1.0])
193
+ @pytest.mark.parametrize("fit_intercept", [True, False])
194
+ def test_ridge_overdetermined_system(
195
+ dataframe, queue, overdetermined, alpha, fit_intercept
196
+ ):
197
+ from sklearnex.linear_model import Ridge
198
+
199
+ if overdetermined:
200
+ X = np.random.rand(100, 10)
201
+ y = np.random.rand(100)
202
+ else:
203
+ X = np.random.rand(10, 100)
204
+ y = np.random.rand(10)
205
+
206
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
207
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
208
+ ridge_reg = Ridge(alpha=alpha, fit_intercept=fit_intercept).fit(X_c, y_c)
209
+
210
+ coefficients_manual, intercept_manual = _compute_ridge_coefficients(
211
+ X, y, alpha, fit_intercept=fit_intercept
212
+ )
213
+
214
+ assert_allclose(ridge_reg.coef_, coefficients_manual, rtol=1e-6, atol=1e-6)
215
+ assert_allclose(ridge_reg.intercept_, intercept_manual, rtol=1e-6, atol=1e-6)
216
+
217
+
218
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
219
+ @pytest.mark.parametrize("fit_intercept", [True, False])
220
+ @pytest.mark.parametrize("alpha", [0.1, 0.5, 1.0])
221
+ def test_multivariate_ridge_scalar_alpha(dataframe, queue, fit_intercept, alpha):
222
+ from sklearn.datasets import make_regression
223
+
224
+ from sklearnex.linear_model import Ridge
225
+
226
+ X, y = make_regression(n_samples=10, n_features=3, n_targets=3, random_state=0)
227
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
228
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
229
+ ridge = Ridge(alpha=alpha, fit_intercept=fit_intercept)
230
+ ridge.fit(X_c, y_c)
231
+
232
+ coef_manual, intercept = _compute_ridge_coefficients(X, y, alpha, fit_intercept)
233
+ assert_allclose(ridge.coef_, coef_manual, rtol=1e-6, atol=1e-6)
234
+ assert_allclose(ridge.intercept_, intercept, rtol=1e-6, atol=1e-6)
235
+
236
+ predictions = _as_numpy(ridge.predict(X_c))
237
+ predictions_manual = X @ coef_manual.T + intercept
238
+ assert_allclose(predictions, predictions_manual, rtol=1e-6, atol=1e-6)
239
+
240
+
241
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
242
+ def test_underdetermined_positive_alpha_ridge(dataframe, queue):
243
+ from sklearn.datasets import make_regression
244
+
245
+ from sklearnex.linear_model import Ridge
246
+
247
+ X, y = make_regression(n_samples=5, n_features=6, n_targets=1, random_state=0)
248
+ alpha = 1.0
249
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
250
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
251
+ ridge = Ridge(alpha=alpha, fit_intercept=True).fit(X_c, y_c)
252
+
253
+ coef_manual, intercept = _compute_ridge_coefficients(X, y, alpha, fit_intercept=True)
254
+
255
+ assert_allclose(ridge.coef_, coef_manual, rtol=1e-6, atol=1e-6)
256
+ assert_allclose(ridge.intercept_, intercept, rtol=1e-6, atol=1e-6)
@@ -0,0 +1,19 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from .t_sne import TSNE
18
+
19
+ __all__ = ["TSNE"]
@@ -0,0 +1,26 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
18
+ from daal4py.sklearn.manifold import TSNE
19
+ from onedal._device_offload import support_input_format
20
+
21
+ from .._utils import PatchableEstimator
22
+
23
+ TSNE.fit = support_input_format(queue_param=False)(TSNE.fit)
24
+ TSNE.fit_transform = support_input_format(queue_param=False)(TSNE.fit_transform)
25
+ TSNE._doc_link_module = "daal4py"
26
+ TSNE._doc_link_template = PatchableEstimator._doc_link_template
@@ -0,0 +1,250 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ import numpy as np
18
+ import pytest
19
+ from numpy.testing import assert_allclose
20
+ from sklearn.metrics.pairwise import pairwise_distances
21
+
22
+ # Note: n_components must be 2 for now
23
+ from onedal.tests.utils._dataframes_support import (
24
+ _as_numpy,
25
+ _convert_to_dataframe,
26
+ get_dataframes_and_queues,
27
+ )
28
+
29
+
30
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
31
+ def test_sklearnex_import(dataframe, queue):
32
+ """Test TSNE compatibility with different backends and queues, and validate sklearnex module."""
33
+ from sklearnex.manifold import TSNE
34
+
35
+ X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
36
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
37
+ tsne = TSNE(n_components=2, perplexity=2.0, random_state=42, init="pca").fit(X_df)
38
+ embedding = tsne.fit_transform(X_df)
39
+ embedding = _as_numpy(embedding)
40
+ assert "daal4py" in tsne.__module__
41
+ assert tsne.n_components == 2
42
+ assert tsne.perplexity == 2.0
43
+ assert tsne.random_state == 42
44
+ assert tsne.init == "pca"
45
+
46
+
47
+ @pytest.mark.parametrize(
48
+ "X_generator,n_components,perplexity,expected_shape,should_raise",
49
+ [
50
+ pytest.param(
51
+ lambda rng: np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]]),
52
+ 2,
53
+ 2.0,
54
+ (4, 2),
55
+ False,
56
+ id="Basic functionality",
57
+ ),
58
+ pytest.param(
59
+ lambda rng: rng.random((100, 10)),
60
+ 2,
61
+ 30.0,
62
+ (100, 2),
63
+ False,
64
+ id="Random data",
65
+ ),
66
+ pytest.param(
67
+ lambda rng: np.array([[0, 0], [1, 1], [2, 2]]),
68
+ 2,
69
+ 2.0,
70
+ (3, 2),
71
+ False,
72
+ id="Valid minimal data",
73
+ ),
74
+ pytest.param(
75
+ lambda rng: np.empty((0, 10)),
76
+ 2,
77
+ 5.0,
78
+ None,
79
+ True,
80
+ id="Empty data",
81
+ ),
82
+ pytest.param(
83
+ lambda rng: np.array([[0, 0], [1, np.nan], [2, np.inf]]),
84
+ 2,
85
+ 5.0,
86
+ None,
87
+ True,
88
+ id="Data with NaN/Inf",
89
+ ),
90
+ pytest.param(
91
+ lambda rng: rng.random((50, 500)) * (rng.random((50, 500)) > 0.99),
92
+ 2,
93
+ 30.0,
94
+ (50, 2),
95
+ False,
96
+ id="Sparse-like high-dimensional data",
97
+ ),
98
+ pytest.param(
99
+ lambda rng: np.hstack(
100
+ [
101
+ np.ones((50, 1)), # First column is 1
102
+ rng.random((50, 499)) * (rng.random((50, 499)) > 0.99),
103
+ ]
104
+ ),
105
+ 2,
106
+ 30.0,
107
+ (50, 2),
108
+ False,
109
+ id="Sparse-like data with constant column",
110
+ ),
111
+ pytest.param(
112
+ lambda rng: np.where(
113
+ np.arange(50 * 500).reshape(50, 500) % 10 == 0, 0, rng.random((50, 500))
114
+ ),
115
+ 2,
116
+ 30.0,
117
+ (50, 2),
118
+ False,
119
+ id="Sparse-like data with every tenth element zero",
120
+ ),
121
+ pytest.param(
122
+ lambda rng: rng.random((10, 5)),
123
+ 2,
124
+ 0.5,
125
+ (10, 2),
126
+ False,
127
+ id="Extremely low perplexity",
128
+ ),
129
+ ],
130
+ )
131
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
132
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
133
+ def test_tsne_functionality_and_edge_cases(
134
+ X_generator,
135
+ n_components,
136
+ perplexity,
137
+ expected_shape,
138
+ should_raise,
139
+ dataframe,
140
+ queue,
141
+ dtype,
142
+ ):
143
+ from sklearnex.manifold import TSNE
144
+
145
+ rng = np.random.default_rng(
146
+ seed=42
147
+ ) # Use generator to ensure independent dataset per test
148
+ X = X_generator(rng)
149
+ X = X.astype(dtype) if X.size > 0 else X
150
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
151
+
152
+ if should_raise:
153
+ with pytest.raises(ValueError):
154
+ TSNE(n_components=n_components, perplexity=perplexity).fit_transform(X_df)
155
+ else:
156
+ tsne = TSNE(n_components=n_components, perplexity=perplexity, random_state=42)
157
+ embedding = tsne.fit_transform(X_df)
158
+ embedding = _as_numpy(embedding)
159
+ assert embedding.shape == expected_shape
160
+ assert np.all(np.isfinite(embedding))
161
+ assert np.any(embedding != 0)
162
+
163
+
164
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
165
+ @pytest.mark.parametrize("init", ["pca", "random"])
166
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
167
+ def test_tsne_constant_data(init, dataframe, queue, dtype):
168
+ from sklearnex.manifold import TSNE
169
+
170
+ X = np.ones((10, 10), dtype=dtype)
171
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
172
+ tsne = TSNE(n_components=2, init=init, perplexity=5, random_state=42)
173
+ embedding = tsne.fit_transform(X_df)
174
+ embedding = _as_numpy(embedding)
175
+ assert embedding.shape == (10, 2)
176
+ if init == "pca":
177
+ assert np.isclose(embedding[:, 0].std(), 0, atol=1e-6) # Constant first dimension
178
+ assert np.allclose(embedding[:, 1], 0, atol=1e-6) # Zero second dimension
179
+ elif init == "random":
180
+ assert np.all(np.isfinite(embedding))
181
+
182
+
183
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
184
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
185
+ def test_tsne_reproducibility(dataframe, queue, dtype):
186
+ from sklearnex.manifold import TSNE
187
+
188
+ rng = np.random.default_rng(seed=42)
189
+ X = rng.random((50, 10)).astype(dtype)
190
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
191
+ tsne_1 = TSNE(n_components=2, random_state=42).fit_transform(X_df)
192
+ tsne_2 = TSNE(n_components=2, random_state=42).fit_transform(X_df)
193
+ # in case of dpctl.tensor.usm_ndarray covert to numpy array
194
+ tsne_1 = _as_numpy(tsne_1)
195
+ tsne_2 = _as_numpy(tsne_2)
196
+ assert_allclose(tsne_1, tsne_2, rtol=1e-5)
197
+
198
+
199
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
200
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
201
+ def test_tsne_complex_and_gpu_validation(dataframe, queue, dtype):
202
+ from sklearnex.manifold import TSNE
203
+
204
+ X = np.array(
205
+ [
206
+ [1, 1, 1, 1],
207
+ [1.1, 1.1, 1.1, 1.1],
208
+ [0.9, 0.9, 0.9, 0.9],
209
+ [2e9, 2e-9, -2e9, -2e-9],
210
+ [5e-5, 5e5, -5e-5, -5e5],
211
+ [9e-7, -9e7, 9e-7, -9e7],
212
+ [1, -1, 1, -1],
213
+ [-1e-9, 1e-9, -1e-9, 1e-9],
214
+ [42, 42, 42, 42],
215
+ [8, -8, 8e8, -8e-8],
216
+ [1e-3, 1e3, -1e3, -1e-3],
217
+ [0, 1e9, -1e-9, 1],
218
+ [0, 0, 1, -1],
219
+ [0, 0, 0, 0],
220
+ [-1e5, 0, 1e5, -1],
221
+ [1, 0, -1e8, 1e8],
222
+ ]
223
+ )
224
+ n_components = 2
225
+ perplexity = 3.0
226
+ expected_shape = (16, 2)
227
+
228
+ X = X.astype(dtype)
229
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
230
+ tsne = TSNE(n_components=n_components, perplexity=perplexity, random_state=42)
231
+ embedding = tsne.fit_transform(X_df)
232
+
233
+ # Validate results
234
+ assert embedding.shape == expected_shape
235
+ embedding = _as_numpy(embedding)
236
+ assert np.all(np.isfinite(embedding))
237
+ assert np.any(embedding != 0)
238
+
239
+ # Ensure close points in original space remain close in embedding
240
+ group_a_indices = [0, 1, 2] # Hardcoded index of similar points
241
+ group_b_indices = [3, 4, 5] # Hardcoded index of dissimilar points from a
242
+ embedding_distances = pairwise_distances(
243
+ X, metric="euclidean"
244
+ ) # Get an array of distance where [i, j] is distance b/t i and j
245
+ # Check for distance b/t two points in group A < distance of this point and any point in group B
246
+ for i in group_a_indices:
247
+ for j in group_a_indices:
248
+ assert (
249
+ embedding_distances[i, j] < embedding_distances[i, group_b_indices].min()
250
+ ), f"Point {i} in Group A is closer to a point in Group B than to another point in Group A."
@@ -0,0 +1,23 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from .pairwise import pairwise_distances
18
+ from .ranking import roc_auc_score
19
+
20
+ __all__ = [
21
+ "roc_auc_score",
22
+ "pairwise_distances",
23
+ ]
@@ -0,0 +1,22 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from daal4py.sklearn.metrics import pairwise_distances
18
+ from onedal._device_offload import support_input_format
19
+
20
+ pairwise_distances = support_input_format(freefunc=True, queue_param=False)(
21
+ pairwise_distances
22
+ )
@@ -0,0 +1,20 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from daal4py.sklearn.metrics import roc_auc_score
18
+ from onedal._device_offload import support_input_format
19
+
20
+ roc_auc_score = support_input_format(freefunc=True, queue_param=False)(roc_auc_score)
@@ -0,0 +1,39 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ import numpy as np
18
+ from numpy.testing import assert_allclose
19
+ from sklearn.datasets import load_breast_cancer
20
+
21
+
22
+ def test_sklearnex_import_roc_auc():
23
+ from sklearnex.linear_model import LogisticRegression
24
+ from sklearnex.metrics import roc_auc_score
25
+
26
+ X, y = load_breast_cancer(return_X_y=True)
27
+ clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y)
28
+ res = roc_auc_score(y, clf.decision_function(X))
29
+ assert_allclose(res, 0.99, atol=1e-2)
30
+
31
+
32
+ def test_sklearnex_import_pairwise_distances():
33
+ from sklearnex.metrics import pairwise_distances
34
+
35
+ rng = np.random.RandomState(0)
36
+ x = np.abs(rng.rand(4), dtype=np.float64)
37
+ x = np.vstack([x, x])
38
+ res = pairwise_distances(x, metric="cosine")
39
+ assert_allclose(res, [[0.0, 0.0], [0.0, 0.0]], atol=1e-2)
@@ -0,0 +1,21 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from .split import train_test_split
18
+
19
+ __all__ = [
20
+ "train_test_split",
21
+ ]