scikit-learn-intelex 2024.0.1__py310-none-win_amd64.whl → 2025.1.0__py310-none-win_amd64.whl

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

Potentially problematic release.


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

Files changed (275) 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.cp310-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.cp310-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-2024.0.1.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/cluster/__init__.py +3 -3
  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.0.1.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +4 -2
  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.0.1.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -30
  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-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  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.0.1.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +4 -3
  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-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +4 -3
  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.0.1.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.0.1.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.0.1.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-2024.0.1.data/data/Lib/site-packages/sklearnex/spmd/linear_model → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
  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.cp310-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp310-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-2025.1.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
  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.0.1.data/data/Lib/site-packages/sklearnex/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -3
  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.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__init__.py +12 -7
  130. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -1
  131. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_config.py +22 -16
  132. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
  133. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_utils.py +42 -5
  134. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  135. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +230 -0
  136. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
  137. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
  138. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
  139. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -2
  140. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +18 -8
  141. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +395 -0
  142. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -7
  143. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +159 -0
  144. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
  145. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
  146. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +398 -0
  147. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +237 -0
  148. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -1
  149. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +425 -0
  150. scikit_learn_intelex-2024.0.1.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 +26 -6
  151. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +242 -28
  152. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -1
  153. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +262 -180
  154. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +39 -22
  155. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -1
  156. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -3
  157. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  158. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -1
  159. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +482 -0
  160. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +425 -0
  161. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +341 -0
  162. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +413 -0
  163. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +24 -0
  164. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
  165. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  166. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
  167. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +134 -0
  168. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -1
  169. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +21 -0
  170. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -1
  171. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -1
  172. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -1
  173. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -1
  174. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -1
  175. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -1
  176. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +5 -1
  177. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -1
  178. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +1 -2
  179. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +236 -0
  180. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +54 -8
  181. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +51 -151
  182. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +46 -146
  183. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +53 -95
  184. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +16 -19
  185. {scikit_learn_intelex-2024.0.1.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
  186. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance}/__init__.py +19 -20
  187. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +138 -0
  188. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  189. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  190. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +233 -0
  191. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  192. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +19 -18
  193. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +424 -0
  194. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  195. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +1 -0
  196. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  197. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  198. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  199. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  200. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  201. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  202. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  203. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +21 -0
  204. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  205. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  206. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  207. {scikit_learn_intelex-2024.0.1.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
  208. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  209. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  210. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  211. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +4 -12
  212. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  213. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +21 -0
  214. scikit_learn_intelex-2024.0.1.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
  215. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  216. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  217. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  218. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  219. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  220. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -1
  221. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
  222. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +172 -73
  223. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +73 -66
  224. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +171 -73
  225. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +65 -62
  226. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -21
  227. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +390 -0
  228. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
  229. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +379 -0
  230. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +276 -0
  231. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
  232. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +6 -8
  233. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +385 -0
  234. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +321 -0
  235. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +44 -0
  236. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +371 -0
  237. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  238. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
  239. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
  240. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -1
  241. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/METADATA +231 -230
  242. scikit_learn_intelex-2025.1.0.dist-info/RECORD +257 -0
  243. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/WHEEL +1 -1
  244. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -223
  245. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -18
  246. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -31
  247. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -18
  248. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -28
  249. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -373
  250. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -18
  251. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -77
  252. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -29
  253. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/neighbors/lof.py +0 -437
  254. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  255. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -370
  256. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/decomposition/pca.py +0 -376
  257. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -188
  258. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -225
  259. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -210
  260. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  261. scikit_learn_intelex-2024.0.1.dist-info/RECORD +0 -90
  262. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  263. {scikit_learn_intelex-2024.0.1.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.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  265. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  266. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  267. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  268. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  269. {scikit_learn_intelex-2024.0.1.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.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  271. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  272. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  273. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  274. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/LICENSE.txt +0 -0
  275. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,154 @@
1
+ # ==============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ import warnings
18
+
19
+ import numpy as np
20
+
21
+ from onedal import _backend, _is_dpc_backend
22
+
23
+
24
+ def _apply_and_pass(func, *args, **kwargs):
25
+ if len(args) == 1:
26
+ return func(args[0], **kwargs)
27
+ return tuple(map(lambda arg: func(arg, **kwargs), args))
28
+
29
+
30
+ def _convert_one_to_table(arg):
31
+ # All inputs for table conversion must be array-like or sparse, not scalars
32
+ return _backend.to_table(np.atleast_2d(arg) if np.isscalar(arg) else arg)
33
+
34
+
35
+ def to_table(*args):
36
+ """Create oneDAL tables from scalars and/or arrays.
37
+
38
+ Note: this implementation can be used with contiguous scipy.sparse, numpy
39
+ ndarrays, DPCTL/DPNP usm_ndarrays and scalars. Tables will use pointers to the
40
+ original array data. Scalars will be copies. Arrays may be modified in-
41
+ place by oneDAL during computation. This works for data located on CPU and
42
+ SYCL-enabled Intel GPUs. Each array may only be of a single datatype (i.e.
43
+ each must be homogeneous).
44
+
45
+ Parameters
46
+ ----------
47
+ *args : {scalar, numpy array, sycl_usm_ndarray, csr_matrix, or csr_array}
48
+ arg1, arg2... The arrays should be given as arguments.
49
+
50
+ Returns
51
+ -------
52
+ tables: {oneDAL homogeneous tables}
53
+ """
54
+ return _apply_and_pass(_convert_one_to_table, *args)
55
+
56
+
57
+ if _is_dpc_backend:
58
+
59
+ try:
60
+ # try/catch is used here instead of dpep_helpers because
61
+ # of circular import issues of _data_conversion.py and
62
+ # utils/validation.py. This is a temporary fix until the
63
+ # issue with dpnp is addressed, at which point this can
64
+ # be removed entirely.
65
+ import dpnp
66
+
67
+ def _table_to_array(table, xp=None):
68
+ # By default DPNP ndarray created with a copy.
69
+ # TODO:
70
+ # investigate why dpnp.array(table, copy=False) doesn't work.
71
+ # Work around with using dpctl.tensor.asarray.
72
+ if xp == dpnp:
73
+ return dpnp.array(dpnp.dpctl.tensor.asarray(table), copy=False)
74
+ else:
75
+ return xp.asarray(table)
76
+
77
+ except ImportError:
78
+
79
+ def _table_to_array(table, xp=None):
80
+ return xp.asarray(table)
81
+
82
+ from ..common._policy import _HostInteropPolicy
83
+
84
+ def _convert_to_supported(policy, *data):
85
+ def func(x):
86
+ return x
87
+
88
+ # CPUs support FP64 by default
89
+ if isinstance(policy, _HostInteropPolicy):
90
+ return _apply_and_pass(func, *data)
91
+
92
+ # It can be either SPMD or DPCPP policy
93
+ device = policy._queue.sycl_device
94
+
95
+ def convert_or_pass(x):
96
+ if (x is not None) and (x.dtype == np.float64):
97
+ warnings.warn(
98
+ "Data will be converted into float32 from "
99
+ "float64 because device does not support it",
100
+ RuntimeWarning,
101
+ )
102
+ return x.astype(np.float32)
103
+ else:
104
+ return x
105
+
106
+ if not device.has_aspect_fp64:
107
+ func = convert_or_pass
108
+
109
+ return _apply_and_pass(func, *data)
110
+
111
+ def convert_one_from_table(table, sycl_queue=None, sua_iface=None, xp=None):
112
+ # Currently only `__sycl_usm_array_interface__` protocol used to
113
+ # convert into dpnp/dpctl tensors.
114
+ if sua_iface:
115
+ if (
116
+ sycl_queue
117
+ and sycl_queue.sycl_device.is_cpu
118
+ and table.__sycl_usm_array_interface__["syclobj"] is None
119
+ ):
120
+ # oneDAL returns tables with None sycl queue for CPU sycl queue inputs.
121
+ # This workaround is necessary for the functional preservation
122
+ # of the compute-follows-data execution.
123
+ # Host tables first converted into numpy.narrays and then to array from xp
124
+ # namespace.
125
+ return xp.asarray(
126
+ _backend.from_table(table), usm_type="device", sycl_queue=sycl_queue
127
+ )
128
+ else:
129
+ return _table_to_array(table, xp=xp)
130
+
131
+ return _backend.from_table(table)
132
+
133
+ else:
134
+
135
+ def _convert_to_supported(policy, *data):
136
+ def func(x):
137
+ return x
138
+
139
+ return _apply_and_pass(func, *data)
140
+
141
+ def convert_one_from_table(table, sycl_queue=None, sua_iface=None, xp=None):
142
+ # Currently only `__sycl_usm_array_interface__` protocol used to
143
+ # convert into dpnp/dpctl tensors.
144
+ if sua_iface:
145
+ raise RuntimeError(
146
+ "SYCL usm array conversion from table requires the DPC backend"
147
+ )
148
+ return _backend.from_table(table)
149
+
150
+
151
+ def from_table(*args, sycl_queue=None, sua_iface=None, xp=None):
152
+ return _apply_and_pass(
153
+ convert_one_from_table, *args, sycl_queue=sycl_queue, sua_iface=sua_iface, xp=xp
154
+ )
@@ -0,0 +1,126 @@
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 onedal.utils._dpep_helpers import dpctl_available, dpnp_available
18
+
19
+ if dpnp_available:
20
+ import dpnp
21
+
22
+ if dpctl_available:
23
+ import dpctl
24
+ from dpctl.tensor import usm_ndarray
25
+
26
+ def _get_sycl_queue(syclobj):
27
+ if hasattr(syclobj, "_get_capsule"):
28
+ return dpctl.SyclQueue(syclobj._get_capsule())
29
+ else:
30
+ return dpctl.SyclQueue(syclobj)
31
+
32
+ def _assert_tensor_attr(actual, desired, order):
33
+ """Check attributes of two given USM tensors."""
34
+ is_usm_tensor = (
35
+ lambda x: dpnp_available
36
+ and isinstance(x, dpnp.ndarray)
37
+ or isinstance(x, usm_ndarray)
38
+ )
39
+ assert is_usm_tensor(actual)
40
+ assert is_usm_tensor(desired)
41
+ # dpctl.tensor is the dpnp.ndarrays's core tensor structure along
42
+ # with advanced device management. Convert dpnp to dpctl.tensor with zero copy.
43
+ get_tensor = lambda x: (
44
+ x.get_array() if dpnp_available and isinstance(x, dpnp.ndarray) else x
45
+ )
46
+ # Now DPCtl tensors
47
+ actual = get_tensor(actual)
48
+ desired = get_tensor(desired)
49
+
50
+ assert actual.shape == desired.shape
51
+ assert actual.strides == desired.strides
52
+ assert actual.dtype == desired.dtype
53
+ if order == "F":
54
+ assert actual.flags.f_contiguous
55
+ assert desired.flags.f_contiguous
56
+ assert actual.flags.f_contiguous == desired.flags.f_contiguous
57
+ else:
58
+ assert actual.flags.c_contiguous
59
+ assert desired.flags.c_contiguous
60
+ assert actual.flags.c_contiguous == desired.flags.c_contiguous
61
+ assert actual.flags == desired.flags
62
+ assert actual.sycl_queue == desired.sycl_queue
63
+ # TODO:
64
+ # check better way to check usm ptrs.
65
+ assert actual.usm_data._pointer == desired.usm_data._pointer
66
+
67
+ def _assert_sua_iface_fields(
68
+ actual, desired, skip_syclobj=False, skip_data_0=False, skip_data_1=False
69
+ ):
70
+ """Check attributes of two given reprsesentations of
71
+ USM allocations `__sycl_usm_array_interface__`.
72
+
73
+ For full documentation about `__sycl_usm_array_interface__` refer
74
+ https://intelpython.github.io/dpctl/latest/api_reference/dpctl/sycl_usm_array_interface.html.
75
+
76
+ Parameters
77
+ ----------
78
+ actual : dict, __sycl_usm_array_interface__
79
+ desired : dict, __sycl_usm_array_interface__
80
+ skip_syclobj : bool, default=False
81
+ If True, check for __sycl_usm_array_interface__["syclobj"]
82
+ will be skipped.
83
+ skip_data_0 : bool, default=False
84
+ If True, check for __sycl_usm_array_interface__["data"][0]
85
+ will be skipped.
86
+ skip_data_1 : bool, default=False
87
+ If True, check for __sycl_usm_array_interface__["data"][1]
88
+ will be skipped.
89
+ """
90
+ assert hasattr(actual, "__sycl_usm_array_interface__")
91
+ assert hasattr(desired, "__sycl_usm_array_interface__")
92
+ actual_sua_iface = actual.__sycl_usm_array_interface__
93
+ desired_sua_iface = desired.__sycl_usm_array_interface__
94
+ # data: A 2-tuple whose first element is a Python integer encoding
95
+ # USM pointer value. The second entry in the tuple is a read-only flag
96
+ # (True means the data area is read-only).
97
+ if not skip_data_0:
98
+ assert actual_sua_iface["data"][0] == desired_sua_iface["data"][0]
99
+ if not skip_data_1:
100
+ assert actual_sua_iface["data"][1] == desired_sua_iface["data"][1]
101
+ # shape: a tuple of integers describing dimensions of an N-dimensional array.
102
+ # Reformating shapes for check cases (r,) vs (r,1). Contiguous flattened array
103
+ # shape (r,) becoming (r,1) just for the check, since oneDAL supports only (r,1)
104
+ # for 1-D arrays. In code after from_table conversion for 1-D expected outputs
105
+ # xp.ravel or reshape(-1) is used.
106
+ get_shape_if_1d = lambda shape: (shape[0], 1) if len(shape) == 1 else shape
107
+ actual_shape = get_shape_if_1d(actual_sua_iface["shape"])
108
+ desired_shape = get_shape_if_1d(desired_sua_iface["shape"])
109
+ assert actual_shape == desired_shape
110
+ # strides: An optional tuple of integers describing number of array elements
111
+ # needed to jump to the next array element in the corresponding dimensions.
112
+ if not actual_sua_iface["strides"] and not desired_sua_iface["strides"]:
113
+ # None to indicate a C-style contiguous 1D array.
114
+ # onedal4py constructs __sycl_usm_array_interface__["strides"] with
115
+ # real values.
116
+ assert actual_sua_iface["strides"] == desired_sua_iface["strides"]
117
+ # versions: Version of the interface.
118
+ assert actual_sua_iface["version"] == desired_sua_iface["version"]
119
+ # typestr: a string encoding elemental data type of the array.
120
+ assert actual_sua_iface["typestr"] == desired_sua_iface["typestr"]
121
+ # syclobj: Python object from which SYCL context to which represented USM
122
+ # allocation is bound.
123
+ if not skip_syclobj and dpctl_available:
124
+ actual_sycl_queue = _get_sycl_queue(actual_sua_iface["syclobj"])
125
+ desired_sycl_queue = _get_sycl_queue(desired_sua_iface["syclobj"])
126
+ assert actual_sycl_queue == desired_sycl_queue
@@ -0,0 +1,414 @@
1
+ # ==============================================================================
2
+ # Copyright 2021 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ import numpy as np
18
+ import pytest
19
+ from numpy.testing import assert_allclose
20
+
21
+ from onedal import _backend, _is_dpc_backend
22
+ from onedal.datatypes import from_table, to_table
23
+ from onedal.utils._dpep_helpers import dpctl_available
24
+
25
+ if dpctl_available:
26
+ from onedal.datatypes.tests.common import (
27
+ _assert_sua_iface_fields,
28
+ _assert_tensor_attr,
29
+ )
30
+
31
+ from onedal.primitives import linear_kernel
32
+ from onedal.tests.utils._dataframes_support import (
33
+ _convert_to_dataframe,
34
+ get_dataframes_and_queues,
35
+ )
36
+ from onedal.tests.utils._device_selection import get_queues
37
+ from onedal.utils._array_api import _get_sycl_namespace
38
+
39
+ data_shapes = [
40
+ pytest.param((1000, 100), id="(1000, 100)"), # 2-D array
41
+ pytest.param((2000, 50), id="(2000, 50)"), # 2-D array
42
+ pytest.param((50, 1), id="(50, 1)"), # 2-D array
43
+ pytest.param((1, 50), id="(1, 50)"), # 2-D array
44
+ pytest.param((50,), id="(50,)"), # 1-D array
45
+ ]
46
+
47
+ unsupported_data_shapes = [
48
+ pytest.param((2, 3, 4), id="(2, 3, 4)"),
49
+ pytest.param((2, 3, 4, 5), id="(2, 3, 4, 5)"),
50
+ ]
51
+
52
+ ORDER_DICT = {"F": np.asfortranarray, "C": np.ascontiguousarray}
53
+
54
+
55
+ if _is_dpc_backend:
56
+ from daal4py.sklearn._utils import get_dtype
57
+ from onedal.cluster.dbscan import BaseDBSCAN
58
+ from onedal.common._policy import _get_policy
59
+
60
+ class DummyEstimatorWithTableConversions:
61
+
62
+ def fit(self, X, y=None):
63
+ sua_iface, xp, _ = _get_sycl_namespace(X)
64
+ policy = _get_policy(X.sycl_queue, None)
65
+ bs_DBSCAN = BaseDBSCAN()
66
+ types = [xp.float32, xp.float64]
67
+ if get_dtype(X) not in types:
68
+ X = xp.astype(X, dtype=xp.float64)
69
+ dtype = get_dtype(X)
70
+ params = bs_DBSCAN._get_onedal_params(dtype)
71
+ X_table = to_table(X)
72
+ # TODO:
73
+ # check other candidates for the dummy base oneDAL func.
74
+ # oneDAL backend func is needed to check result table checks.
75
+ result = _backend.dbscan.clustering.compute(
76
+ policy, params, X_table, to_table(None)
77
+ )
78
+ result_responses_table = result.responses
79
+ result_responses_df = from_table(
80
+ result_responses_table,
81
+ sua_iface=sua_iface,
82
+ sycl_queue=X.sycl_queue,
83
+ xp=xp,
84
+ )
85
+ return X_table, result_responses_table, result_responses_df
86
+
87
+ else:
88
+
89
+ class DummyEstimatorWithTableConversions:
90
+ pass
91
+
92
+
93
+ def _test_input_format_c_contiguous_numpy(queue, dtype):
94
+ rng = np.random.RandomState(0)
95
+ x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
96
+
97
+ x_numpy = np.asanyarray(x_default, dtype=dtype, order="C")
98
+ assert x_numpy.flags.c_contiguous
99
+ assert not x_numpy.flags.f_contiguous
100
+ assert not x_numpy.flags.fnc
101
+
102
+ expected = linear_kernel(x_default, queue=queue)
103
+ result = linear_kernel(x_numpy, queue=queue)
104
+ assert_allclose(expected, result)
105
+
106
+
107
+ @pytest.mark.parametrize("queue", get_queues())
108
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
109
+ def test_input_format_c_contiguous_numpy(queue, dtype):
110
+ if queue and queue.sycl_device.is_gpu:
111
+ pytest.skip("Sporadic failures on GPU sycl_queue.")
112
+ _test_input_format_c_contiguous_numpy(queue, dtype)
113
+
114
+
115
+ def _test_input_format_f_contiguous_numpy(queue, dtype):
116
+ rng = np.random.RandomState(0)
117
+ x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
118
+
119
+ x_numpy = np.asanyarray(x_default, dtype=dtype, order="F")
120
+ assert not x_numpy.flags.c_contiguous
121
+ assert x_numpy.flags.f_contiguous
122
+ assert x_numpy.flags.fnc
123
+
124
+ expected = linear_kernel(x_default, queue=queue)
125
+ result = linear_kernel(x_numpy, queue=queue)
126
+ assert_allclose(expected, result)
127
+
128
+
129
+ @pytest.mark.parametrize("queue", get_queues())
130
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
131
+ def test_input_format_f_contiguous_numpy(queue, dtype):
132
+ if queue and queue.sycl_device.is_gpu:
133
+ pytest.skip("Sporadic failures on GPU sycl_queue.")
134
+ _test_input_format_f_contiguous_numpy(queue, dtype)
135
+
136
+
137
+ def _test_input_format_c_not_contiguous_numpy(queue, dtype):
138
+ rng = np.random.RandomState(0)
139
+ x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
140
+
141
+ dummy_data = np.insert(x_default, range(1, x_default.shape[1]), 8, axis=1)
142
+ x_numpy = dummy_data[:, ::2]
143
+
144
+ assert_allclose(x_numpy, x_default)
145
+
146
+ assert not x_numpy.flags.c_contiguous
147
+ assert not x_numpy.flags.f_contiguous
148
+ assert not x_numpy.flags.fnc
149
+
150
+ expected = linear_kernel(x_default, queue=queue)
151
+ result = linear_kernel(x_numpy, queue=queue)
152
+ assert_allclose(expected, result)
153
+
154
+
155
+ @pytest.mark.parametrize("queue", get_queues())
156
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
157
+ def test_input_format_c_not_contiguous_numpy(queue, dtype):
158
+ if queue and queue.sycl_device.is_gpu:
159
+ pytest.skip("Sporadic failures on GPU sycl_queue.")
160
+ _test_input_format_c_not_contiguous_numpy(queue, dtype)
161
+
162
+
163
+ def _test_input_format_c_contiguous_pandas(queue, dtype):
164
+ pd = pytest.importorskip("pandas")
165
+ rng = np.random.RandomState(0)
166
+ x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
167
+
168
+ x_numpy = np.asanyarray(x_default, dtype=dtype, order="C")
169
+ assert x_numpy.flags.c_contiguous
170
+ assert not x_numpy.flags.f_contiguous
171
+ assert not x_numpy.flags.fnc
172
+ x_df = pd.DataFrame(x_numpy)
173
+
174
+ expected = linear_kernel(x_df, queue=queue)
175
+ result = linear_kernel(x_numpy, queue=queue)
176
+ assert_allclose(expected, result)
177
+
178
+
179
+ @pytest.mark.parametrize("queue", get_queues())
180
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
181
+ def test_input_format_c_contiguous_pandas(queue, dtype):
182
+ if queue and queue.sycl_device.is_gpu:
183
+ pytest.skip("Sporadic failures on GPU sycl_queue.")
184
+ _test_input_format_c_contiguous_pandas(queue, dtype)
185
+
186
+
187
+ def _test_input_format_f_contiguous_pandas(queue, dtype):
188
+ pd = pytest.importorskip("pandas")
189
+ rng = np.random.RandomState(0)
190
+ x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
191
+
192
+ x_numpy = np.asanyarray(x_default, dtype=dtype, order="F")
193
+ assert not x_numpy.flags.c_contiguous
194
+ assert x_numpy.flags.f_contiguous
195
+ assert x_numpy.flags.fnc
196
+ x_df = pd.DataFrame(x_numpy)
197
+
198
+ expected = linear_kernel(x_df, queue=queue)
199
+ result = linear_kernel(x_numpy, queue=queue)
200
+ assert_allclose(expected, result)
201
+
202
+
203
+ @pytest.mark.parametrize("queue", get_queues())
204
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
205
+ def test_input_format_f_contiguous_pandas(queue, dtype):
206
+ if queue and queue.sycl_device.is_gpu:
207
+ pytest.skip("Sporadic failures on GPU sycl_queue.")
208
+ _test_input_format_f_contiguous_pandas(queue, dtype)
209
+
210
+
211
+ def _test_conversion_to_table(dtype):
212
+ np.random.seed()
213
+ if dtype in [np.int32, np.int64]:
214
+ x = np.random.randint(0, 10, (15, 3), dtype=dtype)
215
+ else:
216
+ x = np.random.uniform(-2, 2, (18, 6)).astype(dtype)
217
+ x_table = to_table(x)
218
+ x2 = from_table(x_table)
219
+ assert x.dtype == x2.dtype
220
+ assert np.array_equal(x, x2)
221
+
222
+
223
+ @pytest.mark.parametrize("dtype", [np.int32, np.int64, np.float32, np.float64])
224
+ def test_conversion_to_table(dtype):
225
+ _test_conversion_to_table(dtype)
226
+
227
+
228
+ @pytest.mark.skipif(
229
+ not dpctl_available,
230
+ reason="dpctl is required for checks.",
231
+ )
232
+ @pytest.mark.skipif(
233
+ not _is_dpc_backend,
234
+ reason="__sycl_usm_array_interface__ support requires DPC backend.",
235
+ )
236
+ @pytest.mark.parametrize(
237
+ "dataframe,queue", get_dataframes_and_queues("dpctl,dpnp", "cpu,gpu")
238
+ )
239
+ @pytest.mark.parametrize("order", ["C", "F"])
240
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64, np.int32, np.int64])
241
+ def test_input_sua_iface_zero_copy(dataframe, queue, order, dtype):
242
+ """Checking that values ​​representing USM allocations `__sycl_usm_array_interface__`
243
+ are preserved during conversion to onedal table.
244
+ """
245
+ rng = np.random.RandomState(0)
246
+ X_np = np.array(5 * rng.random_sample((10, 59)), dtype=dtype)
247
+
248
+ X_np = np.asanyarray(X_np, dtype=dtype, order=order)
249
+
250
+ X_dp = _convert_to_dataframe(X_np, sycl_queue=queue, target_df=dataframe)
251
+
252
+ sua_iface, X_dp_namespace, _ = _get_sycl_namespace(X_dp)
253
+
254
+ X_table = to_table(X_dp)
255
+ _assert_sua_iface_fields(X_dp, X_table)
256
+
257
+ X_dp_from_table = from_table(
258
+ X_table, sycl_queue=queue, sua_iface=sua_iface, xp=X_dp_namespace
259
+ )
260
+ _assert_sua_iface_fields(X_table, X_dp_from_table)
261
+ _assert_tensor_attr(X_dp, X_dp_from_table, order)
262
+
263
+
264
+ @pytest.mark.skipif(
265
+ not dpctl_available,
266
+ reason="dpctl is required for checks.",
267
+ )
268
+ @pytest.mark.skipif(
269
+ not _is_dpc_backend,
270
+ reason="__sycl_usm_array_interface__ support requires DPC backend.",
271
+ )
272
+ @pytest.mark.parametrize(
273
+ "dataframe,queue", get_dataframes_and_queues("dpctl,dpnp", "cpu,gpu")
274
+ )
275
+ @pytest.mark.parametrize("order", ["F", "C"])
276
+ @pytest.mark.parametrize("data_shape", data_shapes)
277
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
278
+ def test_table_conversions(dataframe, queue, order, data_shape, dtype):
279
+ """Checking that values ​​representing USM allocations `__sycl_usm_array_interface__`
280
+ are preserved during conversion to onedal table and from onedal table to
281
+ sycl usm array dataformat.
282
+ """
283
+ rng = np.random.RandomState(0)
284
+ X = np.array(5 * rng.random_sample(data_shape), dtype=dtype)
285
+
286
+ X = ORDER_DICT[order](X)
287
+
288
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
289
+ alg = DummyEstimatorWithTableConversions()
290
+ X_table, result_responses_table, result_responses_df = alg.fit(X)
291
+
292
+ for obj in [X_table, result_responses_table, result_responses_df, X]:
293
+ assert hasattr(obj, "__sycl_usm_array_interface__"), f"{obj} has no SUA interface"
294
+ _assert_sua_iface_fields(X, X_table)
295
+
296
+ # Work around for saving compute-follows-data execution
297
+ # for CPU sycl context requires cause additional memory
298
+ # allocation using the same queue.
299
+ skip_data_0 = True if queue.sycl_device.is_cpu else False
300
+ # Onedal return table's syclobj is empty for CPU inputs.
301
+ skip_syclobj = True if queue.sycl_device.is_cpu else False
302
+ # TODO:
303
+ # investigate why __sycl_usm_array_interface__["data"][1] is changed
304
+ # after conversion from onedal table to sua array.
305
+ # Test is not turned off because of this. Only check is skipped.
306
+ skip_data_1 = True
307
+ _assert_sua_iface_fields(
308
+ result_responses_df,
309
+ result_responses_table,
310
+ skip_data_0=skip_data_0,
311
+ skip_data_1=skip_data_1,
312
+ skip_syclobj=skip_syclobj,
313
+ )
314
+ assert X.sycl_queue == result_responses_df.sycl_queue
315
+ if order == "F":
316
+ assert X.flags.f_contiguous == result_responses_df.flags.f_contiguous
317
+ else:
318
+ assert X.flags.c_contiguous == result_responses_df.flags.c_contiguous
319
+ # 1D output expected to have the same c_contiguous and f_contiguous flag values.
320
+ assert (
321
+ result_responses_df.flags.c_contiguous == result_responses_df.flags.f_contiguous
322
+ )
323
+
324
+
325
+ @pytest.mark.skipif(
326
+ not _is_dpc_backend,
327
+ reason="__sycl_usm_array_interface__ support requires DPC backend.",
328
+ )
329
+ @pytest.mark.parametrize(
330
+ "dataframe,queue", get_dataframes_and_queues("dpctl,dpnp", "cpu,gpu")
331
+ )
332
+ @pytest.mark.parametrize("data_shape", unsupported_data_shapes)
333
+ def test_sua_iface_interop_invalid_shape(dataframe, queue, data_shape):
334
+ X = np.zeros(data_shape)
335
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
336
+ sua_iface, _, _ = _get_sycl_namespace(X)
337
+
338
+ expected_err_msg = (
339
+ "Unable to convert from SUA interface: only 1D & 2D tensors are allowed"
340
+ )
341
+ with pytest.raises(ValueError, match=expected_err_msg):
342
+ to_table(X)
343
+
344
+
345
+ @pytest.mark.skipif(
346
+ not _is_dpc_backend,
347
+ reason="__sycl_usm_array_interface__ support requires DPC backend.",
348
+ )
349
+ @pytest.mark.parametrize(
350
+ "dataframe,queue", get_dataframes_and_queues("dpctl,dpnp", "cpu,gpu")
351
+ )
352
+ @pytest.mark.parametrize(
353
+ "dtype",
354
+ [
355
+ pytest.param(np.uint16, id=np.dtype(np.uint16).name),
356
+ pytest.param(np.uint32, id=np.dtype(np.uint32).name),
357
+ pytest.param(np.uint64, id=np.dtype(np.uint64).name),
358
+ ],
359
+ )
360
+ def test_sua_iface_interop_unsupported_dtypes(dataframe, queue, dtype):
361
+ # sua iface interobility supported only for oneDAL supported dtypes
362
+ # for input data: int32, int64, float32, float64.
363
+ # Checking some common dtypes supported by dpctl, dpnp for exception
364
+ # raise.
365
+ X = np.zeros((10, 20), dtype=dtype)
366
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
367
+ sua_iface, _, _ = _get_sycl_namespace(X)
368
+
369
+ expected_err_msg = "Unable to convert from SUA interface: unknown data type"
370
+ with pytest.raises(ValueError, match=expected_err_msg):
371
+ to_table(X)
372
+
373
+
374
+ @pytest.mark.parametrize(
375
+ "dataframe,queue", get_dataframes_and_queues("numpy,dpctl,dpnp", "cpu,gpu")
376
+ )
377
+ def test_to_table_non_contiguous_input(dataframe, queue):
378
+ if dataframe in "dpnp,dpctl" and not _is_dpc_backend:
379
+ pytest.skip("__sycl_usm_array_interface__ support requires DPC backend.")
380
+ X = np.mgrid[:10, :10]
381
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
382
+ X = X[:, :3]
383
+ sua_iface, _, _ = _get_sycl_namespace(X)
384
+ # X expected to be non-contiguous.
385
+ assert not X.flags.c_contiguous and not X.flags.f_contiguous
386
+
387
+ # TODO:
388
+ # consistent error message.
389
+ if dataframe in "dpnp,dpctl":
390
+ expected_err_msg = (
391
+ "Unable to convert from SUA interface: only 1D & 2D tensors are allowed"
392
+ )
393
+ else:
394
+ expected_err_msg = "Numpy input Could not convert Python object to onedal table."
395
+ with pytest.raises(ValueError, match=expected_err_msg):
396
+ to_table(X)
397
+
398
+
399
+ @pytest.mark.skipif(
400
+ _is_dpc_backend,
401
+ reason="Required check should be done if no DPC backend.",
402
+ )
403
+ @pytest.mark.parametrize(
404
+ "dataframe,queue", get_dataframes_and_queues("dpctl,dpnp", "cpu,gpu")
405
+ )
406
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
407
+ def test_sua_iface_interop_if_no_dpc_backend(dataframe, queue, dtype):
408
+ X = np.zeros((10, 20), dtype=dtype)
409
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
410
+ sua_iface, _, _ = _get_sycl_namespace(X)
411
+
412
+ expected_err_msg = "SYCL usm array conversion to table requires the DPC backend"
413
+ with pytest.raises(RuntimeError, match=expected_err_msg):
414
+ to_table(X)