scikit-learn-intelex 2024.2.0__py311-none-manylinux1_x86_64.whl → 2024.3.0__py311-none-manylinux1_x86_64.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 (35) hide show
  1. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2024.3.0.dist-info}/METADATA +2 -2
  2. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2024.3.0.dist-info}/RECORD +30 -33
  3. sklearnex/__init__.py +9 -7
  4. sklearnex/cluster/dbscan.py +3 -1
  5. sklearnex/conftest.py +63 -0
  6. sklearnex/decomposition/pca.py +322 -1
  7. sklearnex/decomposition/tests/test_pca.py +34 -5
  8. sklearnex/dispatcher.py +72 -41
  9. sklearnex/ensemble/_forest.py +10 -14
  10. sklearnex/ensemble/tests/test_forest.py +15 -19
  11. sklearnex/linear_model/logistic_regression.py +13 -2
  12. sklearnex/linear_model/tests/test_logreg.py +0 -2
  13. sklearnex/neighbors/_lof.py +39 -2
  14. sklearnex/neighbors/knn_classification.py +7 -9
  15. sklearnex/neighbors/knn_regression.py +6 -9
  16. sklearnex/neighbors/knn_unsupervised.py +5 -8
  17. sklearnex/neighbors/tests/test_neighbors.py +0 -5
  18. sklearnex/preview/__init__.py +1 -1
  19. sklearnex/spmd/ensemble/forest.py +4 -12
  20. sklearnex/svm/nusvc.py +4 -0
  21. sklearnex/svm/nusvr.py +3 -3
  22. sklearnex/svm/svc.py +4 -0
  23. sklearnex/tests/_utils.py +155 -0
  24. sklearnex/tests/test_memory_usage.py +8 -3
  25. sklearnex/tests/test_monkeypatch.py +177 -149
  26. sklearnex/tests/test_parallel.py +6 -8
  27. sklearnex/tests/test_patching.py +305 -80
  28. sklearnex/preview/decomposition/__init__.py +0 -19
  29. sklearnex/preview/decomposition/pca.py +0 -374
  30. sklearnex/preview/decomposition/tests/test_preview_pca.py +0 -42
  31. sklearnex/tests/_models_info.py +0 -170
  32. sklearnex/tests/utils/_launch_algorithms.py +0 -118
  33. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2024.3.0.dist-info}/LICENSE.txt +0 -0
  34. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2024.3.0.dist-info}/WHEEL +0 -0
  35. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2024.3.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-learn-intelex
3
- Version: 2024.2.0
3
+ Version: 2024.3.0
4
4
  Summary: Intel(R) Extension for Scikit-learn is a seamless way to speed up your Scikit-learn application.
5
5
  Home-page: https://github.com/intel/scikit-learn-intelex
6
6
  Author: Intel Corporation
@@ -31,7 +31,7 @@ Classifier: Topic :: Software Development
31
31
  Requires-Python: >=3.7
32
32
  Description-Content-Type: text/markdown
33
33
  License-File: LICENSE.txt
34
- Requires-Dist: daal4py (==2024.2.0)
34
+ Requires-Dist: daal4py (==2024.3.0)
35
35
  Requires-Dist: scikit-learn (>=0.22)
36
36
 
37
37
 
@@ -1,13 +1,14 @@
1
- sklearnex/__init__.py,sha256=ScbLh27pOsTushgVj4zxZsNOLLYct65-7XrD_96Pu94,1648
1
+ sklearnex/__init__.py,sha256=DVpGCMMQcUlrOGj_iy1jk3ZhCfa0_TFISYLqaUDRqC0,1780
2
2
  sklearnex/__main__.py,sha256=Le9BJq6aLEGSSoZwJLsOADxsV89ynBfA8BcoJHk9F24,1921
3
3
  sklearnex/_config.py,sha256=6WS3UuS4-0DxIJyGn7yQMosj-mGkLybLQrg3W7dED5o,3928
4
4
  sklearnex/_device_offload.py,sha256=J0tZqj6tfvIFonWR01PadtTLgloQk_QEfXeCoqEvJlk,7710
5
5
  sklearnex/_utils.py,sha256=EV4jC3plVdndsgrfPBsJZTzggrRdYWLwOpoIRWtTXt4,3812
6
- sklearnex/dispatcher.py,sha256=89QQ508iMt6qxoCIHt4woLvz_-KBOR6UvvhJJeC77hE,12878
6
+ sklearnex/conftest.py,sha256=ZvcfQljZNBa3zlE1iITvuacHblugVtK6X80LwNXrnWI,2130
7
+ sklearnex/dispatcher.py,sha256=9NPax55jPByCK0zzIvvE4wtmEJ7pCMrDh7IPeP2-vZ8,14389
7
8
  sklearnex/basic_statistics/__init__.py,sha256=NA5RGlwcp27UEeCgz0ngzYYd3MAIRpxlTy86uhM2-RE,821
8
9
  sklearnex/basic_statistics/basic_statistics.py,sha256=j5jBZ3DgXjoyjCBEFfYQHyl3LgLXEWWFnNHwInThdZw,796
9
10
  sklearnex/cluster/__init__.py,sha256=TsDzdbKzEubaP86iY8a7mSW0ZQzgjzGYuPkhc5lZmlQ,853
10
- sklearnex/cluster/dbscan.py,sha256=EegSXIFHKNhaKLoe_G8dsC5t2SXRdu3tDzsHbcubdDM,6706
11
+ sklearnex/cluster/dbscan.py,sha256=JJaNVhV4dVK0xte9xzQpCAka80xVu3M7_SzmvD3k-EY,6736
11
12
  sklearnex/cluster/k_means.py,sha256=1QKcFUQcnycu8kSD8uYSaDIuedHbxZsV_gvUfcEwVAM,806
12
13
  sklearnex/cluster/tests/test_dbscan.py,sha256=AgFoKwXFVyLKLvEtJVs0qlbBs1Ci3PcRft7f-6_ENOU,1464
13
14
  sklearnex/cluster/tests/test_kmeans.py,sha256=H3a9NSHRRSASo0Eceo44Kjq6GwEoMqMzcubaNt1s1QQ,1213
@@ -15,22 +16,22 @@ sklearnex/covariance/__init__.py,sha256=_c86wiKDGBH50ofN-_tn7lO4M2YVEWO5AHhJIfim
15
16
  sklearnex/covariance/incremental_covariance.py,sha256=3s9gmLP48DPhlhnFcg2JB7RQ2sliSZdNroJkv8-1sIA,4526
16
17
  sklearnex/covariance/tests/test_incremental_covariance.py,sha256=JIa4p-1_RYvU2ZVLx27iz0OKp0Nwrl9sYCsT0Dlyi2I,5402
17
18
  sklearnex/decomposition/__init__.py,sha256=RJBYDWyvnn5DA-j5r4IqVdXLp6H4mdPySsSjnXhlv-U,805
18
- sklearnex/decomposition/pca.py,sha256=68ksLxTP5fMOUhRmiIq9QNm0YzQanBNzxsq-zA8DKaY,809
19
- sklearnex/decomposition/tests/test_pca.py,sha256=aP4gxjML38CFpknwNVIkZLQCc8t2rqYGlWVo03vsMfE,1146
19
+ sklearnex/decomposition/pca.py,sha256=XLUUM-bGeXiFXc81uUxNEIYwQ6e5edmjQ94wqnLt_xg,12829
20
+ sklearnex/decomposition/tests/test_pca.py,sha256=FJYMosxpQpdOo71QD0jVx47oWEhvVNdut_5EOxTyT_0,2201
20
21
  sklearnex/doc/third-party-programs.txt,sha256=qA1XbOqYkMRnp29p8VxXjfcH0kHE8NSO5s2heea83-8,21773
21
22
  sklearnex/ensemble/__init__.py,sha256=2xB2KfG7l7uJv0p3kfVhrs4KLM174SCsigZhYqwSYAA,1035
22
- sklearnex/ensemble/_forest.py,sha256=nw_aUdgyjxKWc6yZ-8DBaqNqDODhx5uEy13GbpM7C18,70561
23
- sklearnex/ensemble/tests/test_forest.py,sha256=KoETKE1sSpKgp38s9bepAujJjcG21eFX5RyYINcHCUo,4516
23
+ sklearnex/ensemble/_forest.py,sha256=kOtLig8WVipa2VbgMgTQAkHkbSd5UHcz05uMJCtJ8AE,70553
24
+ sklearnex/ensemble/tests/test_forest.py,sha256=r1GSPQuVVuWYoNB3ZLiGKfMSwq3lp5i6k-Rgr7InonQ,4456
24
25
  sklearnex/glob/__main__.py,sha256=--FAjkhh5E6a1TFOGu6_BM3MHe78jP8oSpl0xKiRtTI,2531
25
26
  sklearnex/glob/dispatcher.py,sha256=IEEPhAOCVzC2JDFvYtijbiPAbaUY5RrCAhFLRjMMe1w,3018
26
27
  sklearnex/linear_model/__init__.py,sha256=5XZDZh8R0SmT8D8ZtSjW7-MKRO7l1jOZ8CUnt_OzHe4,1047
27
28
  sklearnex/linear_model/coordinate_descent.py,sha256=uZOHIKfFlHoMlNXZCh2MAnZE30fRZlmtcF7UsZQ3Vq4,822
28
29
  sklearnex/linear_model/linear.py,sha256=ed7pNKKnRkwa-wC0haUCOGHQoPkA4AuFhKNMzmRL6Fw,13832
29
30
  sklearnex/linear_model/logistic_path.py,sha256=Nq3JPXSzE4bjamnP3gGQtsMKks2v7s6bSiuYRnFqrRw,849
30
- sklearnex/linear_model/logistic_regression.py,sha256=ezW717qpPM4EC6uvmKbvxZZZwkooLuc8mfddAu5ebJM,12547
31
+ sklearnex/linear_model/logistic_regression.py,sha256=KgQ97a7-4ywoRakCUlqPxp-0s4EMZr2XTah-NupKUUY,12990
31
32
  sklearnex/linear_model/ridge.py,sha256=0oxlM5McYYvl0KxK9OIGJKM6lOADuFSPTdfx-efJNTI,810
32
33
  sklearnex/linear_model/tests/test_linear.py,sha256=li9LLWgap6YCwvNiHQ9yHduvUIsK1lpXfuVNR3dLwig,3200
33
- sklearnex/linear_model/tests/test_logreg.py,sha256=iH6pxRJ5Nh6RzO_ohFLlt-TpJpQmzKh2QMU81SnPwv4,3346
34
+ sklearnex/linear_model/tests/test_logreg.py,sha256=mUYDwTDUekERlzxjnVeOeCUcNv4KJAXdTIiELZNSaDc,3283
34
35
  sklearnex/manifold/__init__.py,sha256=3FU5fY1YvHAyNeSlUHsZfPnAbvlAUtZpum0Obmok2KE,809
35
36
  sklearnex/manifold/t_sne.py,sha256=U6F_dGB6taVuEJvTnVBWD-sri3x3m0Khu3HI4wXidhg,805
36
37
  sklearnex/manifold/tests/test_tsne.py,sha256=SNqe1yg45mL4qIsxpX5hDpBsIyrv9r__6wfrerjp3yU,1063
@@ -42,22 +43,19 @@ sklearnex/model_selection/__init__.py,sha256=64045Y-nzLDBepO6IRjt88LhL2DM3KdvpCF
42
43
  sklearnex/model_selection/split.py,sha256=qjmy8sRf_QEG8LhT0ivn_tICMCYmt7ffZZV1-rLQnko,824
43
44
  sklearnex/model_selection/tests/test_model_selection.py,sha256=3kZIq8kba8SW93DBWXupoRymNStR1_mGGYSErQRnwME,1338
44
45
  sklearnex/neighbors/__init__.py,sha256=_GMJ2L-6YechRYI2fOFwHjy0kebUncE81z4FmdXUlb8,1078
45
- sklearnex/neighbors/_lof.py,sha256=HddPA9VdHEKCENr260qEAWoaB3KdqVYqHE-BssSuWPY,6605
46
+ sklearnex/neighbors/_lof.py,sha256=5ze0t8_0EXMwsayKux70zJ0Cl4ndDjzv3Fkr2iUXMUc,8109
46
47
  sklearnex/neighbors/common.py,sha256=iia-EUIRUIohDCIGpHbVx2PeDlwUvz4Mj1Tn169jidA,10781
47
- sklearnex/neighbors/knn_classification.py,sha256=C0jqL9qRQwt31JTIxjjWQWJuiy_D1I5Am1_W6ek8beY,11077
48
- sklearnex/neighbors/knn_regression.py,sha256=7ihpIl5SKSYDGvXtsUC0vNaOTj6_NNpXAAsu3uiQuaQ,9978
49
- sklearnex/neighbors/knn_unsupervised.py,sha256=Stw63vAKiaHnPQ2cfnXWD1Omf-QssT4BqhFPCMmyVCs,7620
50
- sklearnex/neighbors/tests/test_neighbors.py,sha256=s4jip1Ntrhp5Zu9-pHVbeIoNdNFsq03ABY-N-iF_UL8,3437
51
- sklearnex/preview/__init__.py,sha256=1QcbV6xCSP7QCXRxYLVPc_b4lxE0cQiyTrMm4xOnosM,797
48
+ sklearnex/neighbors/knn_classification.py,sha256=eS_uUEdhlBITAUfsaUsAQRh85g01ltsDAug2Rog4gEQ,11161
49
+ sklearnex/neighbors/knn_regression.py,sha256=76eLRvngIy56RyNa4e6-Hz_OqeXiulm6CEkwO7ICuUA,9977
50
+ sklearnex/neighbors/knn_unsupervised.py,sha256=j9YsD5RzawcKWytr7UR3qNlNni5wkAh3vVZWRBSA7sQ,7542
51
+ sklearnex/neighbors/tests/test_neighbors.py,sha256=gcJeJwDoT7wvyvk423k9TDGTGfbXUSTQETUT-VYQ74U,3409
52
+ sklearnex/preview/__init__.py,sha256=OXC_k2kudA13rVesXb5ZlEC7_mKUS7uUra_BR-Tin30,780
52
53
  sklearnex/preview/cluster/__init__.py,sha256=FONzOuTGAb5NwdfFhLco99P_VccRk9NBkDHU3EKuAIs,794
53
54
  sklearnex/preview/cluster/_common.py,sha256=bgpzijxgyrAtdNCCHyCNsZ-N70KQYNwMuoCTNdUna6o,2718
54
55
  sklearnex/preview/cluster/k_means.py,sha256=jSuU8E6r4fdbbBnxBpWp4ybBa62kCnbBx7zDXyUr0Cs,13007
55
56
  sklearnex/preview/covariance/__init__.py,sha256=DPYTk8lwcVphtwU8J3CyUYH8Uz6Zr0Uz4S6nn-RY5iM,825
56
57
  sklearnex/preview/covariance/covariance.py,sha256=LrNrGP62FEhTSBVaO-EOYAaq-Rszc1VS2B2IqMgh4oo,4938
57
58
  sklearnex/preview/covariance/tests/test_covariance.py,sha256=GYI4bMIhGnjmOXpt8J7R0JQmpm9eOvDjIphugRa4kD8,2140
58
- sklearnex/preview/decomposition/__init__.py,sha256=uRenwBGf7hHQqwAVYbBw3clUQB_HWUqJGOAKTuCnrcM,805
59
- sklearnex/preview/decomposition/pca.py,sha256=S8g5GhLdnUAb1FifNx6gnrwA8AWv8ddZtLY1Er83BkY,14342
60
- sklearnex/preview/decomposition/tests/test_preview_pca.py,sha256=xcllHM-jDIq33rAWTeh_gjhS2qfCNbUIAI5KeLPA8aY,1790
61
59
  sklearnex/spmd/__init__.py,sha256=ChQy2kEWlo4KGvs0RnbPoPEVhdgl8URV099B1rZtF5Y,889
62
60
  sklearnex/spmd/basic_statistics/__init__.py,sha256=NA5RGlwcp27UEeCgz0ngzYYd3MAIRpxlTy86uhM2-RE,821
63
61
  sklearnex/spmd/basic_statistics/basic_statistics.py,sha256=_dQ9mhVYxeuChATEpAmHpXDpgW3YvtK1qrG-kLr2MtI,886
@@ -69,7 +67,7 @@ sklearnex/spmd/covariance/covariance.py,sha256=_oIlr1W1vqDHqIPnsCb04HcBCen5oBHQr
69
67
  sklearnex/spmd/decomposition/__init__.py,sha256=dBh0ZMIiaqdf3DKbt8FWNB2K9Iacs395m8OxaDFQg_M,784
70
68
  sklearnex/spmd/decomposition/pca.py,sha256=CUrsVD2jae-A9H8RB_emza_fe82CwnFa5PEy0fW_EZ8,871
71
69
  sklearnex/spmd/ensemble/__init__.py,sha256=B3yi7hWoVogMIiw0QRT_x5atsAFS-OO72YPLGeUQJ8M,873
72
- sklearnex/spmd/ensemble/forest.py,sha256=ao6lyzcxoRW-RG9xIYwtDFyM7JIjlF8wmQKpOv_oSRQ,3113
70
+ sklearnex/spmd/ensemble/forest.py,sha256=vIJJd10wIigFMtJMsiNDNLJ_PP2om-60zpQY_fd11-U,2909
73
71
  sklearnex/spmd/linear_model/__init__.py,sha256=WwqCr2DOyUnkSIHlP0yq0UI2yFDgSl5MHV7wu3QGJtA,893
74
72
  sklearnex/spmd/linear_model/linear_model.py,sha256=7QPCIQTWKBiZBTDZZbpZXi-REgxQCfRMt6rHPJAnc5E,883
75
73
  sklearnex/spmd/linear_model/logistic_regression.py,sha256=q_HkfWcg0RgFbk2t9FeV0ZY28HHAOtkGEnUj4tLuwt4,885
@@ -77,25 +75,24 @@ sklearnex/spmd/neighbors/__init__.py,sha256=S16sH8N_18LN_8AgC_wGK5EDSNyuN-F-gI6G
77
75
  sklearnex/spmd/neighbors/neighbors.py,sha256=SiKAS_RVt34MUcGytBS5pHnI_5vFNxJn8jqt1MOhDh8,940
78
76
  sklearnex/svm/__init__.py,sha256=f3e4ZFwZfx6MsXsn94VK1xVm6mWKT5XCiHczo6zNyAQ,1057
79
77
  sklearnex/svm/_common.py,sha256=Dt1Iyz1g04zOW6hn9cHa9ruzM_MHAIq0ZEEIxh5s7nI,7167
80
- sklearnex/svm/nusvc.py,sha256=Bvs_FmC1CYH23tXyrQE3Ti1h3BqK0YeX-_PBTZMRM0k,9008
81
- sklearnex/svm/nusvr.py,sha256=XHlDAGwnx1NVkkt8c9EUST8zVRLQY7Mwu335TPCcuRk,5237
82
- sklearnex/svm/svc.py,sha256=4f-vJlPGeAcquz7nkSCeu0LJTTXCbdU2M54HkT49TeQ,10288
78
+ sklearnex/svm/nusvc.py,sha256=-KMGIanTxVwT9ovvdvGuGBGoMMFQQpAyn1uCoz4CmXA,9150
79
+ sklearnex/svm/nusvr.py,sha256=bkLU8HRlpnnZGxdL6t44Uo-idw1KQOeq2shKBIXf24g,5237
80
+ sklearnex/svm/svc.py,sha256=2wa6gNGMLE1b-sPapP_i89P9fiALDamo8nRIo8H6VS4,10426
83
81
  sklearnex/svm/svr.py,sha256=fmYi0dghOmmyFFVI59COX9-tyouQnSDfHIbs8GY8AHs,5241
84
82
  sklearnex/svm/tests/test_svm.py,sha256=Ru-aGNGCsRJts7SEEYbnKcVqUx-DqPyUtw-hEoMVpW8,4190
85
- sklearnex/tests/_models_info.py,sha256=xhjvnU3TvQg8J5Cih2hphWAOSsT8DnKmCyYbtwa0Qvs,4785
83
+ sklearnex/tests/_utils.py,sha256=XYWbUlcdzFDc2DKgHCBdScFrzarsWQrs9GKsTlJsqPs,5059
86
84
  sklearnex/tests/test_config.py,sha256=SnSJjxAAysISDyC3bYKSJiRHStkB9X-yjLeF11LpRog,1372
87
- sklearnex/tests/test_memory_usage.py,sha256=lwm63gSyRR82n3LGBdsophU_NvZK5RHkxAoTDZ2AcWI,7309
88
- sklearnex/tests/test_monkeypatch.py,sha256=wmtEeDNGoiPBlAh4Vmts86eFQLk8Wbzjbj6Busf6V3o,8663
85
+ sklearnex/tests/test_memory_usage.py,sha256=LwIuUgG7CUZ2kOk1XlxyaK7O3OlyoVwx40TgljaYs5Q,7327
86
+ sklearnex/tests/test_monkeypatch.py,sha256=_9s_4jFvbttOf8uCuBrS4rn_AzQdFlKyRlthnGacUcU,9669
89
87
  sklearnex/tests/test_n_jobs_support.py,sha256=ynfCSdCMnR3yEq1YEf_cilVD7zSe0sS-ZQ9jC0hHo8M,3903
90
- sklearnex/tests/test_parallel.py,sha256=bMu22noUvGiDX4oyxKIHPiOEoBP9lRQQUq6wq8ZD730,1776
91
- sklearnex/tests/test_patching.py,sha256=IySMpMdWVgoAZgs1cRKvdJeb8RXElFwjjNdHcE4jJz0,4247
88
+ sklearnex/tests/test_parallel.py,sha256=0zzlh2VJZWcHw5W4QSUthtAygOb6K0Bg1ekNsrdGJQE,1770
89
+ sklearnex/tests/test_patching.py,sha256=eZQRz4GsUkm9yMZj_LgT62hMbUNVdTJg88_UccezoJA,13187
92
90
  sklearnex/tests/test_run_to_run_stability_tests.py,sha256=4HDOeJruA1EDILbyQJtsHFmEXC0D1upSHuOT-KyTlEc,14008
93
- sklearnex/tests/utils/_launch_algorithms.py,sha256=pJT5tAW9rWvk7GT37R-B0-e8SLz8e9FSZw8yu4LWNJ4,3724
94
91
  sklearnex/utils/__init__.py,sha256=I8mbJQ3Zsm_F3sCLAhJQb7tUrG30kVsQ-wZoqA8vDdA,842
95
92
  sklearnex/utils/parallel.py,sha256=VBcS-KUdyq7XpJUN6ygmNjyWtYLroghbvCxQ8nVU3YI,2085
96
93
  sklearnex/utils/validation.py,sha256=fjfhQiKnBQnD7LCBlacMyvsrhGnlMLRXk5Q69uoZIP4,827
97
- scikit_learn_intelex-2024.2.0.dist-info/LICENSE.txt,sha256=7micbUpzQXphq9e_2oL7PpZcvoXzPuQHIDEXyKXC81s,10797
98
- scikit_learn_intelex-2024.2.0.dist-info/METADATA,sha256=nNiD7x2RPhuhzEKH-Hg0-iOk3kqAUlLd3f--6KmLP-c,12449
99
- scikit_learn_intelex-2024.2.0.dist-info/WHEEL,sha256=nUImGVghXI3BbWH-HS5yME2RP5X-J5sfF99vWXe2MpQ,108
100
- scikit_learn_intelex-2024.2.0.dist-info/top_level.txt,sha256=kzKChSWGJEYFmdj5PwE63HNuP_PVOhWfD32ytH9rL9Q,10
101
- scikit_learn_intelex-2024.2.0.dist-info/RECORD,,
94
+ scikit_learn_intelex-2024.3.0.dist-info/LICENSE.txt,sha256=7micbUpzQXphq9e_2oL7PpZcvoXzPuQHIDEXyKXC81s,10797
95
+ scikit_learn_intelex-2024.3.0.dist-info/METADATA,sha256=KeIxHsT7qgO6Z0kvFuwF1SIZ5_fPWgQmgM40Iq7V1BE,12449
96
+ scikit_learn_intelex-2024.3.0.dist-info/WHEEL,sha256=nUImGVghXI3BbWH-HS5yME2RP5X-J5sfF99vWXe2MpQ,108
97
+ scikit_learn_intelex-2024.3.0.dist-info/top_level.txt,sha256=kzKChSWGJEYFmdj5PwE63HNuP_PVOhWfD32ytH9rL9Q,10
98
+ scikit_learn_intelex-2024.3.0.dist-info/RECORD,,
sklearnex/__init__.py CHANGED
@@ -1,5 +1,6 @@
1
1
  # ==============================================================================
2
2
  # Copyright 2021 Intel Corporation
3
+ # Copyright 2024 Fujitsu Limited
3
4
  #
4
5
  # Licensed under the Apache License, Version 2.0 (the "License");
5
6
  # you may not use this file except in compliance with the License.
@@ -14,7 +15,7 @@
14
15
  # limitations under the License.
15
16
  # ==============================================================================
16
17
 
17
- from onedal.common.hyperparameters import get_hyperparameters
18
+ import os
18
19
 
19
20
  from . import utils
20
21
  from ._config import config_context, get_config, set_config
@@ -41,21 +42,22 @@ __all__ = [
41
42
  "linear_model",
42
43
  "manifold",
43
44
  "metrics",
45
+ "model_selection",
44
46
  "neighbors",
45
47
  "patch_sklearn",
46
48
  "set_config",
47
49
  "sklearn_is_patched",
48
- "sklearn_is_patchedget_patch_map",
49
50
  "svm",
50
51
  "unpatch_sklearn",
51
52
  "utils",
52
53
  ]
54
+ onedal_iface_flag = os.environ.get("OFF_ONEDAL_IFACE", "0")
55
+ if onedal_iface_flag == "0":
56
+ from onedal import _is_spmd_backend
57
+ from onedal.common.hyperparameters import get_hyperparameters
53
58
 
54
-
55
- from onedal import _is_dpc_backend
56
-
57
- if _is_dpc_backend:
58
- __all__.append("spmd")
59
+ if _is_spmd_backend:
60
+ __all__.append("spmd")
59
61
 
60
62
 
61
63
  from ._utils import set_sklearn_ex_verbose
@@ -26,7 +26,7 @@ from daal4py.sklearn._n_jobs_support import control_n_jobs
26
26
  from daal4py.sklearn._utils import sklearn_check_version
27
27
  from onedal.cluster import DBSCAN as onedal_DBSCAN
28
28
 
29
- from .._device_offload import dispatch, wrap_output_data
29
+ from .._device_offload import dispatch
30
30
  from .._utils import PatchingConditionsChain
31
31
 
32
32
  if sklearn_check_version("1.1") and not sklearn_check_version("1.2"):
@@ -186,3 +186,5 @@ class DBSCAN(sklearn_DBSCAN, BaseDBSCAN):
186
186
  )
187
187
 
188
188
  return self
189
+
190
+ fit.__doc__ = sklearn_DBSCAN.fit.__doc__
sklearnex/conftest.py ADDED
@@ -0,0 +1,63 @@
1
+ # ==============================================================================
2
+ # Copyright 2024 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ==============================================================================
16
+
17
+ import io
18
+ import logging
19
+
20
+ import pytest
21
+
22
+ from sklearnex import patch_sklearn, unpatch_sklearn
23
+
24
+
25
+ def pytest_configure(config):
26
+ config.addinivalue_line(
27
+ "markers", "allow_sklearn_fallback: mark test to not check for sklearnex usage"
28
+ )
29
+
30
+
31
+ @pytest.hookimpl(hookwrapper=True)
32
+ def pytest_runtest_call(item):
33
+ # setup logger to check for sklearn fallback
34
+ if not item.get_closest_marker("allow_sklearn_fallback"):
35
+ log_stream = io.StringIO()
36
+ log_handler = logging.StreamHandler(log_stream)
37
+ sklearnex_logger = logging.getLogger("sklearnex")
38
+ level = sklearnex_logger.level
39
+ sklearnex_stderr_handler = sklearnex_logger.handlers
40
+ sklearnex_logger.handlers = []
41
+ sklearnex_logger.addHandler(log_handler)
42
+ sklearnex_logger.setLevel(logging.INFO)
43
+ log_handler.setLevel(logging.INFO)
44
+
45
+ yield
46
+
47
+ sklearnex_logger.handlers = sklearnex_stderr_handler
48
+ sklearnex_logger.setLevel(level)
49
+ sklearnex_logger.removeHandler(log_handler)
50
+ text = log_stream.getvalue()
51
+ if "fallback to original Scikit-learn" in text:
52
+ raise TypeError(
53
+ f"test did not properly evaluate sklearnex functionality and fell back to sklearn:\n{text}"
54
+ )
55
+ else:
56
+ yield
57
+
58
+
59
+ @pytest.fixture
60
+ def with_sklearnex():
61
+ patch_sklearn()
62
+ yield
63
+ unpatch_sklearn()
@@ -14,4 +14,325 @@
14
14
  # limitations under the License.
15
15
  # ===============================================================================
16
16
 
17
- from daal4py.sklearn.decomposition import PCA
17
+ import logging
18
+
19
+ from daal4py.sklearn._utils import daal_check_version
20
+
21
+ if daal_check_version((2024, "P", 100)):
22
+ import numbers
23
+ from math import sqrt
24
+
25
+ import numpy as np
26
+ from scipy.sparse import issparse
27
+ from sklearn.utils.validation import check_is_fitted
28
+
29
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
30
+ from daal4py.sklearn._utils import sklearn_check_version
31
+
32
+ from .._device_offload import dispatch, wrap_output_data
33
+ from .._utils import PatchingConditionsChain
34
+
35
+ if sklearn_check_version("1.1") and not sklearn_check_version("1.2"):
36
+ from sklearn.utils import check_scalar
37
+
38
+ from sklearn.decomposition import PCA as sklearn_PCA
39
+
40
+ from onedal.decomposition import PCA as onedal_PCA
41
+
42
+ @control_n_jobs(decorated_methods=["fit", "transform", "fit_transform"])
43
+ class PCA(sklearn_PCA):
44
+ __doc__ = sklearn_PCA.__doc__
45
+
46
+ if sklearn_check_version("1.2"):
47
+ _parameter_constraints: dict = {**sklearn_PCA._parameter_constraints}
48
+
49
+ if sklearn_check_version("1.1"):
50
+
51
+ def __init__(
52
+ self,
53
+ n_components=None,
54
+ *,
55
+ copy=True,
56
+ whiten=False,
57
+ svd_solver="auto",
58
+ tol=0.0,
59
+ iterated_power="auto",
60
+ n_oversamples=10,
61
+ power_iteration_normalizer="auto",
62
+ random_state=None,
63
+ ):
64
+ self.n_components = n_components
65
+ self.copy = copy
66
+ self.whiten = whiten
67
+ self.svd_solver = svd_solver
68
+ self.tol = tol
69
+ self.iterated_power = iterated_power
70
+ self.n_oversamples = n_oversamples
71
+ self.power_iteration_normalizer = power_iteration_normalizer
72
+ self.random_state = random_state
73
+
74
+ else:
75
+
76
+ def __init__(
77
+ self,
78
+ n_components=None,
79
+ copy=True,
80
+ whiten=False,
81
+ svd_solver="auto",
82
+ tol=0.0,
83
+ iterated_power="auto",
84
+ random_state=None,
85
+ ):
86
+ self.n_components = n_components
87
+ self.copy = copy
88
+ self.whiten = whiten
89
+ self.svd_solver = svd_solver
90
+ self.tol = tol
91
+ self.iterated_power = iterated_power
92
+ self.random_state = random_state
93
+
94
+ def fit(self, X, y=None):
95
+ self._fit(X)
96
+ return self
97
+
98
+ def _fit(self, X):
99
+ if sklearn_check_version("1.2"):
100
+ self._validate_params()
101
+ elif sklearn_check_version("1.1"):
102
+ check_scalar(
103
+ self.n_oversamples,
104
+ "n_oversamples",
105
+ min_val=1,
106
+ target_type=numbers.Integral,
107
+ )
108
+
109
+ U, S, Vt = dispatch(
110
+ self,
111
+ "fit",
112
+ {
113
+ "onedal": self.__class__._onedal_fit,
114
+ "sklearn": sklearn_PCA._fit,
115
+ },
116
+ X,
117
+ )
118
+ return U, S, Vt
119
+
120
+ def _onedal_fit(self, X, queue=None):
121
+ X = self._validate_data(
122
+ X,
123
+ dtype=[np.float64, np.float32],
124
+ ensure_2d=True,
125
+ copy=self.copy,
126
+ )
127
+
128
+ onedal_params = {
129
+ "n_components": self.n_components,
130
+ "is_deterministic": True,
131
+ "method": "cov",
132
+ "whiten": self.whiten,
133
+ }
134
+ self._onedal_estimator = onedal_PCA(**onedal_params)
135
+ self._onedal_estimator.fit(X, queue=queue)
136
+ self._save_attributes()
137
+
138
+ U = None
139
+ S = self.singular_values_
140
+ Vt = self.components_
141
+
142
+ return U, S, Vt
143
+
144
+ @wrap_output_data
145
+ def transform(self, X):
146
+ return dispatch(
147
+ self,
148
+ "transform",
149
+ {
150
+ "onedal": self.__class__._onedal_transform,
151
+ "sklearn": sklearn_PCA.transform,
152
+ },
153
+ X,
154
+ )
155
+
156
+ def _onedal_transform(self, X, queue=None):
157
+ check_is_fitted(self)
158
+ X = self._validate_data(
159
+ X,
160
+ dtype=[np.float64, np.float32],
161
+ reset=False,
162
+ )
163
+ self._validate_n_features_in_after_fitting(X)
164
+ if sklearn_check_version("1.0"):
165
+ self._check_feature_names(X, reset=False)
166
+
167
+ return self._onedal_estimator.predict(X, queue=queue)
168
+
169
+ @wrap_output_data
170
+ def fit_transform(self, X, y=None):
171
+ U, S, Vt = self._fit(X)
172
+ if U is None:
173
+ # oneDAL PCA was fit
174
+ X_transformed = self._onedal_transform(X)
175
+ return X_transformed
176
+ else:
177
+ # Scikit-learn PCA was fit
178
+ U = U[:, : self.n_components_]
179
+
180
+ if self.whiten:
181
+ U *= sqrt(X.shape[0] - 1)
182
+ else:
183
+ U *= S[: self.n_components_]
184
+
185
+ return U
186
+
187
+ def _onedal_supported(self, method_name, X):
188
+ class_name = self.__class__.__name__
189
+ patching_status = PatchingConditionsChain(
190
+ f"sklearn.decomposition.{class_name}.{method_name}"
191
+ )
192
+
193
+ if method_name == "fit":
194
+ shape_tuple, _is_shape_compatible = self._get_shape_compatibility(X)
195
+ patching_status.and_conditions(
196
+ [
197
+ (
198
+ _is_shape_compatible,
199
+ "Data shape is not compatible.",
200
+ ),
201
+ (
202
+ self._is_solver_compatible_with_onedal(shape_tuple),
203
+ f"Only 'full' svd solver is supported.",
204
+ ),
205
+ (not issparse(X), "oneDAL PCA does not support sparse data"),
206
+ ]
207
+ )
208
+ return patching_status
209
+
210
+ if method_name == "transform":
211
+ patching_status.and_conditions(
212
+ [
213
+ (
214
+ hasattr(self, "_onedal_estimator"),
215
+ "oneDAL model was not trained",
216
+ ),
217
+ ]
218
+ )
219
+ return patching_status
220
+
221
+ raise RuntimeError(
222
+ f"Unknown method {method_name} in {self.__class__.__name__}"
223
+ )
224
+
225
+ def _onedal_cpu_supported(self, method_name, *data):
226
+ return self._onedal_supported(method_name, *data)
227
+
228
+ def _onedal_gpu_supported(self, method_name, *data):
229
+ return self._onedal_supported(method_name, *data)
230
+
231
+ def _get_shape_compatibility(self, X):
232
+ _is_shape_compatible = False
233
+ _empty_shape = (0, 0)
234
+ if hasattr(X, "shape"):
235
+ shape_tuple = X.shape
236
+ if len(shape_tuple) == 1:
237
+ shape_tuple = (1, shape_tuple[0])
238
+ elif isinstance(X, list):
239
+ if np.ndim(X) == 1:
240
+ shape_tuple = (1, len(X))
241
+ elif np.ndim(X) == 2:
242
+ shape_tuple = (len(X), len(X[0]))
243
+ else:
244
+ return _empty_shape, _is_shape_compatible
245
+
246
+ if shape_tuple[0] > 0 and shape_tuple[1] > 0 and len(shape_tuple) == 2:
247
+ _is_shape_compatible = shape_tuple[1] / shape_tuple[0] < 2
248
+
249
+ return shape_tuple, _is_shape_compatible
250
+
251
+ def _is_solver_compatible_with_onedal(self, shape_tuple):
252
+ self._fit_svd_solver = self.svd_solver
253
+ n_sf_min = min(shape_tuple)
254
+ n_components = n_sf_min if self.n_components is None else self.n_components
255
+
256
+ if self._fit_svd_solver == "auto":
257
+ if sklearn_check_version("1.1"):
258
+ if max(shape_tuple) <= 500 or n_components == "mle":
259
+ self._fit_svd_solver = "full"
260
+ elif 1 <= n_components < 0.8 * n_sf_min:
261
+ self._fit_svd_solver = "randomized"
262
+ else:
263
+ self._fit_svd_solver = "full"
264
+ else:
265
+ if n_components == "mle":
266
+ self._fit_svd_solver = "full"
267
+ else:
268
+ # check if sklearnex is faster than randomized sklearn
269
+ # Refer to daal4py
270
+ regression_coefs = np.array(
271
+ [
272
+ [
273
+ 9.779873e-11,
274
+ shape_tuple[0] * shape_tuple[1] * n_components,
275
+ ],
276
+ [
277
+ -1.122062e-11,
278
+ shape_tuple[0] * shape_tuple[1] * shape_tuple[1],
279
+ ],
280
+ [1.127905e-09, shape_tuple[0] ** 2],
281
+ ]
282
+ )
283
+ if (
284
+ n_components >= 1
285
+ and np.dot(regression_coefs[:, 0], regression_coefs[:, 1])
286
+ <= 0
287
+ ):
288
+ self._fit_svd_solver = "randomized"
289
+ else:
290
+ self._fit_svd_solver = "full"
291
+
292
+ if self._fit_svd_solver == "full":
293
+ return True
294
+ else:
295
+ return False
296
+
297
+ def _save_attributes(self):
298
+ self.n_samples_ = self._onedal_estimator.n_samples_
299
+ if sklearn_check_version("1.2"):
300
+ self.n_features_in_ = self._onedal_estimator.n_features_
301
+ elif sklearn_check_version("0.24"):
302
+ self.n_features_ = self._onedal_estimator.n_features_
303
+ self.n_features_in_ = self._onedal_estimator.n_features_
304
+ else:
305
+ self.n_features_ = self._onedal_estimator.n_features_
306
+ self.n_components_ = self._onedal_estimator.n_components_
307
+ self.components_ = self._onedal_estimator.components_
308
+ self.mean_ = self._onedal_estimator.mean_
309
+ self.singular_values_ = self._onedal_estimator.singular_values_
310
+ self.explained_variance_ = self._onedal_estimator.explained_variance_.ravel()
311
+ self.explained_variance_ratio_ = (
312
+ self._onedal_estimator.explained_variance_ratio_
313
+ )
314
+ self.noise_variance_ = self._onedal_estimator.noise_variance_
315
+
316
+ def _validate_n_features_in_after_fitting(self, X):
317
+ if sklearn_check_version("1.2"):
318
+ expected_n_features = self.n_features_in_
319
+ else:
320
+ expected_n_features = self.n_features_
321
+ if X.shape[1] != expected_n_features:
322
+ raise ValueError(
323
+ (
324
+ f"X has {X.shape[1]} features, "
325
+ f"but PCA is expecting {expected_n_features} features as input"
326
+ )
327
+ )
328
+
329
+ fit.__doc__ = sklearn_PCA.fit.__doc__
330
+ transform.__doc__ = sklearn_PCA.transform.__doc__
331
+ fit_transform.__doc__ = sklearn_PCA.fit_transform.__doc__
332
+
333
+ else:
334
+ from daal4py.sklearn.decomposition import PCA
335
+
336
+ logging.warning(
337
+ "Sklearnex PCA requires oneDAL version >= 2024.1.0 but it was not found"
338
+ )
@@ -15,13 +15,42 @@
15
15
  # ===============================================================================
16
16
 
17
17
  import numpy as np
18
+ import pytest
18
19
  from numpy.testing import assert_allclose
19
20
 
21
+ from daal4py.sklearn._utils import daal_check_version
22
+ from onedal.tests.utils._dataframes_support import (
23
+ _as_numpy,
24
+ _convert_to_dataframe,
25
+ get_dataframes_and_queues,
26
+ )
20
27
 
21
- def test_sklearnex_import():
28
+
29
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
30
+ def test_sklearnex_import(dataframe, queue):
22
31
  from sklearnex.decomposition import PCA
23
32
 
24
- X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
25
- pca = PCA(n_components=2, svd_solver="full").fit(X)
26
- assert "daal4py" in pca.__module__
27
- assert_allclose(pca.singular_values_, [6.30061232, 0.54980396])
33
+ X = [[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]
34
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
35
+ X_transformed_expected = [
36
+ [-1.38340578, -0.2935787],
37
+ [-2.22189802, 0.25133484],
38
+ [-3.6053038, -0.04224385],
39
+ [1.38340578, 0.2935787],
40
+ [2.22189802, -0.25133484],
41
+ [3.6053038, 0.04224385],
42
+ ]
43
+
44
+ pca = PCA(n_components=2, svd_solver="full")
45
+ pca.fit(X)
46
+ X_transformed = pca.transform(X)
47
+ X_fit_transformed = PCA(n_components=2, svd_solver="full").fit_transform(X)
48
+
49
+ if daal_check_version((2024, "P", 100)):
50
+ assert "sklearnex" in pca.__module__
51
+ assert hasattr(pca, "_onedal_estimator")
52
+ else:
53
+ assert "daal4py" in pca.__module__
54
+ assert_allclose([6.30061232, 0.54980396], _as_numpy(pca.singular_values_))
55
+ assert_allclose(X_transformed_expected, _as_numpy(X_transformed))
56
+ assert_allclose(X_transformed_expected, _as_numpy(X_fit_transformed))