scikit-learn-intelex 2024.1.0__py311-none-manylinux1_x86_64.whl → 2024.4.0__py311-none-manylinux1_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 (62) hide show
  1. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/METADATA +2 -2
  2. scikit_learn_intelex-2024.4.0.dist-info/RECORD +101 -0
  3. sklearnex/__init__.py +9 -7
  4. sklearnex/_device_offload.py +31 -4
  5. sklearnex/basic_statistics/__init__.py +2 -1
  6. sklearnex/basic_statistics/incremental_basic_statistics.py +288 -0
  7. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +386 -0
  8. sklearnex/cluster/dbscan.py +6 -4
  9. sklearnex/conftest.py +63 -0
  10. sklearnex/{preview/decomposition → covariance}/__init__.py +19 -19
  11. sklearnex/covariance/incremental_covariance.py +130 -0
  12. sklearnex/covariance/tests/test_incremental_covariance.py +143 -0
  13. sklearnex/decomposition/pca.py +319 -1
  14. sklearnex/decomposition/tests/test_pca.py +34 -5
  15. sklearnex/dispatcher.py +93 -61
  16. sklearnex/ensemble/_forest.py +81 -97
  17. sklearnex/ensemble/tests/test_forest.py +15 -19
  18. sklearnex/linear_model/__init__.py +1 -2
  19. sklearnex/linear_model/linear.py +275 -347
  20. sklearnex/{preview/linear_model → linear_model}/logistic_regression.py +83 -50
  21. sklearnex/linear_model/tests/test_linear.py +40 -5
  22. sklearnex/linear_model/tests/test_logreg.py +70 -7
  23. sklearnex/neighbors/__init__.py +1 -1
  24. sklearnex/neighbors/_lof.py +221 -0
  25. sklearnex/neighbors/common.py +4 -1
  26. sklearnex/neighbors/knn_classification.py +47 -137
  27. sklearnex/neighbors/knn_regression.py +20 -132
  28. sklearnex/neighbors/knn_unsupervised.py +16 -93
  29. sklearnex/neighbors/tests/test_neighbors.py +12 -16
  30. sklearnex/preview/__init__.py +1 -1
  31. sklearnex/preview/cluster/k_means.py +8 -81
  32. sklearnex/preview/covariance/covariance.py +51 -16
  33. sklearnex/preview/covariance/tests/test_covariance.py +18 -5
  34. sklearnex/spmd/__init__.py +1 -0
  35. sklearnex/{preview/linear_model → spmd/covariance}/__init__.py +5 -5
  36. sklearnex/spmd/covariance/covariance.py +21 -0
  37. sklearnex/spmd/ensemble/forest.py +4 -12
  38. sklearnex/spmd/linear_model/__init__.py +2 -1
  39. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  40. sklearnex/svm/_common.py +4 -7
  41. sklearnex/svm/nusvc.py +74 -55
  42. sklearnex/svm/nusvr.py +9 -56
  43. sklearnex/svm/svc.py +74 -56
  44. sklearnex/svm/svr.py +6 -53
  45. sklearnex/tests/_utils.py +164 -0
  46. sklearnex/tests/test_memory_usage.py +9 -7
  47. sklearnex/tests/test_monkeypatch.py +179 -138
  48. sklearnex/tests/test_n_jobs_support.py +77 -9
  49. sklearnex/tests/test_parallel.py +6 -8
  50. sklearnex/tests/test_patching.py +338 -89
  51. sklearnex/utils/__init__.py +2 -1
  52. sklearnex/utils/_namespace.py +97 -0
  53. scikit_learn_intelex-2024.1.0.dist-info/RECORD +0 -97
  54. sklearnex/neighbors/lof.py +0 -436
  55. sklearnex/preview/decomposition/pca.py +0 -376
  56. sklearnex/preview/decomposition/tests/test_preview_pca.py +0 -42
  57. sklearnex/preview/linear_model/tests/test_preview_logistic_regression.py +0 -59
  58. sklearnex/tests/_models_info.py +0 -170
  59. sklearnex/tests/utils/_launch_algorithms.py +0 -118
  60. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/LICENSE.txt +0 -0
  61. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/WHEEL +0 -0
  62. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/top_level.txt +0 -0
@@ -14,136 +14,30 @@
14
14
  # limitations under the License.
15
15
  # ===============================================================================
16
16
 
17
- import warnings
18
-
19
- from sklearn.neighbors._ball_tree import BallTree
20
- from sklearn.neighbors._base import NeighborsBase as sklearn_NeighborsBase
21
- from sklearn.neighbors._kd_tree import KDTree
22
-
23
- from daal4py.sklearn._utils import control_n_jobs, run_with_n_jobs, sklearn_check_version
24
-
25
- if not sklearn_check_version("1.2"):
26
- from sklearn.neighbors._base import _check_weights
27
-
28
- import numpy as np
29
- from sklearn.neighbors._base import VALID_METRICS
17
+ from sklearn.metrics import accuracy_score
30
18
  from sklearn.neighbors._classification import (
31
19
  KNeighborsClassifier as sklearn_KNeighborsClassifier,
32
20
  )
33
21
  from sklearn.neighbors._unsupervised import NearestNeighbors as sklearn_NearestNeighbors
34
22
  from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
35
23
 
24
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
25
+ from daal4py.sklearn._utils import sklearn_check_version
36
26
  from onedal.neighbors import KNeighborsClassifier as onedal_KNeighborsClassifier
37
- from onedal.utils import _check_array, _num_features, _num_samples
38
27
 
39
28
  from .._device_offload import dispatch, wrap_output_data
40
29
  from .common import KNeighborsDispatchingBase
41
30
 
42
- if sklearn_check_version("0.24"):
43
31
 
44
- class KNeighborsClassifier_(sklearn_KNeighborsClassifier):
45
- if sklearn_check_version("1.2"):
46
- _parameter_constraints: dict = {
47
- **sklearn_KNeighborsClassifier._parameter_constraints
48
- }
49
-
50
- @_deprecate_positional_args
51
- def __init__(
52
- self,
53
- n_neighbors=5,
54
- *,
55
- weights="uniform",
56
- algorithm="auto",
57
- leaf_size=30,
58
- p=2,
59
- metric="minkowski",
60
- metric_params=None,
61
- n_jobs=None,
62
- **kwargs,
63
- ):
64
- super().__init__(
65
- n_neighbors=n_neighbors,
66
- algorithm=algorithm,
67
- leaf_size=leaf_size,
68
- metric=metric,
69
- p=p,
70
- metric_params=metric_params,
71
- n_jobs=n_jobs,
72
- **kwargs,
73
- )
74
- self.weights = (
75
- weights if sklearn_check_version("1.0") else _check_weights(weights)
76
- )
77
-
78
- elif sklearn_check_version("0.22"):
79
- from sklearn.neighbors._base import (
80
- SupervisedIntegerMixin as BaseSupervisedIntegerMixin,
81
- )
82
-
83
- class KNeighborsClassifier_(sklearn_KNeighborsClassifier, BaseSupervisedIntegerMixin):
84
- @_deprecate_positional_args
85
- def __init__(
86
- self,
87
- n_neighbors=5,
88
- *,
89
- weights="uniform",
90
- algorithm="auto",
91
- leaf_size=30,
92
- p=2,
93
- metric="minkowski",
94
- metric_params=None,
95
- n_jobs=None,
96
- **kwargs,
97
- ):
98
- super().__init__(
99
- n_neighbors=n_neighbors,
100
- algorithm=algorithm,
101
- leaf_size=leaf_size,
102
- metric=metric,
103
- p=p,
104
- metric_params=metric_params,
105
- n_jobs=n_jobs,
106
- **kwargs,
107
- )
108
- self.weights = _check_weights(weights)
109
-
110
- else:
111
- from sklearn.neighbors.base import (
112
- SupervisedIntegerMixin as BaseSupervisedIntegerMixin,
113
- )
114
-
115
- class KNeighborsClassifier_(sklearn_KNeighborsClassifier, BaseSupervisedIntegerMixin):
116
- @_deprecate_positional_args
117
- def __init__(
118
- self,
119
- n_neighbors=5,
120
- *,
121
- weights="uniform",
122
- algorithm="auto",
123
- leaf_size=30,
124
- p=2,
125
- metric="minkowski",
126
- metric_params=None,
127
- n_jobs=None,
128
- **kwargs,
129
- ):
130
- super().__init__(
131
- n_neighbors=n_neighbors,
132
- algorithm=algorithm,
133
- leaf_size=leaf_size,
134
- metric=metric,
135
- p=p,
136
- metric_params=metric_params,
137
- n_jobs=n_jobs,
138
- **kwargs,
139
- )
140
- self.weights = _check_weights(weights)
141
-
142
-
143
- @control_n_jobs
144
- class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
32
+ @control_n_jobs(
33
+ decorated_methods=["fit", "predict", "predict_proba", "kneighbors", "score"]
34
+ )
35
+ class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBase):
36
+ __doc__ = sklearn_KNeighborsClassifier.__doc__
145
37
  if sklearn_check_version("1.2"):
146
- _parameter_constraints: dict = {**KNeighborsClassifier_._parameter_constraints}
38
+ _parameter_constraints: dict = {
39
+ **sklearn_KNeighborsClassifier._parameter_constraints
40
+ }
147
41
 
148
42
  if sklearn_check_version("1.0"):
149
43
 
@@ -199,7 +93,6 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
199
93
  )
200
94
 
201
95
  def fit(self, X, y):
202
- self._fit_validation(X, y)
203
96
  dispatch(
204
97
  self,
205
98
  "fit",
@@ -243,10 +136,27 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
243
136
  )
244
137
 
245
138
  @wrap_output_data
246
- def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
139
+ def score(self, X, y, sample_weight=None):
247
140
  check_is_fitted(self)
248
141
  if sklearn_check_version("1.0"):
249
142
  self._check_feature_names(X, reset=False)
143
+ return dispatch(
144
+ self,
145
+ "score",
146
+ {
147
+ "onedal": self.__class__._onedal_score,
148
+ "sklearn": sklearn_KNeighborsClassifier.score,
149
+ },
150
+ X,
151
+ y,
152
+ sample_weight=sample_weight,
153
+ )
154
+
155
+ @wrap_output_data
156
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
157
+ check_is_fitted(self)
158
+ if sklearn_check_version("1.0") and X is not None:
159
+ self._check_feature_names(X, reset=False)
250
160
  return dispatch(
251
161
  self,
252
162
  "kneighbors",
@@ -255,8 +165,8 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
255
165
  "sklearn": sklearn_KNeighborsClassifier.kneighbors,
256
166
  },
257
167
  X,
258
- n_neighbors,
259
- return_distance,
168
+ n_neighbors=n_neighbors,
169
+ return_distance=return_distance,
260
170
  )
261
171
 
262
172
  @wrap_output_data
@@ -270,22 +180,13 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
270
180
  or getattr(self, "_tree", 0) is None
271
181
  and self._fit_method == "kd_tree"
272
182
  ):
273
- if sklearn_check_version("0.24"):
274
- sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
275
- else:
276
- sklearn_NearestNeighbors.fit(self, self._fit_X)
277
- if sklearn_check_version("0.22"):
278
- result = sklearn_NearestNeighbors.radius_neighbors(
279
- self, X, radius, return_distance, sort_results
280
- )
281
- else:
282
- result = sklearn_NearestNeighbors.radius_neighbors(
283
- self, X, radius, return_distance
284
- )
183
+ sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
184
+ result = sklearn_NearestNeighbors.radius_neighbors(
185
+ self, X, radius, return_distance, sort_results
186
+ )
285
187
 
286
188
  return result
287
189
 
288
- @run_with_n_jobs
289
190
  def _onedal_fit(self, X, y, queue=None):
290
191
  onedal_params = {
291
192
  "n_neighbors": self.n_neighbors,
@@ -308,15 +209,12 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
308
209
 
309
210
  self._save_attributes()
310
211
 
311
- @run_with_n_jobs
312
212
  def _onedal_predict(self, X, queue=None):
313
213
  return self._onedal_estimator.predict(X, queue=queue)
314
214
 
315
- @run_with_n_jobs
316
215
  def _onedal_predict_proba(self, X, queue=None):
317
216
  return self._onedal_estimator.predict_proba(X, queue=queue)
318
217
 
319
- @run_with_n_jobs
320
218
  def _onedal_kneighbors(
321
219
  self, X=None, n_neighbors=None, return_distance=True, queue=None
322
220
  ):
@@ -324,6 +222,11 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
324
222
  X, n_neighbors, return_distance, queue=queue
325
223
  )
326
224
 
225
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
226
+ return accuracy_score(
227
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
228
+ )
229
+
327
230
  def _save_attributes(self):
328
231
  self.classes_ = self._onedal_estimator.classes_
329
232
  self.n_features_in_ = self._onedal_estimator.n_features_in_
@@ -333,3 +236,10 @@ class KNeighborsClassifier(KNeighborsClassifier_, KNeighborsDispatchingBase):
333
236
  self._fit_method = self._onedal_estimator._fit_method
334
237
  self.outputs_2d_ = self._onedal_estimator.outputs_2d_
335
238
  self._tree = self._onedal_estimator._tree
239
+
240
+ fit.__doc__ = sklearn_KNeighborsClassifier.fit.__doc__
241
+ predict.__doc__ = sklearn_KNeighborsClassifier.predict.__doc__
242
+ predict_proba.__doc__ = sklearn_KNeighborsClassifier.predict_proba.__doc__
243
+ score.__doc__ = sklearn_KNeighborsClassifier.score.__doc__
244
+ kneighbors.__doc__ = sklearn_KNeighborsClassifier.kneighbors.__doc__
245
+ radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
@@ -14,132 +14,27 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
- import warnings
18
-
19
- from sklearn.neighbors._ball_tree import BallTree
20
- from sklearn.neighbors._base import NeighborsBase as sklearn_NeighborsBase
21
- from sklearn.neighbors._kd_tree import KDTree
22
-
23
- from daal4py.sklearn._utils import control_n_jobs, run_with_n_jobs, sklearn_check_version
24
-
25
- if not sklearn_check_version("1.2"):
26
- from sklearn.neighbors._base import _check_weights
27
-
28
- import numpy as np
29
- from sklearn.neighbors._base import VALID_METRICS
30
17
  from sklearn.neighbors._regression import (
31
18
  KNeighborsRegressor as sklearn_KNeighborsRegressor,
32
19
  )
33
20
  from sklearn.neighbors._unsupervised import NearestNeighbors as sklearn_NearestNeighbors
34
21
  from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
35
22
 
23
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
24
+ from daal4py.sklearn._utils import sklearn_check_version
36
25
  from onedal.neighbors import KNeighborsRegressor as onedal_KNeighborsRegressor
37
- from onedal.utils import _check_array, _num_features, _num_samples
38
26
 
39
27
  from .._device_offload import dispatch, wrap_output_data
40
28
  from .common import KNeighborsDispatchingBase
41
29
 
42
- if sklearn_check_version("0.24"):
43
-
44
- class KNeighborsRegressor_(sklearn_KNeighborsRegressor):
45
- if sklearn_check_version("1.2"):
46
- _parameter_constraints: dict = {
47
- **sklearn_KNeighborsRegressor._parameter_constraints
48
- }
49
-
50
- @_deprecate_positional_args
51
- def __init__(
52
- self,
53
- n_neighbors=5,
54
- *,
55
- weights="uniform",
56
- algorithm="auto",
57
- leaf_size=30,
58
- p=2,
59
- metric="minkowski",
60
- metric_params=None,
61
- n_jobs=None,
62
- **kwargs,
63
- ):
64
- super().__init__(
65
- n_neighbors=n_neighbors,
66
- algorithm=algorithm,
67
- leaf_size=leaf_size,
68
- metric=metric,
69
- p=p,
70
- metric_params=metric_params,
71
- n_jobs=n_jobs,
72
- **kwargs,
73
- )
74
- self.weights = (
75
- weights if sklearn_check_version("1.0") else _check_weights(weights)
76
- )
77
-
78
- elif sklearn_check_version("0.22"):
79
- from sklearn.neighbors._base import SupervisedFloatMixin as BaseSupervisedFloatMixin
80
-
81
- class KNeighborsRegressor_(sklearn_KNeighborsRegressor, BaseSupervisedFloatMixin):
82
- @_deprecate_positional_args
83
- def __init__(
84
- self,
85
- n_neighbors=5,
86
- *,
87
- weights="uniform",
88
- algorithm="auto",
89
- leaf_size=30,
90
- p=2,
91
- metric="minkowski",
92
- metric_params=None,
93
- n_jobs=None,
94
- **kwargs,
95
- ):
96
- super().__init__(
97
- n_neighbors=n_neighbors,
98
- algorithm=algorithm,
99
- leaf_size=leaf_size,
100
- metric=metric,
101
- p=p,
102
- metric_params=metric_params,
103
- n_jobs=n_jobs,
104
- **kwargs,
105
- )
106
- self.weights = _check_weights(weights)
107
-
108
- else:
109
- from sklearn.neighbors.base import SupervisedFloatMixin as BaseSupervisedFloatMixin
110
30
 
111
- class KNeighborsRegressor_(sklearn_KNeighborsRegressor, BaseSupervisedFloatMixin):
112
- @_deprecate_positional_args
113
- def __init__(
114
- self,
115
- n_neighbors=5,
116
- *,
117
- weights="uniform",
118
- algorithm="auto",
119
- leaf_size=30,
120
- p=2,
121
- metric="minkowski",
122
- metric_params=None,
123
- n_jobs=None,
124
- **kwargs,
125
- ):
126
- super().__init__(
127
- n_neighbors=n_neighbors,
128
- algorithm=algorithm,
129
- leaf_size=leaf_size,
130
- metric=metric,
131
- p=p,
132
- metric_params=metric_params,
133
- n_jobs=n_jobs,
134
- **kwargs,
135
- )
136
- self.weights = _check_weights(weights)
137
-
138
-
139
- @control_n_jobs
140
- class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
31
+ @control_n_jobs(decorated_methods=["fit", "predict", "kneighbors"])
32
+ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase):
33
+ __doc__ = sklearn_KNeighborsRegressor.__doc__
141
34
  if sklearn_check_version("1.2"):
142
- _parameter_constraints: dict = {**KNeighborsRegressor_._parameter_constraints}
35
+ _parameter_constraints: dict = {
36
+ **sklearn_KNeighborsRegressor._parameter_constraints
37
+ }
143
38
 
144
39
  if sklearn_check_version("1.0"):
145
40
 
@@ -195,7 +90,6 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
195
90
  )
196
91
 
197
92
  def fit(self, X, y):
198
- self._fit_validation(X, y)
199
93
  dispatch(
200
94
  self,
201
95
  "fit",
@@ -226,7 +120,7 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
226
120
  @wrap_output_data
227
121
  def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
228
122
  check_is_fitted(self)
229
- if sklearn_check_version("1.0"):
123
+ if sklearn_check_version("1.0") and X is not None:
230
124
  self._check_feature_names(X, reset=False)
231
125
  return dispatch(
232
126
  self,
@@ -236,8 +130,8 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
236
130
  "sklearn": sklearn_KNeighborsRegressor.kneighbors,
237
131
  },
238
132
  X,
239
- n_neighbors,
240
- return_distance,
133
+ n_neighbors=n_neighbors,
134
+ return_distance=return_distance,
241
135
  )
242
136
 
243
137
  @wrap_output_data
@@ -251,22 +145,13 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
251
145
  or getattr(self, "_tree", 0) is None
252
146
  and self._fit_method == "kd_tree"
253
147
  ):
254
- if sklearn_check_version("0.24"):
255
- sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
256
- else:
257
- sklearn_NearestNeighbors.fit(self, self._fit_X)
258
- if sklearn_check_version("0.22"):
259
- result = sklearn_NearestNeighbors.radius_neighbors(
260
- self, X, radius, return_distance, sort_results
261
- )
262
- else:
263
- result = sklearn_NearestNeighbors.radius_neighbors(
264
- self, X, radius, return_distance
265
- )
148
+ sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
149
+ result = sklearn_NearestNeighbors.radius_neighbors(
150
+ self, X, radius, return_distance, sort_results
151
+ )
266
152
 
267
153
  return result
268
154
 
269
- @run_with_n_jobs
270
155
  def _onedal_fit(self, X, y, queue=None):
271
156
  onedal_params = {
272
157
  "n_neighbors": self.n_neighbors,
@@ -289,11 +174,9 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
289
174
 
290
175
  self._save_attributes()
291
176
 
292
- @run_with_n_jobs
293
177
  def _onedal_predict(self, X, queue=None):
294
178
  return self._onedal_estimator.predict(X, queue=queue)
295
179
 
296
- @run_with_n_jobs
297
180
  def _onedal_kneighbors(
298
181
  self, X=None, n_neighbors=None, return_distance=True, queue=None
299
182
  ):
@@ -308,3 +191,8 @@ class KNeighborsRegressor(KNeighborsRegressor_, KNeighborsDispatchingBase):
308
191
  self._y = self._onedal_estimator._y
309
192
  self._fit_method = self._onedal_estimator._fit_method
310
193
  self._tree = self._onedal_estimator._tree
194
+
195
+ fit.__doc__ = sklearn_KNeighborsRegressor.__doc__
196
+ predict.__doc__ = sklearn_KNeighborsRegressor.predict.__doc__
197
+ kneighbors.__doc__ = sklearn_KNeighborsRegressor.kneighbors.__doc__
198
+ radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
@@ -14,91 +14,22 @@
14
14
  # limitations under the License.
15
15
  # ===============================================================================
16
16
 
17
- try:
18
- from packaging.version import Version
19
- except ImportError:
20
- from distutils.version import LooseVersion as Version
21
-
22
- import warnings
23
-
24
- import numpy as np
25
- from sklearn import __version__ as sklearn_version
26
- from sklearn.neighbors._ball_tree import BallTree
27
- from sklearn.neighbors._base import VALID_METRICS
28
- from sklearn.neighbors._base import NeighborsBase as sklearn_NeighborsBase
29
- from sklearn.neighbors._kd_tree import KDTree
30
17
  from sklearn.neighbors._unsupervised import NearestNeighbors as sklearn_NearestNeighbors
31
18
  from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
32
19
 
33
- from daal4py.sklearn._utils import control_n_jobs, run_with_n_jobs, sklearn_check_version
20
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
21
+ from daal4py.sklearn._utils import sklearn_check_version
34
22
  from onedal.neighbors import NearestNeighbors as onedal_NearestNeighbors
35
- from onedal.utils import _check_array, _num_features, _num_samples
36
23
 
37
24
  from .._device_offload import dispatch, wrap_output_data
38
25
  from .common import KNeighborsDispatchingBase
39
26
 
40
- if sklearn_check_version("0.22") and Version(sklearn_version) < Version("0.23"):
41
27
 
42
- class NearestNeighbors_(sklearn_NearestNeighbors):
43
- def __init__(
44
- self,
45
- n_neighbors=5,
46
- radius=1.0,
47
- algorithm="auto",
48
- leaf_size=30,
49
- metric="minkowski",
50
- p=2,
51
- metric_params=None,
52
- n_jobs=None,
53
- ):
54
- super().__init__(
55
- n_neighbors=n_neighbors,
56
- radius=radius,
57
- algorithm=algorithm,
58
- leaf_size=leaf_size,
59
- metric=metric,
60
- p=p,
61
- metric_params=metric_params,
62
- n_jobs=n_jobs,
63
- )
64
-
65
- else:
66
-
67
- class NearestNeighbors_(sklearn_NearestNeighbors):
68
- if sklearn_check_version("1.2"):
69
- _parameter_constraints: dict = {
70
- **sklearn_NearestNeighbors._parameter_constraints
71
- }
72
-
73
- @_deprecate_positional_args
74
- def __init__(
75
- self,
76
- *,
77
- n_neighbors=5,
78
- radius=1.0,
79
- algorithm="auto",
80
- leaf_size=30,
81
- metric="minkowski",
82
- p=2,
83
- metric_params=None,
84
- n_jobs=None,
85
- ):
86
- super().__init__(
87
- n_neighbors=n_neighbors,
88
- radius=radius,
89
- algorithm=algorithm,
90
- leaf_size=leaf_size,
91
- metric=metric,
92
- p=p,
93
- metric_params=metric_params,
94
- n_jobs=n_jobs,
95
- )
96
-
97
-
98
- @control_n_jobs
99
- class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
28
+ @control_n_jobs(decorated_methods=["fit", "kneighbors"])
29
+ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
30
+ __doc__ = sklearn_NearestNeighbors.__doc__
100
31
  if sklearn_check_version("1.2"):
101
- _parameter_constraints: dict = {**NearestNeighbors_._parameter_constraints}
32
+ _parameter_constraints: dict = {**sklearn_NearestNeighbors._parameter_constraints}
102
33
 
103
34
  @_deprecate_positional_args
104
35
  def __init__(
@@ -124,7 +55,6 @@ class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
124
55
  )
125
56
 
126
57
  def fit(self, X, y=None):
127
- self._fit_validation(X, y)
128
58
  dispatch(
129
59
  self,
130
60
  "fit",
@@ -150,8 +80,8 @@ class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
150
80
  "sklearn": sklearn_NearestNeighbors.kneighbors,
151
81
  },
152
82
  X,
153
- n_neighbors,
154
- return_distance,
83
+ n_neighbors=n_neighbors,
84
+ return_distance=return_distance,
155
85
  )
156
86
 
157
87
  @wrap_output_data
@@ -165,22 +95,13 @@ class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
165
95
  or getattr(self, "_tree", 0) is None
166
96
  and self._fit_method == "kd_tree"
167
97
  ):
168
- if sklearn_check_version("0.24"):
169
- sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
170
- else:
171
- sklearn_NearestNeighbors.fit(self, self._fit_X)
172
- if sklearn_check_version("0.22"):
173
- result = sklearn_NearestNeighbors.radius_neighbors(
174
- self, X, radius, return_distance, sort_results
175
- )
176
- else:
177
- result = sklearn_NearestNeighbors.radius_neighbors(
178
- self, X, radius, return_distance
179
- )
98
+ sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
99
+ result = sklearn_NearestNeighbors.radius_neighbors(
100
+ self, X, radius, return_distance, sort_results
101
+ )
180
102
 
181
103
  return result
182
104
 
183
- @run_with_n_jobs
184
105
  def _onedal_fit(self, X, y=None, queue=None):
185
106
  onedal_params = {
186
107
  "n_neighbors": self.n_neighbors,
@@ -202,11 +123,9 @@ class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
202
123
 
203
124
  self._save_attributes()
204
125
 
205
- @run_with_n_jobs
206
126
  def _onedal_predict(self, X, queue=None):
207
127
  return self._onedal_estimator.predict(X, queue=queue)
208
128
 
209
- @run_with_n_jobs
210
129
  def _onedal_kneighbors(
211
130
  self, X=None, n_neighbors=None, return_distance=True, queue=None
212
131
  ):
@@ -221,3 +140,7 @@ class NearestNeighbors(NearestNeighbors_, KNeighborsDispatchingBase):
221
140
  self._fit_X = self._onedal_estimator._fit_X
222
141
  self._fit_method = self._onedal_estimator._fit_method
223
142
  self._tree = self._onedal_estimator._tree
143
+
144
+ fit.__doc__ = sklearn_NearestNeighbors.__doc__
145
+ kneighbors.__doc__ = sklearn_NearestNeighbors.kneighbors.__doc__
146
+ radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__