scikit-learn-intelex 2024.5.0__py312-none-win_amd64.whl → 2024.7.0__py312-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (129) hide show
  1. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/_config.py +3 -15
  2. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +98 -0
  3. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +143 -0
  4. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +251 -0
  5. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +1 -1
  6. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +3 -1
  7. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +8 -0
  8. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
  9. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +15 -3
  10. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/conftest.py +11 -1
  11. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +64 -13
  12. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +35 -0
  13. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +25 -1
  14. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +4 -2
  15. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +109 -1
  16. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +121 -57
  17. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +7 -0
  18. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
  19. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -0
  20. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +102 -25
  21. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +25 -39
  22. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +92 -74
  23. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +7 -0
  24. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +10 -10
  25. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +30 -5
  26. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +45 -3
  27. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +21 -0
  28. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -0
  29. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
  30. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +3 -0
  31. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +9 -0
  32. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +45 -1
  33. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +1 -20
  34. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +25 -20
  35. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +31 -7
  36. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
  37. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  38. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +228 -0
  39. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  40. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py → scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +19 -17
  41. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +419 -0
  42. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  43. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  44. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  45. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  46. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  47. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  48. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  49. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  50. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +163 -0
  51. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  52. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +328 -0
  53. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +40 -4
  54. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +31 -2
  55. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +40 -4
  56. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +31 -2
  57. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -20
  58. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/_utils.py +328 -0
  59. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/_utils_spmd.py +185 -0
  60. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +54 -0
  61. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +4 -0
  62. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +290 -0
  63. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +12 -4
  64. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +21 -25
  65. scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +295 -0
  66. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/_namespace.py +1 -1
  67. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/METADATA +5 -2
  68. scikit_learn_intelex-2024.7.0.dist-info/RECORD +122 -0
  69. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/WHEEL +1 -1
  70. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -257
  71. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -17
  72. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
  73. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/_utils.py +0 -173
  74. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -231
  75. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  76. scikit_learn_intelex-2024.5.0.dist-info/RECORD +0 -104
  77. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
  78. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
  79. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
  80. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
  81. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +0 -0
  82. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
  83. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
  84. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  85. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  86. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  87. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
  88. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +0 -0
  89. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
  90. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  91. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
  92. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  93. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  94. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  95. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  96. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
  97. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
  98. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
  99. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
  100. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -0
  101. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  102. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
  103. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
  104. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
  105. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +0 -0
  106. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  107. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  108. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  109. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  110. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
  111. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
  112. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
  113. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  114. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  115. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
  116. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
  117. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  118. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
  119. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  120. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  121. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  122. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
  123. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
  124. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  125. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  126. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
  127. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
  128. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/LICENSE.txt +0 -0
  129. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/top_level.txt +0 -0
@@ -15,3 +15,8 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.metrics import pairwise_distances
18
+ from onedal._device_offload import support_usm_ndarray
19
+
20
+ pairwise_distances = support_usm_ndarray(freefunc=True, queue_param=False)(
21
+ pairwise_distances
22
+ )
@@ -15,3 +15,6 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.metrics import roc_auc_score
18
+ from onedal._device_offload import support_usm_ndarray
19
+
20
+ roc_auc_score = support_usm_ndarray(freefunc=True, queue_param=False)(roc_auc_score)
@@ -15,3 +15,6 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.model_selection import train_test_split
18
+ from onedal._device_offload import support_usm_ndarray
19
+
20
+ train_test_split = support_usm_ndarray(freefunc=True, queue_param=False)(train_test_split)
@@ -97,6 +97,15 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
97
97
  self.negative_outlier_factor_, 100.0 * self.contamination
98
98
  )
99
99
 
100
+ # adoption of warning for data with duplicated samples from
101
+ # https://github.com/scikit-learn/scikit-learn/pull/28773
102
+ if sklearn_check_version("1.6"):
103
+ if np.min(self.negative_outlier_factor_) < -1e7 and not self.novelty:
104
+ warnings.warn(
105
+ "Duplicate values are leading to incorrect results. "
106
+ "Increase the number of neighbors for more accurate results."
107
+ )
108
+
100
109
  return self
101
110
 
102
111
  def fit(self, X, y=None):
@@ -19,14 +19,16 @@ import warnings
19
19
  import numpy as np
20
20
  from scipy import sparse as sp
21
21
  from sklearn.neighbors._ball_tree import BallTree
22
- from sklearn.neighbors._base import VALID_METRICS
22
+ from sklearn.neighbors._base import VALID_METRICS, KNeighborsMixin
23
23
  from sklearn.neighbors._base import NeighborsBase as sklearn_NeighborsBase
24
24
  from sklearn.neighbors._kd_tree import KDTree
25
+ from sklearn.utils.validation import check_is_fitted
25
26
 
26
27
  from daal4py.sklearn._utils import sklearn_check_version
27
28
  from onedal.utils import _check_array, _num_features, _num_samples
28
29
 
29
30
  from .._utils import PatchingConditionsChain
31
+ from ..utils import get_namespace
30
32
 
31
33
 
32
34
  class KNeighborsDispatchingBase:
@@ -147,6 +149,10 @@ class KNeighborsDispatchingBase:
147
149
  patching_status = PatchingConditionsChain(
148
150
  f"sklearn.neighbors.{class_name}.{method_name}"
149
151
  )
152
+ if not patching_status.and_condition(
153
+ "radius" not in method_name, "RadiusNeighbors not implemented in sklearnex"
154
+ ):
155
+ return patching_status
150
156
 
151
157
  if not patching_status.and_condition(
152
158
  not isinstance(data[0], (KDTree, BallTree, sklearn_NeighborsBase)),
@@ -264,3 +270,41 @@ class KNeighborsDispatchingBase:
264
270
 
265
271
  def _onedal_cpu_supported(self, method_name, *data):
266
272
  return self._onedal_supported("cpu", method_name, *data)
273
+
274
+ def kneighbors_graph(self, X=None, n_neighbors=None, mode="connectivity"):
275
+ check_is_fitted(self)
276
+ if n_neighbors is None:
277
+ n_neighbors = self.n_neighbors
278
+
279
+ # check the input only in self.kneighbors
280
+
281
+ # construct CSR matrix representation of the k-NN graph
282
+ if mode == "connectivity":
283
+ A_ind = self.kneighbors(X, n_neighbors, return_distance=False)
284
+ xp, _ = get_namespace(A_ind)
285
+ n_queries = A_ind.shape[0]
286
+ A_data = xp.ones(n_queries * n_neighbors)
287
+
288
+ elif mode == "distance":
289
+ A_data, A_ind = self.kneighbors(X, n_neighbors, return_distance=True)
290
+ xp, _ = get_namespace(A_ind)
291
+ A_data = xp.reshape(A_data, (-1,))
292
+
293
+ else:
294
+ raise ValueError(
295
+ 'Unsupported mode, must be one of "connectivity", '
296
+ f'or "distance" but got "{mode}" instead'
297
+ )
298
+
299
+ n_queries = A_ind.shape[0]
300
+ n_samples_fit = self.n_samples_fit_
301
+ n_nonzero = n_queries * n_neighbors
302
+ A_indptr = xp.arange(0, n_nonzero + 1, n_neighbors)
303
+
304
+ kneighbors_graph = sp.csr_matrix(
305
+ (A_data, xp.reshape(A_ind, (-1,)), A_indptr), shape=(n_queries, n_samples_fit)
306
+ )
307
+
308
+ return kneighbors_graph
309
+
310
+ kneighbors_graph.__doc__ = KNeighborsMixin.kneighbors_graph.__doc__
@@ -32,7 +32,7 @@ from .common import KNeighborsDispatchingBase
32
32
  @control_n_jobs(
33
33
  decorated_methods=["fit", "predict", "predict_proba", "kneighbors", "score"]
34
34
  )
35
- class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBase):
35
+ class KNeighborsClassifier(KNeighborsDispatchingBase, sklearn_KNeighborsClassifier):
36
36
  __doc__ = sklearn_KNeighborsClassifier.__doc__
37
37
  if sklearn_check_version("1.2"):
38
38
  _parameter_constraints: dict = {
@@ -169,24 +169,6 @@ class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBa
169
169
  return_distance=return_distance,
170
170
  )
171
171
 
172
- @wrap_output_data
173
- def radius_neighbors(
174
- self, X=None, radius=None, return_distance=True, sort_results=False
175
- ):
176
- _onedal_estimator = getattr(self, "_onedal_estimator", None)
177
-
178
- if (
179
- _onedal_estimator is not None
180
- or getattr(self, "_tree", 0) is None
181
- and self._fit_method == "kd_tree"
182
- ):
183
- sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
184
- result = sklearn_NearestNeighbors.radius_neighbors(
185
- self, X, radius, return_distance, sort_results
186
- )
187
-
188
- return result
189
-
190
172
  def _onedal_fit(self, X, y, queue=None):
191
173
  onedal_params = {
192
174
  "n_neighbors": self.n_neighbors,
@@ -242,4 +224,3 @@ class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBa
242
224
  predict_proba.__doc__ = sklearn_KNeighborsClassifier.predict_proba.__doc__
243
225
  score.__doc__ = sklearn_KNeighborsClassifier.score.__doc__
244
226
  kneighbors.__doc__ = sklearn_KNeighborsClassifier.kneighbors.__doc__
245
- radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
@@ -14,6 +14,7 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
+ from sklearn.metrics import r2_score
17
18
  from sklearn.neighbors._regression import (
18
19
  KNeighborsRegressor as sklearn_KNeighborsRegressor,
19
20
  )
@@ -29,7 +30,7 @@ from .common import KNeighborsDispatchingBase
29
30
 
30
31
 
31
32
  @control_n_jobs(decorated_methods=["fit", "predict", "kneighbors"])
32
- class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase):
33
+ class KNeighborsRegressor(KNeighborsDispatchingBase, sklearn_KNeighborsRegressor):
33
34
  __doc__ = sklearn_KNeighborsRegressor.__doc__
34
35
  if sklearn_check_version("1.2"):
35
36
  _parameter_constraints: dict = {
@@ -117,6 +118,23 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
117
118
  X,
118
119
  )
119
120
 
121
+ @wrap_output_data
122
+ def score(self, X, y, sample_weight=None):
123
+ check_is_fitted(self)
124
+ if sklearn_check_version("1.0"):
125
+ self._check_feature_names(X, reset=False)
126
+ return dispatch(
127
+ self,
128
+ "score",
129
+ {
130
+ "onedal": self.__class__._onedal_score,
131
+ "sklearn": sklearn_KNeighborsRegressor.score,
132
+ },
133
+ X,
134
+ y,
135
+ sample_weight=sample_weight,
136
+ )
137
+
120
138
  @wrap_output_data
121
139
  def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
122
140
  check_is_fitted(self)
@@ -134,24 +152,6 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
134
152
  return_distance=return_distance,
135
153
  )
136
154
 
137
- @wrap_output_data
138
- def radius_neighbors(
139
- self, X=None, radius=None, return_distance=True, sort_results=False
140
- ):
141
- _onedal_estimator = getattr(self, "_onedal_estimator", None)
142
-
143
- if (
144
- _onedal_estimator is not None
145
- or getattr(self, "_tree", 0) is None
146
- and self._fit_method == "kd_tree"
147
- ):
148
- sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
149
- result = sklearn_NearestNeighbors.radius_neighbors(
150
- self, X, radius, return_distance, sort_results
151
- )
152
-
153
- return result
154
-
155
155
  def _onedal_fit(self, X, y, queue=None):
156
156
  onedal_params = {
157
157
  "n_neighbors": self.n_neighbors,
@@ -184,6 +184,11 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
184
184
  X, n_neighbors, return_distance, queue=queue
185
185
  )
186
186
 
187
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
188
+ return r2_score(
189
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
190
+ )
191
+
187
192
  def _save_attributes(self):
188
193
  self.n_features_in_ = self._onedal_estimator.n_features_in_
189
194
  self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
@@ -195,4 +200,4 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
195
200
  fit.__doc__ = sklearn_KNeighborsRegressor.__doc__
196
201
  predict.__doc__ = sklearn_KNeighborsRegressor.predict.__doc__
197
202
  kneighbors.__doc__ = sklearn_KNeighborsRegressor.kneighbors.__doc__
198
- radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
203
+ score.__doc__ = sklearn_KNeighborsRegressor.score.__doc__
@@ -26,7 +26,7 @@ from .common import KNeighborsDispatchingBase
26
26
 
27
27
 
28
28
  @control_n_jobs(decorated_methods=["fit", "kneighbors"])
29
- class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
29
+ class NearestNeighbors(KNeighborsDispatchingBase, sklearn_NearestNeighbors):
30
30
  __doc__ = sklearn_NearestNeighbors.__doc__
31
31
  if sklearn_check_version("1.2"):
32
32
  _parameter_constraints: dict = {**sklearn_NearestNeighbors._parameter_constraints}
@@ -88,19 +88,40 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
88
88
  def radius_neighbors(
89
89
  self, X=None, radius=None, return_distance=True, sort_results=False
90
90
  ):
91
- _onedal_estimator = getattr(self, "_onedal_estimator", None)
92
-
93
91
  if (
94
- _onedal_estimator is not None
92
+ hasattr(self, "_onedal_estimator")
95
93
  or getattr(self, "_tree", 0) is None
96
94
  and self._fit_method == "kd_tree"
97
95
  ):
98
96
  sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
99
- result = sklearn_NearestNeighbors.radius_neighbors(
100
- self, X, radius, return_distance, sort_results
97
+ return dispatch(
98
+ self,
99
+ "radius_neighbors",
100
+ {
101
+ "onedal": None,
102
+ "sklearn": sklearn_NearestNeighbors.radius_neighbors,
103
+ },
104
+ X,
105
+ radius=radius,
106
+ return_distance=return_distance,
107
+ sort_results=sort_results,
101
108
  )
102
109
 
103
- return result
110
+ def radius_neighbors_graph(
111
+ self, X=None, radius=None, mode="connectivity", sort_results=False
112
+ ):
113
+ return dispatch(
114
+ self,
115
+ "radius_neighbors_graph",
116
+ {
117
+ "onedal": None,
118
+ "sklearn": sklearn_NearestNeighbors.radius_neighbors_graph,
119
+ },
120
+ X,
121
+ radius=radius,
122
+ mode=mode,
123
+ sort_results=sort_results,
124
+ )
104
125
 
105
126
  def _onedal_fit(self, X, y=None, queue=None):
106
127
  onedal_params = {
@@ -144,3 +165,6 @@ class NearestNeighbors(sklearn_NearestNeighbors, KNeighborsDispatchingBase):
144
165
  fit.__doc__ = sklearn_NearestNeighbors.__doc__
145
166
  kneighbors.__doc__ = sklearn_NearestNeighbors.kneighbors.__doc__
146
167
  radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
168
+ radius_neighbors_graph.__doc__ = (
169
+ sklearn_NearestNeighbors.radius_neighbors_graph.__doc__
170
+ )
@@ -14,4 +14,4 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
- __all__ = ["cluster", "covariance"]
17
+ __all__ = ["cluster", "covariance", "decomposition", "linear_model"]
@@ -0,0 +1,19 @@
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
+ from .incremental_pca import IncrementalPCA
18
+
19
+ __all__ = ["IncrementalPCA"]
@@ -0,0 +1,228 @@
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 numpy as np
18
+ from sklearn.decomposition import IncrementalPCA as sklearn_IncrementalPCA
19
+ from sklearn.utils import check_array, gen_batches
20
+
21
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
22
+ from daal4py.sklearn._utils import sklearn_check_version
23
+ from onedal.decomposition import IncrementalPCA as onedal_IncrementalPCA
24
+
25
+ from ..._device_offload import dispatch, wrap_output_data
26
+ from ..._utils import PatchingConditionsChain
27
+
28
+
29
+ @control_n_jobs(
30
+ decorated_methods=["fit", "partial_fit", "transform", "_onedal_finalize_fit"]
31
+ )
32
+ class IncrementalPCA(sklearn_IncrementalPCA):
33
+
34
+ def __init__(self, n_components=None, *, whiten=False, copy=True, batch_size=None):
35
+ super().__init__(
36
+ n_components=n_components, whiten=whiten, copy=copy, batch_size=batch_size
37
+ )
38
+ self._need_to_finalize = False
39
+ self._need_to_finalize_attrs = {
40
+ "mean_",
41
+ "explained_variance_",
42
+ "explained_variance_ratio_",
43
+ "n_components_",
44
+ "components_",
45
+ "noise_variance_",
46
+ "singular_values_",
47
+ "var_",
48
+ }
49
+
50
+ _onedal_incremental_pca = staticmethod(onedal_IncrementalPCA)
51
+
52
+ def _onedal_transform(self, X, queue=None):
53
+ assert hasattr(self, "_onedal_estimator")
54
+ if self._need_to_finalize:
55
+ self._onedal_finalize_fit()
56
+ X = check_array(X, dtype=[np.float64, np.float32])
57
+ return self._onedal_estimator.predict(X, queue)
58
+
59
+ def _onedal_fit_transform(self, X, queue=None):
60
+ self._onedal_fit(X, queue)
61
+ return self._onedal_transform(X, queue)
62
+
63
+ def _onedal_partial_fit(self, X, check_input=True, queue=None):
64
+ first_pass = not hasattr(self, "components_")
65
+
66
+ if check_input:
67
+ if sklearn_check_version("1.0"):
68
+ X = self._validate_data(
69
+ X, dtype=[np.float64, np.float32], reset=first_pass
70
+ )
71
+ else:
72
+ X = check_array(
73
+ X,
74
+ dtype=[np.float64, np.float32],
75
+ copy=self.copy,
76
+ )
77
+
78
+ n_samples, n_features = X.shape
79
+
80
+ if self.n_components is None:
81
+ if not hasattr(self, "components_"):
82
+ self.n_components_ = min(n_samples, n_features)
83
+ else:
84
+ self.n_components_ = self.components_.shape[0]
85
+ elif not self.n_components <= n_features:
86
+ raise ValueError(
87
+ "n_components=%r invalid for n_features=%d, need "
88
+ "more rows than columns for IncrementalPCA "
89
+ "processing" % (self.n_components, n_features)
90
+ )
91
+ elif not self.n_components <= n_samples:
92
+ raise ValueError(
93
+ "n_components=%r must be less or equal to "
94
+ "the batch number of samples "
95
+ "%d." % (self.n_components, n_samples)
96
+ )
97
+ else:
98
+ self.n_components_ = self.n_components
99
+
100
+ if not hasattr(self, "n_samples_seen_"):
101
+ self.n_samples_seen_ = n_samples
102
+ else:
103
+ self.n_samples_seen_ += n_samples
104
+
105
+ onedal_params = {"n_components": self.n_components_, "whiten": self.whiten}
106
+
107
+ if not hasattr(self, "_onedal_estimator"):
108
+ self._onedal_estimator = self._onedal_incremental_pca(**onedal_params)
109
+ self._onedal_estimator.partial_fit(X, queue)
110
+ self._need_to_finalize = True
111
+
112
+ def _onedal_finalize_fit(self):
113
+ assert hasattr(self, "_onedal_estimator")
114
+ self._onedal_estimator.finalize_fit()
115
+ self._need_to_finalize = False
116
+
117
+ def _onedal_fit(self, X, queue=None):
118
+ if sklearn_check_version("1.2"):
119
+ self._validate_params()
120
+
121
+ if sklearn_check_version("1.0"):
122
+ X = self._validate_data(X, dtype=[np.float64, np.float32], copy=self.copy)
123
+ else:
124
+ X = check_array(
125
+ X,
126
+ dtype=[np.float64, np.float32],
127
+ copy=self.copy,
128
+ )
129
+
130
+ n_samples, n_features = X.shape
131
+
132
+ if self.batch_size is None:
133
+ self.batch_size_ = 5 * n_features
134
+ else:
135
+ self.batch_size_ = self.batch_size
136
+
137
+ self.n_samples_seen_ = 0
138
+ if hasattr(self, "_onedal_estimator"):
139
+ self._onedal_estimator._reset()
140
+
141
+ for batch in gen_batches(n_samples, self.batch_size_):
142
+ X_batch = X[batch]
143
+ self._onedal_partial_fit(X_batch, queue=queue)
144
+
145
+ self._onedal_finalize_fit()
146
+
147
+ return self
148
+
149
+ def _onedal_supported(self, method_name, *data):
150
+ patching_status = PatchingConditionsChain(
151
+ f"sklearn.decomposition.{self.__class__.__name__}.{method_name}"
152
+ )
153
+ return patching_status
154
+
155
+ _onedal_cpu_supported = _onedal_supported
156
+ _onedal_gpu_supported = _onedal_supported
157
+
158
+ def __getattr__(self, attr):
159
+ if attr in self._need_to_finalize_attrs:
160
+ if hasattr(self, "_onedal_estimator"):
161
+ if self._need_to_finalize:
162
+ self._onedal_finalize_fit()
163
+ return getattr(self._onedal_estimator, attr)
164
+ else:
165
+ raise AttributeError(
166
+ f"'{self.__class__.__name__}' object has no attribute '{attr}'"
167
+ )
168
+ if attr in self.__dict__:
169
+ return self.__dict__[attr]
170
+
171
+ raise AttributeError(
172
+ f"'{self.__class__.__name__}' object has no attribute '{attr}'"
173
+ )
174
+
175
+ def partial_fit(self, X, y=None, check_input=True):
176
+ dispatch(
177
+ self,
178
+ "partial_fit",
179
+ {
180
+ "onedal": self.__class__._onedal_partial_fit,
181
+ "sklearn": sklearn_IncrementalPCA.partial_fit,
182
+ },
183
+ X,
184
+ check_input=check_input,
185
+ )
186
+ return self
187
+
188
+ def fit(self, X, y=None):
189
+ dispatch(
190
+ self,
191
+ "fit",
192
+ {
193
+ "onedal": self.__class__._onedal_fit,
194
+ "sklearn": sklearn_IncrementalPCA.fit,
195
+ },
196
+ X,
197
+ )
198
+ return self
199
+
200
+ @wrap_output_data
201
+ def transform(self, X):
202
+ return dispatch(
203
+ self,
204
+ "transform",
205
+ {
206
+ "onedal": self.__class__._onedal_transform,
207
+ "sklearn": sklearn_IncrementalPCA.transform,
208
+ },
209
+ X,
210
+ )
211
+
212
+ @wrap_output_data
213
+ def fit_transform(self, X, y=None, **fit_params):
214
+ return dispatch(
215
+ self,
216
+ "fit_transform",
217
+ {
218
+ "onedal": self.__class__._onedal_fit_transform,
219
+ "sklearn": sklearn_IncrementalPCA.fit_transform,
220
+ },
221
+ X,
222
+ )
223
+
224
+ __doc__ = sklearn_IncrementalPCA.__doc__
225
+ fit.__doc__ = sklearn_IncrementalPCA.fit.__doc__
226
+ fit_transform.__doc__ = sklearn_IncrementalPCA.fit_transform.__doc__
227
+ transform.__doc__ = sklearn_IncrementalPCA.transform.__doc__
228
+ partial_fit.__doc__ = sklearn_IncrementalPCA.partial_fit.__doc__