scikit-learn-intelex 2024.5.0__py39-none-win_amd64.whl → 2024.7.0__py39-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
@@ -20,13 +20,13 @@ from abc import ABC
20
20
  import numpy as np
21
21
  from sklearn.exceptions import NotFittedError
22
22
  from sklearn.linear_model import LinearRegression as sklearn_LinearRegression
23
+ from sklearn.metrics import r2_score
23
24
 
24
25
  from daal4py.sklearn._n_jobs_support import control_n_jobs
25
26
  from daal4py.sklearn._utils import sklearn_check_version
26
27
 
27
28
  from .._device_offload import dispatch, wrap_output_data
28
29
  from .._utils import PatchingConditionsChain, get_patch_message, register_hyperparameters
29
- from ..utils.validation import _assert_all_finite
30
30
 
31
31
  if sklearn_check_version("1.0") and not sklearn_check_version("1.2"):
32
32
  from sklearn.linear_model._base import _deprecate_normalize
@@ -123,18 +123,19 @@ class LinearRegression(sklearn_LinearRegression):
123
123
  X,
124
124
  )
125
125
 
126
- def _test_type_and_finiteness(self, X_in):
127
- X = X_in if isinstance(X_in, np.ndarray) else np.asarray(X_in)
128
-
129
- dtype = X.dtype
130
- if "complex" in str(type(dtype)):
131
- return False
132
-
133
- try:
134
- _assert_all_finite(X)
135
- except BaseException:
136
- return False
137
- return True
126
+ @wrap_output_data
127
+ def score(self, X, y, sample_weight=None):
128
+ return dispatch(
129
+ self,
130
+ "score",
131
+ {
132
+ "onedal": self.__class__._onedal_score,
133
+ "sklearn": sklearn_LinearRegression.score,
134
+ },
135
+ X,
136
+ y,
137
+ sample_weight=sample_weight,
138
+ )
138
139
 
139
140
  def _onedal_fit_supported(self, method_name, *data):
140
141
  assert method_name == "fit"
@@ -159,7 +160,7 @@ class LinearRegression(sklearn_LinearRegression):
159
160
  # Check if equations are well defined
160
161
  is_underdetermined = n_samples < (n_features + int(self.fit_intercept))
161
162
 
162
- dal_ready = patching_status.and_conditions(
163
+ patching_status.and_conditions(
163
164
  [
164
165
  (sample_weight is None, "Sample weight is not supported."),
165
166
  (
@@ -178,53 +179,33 @@ class LinearRegression(sklearn_LinearRegression):
178
179
  ),
179
180
  ]
180
181
  )
181
- if not dal_ready:
182
- return patching_status
183
-
184
- if not patching_status.and_condition(
185
- self._test_type_and_finiteness(X), "Input X is not supported."
186
- ):
187
- return patching_status
188
-
189
- patching_status.and_condition(
190
- self._test_type_and_finiteness(y), "Input y is not supported."
191
- )
192
182
 
193
183
  return patching_status
194
184
 
195
185
  def _onedal_predict_supported(self, method_name, *data):
196
- assert method_name == "predict"
197
- assert len(data) == 1
198
-
199
186
  class_name = self.__class__.__name__
200
187
  patching_status = PatchingConditionsChain(
201
188
  f"sklearn.linear_model.{class_name}.predict"
202
189
  )
203
190
 
204
- n_samples = _num_samples(*data)
191
+ n_samples = _num_samples(data[0])
205
192
  model_is_sparse = issparse(self.coef_) or (
206
193
  self.fit_intercept and issparse(self.intercept_)
207
194
  )
208
- dal_ready = patching_status.and_conditions(
195
+ patching_status.and_conditions(
209
196
  [
210
197
  (n_samples > 0, "Number of samples is less than 1."),
211
- (not issparse(*data), "Sparse input is not supported."),
198
+ (not issparse(data[0]), "Sparse input is not supported."),
212
199
  (not model_is_sparse, "Sparse coefficients are not supported."),
213
200
  ]
214
201
  )
215
- if not dal_ready:
216
- return patching_status
217
-
218
- patching_status.and_condition(
219
- self._test_type_and_finiteness(*data), "Input X is not supported."
220
- )
221
202
 
222
203
  return patching_status
223
204
 
224
205
  def _onedal_supported(self, method_name, *data):
225
206
  if method_name == "fit":
226
207
  return self._onedal_fit_supported(method_name, *data)
227
- if method_name == "predict":
208
+ if method_name in ["predict", "score"]:
228
209
  return self._onedal_predict_supported(method_name, *data)
229
210
  raise RuntimeError(f"Unknown method {method_name} in {self.__class__.__name__}")
230
211
 
@@ -245,7 +226,6 @@ class LinearRegression(sklearn_LinearRegression):
245
226
  "accept_sparse": ["csr", "csc", "coo"],
246
227
  "y_numeric": True,
247
228
  "multi_output": True,
248
- "force_all_finite": False,
249
229
  }
250
230
  if sklearn_check_version("1.2"):
251
231
  X, y = self._validate_data(**check_params)
@@ -286,6 +266,11 @@ class LinearRegression(sklearn_LinearRegression):
286
266
  res = self._onedal_estimator.predict(X, queue=queue)
287
267
  return res
288
268
 
269
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
270
+ return r2_score(
271
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
272
+ )
273
+
289
274
  def get_coef_(self):
290
275
  return self.coef_
291
276
 
@@ -314,3 +299,4 @@ class LinearRegression(sklearn_LinearRegression):
314
299
 
315
300
  fit.__doc__ = sklearn_LinearRegression.fit.__doc__
316
301
  predict.__doc__ = sklearn_LinearRegression.predict.__doc__
302
+ score.__doc__ = sklearn_LinearRegression.score.__doc__
@@ -21,18 +21,6 @@ from daal4py.sklearn._utils import daal_check_version
21
21
  from daal4py.sklearn.linear_model.logistic_path import (
22
22
  LogisticRegression as LogisticRegression_daal4py,
23
23
  )
24
- from daal4py.sklearn.linear_model.logistic_path import daal4py_fit, daal4py_predict
25
-
26
-
27
- class BaseLogisticRegression(ABC):
28
- def _save_attributes(self):
29
- assert hasattr(self, "_onedal_estimator")
30
- self.classes_ = self._onedal_estimator.classes_
31
- self.coef_ = self._onedal_estimator.coef_
32
- self.intercept_ = self._onedal_estimator.intercept_
33
- self.n_features_in_ = self._onedal_estimator.n_features_in_
34
- self.n_iter_ = self._onedal_estimator.n_iter_
35
-
36
24
 
37
25
  if daal_check_version((2024, "P", 1)):
38
26
  import numpy as np
@@ -40,16 +28,27 @@ if daal_check_version((2024, "P", 1)):
40
28
  from sklearn.linear_model import LogisticRegression as sklearn_LogisticRegression
41
29
  from sklearn.metrics import accuracy_score
42
30
  from sklearn.utils.multiclass import type_of_target
43
- from sklearn.utils.validation import check_X_y
31
+ from sklearn.utils.validation import check_array, check_is_fitted, check_X_y
44
32
 
45
33
  from daal4py.sklearn._n_jobs_support import control_n_jobs
46
34
  from daal4py.sklearn._utils import sklearn_check_version
35
+ from daal4py.sklearn.linear_model.logistic_path import daal4py_fit, daal4py_predict
47
36
  from onedal.linear_model import LogisticRegression as onedal_LogisticRegression
48
37
  from onedal.utils import _num_samples
49
38
 
50
39
  from .._device_offload import dispatch, wrap_output_data
51
40
  from .._utils import PatchingConditionsChain, get_patch_message
52
- from ..utils.validation import _assert_all_finite
41
+
42
+ _sparsity_enabled = daal_check_version((2024, "P", 700))
43
+
44
+ class BaseLogisticRegression(ABC):
45
+ def _save_attributes(self):
46
+ assert hasattr(self, "_onedal_estimator")
47
+ self.classes_ = self._onedal_estimator.classes_
48
+ self.coef_ = self._onedal_estimator.coef_
49
+ self.intercept_ = self._onedal_estimator.intercept_
50
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
51
+ self.n_iter_ = self._onedal_estimator.n_iter_
53
52
 
54
53
  @control_n_jobs(
55
54
  decorated_methods=[
@@ -82,7 +81,7 @@ if daal_check_version((2024, "P", 1)):
82
81
  random_state=None,
83
82
  solver="lbfgs",
84
83
  max_iter=100,
85
- multi_class="auto",
84
+ multi_class="deprecated" if sklearn_check_version("1.5") else "auto",
86
85
  verbose=0,
87
86
  warm_start=False,
88
87
  n_jobs=None,
@@ -109,8 +108,6 @@ if daal_check_version((2024, "P", 1)):
109
108
  _onedal_cpu_fit = daal4py_fit
110
109
 
111
110
  def fit(self, X, y, sample_weight=None):
112
- if sklearn_check_version("1.0"):
113
- self._check_feature_names(X, reset=True)
114
111
  if sklearn_check_version("1.2"):
115
112
  self._validate_params()
116
113
  dispatch(
@@ -128,8 +125,6 @@ if daal_check_version((2024, "P", 1)):
128
125
 
129
126
  @wrap_output_data
130
127
  def predict(self, X):
131
- if sklearn_check_version("1.0"):
132
- self._check_feature_names(X, reset=False)
133
128
  return dispatch(
134
129
  self,
135
130
  "predict",
@@ -142,11 +137,9 @@ if daal_check_version((2024, "P", 1)):
142
137
 
143
138
  @wrap_output_data
144
139
  def predict_proba(self, X):
145
- if sklearn_check_version("1.0"):
146
- self._check_feature_names(X, reset=False)
147
140
  return dispatch(
148
141
  self,
149
- "predict",
142
+ "predict_proba",
150
143
  {
151
144
  "onedal": self.__class__._onedal_predict_proba,
152
145
  "sklearn": sklearn_LogisticRegression.predict_proba,
@@ -156,11 +149,9 @@ if daal_check_version((2024, "P", 1)):
156
149
 
157
150
  @wrap_output_data
158
151
  def predict_log_proba(self, X):
159
- if sklearn_check_version("1.0"):
160
- self._check_feature_names(X, reset=False)
161
152
  return dispatch(
162
153
  self,
163
- "predict",
154
+ "predict_log_proba",
164
155
  {
165
156
  "onedal": self.__class__._onedal_predict_log_proba,
166
157
  "sklearn": sklearn_LogisticRegression.predict_log_proba,
@@ -170,8 +161,6 @@ if daal_check_version((2024, "P", 1)):
170
161
 
171
162
  @wrap_output_data
172
163
  def score(self, X, y, sample_weight=None):
173
- if sklearn_check_version("1.0"):
174
- self._check_feature_names(X, reset=False)
175
164
  return dispatch(
176
165
  self,
177
166
  "score",
@@ -189,17 +178,6 @@ if daal_check_version((2024, "P", 1)):
189
178
  y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
190
179
  )
191
180
 
192
- def _test_type_and_finiteness(self, X_in):
193
- X = np.asarray(X_in)
194
-
195
- if np.iscomplexobj(X):
196
- return False
197
- try:
198
- _assert_all_finite(X)
199
- except BaseException:
200
- return False
201
- return True
202
-
203
181
  def _onedal_gpu_fit_supported(self, method_name, *data):
204
182
  assert method_name == "fit"
205
183
  assert len(data) == 3
@@ -210,7 +188,12 @@ if daal_check_version((2024, "P", 1)):
210
188
  f"sklearn.linear_model.{class_name}.fit"
211
189
  )
212
190
 
213
- dal_ready = patching_status.and_conditions(
191
+ target_type = (
192
+ type_of_target(y, input_name="y")
193
+ if sklearn_check_version("1.1")
194
+ else type_of_target(y)
195
+ )
196
+ patching_status.and_conditions(
214
197
  [
215
198
  (self.penalty == "l2", "Only l2 penalty is supported."),
216
199
  (self.dual == False, "dual=True is not supported."),
@@ -228,24 +211,12 @@ if daal_check_version((2024, "P", 1)):
228
211
  (self.l1_ratio is None, "l1 ratio is not supported."),
229
212
  (sample_weight is None, "Sample weight is not supported."),
230
213
  (
231
- type_of_target(y) == "binary",
214
+ target_type == "binary",
232
215
  "Only binary classification is supported",
233
216
  ),
234
217
  ]
235
218
  )
236
219
 
237
- if not dal_ready:
238
- return patching_status
239
-
240
- if not patching_status.and_condition(
241
- self._test_type_and_finiteness(X), "Input X is not supported."
242
- ):
243
- return patching_status
244
-
245
- patching_status.and_condition(
246
- self._test_type_and_finiteness(y), "Input y is not supported."
247
- )
248
-
249
220
  return patching_status
250
221
 
251
222
  def _onedal_gpu_predict_supported(self, method_name, *data):
@@ -269,7 +240,7 @@ if daal_check_version((2024, "P", 1)):
269
240
  [
270
241
  (n_samples > 0, "Number of samples is less than 1."),
271
242
  (
272
- not any([issparse(i) for i in data]),
243
+ (not any([issparse(i) for i in data])) or _sparsity_enabled,
273
244
  "Sparse input is not supported.",
274
245
  ),
275
246
  (not model_is_sparse, "Sparse coefficients are not supported."),
@@ -279,12 +250,6 @@ if daal_check_version((2024, "P", 1)):
279
250
  ),
280
251
  ]
281
252
  )
282
- if not dal_ready:
283
- return patching_status
284
-
285
- patching_status.and_condition(
286
- self._test_type_and_finiteness(*data), "Input X is not supported."
287
- )
288
253
 
289
254
  return patching_status
290
255
 
@@ -315,24 +280,29 @@ if daal_check_version((2024, "P", 1)):
315
280
  }
316
281
  self._onedal_estimator = onedal_LogisticRegression(**onedal_params)
317
282
 
318
- def _onedal_fit(self, X, y, sample_weight, queue=None):
283
+ def _onedal_fit(self, X, y, sample_weight=None, queue=None):
319
284
  if queue is None or queue.sycl_device.is_cpu:
320
285
  return self._onedal_cpu_fit(X, y, sample_weight)
321
286
 
322
287
  assert sample_weight is None
323
288
 
324
- check_params = {
325
- "X": X,
326
- "y": y,
327
- "dtype": [np.float64, np.float32],
328
- "accept_sparse": False,
329
- "multi_output": False,
330
- "force_all_finite": True,
331
- }
332
- if sklearn_check_version("1.2"):
333
- X, y = self._validate_data(**check_params)
289
+ if sklearn_check_version("1.0"):
290
+ X, y = self._validate_data(
291
+ X,
292
+ y,
293
+ accept_sparse=_sparsity_enabled,
294
+ accept_large_sparse=_sparsity_enabled,
295
+ dtype=[np.float64, np.float32],
296
+ )
334
297
  else:
335
- X, y = check_X_y(**check_params)
298
+ X, y = check_X_y(
299
+ X,
300
+ y,
301
+ accept_sparse=_sparsity_enabled,
302
+ accept_large_sparse=_sparsity_enabled,
303
+ dtype=[np.float64, np.float32],
304
+ )
305
+
336
306
  self._initialize_onedal_estimator()
337
307
  try:
338
308
  self._onedal_estimator.fit(X, y, queue=queue)
@@ -350,7 +320,23 @@ if daal_check_version((2024, "P", 1)):
350
320
  if queue is None or queue.sycl_device.is_cpu:
351
321
  return daal4py_predict(self, X, "computeClassLabels")
352
322
 
353
- X = self._validate_data(X, accept_sparse=False, reset=False)
323
+ check_is_fitted(self)
324
+ if sklearn_check_version("1.0"):
325
+ X = self._validate_data(
326
+ X,
327
+ reset=False,
328
+ accept_sparse=_sparsity_enabled,
329
+ accept_large_sparse=_sparsity_enabled,
330
+ dtype=[np.float64, np.float32],
331
+ )
332
+ else:
333
+ X = check_array(
334
+ X,
335
+ accept_sparse=_sparsity_enabled,
336
+ accept_large_sparse=_sparsity_enabled,
337
+ dtype=[np.float64, np.float32],
338
+ )
339
+
354
340
  assert hasattr(self, "_onedal_estimator")
355
341
  return self._onedal_estimator.predict(X, queue=queue)
356
342
 
@@ -358,7 +344,23 @@ if daal_check_version((2024, "P", 1)):
358
344
  if queue is None or queue.sycl_device.is_cpu:
359
345
  return daal4py_predict(self, X, "computeClassProbabilities")
360
346
 
361
- X = self._validate_data(X, accept_sparse=False, reset=False)
347
+ check_is_fitted(self)
348
+ if sklearn_check_version("1.0"):
349
+ X = self._validate_data(
350
+ X,
351
+ reset=False,
352
+ accept_sparse=_sparsity_enabled,
353
+ accept_large_sparse=_sparsity_enabled,
354
+ dtype=[np.float64, np.float32],
355
+ )
356
+ else:
357
+ X = check_array(
358
+ X,
359
+ accept_sparse=_sparsity_enabled,
360
+ accept_large_sparse=_sparsity_enabled,
361
+ dtype=[np.float64, np.float32],
362
+ )
363
+
362
364
  assert hasattr(self, "_onedal_estimator")
363
365
  return self._onedal_estimator.predict_proba(X, queue=queue)
364
366
 
@@ -366,7 +368,23 @@ if daal_check_version((2024, "P", 1)):
366
368
  if queue is None or queue.sycl_device.is_cpu:
367
369
  return daal4py_predict(self, X, "computeClassLogProbabilities")
368
370
 
369
- X = self._validate_data(X, accept_sparse=False, reset=False)
371
+ check_is_fitted(self)
372
+ if sklearn_check_version("1.0"):
373
+ X = self._validate_data(
374
+ X,
375
+ reset=False,
376
+ accept_sparse=_sparsity_enabled,
377
+ accept_large_sparse=_sparsity_enabled,
378
+ dtype=[np.float64, np.float32],
379
+ )
380
+ else:
381
+ X = check_array(
382
+ X,
383
+ accept_sparse=_sparsity_enabled,
384
+ accept_large_sparse=_sparsity_enabled,
385
+ dtype=[np.float64, np.float32],
386
+ )
387
+
370
388
  assert hasattr(self, "_onedal_estimator")
371
389
  return self._onedal_estimator.predict_log_proba(X, queue=queue)
372
390
 
@@ -15,3 +15,10 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.linear_model import Ridge
18
+ from onedal._device_offload import support_usm_ndarray
19
+
20
+ # Note: `sklearnex.linear_model.Ridge` only has functional
21
+ # sycl GPU support. No GPU device will be offloaded.
22
+ Ridge.fit = support_usm_ndarray(queue_param=False)(Ridge.fit)
23
+ Ridge.predict = support_usm_ndarray(queue_param=False)(Ridge.predict)
24
+ Ridge.score = support_usm_ndarray(queue_param=False)(Ridge.score)
@@ -47,7 +47,7 @@ def test_sklearnex_fit_on_gold_data(dataframe, queue, fit_intercept, macro_block
47
47
 
48
48
  y_pred = inclin.predict(X_df)
49
49
 
50
- tol = 2e-6 if dtype == np.float32 else 1e-7
50
+ tol = 2e-6 if y_pred.dtype == np.float32 else 1e-7
51
51
  assert_allclose(inclin.coef_, [1], atol=tol)
52
52
  if fit_intercept:
53
53
  assert_allclose(inclin.intercept_, [0], atol=tol)
@@ -82,15 +82,15 @@ def test_sklearnex_partial_fit_on_gold_data(
82
82
  )
83
83
  inclin.partial_fit(X_split_df, y_split_df)
84
84
 
85
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
86
+ y_pred = inclin.predict(X_df)
87
+
85
88
  assert inclin.n_features_in_ == 1
86
- tol = 2e-6 if dtype == np.float32 else 1e-7
89
+ tol = 2e-6 if y_pred.dtype == np.float32 else 1e-7
87
90
  assert_allclose(inclin.coef_, [[1]], atol=tol)
88
91
  if fit_intercept:
89
92
  assert_allclose(inclin.intercept_, 3, atol=tol)
90
93
 
91
- X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
92
- y_pred = inclin.predict(X_df)
93
-
94
94
  assert_allclose(_as_numpy(y_pred), y, atol=tol)
95
95
 
96
96
 
@@ -122,15 +122,15 @@ def test_sklearnex_partial_fit_multitarget_on_gold_data(
122
122
  )
123
123
  inclin.partial_fit(X_split_df, y_split_df)
124
124
 
125
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
126
+ y_pred = inclin.predict(X_df)
127
+
125
128
  assert inclin.n_features_in_ == 2
126
- tol = 7e-6 if dtype == np.float32 else 1e-7
129
+ tol = 7e-6 if y_pred.dtype == np.float32 else 1e-7
127
130
  assert_allclose(inclin.coef_, [1.0, 2.0], atol=tol)
128
131
  if fit_intercept:
129
132
  assert_allclose(inclin.intercept_, 3.0, atol=tol)
130
133
 
131
- X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
132
- y_pred = inclin.predict(X_df)
133
-
134
134
  assert_allclose(_as_numpy(y_pred), y, atol=tol)
135
135
 
136
136
 
@@ -181,7 +181,7 @@ def test_sklearnex_partial_fit_on_random_data(
181
181
  )
182
182
  inclin.partial_fit(X_split_df, y_split_df)
183
183
 
184
- tol = 1e-4 if dtype == np.float32 else 1e-7
184
+ tol = 1e-4 if inclin.coef_.dtype == np.float32 else 1e-7
185
185
  assert_allclose(coef, inclin.coef_.T, atol=tol)
186
186
 
187
187
  if fit_intercept:
@@ -20,6 +20,10 @@ from numpy.testing import assert_allclose
20
20
  from sklearn.datasets import make_regression
21
21
 
22
22
  from daal4py.sklearn._utils import daal_check_version
23
+ from daal4py.sklearn.linear_model.tests.test_ridge import (
24
+ _test_multivariate_ridge_alpha_shape,
25
+ _test_multivariate_ridge_coefficients,
26
+ )
23
27
  from onedal.tests.utils._dataframes_support import (
24
28
  _as_numpy,
25
29
  _convert_to_dataframe,
@@ -52,37 +56,46 @@ def test_sklearnex_import_linear(dataframe, queue, dtype, macro_block):
52
56
  assert "sklearnex" in linreg.__module__
53
57
  assert linreg.n_features_in_ == 2
54
58
 
55
- tol = 1e-5 if dtype == np.float32 else 1e-7
59
+ tol = 1e-5 if _as_numpy(linreg.coef_).dtype == np.float32 else 1e-7
56
60
  assert_allclose(_as_numpy(linreg.intercept_), 3.0, rtol=tol)
57
61
  assert_allclose(_as_numpy(linreg.coef_), [1.0, 2.0], rtol=tol)
58
62
 
59
63
 
60
- def test_sklearnex_import_ridge():
64
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
65
+ def test_sklearnex_import_ridge(dataframe, queue):
61
66
  from sklearnex.linear_model import Ridge
62
67
 
63
68
  X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
64
69
  y = np.dot(X, np.array([1, 2])) + 3
70
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
71
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
65
72
  ridgereg = Ridge().fit(X, y)
66
73
  assert "daal4py" in ridgereg.__module__
67
74
  assert_allclose(ridgereg.intercept_, 4.5)
68
75
  assert_allclose(ridgereg.coef_, [0.8, 1.4])
69
76
 
70
77
 
71
- def test_sklearnex_import_lasso():
78
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
79
+ def test_sklearnex_import_lasso(dataframe, queue):
72
80
  from sklearnex.linear_model import Lasso
73
81
 
74
82
  X = [[0, 0], [1, 1], [2, 2]]
75
83
  y = [0, 1, 2]
84
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
85
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
76
86
  lasso = Lasso(alpha=0.1).fit(X, y)
77
87
  assert "daal4py" in lasso.__module__
78
88
  assert_allclose(lasso.intercept_, 0.15)
79
89
  assert_allclose(lasso.coef_, [0.85, 0.0])
80
90
 
81
91
 
82
- def test_sklearnex_import_elastic():
92
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
93
+ def test_sklearnex_import_elastic(dataframe, queue):
83
94
  from sklearnex.linear_model import ElasticNet
84
95
 
85
96
  X, y = make_regression(n_features=2, random_state=0)
97
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
98
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
86
99
  elasticnet = ElasticNet(random_state=0).fit(X, y)
87
100
  assert "daal4py" in elasticnet.__module__
88
101
  assert_allclose(elasticnet.intercept_, 1.451, atol=1e-3)
@@ -113,5 +126,17 @@ def test_sklearnex_reconstruct_model(dataframe, queue, dtype):
113
126
 
114
127
  y_pred = linreg.predict(X)
115
128
 
116
- tol = 1e-5 if dtype == np.float32 else 1e-7
129
+ tol = 1e-5 if _as_numpy(y_pred).dtype == np.float32 else 1e-7
117
130
  assert_allclose(gtr, _as_numpy(y_pred), rtol=tol)
131
+
132
+
133
+ def test_sklearnex_multivariate_ridge_coefs():
134
+ from sklearnex.linear_model import Ridge
135
+
136
+ _test_multivariate_ridge_coefficients(Ridge, random_state=0)
137
+
138
+
139
+ def test_sklearnex_multivariate_ridge_alpha_shape():
140
+ from sklearnex.linear_model import Ridge
141
+
142
+ _test_multivariate_ridge_alpha_shape(Ridge, random_state=0)
@@ -14,8 +14,11 @@
14
14
  # limitations under the License.
15
15
  # ===============================================================================
16
16
 
17
+ import numpy as np
17
18
  import pytest
18
- from sklearn.datasets import load_breast_cancer, load_iris
19
+ from numpy.testing import assert_allclose, assert_array_equal
20
+ from scipy.sparse import csr_matrix
21
+ from sklearn.datasets import load_breast_cancer, load_iris, make_classification
19
22
  from sklearn.metrics import accuracy_score
20
23
  from sklearn.model_selection import train_test_split
21
24
 
@@ -24,7 +27,9 @@ from onedal.tests.utils._dataframes_support import (
24
27
  _as_numpy,
25
28
  _convert_to_dataframe,
26
29
  get_dataframes_and_queues,
30
+ get_queues,
27
31
  )
32
+ from sklearnex import config_context
28
33
 
29
34
 
30
35
  def prepare_input(X, y, dataframe, queue):
@@ -38,8 +43,7 @@ def prepare_input(X, y, dataframe, queue):
38
43
 
39
44
 
40
45
  @pytest.mark.parametrize(
41
- "dataframe,queue",
42
- get_dataframes_and_queues(device_filter_="cpu"),
46
+ "dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
43
47
  )
44
48
  def test_sklearnex_multiclass_classification(dataframe, queue):
45
49
  from sklearnex.linear_model import LogisticRegression
@@ -89,3 +93,41 @@ def test_sklearnex_binary_classification(dataframe, queue):
89
93
 
90
94
  y_pred = _as_numpy(logreg.predict(X_test))
91
95
  assert accuracy_score(y_test, y_pred) > 0.95
96
+
97
+
98
+ if daal_check_version((2024, "P", 700)):
99
+
100
+ @pytest.mark.parametrize("queue", get_queues("gpu"))
101
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
102
+ @pytest.mark.parametrize(
103
+ "dims", [(3007, 17, 0.05), (50000, 100, 0.01), (512, 10, 0.5)]
104
+ )
105
+ def test_csr(queue, dtype, dims):
106
+ from sklearnex.linear_model import LogisticRegression
107
+
108
+ n, p, density = dims
109
+
110
+ # Create sparse dataset for classification
111
+ X, y = make_classification(n, p, random_state=42)
112
+ X = X.astype(dtype)
113
+ y = y.astype(dtype)
114
+ np.random.seed(2007 + n + p)
115
+ mask = np.random.binomial(1, density, (n, p))
116
+ X = X * mask
117
+ X_sp = csr_matrix(X)
118
+
119
+ model = LogisticRegression(fit_intercept=True, solver="newton-cg")
120
+ model_sp = LogisticRegression(fit_intercept=True, solver="newton-cg")
121
+
122
+ with config_context(target_offload="gpu:0"):
123
+ model.fit(X, y)
124
+ pred = model.predict(X)
125
+ prob = model.predict_proba(X)
126
+ model_sp.fit(X_sp, y)
127
+ pred_sp = model_sp.predict(X_sp)
128
+ prob_sp = model_sp.predict_proba(X_sp)
129
+
130
+ assert_allclose(pred, pred_sp)
131
+ assert_allclose(prob, prob_sp)
132
+ assert_allclose(model.coef_, model_sp.coef_, rtol=1e-4)
133
+ assert_allclose(model.intercept_, model_sp.intercept_, rtol=1e-4)
@@ -0,0 +1,21 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from daal4py.sklearn.manifold import TSNE
18
+ from onedal._device_offload import support_usm_ndarray
19
+
20
+ TSNE.fit = support_usm_ndarray(queue_param=False)(TSNE.fit)
21
+ TSNE.fit_transform = support_usm_ndarray(queue_param=False)(TSNE.fit_transform)