scikit-learn-intelex 2025.10.0__py313-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.
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/_daal4py.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +94 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/gbt_convertors.py +1199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/logistic_regression_builders.py +211 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/tree_based_builders.py +425 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +252 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +565 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +528 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +333 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1285 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +826 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +269 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +290 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +561 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_enet.py +157 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +198 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +432 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +259 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +164 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +493 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +136 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +72 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +736 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +772 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/__init__.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_config.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_device_offload.py +199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +165 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +241 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/utils.py +50 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +582 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +145 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_backend.py +258 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +148 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/tests/test_sycl.py +148 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +121 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +190 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +158 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_dlpack.py +64 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_sycl_usm.py +63 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +131 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +686 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +218 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +124 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +291 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/dummy.py +137 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +781 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +201 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +230 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +293 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +252 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +690 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +202 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/svm.py +592 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +352 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +168 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/test_common.py +71 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +179 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +94 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +98 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_sycl_queue_manager.py +213 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_third_party.py +220 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/tests/test_validation.py +142 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/validation.py +503 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/__init__.py +69 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/__main__.py +58 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_config.py +163 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +205 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_utils.py +219 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/base.py +109 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +241 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +338 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/dbscan.py +199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +399 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +38 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +157 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +440 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +307 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +558 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +164 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dispatcher.py +572 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +629 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/_dummy.py +615 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/tests/test_dummy.py +62 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/_forest.py +1799 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +196 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/glob/__main__.py +72 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/glob/dispatcher.py +101 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +44 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +427 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +407 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +363 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +466 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +407 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +565 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_ridge.py +256 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +28 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +256 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/__init__.py +23 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/pairwise.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/ranking.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +39 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/split.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +34 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +189 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/common.py +313 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +189 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +167 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +170 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +82 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/__init__.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +261 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +112 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +406 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +390 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/__init__.py +25 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +117 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +314 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +30 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +26 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +108 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +180 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +120 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +200 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +23 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +23 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +276 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +146 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +299 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +299 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +28 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +345 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +162 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +169 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +23 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +433 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +403 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/nusvc.py +278 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/nusvr.py +158 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/svc.py +306 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/svr.py +155 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +124 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +607 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +256 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +111 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +335 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +269 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +111 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_parallel.py +48 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +418 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +335 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +48 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +420 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +217 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/class_weight.py +100 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +97 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_class_weight.py +69 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_validation.py +238 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/validation.py +212 -0
- scikit_learn_intelex-2025.10.0.dist-info/LICENSE.txt +202 -0
- scikit_learn_intelex-2025.10.0.dist-info/METADATA +182 -0
- scikit_learn_intelex-2025.10.0.dist-info/RECORD +267 -0
- scikit_learn_intelex-2025.10.0.dist-info/WHEEL +5 -0
- scikit_learn_intelex-2025.10.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2024 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
import sys
|
|
19
|
+
import threading
|
|
20
|
+
from functools import wraps
|
|
21
|
+
from inspect import Parameter, signature
|
|
22
|
+
from multiprocessing import cpu_count
|
|
23
|
+
from numbers import Integral
|
|
24
|
+
from warnings import warn
|
|
25
|
+
|
|
26
|
+
import threadpoolctl
|
|
27
|
+
|
|
28
|
+
from daal4py import daalinit as set_n_threads
|
|
29
|
+
from daal4py import num_threads as get_n_threads
|
|
30
|
+
|
|
31
|
+
from ._utils import sklearn_check_version
|
|
32
|
+
|
|
33
|
+
if sklearn_check_version("1.2"):
|
|
34
|
+
from sklearn.utils._param_validation import validate_parameter_constraints
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Note: getting controller in global scope of this module is required
|
|
38
|
+
# to avoid overheads by its initialization per each function call
|
|
39
|
+
threadpool_controller = threadpoolctl.ThreadpoolController()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_suggested_n_threads(n_cpus):
|
|
43
|
+
"""
|
|
44
|
+
Function to get `n_threads` limit
|
|
45
|
+
if `n_jobs` is set in upper parallelization context.
|
|
46
|
+
Usually, limit is equal to `n_logical_cpus` // `n_jobs`.
|
|
47
|
+
Returns None if limit is not set.
|
|
48
|
+
"""
|
|
49
|
+
n_threads_map = {
|
|
50
|
+
lib_ctl.internal_api: lib_ctl.get_num_threads()
|
|
51
|
+
for lib_ctl in threadpool_controller.lib_controllers
|
|
52
|
+
if lib_ctl.internal_api != "mkl"
|
|
53
|
+
}
|
|
54
|
+
# openBLAS is limited to 24, 64 or 128 threads by default
|
|
55
|
+
# depending on SW/HW configuration.
|
|
56
|
+
# thus, these numbers of threads from openBLAS are uninformative
|
|
57
|
+
if "openblas" in n_threads_map and n_threads_map["openblas"] in [24, 64, 128]:
|
|
58
|
+
del n_threads_map["openblas"]
|
|
59
|
+
# remove default values equal to n_cpus as uninformative
|
|
60
|
+
for backend in list(n_threads_map.keys()):
|
|
61
|
+
if n_threads_map[backend] == n_cpus:
|
|
62
|
+
del n_threads_map[backend]
|
|
63
|
+
if len(n_threads_map) > 0:
|
|
64
|
+
return min(n_threads_map.values())
|
|
65
|
+
else:
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _run_with_n_jobs(method):
|
|
70
|
+
"""
|
|
71
|
+
Decorator for running of methods containing oneDAL kernels with 'n_jobs'.
|
|
72
|
+
|
|
73
|
+
Outside actual call of decorated method, this decorator:
|
|
74
|
+
- checks correctness of passed 'n_jobs',
|
|
75
|
+
- deducts actual number of threads to use,
|
|
76
|
+
- sets and resets this number for oneDAL environment.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
@wraps(method)
|
|
80
|
+
def n_jobs_wrapper(self, *args, **kwargs):
|
|
81
|
+
# threading parallel backend branch
|
|
82
|
+
if not isinstance(threading.current_thread(), threading._MainThread):
|
|
83
|
+
warn(
|
|
84
|
+
"'Threading' parallel backend is not supported by "
|
|
85
|
+
"Extension for Scikit-learn*. "
|
|
86
|
+
"Falling back to usage of all available threads."
|
|
87
|
+
)
|
|
88
|
+
result = method(self, *args, **kwargs)
|
|
89
|
+
return result
|
|
90
|
+
# multiprocess parallel backends branch
|
|
91
|
+
# preemptive validation of n_jobs parameter is required
|
|
92
|
+
# because '_run_with_n_jobs' decorator is applied on top of method
|
|
93
|
+
# where validation takes place
|
|
94
|
+
if sklearn_check_version("1.2") and hasattr(self, "_parameter_constraints"):
|
|
95
|
+
validate_parameter_constraints(
|
|
96
|
+
parameter_constraints={"n_jobs": self._parameter_constraints["n_jobs"]},
|
|
97
|
+
params={"n_jobs": self.n_jobs},
|
|
98
|
+
caller_name=self.__class__.__name__,
|
|
99
|
+
)
|
|
100
|
+
# search for specified n_jobs
|
|
101
|
+
n_jobs = self.n_jobs
|
|
102
|
+
n_cpus = cpu_count()
|
|
103
|
+
# receive n_threads limitation from upper parallelism context
|
|
104
|
+
# using `threadpoolctl.ThreadpoolController`
|
|
105
|
+
n_threads = get_suggested_n_threads(n_cpus)
|
|
106
|
+
# get real `n_jobs` number of threads for oneDAL
|
|
107
|
+
# using sklearn rules and `n_threads` from upper parallelism context
|
|
108
|
+
if n_jobs is None or n_jobs == 0:
|
|
109
|
+
if n_threads is None:
|
|
110
|
+
# default branch with no setting for n_jobs
|
|
111
|
+
return method(self, *args, **kwargs)
|
|
112
|
+
else:
|
|
113
|
+
n_jobs = n_threads
|
|
114
|
+
elif n_jobs < 0:
|
|
115
|
+
if n_threads is None:
|
|
116
|
+
n_jobs = max(1, n_cpus + n_jobs + 1)
|
|
117
|
+
else:
|
|
118
|
+
n_jobs = max(1, n_threads + n_jobs + 1)
|
|
119
|
+
# branch with set n_jobs
|
|
120
|
+
old_n_threads = get_n_threads()
|
|
121
|
+
if n_jobs == old_n_threads:
|
|
122
|
+
return method(self, *args, **kwargs)
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
logger = logging.getLogger("sklearnex")
|
|
126
|
+
cl = self.__class__
|
|
127
|
+
logger.debug(
|
|
128
|
+
f"{cl.__module__}.{cl.__name__}.{method.__name__}: "
|
|
129
|
+
f"setting {n_jobs} threads (previous - {old_n_threads})"
|
|
130
|
+
)
|
|
131
|
+
set_n_threads(n_jobs)
|
|
132
|
+
return method(self, *args, **kwargs)
|
|
133
|
+
finally:
|
|
134
|
+
set_n_threads(old_n_threads)
|
|
135
|
+
|
|
136
|
+
return n_jobs_wrapper
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def control_n_jobs(decorated_methods: list = []):
|
|
140
|
+
"""
|
|
141
|
+
Decorator for controlling the 'n_jobs' parameter in an estimator class.
|
|
142
|
+
|
|
143
|
+
This decorator is designed to be applied to both estimators with and without
|
|
144
|
+
native support for the 'n_jobs' parameter in the original Scikit-learn APIs.
|
|
145
|
+
When applied to an estimator without 'n_jobs' support in
|
|
146
|
+
its original '__init__' method, this decorator adds the 'n_jobs' parameter.
|
|
147
|
+
|
|
148
|
+
Additionally, this decorator allows for fine-grained control over which methods
|
|
149
|
+
should be executed with the 'n_jobs' parameter. The methods specified in
|
|
150
|
+
the 'decorated_methods' argument will run with 'n_jobs',
|
|
151
|
+
while all other methods remain unaffected.
|
|
152
|
+
|
|
153
|
+
Parameters
|
|
154
|
+
----------
|
|
155
|
+
decorated_methods: list
|
|
156
|
+
A list of method names to be executed with 'n_jobs'.
|
|
157
|
+
|
|
158
|
+
Example
|
|
159
|
+
-------
|
|
160
|
+
@control_n_jobs(decorated_methods=['fit', 'predict'])
|
|
161
|
+
|
|
162
|
+
class MyEstimator:
|
|
163
|
+
|
|
164
|
+
def __init__(self, *args, **kwargs):
|
|
165
|
+
# Your original __init__ implementation here
|
|
166
|
+
|
|
167
|
+
def fit(self, *args, **kwargs):
|
|
168
|
+
# Your original fit implementation here
|
|
169
|
+
|
|
170
|
+
def predict(self, *args, **kwargs):
|
|
171
|
+
# Your original predict implementation here
|
|
172
|
+
|
|
173
|
+
def other_method(self, *args, **kwargs):
|
|
174
|
+
# Methods not listed in decorated_methods will not be affected by 'n_jobs'
|
|
175
|
+
pass
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
def class_wrapper(original_class):
|
|
179
|
+
original_class._n_jobs_supported_onedal_methods = decorated_methods.copy()
|
|
180
|
+
|
|
181
|
+
original_init = original_class.__init__
|
|
182
|
+
|
|
183
|
+
if sklearn_check_version("1.2") and hasattr(
|
|
184
|
+
original_class, "_parameter_constraints"
|
|
185
|
+
):
|
|
186
|
+
parameter_constraints = original_class._parameter_constraints
|
|
187
|
+
if "n_jobs" not in parameter_constraints:
|
|
188
|
+
parameter_constraints["n_jobs"] = [Integral, None]
|
|
189
|
+
|
|
190
|
+
@wraps(original_init)
|
|
191
|
+
def init_with_n_jobs(self, *args, n_jobs=None, **kwargs):
|
|
192
|
+
original_init(self, *args, **kwargs)
|
|
193
|
+
self.n_jobs = n_jobs
|
|
194
|
+
|
|
195
|
+
# add "n_jobs" parameter to signature of wrapped init
|
|
196
|
+
# if estimator doesn't originally support it
|
|
197
|
+
sig = signature(original_init)
|
|
198
|
+
if "n_jobs" not in sig.parameters:
|
|
199
|
+
params_copy = sig.parameters.copy()
|
|
200
|
+
params_copy.update(
|
|
201
|
+
{
|
|
202
|
+
"n_jobs": Parameter(
|
|
203
|
+
name="n_jobs", kind=Parameter.KEYWORD_ONLY, default=None
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
)
|
|
207
|
+
init_with_n_jobs.__signature__ = sig.replace(parameters=params_copy.values())
|
|
208
|
+
original_class.__init__ = init_with_n_jobs
|
|
209
|
+
|
|
210
|
+
# add n_jobs to __doc__ string if needed
|
|
211
|
+
if (
|
|
212
|
+
hasattr(original_class, "__doc__")
|
|
213
|
+
and isinstance(original_class.__doc__, str)
|
|
214
|
+
and "n_jobs : int" not in original_class.__doc__
|
|
215
|
+
):
|
|
216
|
+
# Python 3.13 removed extra tab in class doc string
|
|
217
|
+
tab = (
|
|
218
|
+
" "
|
|
219
|
+
if (sys.version_info.major == 3 and sys.version_info.minor < 13)
|
|
220
|
+
else ""
|
|
221
|
+
)
|
|
222
|
+
parameters_doc_tail = f"\n{tab}Attributes"
|
|
223
|
+
n_jobs_doc = f"""
|
|
224
|
+
{tab}n_jobs : int, default=None
|
|
225
|
+
{tab} The number of jobs to use in parallel for the computation.
|
|
226
|
+
{tab} ``None`` means using all physical cores
|
|
227
|
+
{tab} unless in a :obj:`joblib.parallel_backend` context.
|
|
228
|
+
{tab} ``-1`` means using all logical cores.
|
|
229
|
+
{tab} See :term:`Glossary <n_jobs>` for more details.
|
|
230
|
+
"""
|
|
231
|
+
original_class.__doc__ = original_class.__doc__.replace(
|
|
232
|
+
parameters_doc_tail, n_jobs_doc + parameters_doc_tail
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
# decorate methods to be run with applied n_jobs parameter
|
|
236
|
+
for method_name in decorated_methods:
|
|
237
|
+
# if method doesn't exist, we want it to raise an Exception
|
|
238
|
+
method = getattr(original_class, method_name)
|
|
239
|
+
if not hasattr(method, "__onedal_n_jobs_decorated__"):
|
|
240
|
+
decorated_method = _run_with_n_jobs(method)
|
|
241
|
+
# sign decorated method for testing and other purposes
|
|
242
|
+
decorated_method.__onedal_n_jobs_decorated__ = True
|
|
243
|
+
setattr(original_class, method_name, decorated_method)
|
|
244
|
+
else:
|
|
245
|
+
warn(
|
|
246
|
+
f"{original_class.__name__}.{method_name} already has "
|
|
247
|
+
"oneDAL n_jobs support and will not be decorated."
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
return original_class
|
|
251
|
+
|
|
252
|
+
return class_wrapper
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2014 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import functools
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
import warnings
|
|
21
|
+
from typing import Any, Tuple
|
|
22
|
+
|
|
23
|
+
import numpy as np
|
|
24
|
+
from numpy.lib.recfunctions import require_fields
|
|
25
|
+
from sklearn import __version__ as sklearn_version
|
|
26
|
+
|
|
27
|
+
from daal4py import _get__daal_link_version__ as dv
|
|
28
|
+
|
|
29
|
+
DaalVersionTuple = Tuple[int, str, int]
|
|
30
|
+
|
|
31
|
+
import logging
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
from packaging.version import Version
|
|
35
|
+
except ImportError:
|
|
36
|
+
from distutils.version import LooseVersion as Version
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
from pandas import DataFrame
|
|
40
|
+
from pandas.core.dtypes.cast import find_common_type
|
|
41
|
+
|
|
42
|
+
pandas_is_imported = True
|
|
43
|
+
except (ImportError, ModuleNotFoundError):
|
|
44
|
+
pandas_is_imported = False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def set_idp_sklearn_verbose():
|
|
48
|
+
logLevel = os.environ.get("IDP_SKLEARN_VERBOSE")
|
|
49
|
+
try:
|
|
50
|
+
if logLevel is not None:
|
|
51
|
+
logging.basicConfig(
|
|
52
|
+
stream=sys.stdout,
|
|
53
|
+
format="%(levelname)s: %(message)s",
|
|
54
|
+
level=logLevel.upper(),
|
|
55
|
+
)
|
|
56
|
+
except Exception:
|
|
57
|
+
warnings.warn(
|
|
58
|
+
'Unknown level "{}" for logging.\n'
|
|
59
|
+
'Please, use one of "CRITICAL", "ERROR", '
|
|
60
|
+
'"WARNING", "INFO", "DEBUG".'.format(logLevel)
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_daal_version() -> DaalVersionTuple:
|
|
65
|
+
return int(dv()[0:4]), str(dv()[10:11]), int(dv()[4:8])
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@functools.lru_cache(maxsize=256, typed=False)
|
|
69
|
+
def daal_check_version(
|
|
70
|
+
required_version: Tuple[Any, ...],
|
|
71
|
+
daal_version: Tuple[Any, ...] = get_daal_version(),
|
|
72
|
+
) -> bool:
|
|
73
|
+
"""Check daal version provided as (MAJOR, STATUS, MINOR+PATCH)
|
|
74
|
+
|
|
75
|
+
This function also accepts a list or tuple of daal versions. It will return true if
|
|
76
|
+
any version in the list/tuple is <= `daal_version`.
|
|
77
|
+
"""
|
|
78
|
+
if isinstance(required_version[0], (list, tuple)):
|
|
79
|
+
# a list of version candidates was provided, recursively check if any is <= daal_version
|
|
80
|
+
return any(
|
|
81
|
+
map(lambda ver: daal_check_version(ver, daal_version), required_version)
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
major_required, status_required, patch_required = required_version
|
|
85
|
+
major, status, patch = daal_version
|
|
86
|
+
|
|
87
|
+
if status != status_required:
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
if major_required < major:
|
|
91
|
+
return True
|
|
92
|
+
if major == major_required:
|
|
93
|
+
return patch_required <= patch
|
|
94
|
+
|
|
95
|
+
return False
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _package_check_version(version_to_check, available_version):
|
|
99
|
+
if hasattr(Version(version_to_check), "base_version"):
|
|
100
|
+
base_package_version = Version(available_version).base_version
|
|
101
|
+
res = bool(Version(base_package_version) >= Version(version_to_check))
|
|
102
|
+
else:
|
|
103
|
+
# packaging module not available
|
|
104
|
+
res = bool(Version(available_version) >= Version(version_to_check))
|
|
105
|
+
return res
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
@functools.lru_cache(maxsize=256, typed=False)
|
|
109
|
+
def sklearn_check_version(ver):
|
|
110
|
+
return _package_check_version(ver, sklearn_version)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def parse_dtype(dt):
|
|
114
|
+
if dt == np.double:
|
|
115
|
+
return "double"
|
|
116
|
+
if dt == np.single:
|
|
117
|
+
return "float"
|
|
118
|
+
raise ValueError(f"Input array has unexpected dtype = {dt}")
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def getFPType(X):
|
|
122
|
+
if pandas_is_imported:
|
|
123
|
+
if isinstance(X, DataFrame):
|
|
124
|
+
dt = find_common_type(X.dtypes.tolist())
|
|
125
|
+
return parse_dtype(dt)
|
|
126
|
+
|
|
127
|
+
dt = getattr(X, "dtype", None)
|
|
128
|
+
return parse_dtype(dt)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def make2d(X):
|
|
132
|
+
if np.isscalar(X):
|
|
133
|
+
X = np.asarray(X)[np.newaxis, np.newaxis]
|
|
134
|
+
elif isinstance(X, np.ndarray) and X.ndim == 1:
|
|
135
|
+
X = X.reshape((X.size, 1))
|
|
136
|
+
return X
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def get_patch_message(s):
|
|
140
|
+
if s == "daal":
|
|
141
|
+
message = "running accelerated version on CPU"
|
|
142
|
+
|
|
143
|
+
elif s == "sklearn":
|
|
144
|
+
message = "fallback to original Scikit-learn"
|
|
145
|
+
elif s == "sklearn_after_daal":
|
|
146
|
+
message = "failed to run accelerated version, fallback to original Scikit-learn"
|
|
147
|
+
else:
|
|
148
|
+
raise ValueError(
|
|
149
|
+
f"Invalid input - expected one of 'daal','sklearn',"
|
|
150
|
+
f" 'sklearn_after_daal', got {s}"
|
|
151
|
+
)
|
|
152
|
+
return message
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def is_DataFrame(X):
|
|
156
|
+
if pandas_is_imported:
|
|
157
|
+
return isinstance(X, DataFrame)
|
|
158
|
+
else:
|
|
159
|
+
return False
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def get_dtype(X):
|
|
163
|
+
if pandas_is_imported:
|
|
164
|
+
return find_common_type(list(X.dtypes)) if is_DataFrame(X) else X.dtype
|
|
165
|
+
else:
|
|
166
|
+
return getattr(X, "dtype", None)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def get_number_of_types(dataframe):
|
|
170
|
+
dtypes = getattr(dataframe, "dtypes", None)
|
|
171
|
+
try:
|
|
172
|
+
return len(set(dtypes))
|
|
173
|
+
except TypeError:
|
|
174
|
+
return 1
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def check_tree_nodes(tree_nodes):
|
|
178
|
+
def convert_to_old_tree_nodes(tree_nodes):
|
|
179
|
+
# conversion from sklearn>=1.3 tree nodes format to previous format:
|
|
180
|
+
# removal of 'missing_go_to_left' field from node dtype
|
|
181
|
+
new_field = "missing_go_to_left"
|
|
182
|
+
new_dtype = tree_nodes.dtype
|
|
183
|
+
old_dtype = np.dtype(
|
|
184
|
+
[
|
|
185
|
+
(key, value[0])
|
|
186
|
+
for key, value in new_dtype.fields.items()
|
|
187
|
+
if key != new_field
|
|
188
|
+
]
|
|
189
|
+
)
|
|
190
|
+
return require_fields(tree_nodes, old_dtype)
|
|
191
|
+
|
|
192
|
+
if sklearn_check_version("1.3"):
|
|
193
|
+
return tree_nodes
|
|
194
|
+
else:
|
|
195
|
+
return convert_to_old_tree_nodes(tree_nodes)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class PatchingConditionsChain:
|
|
199
|
+
def __init__(self, scope_name):
|
|
200
|
+
self.scope_name = scope_name
|
|
201
|
+
self.patching_is_enabled = True
|
|
202
|
+
self.messages = []
|
|
203
|
+
self.logger = logging.getLogger("sklearnex")
|
|
204
|
+
|
|
205
|
+
def _iter_conditions(self, conditions_and_messages):
|
|
206
|
+
result = []
|
|
207
|
+
for condition, message in conditions_and_messages:
|
|
208
|
+
result.append(condition)
|
|
209
|
+
if not condition:
|
|
210
|
+
self.messages.append(message)
|
|
211
|
+
return result
|
|
212
|
+
|
|
213
|
+
def and_conditions(self, conditions_and_messages, conditions_merging=all):
|
|
214
|
+
self.patching_is_enabled &= conditions_merging(
|
|
215
|
+
self._iter_conditions(conditions_and_messages)
|
|
216
|
+
)
|
|
217
|
+
return self.patching_is_enabled
|
|
218
|
+
|
|
219
|
+
def and_condition(self, condition, message):
|
|
220
|
+
return self.and_conditions([(condition, message)])
|
|
221
|
+
|
|
222
|
+
def or_conditions(self, conditions_and_messages, conditions_merging=all):
|
|
223
|
+
self.patching_is_enabled |= conditions_merging(
|
|
224
|
+
self._iter_conditions(conditions_and_messages)
|
|
225
|
+
)
|
|
226
|
+
return self.patching_is_enabled
|
|
227
|
+
|
|
228
|
+
def write_log(self):
|
|
229
|
+
if self.patching_is_enabled:
|
|
230
|
+
self.logger.info(f"{self.scope_name}: {get_patch_message('daal')}")
|
|
231
|
+
else:
|
|
232
|
+
self.logger.debug(
|
|
233
|
+
f"{self.scope_name}: debugging for the patch is enabled to track"
|
|
234
|
+
" the usage of oneAPI Data Analytics Library (oneDAL)"
|
|
235
|
+
)
|
|
236
|
+
for message in self.messages:
|
|
237
|
+
self.logger.debug(
|
|
238
|
+
f"{self.scope_name}: patching failed with cause - {message}"
|
|
239
|
+
)
|
|
240
|
+
self.logger.info(f"{self.scope_name}: {get_patch_message('sklearn')}")
|
|
241
|
+
|
|
242
|
+
def get_status(self, logs=False):
|
|
243
|
+
if logs:
|
|
244
|
+
self.write_log()
|
|
245
|
+
return self.patching_is_enabled
|
scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2014 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
from .dbscan import DBSCAN
|
|
18
|
+
from .k_means import KMeans
|
|
19
|
+
|
|
20
|
+
__all__ = ["KMeans", "DBSCAN"]
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2014 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import numbers
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
from scipy import sparse as sp
|
|
21
|
+
from sklearn.cluster import DBSCAN as DBSCAN_original
|
|
22
|
+
from sklearn.utils import check_array
|
|
23
|
+
from sklearn.utils.validation import _check_sample_weight
|
|
24
|
+
|
|
25
|
+
import daal4py
|
|
26
|
+
|
|
27
|
+
from .._n_jobs_support import control_n_jobs
|
|
28
|
+
from .._utils import PatchingConditionsChain, getFPType, make2d, sklearn_check_version
|
|
29
|
+
from ..utils.validation import check_feature_names
|
|
30
|
+
|
|
31
|
+
if sklearn_check_version("1.1") and not sklearn_check_version("1.2"):
|
|
32
|
+
from sklearn.utils import check_scalar
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _daal_dbscan(X, eps=0.5, min_samples=5, sample_weight=None):
|
|
36
|
+
ww = make2d(sample_weight) if sample_weight is not None else None
|
|
37
|
+
XX = make2d(X)
|
|
38
|
+
|
|
39
|
+
fpt = getFPType(XX) # codespell:ignore fpt
|
|
40
|
+
alg = daal4py.dbscan(
|
|
41
|
+
method="defaultDense",
|
|
42
|
+
fptype=fpt, # codespell:ignore fpt
|
|
43
|
+
epsilon=float(eps),
|
|
44
|
+
minObservations=int(min_samples),
|
|
45
|
+
memorySavingMode=False,
|
|
46
|
+
resultsToCompute="computeCoreIndices",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
daal_res = alg.compute(XX, ww)
|
|
50
|
+
assignments = daal_res.assignments.ravel()
|
|
51
|
+
if daal_res.coreIndices is not None:
|
|
52
|
+
core_ind = daal_res.coreIndices.ravel()
|
|
53
|
+
else:
|
|
54
|
+
core_ind = np.array([], dtype=np.intc)
|
|
55
|
+
|
|
56
|
+
return (core_ind, assignments)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@control_n_jobs(decorated_methods=["fit"])
|
|
60
|
+
class DBSCAN(DBSCAN_original):
|
|
61
|
+
__doc__ = DBSCAN_original.__doc__
|
|
62
|
+
|
|
63
|
+
if sklearn_check_version("1.2"):
|
|
64
|
+
_parameter_constraints: dict = {**DBSCAN_original._parameter_constraints}
|
|
65
|
+
|
|
66
|
+
def __init__(
|
|
67
|
+
self,
|
|
68
|
+
eps=0.5,
|
|
69
|
+
min_samples=5,
|
|
70
|
+
metric="euclidean",
|
|
71
|
+
metric_params=None,
|
|
72
|
+
algorithm="auto",
|
|
73
|
+
leaf_size=30,
|
|
74
|
+
p=None,
|
|
75
|
+
n_jobs=None,
|
|
76
|
+
):
|
|
77
|
+
self.eps = eps
|
|
78
|
+
self.min_samples = min_samples
|
|
79
|
+
self.metric = metric
|
|
80
|
+
self.metric_params = metric_params
|
|
81
|
+
self.algorithm = algorithm
|
|
82
|
+
self.leaf_size = leaf_size
|
|
83
|
+
self.p = p
|
|
84
|
+
self.n_jobs = n_jobs
|
|
85
|
+
|
|
86
|
+
def fit(self, X, y=None, sample_weight=None):
|
|
87
|
+
if sklearn_check_version("1.2"):
|
|
88
|
+
self._validate_params()
|
|
89
|
+
elif sklearn_check_version("1.1"):
|
|
90
|
+
check_scalar(
|
|
91
|
+
self.eps,
|
|
92
|
+
"eps",
|
|
93
|
+
target_type=numbers.Real,
|
|
94
|
+
min_val=0.0,
|
|
95
|
+
include_boundaries="neither",
|
|
96
|
+
)
|
|
97
|
+
check_scalar(
|
|
98
|
+
self.min_samples,
|
|
99
|
+
"min_samples",
|
|
100
|
+
target_type=numbers.Integral,
|
|
101
|
+
min_val=1,
|
|
102
|
+
include_boundaries="left",
|
|
103
|
+
)
|
|
104
|
+
check_scalar(
|
|
105
|
+
self.leaf_size,
|
|
106
|
+
"leaf_size",
|
|
107
|
+
target_type=numbers.Integral,
|
|
108
|
+
min_val=1,
|
|
109
|
+
include_boundaries="left",
|
|
110
|
+
)
|
|
111
|
+
if self.p is not None:
|
|
112
|
+
check_scalar(
|
|
113
|
+
self.p,
|
|
114
|
+
"p",
|
|
115
|
+
target_type=numbers.Real,
|
|
116
|
+
min_val=0.0,
|
|
117
|
+
include_boundaries="left",
|
|
118
|
+
)
|
|
119
|
+
if self.n_jobs is not None:
|
|
120
|
+
check_scalar(self.n_jobs, "n_jobs", target_type=numbers.Integral)
|
|
121
|
+
else:
|
|
122
|
+
if self.eps <= 0.0:
|
|
123
|
+
raise ValueError(f"eps == {self.eps}, must be > 0.0.")
|
|
124
|
+
|
|
125
|
+
check_feature_names(self, X, reset=True)
|
|
126
|
+
|
|
127
|
+
if sample_weight is not None:
|
|
128
|
+
sample_weight = _check_sample_weight(sample_weight, X)
|
|
129
|
+
|
|
130
|
+
_patching_status = PatchingConditionsChain("sklearn.cluster.DBSCAN.fit")
|
|
131
|
+
_dal_ready = _patching_status.and_conditions(
|
|
132
|
+
[
|
|
133
|
+
(
|
|
134
|
+
self.algorithm in ["auto", "brute"],
|
|
135
|
+
f"'{self.algorithm}' algorithm is not supported. "
|
|
136
|
+
"Only 'auto' and 'brute' algorithms are supported",
|
|
137
|
+
),
|
|
138
|
+
(
|
|
139
|
+
self.metric == "euclidean"
|
|
140
|
+
or (self.metric == "minkowski" and self.p == 2),
|
|
141
|
+
f"'{self.metric}' (p={self.p}) metric is not supported. "
|
|
142
|
+
"Only 'euclidean' or 'minkowski' with p=2 metrics are supported.",
|
|
143
|
+
),
|
|
144
|
+
(not sp.issparse(X), "X is sparse. Sparse input is not supported."),
|
|
145
|
+
]
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
_patching_status.write_log()
|
|
149
|
+
if _dal_ready:
|
|
150
|
+
X = check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
|
|
151
|
+
core_ind, assignments = _daal_dbscan(
|
|
152
|
+
X, self.eps, self.min_samples, sample_weight=sample_weight
|
|
153
|
+
)
|
|
154
|
+
self.core_sample_indices_ = core_ind
|
|
155
|
+
self.labels_ = assignments
|
|
156
|
+
self.components_ = np.take(X, core_ind, axis=0)
|
|
157
|
+
self.n_features_in_ = X.shape[1]
|
|
158
|
+
return self
|
|
159
|
+
return super().fit(X, y, sample_weight=sample_weight)
|
|
160
|
+
|
|
161
|
+
def fit_predict(self, X, y=None, sample_weight=None):
|
|
162
|
+
return super().fit_predict(X, y, sample_weight)
|
|
163
|
+
|
|
164
|
+
fit.__doc__ = DBSCAN_original.fit.__doc__
|
|
165
|
+
fit_predict.__doc__ = DBSCAN_original.fit_predict.__doc__
|