scikit-learn-intelex 2024.7.0__py311-none-win_amd64.whl → 2025.0.0__py311-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.cp311-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.cp311-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.cp311-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.0.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp311-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,778 @@
1
+ # ==============================================================================
2
+ # Copyright 2022 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ from abc import ABCMeta
18
+ from numbers import Integral
19
+
20
+ import numpy as np
21
+
22
+ from daal4py import (
23
+ bf_knn_classification_prediction,
24
+ bf_knn_classification_training,
25
+ kdtree_knn_classification_prediction,
26
+ kdtree_knn_classification_training,
27
+ )
28
+
29
+ from ..common._base import BaseEstimator
30
+ from ..common._estimator_checks import _check_is_fitted, _is_classifier, _is_regressor
31
+ from ..common._mixin import ClassifierMixin, RegressorMixin
32
+ from ..datatypes import _convert_to_supported, from_table, to_table
33
+ from ..utils import (
34
+ _check_array,
35
+ _check_classification_targets,
36
+ _check_n_features,
37
+ _check_X_y,
38
+ _column_or_1d,
39
+ _num_samples,
40
+ )
41
+
42
+
43
+ class NeighborsCommonBase(BaseEstimator, metaclass=ABCMeta):
44
+ def _parse_auto_method(self, method, n_samples, n_features):
45
+ result_method = method
46
+
47
+ if method in ["auto", "ball_tree"]:
48
+ condition = (
49
+ self.n_neighbors is not None and self.n_neighbors >= n_samples // 2
50
+ )
51
+ if self.metric == "precomputed" or n_features > 15 or condition:
52
+ result_method = "brute"
53
+ else:
54
+ if self.metric == "euclidean":
55
+ result_method = "kd_tree"
56
+ else:
57
+ result_method = "brute"
58
+
59
+ return result_method
60
+
61
+ def _validate_data(
62
+ self, X, y=None, reset=True, validate_separately=False, **check_params
63
+ ):
64
+ if y is None:
65
+ if self.requires_y:
66
+ raise ValueError(
67
+ f"This {self.__class__.__name__} estimator "
68
+ f"requires y to be passed, but the target y is None."
69
+ )
70
+ X = _check_array(X, **check_params)
71
+ out = X, y
72
+ else:
73
+ if validate_separately:
74
+ # We need this because some estimators validate X and y
75
+ # separately, and in general, separately calling _check_array()
76
+ # on X and y isn't equivalent to just calling _check_X_y()
77
+ # :(
78
+ check_X_params, check_y_params = validate_separately
79
+ X = _check_array(X, **check_X_params)
80
+ y = _check_array(y, **check_y_params)
81
+ else:
82
+ X, y = _check_X_y(X, y, **check_params)
83
+ out = X, y
84
+
85
+ if check_params.get("ensure_2d", True):
86
+ _check_n_features(self, X, reset=reset)
87
+
88
+ return out
89
+
90
+ def _get_weights(self, dist, weights):
91
+ if weights in (None, "uniform"):
92
+ return None
93
+ if weights == "distance":
94
+ # if user attempts to classify a point that was zero distance from one
95
+ # or more training points, those training points are weighted as 1.0
96
+ # and the other points as 0.0
97
+ if dist.dtype is np.dtype(object):
98
+ for point_dist_i, point_dist in enumerate(dist):
99
+ # check if point_dist is iterable
100
+ # (ex: RadiusNeighborClassifier.predict may set an element of
101
+ # dist to 1e-6 to represent an 'outlier')
102
+ if hasattr(point_dist, "__contains__") and 0.0 in point_dist:
103
+ dist[point_dist_i] = point_dist == 0.0
104
+ else:
105
+ dist[point_dist_i] = 1.0 / point_dist
106
+ else:
107
+ with np.errstate(divide="ignore"):
108
+ dist = 1.0 / dist
109
+ inf_mask = np.isinf(dist)
110
+ inf_row = np.any(inf_mask, axis=1)
111
+ dist[inf_row] = inf_mask[inf_row]
112
+ return dist
113
+ elif callable(weights):
114
+ return weights(dist)
115
+ else:
116
+ raise ValueError(
117
+ "weights not recognized: should be 'uniform', "
118
+ "'distance', or a callable function"
119
+ )
120
+
121
+ def _get_onedal_params(self, X, y=None, n_neighbors=None):
122
+ class_count = 0 if self.classes_ is None else len(self.classes_)
123
+ weights = getattr(self, "weights", "uniform")
124
+ if self.effective_metric_ == "manhattan":
125
+ p = 1.0
126
+ elif self.effective_metric_ == "euclidean":
127
+ p = 2.0
128
+ else:
129
+ p = self.p
130
+ return {
131
+ "fptype": "float" if X.dtype == np.float32 else "double",
132
+ "vote_weights": "uniform" if weights == "uniform" else "distance",
133
+ "method": self._fit_method,
134
+ "radius": self.radius,
135
+ "class_count": class_count,
136
+ "neighbor_count": self.n_neighbors if n_neighbors is None else n_neighbors,
137
+ "metric": self.effective_metric_,
138
+ "p": p,
139
+ "metric_params": self.effective_metric_params_,
140
+ "result_option": "indices|distances" if y is None else "responses",
141
+ }
142
+
143
+ def _get_daal_params(self, data, n_neighbors=None):
144
+ class_count = 0 if self.classes_ is None else len(self.classes_)
145
+ weights = getattr(self, "weights", "uniform")
146
+ params = {
147
+ "fptype": "float" if data.dtype == np.float32 else "double",
148
+ "method": "defaultDense",
149
+ "k": self.n_neighbors if n_neighbors is None else n_neighbors,
150
+ "voteWeights": "voteUniform" if weights == "uniform" else "voteDistance",
151
+ "resultsToCompute": "computeIndicesOfNeighbors|computeDistances",
152
+ "resultsToEvaluate": (
153
+ "none"
154
+ if getattr(self, "_y", None) is None or _is_regressor(self)
155
+ else "computeClassLabels"
156
+ ),
157
+ }
158
+ if class_count != 0:
159
+ params["nClasses"] = class_count
160
+ return params
161
+
162
+
163
+ class NeighborsBase(NeighborsCommonBase, metaclass=ABCMeta):
164
+ def __init__(
165
+ self,
166
+ n_neighbors=None,
167
+ radius=None,
168
+ algorithm="auto",
169
+ metric="minkowski",
170
+ p=2,
171
+ metric_params=None,
172
+ ):
173
+ self.n_neighbors = n_neighbors
174
+ self.radius = radius
175
+ self.algorithm = algorithm
176
+ self.metric = metric
177
+ self.p = p
178
+ self.metric_params = metric_params
179
+
180
+ def _validate_targets(self, y, dtype):
181
+ arr = _column_or_1d(y, warn=True)
182
+
183
+ try:
184
+ return arr.astype(dtype, copy=False)
185
+ except ValueError:
186
+ return arr
187
+
188
+ def _validate_n_classes(self):
189
+ if len(self.classes_) < 2:
190
+ raise ValueError(
191
+ "The number of classes has to be greater than one; got %d"
192
+ " class" % len(self.classes_)
193
+ )
194
+
195
+ def _fit(self, X, y, queue):
196
+ self._onedal_model = None
197
+ self._tree = None
198
+ self._shape = None
199
+ self.classes_ = None
200
+ self.effective_metric_ = getattr(self, "effective_metric_", self.metric)
201
+ self.effective_metric_params_ = getattr(
202
+ self, "effective_metric_params_", self.metric_params
203
+ )
204
+
205
+ if y is not None or self.requires_y:
206
+ shape = getattr(y, "shape", None)
207
+ X, y = super()._validate_data(
208
+ X, y, dtype=[np.float64, np.float32], accept_sparse="csr"
209
+ )
210
+ self._shape = shape if shape is not None else y.shape
211
+
212
+ if _is_classifier(self):
213
+ if y.ndim == 1 or y.ndim == 2 and y.shape[1] == 1:
214
+ self.outputs_2d_ = False
215
+ y = y.reshape((-1, 1))
216
+ else:
217
+ self.outputs_2d_ = True
218
+
219
+ _check_classification_targets(y)
220
+ self.classes_ = []
221
+ self._y = np.empty(y.shape, dtype=int)
222
+ for k in range(self._y.shape[1]):
223
+ classes, self._y[:, k] = np.unique(y[:, k], return_inverse=True)
224
+ self.classes_.append(classes)
225
+
226
+ if not self.outputs_2d_:
227
+ self.classes_ = self.classes_[0]
228
+ self._y = self._y.ravel()
229
+
230
+ self._validate_n_classes()
231
+ else:
232
+ self._y = y
233
+ else:
234
+ X, _ = super()._validate_data(X, dtype=[np.float64, np.float32])
235
+
236
+ self.n_samples_fit_ = X.shape[0]
237
+ self.n_features_in_ = X.shape[1]
238
+ self._fit_X = X
239
+
240
+ if self.n_neighbors is not None:
241
+ if self.n_neighbors <= 0:
242
+ raise ValueError("Expected n_neighbors > 0. Got %d" % self.n_neighbors)
243
+ if not isinstance(self.n_neighbors, Integral):
244
+ raise TypeError(
245
+ "n_neighbors does not take %s value, "
246
+ "enter integer value" % type(self.n_neighbors)
247
+ )
248
+
249
+ self._fit_method = super()._parse_auto_method(
250
+ self.algorithm, self.n_samples_fit_, self.n_features_in_
251
+ )
252
+
253
+ _fit_y = None
254
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
255
+
256
+ if _is_classifier(self) or (_is_regressor(self) and gpu_device):
257
+ _fit_y = self._validate_targets(self._y, X.dtype).reshape((-1, 1))
258
+ result = self._onedal_fit(X, _fit_y, queue)
259
+
260
+ if y is not None and _is_regressor(self):
261
+ self._y = y if self._shape is None else y.reshape(self._shape)
262
+
263
+ self._onedal_model = result
264
+ result = self
265
+
266
+ return result
267
+
268
+ def _kneighbors(self, X=None, n_neighbors=None, return_distance=True, queue=None):
269
+ n_features = getattr(self, "n_features_in_", None)
270
+ shape = getattr(X, "shape", None)
271
+ if n_features and shape and len(shape) > 1 and shape[1] != n_features:
272
+ raise ValueError(
273
+ (
274
+ f"X has {X.shape[1]} features, "
275
+ f"but kneighbors is expecting "
276
+ f"{n_features} features as input"
277
+ )
278
+ )
279
+
280
+ _check_is_fitted(self)
281
+
282
+ if n_neighbors is None:
283
+ n_neighbors = self.n_neighbors
284
+ elif n_neighbors <= 0:
285
+ raise ValueError("Expected n_neighbors > 0. Got %d" % n_neighbors)
286
+ else:
287
+ if not isinstance(n_neighbors, Integral):
288
+ raise TypeError(
289
+ "n_neighbors does not take %s value, "
290
+ "enter integer value" % type(n_neighbors)
291
+ )
292
+
293
+ if X is not None:
294
+ query_is_train = False
295
+ X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
296
+ else:
297
+ query_is_train = True
298
+ X = self._fit_X
299
+ # Include an extra neighbor to account for the sample itself being
300
+ # returned, which is removed later
301
+ n_neighbors += 1
302
+
303
+ n_samples_fit = self.n_samples_fit_
304
+ if n_neighbors > n_samples_fit:
305
+ if query_is_train:
306
+ n_neighbors -= 1 # ok to modify inplace because an error is raised
307
+ inequality_str = "n_neighbors < n_samples_fit"
308
+ else:
309
+ inequality_str = "n_neighbors <= n_samples_fit"
310
+ raise ValueError(
311
+ f"Expected {inequality_str}, but "
312
+ f"n_neighbors = {n_neighbors}, n_samples_fit = {n_samples_fit}, "
313
+ f"n_samples = {X.shape[0]}" # include n_samples for common tests
314
+ )
315
+
316
+ chunked_results = None
317
+ method = super()._parse_auto_method(
318
+ self._fit_method, self.n_samples_fit_, n_features
319
+ )
320
+
321
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
322
+ if self.effective_metric_ == "euclidean" and not gpu_device:
323
+ params = super()._get_daal_params(X, n_neighbors=n_neighbors)
324
+ else:
325
+ params = super()._get_onedal_params(X, n_neighbors=n_neighbors)
326
+
327
+ prediction_results = self._onedal_predict(
328
+ self._onedal_model, X, params, queue=queue
329
+ )
330
+
331
+ if self.effective_metric_ == "euclidean" and not gpu_device:
332
+ distances = prediction_results.distances
333
+ indices = prediction_results.indices
334
+ else:
335
+ distances = from_table(prediction_results.distances)
336
+ indices = from_table(prediction_results.indices)
337
+
338
+ if method == "kd_tree":
339
+ for i in range(distances.shape[0]):
340
+ seq = distances[i].argsort()
341
+ indices[i] = indices[i][seq]
342
+ distances[i] = distances[i][seq]
343
+
344
+ if return_distance:
345
+ results = distances, indices
346
+ else:
347
+ results = indices
348
+
349
+ if chunked_results is not None:
350
+ if return_distance:
351
+ neigh_dist, neigh_ind = zip(*chunked_results)
352
+ results = np.vstack(neigh_dist), np.vstack(neigh_ind)
353
+ else:
354
+ results = np.vstack(chunked_results)
355
+
356
+ if not query_is_train:
357
+ return results
358
+
359
+ # If the query data is the same as the indexed data, we would like
360
+ # to ignore the first nearest neighbor of every sample, i.e
361
+ # the sample itself.
362
+ if return_distance:
363
+ neigh_dist, neigh_ind = results
364
+ else:
365
+ neigh_ind = results
366
+
367
+ n_queries, _ = X.shape
368
+ sample_range = np.arange(n_queries)[:, None]
369
+ sample_mask = neigh_ind != sample_range
370
+
371
+ # Corner case: When the number of duplicates are more
372
+ # than the number of neighbors, the first NN will not
373
+ # be the sample, but a duplicate.
374
+ # In that case mask the first duplicate.
375
+ dup_gr_nbrs = np.all(sample_mask, axis=1)
376
+ sample_mask[:, 0][dup_gr_nbrs] = False
377
+
378
+ neigh_ind = np.reshape(neigh_ind[sample_mask], (n_queries, n_neighbors - 1))
379
+
380
+ if return_distance:
381
+ neigh_dist = np.reshape(neigh_dist[sample_mask], (n_queries, n_neighbors - 1))
382
+ return neigh_dist, neigh_ind
383
+ return neigh_ind
384
+
385
+
386
+ class KNeighborsClassifier(NeighborsBase, ClassifierMixin):
387
+ def __init__(
388
+ self,
389
+ n_neighbors=5,
390
+ *,
391
+ weights="uniform",
392
+ algorithm="auto",
393
+ p=2,
394
+ metric="minkowski",
395
+ metric_params=None,
396
+ **kwargs,
397
+ ):
398
+ super().__init__(
399
+ n_neighbors=n_neighbors,
400
+ algorithm=algorithm,
401
+ metric=metric,
402
+ p=p,
403
+ metric_params=metric_params,
404
+ **kwargs,
405
+ )
406
+ self.weights = weights
407
+
408
+ def _get_daal_params(self, data):
409
+ params = super()._get_daal_params(data)
410
+ params["resultsToEvaluate"] = "computeClassLabels"
411
+ params["resultsToCompute"] = ""
412
+ return params
413
+
414
+ def _onedal_fit(self, X, y, queue):
415
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
416
+ if self.effective_metric_ == "euclidean" and not gpu_device:
417
+ params = self._get_daal_params(X)
418
+ if self._fit_method == "brute":
419
+ train_alg = bf_knn_classification_training
420
+
421
+ else:
422
+ train_alg = kdtree_knn_classification_training
423
+
424
+ return train_alg(**params).compute(X, y).model
425
+
426
+ policy = self._get_policy(queue, X, y)
427
+ X, y = _convert_to_supported(policy, X, y)
428
+ params = self._get_onedal_params(X, y)
429
+ train_alg = self._get_backend(
430
+ "neighbors", "classification", "train", policy, params, *to_table(X, y)
431
+ )
432
+
433
+ return train_alg.model
434
+
435
+ def _onedal_predict(self, model, X, params, queue):
436
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
437
+ if self.effective_metric_ == "euclidean" and not gpu_device:
438
+ if self._fit_method == "brute":
439
+ predict_alg = bf_knn_classification_prediction
440
+
441
+ else:
442
+ predict_alg = kdtree_knn_classification_prediction
443
+
444
+ return predict_alg(**params).compute(X, model)
445
+
446
+ policy = self._get_policy(queue, X)
447
+ X = _convert_to_supported(policy, X)
448
+ if hasattr(self, "_onedal_model"):
449
+ model = self._onedal_model
450
+ else:
451
+ model = self._create_model(
452
+ self._get_backend("neighbors", "classification", None)
453
+ )
454
+ if "responses" not in params["result_option"]:
455
+ params["result_option"] += "|responses"
456
+ params["fptype"] = "float" if X.dtype == np.float32 else "double"
457
+ result = self._get_backend(
458
+ "neighbors", "classification", "infer", policy, params, model, to_table(X)
459
+ )
460
+
461
+ return result
462
+
463
+ def fit(self, X, y, queue=None):
464
+ return super()._fit(X, y, queue=queue)
465
+
466
+ def predict(self, X, queue=None):
467
+ X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
468
+ onedal_model = getattr(self, "_onedal_model", None)
469
+ n_features = getattr(self, "n_features_in_", None)
470
+ n_samples_fit_ = getattr(self, "n_samples_fit_", None)
471
+ shape = getattr(X, "shape", None)
472
+ if n_features and shape and len(shape) > 1 and shape[1] != n_features:
473
+ raise ValueError(
474
+ (
475
+ f"X has {X.shape[1]} features, "
476
+ f"but KNNClassifier is expecting "
477
+ f"{n_features} features as input"
478
+ )
479
+ )
480
+
481
+ _check_is_fitted(self)
482
+
483
+ self._fit_method = super()._parse_auto_method(
484
+ self.algorithm, n_samples_fit_, n_features
485
+ )
486
+
487
+ self._validate_n_classes()
488
+
489
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
490
+ if self.effective_metric_ == "euclidean" and not gpu_device:
491
+ params = self._get_daal_params(X)
492
+ else:
493
+ params = self._get_onedal_params(X)
494
+
495
+ prediction_result = self._onedal_predict(onedal_model, X, params, queue=queue)
496
+ if self.effective_metric_ == "euclidean" and not gpu_device:
497
+ responses = prediction_result.prediction
498
+ else:
499
+ responses = from_table(prediction_result.responses)
500
+ result = self.classes_.take(np.asarray(responses.ravel(), dtype=np.intp))
501
+
502
+ return result
503
+
504
+ def predict_proba(self, X, queue=None):
505
+ neigh_dist, neigh_ind = self.kneighbors(X, queue=queue)
506
+
507
+ classes_ = self.classes_
508
+ _y = self._y
509
+ if not self.outputs_2d_:
510
+ _y = self._y.reshape((-1, 1))
511
+ classes_ = [self.classes_]
512
+
513
+ n_queries = _num_samples(X)
514
+
515
+ weights = self._get_weights(neigh_dist, self.weights)
516
+ if weights is None:
517
+ weights = np.ones_like(neigh_ind)
518
+
519
+ all_rows = np.arange(n_queries)
520
+ probabilities = []
521
+ for k, classes_k in enumerate(classes_):
522
+ pred_labels = _y[:, k][neigh_ind]
523
+ proba_k = np.zeros((n_queries, classes_k.size))
524
+
525
+ # a simple ':' index doesn't work right
526
+ for i, idx in enumerate(pred_labels.T): # loop is O(n_neighbors)
527
+ proba_k[all_rows, idx] += weights[:, i]
528
+
529
+ # normalize 'votes' into real [0,1] probabilities
530
+ normalizer = proba_k.sum(axis=1)[:, np.newaxis]
531
+ normalizer[normalizer == 0.0] = 1.0
532
+ proba_k /= normalizer
533
+
534
+ probabilities.append(proba_k)
535
+
536
+ if not self.outputs_2d_:
537
+ probabilities = probabilities[0]
538
+
539
+ return probabilities
540
+
541
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True, queue=None):
542
+ return super()._kneighbors(X, n_neighbors, return_distance, queue=queue)
543
+
544
+
545
+ class KNeighborsRegressor(NeighborsBase, RegressorMixin):
546
+ def __init__(
547
+ self,
548
+ n_neighbors=5,
549
+ *,
550
+ weights="uniform",
551
+ algorithm="auto",
552
+ p=2,
553
+ metric="minkowski",
554
+ metric_params=None,
555
+ **kwargs,
556
+ ):
557
+ super().__init__(
558
+ n_neighbors=n_neighbors,
559
+ algorithm=algorithm,
560
+ metric=metric,
561
+ p=p,
562
+ metric_params=metric_params,
563
+ **kwargs,
564
+ )
565
+ self.weights = weights
566
+
567
+ def _get_onedal_params(self, X, y=None):
568
+ params = super()._get_onedal_params(X, y)
569
+ return params
570
+
571
+ def _get_daal_params(self, data):
572
+ params = super()._get_daal_params(data)
573
+ params["resultsToCompute"] = "computeIndicesOfNeighbors|computeDistances"
574
+ params["resultsToEvaluate"] = "none"
575
+ return params
576
+
577
+ def _onedal_fit(self, X, y, queue):
578
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
579
+ if self.effective_metric_ == "euclidean" and not gpu_device:
580
+ params = self._get_daal_params(X)
581
+ if self._fit_method == "brute":
582
+ train_alg = bf_knn_classification_training
583
+
584
+ else:
585
+ train_alg = kdtree_knn_classification_training
586
+
587
+ return train_alg(**params).compute(X, y).model
588
+
589
+ policy = self._get_policy(queue, X, y)
590
+ X, y = _convert_to_supported(policy, X, y)
591
+ params = self._get_onedal_params(X, y)
592
+ train_alg_regr = self._get_backend("neighbors", "regression", None)
593
+ train_alg_srch = self._get_backend("neighbors", "search", None)
594
+
595
+ if gpu_device:
596
+ return train_alg_regr.train(policy, params, *to_table(X, y)).model
597
+ return train_alg_srch.train(policy, params, to_table(X)).model
598
+
599
+ def _onedal_predict(self, model, X, params, queue):
600
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
601
+ if self.effective_metric_ == "euclidean" and not gpu_device:
602
+ if self._fit_method == "brute":
603
+ predict_alg = bf_knn_classification_prediction
604
+
605
+ else:
606
+ predict_alg = kdtree_knn_classification_prediction
607
+
608
+ return predict_alg(**params).compute(X, model)
609
+
610
+ policy = self._get_policy(queue, X)
611
+ X = _convert_to_supported(policy, X)
612
+ backend = (
613
+ self._get_backend("neighbors", "regression", None)
614
+ if gpu_device
615
+ else self._get_backend("neighbors", "search", None)
616
+ )
617
+
618
+ if hasattr(self, "_onedal_model"):
619
+ model = self._onedal_model
620
+ else:
621
+ model = self._create_model(backend)
622
+ if "responses" not in params["result_option"] and gpu_device:
623
+ params["result_option"] += "|responses"
624
+ params["fptype"] = "float" if X.dtype == np.float32 else "double"
625
+ result = backend.infer(policy, params, model, to_table(X))
626
+
627
+ return result
628
+
629
+ def fit(self, X, y, queue=None):
630
+ return super()._fit(X, y, queue=queue)
631
+
632
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True, queue=None):
633
+ return super()._kneighbors(X, n_neighbors, return_distance, queue=queue)
634
+
635
+ def _predict_gpu(self, X, queue=None):
636
+ X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
637
+ onedal_model = getattr(self, "_onedal_model", None)
638
+ n_features = getattr(self, "n_features_in_", None)
639
+ n_samples_fit_ = getattr(self, "n_samples_fit_", None)
640
+ shape = getattr(X, "shape", None)
641
+ if n_features and shape and len(shape) > 1 and shape[1] != n_features:
642
+ raise ValueError(
643
+ (
644
+ f"X has {X.shape[1]} features, "
645
+ f"but KNNClassifier is expecting "
646
+ f"{n_features} features as input"
647
+ )
648
+ )
649
+
650
+ _check_is_fitted(self)
651
+
652
+ self._fit_method = super()._parse_auto_method(
653
+ self.algorithm, n_samples_fit_, n_features
654
+ )
655
+
656
+ params = self._get_onedal_params(X)
657
+
658
+ prediction_result = self._onedal_predict(onedal_model, X, params, queue=queue)
659
+ responses = from_table(prediction_result.responses)
660
+ result = responses.ravel()
661
+
662
+ return result
663
+
664
+ def _predict_skl(self, X, queue=None):
665
+ neigh_dist, neigh_ind = self.kneighbors(X, queue=queue)
666
+
667
+ weights = self._get_weights(neigh_dist, self.weights)
668
+
669
+ _y = self._y
670
+ if _y.ndim == 1:
671
+ _y = _y.reshape((-1, 1))
672
+
673
+ if weights is None:
674
+ y_pred = np.mean(_y[neigh_ind], axis=1)
675
+ else:
676
+ y_pred = np.empty((X.shape[0], _y.shape[1]), dtype=np.float64)
677
+ denom = np.sum(weights, axis=1)
678
+
679
+ for j in range(_y.shape[1]):
680
+ num = np.sum(_y[neigh_ind, j] * weights, axis=1)
681
+ y_pred[:, j] = num / denom
682
+
683
+ if self._y.ndim == 1:
684
+ y_pred = y_pred.ravel()
685
+
686
+ return y_pred
687
+
688
+ def predict(self, X, queue=None):
689
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
690
+ is_uniform_weights = getattr(self, "weights", "uniform") == "uniform"
691
+ return (
692
+ self._predict_gpu(X, queue=queue)
693
+ if gpu_device and is_uniform_weights
694
+ else self._predict_skl(X, queue=queue)
695
+ )
696
+
697
+
698
+ class NearestNeighbors(NeighborsBase):
699
+ def __init__(
700
+ self,
701
+ n_neighbors=5,
702
+ *,
703
+ weights="uniform",
704
+ algorithm="auto",
705
+ p=2,
706
+ metric="minkowski",
707
+ metric_params=None,
708
+ **kwargs,
709
+ ):
710
+ super().__init__(
711
+ n_neighbors=n_neighbors,
712
+ algorithm=algorithm,
713
+ metric=metric,
714
+ p=p,
715
+ metric_params=metric_params,
716
+ **kwargs,
717
+ )
718
+ self.weights = weights
719
+
720
+ def _get_daal_params(self, data):
721
+ params = super()._get_daal_params(data)
722
+ params["resultsToCompute"] = "computeIndicesOfNeighbors|computeDistances"
723
+ params["resultsToEvaluate"] = (
724
+ "none" if getattr(self, "_y", None) is None else "computeClassLabels"
725
+ )
726
+ return params
727
+
728
+ def _onedal_fit(self, X, y, queue):
729
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
730
+ if self.effective_metric_ == "euclidean" and not gpu_device:
731
+ params = self._get_daal_params(X)
732
+ if self._fit_method == "brute":
733
+ train_alg = bf_knn_classification_training
734
+
735
+ else:
736
+ train_alg = kdtree_knn_classification_training
737
+
738
+ return train_alg(**params).compute(X, y).model
739
+
740
+ policy = self._get_policy(queue, X, y)
741
+ X, y = _convert_to_supported(policy, X, y)
742
+ params = self._get_onedal_params(X, y)
743
+ train_alg = self._get_backend(
744
+ "neighbors", "search", "train", policy, params, to_table(X)
745
+ )
746
+
747
+ return train_alg.model
748
+
749
+ def _onedal_predict(self, model, X, params, queue):
750
+ gpu_device = queue is not None and queue.sycl_device.is_gpu
751
+ if self.effective_metric_ == "euclidean" and not gpu_device:
752
+ if self._fit_method == "brute":
753
+ predict_alg = bf_knn_classification_prediction
754
+
755
+ else:
756
+ predict_alg = kdtree_knn_classification_prediction
757
+
758
+ return predict_alg(**params).compute(X, model)
759
+
760
+ policy = self._get_policy(queue, X)
761
+ X = _convert_to_supported(policy, X)
762
+ if hasattr(self, "_onedal_model"):
763
+ model = self._onedal_model
764
+ else:
765
+ model = self._create_model(self._get_backend("neighbors", "search", None))
766
+
767
+ params["fptype"] = "float" if X.dtype == np.float32 else "double"
768
+ result = self._get_backend(
769
+ "neighbors", "search", "infer", policy, params, model, to_table(X)
770
+ )
771
+
772
+ return result
773
+
774
+ def fit(self, X, y, queue=None):
775
+ return super()._fit(X, y, queue=queue)
776
+
777
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True, queue=None):
778
+ return super()._kneighbors(X, n_neighbors, return_distance, queue=queue)