scikit-learn-intelex 2024.4.0__py312-none-win_amd64.whl → 2025.10.0__py312-none-win_amd64.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.
Files changed (299) hide show
  1. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
  2. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
  3. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/_daal4py.cp312-win_amd64.pyd +0 -0
  4. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +94 -0
  5. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/gbt_convertors.py +1199 -0
  6. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/logistic_regression_builders.py +211 -0
  7. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/tree_based_builders.py +425 -0
  8. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp312-win_amd64.pyd +0 -0
  9. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
  10. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +252 -0
  11. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
  12. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
  13. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
  14. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +565 -0
  15. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  16. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn}/decomposition/__init__.py +2 -2
  17. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +528 -0
  18. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
  19. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +333 -0
  20. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
  21. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1285 -0
  22. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  23. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -28
  24. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +826 -0
  25. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +269 -0
  26. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +290 -0
  27. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +2 -2
  28. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
  29. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  30. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +561 -0
  31. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
  32. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_enet.py +157 -0
  33. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +198 -0
  34. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  35. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +3 -3
  36. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +432 -0
  37. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
  38. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +259 -0
  39. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
  40. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +4 -2
  41. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
  42. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  43. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
  44. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  45. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +164 -0
  46. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  47. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
  48. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
  49. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
  50. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +493 -0
  51. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +136 -0
  52. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +72 -0
  53. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  54. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  55. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
  56. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +736 -0
  57. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
  58. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +80 -0
  59. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
  60. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +772 -0
  61. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/__init__.py +151 -0
  62. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_config.py +80 -0
  63. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_device_offload.py +199 -0
  64. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp312-win_amd64.pyd +0 -0
  65. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp312-win_amd64.pyd +0 -0
  66. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +151 -0
  67. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +165 -0
  68. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +241 -0
  69. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
  70. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/utils.py +50 -0
  71. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
  72. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +80 -0
  73. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +582 -0
  74. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +145 -0
  75. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
  76. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
  77. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
  78. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_backend.py +258 -0
  79. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
  80. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
  81. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +148 -0
  82. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/tests/test_sycl.py +148 -0
  83. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
  84. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +121 -0
  85. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +151 -0
  86. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
  87. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +190 -0
  88. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +29 -0
  89. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +158 -0
  90. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_dlpack.py +64 -0
  91. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_sycl_usm.py +63 -0
  92. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +131 -0
  93. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +686 -0
  94. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
  95. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +218 -0
  96. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +124 -0
  97. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +291 -0
  98. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/__init__.py +19 -0
  99. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/dummy.py +137 -0
  100. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
  101. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +781 -0
  102. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
  103. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
  104. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +201 -0
  105. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +230 -0
  106. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +293 -0
  107. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
  108. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
  109. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +252 -0
  110. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
  111. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
  112. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal}/neighbors/__init__.py +19 -19
  113. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +690 -0
  114. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
  115. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
  116. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +27 -0
  117. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +202 -0
  118. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
  119. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
  120. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/svm.py +592 -0
  121. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +352 -0
  122. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
  123. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
  124. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +168 -0
  125. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
  126. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/test_common.py +71 -0
  127. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +179 -0
  128. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +94 -0
  129. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +98 -0
  130. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_sycl_queue_manager.py +213 -0
  131. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_third_party.py +220 -0
  132. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/tests/test_validation.py +142 -0
  133. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/validation.py +503 -0
  134. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/__init__.py +7 -3
  135. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/__main__.py +2 -2
  136. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_config.py +163 -0
  137. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +205 -0
  138. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_utils.py +219 -0
  139. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/base.py +109 -0
  140. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  141. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +241 -0
  142. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +128 -78
  143. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
  144. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +101 -32
  145. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
  146. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +38 -29
  147. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +399 -0
  148. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
  149. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +157 -0
  150. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/conftest.py +20 -1
  151. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +440 -0
  152. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +307 -0
  153. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +558 -0
  154. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +164 -0
  155. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +199 -21
  156. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +207 -2
  157. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/__init__.py +19 -17
  158. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/_dummy.py +615 -0
  159. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/tests/test_dummy.py +62 -0
  160. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +288 -440
  161. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +196 -0
  162. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +1 -1
  163. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +17 -3
  164. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  165. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +44 -0
  166. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +427 -0
  167. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +407 -0
  168. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +363 -0
  169. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +466 -0
  170. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +407 -0
  171. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
  172. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
  173. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
  174. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +565 -0
  175. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_ridge.py +256 -0
  176. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +11 -0
  177. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +256 -0
  178. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +3 -0
  179. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
  180. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +3 -0
  181. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +30 -62
  182. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +56 -9
  183. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +45 -101
  184. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +63 -94
  185. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +49 -25
  186. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +6 -4
  187. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
  188. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +261 -0
  189. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +54 -8
  190. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  191. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +406 -0
  192. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +390 -0
  193. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  194. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +24 -0
  195. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  196. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +117 -0
  197. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +314 -0
  198. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +9 -4
  199. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +108 -0
  200. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +180 -0
  201. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +3 -4
  202. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +24 -0
  203. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +29 -0
  204. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +120 -0
  205. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +200 -0
  206. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +20 -0
  207. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +23 -0
  208. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +6 -4
  209. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +276 -0
  210. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +146 -0
  211. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +299 -0
  212. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +299 -0
  213. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +2 -1
  214. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +28 -0
  215. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +7 -4
  216. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +345 -0
  217. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +162 -0
  218. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +169 -0
  219. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +1 -3
  220. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +433 -0
  221. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +403 -0
  222. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +99 -117
  223. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +55 -16
  224. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +95 -113
  225. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +51 -16
  226. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +43 -20
  227. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +607 -0
  228. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +256 -0
  229. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +111 -0
  230. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +335 -0
  231. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +5 -4
  232. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +111 -0
  233. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +122 -75
  234. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +335 -0
  235. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +48 -0
  236. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +420 -0
  237. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  238. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/validation.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +3 -1
  239. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +217 -0
  240. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/class_weight.py +100 -0
  241. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +97 -0
  242. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_class_weight.py +69 -0
  243. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_validation.py +238 -0
  244. scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/validation.py +212 -0
  245. scikit_learn_intelex-2025.10.0.dist-info/METADATA +182 -0
  246. scikit_learn_intelex-2025.10.0.dist-info/RECORD +267 -0
  247. {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/WHEEL +1 -1
  248. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_config.py +0 -110
  249. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -250
  250. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_utils.py +0 -109
  251. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -17
  252. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -30
  253. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
  254. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +0 -143
  255. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -335
  256. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -56
  257. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +0 -113
  258. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -316
  259. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -17
  260. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +0 -385
  261. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -117
  262. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -91
  263. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -26
  264. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  265. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -303
  266. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -133
  267. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -50
  268. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -71
  269. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
  270. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/_utils.py +0 -164
  271. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -39
  272. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -227
  273. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -99
  274. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  275. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -20
  276. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/_namespace.py +0 -97
  277. scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -59
  278. scikit_learn_intelex-2024.4.0.dist-info/METADATA +0 -230
  279. scikit_learn_intelex-2024.4.0.dist-info/RECORD +0 -101
  280. {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal}/basic_statistics/__init__.py +0 -0
  281. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
  282. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  283. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  284. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  285. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  286. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  287. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  288. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  289. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
  290. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  291. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
  292. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  293. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  294. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  295. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
  296. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  297. {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
  298. {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/LICENSE.txt +0 -0
  299. {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/top_level.txt +0 -0
@@ -14,80 +14,52 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
+ from sklearn.metrics import r2_score
17
18
  from sklearn.neighbors._regression import (
18
- KNeighborsRegressor as sklearn_KNeighborsRegressor,
19
+ KNeighborsRegressor as _sklearn_KNeighborsRegressor,
19
20
  )
20
- from sklearn.neighbors._unsupervised import NearestNeighbors as sklearn_NearestNeighbors
21
- from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
21
+ from sklearn.utils.validation import check_is_fitted
22
22
 
23
23
  from daal4py.sklearn._n_jobs_support import control_n_jobs
24
24
  from daal4py.sklearn._utils import sklearn_check_version
25
+ from daal4py.sklearn.utils.validation import get_requires_y_tag
25
26
  from onedal.neighbors import KNeighborsRegressor as onedal_KNeighborsRegressor
26
27
 
27
28
  from .._device_offload import dispatch, wrap_output_data
29
+ from ..utils.validation import check_feature_names
28
30
  from .common import KNeighborsDispatchingBase
29
31
 
30
32
 
31
- @control_n_jobs(decorated_methods=["fit", "predict", "kneighbors"])
32
- class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase):
33
- __doc__ = sklearn_KNeighborsRegressor.__doc__
33
+ @control_n_jobs(decorated_methods=["fit", "predict", "kneighbors", "score"])
34
+ class KNeighborsRegressor(KNeighborsDispatchingBase, _sklearn_KNeighborsRegressor):
35
+ __doc__ = _sklearn_KNeighborsRegressor.__doc__
34
36
  if sklearn_check_version("1.2"):
35
37
  _parameter_constraints: dict = {
36
- **sklearn_KNeighborsRegressor._parameter_constraints
38
+ **_sklearn_KNeighborsRegressor._parameter_constraints
37
39
  }
38
40
 
39
- if sklearn_check_version("1.0"):
40
-
41
- def __init__(
42
- self,
43
- n_neighbors=5,
44
- *,
45
- weights="uniform",
46
- algorithm="auto",
47
- leaf_size=30,
48
- p=2,
49
- metric="minkowski",
50
- metric_params=None,
51
- n_jobs=None,
52
- ):
53
- super().__init__(
54
- n_neighbors=n_neighbors,
55
- weights=weights,
56
- algorithm=algorithm,
57
- leaf_size=leaf_size,
58
- metric=metric,
59
- p=p,
60
- metric_params=metric_params,
61
- n_jobs=n_jobs,
62
- )
63
-
64
- else:
65
-
66
- @_deprecate_positional_args
67
- def __init__(
68
- self,
69
- n_neighbors=5,
70
- *,
71
- weights="uniform",
72
- algorithm="auto",
73
- leaf_size=30,
74
- p=2,
75
- metric="minkowski",
76
- metric_params=None,
77
- n_jobs=None,
78
- **kwargs,
79
- ):
80
- super().__init__(
81
- n_neighbors=n_neighbors,
82
- weights=weights,
83
- algorithm=algorithm,
84
- leaf_size=leaf_size,
85
- metric=metric,
86
- p=p,
87
- metric_params=metric_params,
88
- n_jobs=n_jobs,
89
- **kwargs,
90
- )
41
+ def __init__(
42
+ self,
43
+ n_neighbors=5,
44
+ *,
45
+ weights="uniform",
46
+ algorithm="auto",
47
+ leaf_size=30,
48
+ p=2,
49
+ metric="minkowski",
50
+ metric_params=None,
51
+ n_jobs=None,
52
+ ):
53
+ super().__init__(
54
+ n_neighbors=n_neighbors,
55
+ weights=weights,
56
+ algorithm=algorithm,
57
+ leaf_size=leaf_size,
58
+ metric=metric,
59
+ p=p,
60
+ metric_params=metric_params,
61
+ n_jobs=n_jobs,
62
+ )
91
63
 
92
64
  def fit(self, X, y):
93
65
  dispatch(
@@ -95,7 +67,7 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
95
67
  "fit",
96
68
  {
97
69
  "onedal": self.__class__._onedal_fit,
98
- "sklearn": sklearn_KNeighborsRegressor.fit,
70
+ "sklearn": _sklearn_KNeighborsRegressor.fit,
99
71
  },
100
72
  X,
101
73
  y,
@@ -105,53 +77,50 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
105
77
  @wrap_output_data
106
78
  def predict(self, X):
107
79
  check_is_fitted(self)
108
- if sklearn_check_version("1.0"):
109
- self._check_feature_names(X, reset=False)
80
+ check_feature_names(self, X, reset=False)
110
81
  return dispatch(
111
82
  self,
112
83
  "predict",
113
84
  {
114
85
  "onedal": self.__class__._onedal_predict,
115
- "sklearn": sklearn_KNeighborsRegressor.predict,
86
+ "sklearn": _sklearn_KNeighborsRegressor.predict,
87
+ },
88
+ X,
89
+ )
90
+
91
+ @wrap_output_data
92
+ def score(self, X, y, sample_weight=None):
93
+ check_is_fitted(self)
94
+ check_feature_names(self, X, reset=False)
95
+ return dispatch(
96
+ self,
97
+ "score",
98
+ {
99
+ "onedal": self.__class__._onedal_score,
100
+ "sklearn": _sklearn_KNeighborsRegressor.score,
116
101
  },
117
102
  X,
103
+ y,
104
+ sample_weight=sample_weight,
118
105
  )
119
106
 
120
107
  @wrap_output_data
121
108
  def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
122
109
  check_is_fitted(self)
123
- if sklearn_check_version("1.0") and X is not None:
124
- self._check_feature_names(X, reset=False)
110
+ if X is not None:
111
+ check_feature_names(self, X, reset=False)
125
112
  return dispatch(
126
113
  self,
127
114
  "kneighbors",
128
115
  {
129
116
  "onedal": self.__class__._onedal_kneighbors,
130
- "sklearn": sklearn_KNeighborsRegressor.kneighbors,
117
+ "sklearn": _sklearn_KNeighborsRegressor.kneighbors,
131
118
  },
132
119
  X,
133
120
  n_neighbors=n_neighbors,
134
121
  return_distance=return_distance,
135
122
  )
136
123
 
137
- @wrap_output_data
138
- def radius_neighbors(
139
- self, X=None, radius=None, return_distance=True, sort_results=False
140
- ):
141
- _onedal_estimator = getattr(self, "_onedal_estimator", None)
142
-
143
- if (
144
- _onedal_estimator is not None
145
- or getattr(self, "_tree", 0) is None
146
- and self._fit_method == "kd_tree"
147
- ):
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
- )
152
-
153
- return result
154
-
155
124
  def _onedal_fit(self, X, y, queue=None):
156
125
  onedal_params = {
157
126
  "n_neighbors": self.n_neighbors,
@@ -161,13 +130,8 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
161
130
  "p": self.effective_metric_params_["p"],
162
131
  }
163
132
 
164
- try:
165
- requires_y = self._get_tags()["requires_y"]
166
- except KeyError:
167
- requires_y = False
168
-
169
133
  self._onedal_estimator = onedal_KNeighborsRegressor(**onedal_params)
170
- self._onedal_estimator.requires_y = requires_y
134
+ self._onedal_estimator.requires_y = get_requires_y_tag(self)
171
135
  self._onedal_estimator.effective_metric_ = self.effective_metric_
172
136
  self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
173
137
  self._onedal_estimator.fit(X, y, queue=queue)
@@ -184,6 +148,11 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
184
148
  X, n_neighbors, return_distance, queue=queue
185
149
  )
186
150
 
151
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
152
+ return r2_score(
153
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
154
+ )
155
+
187
156
  def _save_attributes(self):
188
157
  self.n_features_in_ = self._onedal_estimator.n_features_in_
189
158
  self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
@@ -192,7 +161,7 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
192
161
  self._fit_method = self._onedal_estimator._fit_method
193
162
  self._tree = self._onedal_estimator._tree
194
163
 
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__
164
+ fit.__doc__ = _sklearn_KNeighborsRegressor.__doc__
165
+ predict.__doc__ = _sklearn_KNeighborsRegressor.predict.__doc__
166
+ kneighbors.__doc__ = _sklearn_KNeighborsRegressor.kneighbors.__doc__
167
+ score.__doc__ = _sklearn_KNeighborsRegressor.score.__doc__
@@ -14,22 +14,26 @@
14
14
  # limitations under the License.
15
15
  # ===============================================================================
16
16
 
17
- from sklearn.neighbors._unsupervised import NearestNeighbors as sklearn_NearestNeighbors
17
+ from sklearn.neighbors._unsupervised import NearestNeighbors as _sklearn_NearestNeighbors
18
18
  from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
19
19
 
20
20
  from daal4py.sklearn._n_jobs_support import control_n_jobs
21
21
  from daal4py.sklearn._utils import sklearn_check_version
22
+ from daal4py.sklearn.utils.validation import get_requires_y_tag
22
23
  from onedal.neighbors import NearestNeighbors as onedal_NearestNeighbors
23
24
 
24
25
  from .._device_offload import dispatch, wrap_output_data
26
+ from ..utils.validation import check_feature_names
25
27
  from .common import KNeighborsDispatchingBase
26
28
 
27
29
 
28
- @control_n_jobs(decorated_methods=["fit", "kneighbors"])
29
- class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
30
- __doc__ = sklearn_NearestNeighbors.__doc__
30
+ @control_n_jobs(decorated_methods=["fit", "kneighbors", "radius_neighbors"])
31
+ class NearestNeighbors(KNeighborsDispatchingBase, _sklearn_NearestNeighbors):
32
+ __doc__ = _sklearn_NearestNeighbors.__doc__
31
33
  if sklearn_check_version("1.2"):
32
- _parameter_constraints: dict = {**sklearn_NearestNeighbors._parameter_constraints}
34
+ _parameter_constraints: dict = {
35
+ **_sklearn_NearestNeighbors._parameter_constraints
36
+ }
33
37
 
34
38
  @_deprecate_positional_args
35
39
  def __init__(
@@ -60,7 +64,7 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
60
64
  "fit",
61
65
  {
62
66
  "onedal": self.__class__._onedal_fit,
63
- "sklearn": sklearn_NearestNeighbors.fit,
67
+ "sklearn": _sklearn_NearestNeighbors.fit,
64
68
  },
65
69
  X,
66
70
  None,
@@ -70,14 +74,14 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
70
74
  @wrap_output_data
71
75
  def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
72
76
  check_is_fitted(self)
73
- if sklearn_check_version("1.0") and X is not None:
74
- self._check_feature_names(X, reset=False)
77
+ if X is not None:
78
+ check_feature_names(self, X, reset=False)
75
79
  return dispatch(
76
80
  self,
77
81
  "kneighbors",
78
82
  {
79
83
  "onedal": self.__class__._onedal_kneighbors,
80
- "sklearn": sklearn_NearestNeighbors.kneighbors,
84
+ "sklearn": _sklearn_NearestNeighbors.kneighbors,
81
85
  },
82
86
  X,
83
87
  n_neighbors=n_neighbors,
@@ -88,19 +92,41 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
88
92
  def radius_neighbors(
89
93
  self, X=None, radius=None, return_distance=True, sort_results=False
90
94
  ):
91
- _onedal_estimator = getattr(self, "_onedal_estimator", None)
92
-
93
95
  if (
94
- _onedal_estimator is not None
96
+ hasattr(self, "_onedal_estimator")
95
97
  or getattr(self, "_tree", 0) is None
96
98
  and self._fit_method == "kd_tree"
97
99
  ):
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
100
+ _sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
101
+ check_is_fitted(self)
102
+ return dispatch(
103
+ self,
104
+ "radius_neighbors",
105
+ {
106
+ "onedal": None,
107
+ "sklearn": _sklearn_NearestNeighbors.radius_neighbors,
108
+ },
109
+ X,
110
+ radius=radius,
111
+ return_distance=return_distance,
112
+ sort_results=sort_results,
101
113
  )
102
114
 
103
- return result
115
+ def radius_neighbors_graph(
116
+ self, X=None, radius=None, mode="connectivity", sort_results=False
117
+ ):
118
+ return dispatch(
119
+ self,
120
+ "radius_neighbors_graph",
121
+ {
122
+ "onedal": None,
123
+ "sklearn": _sklearn_NearestNeighbors.radius_neighbors_graph,
124
+ },
125
+ X,
126
+ radius=radius,
127
+ mode=mode,
128
+ sort_results=sort_results,
129
+ )
104
130
 
105
131
  def _onedal_fit(self, X, y=None, queue=None):
106
132
  onedal_params = {
@@ -110,13 +136,8 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
110
136
  "p": self.effective_metric_params_["p"],
111
137
  }
112
138
 
113
- try:
114
- requires_y = self._get_tags()["requires_y"]
115
- except KeyError:
116
- requires_y = False
117
-
118
139
  self._onedal_estimator = onedal_NearestNeighbors(**onedal_params)
119
- self._onedal_estimator.requires_y = requires_y
140
+ self._onedal_estimator.requires_y = get_requires_y_tag(self)
120
141
  self._onedal_estimator.effective_metric_ = self.effective_metric_
121
142
  self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
122
143
  self._onedal_estimator.fit(X, y, queue=queue)
@@ -141,6 +162,9 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
141
162
  self._fit_method = self._onedal_estimator._fit_method
142
163
  self._tree = self._onedal_estimator._tree
143
164
 
144
- fit.__doc__ = sklearn_NearestNeighbors.__doc__
145
- kneighbors.__doc__ = sklearn_NearestNeighbors.kneighbors.__doc__
146
- radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
165
+ fit.__doc__ = _sklearn_NearestNeighbors.__doc__
166
+ kneighbors.__doc__ = _sklearn_NearestNeighbors.kneighbors.__doc__
167
+ radius_neighbors.__doc__ = _sklearn_NearestNeighbors.radius_neighbors.__doc__
168
+ radius_neighbors_graph.__doc__ = (
169
+ _sklearn_NearestNeighbors.radius_neighbors_graph.__doc__
170
+ )
@@ -47,25 +47,27 @@ def test_sklearnex_import_knn_regression(dataframe, queue):
47
47
  y = _convert_to_dataframe([0, 0, 1, 1], sycl_queue=queue, target_df=dataframe)
48
48
  neigh = KNeighborsRegressor(n_neighbors=2).fit(X, y)
49
49
  y_test = _convert_to_dataframe([[1.5]], sycl_queue=queue, target_df=dataframe)
50
- pred = _as_numpy(neigh.predict(y_test))
50
+ pred = _as_numpy(neigh.predict(y_test)).squeeze()
51
51
  assert "sklearnex" in neigh.__module__
52
- assert_allclose(pred, [0.5])
52
+ assert_allclose(pred, 0.5)
53
53
 
54
54
 
55
+ @pytest.mark.parametrize("algorithm", ["auto", "brute"])
55
56
  @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
56
57
  @pytest.mark.parametrize(
57
58
  "estimator",
58
59
  [LocalOutlierFactor, NearestNeighbors],
59
60
  )
60
- def test_sklearnex_kneighbors(estimator, dataframe, queue):
61
+ def test_sklearnex_kneighbors(algorithm, estimator, dataframe, queue):
61
62
  X = [[0, 0, 2], [1, 0, 0], [0, 0, 1]]
62
63
  X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
63
64
  test = _convert_to_dataframe([[0, 0, 1.3]], sycl_queue=queue, target_df=dataframe)
64
- neigh = estimator(n_neighbors=2).fit(X)
65
+ neigh = estimator(n_neighbors=2, algorithm=algorithm).fit(X)
65
66
  result = neigh.kneighbors(test, 2, return_distance=False)
66
67
  result = _as_numpy(result)
67
68
  assert "sklearnex" in neigh.__module__
68
69
  assert_allclose(result, [[2, 0]])
70
+ result = neigh.kneighbors()
69
71
 
70
72
 
71
73
  @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
@@ -14,4 +14,4 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
- __all__ = ["cluster", "covariance"]
17
+ __all__ = ["covariance", "decomposition"]
@@ -0,0 +1,261 @@
1
+ # ===============================================================================
2
+ # Copyright 2023 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 warnings
18
+ from functools import partial
19
+
20
+ import numpy as np
21
+ import scipy.sparse as sp
22
+ from sklearn.base import clone
23
+ from sklearn.covariance import EmpiricalCovariance as _sklearn_EmpiricalCovariance
24
+ from sklearn.utils.validation import check_array, check_is_fitted
25
+
26
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
27
+ from daal4py.sklearn._utils import daal_check_version, sklearn_check_version
28
+ from daal4py.sklearn.metrics import pairwise_distances
29
+ from onedal._device_offload import support_input_format, support_sycl_format
30
+ from onedal.covariance import EmpiricalCovariance as onedal_EmpiricalCovariance
31
+ from onedal.utils._array_api import _is_numpy_namespace
32
+ from onedal.utils.validation import _num_features
33
+ from sklearnex import config_context
34
+
35
+ from ..._config import get_config
36
+ from ..._device_offload import dispatch, wrap_output_data
37
+ from ..._utils import PatchingConditionsChain, register_hyperparameters
38
+ from ...base import oneDALEstimator
39
+ from ...utils._array_api import _pinvh, enable_array_api, get_namespace, log_likelihood
40
+ from ...utils.validation import assert_all_finite, validate_data
41
+
42
+ # This is a temporary workaround for issues with sklearnex._device_offload._get_host_inputs
43
+ # passing kwargs with sycl queues with other host data will cause failures
44
+ _mahalanobis = support_input_format(partial(pairwise_distances, metric="mahalanobis"))
45
+
46
+
47
+ @enable_array_api
48
+ @register_hyperparameters({"fit": ("covariance", "compute")})
49
+ @control_n_jobs(decorated_methods=["fit", "mahalanobis"])
50
+ class EmpiricalCovariance(oneDALEstimator, _sklearn_EmpiricalCovariance):
51
+ __doc__ = _sklearn_EmpiricalCovariance.__doc__
52
+
53
+ if sklearn_check_version("1.2"):
54
+ _parameter_constraints: dict = {
55
+ **_sklearn_EmpiricalCovariance._parameter_constraints,
56
+ }
57
+
58
+ def _set_covariance(self, covariance):
59
+ if not get_config()["use_raw_input"]:
60
+ if sklearn_check_version("1.6"):
61
+ covariance = check_array(covariance, ensure_all_finite=False)
62
+ else:
63
+ covariance = check_array(covariance, force_all_finite=False)
64
+ assert_all_finite(covariance)
65
+ # set covariance
66
+ self.covariance_ = covariance
67
+ # set precision
68
+ if self.store_precision:
69
+ self.precision_ = _pinvh(covariance, check_finite=False)
70
+ else:
71
+ self.precision_ = None
72
+
73
+ def _save_attributes(self):
74
+ assert hasattr(self, "_onedal_estimator")
75
+ if not daal_check_version((2024, "P", 400)) and self.assume_centered:
76
+ xp, _ = get_namespace(self._onedal_estimator.location_)
77
+ location = self._onedal_estimator.location_[None, :]
78
+ self._onedal_estimator.covariance_ += xp.dot(location.T, location)
79
+ self._onedal_estimator.location_ = xp.zeros_like(
80
+ self._onedal_estimator.location_
81
+ )
82
+ self._set_covariance(self._onedal_estimator.covariance_)
83
+ self.location_ = self._onedal_estimator.location_
84
+
85
+ _onedal_covariance = staticmethod(onedal_EmpiricalCovariance)
86
+
87
+ def _onedal_fit(self, X, queue=None):
88
+ if not get_config()["use_raw_input"]:
89
+ xp, _ = get_namespace(X)
90
+ X = validate_data(self, X, dtype=[xp.float64, xp.float32])
91
+
92
+ if X.shape[0] == 1:
93
+ warnings.warn(
94
+ "Only one sample available. You may want to reshape your data array"
95
+ )
96
+
97
+ self._onedal_estimator = self._onedal_covariance(
98
+ method="dense", bias=True, assume_centered=self.assume_centered
99
+ )
100
+ self._onedal_estimator.fit(X, queue=queue)
101
+ self._save_attributes()
102
+
103
+ def _onedal_supported(self, method_name, *data):
104
+ class_name = self.__class__.__name__
105
+ patching_status = PatchingConditionsChain(
106
+ f"sklearn.covariance.{class_name}.{method_name}"
107
+ )
108
+ if method_name in ["fit", "mahalanobis"]:
109
+ (X,) = data
110
+ patching_status.and_conditions(
111
+ [
112
+ (not sp.issparse(X), "X is sparse. Sparse input is not supported."),
113
+ ]
114
+ )
115
+ return patching_status
116
+ raise RuntimeError(f"Unknown method {method_name} in {self.__class__.__name__}")
117
+
118
+ _onedal_cpu_supported = _onedal_supported
119
+ _onedal_gpu_supported = _onedal_supported
120
+
121
+ def get_precision(self):
122
+ # use array API-enabled version
123
+ if self.store_precision:
124
+ precision = self.precision_
125
+ else:
126
+ precision = _pinvh(self.covariance_, check_finite=False)
127
+ return precision
128
+
129
+ def fit(self, X, y=None):
130
+ if sklearn_check_version("1.2"):
131
+ self._validate_params()
132
+ dispatch(
133
+ self,
134
+ "fit",
135
+ {
136
+ "onedal": self.__class__._onedal_fit,
137
+ "sklearn": _sklearn_EmpiricalCovariance.fit,
138
+ },
139
+ X,
140
+ )
141
+
142
+ return self
143
+
144
+ @wrap_output_data
145
+ @support_sycl_format
146
+ def score(self, X_test, y=None):
147
+
148
+ check_is_fitted(self)
149
+ # Only covariance evaluated for get_namespace due to dpnp/dpctl
150
+ # support without array_api_dispatch
151
+ xp, _ = get_namespace(X_test, self.covariance_)
152
+
153
+ X = validate_data(
154
+ self,
155
+ X_test,
156
+ dtype=[xp.float64, xp.float32],
157
+ reset=False,
158
+ )
159
+
160
+ location = self.location_
161
+ precision = self.get_precision()
162
+
163
+ est = clone(self)
164
+ est.set_params(assume_centered=True)
165
+
166
+ # test_cov is a numpy array, but calculated on device
167
+ test_cov = est.fit(X - self.location_).covariance_
168
+ if not _is_numpy_namespace(xp):
169
+ test_cov = xp.asarray(test_cov, device=X.device)
170
+ res = log_likelihood(test_cov, self.get_precision())
171
+
172
+ return res
173
+
174
+ @wrap_output_data
175
+ @support_sycl_format
176
+ def error_norm(self, comp_cov, norm="frobenius", scaling=True, squared=True):
177
+ # equivalent to the sklearn implementation but written for array API
178
+ # in the case of numpy-like inputs it will use sklearn's version instead.
179
+ # This can be deprecated if/when sklearn makes the equivalent array API enabled.
180
+ # This includes a validate_data call and an unusual call to get_namespace in
181
+ # order to also support dpnp/dpctl without array_api_dispatch.
182
+ check_is_fitted(self)
183
+ # Only covariance evaluated for get_namespace due to dpnp/dpctl
184
+ # support without array_api_dispatch
185
+ xp, _ = get_namespace(comp_cov, self.covariance_)
186
+ c_cov = validate_data(
187
+ self,
188
+ comp_cov,
189
+ dtype=[xp.float64, xp.float32],
190
+ reset=False,
191
+ )
192
+
193
+ if _is_numpy_namespace(xp):
194
+ # must be done this way is it does not inherit from sklearn
195
+ return _sklearn_EmpiricalCovariance.error_norm(
196
+ self, c_cov, norm=norm, scaling=scaling, squared=squared
197
+ )
198
+
199
+ # compute the error
200
+ error = c_cov - self.covariance_
201
+ # compute the error norm
202
+ if norm == "frobenius":
203
+ squared_norm = xp.matmul(xp.reshape(error, (-1)), xp.reshape(error, (-1)))
204
+ elif norm == "spectral":
205
+ squared_norm = xp.max(xp.linalg.svdvals(xp.matmul(error.T, error)))
206
+ else:
207
+ raise NotImplementedError("Only spectral and frobenius norms are implemented")
208
+ # optionally scale the error norm
209
+ if scaling:
210
+ squared_norm = squared_norm / error.shape[0]
211
+ # finally get either the squared norm or the norm
212
+ if squared:
213
+ result = squared_norm
214
+ else:
215
+ result = xp.sqrt(squared_norm)
216
+
217
+ return result
218
+
219
+ # expose sklearnex pairwise_distances if mahalanobis distance eventually supported
220
+ @support_sycl_format
221
+ def mahalanobis(self, X):
222
+ # This must be done as ```support_input_format``` is insufficient for array API
223
+ # support when attributes are non-numpy.
224
+ check_is_fitted(self)
225
+ precision = self.get_precision()
226
+ loc = self.location_[None, :]
227
+ xp, _ = get_namespace(X, precision, loc)
228
+ # do not check dtype, done in pairwise_distances
229
+ X_in = validate_data(self, X, reset=False)
230
+
231
+ if not _is_numpy_namespace(xp) and isinstance(X_in, np.ndarray):
232
+ # corrects issues with respect to dpnp/dpctl support without array_api_dispatch
233
+ X_in = X
234
+ loc = xp.asarray(loc, device=X.device)
235
+ precision = xp.asarray(precision, device=X.device)
236
+
237
+ with config_context(assume_finite=True):
238
+ try:
239
+ dist = _mahalanobis(X_in, loc, VI=precision)
240
+
241
+ except ValueError as e:
242
+ # Throw the expected sklearn error in an n_feature length violation
243
+ if "Incompatible dimension for X and Y matrices: X.shape[1] ==" in str(e):
244
+ raise ValueError(
245
+ f"X has {_num_features(X)} features, but {self.__class__.__name__} "
246
+ f"is expecting {self.n_features_in_} features as input."
247
+ ) from None
248
+ else:
249
+ raise e
250
+
251
+ if not _is_numpy_namespace(xp):
252
+ dist = xp.asarray(dist, device=X.device)
253
+
254
+ return (xp.reshape(dist, (-1,))) ** 2
255
+
256
+ fit.__doc__ = _sklearn_EmpiricalCovariance.fit.__doc__
257
+ mahalanobis.__doc__ = _sklearn_EmpiricalCovariance.mahalanobis.__doc__
258
+ error_norm.__doc__ = _sklearn_EmpiricalCovariance.error_norm.__doc__
259
+ score.__doc__ = _sklearn_EmpiricalCovariance.score.__doc__
260
+ get_precision.__doc__ = _sklearn_EmpiricalCovariance.get_precision.__doc__
261
+ _set_covariance.__doc__ = _sklearn_EmpiricalCovariance._set_covariance.__doc__