scikit-learn-intelex 2024.7.0__py310-none-win_amd64.whl → 2025.0.0__py310-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.

Potentially problematic release.


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

Files changed (260) hide show
  1. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
  2. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
  3. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/_daal4py.cp310-win_amd64.pyd +0 -0
  4. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
  5. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
  6. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
  7. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp310-win_amd64.pyd +0 -0
  8. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
  9. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +242 -0
  10. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +241 -0
  11. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
  12. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
  13. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
  14. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn}/decomposition/__init__.py +2 -2
  16. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
  17. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
  18. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +318 -0
  19. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
  20. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +29 -0
  23. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
  25. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  27. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
  28. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
  31. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +196 -0
  32. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +19 -0
  34. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
  36. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +155 -0
  37. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
  38. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
  39. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
  40. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
  44. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +87 -0
  46. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +118 -0
  47. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
  48. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
  49. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
  50. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
  51. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
  54. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
  55. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/covariance → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
  56. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
  57. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +693 -0
  59. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/__init__.py +83 -0
  60. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/_config.py +53 -0
  61. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/_device_offload.py +229 -0
  62. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp310-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp310-win_amd64.pyd +0 -0
  64. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
  65. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +160 -0
  66. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
  67. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
  68. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
  69. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +110 -0
  70. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +560 -0
  71. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +115 -0
  72. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
  73. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
  74. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
  75. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
  76. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
  77. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
  78. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/_policy.py +59 -0
  79. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
  80. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +116 -0
  81. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +75 -0
  82. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
  83. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +125 -0
  84. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +146 -0
  85. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
  86. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +122 -0
  87. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
  88. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +95 -0
  89. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +235 -0
  90. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
  91. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +204 -0
  92. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
  93. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +198 -0
  94. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
  95. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +720 -0
  96. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
  97. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
  98. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +258 -0
  99. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +329 -0
  100. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +249 -0
  101. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
  102. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
  103. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +149 -0
  104. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
  105. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
  106. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
  107. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +778 -0
  108. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
  109. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
  110. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
  111. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +153 -0
  112. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
  113. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
  114. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
  115. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
  116. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
  117. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
  118. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +168 -0
  119. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
  120. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/tests/test_common.py +41 -0
  121. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +168 -0
  122. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +107 -0
  123. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
  124. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +91 -0
  125. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/utils/validation.py +432 -0
  126. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +36 -13
  127. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  128. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -3
  129. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +5 -5
  130. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
  131. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +383 -0
  132. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +153 -0
  133. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +5 -5
  134. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +11 -0
  135. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +1 -1
  136. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +19 -9
  137. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +1 -1
  138. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +2 -0
  139. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +7 -7
  140. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +5 -6
  141. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +418 -0
  142. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +4 -4
  143. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +13 -10
  144. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  145. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +5 -4
  146. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +3 -3
  147. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +2 -2
  148. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +2 -2
  149. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +4 -2
  150. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +2 -1
  151. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +1 -1
  152. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/preview}/__init__.py +1 -3
  153. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +8 -8
  154. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +2 -2
  155. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +4 -4
  156. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  157. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  158. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  159. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  160. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  161. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  162. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition}/__init__.py +4 -1
  163. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  164. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  165. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +2 -1
  166. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  167. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  168. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +4 -1
  169. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +1 -1
  170. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +1 -1
  171. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/_utils_spmd.py +18 -5
  172. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +2 -1
  173. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +0 -1
  174. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +12 -11
  175. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +1 -2
  176. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/utils/_namespace.py → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +5 -20
  177. {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.0.dist-info}/METADATA +3 -2
  178. scikit_learn_intelex-2025.0.0.dist-info/RECORD +255 -0
  179. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -25
  180. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -42
  181. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  182. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -303
  183. scikit_learn_intelex-2024.7.0.dist-info/RECORD +0 -122
  184. {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal}/basic_statistics/__init__.py +0 -0
  185. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
  186. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
  187. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
  188. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
  189. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +0 -0
  190. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +0 -0
  191. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +0 -0
  192. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +0 -0
  193. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/conftest.py +0 -0
  194. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
  195. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  196. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -0
  197. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  198. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  199. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +0 -0
  200. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
  201. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +0 -0
  202. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -0
  203. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
  204. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +0 -0
  205. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -0
  206. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  207. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
  208. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  209. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  210. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  211. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  212. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
  213. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
  214. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +0 -0
  215. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
  216. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
  217. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  218. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
  219. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
  220. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +0 -0
  221. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +0 -0
  222. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +0 -0
  223. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
  224. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  225. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +0 -0
  226. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  227. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  228. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  229. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +0 -0
  230. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +0 -0
  231. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
  232. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +0 -0
  233. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  234. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +0 -0
  235. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  236. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
  237. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +0 -0
  238. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  239. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
  240. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +0 -0
  241. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  242. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  243. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +0 -0
  244. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  245. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/_common.py +0 -0
  246. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +0 -0
  247. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +0 -0
  248. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +0 -0
  249. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +0 -0
  250. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_common.py +0 -0
  251. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
  252. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
  253. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
  254. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
  255. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  256. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
  257. {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
  258. {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.0.dist-info}/LICENSE.txt +0 -0
  259. {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.0.dist-info}/WHEEL +0 -0
  260. {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,383 @@
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 logging
18
+
19
+ from daal4py.sklearn._utils import daal_check_version
20
+
21
+ if daal_check_version((2023, "P", 200)):
22
+
23
+ import numbers
24
+ import warnings
25
+
26
+ import numpy as np
27
+ from scipy.sparse import issparse
28
+ from sklearn.cluster import KMeans as sklearn_KMeans
29
+ from sklearn.utils._openmp_helpers import _openmp_effective_n_threads
30
+ from sklearn.utils.validation import (
31
+ _check_sample_weight,
32
+ _num_samples,
33
+ check_is_fitted,
34
+ )
35
+
36
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
37
+ from daal4py.sklearn._utils import sklearn_check_version
38
+ from onedal.cluster import KMeans as onedal_KMeans
39
+ from onedal.utils import _is_csr
40
+
41
+ from .._device_offload import dispatch, wrap_output_data
42
+ from .._utils import PatchingConditionsChain
43
+
44
+ @control_n_jobs(decorated_methods=["fit", "predict", "transform", "fit_transform"])
45
+ class KMeans(sklearn_KMeans):
46
+ __doc__ = sklearn_KMeans.__doc__
47
+
48
+ if sklearn_check_version("1.2"):
49
+ _parameter_constraints: dict = {**sklearn_KMeans._parameter_constraints}
50
+
51
+ def __init__(
52
+ self,
53
+ n_clusters=8,
54
+ *,
55
+ init="k-means++",
56
+ n_init=(
57
+ "auto"
58
+ if sklearn_check_version("1.4")
59
+ else "warn" if sklearn_check_version("1.2") else 10
60
+ ),
61
+ max_iter=300,
62
+ tol=1e-4,
63
+ verbose=0,
64
+ random_state=None,
65
+ copy_x=True,
66
+ algorithm="lloyd" if sklearn_check_version("1.1") else "auto",
67
+ ):
68
+ super().__init__(
69
+ n_clusters=n_clusters,
70
+ init=init,
71
+ max_iter=max_iter,
72
+ tol=tol,
73
+ n_init=n_init,
74
+ verbose=verbose,
75
+ random_state=random_state,
76
+ copy_x=copy_x,
77
+ algorithm=algorithm,
78
+ )
79
+
80
+ def _initialize_onedal_estimator(self):
81
+ onedal_params = {
82
+ "n_clusters": self.n_clusters,
83
+ "init": self.init,
84
+ "max_iter": self.max_iter,
85
+ "tol": self.tol,
86
+ "n_init": self.n_init,
87
+ "verbose": self.verbose,
88
+ "random_state": self.random_state,
89
+ }
90
+
91
+ self._onedal_estimator = onedal_KMeans(**onedal_params)
92
+
93
+ def _onedal_fit_supported(self, method_name, X, y=None, sample_weight=None):
94
+ assert method_name == "fit"
95
+
96
+ class_name = self.__class__.__name__
97
+ patching_status = PatchingConditionsChain(f"sklearn.cluster.{class_name}.fit")
98
+
99
+ sample_count = _num_samples(X)
100
+ self._algorithm = self.algorithm
101
+ supported_algs = ["auto", "full", "lloyd", "elkan"]
102
+ if self.algorithm == "elkan":
103
+ logging.getLogger("sklearnex").info(
104
+ "oneDAL does not support 'elkan', using 'lloyd' algorithm instead."
105
+ )
106
+ correct_count = self.n_clusters < sample_count
107
+
108
+ is_data_supported = (
109
+ _is_csr(X) and daal_check_version((2024, "P", 700))
110
+ ) or not issparse(X)
111
+
112
+ _acceptable_sample_weights = self._validate_sample_weight(sample_weight, X)
113
+
114
+ patching_status.and_conditions(
115
+ [
116
+ (
117
+ self.algorithm in supported_algs,
118
+ "Only 'lloyd' algorithm is supported, 'elkan' is computed using lloyd",
119
+ ),
120
+ (correct_count, "n_clusters is smaller than number of samples"),
121
+ (
122
+ _acceptable_sample_weights,
123
+ "oneDAL doesn't support sample_weight. Accepted options are None, constant, or equal weights.",
124
+ ),
125
+ (
126
+ is_data_supported,
127
+ "Supported data formats: Dense, CSR (oneDAL version >= 2024.7.0).",
128
+ ),
129
+ ]
130
+ )
131
+
132
+ return patching_status
133
+
134
+ def fit(self, X, y=None, sample_weight=None):
135
+ if sklearn_check_version("1.2"):
136
+ self._validate_params()
137
+
138
+ dispatch(
139
+ self,
140
+ "fit",
141
+ {
142
+ "onedal": self.__class__._onedal_fit,
143
+ "sklearn": sklearn_KMeans.fit,
144
+ },
145
+ X,
146
+ y,
147
+ sample_weight,
148
+ )
149
+
150
+ return self
151
+
152
+ def _onedal_fit(self, X, _, sample_weight, queue=None):
153
+ X = self._validate_data(
154
+ X,
155
+ accept_sparse="csr",
156
+ dtype=[np.float64, np.float32],
157
+ order="C",
158
+ copy=self.copy_x,
159
+ accept_large_sparse=False,
160
+ )
161
+
162
+ if sklearn_check_version("1.2"):
163
+ self._check_params_vs_input(X)
164
+ else:
165
+ self._check_params(X)
166
+
167
+ self._n_features_out = self.n_clusters
168
+
169
+ self._initialize_onedal_estimator()
170
+ self._n_threads = _openmp_effective_n_threads()
171
+ self._onedal_estimator.fit(X, queue=queue)
172
+
173
+ self._save_attributes()
174
+
175
+ def _validate_sample_weight(self, sample_weight, X):
176
+ if sample_weight is None:
177
+ return True
178
+ elif isinstance(sample_weight, numbers.Number):
179
+ return True
180
+ else:
181
+ sample_weight = _check_sample_weight(
182
+ sample_weight,
183
+ X,
184
+ dtype=X.dtype if hasattr(X, "dtype") else None,
185
+ )
186
+ if np.all(sample_weight == sample_weight[0]):
187
+ return True
188
+ else:
189
+ return False
190
+
191
+ def _onedal_predict_supported(self, method_name, X, sample_weight=None):
192
+ class_name = self.__class__.__name__
193
+ is_data_supported = (
194
+ _is_csr(X) and daal_check_version((2024, "P", 700))
195
+ ) or not issparse(X)
196
+ patching_status = PatchingConditionsChain(
197
+ f"sklearn.cluster.{class_name}.predict"
198
+ )
199
+
200
+ # algorithm "auto" has been deprecated since 1.1,
201
+ # algorithm "full" has been replaced by "lloyd"
202
+ supported_algs = ["auto", "full", "lloyd", "elkan"]
203
+ if self.algorithm == "elkan":
204
+ logging.getLogger("sklearnex").info(
205
+ "oneDAL does not support 'elkan', using 'lloyd' algorithm instead."
206
+ )
207
+
208
+ _acceptable_sample_weights = True
209
+ if not sklearn_check_version("1.5"):
210
+ _acceptable_sample_weights = self._validate_sample_weight(
211
+ sample_weight, X
212
+ )
213
+
214
+ patching_status.and_conditions(
215
+ [
216
+ (
217
+ self.algorithm in supported_algs,
218
+ "Only 'lloyd' algorithm is supported, 'elkan' is computed using lloyd.",
219
+ ),
220
+ (
221
+ is_data_supported,
222
+ "Supported data formats: Dense, CSR (oneDAL version >= 2024.7.0).",
223
+ ),
224
+ (
225
+ _acceptable_sample_weights,
226
+ "oneDAL doesn't support sample_weight. Acceptable options are None, constant, or equal weights.",
227
+ ),
228
+ ]
229
+ )
230
+
231
+ return patching_status
232
+
233
+ if sklearn_check_version("1.5"):
234
+
235
+ @wrap_output_data
236
+ def predict(self, X):
237
+ self._validate_params()
238
+
239
+ return dispatch(
240
+ self,
241
+ "predict",
242
+ {
243
+ "onedal": self.__class__._onedal_predict,
244
+ "sklearn": sklearn_KMeans.predict,
245
+ },
246
+ X,
247
+ )
248
+
249
+ else:
250
+
251
+ @wrap_output_data
252
+ def predict(
253
+ self,
254
+ X,
255
+ sample_weight="deprecated" if sklearn_check_version("1.3") else None,
256
+ ):
257
+ if sklearn_check_version("1.2"):
258
+ self._validate_params()
259
+
260
+ return dispatch(
261
+ self,
262
+ "predict",
263
+ {
264
+ "onedal": self.__class__._onedal_predict,
265
+ "sklearn": sklearn_KMeans.predict,
266
+ },
267
+ X,
268
+ sample_weight=sample_weight,
269
+ )
270
+
271
+ def _onedal_predict(self, X, sample_weight=None, queue=None):
272
+ check_is_fitted(self)
273
+
274
+ X = self._validate_data(
275
+ X,
276
+ accept_sparse="csr",
277
+ reset=False,
278
+ dtype=[np.float64, np.float32],
279
+ )
280
+
281
+ if not sklearn_check_version("1.5") and sklearn_check_version("1.3"):
282
+ if isinstance(sample_weight, str) and sample_weight == "deprecated":
283
+ sample_weight = None
284
+
285
+ if sample_weight is not None:
286
+ warnings.warn(
287
+ "'sample_weight' was deprecated in version 1.3 and "
288
+ "will be removed in 1.5.",
289
+ FutureWarning,
290
+ )
291
+
292
+ if not hasattr(self, "_onedal_estimator"):
293
+ self._initialize_onedal_estimator()
294
+ self._onedal_estimator.cluster_centers_ = self.cluster_centers_
295
+
296
+ return self._onedal_estimator.predict(X, queue=queue)
297
+
298
+ def _onedal_supported(self, method_name, *data):
299
+ if method_name == "fit":
300
+ return self._onedal_fit_supported(method_name, *data)
301
+ if method_name in ["predict", "score"]:
302
+ return self._onedal_predict_supported(method_name, *data)
303
+ raise RuntimeError(
304
+ f"Unknown method {method_name} in {self.__class__.__name__}"
305
+ )
306
+
307
+ _onedal_gpu_supported = _onedal_supported
308
+ _onedal_cpu_supported = _onedal_supported
309
+
310
+ @wrap_output_data
311
+ def fit_transform(self, X, y=None, sample_weight=None):
312
+ return self.fit(X, sample_weight=sample_weight)._transform(X)
313
+
314
+ @wrap_output_data
315
+ def transform(self, X):
316
+ check_is_fitted(self)
317
+
318
+ X = self._check_test_data(X)
319
+ return self._transform(X)
320
+
321
+ @wrap_output_data
322
+ def score(self, X, y=None, sample_weight=None):
323
+ return dispatch(
324
+ self,
325
+ "score",
326
+ {
327
+ "onedal": self.__class__._onedal_score,
328
+ "sklearn": sklearn_KMeans.score,
329
+ },
330
+ X,
331
+ y,
332
+ sample_weight=sample_weight,
333
+ )
334
+
335
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
336
+ check_is_fitted(self)
337
+
338
+ X = self._validate_data(
339
+ X,
340
+ accept_sparse="csr",
341
+ reset=False,
342
+ dtype=[np.float64, np.float32],
343
+ )
344
+
345
+ if not sklearn_check_version("1.5") and sklearn_check_version("1.3"):
346
+ if isinstance(sample_weight, str) and sample_weight == "deprecated":
347
+ sample_weight = None
348
+
349
+ if sample_weight is not None:
350
+ warnings.warn(
351
+ "'sample_weight' was deprecated in version 1.3 and "
352
+ "will be removed in 1.5.",
353
+ FutureWarning,
354
+ )
355
+
356
+ if not hasattr(self, "_onedal_estimator"):
357
+ self._initialize_onedal_estimator()
358
+ self._onedal_estimator.cluster_centers_ = self.cluster_centers_
359
+
360
+ return self._onedal_estimator.score(X, queue=queue)
361
+
362
+ def _save_attributes(self):
363
+ assert hasattr(self, "_onedal_estimator")
364
+ self.cluster_centers_ = self._onedal_estimator.cluster_centers_
365
+ self.labels_ = self._onedal_estimator.labels_
366
+ self.inertia_ = self._onedal_estimator.inertia_
367
+ self.n_iter_ = self._onedal_estimator.n_iter_
368
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
369
+
370
+ self._n_init = self._onedal_estimator._n_init
371
+
372
+ fit.__doc__ = sklearn_KMeans.fit.__doc__
373
+ predict.__doc__ = sklearn_KMeans.predict.__doc__
374
+ transform.__doc__ = sklearn_KMeans.transform.__doc__
375
+ fit_transform.__doc__ = sklearn_KMeans.fit_transform.__doc__
376
+ score.__doc__ = sklearn_KMeans.score.__doc__
377
+
378
+ else:
379
+ from daal4py.sklearn.cluster import KMeans
380
+
381
+ logging.warning(
382
+ "Sklearnex KMeans requires oneDAL version >= 2023.2, falling back to daal4py."
383
+ )
@@ -0,0 +1,153 @@
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 scipy.sparse import csr_matrix
21
+ from sklearn.datasets import make_blobs
22
+
23
+ from daal4py.sklearn._utils import daal_check_version, sklearn_check_version
24
+ from onedal.tests.utils._dataframes_support import (
25
+ _as_numpy,
26
+ _convert_to_dataframe,
27
+ get_dataframes_and_queues,
28
+ get_queues,
29
+ )
30
+ from sklearnex import config_context
31
+
32
+
33
+ def generate_dense_dataset(n_samples, n_features, density, n_clusters):
34
+ np.random.seed(2024 + n_samples + n_features + n_clusters)
35
+ X, _ = make_blobs(
36
+ n_samples=n_samples,
37
+ n_features=n_features,
38
+ centers=n_clusters,
39
+ cluster_std=1.0,
40
+ random_state=42,
41
+ )
42
+ mask = np.random.binomial(1, density, (n_samples, n_features))
43
+ X = X * mask
44
+ return X
45
+
46
+
47
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
48
+ @pytest.mark.parametrize("algorithm", ["lloyd", "elkan"])
49
+ @pytest.mark.parametrize("init", ["k-means++", "random"])
50
+ def test_sklearnex_import_for_dense_data(dataframe, queue, algorithm, init):
51
+ if not sklearn_check_version("1.1") and algorithm == "lloyd":
52
+ pytest.skip("lloyd requires sklearn>=1.1.")
53
+ from sklearnex.cluster import KMeans
54
+
55
+ X_dense = generate_dense_dataset(1000, 10, 0.5, 3)
56
+ X_dense_df = _convert_to_dataframe(X_dense, sycl_queue=queue, target_df=dataframe)
57
+
58
+ kmeans_dense = KMeans(
59
+ n_clusters=3, random_state=0, algorithm=algorithm, init=init
60
+ ).fit(X_dense_df)
61
+
62
+ if daal_check_version((2023, "P", 200)):
63
+ assert "sklearnex" in kmeans_dense.__module__
64
+ else:
65
+ assert "daal4py" in kmeans_dense.__module__
66
+
67
+
68
+ @pytest.mark.skipif(
69
+ not daal_check_version((2024, "P", 700)),
70
+ reason="Sparse data requires oneDAL>=2024.7.0",
71
+ )
72
+ @pytest.mark.parametrize("queue", get_queues())
73
+ @pytest.mark.parametrize("algorithm", ["lloyd", "elkan"])
74
+ @pytest.mark.parametrize("init", ["k-means++", "random"])
75
+ def test_sklearnex_import_for_sparse_data(queue, algorithm, init):
76
+ from sklearnex.cluster import KMeans
77
+
78
+ X_dense = generate_dense_dataset(1000, 10, 0.5, 3)
79
+ X_sparse = csr_matrix(X_dense)
80
+
81
+ kmeans_sparse = KMeans(
82
+ n_clusters=3, random_state=0, algorithm=algorithm, init=init
83
+ ).fit(X_sparse)
84
+
85
+ assert "sklearnex" in kmeans_sparse.__module__
86
+
87
+
88
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
89
+ @pytest.mark.parametrize("algorithm", ["lloyd", "elkan"])
90
+ def test_results_on_dense_gold_data(dataframe, queue, algorithm):
91
+ if not sklearn_check_version("1.1") and algorithm == "lloyd":
92
+ pytest.skip("lloyd requires sklearn>=1.1.")
93
+
94
+ from sklearnex.cluster import KMeans
95
+
96
+ X_train = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
97
+ X_test = np.array([[0, 0], [12, 3]])
98
+ X_train_df = _convert_to_dataframe(X_train, sycl_queue=queue, target_df=dataframe)
99
+ X_test_df = _convert_to_dataframe(X_test, sycl_queue=queue, target_df=dataframe)
100
+
101
+ kmeans = KMeans(n_clusters=2, random_state=0, algorithm=algorithm).fit(X_train_df)
102
+
103
+ if queue and queue.sycl_device.is_gpu:
104
+ # KMeans Init Dense GPU implementation is different from CPU
105
+ expected_cluster_labels = np.array([0, 1], dtype=np.int32)
106
+ expected_cluster_centers = np.array([[1.0, 2.0], [10.0, 2.0]], dtype=np.float32)
107
+ expected_inertia = 16.0
108
+ else:
109
+ expected_cluster_labels = np.array([1, 0], dtype=np.int32)
110
+ expected_cluster_centers = np.array([[10.0, 2.0], [1.0, 2.0]], dtype=np.float32)
111
+ expected_inertia = 16.0
112
+
113
+ assert_allclose(expected_cluster_labels, _as_numpy(kmeans.predict(X_test_df)))
114
+ assert_allclose(expected_cluster_centers, _as_numpy(kmeans.cluster_centers_))
115
+ assert expected_inertia == kmeans.inertia_
116
+
117
+
118
+ @pytest.mark.skipif(
119
+ not daal_check_version((2024, "P", 700)),
120
+ reason="Sparse data requires oneDAL>=2024.7.0",
121
+ )
122
+ @pytest.mark.parametrize("queue", get_queues())
123
+ @pytest.mark.parametrize("init", ["k-means++", "random", "arraylike"])
124
+ @pytest.mark.parametrize("algorithm", ["lloyd", "elkan"])
125
+ @pytest.mark.parametrize(
126
+ "dims", [(1000, 10, 0.95, 3), (50000, 100, 0.75, 10), (10000, 10, 0.8, 5)]
127
+ )
128
+ def test_dense_vs_sparse(queue, init, algorithm, dims):
129
+ from sklearnex.cluster import KMeans
130
+
131
+ if init == "random":
132
+ pytest.skip("Random initialization in sparse K-means is buggy.")
133
+
134
+ # For higher level of sparsity (smaller density) the test may fail
135
+ n_samples, n_features, density, n_clusters = dims
136
+ X_dense = generate_dense_dataset(n_samples, n_features, density, n_clusters)
137
+ X_sparse = csr_matrix(X_dense)
138
+
139
+ if init == "arraylike":
140
+ np.random.seed(2024 + n_samples + n_features + n_clusters)
141
+ init = X_dense[np.random.choice(n_samples, size=n_clusters, replace=False)]
142
+
143
+ kmeans_dense = KMeans(
144
+ n_clusters=n_clusters, random_state=0, init=init, algorithm=algorithm
145
+ ).fit(X_dense)
146
+ kmeans_sparse = KMeans(
147
+ n_clusters=n_clusters, random_state=0, init=init, algorithm=algorithm
148
+ ).fit(X_sparse)
149
+
150
+ assert_allclose(
151
+ kmeans_dense.cluster_centers_,
152
+ kmeans_sparse.cluster_centers_,
153
+ )
@@ -35,7 +35,7 @@ from sklearnex import config_context
35
35
  from .._device_offload import dispatch, wrap_output_data
36
36
  from .._utils import PatchingConditionsChain, register_hyperparameters
37
37
  from ..metrics import pairwise_distances
38
- from ..utils import get_namespace
38
+ from ..utils._array_api import get_namespace
39
39
 
40
40
  if sklearn_check_version("1.2"):
41
41
  from sklearn.utils._param_validation import Interval
@@ -115,9 +115,9 @@ class IncrementalEmpiricalCovariance(BaseEstimator):
115
115
  )
116
116
  return patching_status
117
117
 
118
- def _onedal_finalize_fit(self):
118
+ def _onedal_finalize_fit(self, queue=None):
119
119
  assert hasattr(self, "_onedal_estimator")
120
- self._onedal_estimator.finalize_fit()
120
+ self._onedal_estimator.finalize_fit(queue=queue)
121
121
  self._need_to_finalize = False
122
122
 
123
123
  if not daal_check_version((2024, "P", 400)) and self.assume_centered:
@@ -192,7 +192,7 @@ class IncrementalEmpiricalCovariance(BaseEstimator):
192
192
  else:
193
193
  self.n_samples_seen_ += X.shape[0]
194
194
 
195
- self._onedal_estimator.partial_fit(X, queue)
195
+ self._onedal_estimator.partial_fit(X, queue=queue)
196
196
  finally:
197
197
  self._need_to_finalize = True
198
198
 
@@ -326,7 +326,7 @@ class IncrementalEmpiricalCovariance(BaseEstimator):
326
326
  X_batch = X[batch]
327
327
  self._onedal_partial_fit(X_batch, queue=queue, check_input=False)
328
328
 
329
- self._onedal_finalize_fit()
329
+ self._onedal_finalize_fit(queue=queue)
330
330
 
331
331
  return self
332
332
 
@@ -26,6 +26,7 @@ from sklearn.covariance.tests.test_covariance import (
26
26
  from sklearn.datasets import load_diabetes
27
27
  from sklearn.decomposition import PCA
28
28
 
29
+ from daal4py.sklearn._utils import daal_check_version
29
30
  from onedal.tests.utils._dataframes_support import (
30
31
  _as_numpy,
31
32
  _convert_to_dataframe,
@@ -37,6 +38,11 @@ from onedal.tests.utils._dataframes_support import (
37
38
  @pytest.mark.parametrize("dtype", [np.float32, np.float64])
38
39
  @pytest.mark.parametrize("assume_centered", [True, False])
39
40
  def test_sklearnex_partial_fit_on_gold_data(dataframe, queue, dtype, assume_centered):
41
+ is_gpu = queue is not None and queue.sycl_device.is_gpu
42
+ if assume_centered and is_gpu and not daal_check_version((2025, "P", 0)):
43
+ pytest.skip(
44
+ "Due to a bug on oneDAL side, means are not set to zero when assume_centered=True"
45
+ )
40
46
  from sklearnex.covariance import IncrementalEmpiricalCovariance
41
47
 
42
48
  X = np.array([[0, 1], [0, 1]])
@@ -143,6 +149,11 @@ def test_sklearnex_partial_fit_on_random_data(
143
149
  def test_sklearnex_fit_on_random_data(
144
150
  dataframe, queue, num_batches, row_count, column_count, dtype, assume_centered
145
151
  ):
152
+ is_gpu = queue is not None and queue.sycl_device.is_gpu
153
+ if assume_centered and is_gpu and not daal_check_version((2025, "P", 0)):
154
+ pytest.skip(
155
+ "Due to a bug on oneDAL side, means are not set to zero when assume_centered=True"
156
+ )
146
157
  from sklearnex.covariance import IncrementalEmpiricalCovariance
147
158
 
148
159
  seed = 77
@@ -32,7 +32,7 @@ if daal_check_version((2024, "P", 100)):
32
32
 
33
33
  from .._device_offload import dispatch, wrap_output_data
34
34
  from .._utils import PatchingConditionsChain
35
- from ..utils import get_namespace
35
+ from ..utils._array_api import get_namespace
36
36
 
37
37
  if sklearn_check_version("1.1") and not sklearn_check_version("1.2"):
38
38
  from sklearn.utils import check_scalar
@@ -48,7 +48,6 @@ def get_patch_map_core(preview=False):
48
48
  import sklearn.decomposition as decomposition_module
49
49
 
50
50
  # Preview classes for patching
51
- from .preview.cluster import KMeans as KMeans_sklearnex
52
51
  from .preview.covariance import (
53
52
  EmpiricalCovariance as EmpiricalCovariance_sklearnex,
54
53
  )
@@ -60,14 +59,6 @@ def get_patch_map_core(preview=False):
60
59
  # when preview is used, setting the mapping element[1] to None
61
60
  # should NOT be done. This may lose track of the unpatched
62
61
  # sklearn estimator or function.
63
- # KMeans
64
- cluster_module, _, _ = mapping["kmeans"][0][0]
65
- sklearn_obj = mapping["kmeans"][0][1]
66
- mapping.pop("kmeans")
67
- mapping["kmeans"] = [
68
- [(cluster_module, "KMeans", KMeans_sklearnex), sklearn_obj]
69
- ]
70
-
71
62
  # Covariance
72
63
  mapping["empiricalcovariance"] = [
73
64
  [
@@ -143,6 +134,7 @@ def get_patch_map_core(preview=False):
143
134
  from .utils.parallel import _FuncWrapperOld as _FuncWrapper_sklearnex
144
135
 
145
136
  from .cluster import DBSCAN as DBSCAN_sklearnex
137
+ from .cluster import KMeans as KMeans_sklearnex
146
138
  from .covariance import (
147
139
  IncrementalEmpiricalCovariance as IncrementalEmpiricalCovariance_sklearnex,
148
140
  )
@@ -155,6 +147,7 @@ def get_patch_map_core(preview=False):
155
147
  from .linear_model import (
156
148
  IncrementalLinearRegression as IncrementalLinearRegression_sklearnex,
157
149
  )
150
+ from .linear_model import IncrementalRidge as IncrementalRidge_sklearnex
158
151
  from .linear_model import Lasso as Lasso_sklearnex
159
152
  from .linear_model import LinearRegression as LinearRegression_sklearnex
160
153
  from .linear_model import LogisticRegression as LogisticRegression_sklearnex
@@ -176,6 +169,10 @@ def get_patch_map_core(preview=False):
176
169
  mapping.pop("dbscan")
177
170
  mapping["dbscan"] = [[(cluster_module, "DBSCAN", DBSCAN_sklearnex), None]]
178
171
 
172
+ # KMeans
173
+ mapping.pop("kmeans")
174
+ mapping["kmeans"] = [[(cluster_module, "KMeans", KMeans_sklearnex), None]]
175
+
179
176
  # PCA
180
177
  mapping.pop("pca")
181
178
  mapping["pca"] = [[(decomposition_module, "PCA", PCA_sklearnex), None]]
@@ -412,6 +409,19 @@ def get_patch_map_core(preview=False):
412
409
  ]
413
410
  ]
414
411
 
412
+ if daal_check_version((2024, "P", 600)):
413
+ # IncrementalRidge
414
+ mapping["incrementalridge"] = [
415
+ [
416
+ (
417
+ linear_model_module,
418
+ "IncrementalRidge",
419
+ IncrementalRidge_sklearnex,
420
+ ),
421
+ None,
422
+ ]
423
+ ]
424
+
415
425
  # Configs
416
426
  mapping["set_config"] = [
417
427
  [(base_module, "set_config", set_config_sklearnex), None]