scikit-learn-intelex 2024.1.0__py311-none-win_amd64.whl → 2025.1.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 (277) hide show
  1. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
  2. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
  3. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/_daal4py.cp311-win_amd64.pyd +0 -0
  4. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
  5. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
  6. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
  7. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp311-win_amd64.pyd +0 -0
  8. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
  9. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +248 -0
  10. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
  11. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
  12. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
  13. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
  14. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition}/__init__.py +3 -3
  16. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
  17. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
  18. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
  19. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
  20. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -29
  23. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
  25. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +2 -2
  27. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
  28. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
  31. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
  32. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +4 -2
  34. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
  36. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +236 -0
  37. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
  38. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
  39. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
  40. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/_models_info.py +13 -22
  44. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/test_patching.py +10 -42
  46. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/utils/_launch_algorithms.py +4 -5
  47. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
  48. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
  49. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
  50. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
  51. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
  54. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
  55. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/__init__.py +21 -0
  56. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
  57. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +693 -0
  59. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/__init__.py +83 -0
  60. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_config.py +54 -0
  61. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_device_offload.py +222 -0
  62. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp311-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp311-win_amd64.pyd +0 -0
  64. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -0
  65. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
  66. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +160 -0
  67. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
  68. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
  69. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
  70. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +110 -0
  71. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +564 -0
  72. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +115 -0
  73. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
  74. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
  75. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
  76. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
  77. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
  78. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
  79. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_policy.py +59 -0
  80. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
  81. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +125 -0
  82. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +76 -0
  83. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance}/__init__.py +3 -2
  84. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +125 -0
  85. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +146 -0
  86. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
  87. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +122 -0
  88. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
  89. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +154 -0
  90. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +126 -0
  91. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +414 -0
  92. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
  93. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +204 -0
  94. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
  95. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +198 -0
  96. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
  97. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +727 -0
  98. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
  99. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
  100. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +258 -0
  101. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +329 -0
  102. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +249 -0
  103. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
  104. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
  105. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +250 -0
  106. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
  107. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
  108. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
  109. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +767 -0
  110. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
  111. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
  112. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
  113. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +153 -0
  114. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
  115. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
  116. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
  117. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
  118. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
  119. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
  120. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +176 -0
  121. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
  122. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/test_common.py +57 -0
  123. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +162 -0
  124. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +102 -0
  125. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
  126. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +81 -0
  127. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_dpep_helpers.py +56 -0
  128. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/validation.py +440 -0
  129. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__init__.py +10 -7
  130. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_config.py +22 -16
  131. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
  132. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_utils.py +27 -4
  133. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  134. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +230 -0
  135. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
  136. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
  137. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
  138. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
  139. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +19 -10
  140. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +395 -0
  141. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
  142. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +159 -0
  143. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
  144. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
  145. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +398 -0
  146. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +237 -0
  147. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +425 -0
  148. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_preview_pca.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +25 -9
  149. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +241 -60
  150. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +250 -188
  151. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +39 -21
  152. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
  153. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  154. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -0
  155. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +482 -0
  156. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +425 -0
  157. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +341 -0
  158. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex}/linear_model/logistic_regression.py +194 -133
  159. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +7 -0
  160. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
  161. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  162. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
  163. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +134 -0
  164. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +4 -0
  165. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -0
  166. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
  167. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +5 -0
  168. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +1 -1
  169. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +236 -0
  170. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +53 -6
  171. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +51 -155
  172. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +46 -149
  173. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +55 -100
  174. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +16 -18
  175. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview}/__init__.py +1 -3
  176. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +138 -0
  177. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +18 -5
  178. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  179. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +233 -0
  180. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  181. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model}/__init__.py +19 -19
  182. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +424 -0
  183. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  184. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +1 -0
  185. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  186. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  187. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  188. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  189. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  190. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  191. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  192. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +21 -0
  193. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  194. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  195. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  196. {scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition}/__init__.py +3 -2
  197. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +11 -12
  198. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  199. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  200. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +4 -12
  201. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  202. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +3 -1
  203. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +14 -18
  204. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  205. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  206. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  207. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  208. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  209. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
  210. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +172 -78
  211. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +74 -70
  212. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +170 -77
  213. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +66 -66
  214. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -20
  215. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +390 -0
  216. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
  217. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +379 -0
  218. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +276 -0
  219. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
  220. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +6 -8
  221. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +385 -0
  222. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +321 -0
  223. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +44 -0
  224. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +371 -0
  225. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  226. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
  227. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
  228. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/METADATA +231 -230
  229. scikit_learn_intelex-2025.1.0.dist-info/RECORD +257 -0
  230. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/WHEEL +1 -1
  231. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -223
  232. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -17
  233. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -30
  234. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -17
  235. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -27
  236. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -388
  237. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -17
  238. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -82
  239. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -28
  240. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/neighbors/lof.py +0 -436
  241. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  242. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -376
  243. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -98
  244. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/pca.py +0 -376
  245. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_preview_logistic_regression.py +0 -59
  246. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -188
  247. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -225
  248. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -227
  249. scikit_learn_intelex-2024.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  250. scikit_learn_intelex-2024.1.0.dist-info/RECORD +0 -97
  251. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
  252. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  253. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  254. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  255. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
  256. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  257. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
  258. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  259. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  260. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  261. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  262. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  263. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  264. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  265. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  266. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  267. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  268. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  269. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  270. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  271. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  272. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  273. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  274. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  275. {scikit_learn_intelex-2024.1.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
  276. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/LICENSE.txt +0 -0
  277. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,377 @@
1
+ # ==============================================================================
2
+ # Copyright 2023 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ # daal4py Model builders API
18
+
19
+ from typing import Literal, Optional
20
+
21
+ import numpy as np
22
+
23
+ import daal4py as d4p
24
+
25
+ try:
26
+ from pandas import DataFrame
27
+ from pandas.core.dtypes.cast import find_common_type
28
+
29
+ pandas_is_imported = True
30
+ except (ImportError, ModuleNotFoundError):
31
+ pandas_is_imported = False
32
+
33
+ from sklearn.utils.metaestimators import available_if
34
+
35
+
36
+ def parse_dtype(dt):
37
+ if dt == np.double:
38
+ return "double"
39
+ if dt == np.single:
40
+ return "float"
41
+ raise ValueError(f"Input array has unexpected dtype = {dt}")
42
+
43
+
44
+ def getFPType(X):
45
+ if pandas_is_imported:
46
+ if isinstance(X, DataFrame):
47
+ dt = find_common_type(X.dtypes.tolist())
48
+ return parse_dtype(dt)
49
+
50
+ dt = getattr(X, "dtype", None)
51
+ return parse_dtype(dt)
52
+
53
+
54
+ class GBTDAALBaseModel:
55
+ def __init__(self):
56
+ self.model_type: Optional[Literal["xgboost", "catboost", "lightgbm"]] = None
57
+
58
+ @property
59
+ def _is_regression(self):
60
+ return hasattr(self, "daal_model_") and isinstance(
61
+ self.daal_model_, d4p.gbt_regression_model
62
+ )
63
+
64
+ def _get_params_from_lightgbm(self, params):
65
+ self.n_classes_ = params["num_tree_per_iteration"]
66
+ objective_fun = params["objective"]
67
+ if self.n_classes_ <= 2:
68
+ if "binary" in objective_fun: # nClasses == 1
69
+ self.n_classes_ = 2
70
+
71
+ self.n_features_in_ = params["max_feature_idx"] + 1
72
+
73
+ def _get_params_from_xgboost(self, params):
74
+ self.n_classes_ = int(params["learner"]["learner_model_param"]["num_class"])
75
+ objective_fun = params["learner"]["learner_train_param"]["objective"]
76
+ if self.n_classes_ <= 2:
77
+ if objective_fun in ["binary:logistic", "binary:logitraw"]:
78
+ self.n_classes_ = 2
79
+
80
+ self.n_features_in_ = int(params["learner"]["learner_model_param"]["num_feature"])
81
+
82
+ def _get_params_from_catboost(self, params):
83
+ if "class_params" in params["model_info"]:
84
+ self.n_classes_ = len(params["model_info"]["class_params"]["class_to_label"])
85
+ self.n_features_in_ = len(params["features_info"]["float_features"])
86
+
87
+ def _convert_model_from_lightgbm(self, booster):
88
+ lgbm_params = d4p.get_lightgbm_params(booster)
89
+ self.daal_model_ = d4p.get_gbt_model_from_lightgbm(booster, lgbm_params)
90
+ self._get_params_from_lightgbm(lgbm_params)
91
+
92
+ def _convert_model_from_xgboost(self, booster):
93
+ xgb_params = d4p.get_xgboost_params(booster)
94
+ self.daal_model_ = d4p.get_gbt_model_from_xgboost(booster, xgb_params)
95
+ self._get_params_from_xgboost(xgb_params)
96
+
97
+ def _convert_model_from_catboost(self, booster):
98
+ catboost_params = d4p.get_catboost_params(booster)
99
+ self.daal_model_ = d4p.get_gbt_model_from_catboost(booster)
100
+ self._get_params_from_catboost(catboost_params)
101
+
102
+ def _convert_model(self, model):
103
+ (submodule_name, class_name) = (
104
+ model.__class__.__module__,
105
+ model.__class__.__name__,
106
+ )
107
+ self_class_name = self.__class__.__name__
108
+
109
+ # Build GBTDAALClassifier from LightGBM
110
+ if (submodule_name, class_name) == ("lightgbm.sklearn", "LGBMClassifier"):
111
+ if self_class_name == "GBTDAALClassifier":
112
+ self._convert_model_from_lightgbm(model.booster_)
113
+ else:
114
+ raise TypeError(
115
+ f"Only GBTDAALClassifier can be created from\
116
+ {submodule_name}.{class_name} (got {self_class_name})"
117
+ )
118
+ # Build GBTDAALClassifier from XGBoost
119
+ elif (submodule_name, class_name) == ("xgboost.sklearn", "XGBClassifier"):
120
+ if self_class_name == "GBTDAALClassifier":
121
+ self._convert_model_from_xgboost(model.get_booster())
122
+ else:
123
+ raise TypeError(
124
+ f"Only GBTDAALClassifier can be created from\
125
+ {submodule_name}.{class_name} (got {self_class_name})"
126
+ )
127
+ # Build GBTDAALClassifier from CatBoost
128
+ elif (submodule_name, class_name) == ("catboost.core", "CatBoostClassifier"):
129
+ if self_class_name == "GBTDAALClassifier":
130
+ self._convert_model_from_catboost(model)
131
+ else:
132
+ raise TypeError(
133
+ f"Only GBTDAALClassifier can be created from\
134
+ {submodule_name}.{class_name} (got {self_class_name})"
135
+ )
136
+ # Build GBTDAALRegressor from LightGBM
137
+ elif (submodule_name, class_name) == ("lightgbm.sklearn", "LGBMRegressor"):
138
+ if self_class_name == "GBTDAALRegressor":
139
+ self._convert_model_from_lightgbm(model.booster_)
140
+ else:
141
+ raise TypeError(
142
+ f"Only GBTDAALRegressor can be created from\
143
+ {submodule_name}.{class_name} (got {self_class_name})"
144
+ )
145
+ # Build GBTDAALRegressor from XGBoost
146
+ elif (submodule_name, class_name) == ("xgboost.sklearn", "XGBRegressor"):
147
+ if self_class_name == "GBTDAALRegressor":
148
+ self._convert_model_from_xgboost(model.get_booster())
149
+ else:
150
+ raise TypeError(
151
+ f"Only GBTDAALRegressor can be created from\
152
+ {submodule_name}.{class_name} (got {self_class_name})"
153
+ )
154
+ # Build GBTDAALRegressor from CatBoost
155
+ elif (submodule_name, class_name) == ("catboost.core", "CatBoostRegressor"):
156
+ if self_class_name == "GBTDAALRegressor":
157
+ self._convert_model_from_catboost(model)
158
+ else:
159
+ raise TypeError(
160
+ f"Only GBTDAALRegressor can be created from\
161
+ {submodule_name}.{class_name} (got {self_class_name})"
162
+ )
163
+ # Build GBTDAALModel from LightGBM
164
+ elif (submodule_name, class_name) == ("lightgbm.basic", "Booster"):
165
+ if self_class_name == "GBTDAALModel":
166
+ self._convert_model_from_lightgbm(model)
167
+ else:
168
+ raise TypeError(
169
+ f"Only GBTDAALModel can be created from\
170
+ {submodule_name}.{class_name} (got {self_class_name})"
171
+ )
172
+ # Build GBTDAALModel from XGBoost
173
+ elif (submodule_name, class_name) == ("xgboost.core", "Booster"):
174
+ if self_class_name == "GBTDAALModel":
175
+ self._convert_model_from_xgboost(model)
176
+ else:
177
+ raise TypeError(
178
+ f"Only GBTDAALModel can be created from\
179
+ {submodule_name}.{class_name} (got {self_class_name})"
180
+ )
181
+ # Build GBTDAALModel from CatBoost
182
+ elif (submodule_name, class_name) == ("catboost.core", "CatBoost"):
183
+ if self_class_name == "GBTDAALModel":
184
+ self._convert_model_from_catboost(model)
185
+ else:
186
+ raise TypeError(
187
+ f"Only GBTDAALModel can be created from\
188
+ {submodule_name}.{class_name} (got {self_class_name})"
189
+ )
190
+ else:
191
+ raise TypeError(f"Unknown model format {submodule_name}.{class_name}")
192
+
193
+ def _predict_classification(
194
+ self, X, fptype, resultsToEvaluate, pred_contribs=False, pred_interactions=False
195
+ ):
196
+ if X.shape[1] != self.n_features_in_:
197
+ raise ValueError("Shape of input is different from what was seen in `fit`")
198
+
199
+ if not hasattr(self, "daal_model_"):
200
+ raise ValueError(
201
+ (
202
+ "The class {} instance does not have 'daal_model_' attribute set. "
203
+ "Call 'fit' with appropriate arguments before using this method."
204
+ ).format(type(self).__name__)
205
+ )
206
+
207
+ # Prediction
208
+ try:
209
+ return self._predict_classification_with_results_to_compute(
210
+ X, fptype, resultsToEvaluate, pred_contribs, pred_interactions
211
+ )
212
+ except TypeError as e:
213
+ if "unexpected keyword argument 'resultsToCompute'" in str(e):
214
+ if pred_contribs or pred_interactions:
215
+ # SHAP values requested, but not supported by this version
216
+ raise TypeError(
217
+ f"{'pred_contribs' if pred_contribs else 'pred_interactions'} not supported by this version of daal4py"
218
+ ) from e
219
+ else:
220
+ # unknown type error
221
+ raise
222
+ except RuntimeError as e:
223
+ if "Method is not implemented" in str(e):
224
+ if pred_contribs or pred_interactions:
225
+ raise NotImplementedError(
226
+ f"{'pred_contribs' if pred_contribs else 'pred_interactions'} is not implemented for classification models"
227
+ )
228
+ else:
229
+ raise
230
+
231
+ # fallback to calculation without `resultsToCompute`
232
+ predict_algo = d4p.gbt_classification_prediction(
233
+ nClasses=self.n_classes_,
234
+ fptype=fptype,
235
+ resultsToEvaluate=resultsToEvaluate,
236
+ )
237
+ predict_result = predict_algo.compute(X, self.daal_model_)
238
+
239
+ if resultsToEvaluate == "computeClassLabels":
240
+ return predict_result.prediction.ravel().astype(np.int64, copy=False)
241
+ else:
242
+ return predict_result.probabilities
243
+
244
+ def _predict_classification_with_results_to_compute(
245
+ self,
246
+ X,
247
+ fptype,
248
+ resultsToEvaluate,
249
+ pred_contribs=False,
250
+ pred_interactions=False,
251
+ ):
252
+ """Assume daal4py supports the resultsToCompute kwarg"""
253
+ resultsToCompute = ""
254
+ if pred_contribs:
255
+ resultsToCompute = "shapContributions"
256
+ elif pred_interactions:
257
+ resultsToCompute = "shapInteractions"
258
+
259
+ predict_algo = d4p.gbt_classification_prediction(
260
+ nClasses=self.n_classes_,
261
+ fptype=fptype,
262
+ resultsToCompute=resultsToCompute,
263
+ resultsToEvaluate=resultsToEvaluate,
264
+ )
265
+ predict_result = predict_algo.compute(X, self.daal_model_)
266
+
267
+ if pred_contribs:
268
+ return predict_result.prediction.ravel().reshape((-1, X.shape[1] + 1))
269
+ elif pred_interactions:
270
+ return predict_result.prediction.ravel().reshape(
271
+ (-1, X.shape[1] + 1, X.shape[1] + 1)
272
+ )
273
+ elif resultsToEvaluate == "computeClassLabels":
274
+ return predict_result.prediction.ravel().astype(np.int64, copy=False)
275
+ else:
276
+ return predict_result.probabilities
277
+
278
+ def _predict_regression(
279
+ self, X, fptype, pred_contribs=False, pred_interactions=False
280
+ ):
281
+ if X.shape[1] != self.n_features_in_:
282
+ raise ValueError("Shape of input is different from what was seen in `fit`")
283
+
284
+ if not hasattr(self, "daal_model_"):
285
+ raise ValueError(
286
+ (
287
+ "The class {} instance does not have 'daal_model_' attribute set. "
288
+ "Call 'fit' with appropriate arguments before using this method."
289
+ ).format(type(self).__name__)
290
+ )
291
+
292
+ try:
293
+ return self._predict_regression_with_results_to_compute(
294
+ X, fptype, pred_contribs, pred_interactions
295
+ )
296
+ except TypeError as e:
297
+ if "unexpected keyword argument 'resultsToCompute'" in str(e):
298
+ if pred_contribs or pred_interactions:
299
+ # SHAP values requested, but not supported by this version
300
+ raise TypeError(
301
+ f"{'pred_contribs' if pred_contribs else 'pred_interactions'} not supported by this version of daalp4y"
302
+ ) from e
303
+ else:
304
+ # unknown type error
305
+ raise
306
+
307
+ # fallback to calculation without `resultsToCompute`
308
+ predict_algo = d4p.gbt_regression_prediction(fptype=fptype)
309
+ predict_result = predict_algo.compute(X, self.daal_model_)
310
+ return predict_result.prediction.ravel()
311
+
312
+ def _predict_regression_with_results_to_compute(
313
+ self, X, fptype, pred_contribs=False, pred_interactions=False
314
+ ):
315
+ """Assume daal4py supports the resultsToCompute kwarg"""
316
+ resultsToCompute = ""
317
+ if pred_contribs:
318
+ resultsToCompute = "shapContributions"
319
+ elif pred_interactions:
320
+ resultsToCompute = "shapInteractions"
321
+
322
+ predict_algo = d4p.gbt_regression_prediction(
323
+ fptype=fptype, resultsToCompute=resultsToCompute
324
+ )
325
+ predict_result = predict_algo.compute(X, self.daal_model_)
326
+
327
+ if pred_contribs:
328
+ return predict_result.prediction.ravel().reshape((-1, X.shape[1] + 1))
329
+ elif pred_interactions:
330
+ return predict_result.prediction.ravel().reshape(
331
+ (-1, X.shape[1] + 1, X.shape[1] + 1)
332
+ )
333
+ else:
334
+ return predict_result.prediction.ravel()
335
+
336
+
337
+ class GBTDAALModel(GBTDAALBaseModel):
338
+ def predict(self, X, pred_contribs=False, pred_interactions=False):
339
+ fptype = getFPType(X)
340
+ if self._is_regression:
341
+ return self._predict_regression(X, fptype, pred_contribs, pred_interactions)
342
+ else:
343
+ if (pred_contribs or pred_interactions) and self.model_type != "xgboost":
344
+ raise NotImplementedError(
345
+ f"{'pred_contribs' if pred_contribs else 'pred_interactions'} is not implemented for classification models"
346
+ )
347
+ return self._predict_classification(
348
+ X, fptype, "computeClassLabels", pred_contribs, pred_interactions
349
+ )
350
+
351
+ def _check_proba(self):
352
+ return not self._is_regression
353
+
354
+ @available_if(_check_proba)
355
+ def predict_proba(self, X):
356
+ fptype = getFPType(X)
357
+ return self._predict_classification(X, fptype, "computeClassProbabilities")
358
+
359
+
360
+ def convert_model(model):
361
+ try:
362
+ gbm = GBTDAALModel()
363
+ gbm._convert_model(model)
364
+ except TypeError as err:
365
+ if "Only GBTDAALRegressor can be created" in str(err):
366
+ gbm = d4p.sklearn.ensemble.GBTDAALRegressor.convert_model(model)
367
+ elif "Only GBTDAALClassifier can be created" in str(err):
368
+ gbm = d4p.sklearn.ensemble.GBTDAALClassifier.convert_model(model)
369
+ else:
370
+ raise
371
+
372
+ for type_str in ("xgboost", "lightgbm", "catboost"):
373
+ if type_str in str(type(model)):
374
+ gbm.model_type = type_str
375
+ break
376
+
377
+ return gbm
@@ -0,0 +1,40 @@
1
+ # ==============================================================================
2
+ # Copyright 2014 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 .monkeypatch.dispatcher import _get_map_of_algorithms as sklearn_patch_map
18
+ from .monkeypatch.dispatcher import _patch_names as sklearn_patch_names
19
+ from .monkeypatch.dispatcher import disable as unpatch_sklearn
20
+ from .monkeypatch.dispatcher import enable as patch_sklearn
21
+ from .monkeypatch.dispatcher import patch_is_enabled as sklearn_is_patched
22
+
23
+ __all__ = [
24
+ "cluster",
25
+ "decomposition",
26
+ "ensemble",
27
+ "linear_model",
28
+ "manifold",
29
+ "metrics",
30
+ "model_selection",
31
+ "neighbors",
32
+ "patch_sklearn",
33
+ "sklearn_is_patched",
34
+ "sklearn_patch_map",
35
+ "sklearn_patch_names",
36
+ "svm",
37
+ "tree",
38
+ "unpatch_sklearn",
39
+ "utils",
40
+ ]
@@ -0,0 +1,248 @@
1
+ # ==============================================================================
2
+ # Copyright 2024 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ import logging
18
+ import sys
19
+ import threading
20
+ from functools import wraps
21
+ from inspect import Parameter, signature
22
+ from multiprocessing import cpu_count
23
+ from numbers import Integral
24
+ from warnings import warn
25
+
26
+ import threadpoolctl
27
+
28
+ from daal4py import daalinit as set_n_threads
29
+ from daal4py import num_threads as get_n_threads
30
+
31
+ from ._utils import sklearn_check_version
32
+
33
+ if sklearn_check_version("1.2"):
34
+ from sklearn.utils._param_validation import validate_parameter_constraints
35
+
36
+
37
+ # Note: getting controller in global scope of this module is required
38
+ # to avoid overheads by its initialization per each function call
39
+ threadpool_controller = threadpoolctl.ThreadpoolController()
40
+
41
+
42
+ def get_suggested_n_threads(n_cpus):
43
+ """
44
+ Function to get `n_threads` limit
45
+ if `n_jobs` is set in upper parallelization context.
46
+ Usually, limit is equal to `n_logical_cpus` // `n_jobs`.
47
+ Returns None if limit is not set.
48
+ """
49
+ n_threads_map = {
50
+ lib_ctl.internal_api: lib_ctl.get_num_threads()
51
+ for lib_ctl in threadpool_controller.lib_controllers
52
+ if lib_ctl.internal_api != "mkl"
53
+ }
54
+ # openBLAS is limited to 24, 64 or 128 threads by default
55
+ # depending on SW/HW configuration.
56
+ # thus, these numbers of threads from openBLAS are uninformative
57
+ if "openblas" in n_threads_map and n_threads_map["openblas"] in [24, 64, 128]:
58
+ del n_threads_map["openblas"]
59
+ # remove default values equal to n_cpus as uninformative
60
+ for backend in list(n_threads_map.keys()):
61
+ if n_threads_map[backend] == n_cpus:
62
+ del n_threads_map[backend]
63
+ if len(n_threads_map) > 0:
64
+ return min(n_threads_map.values())
65
+ else:
66
+ return None
67
+
68
+
69
+ def _run_with_n_jobs(method):
70
+ """
71
+ Decorator for running of methods containing oneDAL kernels with 'n_jobs'.
72
+
73
+ Outside actual call of decorated method, this decorator:
74
+ - checks correctness of passed 'n_jobs',
75
+ - deducts actual number of threads to use,
76
+ - sets and resets this number for oneDAL environment.
77
+ """
78
+
79
+ @wraps(method)
80
+ def n_jobs_wrapper(self, *args, **kwargs):
81
+ # threading parallel backend branch
82
+ if not isinstance(threading.current_thread(), threading._MainThread):
83
+ warn(
84
+ "'Threading' parallel backend is not supported by "
85
+ "Intel(R) Extension for Scikit-learn*. "
86
+ "Falling back to usage of all available threads."
87
+ )
88
+ result = method(self, *args, **kwargs)
89
+ return result
90
+ # multiprocess parallel backends branch
91
+ # preemptive validation of n_jobs parameter is required
92
+ # because '_run_with_n_jobs' decorator is applied on top of method
93
+ # where validation takes place
94
+ if sklearn_check_version("1.2") and hasattr(self, "_parameter_constraints"):
95
+ validate_parameter_constraints(
96
+ parameter_constraints={"n_jobs": self._parameter_constraints["n_jobs"]},
97
+ params={"n_jobs": self.n_jobs},
98
+ caller_name=self.__class__.__name__,
99
+ )
100
+ # search for specified n_jobs
101
+ n_jobs = self.n_jobs
102
+ n_cpus = cpu_count()
103
+ # receive n_threads limitation from upper parallelism context
104
+ # using `threadpoolctl.ThreadpoolController`
105
+ n_threads = get_suggested_n_threads(n_cpus)
106
+ # get real `n_jobs` number of threads for oneDAL
107
+ # using sklearn rules and `n_threads` from upper parallelism context
108
+ if n_jobs is None or n_jobs == 0:
109
+ if n_threads is None:
110
+ # default branch with no setting for n_jobs
111
+ return method(self, *args, **kwargs)
112
+ else:
113
+ n_jobs = n_threads
114
+ elif n_jobs < 0:
115
+ if n_threads is None:
116
+ n_jobs = max(1, n_cpus + n_jobs + 1)
117
+ else:
118
+ n_jobs = max(1, n_threads + n_jobs + 1)
119
+ # branch with set n_jobs
120
+ old_n_threads = get_n_threads()
121
+ if n_jobs == old_n_threads:
122
+ return method(self, *args, **kwargs)
123
+
124
+ try:
125
+ logger = logging.getLogger("sklearnex")
126
+ cl = self.__class__
127
+ logger.debug(
128
+ f"{cl.__module__}.{cl.__name__}.{method.__name__}: "
129
+ f"setting {n_jobs} threads (previous - {old_n_threads})"
130
+ )
131
+ set_n_threads(n_jobs)
132
+ return method(self, *args, **kwargs)
133
+ finally:
134
+ set_n_threads(old_n_threads)
135
+
136
+ return n_jobs_wrapper
137
+
138
+
139
+ def control_n_jobs(decorated_methods: list = []):
140
+ """
141
+ Decorator for controlling the 'n_jobs' parameter in an estimator class.
142
+
143
+ This decorator is designed to be applied to both estimators with and without
144
+ native support for the 'n_jobs' parameter in the original Scikit-learn APIs.
145
+ When applied to an estimator without 'n_jobs' support in
146
+ its original '__init__' method, this decorator adds the 'n_jobs' parameter.
147
+
148
+ Additionally, this decorator allows for fine-grained control over which methods
149
+ should be executed with the 'n_jobs' parameter. The methods specified in
150
+ the 'decorated_methods' argument will run with 'n_jobs',
151
+ while all other methods remain unaffected.
152
+
153
+ Parameters
154
+ ----------
155
+ decorated_methods: list
156
+ A list of method names to be executed with 'n_jobs'.
157
+
158
+ Example
159
+ -------
160
+ @control_n_jobs(decorated_methods=['fit', 'predict'])
161
+
162
+ class MyEstimator:
163
+
164
+ def __init__(self, *args, **kwargs):
165
+ # Your original __init__ implementation here
166
+
167
+ def fit(self, *args, **kwargs):
168
+ # Your original fit implementation here
169
+
170
+ def predict(self, *args, **kwargs):
171
+ # Your original predict implementation here
172
+
173
+ def other_method(self, *args, **kwargs):
174
+ # Methods not listed in decorated_methods will not be affected by 'n_jobs'
175
+ pass
176
+ """
177
+
178
+ def class_wrapper(original_class):
179
+ original_class._n_jobs_supported_onedal_methods = decorated_methods.copy()
180
+
181
+ original_init = original_class.__init__
182
+
183
+ if sklearn_check_version("1.2") and hasattr(
184
+ original_class, "_parameter_constraints"
185
+ ):
186
+ parameter_constraints = original_class._parameter_constraints
187
+ if "n_jobs" not in parameter_constraints:
188
+ parameter_constraints["n_jobs"] = [Integral, None]
189
+
190
+ @wraps(original_init)
191
+ def init_with_n_jobs(self, *args, n_jobs=None, **kwargs):
192
+ original_init(self, *args, **kwargs)
193
+ self.n_jobs = n_jobs
194
+
195
+ # add "n_jobs" parameter to signature of wrapped init
196
+ # if estimator doesn't originally support it
197
+ sig = signature(original_init)
198
+ if "n_jobs" not in sig.parameters:
199
+ params_copy = sig.parameters.copy()
200
+ params_copy.update(
201
+ {
202
+ "n_jobs": Parameter(
203
+ name="n_jobs", kind=Parameter.KEYWORD_ONLY, default=None
204
+ )
205
+ }
206
+ )
207
+ init_with_n_jobs.__signature__ = sig.replace(parameters=params_copy.values())
208
+ original_class.__init__ = init_with_n_jobs
209
+
210
+ # add n_jobs to __doc__ string if needed
211
+ if (
212
+ hasattr(original_class, "__doc__")
213
+ and isinstance(original_class.__doc__, str)
214
+ and "n_jobs : int" not in original_class.__doc__
215
+ ):
216
+ # Python 3.13 removed extra tab in class doc string
217
+ tab = " " if sys.version_info.minor < 13 else ""
218
+ parameters_doc_tail = f"\n{tab}Attributes"
219
+ n_jobs_doc = f"""
220
+ {tab}n_jobs : int, default=None
221
+ {tab} The number of jobs to use in parallel for the computation.
222
+ {tab} ``None`` means using all physical cores
223
+ {tab} unless in a :obj:`joblib.parallel_backend` context.
224
+ {tab} ``-1`` means using all logical cores.
225
+ {tab} See :term:`Glossary <n_jobs>` for more details.
226
+ """
227
+ original_class.__doc__ = original_class.__doc__.replace(
228
+ parameters_doc_tail, n_jobs_doc + parameters_doc_tail
229
+ )
230
+
231
+ # decorate methods to be run with applied n_jobs parameter
232
+ for method_name in decorated_methods:
233
+ # if method doesn't exist, we want it to raise an Exception
234
+ method = getattr(original_class, method_name)
235
+ if not hasattr(method, "__onedal_n_jobs_decorated__"):
236
+ decorated_method = _run_with_n_jobs(method)
237
+ # sign decorated method for testing and other purposes
238
+ decorated_method.__onedal_n_jobs_decorated__ = True
239
+ setattr(original_class, method_name, decorated_method)
240
+ else:
241
+ warn(
242
+ f"{original_class.__name__}.{method_name} already has "
243
+ "oneDAL n_jobs support and will not be decorated."
244
+ )
245
+
246
+ return original_class
247
+
248
+ return class_wrapper