scikit-learn-intelex 2025.6.1__py39-none-win_amd64.whl → 2025.8.0__py39-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-learn-intelex might be problematic. Click here for more details.
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/daal4py/_daal4py.cp39-win_amd64.pyd +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/mb/__init__.py +2 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/mb/gbt_convertors.py +258 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/mb/tree_based_builders.py +30 -5
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/mpi_transceiver.cp39-win_amd64.pyd +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +2 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +4 -4
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +616 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +15 -16
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/__init__.py +26 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/_config.py +5 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/_device_offload.py +84 -94
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +151 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +42 -57
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +6 -7
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +11 -11
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/dbscan.py +7 -25
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/kmeans.py +18 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/common/_backend.py +62 -37
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/common/hyperparameters.py +32 -9
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/common/tests/test_sycl.py +6 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/covariance/covariance.py +10 -12
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +8 -16
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/datatypes/__init__.py +12 -2
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +156 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/datatypes/_dlpack.py +61 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/datatypes/_sycl_usm.py +63 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/datatypes/tests/common.py +8 -3
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +61 -19
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +8 -17
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/decomposition/pca.py +6 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/ensemble/forest.py +15 -9
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +201 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +230 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +14 -15
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +10 -17
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/primitives/kernel_functions.py +64 -17
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/svm.py +0 -12
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/tests/test_common.py +15 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +23 -6
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/utils/_array_api.py +25 -25
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/utils/_sycl_queue_manager.py +106 -54
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/onedal/utils/_third_party.py +220 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/utils/validation.py +11 -3
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/__init__.py +2 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/_config.py +17 -8
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +45 -34
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/_utils.py +52 -3
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/base.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +31 -45
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +50 -55
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +30 -27
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +1 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +14 -5
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +21 -9
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +54 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +13 -7
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +17 -5
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +22 -7
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +2 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +90 -73
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +83 -60
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +53 -41
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +11 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +47 -27
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +27 -61
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +577 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +8 -6
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +3 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +54 -8
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +7 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +6 -3
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +12 -8
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +26 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +0 -8
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +11 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +0 -7
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +299 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +21 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +0 -7
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +7 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +16 -8
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +12 -4
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/_common.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +31 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_common.py +41 -2
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +77 -6
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +111 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -8
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +1 -1
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +13 -13
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/utils/base.py +4 -22
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/utils/_array_api.py +71 -0
- scikit_learn_intelex-2025.8.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +97 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +29 -11
- {scikit_learn_intelex-2025.6.1.dist-info → scikit_learn_intelex-2025.8.0.dist-info}/METADATA +2 -2
- scikit_learn_intelex-2025.8.0.dist-info/RECORD +259 -0
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/daal4py/_daal4py.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +0 -1025
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/_onedal_py_host.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +0 -111
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +0 -117
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +0 -311
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +0 -351
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/onedal/utils/_dpep_helpers.py +0 -71
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -134
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -50
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -71
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +0 -43
- scikit_learn_intelex-2025.6.1.data/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -59
- scikit_learn_intelex-2025.6.1.dist-info/RECORD +0 -257
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/__main__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/mb/logistic_regression_builders.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/_utils.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/utils/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/utils/base.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/basic_statistics/tests/utils.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/kmeans_init.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/common/_estimator_checks.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/common/_mixin.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/primitives/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/primitives/get_tree.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/tests/test_svc.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/svm/tests/test_svr.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/onedal/utils/tests/test_validation.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/conftest.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_ridge.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
- {scikit_learn_intelex-2025.6.1.data → scikit_learn_intelex-2025.8.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_validation.py +0 -0
- {scikit_learn_intelex-2025.6.1.dist-info → scikit_learn_intelex-2025.8.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2025.6.1.dist-info → scikit_learn_intelex-2025.8.0.dist-info}/WHEEL +0 -0
- {scikit_learn_intelex-2025.6.1.dist-info → scikit_learn_intelex-2025.8.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,577 @@
|
|
|
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
|
+
import pytest
|
|
21
|
+
from numpy.testing import assert_allclose
|
|
22
|
+
from scipy.sparse import csr_matrix
|
|
23
|
+
from sklearn.datasets import load_breast_cancer, load_iris, make_classification
|
|
24
|
+
from sklearn.exceptions import ConvergenceWarning
|
|
25
|
+
from sklearn.linear_model import LogisticRegression as _sklearn_LogisticRegression
|
|
26
|
+
from sklearn.metrics import accuracy_score, log_loss
|
|
27
|
+
from sklearn.model_selection import train_test_split
|
|
28
|
+
|
|
29
|
+
from daal4py.sklearn._utils import daal_check_version
|
|
30
|
+
from onedal.tests.utils._dataframes_support import (
|
|
31
|
+
_as_numpy,
|
|
32
|
+
_convert_to_dataframe,
|
|
33
|
+
get_dataframes_and_queues,
|
|
34
|
+
get_queues,
|
|
35
|
+
)
|
|
36
|
+
from sklearnex import config_context
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def prepare_input(X, y, dataframe, queue):
|
|
40
|
+
X_train, X_test, y_train, y_test = train_test_split(
|
|
41
|
+
X, y, train_size=0.8, random_state=42
|
|
42
|
+
)
|
|
43
|
+
X_train = _convert_to_dataframe(X_train, sycl_queue=queue, target_df=dataframe)
|
|
44
|
+
y_train = _convert_to_dataframe(y_train, sycl_queue=queue, target_df=dataframe)
|
|
45
|
+
X_test = _convert_to_dataframe(X_test, sycl_queue=queue, target_df=dataframe)
|
|
46
|
+
return X_train, X_test, y_train, y_test
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@pytest.mark.parametrize(
|
|
50
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
|
|
51
|
+
)
|
|
52
|
+
def test_sklearnex_multiclass_classification(dataframe, queue):
|
|
53
|
+
from sklearnex.linear_model import LogisticRegression
|
|
54
|
+
|
|
55
|
+
X, y = load_iris(return_X_y=True)
|
|
56
|
+
X_train, X_test, y_train, y_test = prepare_input(X, y, dataframe, queue=queue)
|
|
57
|
+
|
|
58
|
+
logreg = LogisticRegression(fit_intercept=True, solver="lbfgs", max_iter=200).fit(
|
|
59
|
+
X_train, y_train
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
if daal_check_version((2024, "P", 1)):
|
|
63
|
+
assert "sklearnex" in logreg.__module__
|
|
64
|
+
else:
|
|
65
|
+
assert "daal4py" in logreg.__module__
|
|
66
|
+
|
|
67
|
+
y_pred = _as_numpy(logreg.predict(X_test))
|
|
68
|
+
assert accuracy_score(y_test, y_pred) > 0.99
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@pytest.mark.parametrize(
|
|
72
|
+
"dataframe,queue",
|
|
73
|
+
get_dataframes_and_queues(),
|
|
74
|
+
)
|
|
75
|
+
def test_sklearnex_binary_classification(dataframe, queue):
|
|
76
|
+
from sklearnex.linear_model import LogisticRegression
|
|
77
|
+
|
|
78
|
+
X, y = load_breast_cancer(return_X_y=True)
|
|
79
|
+
X_train, X_test, y_train, y_test = prepare_input(X, y, dataframe, queue=queue)
|
|
80
|
+
|
|
81
|
+
with warnings.catch_warnings():
|
|
82
|
+
warnings.simplefilter("ignore", category=ConvergenceWarning)
|
|
83
|
+
logreg = LogisticRegression(
|
|
84
|
+
fit_intercept=True, solver="newton-cg", max_iter=100
|
|
85
|
+
).fit(X_train, y_train)
|
|
86
|
+
|
|
87
|
+
if daal_check_version((2024, "P", 1)):
|
|
88
|
+
assert "sklearnex" in logreg.__module__
|
|
89
|
+
else:
|
|
90
|
+
assert "daal4py" in logreg.__module__
|
|
91
|
+
if (
|
|
92
|
+
dataframe != "numpy"
|
|
93
|
+
and queue is not None
|
|
94
|
+
and queue.sycl_device.is_gpu
|
|
95
|
+
and daal_check_version((2024, "P", 1))
|
|
96
|
+
):
|
|
97
|
+
# fit was done on gpu
|
|
98
|
+
assert hasattr(logreg, "_onedal_estimator")
|
|
99
|
+
|
|
100
|
+
y_pred = _as_numpy(logreg.predict(X_test))
|
|
101
|
+
assert accuracy_score(y_test, y_pred) > 0.95
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
if daal_check_version((2024, "P", 700)):
|
|
105
|
+
|
|
106
|
+
@pytest.mark.parametrize("queue", get_queues("gpu"))
|
|
107
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
108
|
+
@pytest.mark.parametrize(
|
|
109
|
+
"dims", [(3007, 17, 0.05), (50000, 100, 0.01), (512, 10, 0.5)]
|
|
110
|
+
)
|
|
111
|
+
def test_csr(queue, dtype, dims):
|
|
112
|
+
from sklearnex.linear_model import LogisticRegression
|
|
113
|
+
|
|
114
|
+
n, p, density = dims
|
|
115
|
+
|
|
116
|
+
# Create sparse dataset for classification
|
|
117
|
+
X, y = make_classification(n, p, random_state=42)
|
|
118
|
+
X = X.astype(dtype)
|
|
119
|
+
y = y.astype(dtype)
|
|
120
|
+
np.random.seed(2007 + n + p)
|
|
121
|
+
mask = np.random.binomial(1, density, (n, p))
|
|
122
|
+
X = X * mask
|
|
123
|
+
X_sp = csr_matrix(X)
|
|
124
|
+
|
|
125
|
+
model = LogisticRegression(fit_intercept=True, solver="newton-cg")
|
|
126
|
+
model_sp = LogisticRegression(fit_intercept=True, solver="newton-cg")
|
|
127
|
+
|
|
128
|
+
with config_context(target_offload="gpu:0"):
|
|
129
|
+
model.fit(X, y)
|
|
130
|
+
pred = model.predict(X)
|
|
131
|
+
prob = model.predict_proba(X)
|
|
132
|
+
model_sp.fit(X_sp, y)
|
|
133
|
+
pred_sp = model_sp.predict(X_sp)
|
|
134
|
+
prob_sp = model_sp.predict_proba(X_sp)
|
|
135
|
+
|
|
136
|
+
rtol = 2e-4
|
|
137
|
+
assert_allclose(pred, pred_sp, rtol=rtol)
|
|
138
|
+
assert_allclose(prob, prob_sp, rtol=rtol)
|
|
139
|
+
assert_allclose(model.coef_, model_sp.coef_, rtol=rtol)
|
|
140
|
+
assert_allclose(model.intercept_, model_sp.intercept_, rtol=rtol)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# Note: this is adapted from a test in scikit-learn:
|
|
144
|
+
# https://github.com/scikit-learn/scikit-learn/blob/9b7a86fb6d45905eec7b7afd01d3ae32643c8180/sklearn/linear_model/tests/test_logistic.py#L1494
|
|
145
|
+
# Here we don't always expect them to match exactly due to differences in numerical precision
|
|
146
|
+
# and how each library deals with large/small numbers, but oftentimes the results from oneDAL
|
|
147
|
+
# end up being better in terms of resulting function values (for the objective function being
|
|
148
|
+
# minimized), hence this test will try to look at function values if coefficients aren't
|
|
149
|
+
# sufficiently similar.
|
|
150
|
+
def test_logistic_regression_is_correct():
|
|
151
|
+
from sklearnex.linear_model import LogisticRegression
|
|
152
|
+
|
|
153
|
+
X = np.array([[-1, 0], [0, 1], [1, 1]])
|
|
154
|
+
y = np.array([0, 1, 1])
|
|
155
|
+
C = 3.0
|
|
156
|
+
model_sklearn = _sklearn_LogisticRegression(C=C).fit(X, y)
|
|
157
|
+
model_sklearnex = LogisticRegression(C=C).fit(X, y)
|
|
158
|
+
|
|
159
|
+
try:
|
|
160
|
+
np.testing.assert_allclose(model_sklearnex.coef_, model_sklearn.coef_)
|
|
161
|
+
np.testing.assert_allclose(model_sklearnex.intercept_, model_sklearn.intercept_)
|
|
162
|
+
except AssertionError:
|
|
163
|
+
|
|
164
|
+
def logistic_model_function(predicted_probabilities, coefs):
|
|
165
|
+
neg_log_likelihood = X.shape[0] * log_loss(y, predicted_probabilities)
|
|
166
|
+
sum_squares_coefs = np.dot(coefs.reshape(-1), coefs.reshape(-1))
|
|
167
|
+
return C * neg_log_likelihood + 0.5 * sum_squares_coefs
|
|
168
|
+
|
|
169
|
+
fn_sklearn = logistic_model_function(
|
|
170
|
+
model_sklearn.predict_proba(X)[:, 1], model_sklearn.coef_
|
|
171
|
+
)
|
|
172
|
+
fn_sklearnex = logistic_model_function(
|
|
173
|
+
model_sklearnex.predict_proba(X)[:, 1], model_sklearnex.coef_
|
|
174
|
+
)
|
|
175
|
+
assert fn_sklearnex <= fn_sklearn
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def test_multinomial_logistic_regression_is_correct():
|
|
179
|
+
from sklearnex.linear_model import LogisticRegression
|
|
180
|
+
|
|
181
|
+
X = np.array([[-1, 0], [0, 1], [1, 1]])
|
|
182
|
+
y = np.array([2, 1, 0])
|
|
183
|
+
C = 3.0
|
|
184
|
+
with warnings.catch_warnings():
|
|
185
|
+
warnings.simplefilter("ignore", category=FutureWarning)
|
|
186
|
+
model_sklearn = _sklearn_LogisticRegression(C=C, multi_class="multinomial").fit(
|
|
187
|
+
X, y
|
|
188
|
+
)
|
|
189
|
+
model_sklearnex = LogisticRegression(C=C, multi_class="multinomial").fit(X, y)
|
|
190
|
+
|
|
191
|
+
try:
|
|
192
|
+
np.testing.assert_allclose(model_sklearnex.coef_, model_sklearn.coef_)
|
|
193
|
+
np.testing.assert_allclose(model_sklearnex.intercept_, model_sklearn.intercept_)
|
|
194
|
+
except AssertionError:
|
|
195
|
+
|
|
196
|
+
def logistic_model_function(predicted_probabilities, coefs):
|
|
197
|
+
neg_log_likelihood = X.shape[0] * log_loss(y, predicted_probabilities)
|
|
198
|
+
sum_squares_coefs = np.dot(coefs.reshape(-1), coefs.reshape(-1))
|
|
199
|
+
return C * neg_log_likelihood + 0.5 * sum_squares_coefs
|
|
200
|
+
|
|
201
|
+
fn_sklearn = logistic_model_function(
|
|
202
|
+
model_sklearn.predict_proba(X), model_sklearn.coef_
|
|
203
|
+
)
|
|
204
|
+
fn_sklearnex = logistic_model_function(
|
|
205
|
+
model_sklearnex.predict_proba(X), model_sklearnex.coef_
|
|
206
|
+
)
|
|
207
|
+
assert fn_sklearnex <= fn_sklearn
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# Here, scikit-learn does a theoretically incorrect calculation in which
|
|
211
|
+
# they set the predictions for the 'negative' class as the negative of the
|
|
212
|
+
# predictions for the positive class instead of all-zeros. The idea is to
|
|
213
|
+
# match theirs, which is done by falling back. This test ensures that the
|
|
214
|
+
# predictions match with sklearn in case it isn't done during conformance tests.
|
|
215
|
+
@pytest.mark.parametrize("fit_intercept", [False, True])
|
|
216
|
+
@pytest.mark.parametrize("C", [1, 0.1])
|
|
217
|
+
@pytest.mark.allow_sklearn_fallback
|
|
218
|
+
def test_binary_multinomial_probabilities(fit_intercept, C):
|
|
219
|
+
from sklearnex.linear_model import LogisticRegression
|
|
220
|
+
|
|
221
|
+
# Adapted from this test:
|
|
222
|
+
# https://github.com/scikit-learn/scikit-learn/blob/baf828ca126bcb2c0ad813226963621cafe38adb/sklearn/utils/estimator_checks.py#L963
|
|
223
|
+
X = np.array(
|
|
224
|
+
[
|
|
225
|
+
[1, 3],
|
|
226
|
+
[1, 3],
|
|
227
|
+
[1, 3],
|
|
228
|
+
[1, 3],
|
|
229
|
+
[2, 1],
|
|
230
|
+
[2, 1],
|
|
231
|
+
[2, 1],
|
|
232
|
+
[2, 1],
|
|
233
|
+
[3, 3],
|
|
234
|
+
[3, 3],
|
|
235
|
+
[3, 3],
|
|
236
|
+
[3, 3],
|
|
237
|
+
[4, 1],
|
|
238
|
+
[4, 1],
|
|
239
|
+
[4, 1],
|
|
240
|
+
[4, 1],
|
|
241
|
+
],
|
|
242
|
+
dtype=np.float64,
|
|
243
|
+
)
|
|
244
|
+
y_binary = np.array([1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int)
|
|
245
|
+
|
|
246
|
+
with warnings.catch_warnings():
|
|
247
|
+
warnings.simplefilter("ignore")
|
|
248
|
+
model_sklearnex = LogisticRegression(
|
|
249
|
+
C=C, fit_intercept=fit_intercept, multi_class="multinomial"
|
|
250
|
+
).fit(X, y_binary)
|
|
251
|
+
model_sklearn = _sklearn_LogisticRegression(
|
|
252
|
+
C=C, fit_intercept=fit_intercept, multi_class="multinomial"
|
|
253
|
+
).fit(X, y_binary)
|
|
254
|
+
np.testing.assert_allclose(
|
|
255
|
+
model_sklearnex.predict_proba(X),
|
|
256
|
+
model_sklearn.predict_proba(X),
|
|
257
|
+
rtol=1e-2,
|
|
258
|
+
atol=1e-3,
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# Note: some solvers have an internal state, such as previous gradients,
|
|
263
|
+
# which is not preserved across warm starts and which influences the
|
|
264
|
+
# optimization routines. For these, a warm-started call with the coefficients
|
|
265
|
+
# from a previous iterations will not be equal to a cold-start call with
|
|
266
|
+
# one more iteration.
|
|
267
|
+
# Note2: usually, passing weights will cause the procedure to fall back to
|
|
268
|
+
# stock scikit-learn. We want to check that fallbacks also handle warm starts
|
|
269
|
+
# correctly when falling back.
|
|
270
|
+
@pytest.mark.parametrize("fit_intercept", [False, True])
|
|
271
|
+
@pytest.mark.parametrize("n_classes", [2, 3])
|
|
272
|
+
@pytest.mark.parametrize("multi_class", ["auto", "multinomial"])
|
|
273
|
+
@pytest.mark.parametrize("weighted", [False, True])
|
|
274
|
+
@pytest.mark.allow_sklearn_fallback
|
|
275
|
+
def test_warm_start_stateful(fit_intercept, n_classes, multi_class, weighted):
|
|
276
|
+
from sklearnex.linear_model import LogisticRegression
|
|
277
|
+
|
|
278
|
+
X, y = make_classification(
|
|
279
|
+
random_state=123,
|
|
280
|
+
n_classes=n_classes,
|
|
281
|
+
n_clusters_per_class=1,
|
|
282
|
+
n_features=2,
|
|
283
|
+
n_redundant=0,
|
|
284
|
+
# Note: oneDAL and scikit-learn deal with large numbers differently
|
|
285
|
+
# in the calculations, so when comparing against sklearn, we want
|
|
286
|
+
# to avoid ending up with large numbers in the computations.
|
|
287
|
+
class_sep=0.25,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
# Note1: these will throw warnings due to reaching the maximum
|
|
291
|
+
# number of iterations without converging, which is expected
|
|
292
|
+
# given that those are being severely limited for the tests.
|
|
293
|
+
# Note2: this will first compare the results after one iteration, and
|
|
294
|
+
# if those already differ too much (which can be the case given numerical
|
|
295
|
+
# differences), will then skip the rest of test that checks the warm starts.
|
|
296
|
+
with warnings.catch_warnings():
|
|
297
|
+
warnings.simplefilter("ignore")
|
|
298
|
+
model1 = _sklearn_LogisticRegression(
|
|
299
|
+
solver="lbfgs",
|
|
300
|
+
fit_intercept=fit_intercept,
|
|
301
|
+
multi_class=multi_class,
|
|
302
|
+
max_iter=1,
|
|
303
|
+
warm_start=True,
|
|
304
|
+
).fit(
|
|
305
|
+
X,
|
|
306
|
+
y,
|
|
307
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
308
|
+
)
|
|
309
|
+
model2 = LogisticRegression(
|
|
310
|
+
solver="lbfgs",
|
|
311
|
+
fit_intercept=fit_intercept,
|
|
312
|
+
multi_class=multi_class,
|
|
313
|
+
max_iter=1,
|
|
314
|
+
warm_start=True,
|
|
315
|
+
).fit(
|
|
316
|
+
X,
|
|
317
|
+
y,
|
|
318
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
try:
|
|
322
|
+
np.testing.assert_allclose(model1.coef_, model2.coef_)
|
|
323
|
+
except AssertionError:
|
|
324
|
+
pytest.skip("Too large numerical differences for further comparisons")
|
|
325
|
+
|
|
326
|
+
with warnings.catch_warnings():
|
|
327
|
+
warnings.simplefilter("ignore")
|
|
328
|
+
model1.fit(
|
|
329
|
+
X,
|
|
330
|
+
y,
|
|
331
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
332
|
+
)
|
|
333
|
+
model2.fit(
|
|
334
|
+
X,
|
|
335
|
+
y,
|
|
336
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
np.testing.assert_allclose(model1.coef_, model2.coef_)
|
|
340
|
+
if fit_intercept:
|
|
341
|
+
if n_classes == 2:
|
|
342
|
+
np.testing.assert_allclose(model1.intercept_, model2.intercept_)
|
|
343
|
+
else:
|
|
344
|
+
# Note: softmax function is invariable to shifting by a constant
|
|
345
|
+
intercepts1 = model1.intercept_ - model1.intercept_.mean()
|
|
346
|
+
intercepts2 = model2.intercept_ - model2.intercept_.mean()
|
|
347
|
+
np.testing.assert_allclose(intercepts1, intercepts2)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
# Note: other solvers do not have any internal state and are supposed to yield the
|
|
351
|
+
# same result after one iteration given the current coefficients.
|
|
352
|
+
@pytest.mark.parametrize("fit_intercept", [False, True])
|
|
353
|
+
@pytest.mark.parametrize("multi_class", ["ovr", "multinomial"])
|
|
354
|
+
@pytest.mark.parametrize("weighted", [False, True])
|
|
355
|
+
@pytest.mark.allow_sklearn_fallback
|
|
356
|
+
def test_warm_start_binary(fit_intercept, multi_class, weighted):
|
|
357
|
+
from sklearnex.linear_model import LogisticRegression
|
|
358
|
+
|
|
359
|
+
X, y = make_classification(
|
|
360
|
+
random_state=123,
|
|
361
|
+
n_classes=2,
|
|
362
|
+
n_clusters_per_class=1,
|
|
363
|
+
n_features=2,
|
|
364
|
+
n_redundant=0,
|
|
365
|
+
class_sep=0.5,
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
with warnings.catch_warnings():
|
|
369
|
+
warnings.simplefilter("ignore")
|
|
370
|
+
model1 = LogisticRegression(
|
|
371
|
+
random_state=123,
|
|
372
|
+
solver="newton-cg",
|
|
373
|
+
fit_intercept=fit_intercept,
|
|
374
|
+
multi_class=multi_class,
|
|
375
|
+
max_iter=2,
|
|
376
|
+
).fit(
|
|
377
|
+
X,
|
|
378
|
+
y,
|
|
379
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
380
|
+
)
|
|
381
|
+
model2 = (
|
|
382
|
+
LogisticRegression(
|
|
383
|
+
random_state=123,
|
|
384
|
+
solver="newton-cg",
|
|
385
|
+
fit_intercept=fit_intercept,
|
|
386
|
+
multi_class=multi_class,
|
|
387
|
+
max_iter=1,
|
|
388
|
+
warm_start=True,
|
|
389
|
+
)
|
|
390
|
+
.fit(
|
|
391
|
+
X,
|
|
392
|
+
y,
|
|
393
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
394
|
+
)
|
|
395
|
+
.fit(
|
|
396
|
+
X,
|
|
397
|
+
y,
|
|
398
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
399
|
+
)
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
np.testing.assert_allclose(model1.coef_, model2.coef_)
|
|
403
|
+
if fit_intercept:
|
|
404
|
+
np.testing.assert_allclose(model1.intercept_, model2.intercept_)
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
@pytest.mark.parametrize("fit_intercept", [False, True])
|
|
408
|
+
@pytest.mark.parametrize("multi_class", ["ovr", "multinomial"])
|
|
409
|
+
@pytest.mark.parametrize("weighted", [False, True])
|
|
410
|
+
@pytest.mark.allow_sklearn_fallback
|
|
411
|
+
def test_warm_start_multinomial(fit_intercept, multi_class, weighted):
|
|
412
|
+
from sklearnex.linear_model import LogisticRegression
|
|
413
|
+
|
|
414
|
+
X, y = make_classification(
|
|
415
|
+
random_state=123,
|
|
416
|
+
n_classes=3,
|
|
417
|
+
n_clusters_per_class=1,
|
|
418
|
+
n_features=2,
|
|
419
|
+
n_redundant=0,
|
|
420
|
+
class_sep=0.5,
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
with warnings.catch_warnings():
|
|
424
|
+
warnings.simplefilter("ignore")
|
|
425
|
+
model1 = LogisticRegression(
|
|
426
|
+
random_state=123,
|
|
427
|
+
solver="newton-cg",
|
|
428
|
+
fit_intercept=fit_intercept,
|
|
429
|
+
multi_class=multi_class,
|
|
430
|
+
max_iter=2,
|
|
431
|
+
).fit(
|
|
432
|
+
X,
|
|
433
|
+
y,
|
|
434
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
435
|
+
)
|
|
436
|
+
model2 = (
|
|
437
|
+
LogisticRegression(
|
|
438
|
+
random_state=123,
|
|
439
|
+
solver="newton-cg",
|
|
440
|
+
fit_intercept=fit_intercept,
|
|
441
|
+
multi_class=multi_class,
|
|
442
|
+
max_iter=1,
|
|
443
|
+
warm_start=True,
|
|
444
|
+
)
|
|
445
|
+
.fit(
|
|
446
|
+
X,
|
|
447
|
+
y,
|
|
448
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
449
|
+
)
|
|
450
|
+
.fit(
|
|
451
|
+
X,
|
|
452
|
+
y,
|
|
453
|
+
np.ones(X.shape[0]) if weighted else None,
|
|
454
|
+
)
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
np.testing.assert_allclose(model1.coef_, model2.coef_)
|
|
458
|
+
if fit_intercept:
|
|
459
|
+
# Note: softmax function is invariable to shifting by a constant
|
|
460
|
+
intercepts1 = model1.intercept_ - model1.intercept_.mean()
|
|
461
|
+
intercepts2 = model2.intercept_ - model2.intercept_.mean()
|
|
462
|
+
np.testing.assert_allclose(intercepts1, intercepts2)
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
# This is a bit different from the others - it just aims to test that it
|
|
466
|
+
# is processing the regularization correctly under all circumstances, and
|
|
467
|
+
# that it is not multiplying or dividing the coefficients by two when it
|
|
468
|
+
# shouldn't do it.
|
|
469
|
+
# It has some overlap with the tests at the beginning, but it is only tested
|
|
470
|
+
# with oneDAL>=2025.8. After that version has been released and CIs updated
|
|
471
|
+
# to use it, the earlier tests 'test_logistic_regression_is_correct' and
|
|
472
|
+
# 'test_multinomial_logistic_regression_is_correct' can be removed.
|
|
473
|
+
@pytest.mark.skipif(
|
|
474
|
+
not daal_check_version((2025, "P", 800)), reason="Bugs fixed in later oneDAL releases"
|
|
475
|
+
)
|
|
476
|
+
@pytest.mark.parametrize("multi_class", ["auto", "multinomial"])
|
|
477
|
+
@pytest.mark.parametrize("C", [1, 0.2, 20.0])
|
|
478
|
+
@pytest.mark.parametrize("solver", ["lbfgs", "newton-cg"])
|
|
479
|
+
@pytest.mark.parametrize("n_classes", [2, 3])
|
|
480
|
+
@pytest.mark.allow_sklearn_fallback
|
|
481
|
+
def test_custom_solvers_are_correct(multi_class, C, solver, n_classes):
|
|
482
|
+
from sklearnex.linear_model import LogisticRegression
|
|
483
|
+
|
|
484
|
+
X, y = make_classification(
|
|
485
|
+
random_state=123,
|
|
486
|
+
n_classes=n_classes,
|
|
487
|
+
n_clusters_per_class=1,
|
|
488
|
+
n_features=2,
|
|
489
|
+
n_redundant=0,
|
|
490
|
+
n_samples=50,
|
|
491
|
+
class_sep=0.25,
|
|
492
|
+
)
|
|
493
|
+
|
|
494
|
+
with warnings.catch_warnings():
|
|
495
|
+
warnings.simplefilter("ignore")
|
|
496
|
+
model_sklearn = _sklearn_LogisticRegression(
|
|
497
|
+
C=C,
|
|
498
|
+
multi_class=multi_class,
|
|
499
|
+
).fit(X, y)
|
|
500
|
+
model_sklearnex = LogisticRegression(
|
|
501
|
+
C=C, solver=solver, multi_class=multi_class, max_iter=1_000, tol=1e-8
|
|
502
|
+
).fit(X, y)
|
|
503
|
+
model_sklearnex_refitted = (
|
|
504
|
+
LogisticRegression(
|
|
505
|
+
C=C,
|
|
506
|
+
solver=solver,
|
|
507
|
+
multi_class=multi_class,
|
|
508
|
+
max_iter=1_000,
|
|
509
|
+
tol=1e-8,
|
|
510
|
+
warm_start=True,
|
|
511
|
+
)
|
|
512
|
+
.fit(X, y)
|
|
513
|
+
.fit(X, y)
|
|
514
|
+
)
|
|
515
|
+
|
|
516
|
+
np.testing.assert_allclose(
|
|
517
|
+
model_sklearnex.coef_, model_sklearn.coef_, rtol=1e-3, atol=5e-3
|
|
518
|
+
)
|
|
519
|
+
if n_classes == 2:
|
|
520
|
+
np.testing.assert_allclose(
|
|
521
|
+
model_sklearnex.intercept_, model_sklearn.intercept_, atol=1e-3
|
|
522
|
+
)
|
|
523
|
+
else:
|
|
524
|
+
np.testing.assert_allclose(
|
|
525
|
+
model_sklearnex.intercept_ - model_sklearnex.intercept_.mean(),
|
|
526
|
+
model_sklearn.intercept_ - model_sklearn.intercept_.mean(),
|
|
527
|
+
atol=1e-3,
|
|
528
|
+
)
|
|
529
|
+
np.testing.assert_allclose(
|
|
530
|
+
model_sklearnex_refitted.coef_, model_sklearn.coef_, rtol=1e-3, atol=5e-3
|
|
531
|
+
)
|
|
532
|
+
if n_classes == 2:
|
|
533
|
+
np.testing.assert_allclose(
|
|
534
|
+
model_sklearnex_refitted.intercept_, model_sklearn.intercept_, atol=1e-3
|
|
535
|
+
)
|
|
536
|
+
else:
|
|
537
|
+
np.testing.assert_allclose(
|
|
538
|
+
model_sklearnex_refitted.intercept_
|
|
539
|
+
- model_sklearnex_refitted.intercept_.mean(),
|
|
540
|
+
model_sklearn.intercept_ - model_sklearn.intercept_.mean(),
|
|
541
|
+
atol=1e-3,
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
np.testing.assert_allclose(
|
|
545
|
+
model_sklearnex.predict_proba(X),
|
|
546
|
+
model_sklearn.predict_proba(X),
|
|
547
|
+
rtol=1e-3,
|
|
548
|
+
atol=1e-3,
|
|
549
|
+
)
|
|
550
|
+
np.testing.assert_allclose(
|
|
551
|
+
model_sklearnex_refitted.predict_proba(X),
|
|
552
|
+
model_sklearn.predict_proba(X),
|
|
553
|
+
rtol=1e-3,
|
|
554
|
+
atol=1e-3,
|
|
555
|
+
)
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
@pytest.mark.parametrize(
|
|
559
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="gpu")
|
|
560
|
+
)
|
|
561
|
+
def test_gpu_logreg_prediction_shapes(dataframe, queue):
|
|
562
|
+
if not queue or not queue.sycl_device.is_gpu:
|
|
563
|
+
pytest.skip("Test for GPU-only code branch")
|
|
564
|
+
from sklearnex.linear_model import LogisticRegression
|
|
565
|
+
|
|
566
|
+
X, y = make_classification(random_state=123)
|
|
567
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
568
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
569
|
+
|
|
570
|
+
model = LogisticRegression(solver="newton-cg").fit(X, y)
|
|
571
|
+
pred = model.predict(X)
|
|
572
|
+
pred_proba = model.predict_proba(X)
|
|
573
|
+
pred_log_proba = model.predict_log_proba(X)
|
|
574
|
+
|
|
575
|
+
np.testing.assert_array_equal(pred.shape, (X.shape[0],))
|
|
576
|
+
np.testing.assert_array_equal(pred_proba.shape, (X.shape[0], 2))
|
|
577
|
+
np.testing.assert_array_equal(pred_log_proba.shape, (X.shape[0], 2))
|
|
@@ -190,7 +190,7 @@ def test_tsne_reproducibility(dataframe, queue, dtype):
|
|
|
190
190
|
X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
191
191
|
tsne_1 = TSNE(n_components=2, random_state=42).fit_transform(X_df)
|
|
192
192
|
tsne_2 = TSNE(n_components=2, random_state=42).fit_transform(X_df)
|
|
193
|
-
# in case of dpctl.tensor.usm_ndarray
|
|
193
|
+
# in case of dpctl.tensor.usm_ndarray convert to numpy array
|
|
194
194
|
tsne_1 = _as_numpy(tsne_1)
|
|
195
195
|
tsne_2 = _as_numpy(tsne_2)
|
|
196
196
|
assert_allclose(tsne_1, tsne_2, rtol=1e-5)
|
|
@@ -141,7 +141,7 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, _sklearn_LocalOutlierFactor)
|
|
|
141
141
|
# This had to be done because predict loses the queue when no
|
|
142
142
|
# argument is given and it is a dpctl tensor or dpnp array.
|
|
143
143
|
# This would cause issues in fit_predict. Also, available_if
|
|
144
|
-
# is hard to unwrap, and this is the most
|
|
144
|
+
# is hard to unwrap, and this is the most straightforward way.
|
|
145
145
|
@available_if(_sklearn_LocalOutlierFactor._check_novelty_fit_predict)
|
|
146
146
|
@wraps(_sklearn_LocalOutlierFactor.fit_predict, assigned=["__doc__"])
|
|
147
147
|
@wrap_output_data
|
|
@@ -25,6 +25,7 @@ from sklearn.neighbors._kd_tree import KDTree
|
|
|
25
25
|
from sklearn.utils.validation import check_is_fitted
|
|
26
26
|
|
|
27
27
|
from daal4py.sklearn._utils import sklearn_check_version
|
|
28
|
+
from onedal._device_offload import _transfer_to_host
|
|
28
29
|
from onedal.utils.validation import _check_array, _num_features, _num_samples
|
|
29
30
|
|
|
30
31
|
from .._utils import PatchingConditionsChain
|
|
@@ -280,16 +281,17 @@ class KNeighborsDispatchingBase(oneDALEstimator):
|
|
|
280
281
|
# check the input only in self.kneighbors
|
|
281
282
|
|
|
282
283
|
# construct CSR matrix representation of the k-NN graph
|
|
284
|
+
# requires moving data to host to construct the csr_matrix
|
|
283
285
|
if mode == "connectivity":
|
|
284
286
|
A_ind = self.kneighbors(X, n_neighbors, return_distance=False)
|
|
285
|
-
|
|
287
|
+
_, (A_ind,) = _transfer_to_host(A_ind)
|
|
286
288
|
n_queries = A_ind.shape[0]
|
|
287
|
-
A_data =
|
|
289
|
+
A_data = np.ones(n_queries * n_neighbors)
|
|
288
290
|
|
|
289
291
|
elif mode == "distance":
|
|
290
292
|
A_data, A_ind = self.kneighbors(X, n_neighbors, return_distance=True)
|
|
291
|
-
|
|
292
|
-
A_data =
|
|
293
|
+
_, (A_data, A_ind) = _transfer_to_host(A_data, A_ind)
|
|
294
|
+
A_data = np.reshape(A_data, (-1,))
|
|
293
295
|
|
|
294
296
|
else:
|
|
295
297
|
raise ValueError(
|
|
@@ -300,10 +302,10 @@ class KNeighborsDispatchingBase(oneDALEstimator):
|
|
|
300
302
|
n_queries = A_ind.shape[0]
|
|
301
303
|
n_samples_fit = self.n_samples_fit_
|
|
302
304
|
n_nonzero = n_queries * n_neighbors
|
|
303
|
-
A_indptr =
|
|
305
|
+
A_indptr = np.arange(0, n_nonzero + 1, n_neighbors)
|
|
304
306
|
|
|
305
307
|
kneighbors_graph = sp.csr_matrix(
|
|
306
|
-
(A_data,
|
|
308
|
+
(A_data, np.reshape(A_ind, (-1,)), A_indptr), shape=(n_queries, n_samples_fit)
|
|
307
309
|
)
|
|
308
310
|
|
|
309
311
|
return kneighbors_graph
|
|
@@ -23,7 +23,6 @@ from sklearn.utils import check_array
|
|
|
23
23
|
|
|
24
24
|
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
25
25
|
from daal4py.sklearn._utils import daal_check_version, sklearn_check_version
|
|
26
|
-
from onedal.common.hyperparameters import get_hyperparameters
|
|
27
26
|
from onedal.covariance import EmpiricalCovariance as onedal_EmpiricalCovariance
|
|
28
27
|
from sklearnex import config_context
|
|
29
28
|
from sklearnex.metrics import pairwise_distances
|
|
@@ -34,7 +33,7 @@ from ...base import oneDALEstimator
|
|
|
34
33
|
from ...utils.validation import validate_data
|
|
35
34
|
|
|
36
35
|
|
|
37
|
-
@register_hyperparameters({"fit":
|
|
36
|
+
@register_hyperparameters({"fit": ("covariance", "compute")})
|
|
38
37
|
@control_n_jobs(decorated_methods=["fit", "mahalanobis"])
|
|
39
38
|
class EmpiricalCovariance(oneDALEstimator, _sklearn_EmpiricalCovariance):
|
|
40
39
|
__doc__ = _sklearn_EmpiricalCovariance.__doc__
|
|
@@ -56,6 +55,8 @@ class EmpiricalCovariance(oneDALEstimator, _sklearn_EmpiricalCovariance):
|
|
|
56
55
|
_onedal_covariance = staticmethod(onedal_EmpiricalCovariance)
|
|
57
56
|
|
|
58
57
|
def _onedal_fit(self, X, queue=None):
|
|
58
|
+
X = validate_data(self, X, ensure_all_finite=False)
|
|
59
|
+
|
|
59
60
|
if X.shape[0] == 1:
|
|
60
61
|
warnings.warn(
|
|
61
62
|
"Only one sample available. You may want to reshape your data array"
|
|
@@ -92,8 +93,6 @@ class EmpiricalCovariance(oneDALEstimator, _sklearn_EmpiricalCovariance):
|
|
|
92
93
|
def fit(self, X, y=None):
|
|
93
94
|
if sklearn_check_version("1.2"):
|
|
94
95
|
self._validate_params()
|
|
95
|
-
X = validate_data(self, X, ensure_all_finite=False)
|
|
96
|
-
|
|
97
96
|
dispatch(
|
|
98
97
|
self,
|
|
99
98
|
"fit",
|