From c6a65e6eeada352f46ac2804b1983e4ad8882189 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Thu, 14 Jul 2022 17:08:47 -0500 Subject: [PATCH 01/37] FEA added CMakeLists to python folders --- .gitignore | 2 + conda/environments/cuml_dev_cuda11.5.yml | 2 + conda/recipes/cuml/conda_build_config.yaml | 3 + conda/recipes/cuml/meta.yaml | 3 +- cpp/CMakeLists.txt | 58 ++-- python/cuml/CMakeLists.txt | 101 +++++++ python/cuml/{ => cuml}/__init__.py | 0 .../cuml/{ => cuml}/_thirdparty/__init__.py | 0 .../{ => cuml}/_thirdparty/sklearn/README.md | 0 .../_thirdparty/sklearn/__init__.py | 0 .../sklearn/preprocessing/__init__.py | 0 .../preprocessing/_column_transformer.py | 0 .../sklearn/preprocessing/_data.py | 0 .../sklearn/preprocessing/_discretization.py | 0 .../preprocessing/_function_transformer.py | 0 .../sklearn/preprocessing/_imputation.py | 0 .../_thirdparty/sklearn/utils/__init__.py | 0 .../_thirdparty/sklearn/utils/extmath.py | 0 .../sklearn/utils/skl_dependencies.py | 0 .../_thirdparty/sklearn/utils/sparsefuncs.py | 0 .../_thirdparty/sklearn/utils/validation.py | 0 python/cuml/{ => cuml}/_version.py | 0 python/cuml/{ => cuml}/benchmark/__init__.py | 0 .../cuml/{ => cuml}/benchmark/algorithms.py | 0 .../benchmark/automated/__init__.py | 0 .../automated/bench_classification.py | 0 .../bench_dimensionality_reduction.py | 0 .../automated/bench_preprocessing.py | 0 .../automated/bench_random_forest.py | 0 .../benchmark/automated/bench_regression.py | 0 .../benchmark/automated/dask/__init__.py | 0 .../dask/bench_mnmg_classification.py | 0 .../bench_mnmg_dimensionality_reduction.py | 0 .../automated/dask/bench_mnmg_regression.py | 0 .../benchmark/automated/dask/conftest.py | 0 .../{ => cuml}/benchmark/automated/pytest.ini | 0 .../benchmark/automated/utils/__init__.py | 0 .../automated/utils/auto_nvtx_bench.py | 0 .../benchmark/automated/utils/utils.py | 0 .../benchmark/bench_helper_funcs.py | 0 .../cuml/{ => cuml}/benchmark/ci_benchmark.py | 0 python/cuml/{ => cuml}/benchmark/datagen.py | 0 .../{ => cuml}/benchmark/nvtx_benchmark.py | 0 .../{ => cuml}/benchmark/run_benchmarks.py | 0 python/cuml/{ => cuml}/benchmark/runners.py | 0 python/cuml/cuml/cluster/CMakeLists.txt | 50 ++++ python/cuml/{ => cuml}/cluster/__init__.py | 0 .../cuml/{ => cuml}/cluster/agglomerative.pyx | 0 python/cuml/{ => cuml}/cluster/dbscan.pyx | 0 python/cuml/{ => cuml}/cluster/dbscan_mg.pyx | 0 python/cuml/{ => cuml}/cluster/hdbscan.pyx | 0 python/cuml/{ => cuml}/cluster/kmeans.pyx | 0 python/cuml/{ => cuml}/cluster/kmeans_mg.pyx | 0 .../cuml/{ => cuml}/cluster/kmeans_utils.pxd | 0 python/cuml/{ => cuml}/comm/__init__.py | 0 python/cuml/{ => cuml}/comm/serialize.py | 0 python/cuml/cuml/common/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/common/__init__.py | 0 python/cuml/{ => cuml}/common/array.py | 0 .../{ => cuml}/common/array_descriptor.py | 0 python/cuml/{ => cuml}/common/array_sparse.py | 0 python/cuml/{ => cuml}/common/base.pyx | 0 python/cuml/{ => cuml}/common/cuda.pxd | 0 python/cuml/{ => cuml}/common/cuda.pyx | 0 python/cuml/{ => cuml}/common/doc_utils.py | 0 python/cuml/{ => cuml}/common/exceptions.py | 0 python/cuml/{ => cuml}/common/handle.pyx | 0 python/cuml/{ => cuml}/common/import_utils.py | 0 python/cuml/{ => cuml}/common/input_utils.py | 0 python/cuml/{ => cuml}/common/kernel_utils.py | 0 python/cuml/{ => cuml}/common/logger.pyx | 0 python/cuml/{ => cuml}/common/memory_utils.py | 0 python/cuml/{ => cuml}/common/mixins.py | 0 python/cuml/{ => cuml}/common/numba_utils.py | 0 .../{ => cuml}/common/opg_data_utils_mg.pxd | 0 .../{ => cuml}/common/opg_data_utils_mg.pyx | 0 .../cuml/{ => cuml}/common/pointer_utils.pyx | 0 python/cuml/{ => cuml}/common/sparse_utils.py | 0 python/cuml/{ => cuml}/common/sparsefuncs.py | 0 python/cuml/{ => cuml}/common/timing_utils.py | 0 python/cuml/{ => cuml}/common/type_utils.py | 0 python/cuml/{ => cuml}/compose/__init__.py | 0 python/cuml/{ => cuml}/dask/__init__.py | 0 .../cuml/{ => cuml}/dask/cluster/__init__.py | 0 python/cuml/{ => cuml}/dask/cluster/dbscan.py | 0 python/cuml/{ => cuml}/dask/cluster/kmeans.py | 0 .../cuml/{ => cuml}/dask/common/__init__.py | 0 python/cuml/{ => cuml}/dask/common/base.py | 0 .../{ => cuml}/dask/common/dask_arr_utils.py | 0 .../{ => cuml}/dask/common/dask_df_utils.py | 0 python/cuml/{ => cuml}/dask/common/func.py | 0 .../{ => cuml}/dask/common/input_utils.py | 0 .../cuml/{ => cuml}/dask/common/part_utils.py | 0 python/cuml/{ => cuml}/dask/common/utils.py | 0 .../cuml/{ => cuml}/dask/datasets/__init__.py | 0 python/cuml/{ => cuml}/dask/datasets/blobs.py | 0 .../dask/datasets/classification.py | 0 .../{ => cuml}/dask/datasets/regression.py | 0 python/cuml/{ => cuml}/dask/datasets/utils.py | 0 .../{ => cuml}/dask/decomposition/__init__.py | 0 .../{ => cuml}/dask/decomposition/base.py | 0 .../cuml/{ => cuml}/dask/decomposition/pca.py | 0 .../{ => cuml}/dask/decomposition/tsvd.py | 0 .../cuml/{ => cuml}/dask/ensemble/__init__.py | 0 python/cuml/{ => cuml}/dask/ensemble/base.py | 0 .../dask/ensemble/randomforestclassifier.py | 0 .../dask/ensemble/randomforestregressor.py | 0 .../cuml/{ => cuml}/dask/extended/__init__.py | 0 .../dask/extended/linear_model/__init__.py | 0 .../linear_model/logistic_regression.py | 0 .../dask/feature_extraction/__init__.py | 0 .../dask/feature_extraction/text/__init__.py | 0 .../text/tfidf_transformer.py | 0 .../{ => cuml}/dask/linear_model/__init__.py | 0 .../dask/linear_model/elastic_net.py | 0 .../{ => cuml}/dask/linear_model/lasso.py | 0 .../dask/linear_model/linear_regression.py | 0 .../{ => cuml}/dask/linear_model/ridge.py | 0 .../cuml/{ => cuml}/dask/manifold/__init__.py | 0 python/cuml/{ => cuml}/dask/manifold/umap.py | 0 .../cuml/{ => cuml}/dask/metrics/__init__.py | 0 .../dask/metrics/confusion_matrix.py | 0 python/cuml/{ => cuml}/dask/metrics/utils.py | 0 .../{ => cuml}/dask/naive_bayes/__init__.py | 0 .../dask/naive_bayes/naive_bayes.py | 0 .../{ => cuml}/dask/neighbors/__init__.py | 0 .../dask/neighbors/kneighbors_classifier.py | 0 .../dask/neighbors/kneighbors_regressor.py | 0 .../dask/neighbors/nearest_neighbors.py | 0 .../dask/preprocessing/LabelEncoder.py | 0 .../{ => cuml}/dask/preprocessing/__init__.py | 0 .../{ => cuml}/dask/preprocessing/encoders.py | 0 .../{ => cuml}/dask/preprocessing/label.py | 0 .../cuml/{ => cuml}/dask/solvers/__init__.py | 0 python/cuml/{ => cuml}/dask/solvers/cd.py | 0 python/cuml/cuml/datasets/CMakeLists.txt | 41 +++ python/cuml/{ => cuml}/datasets/__init__.py | 0 python/cuml/{ => cuml}/datasets/arima.pyx | 0 python/cuml/{ => cuml}/datasets/blobs.py | 0 .../{ => cuml}/datasets/classification.py | 0 .../cuml/{ => cuml}/datasets/regression.pyx | 0 python/cuml/{ => cuml}/datasets/utils.py | 0 python/cuml/cuml/decomposition/CMakeLists.txt | 48 ++++ .../cuml/{ => cuml}/decomposition/__init__.py | 0 .../cuml/{ => cuml}/decomposition/base_mg.pyx | 0 .../decomposition/incremental_pca.py | 0 python/cuml/{ => cuml}/decomposition/pca.pyx | 0 .../cuml/{ => cuml}/decomposition/pca_mg.pyx | 0 python/cuml/{ => cuml}/decomposition/tsvd.pyx | 0 .../cuml/{ => cuml}/decomposition/tsvd_mg.pyx | 0 .../cuml/{ => cuml}/decomposition/utils.pxd | 0 .../{ => cuml}/decomposition/utils_mg.pxd | 0 python/cuml/cuml/ensemble/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/ensemble/__init__.py | 0 .../ensemble/randomforest_common.pyx | 0 .../ensemble/randomforest_shared.pxd | 0 .../ensemble/randomforest_shared.pyx | 0 .../ensemble/randomforestclassifier.pyx | 0 .../ensemble/randomforestregressor.pyx | 0 .../cuml/{ => cuml}/experimental/__init__.py | 0 .../experimental/hyperopt_utils/__init__.py | 0 .../hyperopt_utils/plotting_utils.py | 0 .../experimental/hyperparams/HPO_demo.ipynb | 0 .../experimental/linear_model/CMakeLists.txt | 41 +++ .../experimental/linear_model/__init__.py | 0 .../experimental/linear_model/lars.pyx | 0 python/cuml/cuml/explainer/CMakeLists.txt | 45 ++++ python/cuml/{ => cuml}/explainer/__init__.py | 0 python/cuml/{ => cuml}/explainer/base.pyx | 0 python/cuml/{ => cuml}/explainer/common.py | 0 .../cuml/{ => cuml}/explainer/kernel_shap.pyx | 0 .../{ => cuml}/explainer/permutation_shap.pyx | 0 python/cuml/{ => cuml}/explainer/sampling.py | 0 .../cuml/{ => cuml}/explainer/tree_shap.pyx | 0 .../{ => cuml}/feature_extraction/__init__.py | 0 .../feature_extraction/_stop_words.py | 0 .../{ => cuml}/feature_extraction/_tfidf.py | 0 .../feature_extraction/_tfidf_vectorizer.py | 0 .../feature_extraction/_vectorizers.py | 0 .../{ => cuml}/feature_extraction/text.py | 0 python/cuml/cuml/fil/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/fil/README.md | 0 python/cuml/{ => cuml}/fil/__init__.py | 0 python/cuml/{ => cuml}/fil/fil.pyx | 0 .../{ => cuml}/fil/fil_performance_nrows.png | Bin python/cuml/cuml/internals/CMakeLists.txt | 41 +++ python/cuml/{ => cuml}/internals/__init__.py | 0 .../internals/api_context_managers.py | 0 .../{ => cuml}/internals/api_decorators.py | 0 .../cuml/{ => cuml}/internals/base_helpers.py | 0 .../{ => cuml}/internals/callbacks_implems.h | 0 .../{ => cuml}/internals/global_settings.py | 0 .../cuml/{ => cuml}/internals/internals.pyx | 0 python/cuml/cuml/kernel_ridge/CMakeLists.txt | 41 +++ .../cuml/{ => cuml}/kernel_ridge/__init__.py | 0 .../{ => cuml}/kernel_ridge/kernel_ridge.pyx | 0 python/cuml/cuml/linear_model/CMakeLists.txt | 59 +++++ .../cuml/{ => cuml}/linear_model/__init__.py | 0 python/cuml/{ => cuml}/linear_model/base.pyx | 0 .../cuml/{ => cuml}/linear_model/base_mg.pyx | 0 .../{ => cuml}/linear_model/elastic_net.pyx | 0 python/cuml/{ => cuml}/linear_model/lasso.py | 0 .../linear_model/linear_regression.pyx | 0 .../linear_model/linear_regression_mg.pyx | 0 .../linear_model/logistic_regression.pyx | 0 .../linear_model/mbsgd_classifier.pyx | 0 .../linear_model/mbsgd_regressor.pyx | 0 python/cuml/{ => cuml}/linear_model/ridge.pyx | 0 .../cuml/{ => cuml}/linear_model/ridge_mg.pyx | 0 python/cuml/cuml/manifold/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/manifold/__init__.py | 0 python/cuml/{ => cuml}/manifold/simpl_set.pyx | 0 python/cuml/{ => cuml}/manifold/t_sne.pyx | 0 python/cuml/{ => cuml}/manifold/umap.pyx | 0 .../cuml/{ => cuml}/manifold/umap_utils.pxd | 0 .../cuml/{ => cuml}/manifold/umap_utils.pyx | 0 python/cuml/cuml/metrics/CMakeLists.txt | 51 ++++ python/cuml/{ => cuml}/metrics/__init__.py | 0 .../{ => cuml}/metrics/_classification.py | 0 python/cuml/{ => cuml}/metrics/_ranking.py | 0 python/cuml/{ => cuml}/metrics/accuracy.pyx | 0 .../{ => cuml}/metrics/cluster/__init__.py | 0 .../metrics/cluster/adjusted_rand_index.pyx | 0 .../metrics/cluster/completeness_score.pyx | 0 .../{ => cuml}/metrics/cluster/entropy.pyx | 0 .../metrics/cluster/homogeneity_score.pyx | 0 .../metrics/cluster/mutual_info_score.pyx | 0 .../metrics/cluster/silhouette_score.pyx | 0 .../cuml/{ => cuml}/metrics/cluster/utils.pyx | 0 .../{ => cuml}/metrics/confusion_matrix.py | 0 .../cuml/{ => cuml}/metrics/distance_type.pxd | 0 python/cuml/{ => cuml}/metrics/hinge_loss.pyx | 0 .../cuml/{ => cuml}/metrics/kl_divergence.pyx | 0 .../{ => cuml}/metrics/pairwise_distances.pyx | 0 .../{ => cuml}/metrics/pairwise_kernels.py | 0 python/cuml/{ => cuml}/metrics/regression.pxd | 0 python/cuml/{ => cuml}/metrics/regression.pyx | 0 .../{ => cuml}/metrics/trustworthiness.pyx | 0 python/cuml/{ => cuml}/metrics/utils.py | 0 .../{ => cuml}/model_selection/__init__.py | 0 .../cuml/{ => cuml}/model_selection/_split.py | 0 python/cuml/{ => cuml}/multiclass/__init__.py | 0 .../cuml/{ => cuml}/multiclass/multiclass.py | 0 .../cuml/{ => cuml}/naive_bayes/__init__.py | 0 .../{ => cuml}/naive_bayes/naive_bayes.py | 0 python/cuml/cuml/neighbors/CMakeLists.txt | 53 ++++ python/cuml/{ => cuml}/neighbors/__init__.py | 0 python/cuml/{ => cuml}/neighbors/ann.pxd | 0 python/cuml/{ => cuml}/neighbors/ann.pyx | 0 .../{ => cuml}/neighbors/kernel_density.py | 0 .../neighbors/kneighbors_classifier.pyx | 0 .../neighbors/kneighbors_classifier_mg.pyx | 0 .../neighbors/kneighbors_regressor.pyx | 0 .../neighbors/kneighbors_regressor_mg.pyx | 0 .../neighbors/nearest_neighbors.pyx | 0 .../neighbors/nearest_neighbors_mg.pyx | 0 python/cuml/{ => cuml}/pipeline/__init__.py | 0 .../{ => cuml}/preprocessing/LabelEncoder.py | 0 .../{ => cuml}/preprocessing/TargetEncoder.py | 0 .../cuml/{ => cuml}/preprocessing/__init__.py | 0 .../cuml/{ => cuml}/preprocessing/encoders.py | 0 python/cuml/{ => cuml}/preprocessing/label.py | 0 .../preprocessing/onehotencoder_mg.py | 0 .../{ => cuml}/preprocessing/text/__init__.py | 0 .../preprocessing/text/stem/__init__.py | 0 .../preprocessing/text/stem/porter_stemmer.py | 0 .../stem/porter_stemmer_utils/__init__.py | 0 .../consonant_vowel_utils.py | 0 .../porter_stemmer_utils/len_flags_utils.py | 0 .../porter_stemmer_utils/measure_utils.py | 0 .../porter_stemmer_rules.py | 0 .../stem/porter_stemmer_utils/suffix_utils.py | 0 python/cuml/{ => cuml}/prims/__init__.py | 0 python/cuml/{ => cuml}/prims/array.py | 0 .../cuml/{ => cuml}/prims/label/__init__.py | 0 .../{ => cuml}/prims/label/classlabels.py | 0 .../cuml/{ => cuml}/prims/stats/__init__.py | 0 .../cuml/{ => cuml}/prims/stats/covariance.py | 0 .../cuml/random_projection/CMakeLists.txt | 41 +++ .../{ => cuml}/random_projection/__init__.py | 0 .../random_projection/random_projection.pyx | 0 python/cuml/cuml/solvers/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/solvers/__init__.py | 0 python/cuml/{ => cuml}/solvers/cd.pyx | 0 python/cuml/{ => cuml}/solvers/cd_mg.pyx | 0 python/cuml/{ => cuml}/solvers/qn.pyx | 0 python/cuml/{ => cuml}/solvers/sgd.pyx | 0 python/cuml/cuml/svm/CMakeLists.txt | 47 ++++ python/cuml/{ => cuml}/svm/__init__.py | 0 python/cuml/{ => cuml}/svm/linear.pyx | 0 python/cuml/{ => cuml}/svm/linear_svc.py | 0 python/cuml/{ => cuml}/svm/linear_svr.py | 0 python/cuml/{ => cuml}/svm/svc.pyx | 0 python/cuml/{ => cuml}/svm/svm_base.pyx | 0 python/cuml/{ => cuml}/svm/svr.pyx | 0 python/cuml/{ => cuml}/testing/__init__.py | 0 .../cuml/{ => cuml}/testing/dask/__init__.py | 0 python/cuml/{ => cuml}/testing/dask/utils.py | 0 .../{ => cuml}/testing/plugins/__init__.py | 0 .../testing/plugins/quick_run_plugin.py | 0 .../{ => cuml}/testing/test_preproc_utils.py | 0 python/cuml/{ => cuml}/testing/utils.py | 0 python/cuml/{ => cuml}/tests/conftest.py | 0 python/cuml/{ => cuml}/tests/dask/conftest.py | 0 .../cuml/{ => cuml}/tests/dask/test_base.py | 0 .../tests/dask/test_coordinate_descent.py | 0 .../tests/dask/test_dask_arr_utils.py | 0 .../{ => cuml}/tests/dask/test_dask_sql.py | 0 .../{ => cuml}/tests/dask/test_dask_utils.py | 0 .../{ => cuml}/tests/dask/test_datasets.py | 0 .../cuml/{ => cuml}/tests/dask/test_dbscan.py | 0 .../{ => cuml}/tests/dask/test_doctest.py | 0 .../cuml/{ => cuml}/tests/dask/test_func.py | 0 .../tests/dask/test_global_settings.py | 0 .../{ => cuml}/tests/dask/test_input_utils.py | 0 .../cuml/{ => cuml}/tests/dask/test_kmeans.py | 0 .../tests/dask/test_kneighbors_classifier.py | 0 .../tests/dask/test_kneighbors_regressor.py | 0 .../tests/dask/test_label_binarizer.py | 0 .../tests/dask/test_label_encoder.py | 0 .../tests/dask/test_linear_regression.py | 0 .../tests}/dask/test_logistic_regression.py | 0 .../{ => cuml}/tests/dask/test_metrics.py | 0 .../{ => cuml}/tests/dask/test_naive_bayes.py | 0 .../tests/dask/test_nearest_neighbors.py | 0 .../tests/dask/test_one_hot_encoder.py | 0 python/cuml/{ => cuml}/tests/dask/test_pca.py | 0 .../tests/dask/test_random_forest.py | 0 .../tests/dask/test_ridge_regression.py | 0 .../tests/dask/test_serialization.py | 0 .../cuml/{ => cuml}/tests/dask/test_tfidf.py | 0 .../cuml/{ => cuml}/tests/dask/test_tsvd.py | 0 .../cuml/{ => cuml}/tests/dask/test_umap.py | 0 .../tests/explainer/test_explainer_base.py | 0 .../tests/explainer/test_explainer_common.py | 0 .../explainer/test_explainer_kernel_shap.py | 0 .../test_explainer_permutation_shap.py | 0 .../tests/explainer/test_gpu_treeshap.py | 0 .../tests/explainer/test_sampling.py | 0 .../tests/explainer/test_shap_plotting.py | 0 .../tests/stemmer_tests/test_len_utils.py | 0 .../test_porter_stemmer_rules.py | 0 .../tests/stemmer_tests/test_stemmer.py | 0 .../tests/stemmer_tests/test_steps.py | 0 .../tests/stemmer_tests/test_suffix_utils.py | 0 python/cuml/{ => cuml}/tests/test_adapters.py | 0 .../{ => cuml}/tests/test_agglomerative.py | 0 .../cuml/{ => cuml}/tests/test_allocator.py | 0 python/cuml/{ => cuml}/tests/test_api.py | 0 python/cuml/{ => cuml}/tests/test_arima.py | 0 python/cuml/{ => cuml}/tests/test_array.py | 0 .../{ => cuml}/tests/test_array_sparse.py | 0 .../cuml/{ => cuml}/tests/test_auto_arima.py | 0 python/cuml/{ => cuml}/tests/test_base.py | 0 .../{ => cuml}/tests/test_batched_lbfgs.py | 0 .../cuml/{ => cuml}/tests/test_benchmark.py | 0 .../{ => cuml}/tests/test_class_enumerator.py | 0 python/cuml/{ => cuml}/tests/test_compose.py | 0 .../tests/test_coordinate_descent.py | 0 .../{ => cuml}/tests/test_cuml_descr_decor.py | 0 .../tests/test_dataset_generator_types.py | 0 python/cuml/{ => cuml}/tests/test_dbscan.py | 0 python/cuml/{ => cuml}/tests/test_doctest.py | 0 python/cuml/{ => cuml}/tests/test_fil.py | 0 python/cuml/{ => cuml}/tests/test_hdbscan.py | 0 .../cuml/{ => cuml}/tests/test_holtwinters.py | 0 .../{ => cuml}/tests/test_incremental_pca.py | 0 .../cuml/{ => cuml}/tests/test_input_utils.py | 0 .../{ => cuml}/tests/test_internals_api.py | 0 .../{ => cuml}/tests/test_kernel_density.py | 0 .../{ => cuml}/tests/test_kernel_ridge.py | 0 python/cuml/{ => cuml}/tests/test_kmeans.py | 0 .../tests/test_kneighbors_classifier.py | 0 .../tests/test_kneighbors_regressor.py | 0 .../{ => cuml}/tests/test_label_binarizer.py | 0 .../{ => cuml}/tests/test_label_encoder.py | 0 python/cuml/{ => cuml}/tests/test_lars.py | 0 .../{ => cuml}/tests/test_linear_model.py | 0 .../cuml/{ => cuml}/tests/test_linear_svm.py | 0 python/cuml/{ => cuml}/tests/test_logger.py | 0 .../cuml/{ => cuml}/tests/test_make_arima.py | 0 .../cuml/{ => cuml}/tests/test_make_blobs.py | 0 .../tests/test_make_classification.py | 0 .../{ => cuml}/tests/test_make_regression.py | 0 .../{ => cuml}/tests/test_mbsgd_classifier.py | 0 .../{ => cuml}/tests/test_mbsgd_regressor.py | 0 .../{ => cuml}/tests/test_meta_estimators.py | 0 python/cuml/{ => cuml}/tests/test_metrics.py | 0 .../{ => cuml}/tests/test_module_config.py | 0 .../cuml/{ => cuml}/tests/test_multiclass.py | 0 .../cuml/{ => cuml}/tests/test_naive_bayes.py | 0 .../tests/test_nearest_neighbors.py | 0 .../{ => cuml}/tests/test_one_hot_encoder.py | 0 python/cuml/{ => cuml}/tests/test_pca.py | 0 python/cuml/{ => cuml}/tests/test_pickle.py | 0 .../{ => cuml}/tests/test_preprocessing.py | 0 python/cuml/{ => cuml}/tests/test_prims.py | 0 python/cuml/{ => cuml}/tests/test_qn.py | 0 .../{ => cuml}/tests/test_random_forest.py | 0 .../tests/test_random_projection.py | 0 .../cuml/{ => cuml}/tests/test_serialize.py | 0 python/cuml/{ => cuml}/tests/test_sgd.py | 0 .../cuml/{ => cuml}/tests/test_simpl_set.py | 0 .../tests/test_solver_attributes.py | 0 .../cuml/{ => cuml}/tests/test_sparsefuncs.py | 0 .../{ => cuml}/tests/test_stationarity.py | 0 python/cuml/{ => cuml}/tests/test_stats.py | 0 python/cuml/{ => cuml}/tests/test_svm.py | 0 .../{ => cuml}/tests/test_target_encoder.py | 0 .../tests/test_text_feature_extraction.py | 0 python/cuml/{ => cuml}/tests/test_tfidf.py | 0 .../cuml/{ => cuml}/tests/test_thirdparty.py | 0 .../{ => cuml}/tests/test_train_test_split.py | 0 .../{ => cuml}/tests/test_trustworthiness.py | 0 python/cuml/{ => cuml}/tests/test_tsne.py | 0 python/cuml/{ => cuml}/tests/test_tsvd.py | 0 python/cuml/{ => cuml}/tests/test_umap.py | 0 .../{ => cuml}/tests/ts_datasets/README.md | 0 .../{ => cuml}/tests/ts_datasets/alcohol.csv | 0 .../{ => cuml}/tests/ts_datasets/cattle.csv | 0 .../tests/ts_datasets/deaths_by_region.csv | 0 .../endog_deaths_by_region_exog.csv | 0 ...og_guest_nights_by_region_missing_exog.csv | 0 ...urly_earnings_by_industry_missing_exog.csv | 0 .../exog_deaths_by_region_exog.csv | 0 ...og_guest_nights_by_region_missing_exog.csv | 0 ...urly_earnings_by_industry_missing_exog.csv | 0 .../ts_datasets/guest_nights_by_region.csv | 0 .../guest_nights_by_region_missing.csv | 0 .../hourly_earnings_by_industry.csv | 0 .../hourly_earnings_by_industry_missing.csv | 0 .../long_term_arrivals_by_citizenship.csv | 0 .../net_migrations_auckland_by_age.csv | 0 .../tests/ts_datasets/passenger_movements.csv | 0 .../ts_datasets/police_recorded_crime.csv | 0 .../tests/ts_datasets/population_estimate.csv | 0 .../population_estimate_missing.csv | 0 .../thirdparty_adapters/__init__.py | 0 .../thirdparty_adapters/adapters.py | 0 .../thirdparty_adapters/sparsefuncs_fast.py | 0 python/cuml/cuml/tsa/CMakeLists.txt | 49 ++++ python/cuml/{ => cuml}/tsa/__init__.py | 0 python/cuml/{ => cuml}/tsa/arima.pxd | 0 python/cuml/{ => cuml}/tsa/arima.pyx | 0 python/cuml/{ => cuml}/tsa/auto_arima.pyx | 0 python/cuml/{ => cuml}/tsa/batched_lbfgs.py | 0 python/cuml/{ => cuml}/tsa/holtwinters.pyx | 0 python/cuml/{ => cuml}/tsa/seasonality.pyx | 0 python/cuml/{ => cuml}/tsa/stationarity.pyx | 0 python/cuml/pyproject.toml | 24 ++ python/{ => cuml}/pytest.ini | 0 python/{ => cuml}/setup.py | 211 +++++++-------- python/{ => cuml}/setuputils.py | 20 ++ python/{ => cuml}/versioneer.py | 0 python/cython_build_ext.py | 250 ------------------ 455 files changed, 1133 insertions(+), 383 deletions(-) create mode 100644 python/cuml/CMakeLists.txt rename python/cuml/{ => cuml}/__init__.py (100%) rename python/cuml/{ => cuml}/_thirdparty/__init__.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/README.md (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/__init__.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/__init__.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/_column_transformer.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/_data.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/_discretization.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/_function_transformer.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/preprocessing/_imputation.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/utils/__init__.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/utils/extmath.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/utils/skl_dependencies.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/utils/sparsefuncs.py (100%) rename python/cuml/{ => cuml}/_thirdparty/sklearn/utils/validation.py (100%) rename python/cuml/{ => cuml}/_version.py (100%) rename python/cuml/{ => cuml}/benchmark/__init__.py (100%) rename python/cuml/{ => cuml}/benchmark/algorithms.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/__init__.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/bench_classification.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/bench_dimensionality_reduction.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/bench_preprocessing.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/bench_random_forest.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/bench_regression.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/dask/__init__.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/dask/bench_mnmg_classification.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/dask/bench_mnmg_regression.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/dask/conftest.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/pytest.ini (100%) rename python/cuml/{ => cuml}/benchmark/automated/utils/__init__.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/utils/auto_nvtx_bench.py (100%) rename python/cuml/{ => cuml}/benchmark/automated/utils/utils.py (100%) rename python/cuml/{ => cuml}/benchmark/bench_helper_funcs.py (100%) rename python/cuml/{ => cuml}/benchmark/ci_benchmark.py (100%) rename python/cuml/{ => cuml}/benchmark/datagen.py (100%) rename python/cuml/{ => cuml}/benchmark/nvtx_benchmark.py (100%) rename python/cuml/{ => cuml}/benchmark/run_benchmarks.py (100%) rename python/cuml/{ => cuml}/benchmark/runners.py (100%) create mode 100644 python/cuml/cuml/cluster/CMakeLists.txt rename python/cuml/{ => cuml}/cluster/__init__.py (100%) rename python/cuml/{ => cuml}/cluster/agglomerative.pyx (100%) rename python/cuml/{ => cuml}/cluster/dbscan.pyx (100%) rename python/cuml/{ => cuml}/cluster/dbscan_mg.pyx (100%) rename python/cuml/{ => cuml}/cluster/hdbscan.pyx (100%) rename python/cuml/{ => cuml}/cluster/kmeans.pyx (100%) rename python/cuml/{ => cuml}/cluster/kmeans_mg.pyx (100%) rename python/cuml/{ => cuml}/cluster/kmeans_utils.pxd (100%) rename python/cuml/{ => cuml}/comm/__init__.py (100%) rename python/cuml/{ => cuml}/comm/serialize.py (100%) create mode 100644 python/cuml/cuml/common/CMakeLists.txt rename python/cuml/{ => cuml}/common/__init__.py (100%) rename python/cuml/{ => cuml}/common/array.py (100%) rename python/cuml/{ => cuml}/common/array_descriptor.py (100%) rename python/cuml/{ => cuml}/common/array_sparse.py (100%) rename python/cuml/{ => cuml}/common/base.pyx (100%) rename python/cuml/{ => cuml}/common/cuda.pxd (100%) rename python/cuml/{ => cuml}/common/cuda.pyx (100%) rename python/cuml/{ => cuml}/common/doc_utils.py (100%) rename python/cuml/{ => cuml}/common/exceptions.py (100%) rename python/cuml/{ => cuml}/common/handle.pyx (100%) rename python/cuml/{ => cuml}/common/import_utils.py (100%) rename python/cuml/{ => cuml}/common/input_utils.py (100%) rename python/cuml/{ => cuml}/common/kernel_utils.py (100%) rename python/cuml/{ => cuml}/common/logger.pyx (100%) rename python/cuml/{ => cuml}/common/memory_utils.py (100%) rename python/cuml/{ => cuml}/common/mixins.py (100%) rename python/cuml/{ => cuml}/common/numba_utils.py (100%) rename python/cuml/{ => cuml}/common/opg_data_utils_mg.pxd (100%) rename python/cuml/{ => cuml}/common/opg_data_utils_mg.pyx (100%) rename python/cuml/{ => cuml}/common/pointer_utils.pyx (100%) rename python/cuml/{ => cuml}/common/sparse_utils.py (100%) rename python/cuml/{ => cuml}/common/sparsefuncs.py (100%) rename python/cuml/{ => cuml}/common/timing_utils.py (100%) rename python/cuml/{ => cuml}/common/type_utils.py (100%) rename python/cuml/{ => cuml}/compose/__init__.py (100%) rename python/cuml/{ => cuml}/dask/__init__.py (100%) rename python/cuml/{ => cuml}/dask/cluster/__init__.py (100%) rename python/cuml/{ => cuml}/dask/cluster/dbscan.py (100%) rename python/cuml/{ => cuml}/dask/cluster/kmeans.py (100%) rename python/cuml/{ => cuml}/dask/common/__init__.py (100%) rename python/cuml/{ => cuml}/dask/common/base.py (100%) rename python/cuml/{ => cuml}/dask/common/dask_arr_utils.py (100%) rename python/cuml/{ => cuml}/dask/common/dask_df_utils.py (100%) rename python/cuml/{ => cuml}/dask/common/func.py (100%) rename python/cuml/{ => cuml}/dask/common/input_utils.py (100%) rename python/cuml/{ => cuml}/dask/common/part_utils.py (100%) rename python/cuml/{ => cuml}/dask/common/utils.py (100%) rename python/cuml/{ => cuml}/dask/datasets/__init__.py (100%) rename python/cuml/{ => cuml}/dask/datasets/blobs.py (100%) rename python/cuml/{ => cuml}/dask/datasets/classification.py (100%) rename python/cuml/{ => cuml}/dask/datasets/regression.py (100%) rename python/cuml/{ => cuml}/dask/datasets/utils.py (100%) rename python/cuml/{ => cuml}/dask/decomposition/__init__.py (100%) rename python/cuml/{ => cuml}/dask/decomposition/base.py (100%) rename python/cuml/{ => cuml}/dask/decomposition/pca.py (100%) rename python/cuml/{ => cuml}/dask/decomposition/tsvd.py (100%) rename python/cuml/{ => cuml}/dask/ensemble/__init__.py (100%) rename python/cuml/{ => cuml}/dask/ensemble/base.py (100%) rename python/cuml/{ => cuml}/dask/ensemble/randomforestclassifier.py (100%) rename python/cuml/{ => cuml}/dask/ensemble/randomforestregressor.py (100%) rename python/cuml/{ => cuml}/dask/extended/__init__.py (100%) rename python/cuml/{ => cuml}/dask/extended/linear_model/__init__.py (100%) rename python/cuml/{ => cuml}/dask/extended/linear_model/logistic_regression.py (100%) rename python/cuml/{ => cuml}/dask/feature_extraction/__init__.py (100%) rename python/cuml/{ => cuml}/dask/feature_extraction/text/__init__.py (100%) rename python/cuml/{ => cuml}/dask/feature_extraction/text/tfidf_transformer.py (100%) rename python/cuml/{ => cuml}/dask/linear_model/__init__.py (100%) rename python/cuml/{ => cuml}/dask/linear_model/elastic_net.py (100%) rename python/cuml/{ => cuml}/dask/linear_model/lasso.py (100%) rename python/cuml/{ => cuml}/dask/linear_model/linear_regression.py (100%) rename python/cuml/{ => cuml}/dask/linear_model/ridge.py (100%) rename python/cuml/{ => cuml}/dask/manifold/__init__.py (100%) rename python/cuml/{ => cuml}/dask/manifold/umap.py (100%) rename python/cuml/{ => cuml}/dask/metrics/__init__.py (100%) rename python/cuml/{ => cuml}/dask/metrics/confusion_matrix.py (100%) rename python/cuml/{ => cuml}/dask/metrics/utils.py (100%) rename python/cuml/{ => cuml}/dask/naive_bayes/__init__.py (100%) rename python/cuml/{ => cuml}/dask/naive_bayes/naive_bayes.py (100%) rename python/cuml/{ => cuml}/dask/neighbors/__init__.py (100%) rename python/cuml/{ => cuml}/dask/neighbors/kneighbors_classifier.py (100%) rename python/cuml/{ => cuml}/dask/neighbors/kneighbors_regressor.py (100%) rename python/cuml/{ => cuml}/dask/neighbors/nearest_neighbors.py (100%) rename python/cuml/{ => cuml}/dask/preprocessing/LabelEncoder.py (100%) rename python/cuml/{ => cuml}/dask/preprocessing/__init__.py (100%) rename python/cuml/{ => cuml}/dask/preprocessing/encoders.py (100%) rename python/cuml/{ => cuml}/dask/preprocessing/label.py (100%) rename python/cuml/{ => cuml}/dask/solvers/__init__.py (100%) rename python/cuml/{ => cuml}/dask/solvers/cd.py (100%) create mode 100644 python/cuml/cuml/datasets/CMakeLists.txt rename python/cuml/{ => cuml}/datasets/__init__.py (100%) rename python/cuml/{ => cuml}/datasets/arima.pyx (100%) rename python/cuml/{ => cuml}/datasets/blobs.py (100%) rename python/cuml/{ => cuml}/datasets/classification.py (100%) rename python/cuml/{ => cuml}/datasets/regression.pyx (100%) rename python/cuml/{ => cuml}/datasets/utils.py (100%) create mode 100644 python/cuml/cuml/decomposition/CMakeLists.txt rename python/cuml/{ => cuml}/decomposition/__init__.py (100%) rename python/cuml/{ => cuml}/decomposition/base_mg.pyx (100%) rename python/cuml/{ => cuml}/decomposition/incremental_pca.py (100%) rename python/cuml/{ => cuml}/decomposition/pca.pyx (100%) rename python/cuml/{ => cuml}/decomposition/pca_mg.pyx (100%) rename python/cuml/{ => cuml}/decomposition/tsvd.pyx (100%) rename python/cuml/{ => cuml}/decomposition/tsvd_mg.pyx (100%) rename python/cuml/{ => cuml}/decomposition/utils.pxd (100%) rename python/cuml/{ => cuml}/decomposition/utils_mg.pxd (100%) create mode 100644 python/cuml/cuml/ensemble/CMakeLists.txt rename python/cuml/{ => cuml}/ensemble/__init__.py (100%) rename python/cuml/{ => cuml}/ensemble/randomforest_common.pyx (100%) rename python/cuml/{ => cuml}/ensemble/randomforest_shared.pxd (100%) rename python/cuml/{ => cuml}/ensemble/randomforest_shared.pyx (100%) rename python/cuml/{ => cuml}/ensemble/randomforestclassifier.pyx (100%) rename python/cuml/{ => cuml}/ensemble/randomforestregressor.pyx (100%) rename python/cuml/{ => cuml}/experimental/__init__.py (100%) rename python/cuml/{ => cuml}/experimental/hyperopt_utils/__init__.py (100%) rename python/cuml/{ => cuml}/experimental/hyperopt_utils/plotting_utils.py (100%) rename python/cuml/{ => cuml}/experimental/hyperparams/HPO_demo.ipynb (100%) create mode 100644 python/cuml/cuml/experimental/linear_model/CMakeLists.txt rename python/cuml/{ => cuml}/experimental/linear_model/__init__.py (100%) rename python/cuml/{ => cuml}/experimental/linear_model/lars.pyx (100%) create mode 100644 python/cuml/cuml/explainer/CMakeLists.txt rename python/cuml/{ => cuml}/explainer/__init__.py (100%) rename python/cuml/{ => cuml}/explainer/base.pyx (100%) rename python/cuml/{ => cuml}/explainer/common.py (100%) rename python/cuml/{ => cuml}/explainer/kernel_shap.pyx (100%) rename python/cuml/{ => cuml}/explainer/permutation_shap.pyx (100%) rename python/cuml/{ => cuml}/explainer/sampling.py (100%) rename python/cuml/{ => cuml}/explainer/tree_shap.pyx (100%) rename python/cuml/{ => cuml}/feature_extraction/__init__.py (100%) rename python/cuml/{ => cuml}/feature_extraction/_stop_words.py (100%) rename python/cuml/{ => cuml}/feature_extraction/_tfidf.py (100%) rename python/cuml/{ => cuml}/feature_extraction/_tfidf_vectorizer.py (100%) rename python/cuml/{ => cuml}/feature_extraction/_vectorizers.py (100%) rename python/cuml/{ => cuml}/feature_extraction/text.py (100%) create mode 100644 python/cuml/cuml/fil/CMakeLists.txt rename python/cuml/{ => cuml}/fil/README.md (100%) rename python/cuml/{ => cuml}/fil/__init__.py (100%) rename python/cuml/{ => cuml}/fil/fil.pyx (100%) rename python/cuml/{ => cuml}/fil/fil_performance_nrows.png (100%) create mode 100644 python/cuml/cuml/internals/CMakeLists.txt rename python/cuml/{ => cuml}/internals/__init__.py (100%) rename python/cuml/{ => cuml}/internals/api_context_managers.py (100%) rename python/cuml/{ => cuml}/internals/api_decorators.py (100%) rename python/cuml/{ => cuml}/internals/base_helpers.py (100%) rename python/cuml/{ => cuml}/internals/callbacks_implems.h (100%) rename python/cuml/{ => cuml}/internals/global_settings.py (100%) rename python/cuml/{ => cuml}/internals/internals.pyx (100%) create mode 100644 python/cuml/cuml/kernel_ridge/CMakeLists.txt rename python/cuml/{ => cuml}/kernel_ridge/__init__.py (100%) rename python/cuml/{ => cuml}/kernel_ridge/kernel_ridge.pyx (100%) create mode 100644 python/cuml/cuml/linear_model/CMakeLists.txt rename python/cuml/{ => cuml}/linear_model/__init__.py (100%) rename python/cuml/{ => cuml}/linear_model/base.pyx (100%) rename python/cuml/{ => cuml}/linear_model/base_mg.pyx (100%) rename python/cuml/{ => cuml}/linear_model/elastic_net.pyx (100%) rename python/cuml/{ => cuml}/linear_model/lasso.py (100%) rename python/cuml/{ => cuml}/linear_model/linear_regression.pyx (100%) rename python/cuml/{ => cuml}/linear_model/linear_regression_mg.pyx (100%) rename python/cuml/{ => cuml}/linear_model/logistic_regression.pyx (100%) rename python/cuml/{ => cuml}/linear_model/mbsgd_classifier.pyx (100%) rename python/cuml/{ => cuml}/linear_model/mbsgd_regressor.pyx (100%) rename python/cuml/{ => cuml}/linear_model/ridge.pyx (100%) rename python/cuml/{ => cuml}/linear_model/ridge_mg.pyx (100%) create mode 100644 python/cuml/cuml/manifold/CMakeLists.txt rename python/cuml/{ => cuml}/manifold/__init__.py (100%) rename python/cuml/{ => cuml}/manifold/simpl_set.pyx (100%) rename python/cuml/{ => cuml}/manifold/t_sne.pyx (100%) rename python/cuml/{ => cuml}/manifold/umap.pyx (100%) rename python/cuml/{ => cuml}/manifold/umap_utils.pxd (100%) rename python/cuml/{ => cuml}/manifold/umap_utils.pyx (100%) create mode 100644 python/cuml/cuml/metrics/CMakeLists.txt rename python/cuml/{ => cuml}/metrics/__init__.py (100%) rename python/cuml/{ => cuml}/metrics/_classification.py (100%) rename python/cuml/{ => cuml}/metrics/_ranking.py (100%) rename python/cuml/{ => cuml}/metrics/accuracy.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/__init__.py (100%) rename python/cuml/{ => cuml}/metrics/cluster/adjusted_rand_index.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/completeness_score.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/entropy.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/homogeneity_score.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/mutual_info_score.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/silhouette_score.pyx (100%) rename python/cuml/{ => cuml}/metrics/cluster/utils.pyx (100%) rename python/cuml/{ => cuml}/metrics/confusion_matrix.py (100%) rename python/cuml/{ => cuml}/metrics/distance_type.pxd (100%) rename python/cuml/{ => cuml}/metrics/hinge_loss.pyx (100%) rename python/cuml/{ => cuml}/metrics/kl_divergence.pyx (100%) rename python/cuml/{ => cuml}/metrics/pairwise_distances.pyx (100%) rename python/cuml/{ => cuml}/metrics/pairwise_kernels.py (100%) rename python/cuml/{ => cuml}/metrics/regression.pxd (100%) rename python/cuml/{ => cuml}/metrics/regression.pyx (100%) rename python/cuml/{ => cuml}/metrics/trustworthiness.pyx (100%) rename python/cuml/{ => cuml}/metrics/utils.py (100%) rename python/cuml/{ => cuml}/model_selection/__init__.py (100%) rename python/cuml/{ => cuml}/model_selection/_split.py (100%) rename python/cuml/{ => cuml}/multiclass/__init__.py (100%) rename python/cuml/{ => cuml}/multiclass/multiclass.py (100%) rename python/cuml/{ => cuml}/naive_bayes/__init__.py (100%) rename python/cuml/{ => cuml}/naive_bayes/naive_bayes.py (100%) create mode 100644 python/cuml/cuml/neighbors/CMakeLists.txt rename python/cuml/{ => cuml}/neighbors/__init__.py (100%) rename python/cuml/{ => cuml}/neighbors/ann.pxd (100%) rename python/cuml/{ => cuml}/neighbors/ann.pyx (100%) rename python/cuml/{ => cuml}/neighbors/kernel_density.py (100%) rename python/cuml/{ => cuml}/neighbors/kneighbors_classifier.pyx (100%) rename python/cuml/{ => cuml}/neighbors/kneighbors_classifier_mg.pyx (100%) rename python/cuml/{ => cuml}/neighbors/kneighbors_regressor.pyx (100%) rename python/cuml/{ => cuml}/neighbors/kneighbors_regressor_mg.pyx (100%) rename python/cuml/{ => cuml}/neighbors/nearest_neighbors.pyx (100%) rename python/cuml/{ => cuml}/neighbors/nearest_neighbors_mg.pyx (100%) rename python/cuml/{ => cuml}/pipeline/__init__.py (100%) rename python/cuml/{ => cuml}/preprocessing/LabelEncoder.py (100%) rename python/cuml/{ => cuml}/preprocessing/TargetEncoder.py (100%) rename python/cuml/{ => cuml}/preprocessing/__init__.py (100%) rename python/cuml/{ => cuml}/preprocessing/encoders.py (100%) rename python/cuml/{ => cuml}/preprocessing/label.py (100%) rename python/cuml/{ => cuml}/preprocessing/onehotencoder_mg.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/__init__.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/__init__.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/__init__.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py (100%) rename python/cuml/{ => cuml}/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py (100%) rename python/cuml/{ => cuml}/prims/__init__.py (100%) rename python/cuml/{ => cuml}/prims/array.py (100%) rename python/cuml/{ => cuml}/prims/label/__init__.py (100%) rename python/cuml/{ => cuml}/prims/label/classlabels.py (100%) rename python/cuml/{ => cuml}/prims/stats/__init__.py (100%) rename python/cuml/{ => cuml}/prims/stats/covariance.py (100%) create mode 100644 python/cuml/cuml/random_projection/CMakeLists.txt rename python/cuml/{ => cuml}/random_projection/__init__.py (100%) rename python/cuml/{ => cuml}/random_projection/random_projection.pyx (100%) create mode 100644 python/cuml/cuml/solvers/CMakeLists.txt rename python/cuml/{ => cuml}/solvers/__init__.py (100%) rename python/cuml/{ => cuml}/solvers/cd.pyx (100%) rename python/cuml/{ => cuml}/solvers/cd_mg.pyx (100%) rename python/cuml/{ => cuml}/solvers/qn.pyx (100%) rename python/cuml/{ => cuml}/solvers/sgd.pyx (100%) create mode 100644 python/cuml/cuml/svm/CMakeLists.txt rename python/cuml/{ => cuml}/svm/__init__.py (100%) rename python/cuml/{ => cuml}/svm/linear.pyx (100%) rename python/cuml/{ => cuml}/svm/linear_svc.py (100%) rename python/cuml/{ => cuml}/svm/linear_svr.py (100%) rename python/cuml/{ => cuml}/svm/svc.pyx (100%) rename python/cuml/{ => cuml}/svm/svm_base.pyx (100%) rename python/cuml/{ => cuml}/svm/svr.pyx (100%) rename python/cuml/{ => cuml}/testing/__init__.py (100%) rename python/cuml/{ => cuml}/testing/dask/__init__.py (100%) rename python/cuml/{ => cuml}/testing/dask/utils.py (100%) rename python/cuml/{ => cuml}/testing/plugins/__init__.py (100%) rename python/cuml/{ => cuml}/testing/plugins/quick_run_plugin.py (100%) rename python/cuml/{ => cuml}/testing/test_preproc_utils.py (100%) rename python/cuml/{ => cuml}/testing/utils.py (100%) rename python/cuml/{ => cuml}/tests/conftest.py (100%) rename python/cuml/{ => cuml}/tests/dask/conftest.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_base.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_coordinate_descent.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_dask_arr_utils.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_dask_sql.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_dask_utils.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_datasets.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_dbscan.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_doctest.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_func.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_global_settings.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_input_utils.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_kmeans.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_kneighbors_classifier.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_kneighbors_regressor.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_label_binarizer.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_label_encoder.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_linear_regression.py (100%) rename python/cuml/{test => cuml/tests}/dask/test_logistic_regression.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_metrics.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_naive_bayes.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_nearest_neighbors.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_one_hot_encoder.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_pca.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_random_forest.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_ridge_regression.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_serialization.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_tfidf.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_tsvd.py (100%) rename python/cuml/{ => cuml}/tests/dask/test_umap.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_explainer_base.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_explainer_common.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_explainer_kernel_shap.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_explainer_permutation_shap.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_gpu_treeshap.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_sampling.py (100%) rename python/cuml/{ => cuml}/tests/explainer/test_shap_plotting.py (100%) rename python/cuml/{ => cuml}/tests/stemmer_tests/test_len_utils.py (100%) rename python/cuml/{ => cuml}/tests/stemmer_tests/test_porter_stemmer_rules.py (100%) rename python/cuml/{ => cuml}/tests/stemmer_tests/test_stemmer.py (100%) rename python/cuml/{ => cuml}/tests/stemmer_tests/test_steps.py (100%) rename python/cuml/{ => cuml}/tests/stemmer_tests/test_suffix_utils.py (100%) rename python/cuml/{ => cuml}/tests/test_adapters.py (100%) rename python/cuml/{ => cuml}/tests/test_agglomerative.py (100%) rename python/cuml/{ => cuml}/tests/test_allocator.py (100%) rename python/cuml/{ => cuml}/tests/test_api.py (100%) rename python/cuml/{ => cuml}/tests/test_arima.py (100%) rename python/cuml/{ => cuml}/tests/test_array.py (100%) rename python/cuml/{ => cuml}/tests/test_array_sparse.py (100%) rename python/cuml/{ => cuml}/tests/test_auto_arima.py (100%) rename python/cuml/{ => cuml}/tests/test_base.py (100%) rename python/cuml/{ => cuml}/tests/test_batched_lbfgs.py (100%) rename python/cuml/{ => cuml}/tests/test_benchmark.py (100%) rename python/cuml/{ => cuml}/tests/test_class_enumerator.py (100%) rename python/cuml/{ => cuml}/tests/test_compose.py (100%) rename python/cuml/{ => cuml}/tests/test_coordinate_descent.py (100%) rename python/cuml/{ => cuml}/tests/test_cuml_descr_decor.py (100%) rename python/cuml/{ => cuml}/tests/test_dataset_generator_types.py (100%) rename python/cuml/{ => cuml}/tests/test_dbscan.py (100%) rename python/cuml/{ => cuml}/tests/test_doctest.py (100%) rename python/cuml/{ => cuml}/tests/test_fil.py (100%) rename python/cuml/{ => cuml}/tests/test_hdbscan.py (100%) rename python/cuml/{ => cuml}/tests/test_holtwinters.py (100%) rename python/cuml/{ => cuml}/tests/test_incremental_pca.py (100%) rename python/cuml/{ => cuml}/tests/test_input_utils.py (100%) rename python/cuml/{ => cuml}/tests/test_internals_api.py (100%) rename python/cuml/{ => cuml}/tests/test_kernel_density.py (100%) rename python/cuml/{ => cuml}/tests/test_kernel_ridge.py (100%) rename python/cuml/{ => cuml}/tests/test_kmeans.py (100%) rename python/cuml/{ => cuml}/tests/test_kneighbors_classifier.py (100%) rename python/cuml/{ => cuml}/tests/test_kneighbors_regressor.py (100%) rename python/cuml/{ => cuml}/tests/test_label_binarizer.py (100%) rename python/cuml/{ => cuml}/tests/test_label_encoder.py (100%) rename python/cuml/{ => cuml}/tests/test_lars.py (100%) rename python/cuml/{ => cuml}/tests/test_linear_model.py (100%) rename python/cuml/{ => cuml}/tests/test_linear_svm.py (100%) rename python/cuml/{ => cuml}/tests/test_logger.py (100%) rename python/cuml/{ => cuml}/tests/test_make_arima.py (100%) rename python/cuml/{ => cuml}/tests/test_make_blobs.py (100%) rename python/cuml/{ => cuml}/tests/test_make_classification.py (100%) rename python/cuml/{ => cuml}/tests/test_make_regression.py (100%) rename python/cuml/{ => cuml}/tests/test_mbsgd_classifier.py (100%) rename python/cuml/{ => cuml}/tests/test_mbsgd_regressor.py (100%) rename python/cuml/{ => cuml}/tests/test_meta_estimators.py (100%) rename python/cuml/{ => cuml}/tests/test_metrics.py (100%) rename python/cuml/{ => cuml}/tests/test_module_config.py (100%) rename python/cuml/{ => cuml}/tests/test_multiclass.py (100%) rename python/cuml/{ => cuml}/tests/test_naive_bayes.py (100%) rename python/cuml/{ => cuml}/tests/test_nearest_neighbors.py (100%) rename python/cuml/{ => cuml}/tests/test_one_hot_encoder.py (100%) rename python/cuml/{ => cuml}/tests/test_pca.py (100%) rename python/cuml/{ => cuml}/tests/test_pickle.py (100%) rename python/cuml/{ => cuml}/tests/test_preprocessing.py (100%) rename python/cuml/{ => cuml}/tests/test_prims.py (100%) rename python/cuml/{ => cuml}/tests/test_qn.py (100%) rename python/cuml/{ => cuml}/tests/test_random_forest.py (100%) rename python/cuml/{ => cuml}/tests/test_random_projection.py (100%) rename python/cuml/{ => cuml}/tests/test_serialize.py (100%) rename python/cuml/{ => cuml}/tests/test_sgd.py (100%) rename python/cuml/{ => cuml}/tests/test_simpl_set.py (100%) rename python/cuml/{ => cuml}/tests/test_solver_attributes.py (100%) rename python/cuml/{ => cuml}/tests/test_sparsefuncs.py (100%) rename python/cuml/{ => cuml}/tests/test_stationarity.py (100%) rename python/cuml/{ => cuml}/tests/test_stats.py (100%) rename python/cuml/{ => cuml}/tests/test_svm.py (100%) rename python/cuml/{ => cuml}/tests/test_target_encoder.py (100%) rename python/cuml/{ => cuml}/tests/test_text_feature_extraction.py (100%) rename python/cuml/{ => cuml}/tests/test_tfidf.py (100%) rename python/cuml/{ => cuml}/tests/test_thirdparty.py (100%) rename python/cuml/{ => cuml}/tests/test_train_test_split.py (100%) rename python/cuml/{ => cuml}/tests/test_trustworthiness.py (100%) rename python/cuml/{ => cuml}/tests/test_tsne.py (100%) rename python/cuml/{ => cuml}/tests/test_tsvd.py (100%) rename python/cuml/{ => cuml}/tests/test_umap.py (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/README.md (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/alcohol.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/cattle.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/deaths_by_region.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/endog_deaths_by_region_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/exog_deaths_by_region_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/guest_nights_by_region.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/guest_nights_by_region_missing.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/hourly_earnings_by_industry.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/hourly_earnings_by_industry_missing.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/long_term_arrivals_by_citizenship.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/net_migrations_auckland_by_age.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/passenger_movements.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/police_recorded_crime.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/population_estimate.csv (100%) rename python/cuml/{ => cuml}/tests/ts_datasets/population_estimate_missing.csv (100%) rename python/cuml/{ => cuml}/thirdparty_adapters/__init__.py (100%) rename python/cuml/{ => cuml}/thirdparty_adapters/adapters.py (100%) rename python/cuml/{ => cuml}/thirdparty_adapters/sparsefuncs_fast.py (100%) create mode 100644 python/cuml/cuml/tsa/CMakeLists.txt rename python/cuml/{ => cuml}/tsa/__init__.py (100%) rename python/cuml/{ => cuml}/tsa/arima.pxd (100%) rename python/cuml/{ => cuml}/tsa/arima.pyx (100%) rename python/cuml/{ => cuml}/tsa/auto_arima.pyx (100%) rename python/cuml/{ => cuml}/tsa/batched_lbfgs.py (100%) rename python/cuml/{ => cuml}/tsa/holtwinters.pyx (100%) rename python/cuml/{ => cuml}/tsa/seasonality.pyx (100%) rename python/cuml/{ => cuml}/tsa/stationarity.pyx (100%) create mode 100644 python/cuml/pyproject.toml rename python/{ => cuml}/pytest.ini (100%) rename python/{ => cuml}/setup.py (51%) rename python/{ => cuml}/setuputils.py (94%) rename python/{ => cuml}/versioneer.py (100%) delete mode 100644 python/cython_build_ext.py diff --git a/.gitignore b/.gitignore index 045470926e..da3de1784b 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,8 @@ log dask-worker-space/ tmp/ .hypothesis +wheels/ + _skbuild/ ## files pickled in notebook when ran during python docstring generation docs/source/*.model diff --git a/conda/environments/cuml_dev_cuda11.5.yml b/conda/environments/cuml_dev_cuda11.5.yml index e9f677cdb6..5dfd988e1e 100644 --- a/conda/environments/cuml_dev_cuda11.5.yml +++ b/conda/environments/cuml_dev_cuda11.5.yml @@ -10,6 +10,8 @@ dependencies: - rapids-build-env=22.08.* - rapids-notebook-env=22.08.* - rapids-doc-env=22.08.* +- cmake_setuptools>=0.1.3 +- scikit-build>=0.13.1 - cudf=22.08.* - rmm=22.08.* - libcumlprims=22.08.* diff --git a/conda/recipes/cuml/conda_build_config.yaml b/conda/recipes/cuml/conda_build_config.yaml index 322fe6faac..8db7dbb792 100644 --- a/conda/recipes/cuml/conda_build_config.yaml +++ b/conda/recipes/cuml/conda_build_config.yaml @@ -7,5 +7,8 @@ cxx_compiler_version: cuda_compiler: - nvcc +cmake_version: + - ">=3.20.1,!=3.23.0" + sysroot_version: - "2.17" diff --git a/conda/recipes/cuml/meta.yaml b/conda/recipes/cuml/meta.yaml index abaa4701c2..c5090dbbcb 100644 --- a/conda/recipes/cuml/meta.yaml +++ b/conda/recipes/cuml/meta.yaml @@ -26,7 +26,7 @@ build: requirements: build: - - cmake>=3.20.1,!=3.23.0 + - cmake {{ cmake_version }} - {{ compiler('c') }} - {{ compiler('cxx') }} - {{ compiler('cuda') }} {{ cuda_version }} @@ -34,6 +34,7 @@ requirements: host: - python x.x - setuptools + - cmake {{ cmake_version }} - cython>=0.29,<0.30 - treelite=2.4.0 - cudf {{ minor_version }} diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index dc70faf113..ebcc12751b 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -72,36 +72,36 @@ option(CUML_USE_RAFT_STATIC "Build and statically link the RAFT libraries" OFF) option(CUML_USE_FAISS_STATIC "Build and statically link the FAISS library for nearest neighbors search on GPU" OFF) option(CUML_USE_TREELITE_STATIC "Build and statically link the treelite library" OFF) -message(VERBOSE "CUML: Building libcuml_c shared library. Contains the cuML C API: ${BUILD_CUML_C_LIBRARY}") -message(VERBOSE "CUML: Building libcuml shared library: ${BUILD_CUML_CPP_LIBRARY}") -message(VERBOSE "CUML: Building cuML algorithm tests: ${BUILD_CUML_TESTS}") -message(VERBOSE "CUML: Building cuML multigpu algorithm tests: ${BUILD_CUML_MG_TESTS}") -message(VERBOSE "CUML: Building ml-prims tests: ${BUILD_PRIMS_TESTS}") -message(VERBOSE "CUML: Building C++ API usage examples: ${BUILD_CUML_EXAMPLES}") -message(VERBOSE "CUML: Building cuML C++ benchmark tests: ${BUILD_CUML_BENCH}") -message(VERBOSE "CUML: Building ml-prims C++ benchmark tests: ${BUILD_CUML_PRIMS_BENCH}") -message(VERBOSE "CUML: Building the standard NCCL+UCX Communicator: ${BUILD_CUML_STD_COMMS}") -message(VERBOSE "CUML: Building the MPI+NCCL Communicator (used for testing): ${BUILD_CUML_MPI_COMMS}") -message(VERBOSE "CUML: Enabling detection of conda environment for dependencies: ${DETECT_CONDA_ENV}") -message(VERBOSE "CUML: Disabling OpenMP: ${DISABLE_OPENMP}") -message(VERBOSE "CUML: Enabling algorithms that use libcumlprims_mg: ${ENABLE_CUMLPRIMS_MG}") -message(VERBOSE "CUML: Enabling kernel resource usage info: ${KERNEL_INFO}") -message(VERBOSE "CUML: Enabling kernelinfo in nvcc: ${CUDA_ENABLE_KERNEL_INFO}") -message(VERBOSE "CUML: Enabling lineinfo in nvcc: ${CUDA_ENABLE_LINE_INFO}") -message(VERBOSE "CUML: Enabling nvtx markers: ${NVTX}") -message(VERBOSE "CUML: Disabling all mnmg components and comms libraries: ${SINGLEGPU}") -message(VERBOSE "CUML: Cache build artifacts with ccache: ${USE_CCACHE}") -message(VERBOSE "CUML: Build and statically link RAFT libraries: ${CUML_USE_RAFT_STATIC}") -message(VERBOSE "CUML: Build and statically link FAISS library: ${CUML_USE_FAISS_STATIC}") -message(VERBOSE "CUML: Build and statically link Treelite library: ${CUML_USE_TREELITE_STATIC}") +message(VERBOSE "CUML_CPP: Building libcuml_c shared library. Contains the cuML C API: ${BUILD_CUML_C_LIBRARY}") +message(VERBOSE "CUML_CPP: Building libcuml shared library: ${BUILD_CUML_CPP_LIBRARY}") +message(VERBOSE "CUML_CPP: Building cuML algorithm tests: ${BUILD_CUML_TESTS}") +message(VERBOSE "CUML_CPP: Building cuML multigpu algorithm tests: ${BUILD_CUML_MG_TESTS}") +message(VERBOSE "CUML_CPP: Building ml-prims tests: ${BUILD_PRIMS_TESTS}") +message(VERBOSE "CUML_CPP: Building C++ API usage examples: ${BUILD_CUML_EXAMPLES}") +message(VERBOSE "CUML_CPP: Building cuML C++ benchmark tests: ${BUILD_CUML_BENCH}") +message(VERBOSE "CUML_CPP: Building ml-prims C++ benchmark tests: ${BUILD_CUML_PRIMS_BENCH}") +message(VERBOSE "CUML_CPP: Building the standard NCCL+UCX Communicator: ${BUILD_CUML_STD_COMMS}") +message(VERBOSE "CUML_CPP: Building the MPI+NCCL Communicator (used for testing): ${BUILD_CUML_MPI_COMMS}") +message(VERBOSE "CUML_CPP: Enabling detection of conda environment for dependencies: ${DETECT_CONDA_ENV}") +message(VERBOSE "CUML_CPP: Disabling OpenMP: ${DISABLE_OPENMP}") +message(VERBOSE "CUML_CPP: Enabling algorithms that use libcumlprims_mg: ${ENABLE_CUMLPRIMS_MG}") +message(VERBOSE "CUML_CPP: Enabling kernel resource usage info: ${KERNEL_INFO}") +message(VERBOSE "CUML_CPP: Enabling kernelinfo in nvcc: ${CUDA_ENABLE_KERNEL_INFO}") +message(VERBOSE "CUML_CPP: Enabling lineinfo in nvcc: ${CUDA_ENABLE_LINE_INFO}") +message(VERBOSE "CUML_CPP: Enabling nvtx markers: ${NVTX}") +message(VERBOSE "CUML_CPP: Disabling all mnmg components and comms libraries: ${SINGLEGPU}") +message(VERBOSE "CUML_CPP: Cache build artifacts with ccache: ${USE_CCACHE}") +message(VERBOSE "CUML_CPP: Build and statically link RAFT libraries: ${CUML_USE_RAFT_STATIC}") +message(VERBOSE "CUML_CPP: Build and statically link FAISS library: ${CUML_USE_FAISS_STATIC}") +message(VERBOSE "CUML_CPP: Build and statically link Treelite library: ${CUML_USE_TREELITE_STATIC}") set(CUML_ALGORITHMS "ALL" CACHE STRING "Experimental: Choose which algorithms are built into libcuml++.so. Can specify individual algorithms or groups in a semicolon-separated list.") -message(VERBOSE "CUML: Building libcuml++ with algoriths: '${CUML_ALGORITHMS}'.") +message(VERBOSE "CUML_CPP: Building libcuml++ with algoriths: '${CUML_ALGORITHMS}'.") # Set RMM logging level set(RMM_LOGGING_LEVEL "INFO" CACHE STRING "Choose the logging level.") set_property(CACHE RMM_LOGGING_LEVEL PROPERTY STRINGS "TRACE" "DEBUG" "INFO" "WARN" "ERROR" "CRITICAL" "OFF") -message(VERBOSE "CUML: RMM_LOGGING_LEVEL = '${RMM_LOGGING_LEVEL}'.") +message(VERBOSE "CUML_CPP: RMM_LOGGING_LEVEL = '${RMM_LOGGING_LEVEL}'.") ############################################################################## # - Target names ------------------------------------------------------------- @@ -121,7 +121,7 @@ set(PRIMS_BENCH_TARGET "prims_benchmark") if(DETECT_CONDA_ENV) rapids_cmake_support_conda_env( conda_env MODIFY_PREFIX_PATH ) if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND DEFINED ENV{CONDA_PREFIX}) - message(STATUS "CUML: No CMAKE_INSTALL_PREFIX argument detected, setting to: $ENV{CONDA_PREFIX}") + message(STATUS "CUML_CPP: No CMAKE_INSTALL_PREFIX argument detected, setting to: $ENV{CONDA_PREFIX}") set(CMAKE_INSTALL_PREFIX "$ENV{CONDA_PREFIX}") endif() endif() @@ -132,7 +132,7 @@ endif() if (NOT DISABLE_OPENMP) find_package(OpenMP) if(OpenMP_FOUND) - message(STATUS "CUML: OpenMP found in ${OPENMP_INCLUDE_DIRS}") + message(STATUS "CUML_CPP: OpenMP found in ${OPENMP_INCLUDE_DIRS}") endif() endif() @@ -170,8 +170,8 @@ endif() # SingleGPU build disables cumlprims_mg and comms components if(SINGLEGPU) - message(STATUS "Detected SINGLEGPU build option") - message(STATUS "Disabling Multi-GPU components and comms libraries") + message(STATUS "CUML_CPP: Detected SINGLEGPU build option") + message(STATUS "CUML_CPP: Disabling Multi-GPU components and comms libraries") set(BUILD_CUML_MG_TESTS OFF) set(BUILD_CUML_STD_COMMS OFF) set(BUILD_CUML_MPI_COMMS OFF) @@ -180,7 +180,7 @@ if(SINGLEGPU) endif() if(BUILD_CUML_MG_TESTS AND NOT SINGLEGPU) - message(STATUS "Detected BUILD_CUML_MG_TESTS set to ON. Enabling BUILD_CUML_MPI_COMMS") + message(STATUS "CUML_CPP: Detected BUILD_CUML_MG_TESTS set to ON. Enabling BUILD_CUML_MPI_COMMS") set(BUILD_CUML_MPI_COMMS ON) endif() diff --git a/python/cuml/CMakeLists.txt b/python/cuml/CMakeLists.txt new file mode 100644 index 0000000000..4f2f8b5372 --- /dev/null +++ b/python/cuml/CMakeLists.txt @@ -0,0 +1,101 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + +cmake_minimum_required(VERSION 3.20.1 FATAL_ERROR) + +set(cuml_version 22.08.00) + +file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-22.08/RAPIDS.cmake + ${CMAKE_BINARY_DIR}/RAPIDS.cmake) +include(${CMAKE_BINARY_DIR}/RAPIDS.cmake) + +project( + cuml-python + VERSION ${cuml_version} + LANGUAGES # TODO: Building Python extension modules via the python_extension_module requires the C + # language to be enabled here. The test project that is built in scikit-build to verify + # various linking options for the python library is hardcoded to build with C, so until + # that is fixed we need to keep C. + C CXX +) + +################################################################################ +# - User Options -------------------------------------------------------------- +option(FIND_CUML_CPP "Search for existing CUML C++ installations before defaulting to local files" OFF) + +message(VERBOSE "CUML_PY: Searching for existing CUML C++ installations before defaulting to local files: ${FIND_CUML_CPP}") + + +################################################################################ +# - Process User Options ------------------------------------------------------ + +# If the user requested it, we attempt to find cuml. +if(FIND_CUML_CPP) + find_package(cuml ${cuml_version} REQUIRED) +else() + set(cuml_FOUND OFF) +endif() + + +if(NOT cuml_FOUND) + # TODO: This will not be necessary once we upgrade to CMake 3.22, which will pull in the required + # languages for the C++ project even if this project does not require those languges. + include(rapids-cuda) + rapids_cuda_init_architectures(cuml-python) + enable_language(CUDA) + + # Since cuml only enables CUDA optionally, we need to manually include the file that + # rapids_cuda_init_architectures relies on `project` including. + include("${CMAKE_PROJECT_cuml-python_INCLUDE}") + + set(BUILD_TESTS OFF) + set(BUILD_BENCHMARKS OFF) + message(STATUS "installing packages") + add_subdirectory(../../cpp cuml-cpp) + + # Since there are multiple subpackages of cudf._lib that require access to libcudf, we place the + # library in the _lib/cpp directory as a single source of truth and modify the other rpaths + # appropriately. + install(TARGETS cuml DESTINATION cuml/library) +endif() + + +include(rapids-cython) +rapids_cython_init() + +# FIXME: Update build directory +# add_subdirectory(cuml) + +add_subdirectory(cuml/common) +add_subdirectory(cuml/internals) + +add_subdirectory(cuml/cluster) +add_subdirectory(cuml/common) +add_subdirectory(cuml/datasets) +add_subdirectory(cuml/decomposition) +add_subdirectory(cuml/ensemble) +add_subdirectory(cuml/explainer) +add_subdirectory(cuml/fil) +add_subdirectory(cuml/kernel_ridge) +add_subdirectory(cuml/linear_model) +add_subdirectory(cuml/manifold) +add_subdirectory(cuml/metrics) +add_subdirectory(cuml/neighbors) +add_subdirectory(cuml/random_projection) +add_subdirectory(cuml/solvers) +add_subdirectory(cuml/svm) +add_subdirectory(cuml/thirdparty_adapters) +add_subdirectory(cuml/tsa) + +add_subdirectory(cuml/experimental/linear_model) diff --git a/python/cuml/__init__.py b/python/cuml/cuml/__init__.py similarity index 100% rename from python/cuml/__init__.py rename to python/cuml/cuml/__init__.py diff --git a/python/cuml/_thirdparty/__init__.py b/python/cuml/cuml/_thirdparty/__init__.py similarity index 100% rename from python/cuml/_thirdparty/__init__.py rename to python/cuml/cuml/_thirdparty/__init__.py diff --git a/python/cuml/_thirdparty/sklearn/README.md b/python/cuml/cuml/_thirdparty/sklearn/README.md similarity index 100% rename from python/cuml/_thirdparty/sklearn/README.md rename to python/cuml/cuml/_thirdparty/sklearn/README.md diff --git a/python/cuml/_thirdparty/sklearn/__init__.py b/python/cuml/cuml/_thirdparty/sklearn/__init__.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/__init__.py rename to python/cuml/cuml/_thirdparty/sklearn/__init__.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/__init__.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/__init__.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/__init__.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/__init__.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/_data.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/_data.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/_discretization.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_discretization.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/_discretization.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/_discretization.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py diff --git a/python/cuml/_thirdparty/sklearn/preprocessing/_imputation.py b/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_imputation.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/preprocessing/_imputation.py rename to python/cuml/cuml/_thirdparty/sklearn/preprocessing/_imputation.py diff --git a/python/cuml/_thirdparty/sklearn/utils/__init__.py b/python/cuml/cuml/_thirdparty/sklearn/utils/__init__.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/utils/__init__.py rename to python/cuml/cuml/_thirdparty/sklearn/utils/__init__.py diff --git a/python/cuml/_thirdparty/sklearn/utils/extmath.py b/python/cuml/cuml/_thirdparty/sklearn/utils/extmath.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/utils/extmath.py rename to python/cuml/cuml/_thirdparty/sklearn/utils/extmath.py diff --git a/python/cuml/_thirdparty/sklearn/utils/skl_dependencies.py b/python/cuml/cuml/_thirdparty/sklearn/utils/skl_dependencies.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/utils/skl_dependencies.py rename to python/cuml/cuml/_thirdparty/sklearn/utils/skl_dependencies.py diff --git a/python/cuml/_thirdparty/sklearn/utils/sparsefuncs.py b/python/cuml/cuml/_thirdparty/sklearn/utils/sparsefuncs.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/utils/sparsefuncs.py rename to python/cuml/cuml/_thirdparty/sklearn/utils/sparsefuncs.py diff --git a/python/cuml/_thirdparty/sklearn/utils/validation.py b/python/cuml/cuml/_thirdparty/sklearn/utils/validation.py similarity index 100% rename from python/cuml/_thirdparty/sklearn/utils/validation.py rename to python/cuml/cuml/_thirdparty/sklearn/utils/validation.py diff --git a/python/cuml/_version.py b/python/cuml/cuml/_version.py similarity index 100% rename from python/cuml/_version.py rename to python/cuml/cuml/_version.py diff --git a/python/cuml/benchmark/__init__.py b/python/cuml/cuml/benchmark/__init__.py similarity index 100% rename from python/cuml/benchmark/__init__.py rename to python/cuml/cuml/benchmark/__init__.py diff --git a/python/cuml/benchmark/algorithms.py b/python/cuml/cuml/benchmark/algorithms.py similarity index 100% rename from python/cuml/benchmark/algorithms.py rename to python/cuml/cuml/benchmark/algorithms.py diff --git a/python/cuml/benchmark/automated/__init__.py b/python/cuml/cuml/benchmark/automated/__init__.py similarity index 100% rename from python/cuml/benchmark/automated/__init__.py rename to python/cuml/cuml/benchmark/automated/__init__.py diff --git a/python/cuml/benchmark/automated/bench_classification.py b/python/cuml/cuml/benchmark/automated/bench_classification.py similarity index 100% rename from python/cuml/benchmark/automated/bench_classification.py rename to python/cuml/cuml/benchmark/automated/bench_classification.py diff --git a/python/cuml/benchmark/automated/bench_dimensionality_reduction.py b/python/cuml/cuml/benchmark/automated/bench_dimensionality_reduction.py similarity index 100% rename from python/cuml/benchmark/automated/bench_dimensionality_reduction.py rename to python/cuml/cuml/benchmark/automated/bench_dimensionality_reduction.py diff --git a/python/cuml/benchmark/automated/bench_preprocessing.py b/python/cuml/cuml/benchmark/automated/bench_preprocessing.py similarity index 100% rename from python/cuml/benchmark/automated/bench_preprocessing.py rename to python/cuml/cuml/benchmark/automated/bench_preprocessing.py diff --git a/python/cuml/benchmark/automated/bench_random_forest.py b/python/cuml/cuml/benchmark/automated/bench_random_forest.py similarity index 100% rename from python/cuml/benchmark/automated/bench_random_forest.py rename to python/cuml/cuml/benchmark/automated/bench_random_forest.py diff --git a/python/cuml/benchmark/automated/bench_regression.py b/python/cuml/cuml/benchmark/automated/bench_regression.py similarity index 100% rename from python/cuml/benchmark/automated/bench_regression.py rename to python/cuml/cuml/benchmark/automated/bench_regression.py diff --git a/python/cuml/benchmark/automated/dask/__init__.py b/python/cuml/cuml/benchmark/automated/dask/__init__.py similarity index 100% rename from python/cuml/benchmark/automated/dask/__init__.py rename to python/cuml/cuml/benchmark/automated/dask/__init__.py diff --git a/python/cuml/benchmark/automated/dask/bench_mnmg_classification.py b/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_classification.py similarity index 100% rename from python/cuml/benchmark/automated/dask/bench_mnmg_classification.py rename to python/cuml/cuml/benchmark/automated/dask/bench_mnmg_classification.py diff --git a/python/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py b/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py similarity index 100% rename from python/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py rename to python/cuml/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py diff --git a/python/cuml/benchmark/automated/dask/bench_mnmg_regression.py b/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_regression.py similarity index 100% rename from python/cuml/benchmark/automated/dask/bench_mnmg_regression.py rename to python/cuml/cuml/benchmark/automated/dask/bench_mnmg_regression.py diff --git a/python/cuml/benchmark/automated/dask/conftest.py b/python/cuml/cuml/benchmark/automated/dask/conftest.py similarity index 100% rename from python/cuml/benchmark/automated/dask/conftest.py rename to python/cuml/cuml/benchmark/automated/dask/conftest.py diff --git a/python/cuml/benchmark/automated/pytest.ini b/python/cuml/cuml/benchmark/automated/pytest.ini similarity index 100% rename from python/cuml/benchmark/automated/pytest.ini rename to python/cuml/cuml/benchmark/automated/pytest.ini diff --git a/python/cuml/benchmark/automated/utils/__init__.py b/python/cuml/cuml/benchmark/automated/utils/__init__.py similarity index 100% rename from python/cuml/benchmark/automated/utils/__init__.py rename to python/cuml/cuml/benchmark/automated/utils/__init__.py diff --git a/python/cuml/benchmark/automated/utils/auto_nvtx_bench.py b/python/cuml/cuml/benchmark/automated/utils/auto_nvtx_bench.py similarity index 100% rename from python/cuml/benchmark/automated/utils/auto_nvtx_bench.py rename to python/cuml/cuml/benchmark/automated/utils/auto_nvtx_bench.py diff --git a/python/cuml/benchmark/automated/utils/utils.py b/python/cuml/cuml/benchmark/automated/utils/utils.py similarity index 100% rename from python/cuml/benchmark/automated/utils/utils.py rename to python/cuml/cuml/benchmark/automated/utils/utils.py diff --git a/python/cuml/benchmark/bench_helper_funcs.py b/python/cuml/cuml/benchmark/bench_helper_funcs.py similarity index 100% rename from python/cuml/benchmark/bench_helper_funcs.py rename to python/cuml/cuml/benchmark/bench_helper_funcs.py diff --git a/python/cuml/benchmark/ci_benchmark.py b/python/cuml/cuml/benchmark/ci_benchmark.py similarity index 100% rename from python/cuml/benchmark/ci_benchmark.py rename to python/cuml/cuml/benchmark/ci_benchmark.py diff --git a/python/cuml/benchmark/datagen.py b/python/cuml/cuml/benchmark/datagen.py similarity index 100% rename from python/cuml/benchmark/datagen.py rename to python/cuml/cuml/benchmark/datagen.py diff --git a/python/cuml/benchmark/nvtx_benchmark.py b/python/cuml/cuml/benchmark/nvtx_benchmark.py similarity index 100% rename from python/cuml/benchmark/nvtx_benchmark.py rename to python/cuml/cuml/benchmark/nvtx_benchmark.py diff --git a/python/cuml/benchmark/run_benchmarks.py b/python/cuml/cuml/benchmark/run_benchmarks.py similarity index 100% rename from python/cuml/benchmark/run_benchmarks.py rename to python/cuml/cuml/benchmark/run_benchmarks.py diff --git a/python/cuml/benchmark/runners.py b/python/cuml/cuml/benchmark/runners.py similarity index 100% rename from python/cuml/benchmark/runners.py rename to python/cuml/cuml/benchmark/runners.py diff --git a/python/cuml/cuml/cluster/CMakeLists.txt b/python/cuml/cuml/cluster/CMakeLists.txt new file mode 100644 index 0000000000..f20ebffc4e --- /dev/null +++ b/python/cuml/cuml/cluster/CMakeLists.txt @@ -0,0 +1,50 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + agglomerative.pyx + dbscan.pyx + dbscan_mg.pyx + hdbscan.pyx + kmeans.pyx + kmeans_mg.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + agglomerative + dbscan + dbscan_mg + hdbscan + kmeans + kmeans_mg) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/cluster/__init__.py b/python/cuml/cuml/cluster/__init__.py similarity index 100% rename from python/cuml/cluster/__init__.py rename to python/cuml/cuml/cluster/__init__.py diff --git a/python/cuml/cluster/agglomerative.pyx b/python/cuml/cuml/cluster/agglomerative.pyx similarity index 100% rename from python/cuml/cluster/agglomerative.pyx rename to python/cuml/cuml/cluster/agglomerative.pyx diff --git a/python/cuml/cluster/dbscan.pyx b/python/cuml/cuml/cluster/dbscan.pyx similarity index 100% rename from python/cuml/cluster/dbscan.pyx rename to python/cuml/cuml/cluster/dbscan.pyx diff --git a/python/cuml/cluster/dbscan_mg.pyx b/python/cuml/cuml/cluster/dbscan_mg.pyx similarity index 100% rename from python/cuml/cluster/dbscan_mg.pyx rename to python/cuml/cuml/cluster/dbscan_mg.pyx diff --git a/python/cuml/cluster/hdbscan.pyx b/python/cuml/cuml/cluster/hdbscan.pyx similarity index 100% rename from python/cuml/cluster/hdbscan.pyx rename to python/cuml/cuml/cluster/hdbscan.pyx diff --git a/python/cuml/cluster/kmeans.pyx b/python/cuml/cuml/cluster/kmeans.pyx similarity index 100% rename from python/cuml/cluster/kmeans.pyx rename to python/cuml/cuml/cluster/kmeans.pyx diff --git a/python/cuml/cluster/kmeans_mg.pyx b/python/cuml/cuml/cluster/kmeans_mg.pyx similarity index 100% rename from python/cuml/cluster/kmeans_mg.pyx rename to python/cuml/cuml/cluster/kmeans_mg.pyx diff --git a/python/cuml/cluster/kmeans_utils.pxd b/python/cuml/cuml/cluster/kmeans_utils.pxd similarity index 100% rename from python/cuml/cluster/kmeans_utils.pxd rename to python/cuml/cuml/cluster/kmeans_utils.pxd diff --git a/python/cuml/comm/__init__.py b/python/cuml/cuml/comm/__init__.py similarity index 100% rename from python/cuml/comm/__init__.py rename to python/cuml/cuml/comm/__init__.py diff --git a/python/cuml/comm/serialize.py b/python/cuml/cuml/comm/serialize.py similarity index 100% rename from python/cuml/comm/serialize.py rename to python/cuml/cuml/comm/serialize.py diff --git a/python/cuml/cuml/common/CMakeLists.txt b/python/cuml/cuml/common/CMakeLists.txt new file mode 100644 index 0000000000..03ede44fd6 --- /dev/null +++ b/python/cuml/cuml/common/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + base.pyx + cuda.pyx + handle.pyx + logger.pyx + opg_data_utils_mg.pyx + pointer_utils.pyx + sparse_utils.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + opg_data_utils_mg + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/common/__init__.py b/python/cuml/cuml/common/__init__.py similarity index 100% rename from python/cuml/common/__init__.py rename to python/cuml/cuml/common/__init__.py diff --git a/python/cuml/common/array.py b/python/cuml/cuml/common/array.py similarity index 100% rename from python/cuml/common/array.py rename to python/cuml/cuml/common/array.py diff --git a/python/cuml/common/array_descriptor.py b/python/cuml/cuml/common/array_descriptor.py similarity index 100% rename from python/cuml/common/array_descriptor.py rename to python/cuml/cuml/common/array_descriptor.py diff --git a/python/cuml/common/array_sparse.py b/python/cuml/cuml/common/array_sparse.py similarity index 100% rename from python/cuml/common/array_sparse.py rename to python/cuml/cuml/common/array_sparse.py diff --git a/python/cuml/common/base.pyx b/python/cuml/cuml/common/base.pyx similarity index 100% rename from python/cuml/common/base.pyx rename to python/cuml/cuml/common/base.pyx diff --git a/python/cuml/common/cuda.pxd b/python/cuml/cuml/common/cuda.pxd similarity index 100% rename from python/cuml/common/cuda.pxd rename to python/cuml/cuml/common/cuda.pxd diff --git a/python/cuml/common/cuda.pyx b/python/cuml/cuml/common/cuda.pyx similarity index 100% rename from python/cuml/common/cuda.pyx rename to python/cuml/cuml/common/cuda.pyx diff --git a/python/cuml/common/doc_utils.py b/python/cuml/cuml/common/doc_utils.py similarity index 100% rename from python/cuml/common/doc_utils.py rename to python/cuml/cuml/common/doc_utils.py diff --git a/python/cuml/common/exceptions.py b/python/cuml/cuml/common/exceptions.py similarity index 100% rename from python/cuml/common/exceptions.py rename to python/cuml/cuml/common/exceptions.py diff --git a/python/cuml/common/handle.pyx b/python/cuml/cuml/common/handle.pyx similarity index 100% rename from python/cuml/common/handle.pyx rename to python/cuml/cuml/common/handle.pyx diff --git a/python/cuml/common/import_utils.py b/python/cuml/cuml/common/import_utils.py similarity index 100% rename from python/cuml/common/import_utils.py rename to python/cuml/cuml/common/import_utils.py diff --git a/python/cuml/common/input_utils.py b/python/cuml/cuml/common/input_utils.py similarity index 100% rename from python/cuml/common/input_utils.py rename to python/cuml/cuml/common/input_utils.py diff --git a/python/cuml/common/kernel_utils.py b/python/cuml/cuml/common/kernel_utils.py similarity index 100% rename from python/cuml/common/kernel_utils.py rename to python/cuml/cuml/common/kernel_utils.py diff --git a/python/cuml/common/logger.pyx b/python/cuml/cuml/common/logger.pyx similarity index 100% rename from python/cuml/common/logger.pyx rename to python/cuml/cuml/common/logger.pyx diff --git a/python/cuml/common/memory_utils.py b/python/cuml/cuml/common/memory_utils.py similarity index 100% rename from python/cuml/common/memory_utils.py rename to python/cuml/cuml/common/memory_utils.py diff --git a/python/cuml/common/mixins.py b/python/cuml/cuml/common/mixins.py similarity index 100% rename from python/cuml/common/mixins.py rename to python/cuml/cuml/common/mixins.py diff --git a/python/cuml/common/numba_utils.py b/python/cuml/cuml/common/numba_utils.py similarity index 100% rename from python/cuml/common/numba_utils.py rename to python/cuml/cuml/common/numba_utils.py diff --git a/python/cuml/common/opg_data_utils_mg.pxd b/python/cuml/cuml/common/opg_data_utils_mg.pxd similarity index 100% rename from python/cuml/common/opg_data_utils_mg.pxd rename to python/cuml/cuml/common/opg_data_utils_mg.pxd diff --git a/python/cuml/common/opg_data_utils_mg.pyx b/python/cuml/cuml/common/opg_data_utils_mg.pyx similarity index 100% rename from python/cuml/common/opg_data_utils_mg.pyx rename to python/cuml/cuml/common/opg_data_utils_mg.pyx diff --git a/python/cuml/common/pointer_utils.pyx b/python/cuml/cuml/common/pointer_utils.pyx similarity index 100% rename from python/cuml/common/pointer_utils.pyx rename to python/cuml/cuml/common/pointer_utils.pyx diff --git a/python/cuml/common/sparse_utils.py b/python/cuml/cuml/common/sparse_utils.py similarity index 100% rename from python/cuml/common/sparse_utils.py rename to python/cuml/cuml/common/sparse_utils.py diff --git a/python/cuml/common/sparsefuncs.py b/python/cuml/cuml/common/sparsefuncs.py similarity index 100% rename from python/cuml/common/sparsefuncs.py rename to python/cuml/cuml/common/sparsefuncs.py diff --git a/python/cuml/common/timing_utils.py b/python/cuml/cuml/common/timing_utils.py similarity index 100% rename from python/cuml/common/timing_utils.py rename to python/cuml/cuml/common/timing_utils.py diff --git a/python/cuml/common/type_utils.py b/python/cuml/cuml/common/type_utils.py similarity index 100% rename from python/cuml/common/type_utils.py rename to python/cuml/cuml/common/type_utils.py diff --git a/python/cuml/compose/__init__.py b/python/cuml/cuml/compose/__init__.py similarity index 100% rename from python/cuml/compose/__init__.py rename to python/cuml/cuml/compose/__init__.py diff --git a/python/cuml/dask/__init__.py b/python/cuml/cuml/dask/__init__.py similarity index 100% rename from python/cuml/dask/__init__.py rename to python/cuml/cuml/dask/__init__.py diff --git a/python/cuml/dask/cluster/__init__.py b/python/cuml/cuml/dask/cluster/__init__.py similarity index 100% rename from python/cuml/dask/cluster/__init__.py rename to python/cuml/cuml/dask/cluster/__init__.py diff --git a/python/cuml/dask/cluster/dbscan.py b/python/cuml/cuml/dask/cluster/dbscan.py similarity index 100% rename from python/cuml/dask/cluster/dbscan.py rename to python/cuml/cuml/dask/cluster/dbscan.py diff --git a/python/cuml/dask/cluster/kmeans.py b/python/cuml/cuml/dask/cluster/kmeans.py similarity index 100% rename from python/cuml/dask/cluster/kmeans.py rename to python/cuml/cuml/dask/cluster/kmeans.py diff --git a/python/cuml/dask/common/__init__.py b/python/cuml/cuml/dask/common/__init__.py similarity index 100% rename from python/cuml/dask/common/__init__.py rename to python/cuml/cuml/dask/common/__init__.py diff --git a/python/cuml/dask/common/base.py b/python/cuml/cuml/dask/common/base.py similarity index 100% rename from python/cuml/dask/common/base.py rename to python/cuml/cuml/dask/common/base.py diff --git a/python/cuml/dask/common/dask_arr_utils.py b/python/cuml/cuml/dask/common/dask_arr_utils.py similarity index 100% rename from python/cuml/dask/common/dask_arr_utils.py rename to python/cuml/cuml/dask/common/dask_arr_utils.py diff --git a/python/cuml/dask/common/dask_df_utils.py b/python/cuml/cuml/dask/common/dask_df_utils.py similarity index 100% rename from python/cuml/dask/common/dask_df_utils.py rename to python/cuml/cuml/dask/common/dask_df_utils.py diff --git a/python/cuml/dask/common/func.py b/python/cuml/cuml/dask/common/func.py similarity index 100% rename from python/cuml/dask/common/func.py rename to python/cuml/cuml/dask/common/func.py diff --git a/python/cuml/dask/common/input_utils.py b/python/cuml/cuml/dask/common/input_utils.py similarity index 100% rename from python/cuml/dask/common/input_utils.py rename to python/cuml/cuml/dask/common/input_utils.py diff --git a/python/cuml/dask/common/part_utils.py b/python/cuml/cuml/dask/common/part_utils.py similarity index 100% rename from python/cuml/dask/common/part_utils.py rename to python/cuml/cuml/dask/common/part_utils.py diff --git a/python/cuml/dask/common/utils.py b/python/cuml/cuml/dask/common/utils.py similarity index 100% rename from python/cuml/dask/common/utils.py rename to python/cuml/cuml/dask/common/utils.py diff --git a/python/cuml/dask/datasets/__init__.py b/python/cuml/cuml/dask/datasets/__init__.py similarity index 100% rename from python/cuml/dask/datasets/__init__.py rename to python/cuml/cuml/dask/datasets/__init__.py diff --git a/python/cuml/dask/datasets/blobs.py b/python/cuml/cuml/dask/datasets/blobs.py similarity index 100% rename from python/cuml/dask/datasets/blobs.py rename to python/cuml/cuml/dask/datasets/blobs.py diff --git a/python/cuml/dask/datasets/classification.py b/python/cuml/cuml/dask/datasets/classification.py similarity index 100% rename from python/cuml/dask/datasets/classification.py rename to python/cuml/cuml/dask/datasets/classification.py diff --git a/python/cuml/dask/datasets/regression.py b/python/cuml/cuml/dask/datasets/regression.py similarity index 100% rename from python/cuml/dask/datasets/regression.py rename to python/cuml/cuml/dask/datasets/regression.py diff --git a/python/cuml/dask/datasets/utils.py b/python/cuml/cuml/dask/datasets/utils.py similarity index 100% rename from python/cuml/dask/datasets/utils.py rename to python/cuml/cuml/dask/datasets/utils.py diff --git a/python/cuml/dask/decomposition/__init__.py b/python/cuml/cuml/dask/decomposition/__init__.py similarity index 100% rename from python/cuml/dask/decomposition/__init__.py rename to python/cuml/cuml/dask/decomposition/__init__.py diff --git a/python/cuml/dask/decomposition/base.py b/python/cuml/cuml/dask/decomposition/base.py similarity index 100% rename from python/cuml/dask/decomposition/base.py rename to python/cuml/cuml/dask/decomposition/base.py diff --git a/python/cuml/dask/decomposition/pca.py b/python/cuml/cuml/dask/decomposition/pca.py similarity index 100% rename from python/cuml/dask/decomposition/pca.py rename to python/cuml/cuml/dask/decomposition/pca.py diff --git a/python/cuml/dask/decomposition/tsvd.py b/python/cuml/cuml/dask/decomposition/tsvd.py similarity index 100% rename from python/cuml/dask/decomposition/tsvd.py rename to python/cuml/cuml/dask/decomposition/tsvd.py diff --git a/python/cuml/dask/ensemble/__init__.py b/python/cuml/cuml/dask/ensemble/__init__.py similarity index 100% rename from python/cuml/dask/ensemble/__init__.py rename to python/cuml/cuml/dask/ensemble/__init__.py diff --git a/python/cuml/dask/ensemble/base.py b/python/cuml/cuml/dask/ensemble/base.py similarity index 100% rename from python/cuml/dask/ensemble/base.py rename to python/cuml/cuml/dask/ensemble/base.py diff --git a/python/cuml/dask/ensemble/randomforestclassifier.py b/python/cuml/cuml/dask/ensemble/randomforestclassifier.py similarity index 100% rename from python/cuml/dask/ensemble/randomforestclassifier.py rename to python/cuml/cuml/dask/ensemble/randomforestclassifier.py diff --git a/python/cuml/dask/ensemble/randomforestregressor.py b/python/cuml/cuml/dask/ensemble/randomforestregressor.py similarity index 100% rename from python/cuml/dask/ensemble/randomforestregressor.py rename to python/cuml/cuml/dask/ensemble/randomforestregressor.py diff --git a/python/cuml/dask/extended/__init__.py b/python/cuml/cuml/dask/extended/__init__.py similarity index 100% rename from python/cuml/dask/extended/__init__.py rename to python/cuml/cuml/dask/extended/__init__.py diff --git a/python/cuml/dask/extended/linear_model/__init__.py b/python/cuml/cuml/dask/extended/linear_model/__init__.py similarity index 100% rename from python/cuml/dask/extended/linear_model/__init__.py rename to python/cuml/cuml/dask/extended/linear_model/__init__.py diff --git a/python/cuml/dask/extended/linear_model/logistic_regression.py b/python/cuml/cuml/dask/extended/linear_model/logistic_regression.py similarity index 100% rename from python/cuml/dask/extended/linear_model/logistic_regression.py rename to python/cuml/cuml/dask/extended/linear_model/logistic_regression.py diff --git a/python/cuml/dask/feature_extraction/__init__.py b/python/cuml/cuml/dask/feature_extraction/__init__.py similarity index 100% rename from python/cuml/dask/feature_extraction/__init__.py rename to python/cuml/cuml/dask/feature_extraction/__init__.py diff --git a/python/cuml/dask/feature_extraction/text/__init__.py b/python/cuml/cuml/dask/feature_extraction/text/__init__.py similarity index 100% rename from python/cuml/dask/feature_extraction/text/__init__.py rename to python/cuml/cuml/dask/feature_extraction/text/__init__.py diff --git a/python/cuml/dask/feature_extraction/text/tfidf_transformer.py b/python/cuml/cuml/dask/feature_extraction/text/tfidf_transformer.py similarity index 100% rename from python/cuml/dask/feature_extraction/text/tfidf_transformer.py rename to python/cuml/cuml/dask/feature_extraction/text/tfidf_transformer.py diff --git a/python/cuml/dask/linear_model/__init__.py b/python/cuml/cuml/dask/linear_model/__init__.py similarity index 100% rename from python/cuml/dask/linear_model/__init__.py rename to python/cuml/cuml/dask/linear_model/__init__.py diff --git a/python/cuml/dask/linear_model/elastic_net.py b/python/cuml/cuml/dask/linear_model/elastic_net.py similarity index 100% rename from python/cuml/dask/linear_model/elastic_net.py rename to python/cuml/cuml/dask/linear_model/elastic_net.py diff --git a/python/cuml/dask/linear_model/lasso.py b/python/cuml/cuml/dask/linear_model/lasso.py similarity index 100% rename from python/cuml/dask/linear_model/lasso.py rename to python/cuml/cuml/dask/linear_model/lasso.py diff --git a/python/cuml/dask/linear_model/linear_regression.py b/python/cuml/cuml/dask/linear_model/linear_regression.py similarity index 100% rename from python/cuml/dask/linear_model/linear_regression.py rename to python/cuml/cuml/dask/linear_model/linear_regression.py diff --git a/python/cuml/dask/linear_model/ridge.py b/python/cuml/cuml/dask/linear_model/ridge.py similarity index 100% rename from python/cuml/dask/linear_model/ridge.py rename to python/cuml/cuml/dask/linear_model/ridge.py diff --git a/python/cuml/dask/manifold/__init__.py b/python/cuml/cuml/dask/manifold/__init__.py similarity index 100% rename from python/cuml/dask/manifold/__init__.py rename to python/cuml/cuml/dask/manifold/__init__.py diff --git a/python/cuml/dask/manifold/umap.py b/python/cuml/cuml/dask/manifold/umap.py similarity index 100% rename from python/cuml/dask/manifold/umap.py rename to python/cuml/cuml/dask/manifold/umap.py diff --git a/python/cuml/dask/metrics/__init__.py b/python/cuml/cuml/dask/metrics/__init__.py similarity index 100% rename from python/cuml/dask/metrics/__init__.py rename to python/cuml/cuml/dask/metrics/__init__.py diff --git a/python/cuml/dask/metrics/confusion_matrix.py b/python/cuml/cuml/dask/metrics/confusion_matrix.py similarity index 100% rename from python/cuml/dask/metrics/confusion_matrix.py rename to python/cuml/cuml/dask/metrics/confusion_matrix.py diff --git a/python/cuml/dask/metrics/utils.py b/python/cuml/cuml/dask/metrics/utils.py similarity index 100% rename from python/cuml/dask/metrics/utils.py rename to python/cuml/cuml/dask/metrics/utils.py diff --git a/python/cuml/dask/naive_bayes/__init__.py b/python/cuml/cuml/dask/naive_bayes/__init__.py similarity index 100% rename from python/cuml/dask/naive_bayes/__init__.py rename to python/cuml/cuml/dask/naive_bayes/__init__.py diff --git a/python/cuml/dask/naive_bayes/naive_bayes.py b/python/cuml/cuml/dask/naive_bayes/naive_bayes.py similarity index 100% rename from python/cuml/dask/naive_bayes/naive_bayes.py rename to python/cuml/cuml/dask/naive_bayes/naive_bayes.py diff --git a/python/cuml/dask/neighbors/__init__.py b/python/cuml/cuml/dask/neighbors/__init__.py similarity index 100% rename from python/cuml/dask/neighbors/__init__.py rename to python/cuml/cuml/dask/neighbors/__init__.py diff --git a/python/cuml/dask/neighbors/kneighbors_classifier.py b/python/cuml/cuml/dask/neighbors/kneighbors_classifier.py similarity index 100% rename from python/cuml/dask/neighbors/kneighbors_classifier.py rename to python/cuml/cuml/dask/neighbors/kneighbors_classifier.py diff --git a/python/cuml/dask/neighbors/kneighbors_regressor.py b/python/cuml/cuml/dask/neighbors/kneighbors_regressor.py similarity index 100% rename from python/cuml/dask/neighbors/kneighbors_regressor.py rename to python/cuml/cuml/dask/neighbors/kneighbors_regressor.py diff --git a/python/cuml/dask/neighbors/nearest_neighbors.py b/python/cuml/cuml/dask/neighbors/nearest_neighbors.py similarity index 100% rename from python/cuml/dask/neighbors/nearest_neighbors.py rename to python/cuml/cuml/dask/neighbors/nearest_neighbors.py diff --git a/python/cuml/dask/preprocessing/LabelEncoder.py b/python/cuml/cuml/dask/preprocessing/LabelEncoder.py similarity index 100% rename from python/cuml/dask/preprocessing/LabelEncoder.py rename to python/cuml/cuml/dask/preprocessing/LabelEncoder.py diff --git a/python/cuml/dask/preprocessing/__init__.py b/python/cuml/cuml/dask/preprocessing/__init__.py similarity index 100% rename from python/cuml/dask/preprocessing/__init__.py rename to python/cuml/cuml/dask/preprocessing/__init__.py diff --git a/python/cuml/dask/preprocessing/encoders.py b/python/cuml/cuml/dask/preprocessing/encoders.py similarity index 100% rename from python/cuml/dask/preprocessing/encoders.py rename to python/cuml/cuml/dask/preprocessing/encoders.py diff --git a/python/cuml/dask/preprocessing/label.py b/python/cuml/cuml/dask/preprocessing/label.py similarity index 100% rename from python/cuml/dask/preprocessing/label.py rename to python/cuml/cuml/dask/preprocessing/label.py diff --git a/python/cuml/dask/solvers/__init__.py b/python/cuml/cuml/dask/solvers/__init__.py similarity index 100% rename from python/cuml/dask/solvers/__init__.py rename to python/cuml/cuml/dask/solvers/__init__.py diff --git a/python/cuml/dask/solvers/cd.py b/python/cuml/cuml/dask/solvers/cd.py similarity index 100% rename from python/cuml/dask/solvers/cd.py rename to python/cuml/cuml/dask/solvers/cd.py diff --git a/python/cuml/cuml/datasets/CMakeLists.txt b/python/cuml/cuml/datasets/CMakeLists.txt new file mode 100644 index 0000000000..8b060af015 --- /dev/null +++ b/python/cuml/cuml/datasets/CMakeLists.txt @@ -0,0 +1,41 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + regression.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + regression + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/datasets/__init__.py b/python/cuml/cuml/datasets/__init__.py similarity index 100% rename from python/cuml/datasets/__init__.py rename to python/cuml/cuml/datasets/__init__.py diff --git a/python/cuml/datasets/arima.pyx b/python/cuml/cuml/datasets/arima.pyx similarity index 100% rename from python/cuml/datasets/arima.pyx rename to python/cuml/cuml/datasets/arima.pyx diff --git a/python/cuml/datasets/blobs.py b/python/cuml/cuml/datasets/blobs.py similarity index 100% rename from python/cuml/datasets/blobs.py rename to python/cuml/cuml/datasets/blobs.py diff --git a/python/cuml/datasets/classification.py b/python/cuml/cuml/datasets/classification.py similarity index 100% rename from python/cuml/datasets/classification.py rename to python/cuml/cuml/datasets/classification.py diff --git a/python/cuml/datasets/regression.pyx b/python/cuml/cuml/datasets/regression.pyx similarity index 100% rename from python/cuml/datasets/regression.pyx rename to python/cuml/cuml/datasets/regression.pyx diff --git a/python/cuml/datasets/utils.py b/python/cuml/cuml/datasets/utils.py similarity index 100% rename from python/cuml/datasets/utils.py rename to python/cuml/cuml/datasets/utils.py diff --git a/python/cuml/cuml/decomposition/CMakeLists.txt b/python/cuml/cuml/decomposition/CMakeLists.txt new file mode 100644 index 0000000000..18db2f0ae0 --- /dev/null +++ b/python/cuml/cuml/decomposition/CMakeLists.txt @@ -0,0 +1,48 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + base_mg.pyx + pca.pyx + pca_mg.pyx + tsvd.pyx + tsvd_mg.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + pca + pca_mg + tsvd + tsvd_mg + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/decomposition/__init__.py b/python/cuml/cuml/decomposition/__init__.py similarity index 100% rename from python/cuml/decomposition/__init__.py rename to python/cuml/cuml/decomposition/__init__.py diff --git a/python/cuml/decomposition/base_mg.pyx b/python/cuml/cuml/decomposition/base_mg.pyx similarity index 100% rename from python/cuml/decomposition/base_mg.pyx rename to python/cuml/cuml/decomposition/base_mg.pyx diff --git a/python/cuml/decomposition/incremental_pca.py b/python/cuml/cuml/decomposition/incremental_pca.py similarity index 100% rename from python/cuml/decomposition/incremental_pca.py rename to python/cuml/cuml/decomposition/incremental_pca.py diff --git a/python/cuml/decomposition/pca.pyx b/python/cuml/cuml/decomposition/pca.pyx similarity index 100% rename from python/cuml/decomposition/pca.pyx rename to python/cuml/cuml/decomposition/pca.pyx diff --git a/python/cuml/decomposition/pca_mg.pyx b/python/cuml/cuml/decomposition/pca_mg.pyx similarity index 100% rename from python/cuml/decomposition/pca_mg.pyx rename to python/cuml/cuml/decomposition/pca_mg.pyx diff --git a/python/cuml/decomposition/tsvd.pyx b/python/cuml/cuml/decomposition/tsvd.pyx similarity index 100% rename from python/cuml/decomposition/tsvd.pyx rename to python/cuml/cuml/decomposition/tsvd.pyx diff --git a/python/cuml/decomposition/tsvd_mg.pyx b/python/cuml/cuml/decomposition/tsvd_mg.pyx similarity index 100% rename from python/cuml/decomposition/tsvd_mg.pyx rename to python/cuml/cuml/decomposition/tsvd_mg.pyx diff --git a/python/cuml/decomposition/utils.pxd b/python/cuml/cuml/decomposition/utils.pxd similarity index 100% rename from python/cuml/decomposition/utils.pxd rename to python/cuml/cuml/decomposition/utils.pxd diff --git a/python/cuml/decomposition/utils_mg.pxd b/python/cuml/cuml/decomposition/utils_mg.pxd similarity index 100% rename from python/cuml/decomposition/utils_mg.pxd rename to python/cuml/cuml/decomposition/utils_mg.pxd diff --git a/python/cuml/cuml/ensemble/CMakeLists.txt b/python/cuml/cuml/ensemble/CMakeLists.txt new file mode 100644 index 0000000000..b1a6d57476 --- /dev/null +++ b/python/cuml/cuml/ensemble/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + randomforest_common.pyx + randomforest_shared.pyx + randomforestclassifier.pyx + randomforestregressor.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + randomforest_common + randomforest_shared + randomforestclassifier + randomforestregressor + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/ensemble/__init__.py b/python/cuml/cuml/ensemble/__init__.py similarity index 100% rename from python/cuml/ensemble/__init__.py rename to python/cuml/cuml/ensemble/__init__.py diff --git a/python/cuml/ensemble/randomforest_common.pyx b/python/cuml/cuml/ensemble/randomforest_common.pyx similarity index 100% rename from python/cuml/ensemble/randomforest_common.pyx rename to python/cuml/cuml/ensemble/randomforest_common.pyx diff --git a/python/cuml/ensemble/randomforest_shared.pxd b/python/cuml/cuml/ensemble/randomforest_shared.pxd similarity index 100% rename from python/cuml/ensemble/randomforest_shared.pxd rename to python/cuml/cuml/ensemble/randomforest_shared.pxd diff --git a/python/cuml/ensemble/randomforest_shared.pyx b/python/cuml/cuml/ensemble/randomforest_shared.pyx similarity index 100% rename from python/cuml/ensemble/randomforest_shared.pyx rename to python/cuml/cuml/ensemble/randomforest_shared.pyx diff --git a/python/cuml/ensemble/randomforestclassifier.pyx b/python/cuml/cuml/ensemble/randomforestclassifier.pyx similarity index 100% rename from python/cuml/ensemble/randomforestclassifier.pyx rename to python/cuml/cuml/ensemble/randomforestclassifier.pyx diff --git a/python/cuml/ensemble/randomforestregressor.pyx b/python/cuml/cuml/ensemble/randomforestregressor.pyx similarity index 100% rename from python/cuml/ensemble/randomforestregressor.pyx rename to python/cuml/cuml/ensemble/randomforestregressor.pyx diff --git a/python/cuml/experimental/__init__.py b/python/cuml/cuml/experimental/__init__.py similarity index 100% rename from python/cuml/experimental/__init__.py rename to python/cuml/cuml/experimental/__init__.py diff --git a/python/cuml/experimental/hyperopt_utils/__init__.py b/python/cuml/cuml/experimental/hyperopt_utils/__init__.py similarity index 100% rename from python/cuml/experimental/hyperopt_utils/__init__.py rename to python/cuml/cuml/experimental/hyperopt_utils/__init__.py diff --git a/python/cuml/experimental/hyperopt_utils/plotting_utils.py b/python/cuml/cuml/experimental/hyperopt_utils/plotting_utils.py similarity index 100% rename from python/cuml/experimental/hyperopt_utils/plotting_utils.py rename to python/cuml/cuml/experimental/hyperopt_utils/plotting_utils.py diff --git a/python/cuml/experimental/hyperparams/HPO_demo.ipynb b/python/cuml/cuml/experimental/hyperparams/HPO_demo.ipynb similarity index 100% rename from python/cuml/experimental/hyperparams/HPO_demo.ipynb rename to python/cuml/cuml/experimental/hyperparams/HPO_demo.ipynb diff --git a/python/cuml/cuml/experimental/linear_model/CMakeLists.txt b/python/cuml/cuml/experimental/linear_model/CMakeLists.txt new file mode 100644 index 0000000000..7093210d16 --- /dev/null +++ b/python/cuml/cuml/experimental/linear_model/CMakeLists.txt @@ -0,0 +1,41 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + lars.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + lars + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/experimental/linear_model/__init__.py b/python/cuml/cuml/experimental/linear_model/__init__.py similarity index 100% rename from python/cuml/experimental/linear_model/__init__.py rename to python/cuml/cuml/experimental/linear_model/__init__.py diff --git a/python/cuml/experimental/linear_model/lars.pyx b/python/cuml/cuml/experimental/linear_model/lars.pyx similarity index 100% rename from python/cuml/experimental/linear_model/lars.pyx rename to python/cuml/cuml/experimental/linear_model/lars.pyx diff --git a/python/cuml/cuml/explainer/CMakeLists.txt b/python/cuml/cuml/explainer/CMakeLists.txt new file mode 100644 index 0000000000..06154d69ba --- /dev/null +++ b/python/cuml/cuml/explainer/CMakeLists.txt @@ -0,0 +1,45 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + kernel_shap.pyx + permutation_shap.pyx + tree_shap.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + kernel_shap + permutation_shap + tree_shap + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/explainer/__init__.py b/python/cuml/cuml/explainer/__init__.py similarity index 100% rename from python/cuml/explainer/__init__.py rename to python/cuml/cuml/explainer/__init__.py diff --git a/python/cuml/explainer/base.pyx b/python/cuml/cuml/explainer/base.pyx similarity index 100% rename from python/cuml/explainer/base.pyx rename to python/cuml/cuml/explainer/base.pyx diff --git a/python/cuml/explainer/common.py b/python/cuml/cuml/explainer/common.py similarity index 100% rename from python/cuml/explainer/common.py rename to python/cuml/cuml/explainer/common.py diff --git a/python/cuml/explainer/kernel_shap.pyx b/python/cuml/cuml/explainer/kernel_shap.pyx similarity index 100% rename from python/cuml/explainer/kernel_shap.pyx rename to python/cuml/cuml/explainer/kernel_shap.pyx diff --git a/python/cuml/explainer/permutation_shap.pyx b/python/cuml/cuml/explainer/permutation_shap.pyx similarity index 100% rename from python/cuml/explainer/permutation_shap.pyx rename to python/cuml/cuml/explainer/permutation_shap.pyx diff --git a/python/cuml/explainer/sampling.py b/python/cuml/cuml/explainer/sampling.py similarity index 100% rename from python/cuml/explainer/sampling.py rename to python/cuml/cuml/explainer/sampling.py diff --git a/python/cuml/explainer/tree_shap.pyx b/python/cuml/cuml/explainer/tree_shap.pyx similarity index 100% rename from python/cuml/explainer/tree_shap.pyx rename to python/cuml/cuml/explainer/tree_shap.pyx diff --git a/python/cuml/feature_extraction/__init__.py b/python/cuml/cuml/feature_extraction/__init__.py similarity index 100% rename from python/cuml/feature_extraction/__init__.py rename to python/cuml/cuml/feature_extraction/__init__.py diff --git a/python/cuml/feature_extraction/_stop_words.py b/python/cuml/cuml/feature_extraction/_stop_words.py similarity index 100% rename from python/cuml/feature_extraction/_stop_words.py rename to python/cuml/cuml/feature_extraction/_stop_words.py diff --git a/python/cuml/feature_extraction/_tfidf.py b/python/cuml/cuml/feature_extraction/_tfidf.py similarity index 100% rename from python/cuml/feature_extraction/_tfidf.py rename to python/cuml/cuml/feature_extraction/_tfidf.py diff --git a/python/cuml/feature_extraction/_tfidf_vectorizer.py b/python/cuml/cuml/feature_extraction/_tfidf_vectorizer.py similarity index 100% rename from python/cuml/feature_extraction/_tfidf_vectorizer.py rename to python/cuml/cuml/feature_extraction/_tfidf_vectorizer.py diff --git a/python/cuml/feature_extraction/_vectorizers.py b/python/cuml/cuml/feature_extraction/_vectorizers.py similarity index 100% rename from python/cuml/feature_extraction/_vectorizers.py rename to python/cuml/cuml/feature_extraction/_vectorizers.py diff --git a/python/cuml/feature_extraction/text.py b/python/cuml/cuml/feature_extraction/text.py similarity index 100% rename from python/cuml/feature_extraction/text.py rename to python/cuml/cuml/feature_extraction/text.py diff --git a/python/cuml/cuml/fil/CMakeLists.txt b/python/cuml/cuml/fil/CMakeLists.txt new file mode 100644 index 0000000000..d412a51f69 --- /dev/null +++ b/python/cuml/cuml/fil/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + simpl_set.pyx + t_sne.pyx + umap.pyx + umap_utils.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + simpl_set + t_sne + umap + umap_utils + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/fil/README.md b/python/cuml/cuml/fil/README.md similarity index 100% rename from python/cuml/fil/README.md rename to python/cuml/cuml/fil/README.md diff --git a/python/cuml/fil/__init__.py b/python/cuml/cuml/fil/__init__.py similarity index 100% rename from python/cuml/fil/__init__.py rename to python/cuml/cuml/fil/__init__.py diff --git a/python/cuml/fil/fil.pyx b/python/cuml/cuml/fil/fil.pyx similarity index 100% rename from python/cuml/fil/fil.pyx rename to python/cuml/cuml/fil/fil.pyx diff --git a/python/cuml/fil/fil_performance_nrows.png b/python/cuml/cuml/fil/fil_performance_nrows.png similarity index 100% rename from python/cuml/fil/fil_performance_nrows.png rename to python/cuml/cuml/fil/fil_performance_nrows.png diff --git a/python/cuml/cuml/internals/CMakeLists.txt b/python/cuml/cuml/internals/CMakeLists.txt new file mode 100644 index 0000000000..bf70013f40 --- /dev/null +++ b/python/cuml/cuml/internals/CMakeLists.txt @@ -0,0 +1,41 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + internals.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + internals + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/internals/__init__.py b/python/cuml/cuml/internals/__init__.py similarity index 100% rename from python/cuml/internals/__init__.py rename to python/cuml/cuml/internals/__init__.py diff --git a/python/cuml/internals/api_context_managers.py b/python/cuml/cuml/internals/api_context_managers.py similarity index 100% rename from python/cuml/internals/api_context_managers.py rename to python/cuml/cuml/internals/api_context_managers.py diff --git a/python/cuml/internals/api_decorators.py b/python/cuml/cuml/internals/api_decorators.py similarity index 100% rename from python/cuml/internals/api_decorators.py rename to python/cuml/cuml/internals/api_decorators.py diff --git a/python/cuml/internals/base_helpers.py b/python/cuml/cuml/internals/base_helpers.py similarity index 100% rename from python/cuml/internals/base_helpers.py rename to python/cuml/cuml/internals/base_helpers.py diff --git a/python/cuml/internals/callbacks_implems.h b/python/cuml/cuml/internals/callbacks_implems.h similarity index 100% rename from python/cuml/internals/callbacks_implems.h rename to python/cuml/cuml/internals/callbacks_implems.h diff --git a/python/cuml/internals/global_settings.py b/python/cuml/cuml/internals/global_settings.py similarity index 100% rename from python/cuml/internals/global_settings.py rename to python/cuml/cuml/internals/global_settings.py diff --git a/python/cuml/internals/internals.pyx b/python/cuml/cuml/internals/internals.pyx similarity index 100% rename from python/cuml/internals/internals.pyx rename to python/cuml/cuml/internals/internals.pyx diff --git a/python/cuml/cuml/kernel_ridge/CMakeLists.txt b/python/cuml/cuml/kernel_ridge/CMakeLists.txt new file mode 100644 index 0000000000..19dadfb2e2 --- /dev/null +++ b/python/cuml/cuml/kernel_ridge/CMakeLists.txt @@ -0,0 +1,41 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + kernel_ridge.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + kernel_ridge + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/kernel_ridge/__init__.py b/python/cuml/cuml/kernel_ridge/__init__.py similarity index 100% rename from python/cuml/kernel_ridge/__init__.py rename to python/cuml/cuml/kernel_ridge/__init__.py diff --git a/python/cuml/kernel_ridge/kernel_ridge.pyx b/python/cuml/cuml/kernel_ridge/kernel_ridge.pyx similarity index 100% rename from python/cuml/kernel_ridge/kernel_ridge.pyx rename to python/cuml/cuml/kernel_ridge/kernel_ridge.pyx diff --git a/python/cuml/cuml/linear_model/CMakeLists.txt b/python/cuml/cuml/linear_model/CMakeLists.txt new file mode 100644 index 0000000000..ffa356fdd0 --- /dev/null +++ b/python/cuml/cuml/linear_model/CMakeLists.txt @@ -0,0 +1,59 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + base.pyx + base_mg.pyx + elastc_net.pyx + linear_regression.pyx + linear_regression_mg.pyx + logistic_regression.pyx + mbsgd_classifier.pyx + mbsgd_regressor.pyx + ridge.pyx + ridge_mg.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + base + base_mg + elastc_net + linear_regression + linear_regression_mg + logistic_regression + mbsgd_classifier + mbsgd_regressor + ridge + ridge_mg + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/linear_model/__init__.py b/python/cuml/cuml/linear_model/__init__.py similarity index 100% rename from python/cuml/linear_model/__init__.py rename to python/cuml/cuml/linear_model/__init__.py diff --git a/python/cuml/linear_model/base.pyx b/python/cuml/cuml/linear_model/base.pyx similarity index 100% rename from python/cuml/linear_model/base.pyx rename to python/cuml/cuml/linear_model/base.pyx diff --git a/python/cuml/linear_model/base_mg.pyx b/python/cuml/cuml/linear_model/base_mg.pyx similarity index 100% rename from python/cuml/linear_model/base_mg.pyx rename to python/cuml/cuml/linear_model/base_mg.pyx diff --git a/python/cuml/linear_model/elastic_net.pyx b/python/cuml/cuml/linear_model/elastic_net.pyx similarity index 100% rename from python/cuml/linear_model/elastic_net.pyx rename to python/cuml/cuml/linear_model/elastic_net.pyx diff --git a/python/cuml/linear_model/lasso.py b/python/cuml/cuml/linear_model/lasso.py similarity index 100% rename from python/cuml/linear_model/lasso.py rename to python/cuml/cuml/linear_model/lasso.py diff --git a/python/cuml/linear_model/linear_regression.pyx b/python/cuml/cuml/linear_model/linear_regression.pyx similarity index 100% rename from python/cuml/linear_model/linear_regression.pyx rename to python/cuml/cuml/linear_model/linear_regression.pyx diff --git a/python/cuml/linear_model/linear_regression_mg.pyx b/python/cuml/cuml/linear_model/linear_regression_mg.pyx similarity index 100% rename from python/cuml/linear_model/linear_regression_mg.pyx rename to python/cuml/cuml/linear_model/linear_regression_mg.pyx diff --git a/python/cuml/linear_model/logistic_regression.pyx b/python/cuml/cuml/linear_model/logistic_regression.pyx similarity index 100% rename from python/cuml/linear_model/logistic_regression.pyx rename to python/cuml/cuml/linear_model/logistic_regression.pyx diff --git a/python/cuml/linear_model/mbsgd_classifier.pyx b/python/cuml/cuml/linear_model/mbsgd_classifier.pyx similarity index 100% rename from python/cuml/linear_model/mbsgd_classifier.pyx rename to python/cuml/cuml/linear_model/mbsgd_classifier.pyx diff --git a/python/cuml/linear_model/mbsgd_regressor.pyx b/python/cuml/cuml/linear_model/mbsgd_regressor.pyx similarity index 100% rename from python/cuml/linear_model/mbsgd_regressor.pyx rename to python/cuml/cuml/linear_model/mbsgd_regressor.pyx diff --git a/python/cuml/linear_model/ridge.pyx b/python/cuml/cuml/linear_model/ridge.pyx similarity index 100% rename from python/cuml/linear_model/ridge.pyx rename to python/cuml/cuml/linear_model/ridge.pyx diff --git a/python/cuml/linear_model/ridge_mg.pyx b/python/cuml/cuml/linear_model/ridge_mg.pyx similarity index 100% rename from python/cuml/linear_model/ridge_mg.pyx rename to python/cuml/cuml/linear_model/ridge_mg.pyx diff --git a/python/cuml/cuml/manifold/CMakeLists.txt b/python/cuml/cuml/manifold/CMakeLists.txt new file mode 100644 index 0000000000..d412a51f69 --- /dev/null +++ b/python/cuml/cuml/manifold/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + simpl_set.pyx + t_sne.pyx + umap.pyx + umap_utils.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + simpl_set + t_sne + umap + umap_utils + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/manifold/__init__.py b/python/cuml/cuml/manifold/__init__.py similarity index 100% rename from python/cuml/manifold/__init__.py rename to python/cuml/cuml/manifold/__init__.py diff --git a/python/cuml/manifold/simpl_set.pyx b/python/cuml/cuml/manifold/simpl_set.pyx similarity index 100% rename from python/cuml/manifold/simpl_set.pyx rename to python/cuml/cuml/manifold/simpl_set.pyx diff --git a/python/cuml/manifold/t_sne.pyx b/python/cuml/cuml/manifold/t_sne.pyx similarity index 100% rename from python/cuml/manifold/t_sne.pyx rename to python/cuml/cuml/manifold/t_sne.pyx diff --git a/python/cuml/manifold/umap.pyx b/python/cuml/cuml/manifold/umap.pyx similarity index 100% rename from python/cuml/manifold/umap.pyx rename to python/cuml/cuml/manifold/umap.pyx diff --git a/python/cuml/manifold/umap_utils.pxd b/python/cuml/cuml/manifold/umap_utils.pxd similarity index 100% rename from python/cuml/manifold/umap_utils.pxd rename to python/cuml/cuml/manifold/umap_utils.pxd diff --git a/python/cuml/manifold/umap_utils.pyx b/python/cuml/cuml/manifold/umap_utils.pyx similarity index 100% rename from python/cuml/manifold/umap_utils.pyx rename to python/cuml/cuml/manifold/umap_utils.pyx diff --git a/python/cuml/cuml/metrics/CMakeLists.txt b/python/cuml/cuml/metrics/CMakeLists.txt new file mode 100644 index 0000000000..6021e1b412 --- /dev/null +++ b/python/cuml/cuml/metrics/CMakeLists.txt @@ -0,0 +1,51 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + accuracy.pyx + hinge_loss.pyx + kl_divergence.pyx + pairwise_distances.pyx + regression.pyx + trustworthiness.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + accuracy + hinge_loss + kl_divergence + pairwise_distances + regression + trustworthiness + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/metrics/__init__.py b/python/cuml/cuml/metrics/__init__.py similarity index 100% rename from python/cuml/metrics/__init__.py rename to python/cuml/cuml/metrics/__init__.py diff --git a/python/cuml/metrics/_classification.py b/python/cuml/cuml/metrics/_classification.py similarity index 100% rename from python/cuml/metrics/_classification.py rename to python/cuml/cuml/metrics/_classification.py diff --git a/python/cuml/metrics/_ranking.py b/python/cuml/cuml/metrics/_ranking.py similarity index 100% rename from python/cuml/metrics/_ranking.py rename to python/cuml/cuml/metrics/_ranking.py diff --git a/python/cuml/metrics/accuracy.pyx b/python/cuml/cuml/metrics/accuracy.pyx similarity index 100% rename from python/cuml/metrics/accuracy.pyx rename to python/cuml/cuml/metrics/accuracy.pyx diff --git a/python/cuml/metrics/cluster/__init__.py b/python/cuml/cuml/metrics/cluster/__init__.py similarity index 100% rename from python/cuml/metrics/cluster/__init__.py rename to python/cuml/cuml/metrics/cluster/__init__.py diff --git a/python/cuml/metrics/cluster/adjusted_rand_index.pyx b/python/cuml/cuml/metrics/cluster/adjusted_rand_index.pyx similarity index 100% rename from python/cuml/metrics/cluster/adjusted_rand_index.pyx rename to python/cuml/cuml/metrics/cluster/adjusted_rand_index.pyx diff --git a/python/cuml/metrics/cluster/completeness_score.pyx b/python/cuml/cuml/metrics/cluster/completeness_score.pyx similarity index 100% rename from python/cuml/metrics/cluster/completeness_score.pyx rename to python/cuml/cuml/metrics/cluster/completeness_score.pyx diff --git a/python/cuml/metrics/cluster/entropy.pyx b/python/cuml/cuml/metrics/cluster/entropy.pyx similarity index 100% rename from python/cuml/metrics/cluster/entropy.pyx rename to python/cuml/cuml/metrics/cluster/entropy.pyx diff --git a/python/cuml/metrics/cluster/homogeneity_score.pyx b/python/cuml/cuml/metrics/cluster/homogeneity_score.pyx similarity index 100% rename from python/cuml/metrics/cluster/homogeneity_score.pyx rename to python/cuml/cuml/metrics/cluster/homogeneity_score.pyx diff --git a/python/cuml/metrics/cluster/mutual_info_score.pyx b/python/cuml/cuml/metrics/cluster/mutual_info_score.pyx similarity index 100% rename from python/cuml/metrics/cluster/mutual_info_score.pyx rename to python/cuml/cuml/metrics/cluster/mutual_info_score.pyx diff --git a/python/cuml/metrics/cluster/silhouette_score.pyx b/python/cuml/cuml/metrics/cluster/silhouette_score.pyx similarity index 100% rename from python/cuml/metrics/cluster/silhouette_score.pyx rename to python/cuml/cuml/metrics/cluster/silhouette_score.pyx diff --git a/python/cuml/metrics/cluster/utils.pyx b/python/cuml/cuml/metrics/cluster/utils.pyx similarity index 100% rename from python/cuml/metrics/cluster/utils.pyx rename to python/cuml/cuml/metrics/cluster/utils.pyx diff --git a/python/cuml/metrics/confusion_matrix.py b/python/cuml/cuml/metrics/confusion_matrix.py similarity index 100% rename from python/cuml/metrics/confusion_matrix.py rename to python/cuml/cuml/metrics/confusion_matrix.py diff --git a/python/cuml/metrics/distance_type.pxd b/python/cuml/cuml/metrics/distance_type.pxd similarity index 100% rename from python/cuml/metrics/distance_type.pxd rename to python/cuml/cuml/metrics/distance_type.pxd diff --git a/python/cuml/metrics/hinge_loss.pyx b/python/cuml/cuml/metrics/hinge_loss.pyx similarity index 100% rename from python/cuml/metrics/hinge_loss.pyx rename to python/cuml/cuml/metrics/hinge_loss.pyx diff --git a/python/cuml/metrics/kl_divergence.pyx b/python/cuml/cuml/metrics/kl_divergence.pyx similarity index 100% rename from python/cuml/metrics/kl_divergence.pyx rename to python/cuml/cuml/metrics/kl_divergence.pyx diff --git a/python/cuml/metrics/pairwise_distances.pyx b/python/cuml/cuml/metrics/pairwise_distances.pyx similarity index 100% rename from python/cuml/metrics/pairwise_distances.pyx rename to python/cuml/cuml/metrics/pairwise_distances.pyx diff --git a/python/cuml/metrics/pairwise_kernels.py b/python/cuml/cuml/metrics/pairwise_kernels.py similarity index 100% rename from python/cuml/metrics/pairwise_kernels.py rename to python/cuml/cuml/metrics/pairwise_kernels.py diff --git a/python/cuml/metrics/regression.pxd b/python/cuml/cuml/metrics/regression.pxd similarity index 100% rename from python/cuml/metrics/regression.pxd rename to python/cuml/cuml/metrics/regression.pxd diff --git a/python/cuml/metrics/regression.pyx b/python/cuml/cuml/metrics/regression.pyx similarity index 100% rename from python/cuml/metrics/regression.pyx rename to python/cuml/cuml/metrics/regression.pyx diff --git a/python/cuml/metrics/trustworthiness.pyx b/python/cuml/cuml/metrics/trustworthiness.pyx similarity index 100% rename from python/cuml/metrics/trustworthiness.pyx rename to python/cuml/cuml/metrics/trustworthiness.pyx diff --git a/python/cuml/metrics/utils.py b/python/cuml/cuml/metrics/utils.py similarity index 100% rename from python/cuml/metrics/utils.py rename to python/cuml/cuml/metrics/utils.py diff --git a/python/cuml/model_selection/__init__.py b/python/cuml/cuml/model_selection/__init__.py similarity index 100% rename from python/cuml/model_selection/__init__.py rename to python/cuml/cuml/model_selection/__init__.py diff --git a/python/cuml/model_selection/_split.py b/python/cuml/cuml/model_selection/_split.py similarity index 100% rename from python/cuml/model_selection/_split.py rename to python/cuml/cuml/model_selection/_split.py diff --git a/python/cuml/multiclass/__init__.py b/python/cuml/cuml/multiclass/__init__.py similarity index 100% rename from python/cuml/multiclass/__init__.py rename to python/cuml/cuml/multiclass/__init__.py diff --git a/python/cuml/multiclass/multiclass.py b/python/cuml/cuml/multiclass/multiclass.py similarity index 100% rename from python/cuml/multiclass/multiclass.py rename to python/cuml/cuml/multiclass/multiclass.py diff --git a/python/cuml/naive_bayes/__init__.py b/python/cuml/cuml/naive_bayes/__init__.py similarity index 100% rename from python/cuml/naive_bayes/__init__.py rename to python/cuml/cuml/naive_bayes/__init__.py diff --git a/python/cuml/naive_bayes/naive_bayes.py b/python/cuml/cuml/naive_bayes/naive_bayes.py similarity index 100% rename from python/cuml/naive_bayes/naive_bayes.py rename to python/cuml/cuml/naive_bayes/naive_bayes.py diff --git a/python/cuml/cuml/neighbors/CMakeLists.txt b/python/cuml/cuml/neighbors/CMakeLists.txt new file mode 100644 index 0000000000..4fb9562aaf --- /dev/null +++ b/python/cuml/cuml/neighbors/CMakeLists.txt @@ -0,0 +1,53 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + ann.pyx + kneighbors_classifier.pyx + kneighbors_classifier_mg.pyx + kneighbors_regressor.pyx + kneighbors_regressor_mg.pyx + nearest_neighbors.pyx + nearest_neighbors_mg.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + ann + kneighbors_classifier + kneighbors_classifier_mg + kneighbors_regressor + kneighbors_regressor_mg + nearest_neighbors + nearest_neighbors_mg + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/neighbors/__init__.py b/python/cuml/cuml/neighbors/__init__.py similarity index 100% rename from python/cuml/neighbors/__init__.py rename to python/cuml/cuml/neighbors/__init__.py diff --git a/python/cuml/neighbors/ann.pxd b/python/cuml/cuml/neighbors/ann.pxd similarity index 100% rename from python/cuml/neighbors/ann.pxd rename to python/cuml/cuml/neighbors/ann.pxd diff --git a/python/cuml/neighbors/ann.pyx b/python/cuml/cuml/neighbors/ann.pyx similarity index 100% rename from python/cuml/neighbors/ann.pyx rename to python/cuml/cuml/neighbors/ann.pyx diff --git a/python/cuml/neighbors/kernel_density.py b/python/cuml/cuml/neighbors/kernel_density.py similarity index 100% rename from python/cuml/neighbors/kernel_density.py rename to python/cuml/cuml/neighbors/kernel_density.py diff --git a/python/cuml/neighbors/kneighbors_classifier.pyx b/python/cuml/cuml/neighbors/kneighbors_classifier.pyx similarity index 100% rename from python/cuml/neighbors/kneighbors_classifier.pyx rename to python/cuml/cuml/neighbors/kneighbors_classifier.pyx diff --git a/python/cuml/neighbors/kneighbors_classifier_mg.pyx b/python/cuml/cuml/neighbors/kneighbors_classifier_mg.pyx similarity index 100% rename from python/cuml/neighbors/kneighbors_classifier_mg.pyx rename to python/cuml/cuml/neighbors/kneighbors_classifier_mg.pyx diff --git a/python/cuml/neighbors/kneighbors_regressor.pyx b/python/cuml/cuml/neighbors/kneighbors_regressor.pyx similarity index 100% rename from python/cuml/neighbors/kneighbors_regressor.pyx rename to python/cuml/cuml/neighbors/kneighbors_regressor.pyx diff --git a/python/cuml/neighbors/kneighbors_regressor_mg.pyx b/python/cuml/cuml/neighbors/kneighbors_regressor_mg.pyx similarity index 100% rename from python/cuml/neighbors/kneighbors_regressor_mg.pyx rename to python/cuml/cuml/neighbors/kneighbors_regressor_mg.pyx diff --git a/python/cuml/neighbors/nearest_neighbors.pyx b/python/cuml/cuml/neighbors/nearest_neighbors.pyx similarity index 100% rename from python/cuml/neighbors/nearest_neighbors.pyx rename to python/cuml/cuml/neighbors/nearest_neighbors.pyx diff --git a/python/cuml/neighbors/nearest_neighbors_mg.pyx b/python/cuml/cuml/neighbors/nearest_neighbors_mg.pyx similarity index 100% rename from python/cuml/neighbors/nearest_neighbors_mg.pyx rename to python/cuml/cuml/neighbors/nearest_neighbors_mg.pyx diff --git a/python/cuml/pipeline/__init__.py b/python/cuml/cuml/pipeline/__init__.py similarity index 100% rename from python/cuml/pipeline/__init__.py rename to python/cuml/cuml/pipeline/__init__.py diff --git a/python/cuml/preprocessing/LabelEncoder.py b/python/cuml/cuml/preprocessing/LabelEncoder.py similarity index 100% rename from python/cuml/preprocessing/LabelEncoder.py rename to python/cuml/cuml/preprocessing/LabelEncoder.py diff --git a/python/cuml/preprocessing/TargetEncoder.py b/python/cuml/cuml/preprocessing/TargetEncoder.py similarity index 100% rename from python/cuml/preprocessing/TargetEncoder.py rename to python/cuml/cuml/preprocessing/TargetEncoder.py diff --git a/python/cuml/preprocessing/__init__.py b/python/cuml/cuml/preprocessing/__init__.py similarity index 100% rename from python/cuml/preprocessing/__init__.py rename to python/cuml/cuml/preprocessing/__init__.py diff --git a/python/cuml/preprocessing/encoders.py b/python/cuml/cuml/preprocessing/encoders.py similarity index 100% rename from python/cuml/preprocessing/encoders.py rename to python/cuml/cuml/preprocessing/encoders.py diff --git a/python/cuml/preprocessing/label.py b/python/cuml/cuml/preprocessing/label.py similarity index 100% rename from python/cuml/preprocessing/label.py rename to python/cuml/cuml/preprocessing/label.py diff --git a/python/cuml/preprocessing/onehotencoder_mg.py b/python/cuml/cuml/preprocessing/onehotencoder_mg.py similarity index 100% rename from python/cuml/preprocessing/onehotencoder_mg.py rename to python/cuml/cuml/preprocessing/onehotencoder_mg.py diff --git a/python/cuml/preprocessing/text/__init__.py b/python/cuml/cuml/preprocessing/text/__init__.py similarity index 100% rename from python/cuml/preprocessing/text/__init__.py rename to python/cuml/cuml/preprocessing/text/__init__.py diff --git a/python/cuml/preprocessing/text/stem/__init__.py b/python/cuml/cuml/preprocessing/text/stem/__init__.py similarity index 100% rename from python/cuml/preprocessing/text/stem/__init__.py rename to python/cuml/cuml/preprocessing/text/stem/__init__.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py diff --git a/python/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py b/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py similarity index 100% rename from python/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py rename to python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py diff --git a/python/cuml/prims/__init__.py b/python/cuml/cuml/prims/__init__.py similarity index 100% rename from python/cuml/prims/__init__.py rename to python/cuml/cuml/prims/__init__.py diff --git a/python/cuml/prims/array.py b/python/cuml/cuml/prims/array.py similarity index 100% rename from python/cuml/prims/array.py rename to python/cuml/cuml/prims/array.py diff --git a/python/cuml/prims/label/__init__.py b/python/cuml/cuml/prims/label/__init__.py similarity index 100% rename from python/cuml/prims/label/__init__.py rename to python/cuml/cuml/prims/label/__init__.py diff --git a/python/cuml/prims/label/classlabels.py b/python/cuml/cuml/prims/label/classlabels.py similarity index 100% rename from python/cuml/prims/label/classlabels.py rename to python/cuml/cuml/prims/label/classlabels.py diff --git a/python/cuml/prims/stats/__init__.py b/python/cuml/cuml/prims/stats/__init__.py similarity index 100% rename from python/cuml/prims/stats/__init__.py rename to python/cuml/cuml/prims/stats/__init__.py diff --git a/python/cuml/prims/stats/covariance.py b/python/cuml/cuml/prims/stats/covariance.py similarity index 100% rename from python/cuml/prims/stats/covariance.py rename to python/cuml/cuml/prims/stats/covariance.py diff --git a/python/cuml/cuml/random_projection/CMakeLists.txt b/python/cuml/cuml/random_projection/CMakeLists.txt new file mode 100644 index 0000000000..2ed574d293 --- /dev/null +++ b/python/cuml/cuml/random_projection/CMakeLists.txt @@ -0,0 +1,41 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + random_projection.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + random_projection + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/random_projection/__init__.py b/python/cuml/cuml/random_projection/__init__.py similarity index 100% rename from python/cuml/random_projection/__init__.py rename to python/cuml/cuml/random_projection/__init__.py diff --git a/python/cuml/random_projection/random_projection.pyx b/python/cuml/cuml/random_projection/random_projection.pyx similarity index 100% rename from python/cuml/random_projection/random_projection.pyx rename to python/cuml/cuml/random_projection/random_projection.pyx diff --git a/python/cuml/cuml/solvers/CMakeLists.txt b/python/cuml/cuml/solvers/CMakeLists.txt new file mode 100644 index 0000000000..446840e6b1 --- /dev/null +++ b/python/cuml/cuml/solvers/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + cd.pyx + cd_mg.pyx + qn.pyx + sgd.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + cd + cd_mg + qn + sgd + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/solvers/__init__.py b/python/cuml/cuml/solvers/__init__.py similarity index 100% rename from python/cuml/solvers/__init__.py rename to python/cuml/cuml/solvers/__init__.py diff --git a/python/cuml/solvers/cd.pyx b/python/cuml/cuml/solvers/cd.pyx similarity index 100% rename from python/cuml/solvers/cd.pyx rename to python/cuml/cuml/solvers/cd.pyx diff --git a/python/cuml/solvers/cd_mg.pyx b/python/cuml/cuml/solvers/cd_mg.pyx similarity index 100% rename from python/cuml/solvers/cd_mg.pyx rename to python/cuml/cuml/solvers/cd_mg.pyx diff --git a/python/cuml/solvers/qn.pyx b/python/cuml/cuml/solvers/qn.pyx similarity index 100% rename from python/cuml/solvers/qn.pyx rename to python/cuml/cuml/solvers/qn.pyx diff --git a/python/cuml/solvers/sgd.pyx b/python/cuml/cuml/solvers/sgd.pyx similarity index 100% rename from python/cuml/solvers/sgd.pyx rename to python/cuml/cuml/solvers/sgd.pyx diff --git a/python/cuml/cuml/svm/CMakeLists.txt b/python/cuml/cuml/svm/CMakeLists.txt new file mode 100644 index 0000000000..4c223bfd0c --- /dev/null +++ b/python/cuml/cuml/svm/CMakeLists.txt @@ -0,0 +1,47 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + linear.pyx + svc.pyx + svm_base.pyx + svr.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + linear + svc + svm_base + svr + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/svm/__init__.py b/python/cuml/cuml/svm/__init__.py similarity index 100% rename from python/cuml/svm/__init__.py rename to python/cuml/cuml/svm/__init__.py diff --git a/python/cuml/svm/linear.pyx b/python/cuml/cuml/svm/linear.pyx similarity index 100% rename from python/cuml/svm/linear.pyx rename to python/cuml/cuml/svm/linear.pyx diff --git a/python/cuml/svm/linear_svc.py b/python/cuml/cuml/svm/linear_svc.py similarity index 100% rename from python/cuml/svm/linear_svc.py rename to python/cuml/cuml/svm/linear_svc.py diff --git a/python/cuml/svm/linear_svr.py b/python/cuml/cuml/svm/linear_svr.py similarity index 100% rename from python/cuml/svm/linear_svr.py rename to python/cuml/cuml/svm/linear_svr.py diff --git a/python/cuml/svm/svc.pyx b/python/cuml/cuml/svm/svc.pyx similarity index 100% rename from python/cuml/svm/svc.pyx rename to python/cuml/cuml/svm/svc.pyx diff --git a/python/cuml/svm/svm_base.pyx b/python/cuml/cuml/svm/svm_base.pyx similarity index 100% rename from python/cuml/svm/svm_base.pyx rename to python/cuml/cuml/svm/svm_base.pyx diff --git a/python/cuml/svm/svr.pyx b/python/cuml/cuml/svm/svr.pyx similarity index 100% rename from python/cuml/svm/svr.pyx rename to python/cuml/cuml/svm/svr.pyx diff --git a/python/cuml/testing/__init__.py b/python/cuml/cuml/testing/__init__.py similarity index 100% rename from python/cuml/testing/__init__.py rename to python/cuml/cuml/testing/__init__.py diff --git a/python/cuml/testing/dask/__init__.py b/python/cuml/cuml/testing/dask/__init__.py similarity index 100% rename from python/cuml/testing/dask/__init__.py rename to python/cuml/cuml/testing/dask/__init__.py diff --git a/python/cuml/testing/dask/utils.py b/python/cuml/cuml/testing/dask/utils.py similarity index 100% rename from python/cuml/testing/dask/utils.py rename to python/cuml/cuml/testing/dask/utils.py diff --git a/python/cuml/testing/plugins/__init__.py b/python/cuml/cuml/testing/plugins/__init__.py similarity index 100% rename from python/cuml/testing/plugins/__init__.py rename to python/cuml/cuml/testing/plugins/__init__.py diff --git a/python/cuml/testing/plugins/quick_run_plugin.py b/python/cuml/cuml/testing/plugins/quick_run_plugin.py similarity index 100% rename from python/cuml/testing/plugins/quick_run_plugin.py rename to python/cuml/cuml/testing/plugins/quick_run_plugin.py diff --git a/python/cuml/testing/test_preproc_utils.py b/python/cuml/cuml/testing/test_preproc_utils.py similarity index 100% rename from python/cuml/testing/test_preproc_utils.py rename to python/cuml/cuml/testing/test_preproc_utils.py diff --git a/python/cuml/testing/utils.py b/python/cuml/cuml/testing/utils.py similarity index 100% rename from python/cuml/testing/utils.py rename to python/cuml/cuml/testing/utils.py diff --git a/python/cuml/tests/conftest.py b/python/cuml/cuml/tests/conftest.py similarity index 100% rename from python/cuml/tests/conftest.py rename to python/cuml/cuml/tests/conftest.py diff --git a/python/cuml/tests/dask/conftest.py b/python/cuml/cuml/tests/dask/conftest.py similarity index 100% rename from python/cuml/tests/dask/conftest.py rename to python/cuml/cuml/tests/dask/conftest.py diff --git a/python/cuml/tests/dask/test_base.py b/python/cuml/cuml/tests/dask/test_base.py similarity index 100% rename from python/cuml/tests/dask/test_base.py rename to python/cuml/cuml/tests/dask/test_base.py diff --git a/python/cuml/tests/dask/test_coordinate_descent.py b/python/cuml/cuml/tests/dask/test_coordinate_descent.py similarity index 100% rename from python/cuml/tests/dask/test_coordinate_descent.py rename to python/cuml/cuml/tests/dask/test_coordinate_descent.py diff --git a/python/cuml/tests/dask/test_dask_arr_utils.py b/python/cuml/cuml/tests/dask/test_dask_arr_utils.py similarity index 100% rename from python/cuml/tests/dask/test_dask_arr_utils.py rename to python/cuml/cuml/tests/dask/test_dask_arr_utils.py diff --git a/python/cuml/tests/dask/test_dask_sql.py b/python/cuml/cuml/tests/dask/test_dask_sql.py similarity index 100% rename from python/cuml/tests/dask/test_dask_sql.py rename to python/cuml/cuml/tests/dask/test_dask_sql.py diff --git a/python/cuml/tests/dask/test_dask_utils.py b/python/cuml/cuml/tests/dask/test_dask_utils.py similarity index 100% rename from python/cuml/tests/dask/test_dask_utils.py rename to python/cuml/cuml/tests/dask/test_dask_utils.py diff --git a/python/cuml/tests/dask/test_datasets.py b/python/cuml/cuml/tests/dask/test_datasets.py similarity index 100% rename from python/cuml/tests/dask/test_datasets.py rename to python/cuml/cuml/tests/dask/test_datasets.py diff --git a/python/cuml/tests/dask/test_dbscan.py b/python/cuml/cuml/tests/dask/test_dbscan.py similarity index 100% rename from python/cuml/tests/dask/test_dbscan.py rename to python/cuml/cuml/tests/dask/test_dbscan.py diff --git a/python/cuml/tests/dask/test_doctest.py b/python/cuml/cuml/tests/dask/test_doctest.py similarity index 100% rename from python/cuml/tests/dask/test_doctest.py rename to python/cuml/cuml/tests/dask/test_doctest.py diff --git a/python/cuml/tests/dask/test_func.py b/python/cuml/cuml/tests/dask/test_func.py similarity index 100% rename from python/cuml/tests/dask/test_func.py rename to python/cuml/cuml/tests/dask/test_func.py diff --git a/python/cuml/tests/dask/test_global_settings.py b/python/cuml/cuml/tests/dask/test_global_settings.py similarity index 100% rename from python/cuml/tests/dask/test_global_settings.py rename to python/cuml/cuml/tests/dask/test_global_settings.py diff --git a/python/cuml/tests/dask/test_input_utils.py b/python/cuml/cuml/tests/dask/test_input_utils.py similarity index 100% rename from python/cuml/tests/dask/test_input_utils.py rename to python/cuml/cuml/tests/dask/test_input_utils.py diff --git a/python/cuml/tests/dask/test_kmeans.py b/python/cuml/cuml/tests/dask/test_kmeans.py similarity index 100% rename from python/cuml/tests/dask/test_kmeans.py rename to python/cuml/cuml/tests/dask/test_kmeans.py diff --git a/python/cuml/tests/dask/test_kneighbors_classifier.py b/python/cuml/cuml/tests/dask/test_kneighbors_classifier.py similarity index 100% rename from python/cuml/tests/dask/test_kneighbors_classifier.py rename to python/cuml/cuml/tests/dask/test_kneighbors_classifier.py diff --git a/python/cuml/tests/dask/test_kneighbors_regressor.py b/python/cuml/cuml/tests/dask/test_kneighbors_regressor.py similarity index 100% rename from python/cuml/tests/dask/test_kneighbors_regressor.py rename to python/cuml/cuml/tests/dask/test_kneighbors_regressor.py diff --git a/python/cuml/tests/dask/test_label_binarizer.py b/python/cuml/cuml/tests/dask/test_label_binarizer.py similarity index 100% rename from python/cuml/tests/dask/test_label_binarizer.py rename to python/cuml/cuml/tests/dask/test_label_binarizer.py diff --git a/python/cuml/tests/dask/test_label_encoder.py b/python/cuml/cuml/tests/dask/test_label_encoder.py similarity index 100% rename from python/cuml/tests/dask/test_label_encoder.py rename to python/cuml/cuml/tests/dask/test_label_encoder.py diff --git a/python/cuml/tests/dask/test_linear_regression.py b/python/cuml/cuml/tests/dask/test_linear_regression.py similarity index 100% rename from python/cuml/tests/dask/test_linear_regression.py rename to python/cuml/cuml/tests/dask/test_linear_regression.py diff --git a/python/cuml/test/dask/test_logistic_regression.py b/python/cuml/cuml/tests/dask/test_logistic_regression.py similarity index 100% rename from python/cuml/test/dask/test_logistic_regression.py rename to python/cuml/cuml/tests/dask/test_logistic_regression.py diff --git a/python/cuml/tests/dask/test_metrics.py b/python/cuml/cuml/tests/dask/test_metrics.py similarity index 100% rename from python/cuml/tests/dask/test_metrics.py rename to python/cuml/cuml/tests/dask/test_metrics.py diff --git a/python/cuml/tests/dask/test_naive_bayes.py b/python/cuml/cuml/tests/dask/test_naive_bayes.py similarity index 100% rename from python/cuml/tests/dask/test_naive_bayes.py rename to python/cuml/cuml/tests/dask/test_naive_bayes.py diff --git a/python/cuml/tests/dask/test_nearest_neighbors.py b/python/cuml/cuml/tests/dask/test_nearest_neighbors.py similarity index 100% rename from python/cuml/tests/dask/test_nearest_neighbors.py rename to python/cuml/cuml/tests/dask/test_nearest_neighbors.py diff --git a/python/cuml/tests/dask/test_one_hot_encoder.py b/python/cuml/cuml/tests/dask/test_one_hot_encoder.py similarity index 100% rename from python/cuml/tests/dask/test_one_hot_encoder.py rename to python/cuml/cuml/tests/dask/test_one_hot_encoder.py diff --git a/python/cuml/tests/dask/test_pca.py b/python/cuml/cuml/tests/dask/test_pca.py similarity index 100% rename from python/cuml/tests/dask/test_pca.py rename to python/cuml/cuml/tests/dask/test_pca.py diff --git a/python/cuml/tests/dask/test_random_forest.py b/python/cuml/cuml/tests/dask/test_random_forest.py similarity index 100% rename from python/cuml/tests/dask/test_random_forest.py rename to python/cuml/cuml/tests/dask/test_random_forest.py diff --git a/python/cuml/tests/dask/test_ridge_regression.py b/python/cuml/cuml/tests/dask/test_ridge_regression.py similarity index 100% rename from python/cuml/tests/dask/test_ridge_regression.py rename to python/cuml/cuml/tests/dask/test_ridge_regression.py diff --git a/python/cuml/tests/dask/test_serialization.py b/python/cuml/cuml/tests/dask/test_serialization.py similarity index 100% rename from python/cuml/tests/dask/test_serialization.py rename to python/cuml/cuml/tests/dask/test_serialization.py diff --git a/python/cuml/tests/dask/test_tfidf.py b/python/cuml/cuml/tests/dask/test_tfidf.py similarity index 100% rename from python/cuml/tests/dask/test_tfidf.py rename to python/cuml/cuml/tests/dask/test_tfidf.py diff --git a/python/cuml/tests/dask/test_tsvd.py b/python/cuml/cuml/tests/dask/test_tsvd.py similarity index 100% rename from python/cuml/tests/dask/test_tsvd.py rename to python/cuml/cuml/tests/dask/test_tsvd.py diff --git a/python/cuml/tests/dask/test_umap.py b/python/cuml/cuml/tests/dask/test_umap.py similarity index 100% rename from python/cuml/tests/dask/test_umap.py rename to python/cuml/cuml/tests/dask/test_umap.py diff --git a/python/cuml/tests/explainer/test_explainer_base.py b/python/cuml/cuml/tests/explainer/test_explainer_base.py similarity index 100% rename from python/cuml/tests/explainer/test_explainer_base.py rename to python/cuml/cuml/tests/explainer/test_explainer_base.py diff --git a/python/cuml/tests/explainer/test_explainer_common.py b/python/cuml/cuml/tests/explainer/test_explainer_common.py similarity index 100% rename from python/cuml/tests/explainer/test_explainer_common.py rename to python/cuml/cuml/tests/explainer/test_explainer_common.py diff --git a/python/cuml/tests/explainer/test_explainer_kernel_shap.py b/python/cuml/cuml/tests/explainer/test_explainer_kernel_shap.py similarity index 100% rename from python/cuml/tests/explainer/test_explainer_kernel_shap.py rename to python/cuml/cuml/tests/explainer/test_explainer_kernel_shap.py diff --git a/python/cuml/tests/explainer/test_explainer_permutation_shap.py b/python/cuml/cuml/tests/explainer/test_explainer_permutation_shap.py similarity index 100% rename from python/cuml/tests/explainer/test_explainer_permutation_shap.py rename to python/cuml/cuml/tests/explainer/test_explainer_permutation_shap.py diff --git a/python/cuml/tests/explainer/test_gpu_treeshap.py b/python/cuml/cuml/tests/explainer/test_gpu_treeshap.py similarity index 100% rename from python/cuml/tests/explainer/test_gpu_treeshap.py rename to python/cuml/cuml/tests/explainer/test_gpu_treeshap.py diff --git a/python/cuml/tests/explainer/test_sampling.py b/python/cuml/cuml/tests/explainer/test_sampling.py similarity index 100% rename from python/cuml/tests/explainer/test_sampling.py rename to python/cuml/cuml/tests/explainer/test_sampling.py diff --git a/python/cuml/tests/explainer/test_shap_plotting.py b/python/cuml/cuml/tests/explainer/test_shap_plotting.py similarity index 100% rename from python/cuml/tests/explainer/test_shap_plotting.py rename to python/cuml/cuml/tests/explainer/test_shap_plotting.py diff --git a/python/cuml/tests/stemmer_tests/test_len_utils.py b/python/cuml/cuml/tests/stemmer_tests/test_len_utils.py similarity index 100% rename from python/cuml/tests/stemmer_tests/test_len_utils.py rename to python/cuml/cuml/tests/stemmer_tests/test_len_utils.py diff --git a/python/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py b/python/cuml/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py similarity index 100% rename from python/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py rename to python/cuml/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py diff --git a/python/cuml/tests/stemmer_tests/test_stemmer.py b/python/cuml/cuml/tests/stemmer_tests/test_stemmer.py similarity index 100% rename from python/cuml/tests/stemmer_tests/test_stemmer.py rename to python/cuml/cuml/tests/stemmer_tests/test_stemmer.py diff --git a/python/cuml/tests/stemmer_tests/test_steps.py b/python/cuml/cuml/tests/stemmer_tests/test_steps.py similarity index 100% rename from python/cuml/tests/stemmer_tests/test_steps.py rename to python/cuml/cuml/tests/stemmer_tests/test_steps.py diff --git a/python/cuml/tests/stemmer_tests/test_suffix_utils.py b/python/cuml/cuml/tests/stemmer_tests/test_suffix_utils.py similarity index 100% rename from python/cuml/tests/stemmer_tests/test_suffix_utils.py rename to python/cuml/cuml/tests/stemmer_tests/test_suffix_utils.py diff --git a/python/cuml/tests/test_adapters.py b/python/cuml/cuml/tests/test_adapters.py similarity index 100% rename from python/cuml/tests/test_adapters.py rename to python/cuml/cuml/tests/test_adapters.py diff --git a/python/cuml/tests/test_agglomerative.py b/python/cuml/cuml/tests/test_agglomerative.py similarity index 100% rename from python/cuml/tests/test_agglomerative.py rename to python/cuml/cuml/tests/test_agglomerative.py diff --git a/python/cuml/tests/test_allocator.py b/python/cuml/cuml/tests/test_allocator.py similarity index 100% rename from python/cuml/tests/test_allocator.py rename to python/cuml/cuml/tests/test_allocator.py diff --git a/python/cuml/tests/test_api.py b/python/cuml/cuml/tests/test_api.py similarity index 100% rename from python/cuml/tests/test_api.py rename to python/cuml/cuml/tests/test_api.py diff --git a/python/cuml/tests/test_arima.py b/python/cuml/cuml/tests/test_arima.py similarity index 100% rename from python/cuml/tests/test_arima.py rename to python/cuml/cuml/tests/test_arima.py diff --git a/python/cuml/tests/test_array.py b/python/cuml/cuml/tests/test_array.py similarity index 100% rename from python/cuml/tests/test_array.py rename to python/cuml/cuml/tests/test_array.py diff --git a/python/cuml/tests/test_array_sparse.py b/python/cuml/cuml/tests/test_array_sparse.py similarity index 100% rename from python/cuml/tests/test_array_sparse.py rename to python/cuml/cuml/tests/test_array_sparse.py diff --git a/python/cuml/tests/test_auto_arima.py b/python/cuml/cuml/tests/test_auto_arima.py similarity index 100% rename from python/cuml/tests/test_auto_arima.py rename to python/cuml/cuml/tests/test_auto_arima.py diff --git a/python/cuml/tests/test_base.py b/python/cuml/cuml/tests/test_base.py similarity index 100% rename from python/cuml/tests/test_base.py rename to python/cuml/cuml/tests/test_base.py diff --git a/python/cuml/tests/test_batched_lbfgs.py b/python/cuml/cuml/tests/test_batched_lbfgs.py similarity index 100% rename from python/cuml/tests/test_batched_lbfgs.py rename to python/cuml/cuml/tests/test_batched_lbfgs.py diff --git a/python/cuml/tests/test_benchmark.py b/python/cuml/cuml/tests/test_benchmark.py similarity index 100% rename from python/cuml/tests/test_benchmark.py rename to python/cuml/cuml/tests/test_benchmark.py diff --git a/python/cuml/tests/test_class_enumerator.py b/python/cuml/cuml/tests/test_class_enumerator.py similarity index 100% rename from python/cuml/tests/test_class_enumerator.py rename to python/cuml/cuml/tests/test_class_enumerator.py diff --git a/python/cuml/tests/test_compose.py b/python/cuml/cuml/tests/test_compose.py similarity index 100% rename from python/cuml/tests/test_compose.py rename to python/cuml/cuml/tests/test_compose.py diff --git a/python/cuml/tests/test_coordinate_descent.py b/python/cuml/cuml/tests/test_coordinate_descent.py similarity index 100% rename from python/cuml/tests/test_coordinate_descent.py rename to python/cuml/cuml/tests/test_coordinate_descent.py diff --git a/python/cuml/tests/test_cuml_descr_decor.py b/python/cuml/cuml/tests/test_cuml_descr_decor.py similarity index 100% rename from python/cuml/tests/test_cuml_descr_decor.py rename to python/cuml/cuml/tests/test_cuml_descr_decor.py diff --git a/python/cuml/tests/test_dataset_generator_types.py b/python/cuml/cuml/tests/test_dataset_generator_types.py similarity index 100% rename from python/cuml/tests/test_dataset_generator_types.py rename to python/cuml/cuml/tests/test_dataset_generator_types.py diff --git a/python/cuml/tests/test_dbscan.py b/python/cuml/cuml/tests/test_dbscan.py similarity index 100% rename from python/cuml/tests/test_dbscan.py rename to python/cuml/cuml/tests/test_dbscan.py diff --git a/python/cuml/tests/test_doctest.py b/python/cuml/cuml/tests/test_doctest.py similarity index 100% rename from python/cuml/tests/test_doctest.py rename to python/cuml/cuml/tests/test_doctest.py diff --git a/python/cuml/tests/test_fil.py b/python/cuml/cuml/tests/test_fil.py similarity index 100% rename from python/cuml/tests/test_fil.py rename to python/cuml/cuml/tests/test_fil.py diff --git a/python/cuml/tests/test_hdbscan.py b/python/cuml/cuml/tests/test_hdbscan.py similarity index 100% rename from python/cuml/tests/test_hdbscan.py rename to python/cuml/cuml/tests/test_hdbscan.py diff --git a/python/cuml/tests/test_holtwinters.py b/python/cuml/cuml/tests/test_holtwinters.py similarity index 100% rename from python/cuml/tests/test_holtwinters.py rename to python/cuml/cuml/tests/test_holtwinters.py diff --git a/python/cuml/tests/test_incremental_pca.py b/python/cuml/cuml/tests/test_incremental_pca.py similarity index 100% rename from python/cuml/tests/test_incremental_pca.py rename to python/cuml/cuml/tests/test_incremental_pca.py diff --git a/python/cuml/tests/test_input_utils.py b/python/cuml/cuml/tests/test_input_utils.py similarity index 100% rename from python/cuml/tests/test_input_utils.py rename to python/cuml/cuml/tests/test_input_utils.py diff --git a/python/cuml/tests/test_internals_api.py b/python/cuml/cuml/tests/test_internals_api.py similarity index 100% rename from python/cuml/tests/test_internals_api.py rename to python/cuml/cuml/tests/test_internals_api.py diff --git a/python/cuml/tests/test_kernel_density.py b/python/cuml/cuml/tests/test_kernel_density.py similarity index 100% rename from python/cuml/tests/test_kernel_density.py rename to python/cuml/cuml/tests/test_kernel_density.py diff --git a/python/cuml/tests/test_kernel_ridge.py b/python/cuml/cuml/tests/test_kernel_ridge.py similarity index 100% rename from python/cuml/tests/test_kernel_ridge.py rename to python/cuml/cuml/tests/test_kernel_ridge.py diff --git a/python/cuml/tests/test_kmeans.py b/python/cuml/cuml/tests/test_kmeans.py similarity index 100% rename from python/cuml/tests/test_kmeans.py rename to python/cuml/cuml/tests/test_kmeans.py diff --git a/python/cuml/tests/test_kneighbors_classifier.py b/python/cuml/cuml/tests/test_kneighbors_classifier.py similarity index 100% rename from python/cuml/tests/test_kneighbors_classifier.py rename to python/cuml/cuml/tests/test_kneighbors_classifier.py diff --git a/python/cuml/tests/test_kneighbors_regressor.py b/python/cuml/cuml/tests/test_kneighbors_regressor.py similarity index 100% rename from python/cuml/tests/test_kneighbors_regressor.py rename to python/cuml/cuml/tests/test_kneighbors_regressor.py diff --git a/python/cuml/tests/test_label_binarizer.py b/python/cuml/cuml/tests/test_label_binarizer.py similarity index 100% rename from python/cuml/tests/test_label_binarizer.py rename to python/cuml/cuml/tests/test_label_binarizer.py diff --git a/python/cuml/tests/test_label_encoder.py b/python/cuml/cuml/tests/test_label_encoder.py similarity index 100% rename from python/cuml/tests/test_label_encoder.py rename to python/cuml/cuml/tests/test_label_encoder.py diff --git a/python/cuml/tests/test_lars.py b/python/cuml/cuml/tests/test_lars.py similarity index 100% rename from python/cuml/tests/test_lars.py rename to python/cuml/cuml/tests/test_lars.py diff --git a/python/cuml/tests/test_linear_model.py b/python/cuml/cuml/tests/test_linear_model.py similarity index 100% rename from python/cuml/tests/test_linear_model.py rename to python/cuml/cuml/tests/test_linear_model.py diff --git a/python/cuml/tests/test_linear_svm.py b/python/cuml/cuml/tests/test_linear_svm.py similarity index 100% rename from python/cuml/tests/test_linear_svm.py rename to python/cuml/cuml/tests/test_linear_svm.py diff --git a/python/cuml/tests/test_logger.py b/python/cuml/cuml/tests/test_logger.py similarity index 100% rename from python/cuml/tests/test_logger.py rename to python/cuml/cuml/tests/test_logger.py diff --git a/python/cuml/tests/test_make_arima.py b/python/cuml/cuml/tests/test_make_arima.py similarity index 100% rename from python/cuml/tests/test_make_arima.py rename to python/cuml/cuml/tests/test_make_arima.py diff --git a/python/cuml/tests/test_make_blobs.py b/python/cuml/cuml/tests/test_make_blobs.py similarity index 100% rename from python/cuml/tests/test_make_blobs.py rename to python/cuml/cuml/tests/test_make_blobs.py diff --git a/python/cuml/tests/test_make_classification.py b/python/cuml/cuml/tests/test_make_classification.py similarity index 100% rename from python/cuml/tests/test_make_classification.py rename to python/cuml/cuml/tests/test_make_classification.py diff --git a/python/cuml/tests/test_make_regression.py b/python/cuml/cuml/tests/test_make_regression.py similarity index 100% rename from python/cuml/tests/test_make_regression.py rename to python/cuml/cuml/tests/test_make_regression.py diff --git a/python/cuml/tests/test_mbsgd_classifier.py b/python/cuml/cuml/tests/test_mbsgd_classifier.py similarity index 100% rename from python/cuml/tests/test_mbsgd_classifier.py rename to python/cuml/cuml/tests/test_mbsgd_classifier.py diff --git a/python/cuml/tests/test_mbsgd_regressor.py b/python/cuml/cuml/tests/test_mbsgd_regressor.py similarity index 100% rename from python/cuml/tests/test_mbsgd_regressor.py rename to python/cuml/cuml/tests/test_mbsgd_regressor.py diff --git a/python/cuml/tests/test_meta_estimators.py b/python/cuml/cuml/tests/test_meta_estimators.py similarity index 100% rename from python/cuml/tests/test_meta_estimators.py rename to python/cuml/cuml/tests/test_meta_estimators.py diff --git a/python/cuml/tests/test_metrics.py b/python/cuml/cuml/tests/test_metrics.py similarity index 100% rename from python/cuml/tests/test_metrics.py rename to python/cuml/cuml/tests/test_metrics.py diff --git a/python/cuml/tests/test_module_config.py b/python/cuml/cuml/tests/test_module_config.py similarity index 100% rename from python/cuml/tests/test_module_config.py rename to python/cuml/cuml/tests/test_module_config.py diff --git a/python/cuml/tests/test_multiclass.py b/python/cuml/cuml/tests/test_multiclass.py similarity index 100% rename from python/cuml/tests/test_multiclass.py rename to python/cuml/cuml/tests/test_multiclass.py diff --git a/python/cuml/tests/test_naive_bayes.py b/python/cuml/cuml/tests/test_naive_bayes.py similarity index 100% rename from python/cuml/tests/test_naive_bayes.py rename to python/cuml/cuml/tests/test_naive_bayes.py diff --git a/python/cuml/tests/test_nearest_neighbors.py b/python/cuml/cuml/tests/test_nearest_neighbors.py similarity index 100% rename from python/cuml/tests/test_nearest_neighbors.py rename to python/cuml/cuml/tests/test_nearest_neighbors.py diff --git a/python/cuml/tests/test_one_hot_encoder.py b/python/cuml/cuml/tests/test_one_hot_encoder.py similarity index 100% rename from python/cuml/tests/test_one_hot_encoder.py rename to python/cuml/cuml/tests/test_one_hot_encoder.py diff --git a/python/cuml/tests/test_pca.py b/python/cuml/cuml/tests/test_pca.py similarity index 100% rename from python/cuml/tests/test_pca.py rename to python/cuml/cuml/tests/test_pca.py diff --git a/python/cuml/tests/test_pickle.py b/python/cuml/cuml/tests/test_pickle.py similarity index 100% rename from python/cuml/tests/test_pickle.py rename to python/cuml/cuml/tests/test_pickle.py diff --git a/python/cuml/tests/test_preprocessing.py b/python/cuml/cuml/tests/test_preprocessing.py similarity index 100% rename from python/cuml/tests/test_preprocessing.py rename to python/cuml/cuml/tests/test_preprocessing.py diff --git a/python/cuml/tests/test_prims.py b/python/cuml/cuml/tests/test_prims.py similarity index 100% rename from python/cuml/tests/test_prims.py rename to python/cuml/cuml/tests/test_prims.py diff --git a/python/cuml/tests/test_qn.py b/python/cuml/cuml/tests/test_qn.py similarity index 100% rename from python/cuml/tests/test_qn.py rename to python/cuml/cuml/tests/test_qn.py diff --git a/python/cuml/tests/test_random_forest.py b/python/cuml/cuml/tests/test_random_forest.py similarity index 100% rename from python/cuml/tests/test_random_forest.py rename to python/cuml/cuml/tests/test_random_forest.py diff --git a/python/cuml/tests/test_random_projection.py b/python/cuml/cuml/tests/test_random_projection.py similarity index 100% rename from python/cuml/tests/test_random_projection.py rename to python/cuml/cuml/tests/test_random_projection.py diff --git a/python/cuml/tests/test_serialize.py b/python/cuml/cuml/tests/test_serialize.py similarity index 100% rename from python/cuml/tests/test_serialize.py rename to python/cuml/cuml/tests/test_serialize.py diff --git a/python/cuml/tests/test_sgd.py b/python/cuml/cuml/tests/test_sgd.py similarity index 100% rename from python/cuml/tests/test_sgd.py rename to python/cuml/cuml/tests/test_sgd.py diff --git a/python/cuml/tests/test_simpl_set.py b/python/cuml/cuml/tests/test_simpl_set.py similarity index 100% rename from python/cuml/tests/test_simpl_set.py rename to python/cuml/cuml/tests/test_simpl_set.py diff --git a/python/cuml/tests/test_solver_attributes.py b/python/cuml/cuml/tests/test_solver_attributes.py similarity index 100% rename from python/cuml/tests/test_solver_attributes.py rename to python/cuml/cuml/tests/test_solver_attributes.py diff --git a/python/cuml/tests/test_sparsefuncs.py b/python/cuml/cuml/tests/test_sparsefuncs.py similarity index 100% rename from python/cuml/tests/test_sparsefuncs.py rename to python/cuml/cuml/tests/test_sparsefuncs.py diff --git a/python/cuml/tests/test_stationarity.py b/python/cuml/cuml/tests/test_stationarity.py similarity index 100% rename from python/cuml/tests/test_stationarity.py rename to python/cuml/cuml/tests/test_stationarity.py diff --git a/python/cuml/tests/test_stats.py b/python/cuml/cuml/tests/test_stats.py similarity index 100% rename from python/cuml/tests/test_stats.py rename to python/cuml/cuml/tests/test_stats.py diff --git a/python/cuml/tests/test_svm.py b/python/cuml/cuml/tests/test_svm.py similarity index 100% rename from python/cuml/tests/test_svm.py rename to python/cuml/cuml/tests/test_svm.py diff --git a/python/cuml/tests/test_target_encoder.py b/python/cuml/cuml/tests/test_target_encoder.py similarity index 100% rename from python/cuml/tests/test_target_encoder.py rename to python/cuml/cuml/tests/test_target_encoder.py diff --git a/python/cuml/tests/test_text_feature_extraction.py b/python/cuml/cuml/tests/test_text_feature_extraction.py similarity index 100% rename from python/cuml/tests/test_text_feature_extraction.py rename to python/cuml/cuml/tests/test_text_feature_extraction.py diff --git a/python/cuml/tests/test_tfidf.py b/python/cuml/cuml/tests/test_tfidf.py similarity index 100% rename from python/cuml/tests/test_tfidf.py rename to python/cuml/cuml/tests/test_tfidf.py diff --git a/python/cuml/tests/test_thirdparty.py b/python/cuml/cuml/tests/test_thirdparty.py similarity index 100% rename from python/cuml/tests/test_thirdparty.py rename to python/cuml/cuml/tests/test_thirdparty.py diff --git a/python/cuml/tests/test_train_test_split.py b/python/cuml/cuml/tests/test_train_test_split.py similarity index 100% rename from python/cuml/tests/test_train_test_split.py rename to python/cuml/cuml/tests/test_train_test_split.py diff --git a/python/cuml/tests/test_trustworthiness.py b/python/cuml/cuml/tests/test_trustworthiness.py similarity index 100% rename from python/cuml/tests/test_trustworthiness.py rename to python/cuml/cuml/tests/test_trustworthiness.py diff --git a/python/cuml/tests/test_tsne.py b/python/cuml/cuml/tests/test_tsne.py similarity index 100% rename from python/cuml/tests/test_tsne.py rename to python/cuml/cuml/tests/test_tsne.py diff --git a/python/cuml/tests/test_tsvd.py b/python/cuml/cuml/tests/test_tsvd.py similarity index 100% rename from python/cuml/tests/test_tsvd.py rename to python/cuml/cuml/tests/test_tsvd.py diff --git a/python/cuml/tests/test_umap.py b/python/cuml/cuml/tests/test_umap.py similarity index 100% rename from python/cuml/tests/test_umap.py rename to python/cuml/cuml/tests/test_umap.py diff --git a/python/cuml/tests/ts_datasets/README.md b/python/cuml/cuml/tests/ts_datasets/README.md similarity index 100% rename from python/cuml/tests/ts_datasets/README.md rename to python/cuml/cuml/tests/ts_datasets/README.md diff --git a/python/cuml/tests/ts_datasets/alcohol.csv b/python/cuml/cuml/tests/ts_datasets/alcohol.csv similarity index 100% rename from python/cuml/tests/ts_datasets/alcohol.csv rename to python/cuml/cuml/tests/ts_datasets/alcohol.csv diff --git a/python/cuml/tests/ts_datasets/cattle.csv b/python/cuml/cuml/tests/ts_datasets/cattle.csv similarity index 100% rename from python/cuml/tests/ts_datasets/cattle.csv rename to python/cuml/cuml/tests/ts_datasets/cattle.csv diff --git a/python/cuml/tests/ts_datasets/deaths_by_region.csv b/python/cuml/cuml/tests/ts_datasets/deaths_by_region.csv similarity index 100% rename from python/cuml/tests/ts_datasets/deaths_by_region.csv rename to python/cuml/cuml/tests/ts_datasets/deaths_by_region.csv diff --git a/python/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv b/python/cuml/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv rename to python/cuml/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv diff --git a/python/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv b/python/cuml/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv rename to python/cuml/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv diff --git a/python/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv b/python/cuml/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv rename to python/cuml/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv diff --git a/python/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv b/python/cuml/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv rename to python/cuml/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv diff --git a/python/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv b/python/cuml/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv rename to python/cuml/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv diff --git a/python/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv b/python/cuml/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv similarity index 100% rename from python/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv rename to python/cuml/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv diff --git a/python/cuml/tests/ts_datasets/guest_nights_by_region.csv b/python/cuml/cuml/tests/ts_datasets/guest_nights_by_region.csv similarity index 100% rename from python/cuml/tests/ts_datasets/guest_nights_by_region.csv rename to python/cuml/cuml/tests/ts_datasets/guest_nights_by_region.csv diff --git a/python/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv b/python/cuml/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv similarity index 100% rename from python/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv rename to python/cuml/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv diff --git a/python/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv b/python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv similarity index 100% rename from python/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv rename to python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv diff --git a/python/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv b/python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv similarity index 100% rename from python/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv rename to python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv diff --git a/python/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv b/python/cuml/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv similarity index 100% rename from python/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv rename to python/cuml/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv diff --git a/python/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv b/python/cuml/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv similarity index 100% rename from python/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv rename to python/cuml/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv diff --git a/python/cuml/tests/ts_datasets/passenger_movements.csv b/python/cuml/cuml/tests/ts_datasets/passenger_movements.csv similarity index 100% rename from python/cuml/tests/ts_datasets/passenger_movements.csv rename to python/cuml/cuml/tests/ts_datasets/passenger_movements.csv diff --git a/python/cuml/tests/ts_datasets/police_recorded_crime.csv b/python/cuml/cuml/tests/ts_datasets/police_recorded_crime.csv similarity index 100% rename from python/cuml/tests/ts_datasets/police_recorded_crime.csv rename to python/cuml/cuml/tests/ts_datasets/police_recorded_crime.csv diff --git a/python/cuml/tests/ts_datasets/population_estimate.csv b/python/cuml/cuml/tests/ts_datasets/population_estimate.csv similarity index 100% rename from python/cuml/tests/ts_datasets/population_estimate.csv rename to python/cuml/cuml/tests/ts_datasets/population_estimate.csv diff --git a/python/cuml/tests/ts_datasets/population_estimate_missing.csv b/python/cuml/cuml/tests/ts_datasets/population_estimate_missing.csv similarity index 100% rename from python/cuml/tests/ts_datasets/population_estimate_missing.csv rename to python/cuml/cuml/tests/ts_datasets/population_estimate_missing.csv diff --git a/python/cuml/thirdparty_adapters/__init__.py b/python/cuml/cuml/thirdparty_adapters/__init__.py similarity index 100% rename from python/cuml/thirdparty_adapters/__init__.py rename to python/cuml/cuml/thirdparty_adapters/__init__.py diff --git a/python/cuml/thirdparty_adapters/adapters.py b/python/cuml/cuml/thirdparty_adapters/adapters.py similarity index 100% rename from python/cuml/thirdparty_adapters/adapters.py rename to python/cuml/cuml/thirdparty_adapters/adapters.py diff --git a/python/cuml/thirdparty_adapters/sparsefuncs_fast.py b/python/cuml/cuml/thirdparty_adapters/sparsefuncs_fast.py similarity index 100% rename from python/cuml/thirdparty_adapters/sparsefuncs_fast.py rename to python/cuml/cuml/thirdparty_adapters/sparsefuncs_fast.py diff --git a/python/cuml/cuml/tsa/CMakeLists.txt b/python/cuml/cuml/tsa/CMakeLists.txt new file mode 100644 index 0000000000..5c9e189064 --- /dev/null +++ b/python/cuml/cuml/tsa/CMakeLists.txt @@ -0,0 +1,49 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + arima.pyx + auto_arima.pyx + holtwinters.pyx + seasonality.pyx + stationarity.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + arima + auto_arima + holtwinters + seasonality + stationarity + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() diff --git a/python/cuml/tsa/__init__.py b/python/cuml/cuml/tsa/__init__.py similarity index 100% rename from python/cuml/tsa/__init__.py rename to python/cuml/cuml/tsa/__init__.py diff --git a/python/cuml/tsa/arima.pxd b/python/cuml/cuml/tsa/arima.pxd similarity index 100% rename from python/cuml/tsa/arima.pxd rename to python/cuml/cuml/tsa/arima.pxd diff --git a/python/cuml/tsa/arima.pyx b/python/cuml/cuml/tsa/arima.pyx similarity index 100% rename from python/cuml/tsa/arima.pyx rename to python/cuml/cuml/tsa/arima.pyx diff --git a/python/cuml/tsa/auto_arima.pyx b/python/cuml/cuml/tsa/auto_arima.pyx similarity index 100% rename from python/cuml/tsa/auto_arima.pyx rename to python/cuml/cuml/tsa/auto_arima.pyx diff --git a/python/cuml/tsa/batched_lbfgs.py b/python/cuml/cuml/tsa/batched_lbfgs.py similarity index 100% rename from python/cuml/tsa/batched_lbfgs.py rename to python/cuml/cuml/tsa/batched_lbfgs.py diff --git a/python/cuml/tsa/holtwinters.pyx b/python/cuml/cuml/tsa/holtwinters.pyx similarity index 100% rename from python/cuml/tsa/holtwinters.pyx rename to python/cuml/cuml/tsa/holtwinters.pyx diff --git a/python/cuml/tsa/seasonality.pyx b/python/cuml/cuml/tsa/seasonality.pyx similarity index 100% rename from python/cuml/tsa/seasonality.pyx rename to python/cuml/cuml/tsa/seasonality.pyx diff --git a/python/cuml/tsa/stationarity.pyx b/python/cuml/cuml/tsa/stationarity.pyx similarity index 100% rename from python/cuml/tsa/stationarity.pyx rename to python/cuml/cuml/tsa/stationarity.pyx diff --git a/python/cuml/pyproject.toml b/python/cuml/pyproject.toml new file mode 100644 index 0000000000..e3fe544bef --- /dev/null +++ b/python/cuml/pyproject.toml @@ -0,0 +1,24 @@ +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[build-system] + +requires = [ + "wheel", + "setuptools", + "cython>=0.29,<0.30", + "scikit-build>=0.13.1", + "cmake>=3.20.1,!=3.23.0", + "ninja", +] diff --git a/python/pytest.ini b/python/cuml/pytest.ini similarity index 100% rename from python/pytest.ini rename to python/cuml/pytest.ini diff --git a/python/setup.py b/python/cuml/setup.py similarity index 51% rename from python/setup.py rename to python/cuml/setup.py index 023a9f47de..1b4c2bd0a0 100644 --- a/python/setup.py +++ b/python/cuml/setup.py @@ -34,11 +34,18 @@ from setuputils import clean_folder from setuputils import get_environment_option from setuputils import get_cli_option +from setuputils import get_cuda_version_from_header import versioneer -from cython_build_ext import cython_build_ext +# from cython_build_ext import cython_build_ext +from skbuild.command.build_ext import build_ext -install_requires = ['numba', 'cython'] +# FIXME: List correct deps +install_requires = [ + "cuda-python>=11.5,<11.7.1", + "numba>=0.53.1", + "numpy", +] ############################################################################## # - Print of build options used by setup.py -------------------------------- @@ -62,6 +69,10 @@ cuda_include_dir = os.path.join(cuda_home, "include") cuda_lib_dir = os.path.join(cuda_home, "lib64") +install_requires.append( + "cupy-cuda" + get_cuda_version_from_header(cuda_include_dir) +) + ############################################################################## # - Clean target ------------------------------------------------------------- @@ -97,12 +108,6 @@ sys.exit(0) -if "--multigpu" in sys.argv: - warnings.warn("Flag --multigpu is deprecated. By default cuML is" - "built with multi GPU support. To disable it use the flag" - "--singlegpu") - sys.argv.remove('--multigpu') - if not libcuml_path: libcuml_path = '../cpp/build/' @@ -127,137 +132,137 @@ # `python setup.py build_ext --debug --singlegpu` -class cuml_build(_build): +# class cuml_build(_build): - def initialize_options(self): +# def initialize_options(self): - self.singlegpu = False - super().initialize_options() +# self.singlegpu = False +# super().initialize_options() - def finalize_options(self): +# def finalize_options(self): - # distutils plain build command override cannot be done just setting - # user_options and boolean options like build_ext below. Distribution - # object has all the args used by the user, we can check that. - self.singlegpu = '--singlegpu' in self.distribution.script_args +# # distutils plain build command override cannot be done just setting +# # user_options and boolean options like build_ext below. Distribution +# # object has all the args used by the user, we can check that. +# self.singlegpu = '--singlegpu' in self.distribution.script_args - libs = ['cuml++', 'cudart', 'cusparse', 'cusolver'] +# libs = ['cuml++', 'cudart', 'cusparse', 'cusolver'] - include_dirs = [ - '../cpp/src', - '../cpp/include', - '../cpp/src_prims', - cuda_include_dir, - numpy.get_include(), - '../cpp/build/faiss/src/faiss', - os.path.dirname(sysconfig.get_path("include")) - ] +# include_dirs = [ +# '../cpp/src', +# '../cpp/include', +# '../cpp/src_prims', +# cuda_include_dir, +# numpy.get_include(), +# '../cpp/build/faiss/src/faiss', +# os.path.dirname(sysconfig.get_path("include")) +# ] - python_exc_list = [] +# python_exc_list = [] - if (self.singlegpu): - python_exc_list = ["*.dask", "*.dask.*"] - else: - libs.append('cumlprims_mg') - libs.append('nccl') +# if (self.singlegpu): +# python_exc_list = ["*.dask", "*.dask.*"] +# else: +# libs.append('cumlprims_mg') +# libs.append('nccl') - sys_include = os.path.dirname(sysconfig.get_path("include")) - include_dirs.append("%s/cumlprims" % sys_include) +# sys_include = os.path.dirname(sysconfig.get_path("include")) +# include_dirs.append("%s/cumlprims" % sys_include) - # Find packages now that --singlegpu has been determined - self.distribution.packages = find_packages(include=['cuml', 'cuml.*'], - exclude=python_exc_list) +# # Find packages now that --singlegpu has been determined +# self.distribution.packages = find_packages(include=['cuml', 'cuml.*'], +# exclude=python_exc_list) - # Build the extensions list - extensions = [ - Extension("*", - sources=["cuml/**/*.pyx"], - include_dirs=include_dirs, - library_dirs=[ - get_python_lib(), - libcuml_path, - cuda_lib_dir, - os.path.join(os.sys.prefix, "lib") - ], - libraries=libs, - language='c++', - extra_compile_args=['-std=c++17']) - ] +# # Build the extensions list +# extensions = [ +# Extension("*", +# sources=["cuml/**/*.pyx"], +# include_dirs=include_dirs, +# library_dirs=[ +# get_python_lib(), +# libcuml_path, +# cuda_lib_dir, +# os.path.join(os.sys.prefix, "lib") +# ], +# libraries=libs, +# language='c++', +# extra_compile_args=['-std=c++17']) +# ] - self.distribution.ext_modules = extensions +# self.distribution.ext_modules = extensions - super().finalize_options() +# super().finalize_options() # This custom build_ext is only responsible for setting cython_exclude when # --singlegpu is specified -class cuml_build_ext(cython_build_ext, object): - user_options = [ - ("singlegpu", None, "Specifies whether to include multi-gpu or not"), - ] + cython_build_ext.user_options +# class cuml_build_ext(cython_build_ext, object): +# user_options = [ +# ("singlegpu", None, "Specifies whether to include multi-gpu or not"), +# ] + cython_build_ext.user_options - boolean_options = ["singlegpu"] + cython_build_ext.boolean_options +# boolean_options = ["singlegpu"] + cython_build_ext.boolean_options - def build_extensions(self): - def remove_flags(compiler, *flags): - for flag in flags: - try: - compiler.compiler_so = list( - filter((flag).__ne__, compiler.compiler_so) - ) - except Exception: - pass - # Full optimization - self.compiler.compiler_so.append("-O3") +# def build_extensions(self): +# def remove_flags(compiler, *flags): +# for flag in flags: +# try: +# compiler.compiler_so = list( +# filter((flag).__ne__, compiler.compiler_so) +# ) +# except Exception: +# pass +# # Full optimization +# self.compiler.compiler_so.append("-O3") - # Ignore deprecation declaraction warnings - self.compiler.compiler_so.append("-Wno-deprecated-declarations") +# # Ignore deprecation declaraction warnings +# self.compiler.compiler_so.append("-Wno-deprecated-declarations") - # adding flags to always add symbols/link of libcuml++ and transitive - # dependencies to Cython extensions - self.compiler.linker_so.append("-Wl,--no-as-needed") +# # adding flags to always add symbols/link of libcuml++ and transitive +# # dependencies to Cython extensions +# self.compiler.linker_so.append("-Wl,--no-as-needed") - # No debug symbols, full optimization, no '-Wstrict-prototypes' warning - remove_flags( - self.compiler, "-g", "-G", "-O1", "-O2", "-Wstrict-prototypes" - ) - cython_build_ext.build_extensions(self) +# # No debug symbols, full optimization, no '-Wstrict-prototypes' warning +# remove_flags( +# self.compiler, "-g", "-G", "-O1", "-O2", "-Wstrict-prototypes" +# ) +# cython_build_ext.build_extensions(self) - def initialize_options(self): +# def initialize_options(self): - self.singlegpu = None +# self.singlegpu = None - super().initialize_options() +# super().initialize_options() - def finalize_options(self): +# def finalize_options(self): - # Ensure the base build class options get set so we can use singlegpu - self.set_undefined_options( - 'build', - ('singlegpu', 'singlegpu'), - ) +# # Ensure the base build class options get set so we can use singlegpu +# self.set_undefined_options( +# 'build', +# ('singlegpu', 'singlegpu'), +# ) - # Exclude multigpu components that use libcumlprims if - # --singlegpu is used - if (self.singlegpu): - cython_exc_list = glob.glob('cuml/*/*_mg.pyx') - cython_exc_list = cython_exc_list + glob.glob('cuml/*/*_mg.pxd') +# # Exclude multigpu components that use libcumlprims if +# # --singlegpu is used +# if (self.singlegpu): +# cython_exc_list = glob.glob('cuml/*/*_mg.pyx') +# cython_exc_list = cython_exc_list + glob.glob('cuml/*/*_mg.pxd') - print('--singlegpu: excluding the following Cython components:') - pprint(cython_exc_list) +# print('--singlegpu: excluding the following Cython components:') +# pprint(cython_exc_list) - # Append to base excludes - self.cython_exclude = cython_exc_list + \ - (self.cython_exclude or []) +# # Append to base excludes +# self.cython_exclude = cython_exc_list + \ +# (self.cython_exclude or []) - super().finalize_options() +# super().finalize_options() # Specify the custom build class cmdclass = dict() cmdclass.update(versioneer.get_cmdclass()) -cmdclass["build"] = cuml_build -cmdclass["build_ext"] = cuml_build_ext +# cmdclass["build"] = cuml_build +cmdclass["build_ext"] = build_ext ############################################################################## # - Python package generation ------------------------------------------------ diff --git a/python/setuputils.py b/python/cuml/setuputils.py similarity index 94% rename from python/setuputils.py rename to python/cuml/setuputils.py index 3e8aa248f2..273ff1fca3 100644 --- a/python/setuputils.py +++ b/python/cuml/setuputils.py @@ -287,3 +287,23 @@ def get_repo_cmake_info(names, file_path): def _get_repo_path(): python_dir = Path(__file__).resolve() return str(python_dir.parent.parent.absolute()) + + +def get_cuda_version_from_header(cuda_include_dir, delimeter=""): + + cuda_version = None + + with open(os.path.join(cuda_include_dir, "cuda.h"), encoding="utf-8") as f: + for line in f.readlines(): + if re.search(r"#define CUDA_VERSION ", line) is not None: + cuda_version = line + break + + if cuda_version is None: + raise TypeError("CUDA_VERSION not found in cuda.h") + cuda_version = int(cuda_version.split()[2]) + return "%d%s%d" % ( + cuda_version // 1000, + delimeter, + (cuda_version % 1000) // 10, + ) diff --git a/python/versioneer.py b/python/cuml/versioneer.py similarity index 100% rename from python/versioneer.py rename to python/cuml/versioneer.py diff --git a/python/cython_build_ext.py b/python/cython_build_ext.py deleted file mode 100644 index 0c0cb5aeb1..0000000000 --- a/python/cython_build_ext.py +++ /dev/null @@ -1,250 +0,0 @@ -# -# Copyright (c) 2020, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -import sys - -# TODO: It should be possible to support Cython-less distribution following -# this guide and removing the direct import of Cython: -# https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html#distributing-cython-modules - -# Must import in this order: -# setuptools -> Cython.Distutils.build_ext -> setuptools.command.build_ext -# Otherwise, setuptools.command.build_ext ends up inheriting from -# Cython.Distutils.old_build_ext which we do not want -import setuptools - -try: - from Cython.Distutils.build_ext import new_build_ext as _build_ext -except ImportError: - from setuptools.command.build_ext import build_ext as _build_ext - -import setuptools.command.build_ext - - -class cython_build_ext(_build_ext, object): - """ - This class follows the design of `Cython.Distutils.build_ext.new_build_ext` - to allow for parallel `cythonize()` but adds options for the various - arguments that can be passed to `cythonize()` including separate options - for `compiler_directives`. This build extension can be directly used in - place of `new_build_ext` for any Cython project that needs to set global - parameters in the build phase. See the documentation for more information - on the `cythonize()` arguments. - - Parameters - ---------- - annotate : bool, default=False - If True, will produce a HTML file for each of the .pyx or .py files - compiled. The HTML file gives an indication of how much Python - interaction there is in each of the source code lines, compared to - plain C code. It also allows you to see the C/C++ code generated for - each line of Cython code. This report is invaluable when optimizing a - function for speed, and for determining when to release the GIL: in - general, a nogil block may contain only “white” code. See examples in - Determining where to add types or Primes. - binding : bool, default=True - Controls whether free functions behave more like Python’s CFunctions - (e.g. len()) or, when set to True, more like Python’s functions. When - enabled, functions will bind to an instance when looked up as a class - attribute (hence the name) and will emulate the attributes of Python - functions, including introspections like argument names and - annotations. - - Changed in version 3.0.0: Default changed from False to True - cython_exclude : list of str - When passing glob patterns as module_list, you can exclude certain - module names explicitly by passing them into the exclude option. - embedsignature : bool, default=False - If set to True, Cython will embed a textual copy of the call signature - in the docstring of all Python visible functions and classes. Tools - like IPython and epydoc can thus display the signature, which cannot - otherwise be retrieved after compilation. - gdb_debug : bool, default=False - Passes the `gdb_debug` argument to `cythonize()`. Setting up debugging - for Cython can be difficult. See the debugging docs here - https://cython.readthedocs.io/en/latest/src/userguide/debugging.html - language_level : {"2", "3", "3str"}, default="2" - Globally set the Python language level to be used for module - compilation. Default is compatibility with Python 2. To enable Python 3 - source code semantics, set this to 3 (or 3str) - linetrace : bool, default=False - Write line tracing hooks for Python profilers or coverage reporting - into the compiled C code. This also enables profiling. Default is - False. Note that the generated module will not actually use line - tracing, unless you additionally pass the C macro definition - ``CYTHON_TRACE=1`` to the C compiler (e.g. using the setuptools option - define_macros). Define ``CYTHON_TRACE_NOGIL=1`` to also include nogil - functions and sections. - profile : bool, default=False - Write hooks for Python profilers into the compiled C code. - """ - user_options = [ - ("annotate=", - None, - "Passes the `annotate` argument to `cythonize()`. See the Cython " - "docs for more info."), - ("binding", - None, - "Sets the binding Cython compiler directive. See the Cython docs for " - "more info."), - ("cython-exclude=", - None, - "Sets the exclude argument for `cythonize()`. See the Cython docs for" - " more info."), - ("embedsignature", - None, - "Sets the `embedsignature` Cython compiler directive. See the Cython " - "docs for more info."), - ("gdb-debug=", - None, - "Passes the `gdb_debug` argument to `cythonize()`. See the Cython " - "docs for more info."), - ('language-level=', - None, - 'Sets the python language syntax to use "2", "3", "3str".'), - ("linetrace=", - None, - "Passes the `linetrace` argument to `cythonize()`. See the Cython " - "docs for more info."), - ("profile", - None, - "Sets the profile Cython compiler directive. See the Cython docs for " - "more info."), - ] + _build_ext.user_options - - boolean_options = [ - "annotate", - "binding", - "embedsignature", - "gdb-debug", - "linetrace", - "profile", - ] + _build_ext.boolean_options - - def initialize_options(self): - """ - Set the default values for the `user_options` to None to allow us to - detect if they were set by the user - """ - - self.annotate = None - self.binding = None - self.cython_exclude = None - self.embedsignature = None - self.gdb_debug = None - self.language_level = None - self.linetrace = None - self.profile = None - - super().initialize_options() - - def finalize_options(self): - """ - Determines any user defined options and finalizes the Cython - configuration before compilation - """ - - # Ensure the base build class options get set so we can use parallel - self.set_undefined_options( - 'build', - ('build_lib', 'build_lib'), - ('build_temp', 'build_temp'), - ('compiler', 'compiler'), - ('debug', 'debug'), - ('force', 'force'), - ('parallel', 'parallel'), - ('plat_name', 'plat_name'), - ) - - # If ext_modules is set, then build the cythonize argument list - if self.distribution.ext_modules: - if self.language_level is None: - self.language_level = str(sys.version_info[0]) - - assert self.language_level in ( - '2', '3', - '3str'), 'Incorrect Cython language level ("{0}")'.format( - self.language_level) - - compiler_directives = dict(language_level=self.language_level) - - if (self.binding is not None): - self.binding = bool(self.binding) - compiler_directives.update({"binding": self.binding}) - - if (self.profile is not None): - self.profile = bool(self.profile) - compiler_directives.update({"profile": self.profile}) - - if (self.linetrace is not None): - self.linetrace = bool(self.linetrace) - compiler_directives.update({"linetrace": self.linetrace}) - - # Also need the compiler directive. Only add if it hasnt been - # specified yet - for ext in self.distribution.ext_modules: - if (not hasattr(ext, "define_macros")): - ext.define_macros = [] - - found_macro = False - - for mac in ext.define_macros: - if (mac[0] == "CYTHON_TRACE_NOGIL"): - found_macro = True - break - - if not found_macro: - ext.define_macros.append(("CYTHON_TRACE_NOGIL", 1)) - - if (self.embedsignature is not None): - self.embedsignature = bool(self.embedsignature) - compiler_directives.update( - {"embedsignature": self.embedsignature}) - - cythonize_kwargs = {} - - if (self.annotate is not None): - - cythonize_kwargs.update({"annotate": self.annotate}) - - if (self.cython_exclude is not None): - - if (isinstance(self.cython_exclude, str)): - self.cython_exclude = list(self.cython_exclude) - - cythonize_kwargs.update({"exclude": self.cython_exclude}) - - if (self.gdb_debug is not None): - - cythonize_kwargs.update({"gdb_debug": self.gdb_debug}) - - # Handle nthreads separately to mimic what Cython does - nthreads = getattr(self, 'parallel', None) # -j option in Py3.5+ - nthreads = int(nthreads) if nthreads else None - - # Delay import this to allow for Cython-less installs - from Cython.Build.Dependencies import cythonize - - # Finally, cythonize the arguments - self.distribution.ext_modules = cythonize( - self.distribution.ext_modules, - nthreads=nthreads, - force=self.force, - compiler_directives=compiler_directives, - **cythonize_kwargs) - - # Skip calling super() and jump straight to setuptools - setuptools.command.build_ext.build_ext.finalize_options(self) From d12eaeb9e3906705416db855d661b2700b0f0a9e Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Thu, 14 Jul 2022 18:12:00 -0500 Subject: [PATCH 02/37] FIX Multiple cmake fixes --- python/cuml/CMakeLists.txt | 2 -- python/cuml/cuml/common/CMakeLists.txt | 1 - python/cuml/cuml/fil/CMakeLists.txt | 10 ++----- python/cuml/cuml/linear_model/CMakeLists.txt | 24 ++++++++--------- python/cuml/cuml/metrics/CMakeLists.txt | 14 +++++----- python/{ => cuml}/setup.cfg | 14 ++-------- python/cuml/setup.py | 28 +++++++++++--------- 7 files changed, 39 insertions(+), 54 deletions(-) rename python/{ => cuml}/setup.cfg (86%) diff --git a/python/cuml/CMakeLists.txt b/python/cuml/CMakeLists.txt index 4f2f8b5372..bf05cbbc60 100644 --- a/python/cuml/CMakeLists.txt +++ b/python/cuml/CMakeLists.txt @@ -81,7 +81,6 @@ add_subdirectory(cuml/common) add_subdirectory(cuml/internals) add_subdirectory(cuml/cluster) -add_subdirectory(cuml/common) add_subdirectory(cuml/datasets) add_subdirectory(cuml/decomposition) add_subdirectory(cuml/ensemble) @@ -95,7 +94,6 @@ add_subdirectory(cuml/neighbors) add_subdirectory(cuml/random_projection) add_subdirectory(cuml/solvers) add_subdirectory(cuml/svm) -add_subdirectory(cuml/thirdparty_adapters) add_subdirectory(cuml/tsa) add_subdirectory(cuml/experimental/linear_model) diff --git a/python/cuml/cuml/common/CMakeLists.txt b/python/cuml/cuml/common/CMakeLists.txt index 03ede44fd6..1af9a26527 100644 --- a/python/cuml/cuml/common/CMakeLists.txt +++ b/python/cuml/cuml/common/CMakeLists.txt @@ -21,7 +21,6 @@ set(cython_sources logger.pyx opg_data_utils_mg.pyx pointer_utils.pyx - sparse_utils.pyx ) set(linked_libraries cuml::${CUML_CPP_TARGET}) diff --git a/python/cuml/cuml/fil/CMakeLists.txt b/python/cuml/cuml/fil/CMakeLists.txt index d412a51f69..6f3e582257 100644 --- a/python/cuml/cuml/fil/CMakeLists.txt +++ b/python/cuml/cuml/fil/CMakeLists.txt @@ -15,10 +15,7 @@ # todo: disable _mg for singlegpu set(cython_sources - simpl_set.pyx - t_sne.pyx - umap.pyx - umap_utils.pyx + fil.pyx ) set(linked_libraries cuml::${CUML_CPP_TARGET}) @@ -33,10 +30,7 @@ rapids_cython_create_modules( # CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy - simpl_set - t_sne - umap - umap_utils + fil ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") diff --git a/python/cuml/cuml/linear_model/CMakeLists.txt b/python/cuml/cuml/linear_model/CMakeLists.txt index ffa356fdd0..077c0f194b 100644 --- a/python/cuml/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/cuml/linear_model/CMakeLists.txt @@ -17,7 +17,7 @@ set(cython_sources base.pyx base_mg.pyx - elastc_net.pyx + elastic_net.pyx linear_regression.pyx linear_regression_mg.pyx logistic_regression.pyx @@ -31,7 +31,7 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX linear_ ) # TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was @@ -39,16 +39,16 @@ rapids_cython_create_modules( # CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy - base - base_mg - elastc_net - linear_regression - linear_regression_mg - logistic_regression - mbsgd_classifier - mbsgd_regressor - ridge - ridge_mg + linear_base + linear_base_mg + linear_elastc_net + linear_linear_regression + linear_linear_regression_mg + linear_logistic_regression + linear_mbsgd_classifier + linear_mbsgd_regressor + linear_ridge + linear_ridge_mg ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") diff --git a/python/cuml/cuml/metrics/CMakeLists.txt b/python/cuml/cuml/metrics/CMakeLists.txt index 6021e1b412..97e1ee422a 100644 --- a/python/cuml/cuml/metrics/CMakeLists.txt +++ b/python/cuml/cuml/metrics/CMakeLists.txt @@ -27,7 +27,7 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX metrics_ ) # TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was @@ -35,12 +35,12 @@ rapids_cython_create_modules( # CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy - accuracy - hinge_loss - kl_divergence - pairwise_distances - regression - trustworthiness + metrics_accuracy + metrics_hinge_loss + metrics_kl_divergence + metrics_pairwise_distances + metrics_regression + metrics_trustworthiness ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") diff --git a/python/setup.cfg b/python/cuml/setup.cfg similarity index 86% rename from python/setup.cfg rename to python/cuml/setup.cfg index 0118468db4..4c4f2803bb 100644 --- a/python/setup.cfg +++ b/python/cuml/setup.cfg @@ -2,7 +2,7 @@ [flake8] filename = *.py, *.pyx, *.pxd -exclude = +exclude = cpp, thirdparty, versioneer.py, @@ -20,7 +20,7 @@ exclude = # W503: line break before binary operator (breaks lines that start with a pointer) # W504: line break after binary operator (breaks lines that end with a pointer) -per-file-ignores = +per-file-ignores = # imported but unused __init__.py: F401 # Cython Exclusions @@ -37,13 +37,3 @@ versionfile_source = cuml/_version.py versionfile_build = cuml/_version.py tag_prefix = v parentdir_prefix = cuml- - - -# Project wide, Cython settings -[build_ext] -inplace = True -binding = True -language_level = 3 -profile = False -linetrace = False -embedsignature = True \ No newline at end of file diff --git a/python/cuml/setup.py b/python/cuml/setup.py index 1b4c2bd0a0..f80c3ccbf8 100644 --- a/python/cuml/setup.py +++ b/python/cuml/setup.py @@ -14,22 +14,23 @@ # limitations under the License. # -import glob +# import glob import os import shutil import sys -import sysconfig -import warnings -from pprint import pprint +# import sysconfig +# import warnings +# from pprint import pprint from pathlib import Path +# from setuptools import find_packages +# from setuptools import setup from setuptools import find_packages -from setuptools import setup -from setuptools.extension import Extension -from distutils.sysconfig import get_python_lib -from distutils.command.build import build as _build +# from setuptools.extension import Extension +# from distutils.sysconfig import get_python_lib +# from distutils.command.build import build as _build -import numpy +# import numpy from setuputils import clean_folder from setuputils import get_environment_option @@ -38,6 +39,7 @@ import versioneer # from cython_build_ext import cython_build_ext +from skbuild import setup from skbuild.command.build_ext import build_ext # FIXME: List correct deps @@ -259,9 +261,10 @@ # Specify the custom build class -cmdclass = dict() -cmdclass.update(versioneer.get_cmdclass()) +# cmdclass = dict() +# cmdclass.update(versioneer.get_cmdclass()) # cmdclass["build"] = cuml_build +cmdclass = versioneer.get_cmdclass() cmdclass["build_ext"] = build_ext ############################################################################## @@ -277,7 +280,8 @@ "Programming Language :: Python :: 3.9" ], author="NVIDIA Corporation", - setup_requires=['cython'], + setup_requires=['Cython>=0.29,<0.30'], + packages=find_packages(include=['cuml', 'cuml.*']), install_requires=install_requires, license="Apache", cmdclass=cmdclass, From b92e40a9a52ee1729ca7ca1877f2d6d318d4a91c Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Fri, 15 Jul 2022 12:21:02 -0500 Subject: [PATCH 03/37] FIX Multiple small fixes --- .gitignore | 2 +- python/cuml/CMakeLists.txt | 64 ++++++++++++++++++- python/cuml/cuml/common/CMakeLists.txt | 2 + python/cuml/cuml/datasets/CMakeLists.txt | 6 +- python/cuml/cuml/ensemble/CMakeLists.txt | 4 +- python/cuml/cuml/explainer/CMakeLists.txt | 10 +-- python/cuml/cuml/internals/CMakeLists.txt | 2 + python/cuml/cuml/linear_model/CMakeLists.txt | 2 +- .../cuml/cuml/metrics/cluster/CMakeLists.txt | 54 ++++++++++++++++ 9 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 python/cuml/cuml/metrics/cluster/CMakeLists.txt diff --git a/.gitignore b/.gitignore index da3de1784b..d338784258 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ dask-worker-space/ tmp/ .hypothesis wheels/ - _skbuild/ +_skbuild/ ## files pickled in notebook when ran during python docstring generation docs/source/*.model diff --git a/python/cuml/CMakeLists.txt b/python/cuml/CMakeLists.txt index bf05cbbc60..7415d9d938 100644 --- a/python/cuml/CMakeLists.txt +++ b/python/cuml/CMakeLists.txt @@ -14,11 +14,14 @@ cmake_minimum_required(VERSION 3.20.1 FATAL_ERROR) -set(cuml_version 22.08.00) - file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-22.08/RAPIDS.cmake ${CMAKE_BINARY_DIR}/RAPIDS.cmake) include(${CMAKE_BINARY_DIR}/RAPIDS.cmake) +include(rapids-cmake) +include(rapids-cpm) +include(rapids-find) + +set(cuml_version 22.08.00) project( cuml-python @@ -36,13 +39,66 @@ option(FIND_CUML_CPP "Search for existing CUML C++ installations before defaulti message(VERBOSE "CUML_PY: Searching for existing CUML C++ installations before defaulting to local files: ${FIND_CUML_CPP}") +set(CUML_CPP_TARGET "cuml++") ################################################################################ # - Process User Options ------------------------------------------------------ +rapids_cpm_init() +include(../../cpp/cmake/thirdparty/get_treelite.cmake) # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) - find_package(cuml ${cuml_version} REQUIRED) + include(rapids-cuda) + rapids_cuda_init_architectures(CUML) + enable_language(CUDA) + + # FIXME: check of this is necessary + # Since cugraph only enables CUDA optionally, we need to manually include the file that + # rapids_cuda_init_architectures relies on `project` including. + + include("${CMAKE_PROJECT_cuml-python_INCLUDE}") +set(RAFT_VERSION "22.08") +set(RAFT_FORK "rapidsai") +set(RAFT_PINNED_TAG "branch-${RAFT_VERSION}") + +function(find_and_configure_raft) + set(oneValueArgs VERSION FORK PINNED_TAG COMPILE_LIBRARIES) + cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN} ) + + #----------------------------------------------------- + # Invoke CPM find_package() + #----------------------------------------------------- + + string(APPEND RAFT_COMPONENTS "distance") + string(APPEND RAFT_COMPONENTS " nn") + + rapids_cpm_find(raft ${PKG_VERSION} + GLOBAL_TARGETS raft::raft + BUILD_EXPORT_SET projname-exports + INSTALL_EXPORT_SET projname-exports + CPM_ARGS + GIT_REPOSITORY https://github.com/${PKG_FORK}/raft.git + GIT_TAG ${PKG_PINNED_TAG} + SOURCE_SUBDIR cpp + FIND_PACKAGE_ARGUMENTS "COMPONENTS ${RAFT_COMPONENTS}" + OPTIONS + "BUILD_TESTS OFF" + "BUILD_BENCH OFF" + "RAFT_COMPILE_LIBRARIES ${PKG_COMPILE_LIBRARIES}" + ) + +endfunction() + +# Change pinned tag here to test a commit in CI +# To use a different RAFT locally, set the CMake variable +# CPM_raft_SOURCE=/path/to/local/raft +find_and_configure_raft(VERSION ${RAFT_VERSION}.00 + FORK ${RAFT_FORK} + PINNED_TAG ${RAFT_PINNED_TAG} + COMPILE_LIBRARIES NO +) +find_package(cuml ${cuml_version} REQUIRED) else() set(cuml_FOUND OFF) endif() @@ -90,6 +146,7 @@ add_subdirectory(cuml/kernel_ridge) add_subdirectory(cuml/linear_model) add_subdirectory(cuml/manifold) add_subdirectory(cuml/metrics) +add_subdirectory(cuml/metrics/cluster) add_subdirectory(cuml/neighbors) add_subdirectory(cuml/random_projection) add_subdirectory(cuml/solvers) @@ -97,3 +154,4 @@ add_subdirectory(cuml/svm) add_subdirectory(cuml/tsa) add_subdirectory(cuml/experimental/linear_model) + diff --git a/python/cuml/cuml/common/CMakeLists.txt b/python/cuml/cuml/common/CMakeLists.txt index 1af9a26527..852d3c2482 100644 --- a/python/cuml/cuml/common/CMakeLists.txt +++ b/python/cuml/cuml/common/CMakeLists.txt @@ -44,3 +44,5 @@ endforeach() foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() + +target_include_directories(pointer_utils PRIVATE "../../../../cpp/src/") diff --git a/python/cuml/cuml/datasets/CMakeLists.txt b/python/cuml/cuml/datasets/CMakeLists.txt index 8b060af015..69dedb31cc 100644 --- a/python/cuml/cuml/datasets/CMakeLists.txt +++ b/python/cuml/cuml/datasets/CMakeLists.txt @@ -15,6 +15,7 @@ # todo: disable _mg for singlegpu set(cython_sources + arima.pyx regression.pyx ) @@ -22,7 +23,7 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX datasets_ ) # TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was @@ -30,7 +31,8 @@ rapids_cython_create_modules( # CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy - regression + datasets_arima + datasets_regression ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") diff --git a/python/cuml/cuml/ensemble/CMakeLists.txt b/python/cuml/cuml/ensemble/CMakeLists.txt index b1a6d57476..a11d96eafa 100644 --- a/python/cuml/cuml/ensemble/CMakeLists.txt +++ b/python/cuml/cuml/ensemble/CMakeLists.txt @@ -21,7 +21,9 @@ set(cython_sources randomforestregressor.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) +set(linked_libraries + cuml::${CUML_CPP_TARGET} + ${TREELITE_LIBS}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" diff --git a/python/cuml/cuml/explainer/CMakeLists.txt b/python/cuml/cuml/explainer/CMakeLists.txt index 06154d69ba..e1dcf1a96c 100644 --- a/python/cuml/cuml/explainer/CMakeLists.txt +++ b/python/cuml/cuml/explainer/CMakeLists.txt @@ -15,6 +15,7 @@ # todo: disable _mg for singlegpu set(cython_sources + base.pyx kernel_shap.pyx permutation_shap.pyx tree_shap.pyx @@ -24,7 +25,7 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX explainer_ ) # TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was @@ -32,9 +33,10 @@ rapids_cython_create_modules( # CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy - kernel_shap - permutation_shap - tree_shap + explainer_base + explainer_kernel_shap + explainer_permutation_shap + explainer_tree_shap ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") diff --git a/python/cuml/cuml/internals/CMakeLists.txt b/python/cuml/cuml/internals/CMakeLists.txt index bf70013f40..4bec54c5c3 100644 --- a/python/cuml/cuml/internals/CMakeLists.txt +++ b/python/cuml/cuml/internals/CMakeLists.txt @@ -39,3 +39,5 @@ endforeach() foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() + +target_include_directories(internals PRIVATE "") diff --git a/python/cuml/cuml/linear_model/CMakeLists.txt b/python/cuml/cuml/linear_model/CMakeLists.txt index 077c0f194b..87b9fd33a4 100644 --- a/python/cuml/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/cuml/linear_model/CMakeLists.txt @@ -41,7 +41,7 @@ find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy linear_base linear_base_mg - linear_elastc_net + linear_elastic_net linear_linear_regression linear_linear_regression_mg linear_logistic_regression diff --git a/python/cuml/cuml/metrics/cluster/CMakeLists.txt b/python/cuml/cuml/metrics/cluster/CMakeLists.txt new file mode 100644 index 0000000000..e8193b7e96 --- /dev/null +++ b/python/cuml/cuml/metrics/cluster/CMakeLists.txt @@ -0,0 +1,54 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + + +# todo: disable _mg for singlegpu +set(cython_sources + adjusted_rand_index.pyx + completeness_score.pyx + entropy.pyx + homogeneity_score.pyx + mutual_info_score.pyx + silhouette_score.pyx + utils.pyx +) + +set(linked_libraries cuml::${CUML_CPP_TARGET}) +rapids_cython_create_modules( + CXX + SOURCE_FILES "${cython_sources}" + LINKED_LIBRARIES "${linked_libraries}" +) + +# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was +# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in +# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. +find_package(Python REQUIRED COMPONENTS Development NumPy) +set(targets_using_numpy + adjusted_rand_index + completeness_score + entropy + homogeneity_score + mutual_info_score + silhouette_score + utils + ) +foreach(target IN LISTS targets_using_numpy) + target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") +endforeach() + +foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") +endforeach() + From 6a2b1d69888a6f1b16134d67ee9f306bdabfa264 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 16:28:06 -0500 Subject: [PATCH 04/37] DBG Move files back to original structure --- python/{cuml => }/CMakeLists.txt | 0 python/cuml/{cuml => }/__init__.py | 0 python/cuml/{cuml => }/_thirdparty/__init__.py | 0 .../cuml/{cuml => }/_thirdparty/sklearn/README.md | 0 .../cuml/{cuml => }/_thirdparty/sklearn/__init__.py | 0 .../_thirdparty/sklearn/preprocessing/__init__.py | 0 .../sklearn/preprocessing/_column_transformer.py | 0 .../_thirdparty/sklearn/preprocessing/_data.py | 0 .../sklearn/preprocessing/_discretization.py | 0 .../sklearn/preprocessing/_function_transformer.py | 0 .../sklearn/preprocessing/_imputation.py | 0 .../_thirdparty/sklearn/utils/__init__.py | 0 .../{cuml => }/_thirdparty/sklearn/utils/extmath.py | 0 .../_thirdparty/sklearn/utils/skl_dependencies.py | 0 .../_thirdparty/sklearn/utils/sparsefuncs.py | 0 .../_thirdparty/sklearn/utils/validation.py | 0 python/cuml/{cuml => }/_version.py | 0 python/cuml/{cuml => }/benchmark/__init__.py | 0 python/cuml/{cuml => }/benchmark/algorithms.py | 0 .../cuml/{cuml => }/benchmark/automated/__init__.py | 0 .../benchmark/automated/bench_classification.py | 0 .../automated/bench_dimensionality_reduction.py | 0 .../benchmark/automated/bench_preprocessing.py | 0 .../benchmark/automated/bench_random_forest.py | 0 .../benchmark/automated/bench_regression.py | 0 .../{cuml => }/benchmark/automated/dask/__init__.py | 0 .../automated/dask/bench_mnmg_classification.py | 0 .../dask/bench_mnmg_dimensionality_reduction.py | 0 .../automated/dask/bench_mnmg_regression.py | 0 .../{cuml => }/benchmark/automated/dask/conftest.py | 0 .../cuml/{cuml => }/benchmark/automated/pytest.ini | 0 .../benchmark/automated/utils/__init__.py | 0 .../benchmark/automated/utils/auto_nvtx_bench.py | 0 .../{cuml => }/benchmark/automated/utils/utils.py | 0 .../cuml/{cuml => }/benchmark/bench_helper_funcs.py | 0 python/cuml/{cuml => }/benchmark/ci_benchmark.py | 0 python/cuml/{cuml => }/benchmark/datagen.py | 0 python/cuml/{cuml => }/benchmark/nvtx_benchmark.py | 0 python/cuml/{cuml => }/benchmark/run_benchmarks.py | 0 python/cuml/{cuml => }/benchmark/runners.py | 0 python/cuml/{cuml => }/cluster/CMakeLists.txt | 0 python/cuml/{cuml => }/cluster/__init__.py | 0 python/cuml/{cuml => }/cluster/agglomerative.pyx | 0 python/cuml/{cuml => }/cluster/dbscan.pyx | 0 python/cuml/{cuml => }/cluster/dbscan_mg.pyx | 0 python/cuml/{cuml => }/cluster/hdbscan.pyx | 0 python/cuml/{cuml => }/cluster/kmeans.pyx | 0 python/cuml/{cuml => }/cluster/kmeans_mg.pyx | 0 python/cuml/{cuml => }/cluster/kmeans_utils.pxd | 0 python/cuml/{cuml => }/comm/__init__.py | 0 python/cuml/{cuml => }/comm/serialize.py | 0 python/cuml/{cuml => }/common/CMakeLists.txt | 0 python/cuml/{cuml => }/common/__init__.py | 0 python/cuml/{cuml => }/common/array.py | 0 python/cuml/{cuml => }/common/array_descriptor.py | 0 python/cuml/{cuml => }/common/array_sparse.py | 0 python/cuml/{cuml => }/common/base.pyx | 0 python/cuml/{cuml => }/common/cuda.pxd | 0 python/cuml/{cuml => }/common/cuda.pyx | 0 python/cuml/{cuml => }/common/doc_utils.py | 0 python/cuml/{cuml => }/common/exceptions.py | 0 python/cuml/{cuml => }/common/handle.pyx | 0 python/cuml/{cuml => }/common/import_utils.py | 0 python/cuml/{cuml => }/common/input_utils.py | 0 python/cuml/{cuml => }/common/kernel_utils.py | 0 python/cuml/{cuml => }/common/logger.pyx | 0 python/cuml/{cuml => }/common/memory_utils.py | 0 python/cuml/{cuml => }/common/mixins.py | 0 python/cuml/{cuml => }/common/numba_utils.py | 0 python/cuml/{cuml => }/common/opg_data_utils_mg.pxd | 0 python/cuml/{cuml => }/common/opg_data_utils_mg.pyx | 0 python/cuml/{cuml => }/common/pointer_utils.pyx | 0 python/cuml/{cuml => }/common/sparse_utils.py | 0 python/cuml/{cuml => }/common/sparsefuncs.py | 0 python/cuml/{cuml => }/common/timing_utils.py | 0 python/cuml/{cuml => }/common/type_utils.py | 0 python/cuml/{cuml => }/compose/__init__.py | 0 python/cuml/{cuml => }/dask/__init__.py | 0 python/cuml/{cuml => }/dask/cluster/__init__.py | 0 python/cuml/{cuml => }/dask/cluster/dbscan.py | 0 python/cuml/{cuml => }/dask/cluster/kmeans.py | 0 python/cuml/{cuml => }/dask/common/__init__.py | 0 python/cuml/{cuml => }/dask/common/base.py | 0 .../cuml/{cuml => }/dask/common/dask_arr_utils.py | 0 python/cuml/{cuml => }/dask/common/dask_df_utils.py | 0 python/cuml/{cuml => }/dask/common/func.py | 0 python/cuml/{cuml => }/dask/common/input_utils.py | 0 python/cuml/{cuml => }/dask/common/part_utils.py | 0 python/cuml/{cuml => }/dask/common/utils.py | 0 python/cuml/{cuml => }/dask/datasets/__init__.py | 0 python/cuml/{cuml => }/dask/datasets/blobs.py | 0 .../cuml/{cuml => }/dask/datasets/classification.py | 0 python/cuml/{cuml => }/dask/datasets/regression.py | 0 python/cuml/{cuml => }/dask/datasets/utils.py | 0 .../cuml/{cuml => }/dask/decomposition/__init__.py | 0 python/cuml/{cuml => }/dask/decomposition/base.py | 0 python/cuml/{cuml => }/dask/decomposition/pca.py | 0 python/cuml/{cuml => }/dask/decomposition/tsvd.py | 0 python/cuml/{cuml => }/dask/ensemble/__init__.py | 0 python/cuml/{cuml => }/dask/ensemble/base.py | 0 .../dask/ensemble/randomforestclassifier.py | 0 .../dask/ensemble/randomforestregressor.py | 0 python/cuml/{cuml => }/dask/extended/__init__.py | 0 .../dask/extended/linear_model/__init__.py | 0 .../extended/linear_model/logistic_regression.py | 0 .../{cuml => }/dask/feature_extraction/__init__.py | 0 .../dask/feature_extraction/text/__init__.py | 0 .../feature_extraction/text/tfidf_transformer.py | 0 .../cuml/{cuml => }/dask/linear_model/__init__.py | 0 .../{cuml => }/dask/linear_model/elastic_net.py | 0 python/cuml/{cuml => }/dask/linear_model/lasso.py | 0 .../dask/linear_model/linear_regression.py | 0 python/cuml/{cuml => }/dask/linear_model/ridge.py | 0 python/cuml/{cuml => }/dask/manifold/__init__.py | 0 python/cuml/{cuml => }/dask/manifold/umap.py | 0 python/cuml/{cuml => }/dask/metrics/__init__.py | 0 .../{cuml => }/dask/metrics/confusion_matrix.py | 0 python/cuml/{cuml => }/dask/metrics/utils.py | 0 python/cuml/{cuml => }/dask/naive_bayes/__init__.py | 0 .../cuml/{cuml => }/dask/naive_bayes/naive_bayes.py | 0 python/cuml/{cuml => }/dask/neighbors/__init__.py | 0 .../dask/neighbors/kneighbors_classifier.py | 0 .../dask/neighbors/kneighbors_regressor.py | 0 .../{cuml => }/dask/neighbors/nearest_neighbors.py | 0 .../{cuml => }/dask/preprocessing/LabelEncoder.py | 0 .../cuml/{cuml => }/dask/preprocessing/__init__.py | 0 .../cuml/{cuml => }/dask/preprocessing/encoders.py | 0 python/cuml/{cuml => }/dask/preprocessing/label.py | 0 python/cuml/{cuml => }/dask/solvers/__init__.py | 0 python/cuml/{cuml => }/dask/solvers/cd.py | 0 python/cuml/{cuml => }/datasets/CMakeLists.txt | 0 python/cuml/{cuml => }/datasets/__init__.py | 0 python/cuml/{cuml => }/datasets/arima.pyx | 0 python/cuml/{cuml => }/datasets/blobs.py | 0 python/cuml/{cuml => }/datasets/classification.py | 0 python/cuml/{cuml => }/datasets/regression.pyx | 0 python/cuml/{cuml => }/datasets/utils.py | 0 python/cuml/{cuml => }/decomposition/CMakeLists.txt | 0 python/cuml/{cuml => }/decomposition/__init__.py | 0 python/cuml/{cuml => }/decomposition/base_mg.pyx | 0 .../{cuml => }/decomposition/incremental_pca.py | 0 python/cuml/{cuml => }/decomposition/pca.pyx | 0 python/cuml/{cuml => }/decomposition/pca_mg.pyx | 0 python/cuml/{cuml => }/decomposition/tsvd.pyx | 0 python/cuml/{cuml => }/decomposition/tsvd_mg.pyx | 0 python/cuml/{cuml => }/decomposition/utils.pxd | 0 python/cuml/{cuml => }/decomposition/utils_mg.pxd | 0 python/cuml/{cuml => }/ensemble/CMakeLists.txt | 0 python/cuml/{cuml => }/ensemble/__init__.py | 0 .../{cuml => }/ensemble/randomforest_common.pyx | 0 .../{cuml => }/ensemble/randomforest_shared.pxd | 0 .../{cuml => }/ensemble/randomforest_shared.pyx | 0 .../{cuml => }/ensemble/randomforestclassifier.pyx | 0 .../{cuml => }/ensemble/randomforestregressor.pyx | 0 python/cuml/{cuml => }/experimental/__init__.py | 0 .../experimental/hyperopt_utils/__init__.py | 0 .../experimental/hyperopt_utils/plotting_utils.py | 0 .../experimental/hyperparams/HPO_demo.ipynb | 0 .../experimental/linear_model/CMakeLists.txt | 0 .../experimental/linear_model/__init__.py | 0 .../{cuml => }/experimental/linear_model/lars.pyx | 0 python/cuml/{cuml => }/explainer/CMakeLists.txt | 0 python/cuml/{cuml => }/explainer/__init__.py | 0 python/cuml/{cuml => }/explainer/base.pyx | 0 python/cuml/{cuml => }/explainer/common.py | 0 python/cuml/{cuml => }/explainer/kernel_shap.pyx | 0 .../cuml/{cuml => }/explainer/permutation_shap.pyx | 0 python/cuml/{cuml => }/explainer/sampling.py | 0 python/cuml/{cuml => }/explainer/tree_shap.pyx | 0 .../cuml/{cuml => }/feature_extraction/__init__.py | 0 .../{cuml => }/feature_extraction/_stop_words.py | 0 python/cuml/{cuml => }/feature_extraction/_tfidf.py | 0 .../feature_extraction/_tfidf_vectorizer.py | 0 .../{cuml => }/feature_extraction/_vectorizers.py | 0 python/cuml/{cuml => }/feature_extraction/text.py | 0 python/cuml/{cuml => }/fil/CMakeLists.txt | 0 python/cuml/{cuml => }/fil/README.md | 0 python/cuml/{cuml => }/fil/__init__.py | 0 python/cuml/{cuml => }/fil/fil.pyx | 0 .../cuml/{cuml => }/fil/fil_performance_nrows.png | Bin python/cuml/{cuml => }/internals/CMakeLists.txt | 0 python/cuml/{cuml => }/internals/__init__.py | 0 .../{cuml => }/internals/api_context_managers.py | 0 python/cuml/{cuml => }/internals/api_decorators.py | 0 python/cuml/{cuml => }/internals/base_helpers.py | 0 .../cuml/{cuml => }/internals/callbacks_implems.h | 0 python/cuml/{cuml => }/internals/global_settings.py | 0 python/cuml/{cuml => }/internals/internals.pyx | 0 python/cuml/{cuml => }/kernel_ridge/CMakeLists.txt | 0 python/cuml/{cuml => }/kernel_ridge/__init__.py | 0 .../cuml/{cuml => }/kernel_ridge/kernel_ridge.pyx | 0 python/cuml/{cuml => }/linear_model/CMakeLists.txt | 0 python/cuml/{cuml => }/linear_model/__init__.py | 0 python/cuml/{cuml => }/linear_model/base.pyx | 0 python/cuml/{cuml => }/linear_model/base_mg.pyx | 0 python/cuml/{cuml => }/linear_model/elastic_net.pyx | 0 python/cuml/{cuml => }/linear_model/lasso.py | 0 .../{cuml => }/linear_model/linear_regression.pyx | 0 .../linear_model/linear_regression_mg.pyx | 0 .../{cuml => }/linear_model/logistic_regression.pyx | 0 .../{cuml => }/linear_model/mbsgd_classifier.pyx | 0 .../{cuml => }/linear_model/mbsgd_regressor.pyx | 0 python/cuml/{cuml => }/linear_model/ridge.pyx | 0 python/cuml/{cuml => }/linear_model/ridge_mg.pyx | 0 python/cuml/{cuml => }/manifold/CMakeLists.txt | 0 python/cuml/{cuml => }/manifold/__init__.py | 0 python/cuml/{cuml => }/manifold/simpl_set.pyx | 0 python/cuml/{cuml => }/manifold/t_sne.pyx | 0 python/cuml/{cuml => }/manifold/umap.pyx | 0 python/cuml/{cuml => }/manifold/umap_utils.pxd | 0 python/cuml/{cuml => }/manifold/umap_utils.pyx | 0 python/cuml/{cuml => }/metrics/CMakeLists.txt | 0 python/cuml/{cuml => }/metrics/__init__.py | 0 python/cuml/{cuml => }/metrics/_classification.py | 0 python/cuml/{cuml => }/metrics/_ranking.py | 0 python/cuml/{cuml => }/metrics/accuracy.pyx | 0 .../cuml/{cuml => }/metrics/cluster/CMakeLists.txt | 0 python/cuml/{cuml => }/metrics/cluster/__init__.py | 0 .../metrics/cluster/adjusted_rand_index.pyx | 0 .../metrics/cluster/completeness_score.pyx | 0 python/cuml/{cuml => }/metrics/cluster/entropy.pyx | 0 .../metrics/cluster/homogeneity_score.pyx | 0 .../metrics/cluster/mutual_info_score.pyx | 0 .../{cuml => }/metrics/cluster/silhouette_score.pyx | 0 python/cuml/{cuml => }/metrics/cluster/utils.pyx | 0 python/cuml/{cuml => }/metrics/confusion_matrix.py | 0 python/cuml/{cuml => }/metrics/distance_type.pxd | 0 python/cuml/{cuml => }/metrics/hinge_loss.pyx | 0 python/cuml/{cuml => }/metrics/kl_divergence.pyx | 0 .../cuml/{cuml => }/metrics/pairwise_distances.pyx | 0 python/cuml/{cuml => }/metrics/pairwise_kernels.py | 0 python/cuml/{cuml => }/metrics/regression.pxd | 0 python/cuml/{cuml => }/metrics/regression.pyx | 0 python/cuml/{cuml => }/metrics/trustworthiness.pyx | 0 python/cuml/{cuml => }/metrics/utils.py | 0 python/cuml/{cuml => }/model_selection/__init__.py | 0 python/cuml/{cuml => }/model_selection/_split.py | 0 python/cuml/{cuml => }/multiclass/__init__.py | 0 python/cuml/{cuml => }/multiclass/multiclass.py | 0 python/cuml/{cuml => }/naive_bayes/__init__.py | 0 python/cuml/{cuml => }/naive_bayes/naive_bayes.py | 0 python/cuml/{cuml => }/neighbors/CMakeLists.txt | 0 python/cuml/{cuml => }/neighbors/__init__.py | 0 python/cuml/{cuml => }/neighbors/ann.pxd | 0 python/cuml/{cuml => }/neighbors/ann.pyx | 0 python/cuml/{cuml => }/neighbors/kernel_density.py | 0 .../{cuml => }/neighbors/kneighbors_classifier.pyx | 0 .../neighbors/kneighbors_classifier_mg.pyx | 0 .../{cuml => }/neighbors/kneighbors_regressor.pyx | 0 .../neighbors/kneighbors_regressor_mg.pyx | 0 .../cuml/{cuml => }/neighbors/nearest_neighbors.pyx | 0 .../{cuml => }/neighbors/nearest_neighbors_mg.pyx | 0 python/cuml/{cuml => }/pipeline/__init__.py | 0 .../cuml/{cuml => }/preprocessing/LabelEncoder.py | 0 .../cuml/{cuml => }/preprocessing/TargetEncoder.py | 0 python/cuml/{cuml => }/preprocessing/__init__.py | 0 python/cuml/{cuml => }/preprocessing/encoders.py | 0 python/cuml/{cuml => }/preprocessing/label.py | 0 .../{cuml => }/preprocessing/onehotencoder_mg.py | 0 .../cuml/{cuml => }/preprocessing/text/__init__.py | 0 .../{cuml => }/preprocessing/text/stem/__init__.py | 0 .../preprocessing/text/stem/porter_stemmer.py | 0 .../text/stem/porter_stemmer_utils/__init__.py | 0 .../porter_stemmer_utils/consonant_vowel_utils.py | 0 .../stem/porter_stemmer_utils/len_flags_utils.py | 0 .../text/stem/porter_stemmer_utils/measure_utils.py | 0 .../porter_stemmer_utils/porter_stemmer_rules.py | 0 .../text/stem/porter_stemmer_utils/suffix_utils.py | 0 python/cuml/{cuml => }/prims/__init__.py | 0 python/cuml/{cuml => }/prims/array.py | 0 python/cuml/{cuml => }/prims/label/__init__.py | 0 python/cuml/{cuml => }/prims/label/classlabels.py | 0 python/cuml/{cuml => }/prims/stats/__init__.py | 0 python/cuml/{cuml => }/prims/stats/covariance.py | 0 .../{cuml => }/random_projection/CMakeLists.txt | 0 .../cuml/{cuml => }/random_projection/__init__.py | 0 .../random_projection/random_projection.pyx | 0 python/cuml/{cuml => }/solvers/CMakeLists.txt | 0 python/cuml/{cuml => }/solvers/__init__.py | 0 python/cuml/{cuml => }/solvers/cd.pyx | 0 python/cuml/{cuml => }/solvers/cd_mg.pyx | 0 python/cuml/{cuml => }/solvers/qn.pyx | 0 python/cuml/{cuml => }/solvers/sgd.pyx | 0 python/cuml/{cuml => }/svm/CMakeLists.txt | 0 python/cuml/{cuml => }/svm/__init__.py | 0 python/cuml/{cuml => }/svm/linear.pyx | 0 python/cuml/{cuml => }/svm/linear_svc.py | 0 python/cuml/{cuml => }/svm/linear_svr.py | 0 python/cuml/{cuml => }/svm/svc.pyx | 0 python/cuml/{cuml => }/svm/svm_base.pyx | 0 python/cuml/{cuml => }/svm/svr.pyx | 0 python/cuml/{cuml => }/testing/__init__.py | 0 python/cuml/{cuml => }/testing/dask/__init__.py | 0 python/cuml/{cuml => }/testing/dask/utils.py | 0 python/cuml/{cuml => }/testing/plugins/__init__.py | 0 .../{cuml => }/testing/plugins/quick_run_plugin.py | 0 .../cuml/{cuml => }/testing/test_preproc_utils.py | 0 python/cuml/{cuml => }/testing/utils.py | 0 python/cuml/{cuml => }/tests/conftest.py | 0 python/cuml/{cuml => }/tests/dask/conftest.py | 0 python/cuml/{cuml => }/tests/dask/test_base.py | 0 .../tests/dask/test_coordinate_descent.py | 0 .../{cuml => }/tests/dask/test_dask_arr_utils.py | 0 python/cuml/{cuml => }/tests/dask/test_dask_sql.py | 0 .../cuml/{cuml => }/tests/dask/test_dask_utils.py | 0 python/cuml/{cuml => }/tests/dask/test_datasets.py | 0 python/cuml/{cuml => }/tests/dask/test_dbscan.py | 0 python/cuml/{cuml => }/tests/dask/test_doctest.py | 0 python/cuml/{cuml => }/tests/dask/test_func.py | 0 .../{cuml => }/tests/dask/test_global_settings.py | 0 .../cuml/{cuml => }/tests/dask/test_input_utils.py | 0 python/cuml/{cuml => }/tests/dask/test_kmeans.py | 0 .../tests/dask/test_kneighbors_classifier.py | 0 .../tests/dask/test_kneighbors_regressor.py | 0 .../{cuml => }/tests/dask/test_label_binarizer.py | 0 .../{cuml => }/tests/dask/test_label_encoder.py | 0 .../{cuml => }/tests/dask/test_linear_regression.py | 0 .../tests/dask/test_logistic_regression.py | 0 python/cuml/{cuml => }/tests/dask/test_metrics.py | 0 .../cuml/{cuml => }/tests/dask/test_naive_bayes.py | 0 .../{cuml => }/tests/dask/test_nearest_neighbors.py | 0 .../{cuml => }/tests/dask/test_one_hot_encoder.py | 0 python/cuml/{cuml => }/tests/dask/test_pca.py | 0 .../{cuml => }/tests/dask/test_random_forest.py | 0 .../{cuml => }/tests/dask/test_ridge_regression.py | 0 .../{cuml => }/tests/dask/test_serialization.py | 0 python/cuml/{cuml => }/tests/dask/test_tfidf.py | 0 python/cuml/{cuml => }/tests/dask/test_tsvd.py | 0 python/cuml/{cuml => }/tests/dask/test_umap.py | 0 .../tests/explainer/test_explainer_base.py | 0 .../tests/explainer/test_explainer_common.py | 0 .../tests/explainer/test_explainer_kernel_shap.py | 0 .../explainer/test_explainer_permutation_shap.py | 0 .../{cuml => }/tests/explainer/test_gpu_treeshap.py | 0 .../{cuml => }/tests/explainer/test_sampling.py | 0 .../tests/explainer/test_shap_plotting.py | 0 .../tests/stemmer_tests/test_len_utils.py | 0 .../stemmer_tests/test_porter_stemmer_rules.py | 0 .../{cuml => }/tests/stemmer_tests/test_stemmer.py | 0 .../{cuml => }/tests/stemmer_tests/test_steps.py | 0 .../tests/stemmer_tests/test_suffix_utils.py | 0 python/cuml/{cuml => }/tests/test_adapters.py | 0 python/cuml/{cuml => }/tests/test_agglomerative.py | 0 python/cuml/{cuml => }/tests/test_allocator.py | 0 python/cuml/{cuml => }/tests/test_api.py | 0 python/cuml/{cuml => }/tests/test_arima.py | 0 python/cuml/{cuml => }/tests/test_array.py | 0 python/cuml/{cuml => }/tests/test_array_sparse.py | 0 python/cuml/{cuml => }/tests/test_auto_arima.py | 0 python/cuml/{cuml => }/tests/test_base.py | 0 python/cuml/{cuml => }/tests/test_batched_lbfgs.py | 0 python/cuml/{cuml => }/tests/test_benchmark.py | 0 .../cuml/{cuml => }/tests/test_class_enumerator.py | 0 python/cuml/{cuml => }/tests/test_compose.py | 0 .../{cuml => }/tests/test_coordinate_descent.py | 0 .../cuml/{cuml => }/tests/test_cuml_descr_decor.py | 0 .../tests/test_dataset_generator_types.py | 0 python/cuml/{cuml => }/tests/test_dbscan.py | 0 python/cuml/{cuml => }/tests/test_doctest.py | 0 python/cuml/{cuml => }/tests/test_fil.py | 0 python/cuml/{cuml => }/tests/test_hdbscan.py | 0 python/cuml/{cuml => }/tests/test_holtwinters.py | 0 .../cuml/{cuml => }/tests/test_incremental_pca.py | 0 python/cuml/{cuml => }/tests/test_input_utils.py | 0 python/cuml/{cuml => }/tests/test_internals_api.py | 0 python/cuml/{cuml => }/tests/test_kernel_density.py | 0 python/cuml/{cuml => }/tests/test_kernel_ridge.py | 0 python/cuml/{cuml => }/tests/test_kmeans.py | 0 .../{cuml => }/tests/test_kneighbors_classifier.py | 0 .../{cuml => }/tests/test_kneighbors_regressor.py | 0 .../cuml/{cuml => }/tests/test_label_binarizer.py | 0 python/cuml/{cuml => }/tests/test_label_encoder.py | 0 python/cuml/{cuml => }/tests/test_lars.py | 0 python/cuml/{cuml => }/tests/test_linear_model.py | 0 python/cuml/{cuml => }/tests/test_linear_svm.py | 0 python/cuml/{cuml => }/tests/test_logger.py | 0 python/cuml/{cuml => }/tests/test_make_arima.py | 0 python/cuml/{cuml => }/tests/test_make_blobs.py | 0 .../{cuml => }/tests/test_make_classification.py | 0 .../cuml/{cuml => }/tests/test_make_regression.py | 0 .../cuml/{cuml => }/tests/test_mbsgd_classifier.py | 0 .../cuml/{cuml => }/tests/test_mbsgd_regressor.py | 0 .../cuml/{cuml => }/tests/test_meta_estimators.py | 0 python/cuml/{cuml => }/tests/test_metrics.py | 0 python/cuml/{cuml => }/tests/test_module_config.py | 0 python/cuml/{cuml => }/tests/test_multiclass.py | 0 python/cuml/{cuml => }/tests/test_naive_bayes.py | 0 .../cuml/{cuml => }/tests/test_nearest_neighbors.py | 0 .../cuml/{cuml => }/tests/test_one_hot_encoder.py | 0 python/cuml/{cuml => }/tests/test_pca.py | 0 python/cuml/{cuml => }/tests/test_pickle.py | 0 python/cuml/{cuml => }/tests/test_preprocessing.py | 0 python/cuml/{cuml => }/tests/test_prims.py | 0 python/cuml/{cuml => }/tests/test_qn.py | 0 python/cuml/{cuml => }/tests/test_random_forest.py | 0 .../cuml/{cuml => }/tests/test_random_projection.py | 0 python/cuml/{cuml => }/tests/test_serialize.py | 0 python/cuml/{cuml => }/tests/test_sgd.py | 0 python/cuml/{cuml => }/tests/test_simpl_set.py | 0 .../cuml/{cuml => }/tests/test_solver_attributes.py | 0 python/cuml/{cuml => }/tests/test_sparsefuncs.py | 0 python/cuml/{cuml => }/tests/test_stationarity.py | 0 python/cuml/{cuml => }/tests/test_stats.py | 0 python/cuml/{cuml => }/tests/test_svm.py | 0 python/cuml/{cuml => }/tests/test_target_encoder.py | 0 .../tests/test_text_feature_extraction.py | 0 python/cuml/{cuml => }/tests/test_tfidf.py | 0 python/cuml/{cuml => }/tests/test_thirdparty.py | 0 .../cuml/{cuml => }/tests/test_train_test_split.py | 0 .../cuml/{cuml => }/tests/test_trustworthiness.py | 0 python/cuml/{cuml => }/tests/test_tsne.py | 0 python/cuml/{cuml => }/tests/test_tsvd.py | 0 python/cuml/{cuml => }/tests/test_umap.py | 0 python/cuml/{cuml => }/tests/ts_datasets/README.md | 0 .../cuml/{cuml => }/tests/ts_datasets/alcohol.csv | 0 python/cuml/{cuml => }/tests/ts_datasets/cattle.csv | 0 .../tests/ts_datasets/deaths_by_region.csv | 0 .../ts_datasets/endog_deaths_by_region_exog.csv | 0 .../endog_guest_nights_by_region_missing_exog.csv | 0 ...dog_hourly_earnings_by_industry_missing_exog.csv | 0 .../ts_datasets/exog_deaths_by_region_exog.csv | 0 .../exog_guest_nights_by_region_missing_exog.csv | 0 ...xog_hourly_earnings_by_industry_missing_exog.csv | 0 .../tests/ts_datasets/guest_nights_by_region.csv | 0 .../ts_datasets/guest_nights_by_region_missing.csv | 0 .../ts_datasets/hourly_earnings_by_industry.csv | 0 .../hourly_earnings_by_industry_missing.csv | 0 .../long_term_arrivals_by_citizenship.csv | 0 .../ts_datasets/net_migrations_auckland_by_age.csv | 0 .../tests/ts_datasets/passenger_movements.csv | 0 .../tests/ts_datasets/police_recorded_crime.csv | 0 .../tests/ts_datasets/population_estimate.csv | 0 .../ts_datasets/population_estimate_missing.csv | 0 .../cuml/{cuml => }/thirdparty_adapters/__init__.py | 0 .../cuml/{cuml => }/thirdparty_adapters/adapters.py | 0 .../thirdparty_adapters/sparsefuncs_fast.py | 0 python/cuml/{cuml => }/tsa/CMakeLists.txt | 0 python/cuml/{cuml => }/tsa/__init__.py | 0 python/cuml/{cuml => }/tsa/arima.pxd | 0 python/cuml/{cuml => }/tsa/arima.pyx | 0 python/cuml/{cuml => }/tsa/auto_arima.pyx | 0 python/cuml/{cuml => }/tsa/batched_lbfgs.py | 0 python/cuml/{cuml => }/tsa/holtwinters.pyx | 0 python/cuml/{cuml => }/tsa/seasonality.pyx | 0 python/cuml/{cuml => }/tsa/stationarity.pyx | 0 python/{cuml => }/pyproject.toml | 0 python/{cuml => }/pytest.ini | 0 python/{cuml => }/setup.cfg | 0 python/{cuml => }/setup.py | 0 python/{cuml => }/setuputils.py | 0 python/{cuml => }/versioneer.py | 0 451 files changed, 0 insertions(+), 0 deletions(-) rename python/{cuml => }/CMakeLists.txt (100%) rename python/cuml/{cuml => }/__init__.py (100%) rename python/cuml/{cuml => }/_thirdparty/__init__.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/README.md (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/__init__.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/__init__.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/_column_transformer.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/_data.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/_discretization.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/_function_transformer.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/preprocessing/_imputation.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/utils/__init__.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/utils/extmath.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/utils/skl_dependencies.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/utils/sparsefuncs.py (100%) rename python/cuml/{cuml => }/_thirdparty/sklearn/utils/validation.py (100%) rename python/cuml/{cuml => }/_version.py (100%) rename python/cuml/{cuml => }/benchmark/__init__.py (100%) rename python/cuml/{cuml => }/benchmark/algorithms.py (100%) rename python/cuml/{cuml => }/benchmark/automated/__init__.py (100%) rename python/cuml/{cuml => }/benchmark/automated/bench_classification.py (100%) rename python/cuml/{cuml => }/benchmark/automated/bench_dimensionality_reduction.py (100%) rename python/cuml/{cuml => }/benchmark/automated/bench_preprocessing.py (100%) rename python/cuml/{cuml => }/benchmark/automated/bench_random_forest.py (100%) rename python/cuml/{cuml => }/benchmark/automated/bench_regression.py (100%) rename python/cuml/{cuml => }/benchmark/automated/dask/__init__.py (100%) rename python/cuml/{cuml => }/benchmark/automated/dask/bench_mnmg_classification.py (100%) rename python/cuml/{cuml => }/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py (100%) rename python/cuml/{cuml => }/benchmark/automated/dask/bench_mnmg_regression.py (100%) rename python/cuml/{cuml => }/benchmark/automated/dask/conftest.py (100%) rename python/cuml/{cuml => }/benchmark/automated/pytest.ini (100%) rename python/cuml/{cuml => }/benchmark/automated/utils/__init__.py (100%) rename python/cuml/{cuml => }/benchmark/automated/utils/auto_nvtx_bench.py (100%) rename python/cuml/{cuml => }/benchmark/automated/utils/utils.py (100%) rename python/cuml/{cuml => }/benchmark/bench_helper_funcs.py (100%) rename python/cuml/{cuml => }/benchmark/ci_benchmark.py (100%) rename python/cuml/{cuml => }/benchmark/datagen.py (100%) rename python/cuml/{cuml => }/benchmark/nvtx_benchmark.py (100%) rename python/cuml/{cuml => }/benchmark/run_benchmarks.py (100%) rename python/cuml/{cuml => }/benchmark/runners.py (100%) rename python/cuml/{cuml => }/cluster/CMakeLists.txt (100%) rename python/cuml/{cuml => }/cluster/__init__.py (100%) rename python/cuml/{cuml => }/cluster/agglomerative.pyx (100%) rename python/cuml/{cuml => }/cluster/dbscan.pyx (100%) rename python/cuml/{cuml => }/cluster/dbscan_mg.pyx (100%) rename python/cuml/{cuml => }/cluster/hdbscan.pyx (100%) rename python/cuml/{cuml => }/cluster/kmeans.pyx (100%) rename python/cuml/{cuml => }/cluster/kmeans_mg.pyx (100%) rename python/cuml/{cuml => }/cluster/kmeans_utils.pxd (100%) rename python/cuml/{cuml => }/comm/__init__.py (100%) rename python/cuml/{cuml => }/comm/serialize.py (100%) rename python/cuml/{cuml => }/common/CMakeLists.txt (100%) rename python/cuml/{cuml => }/common/__init__.py (100%) rename python/cuml/{cuml => }/common/array.py (100%) rename python/cuml/{cuml => }/common/array_descriptor.py (100%) rename python/cuml/{cuml => }/common/array_sparse.py (100%) rename python/cuml/{cuml => }/common/base.pyx (100%) rename python/cuml/{cuml => }/common/cuda.pxd (100%) rename python/cuml/{cuml => }/common/cuda.pyx (100%) rename python/cuml/{cuml => }/common/doc_utils.py (100%) rename python/cuml/{cuml => }/common/exceptions.py (100%) rename python/cuml/{cuml => }/common/handle.pyx (100%) rename python/cuml/{cuml => }/common/import_utils.py (100%) rename python/cuml/{cuml => }/common/input_utils.py (100%) rename python/cuml/{cuml => }/common/kernel_utils.py (100%) rename python/cuml/{cuml => }/common/logger.pyx (100%) rename python/cuml/{cuml => }/common/memory_utils.py (100%) rename python/cuml/{cuml => }/common/mixins.py (100%) rename python/cuml/{cuml => }/common/numba_utils.py (100%) rename python/cuml/{cuml => }/common/opg_data_utils_mg.pxd (100%) rename python/cuml/{cuml => }/common/opg_data_utils_mg.pyx (100%) rename python/cuml/{cuml => }/common/pointer_utils.pyx (100%) rename python/cuml/{cuml => }/common/sparse_utils.py (100%) rename python/cuml/{cuml => }/common/sparsefuncs.py (100%) rename python/cuml/{cuml => }/common/timing_utils.py (100%) rename python/cuml/{cuml => }/common/type_utils.py (100%) rename python/cuml/{cuml => }/compose/__init__.py (100%) rename python/cuml/{cuml => }/dask/__init__.py (100%) rename python/cuml/{cuml => }/dask/cluster/__init__.py (100%) rename python/cuml/{cuml => }/dask/cluster/dbscan.py (100%) rename python/cuml/{cuml => }/dask/cluster/kmeans.py (100%) rename python/cuml/{cuml => }/dask/common/__init__.py (100%) rename python/cuml/{cuml => }/dask/common/base.py (100%) rename python/cuml/{cuml => }/dask/common/dask_arr_utils.py (100%) rename python/cuml/{cuml => }/dask/common/dask_df_utils.py (100%) rename python/cuml/{cuml => }/dask/common/func.py (100%) rename python/cuml/{cuml => }/dask/common/input_utils.py (100%) rename python/cuml/{cuml => }/dask/common/part_utils.py (100%) rename python/cuml/{cuml => }/dask/common/utils.py (100%) rename python/cuml/{cuml => }/dask/datasets/__init__.py (100%) rename python/cuml/{cuml => }/dask/datasets/blobs.py (100%) rename python/cuml/{cuml => }/dask/datasets/classification.py (100%) rename python/cuml/{cuml => }/dask/datasets/regression.py (100%) rename python/cuml/{cuml => }/dask/datasets/utils.py (100%) rename python/cuml/{cuml => }/dask/decomposition/__init__.py (100%) rename python/cuml/{cuml => }/dask/decomposition/base.py (100%) rename python/cuml/{cuml => }/dask/decomposition/pca.py (100%) rename python/cuml/{cuml => }/dask/decomposition/tsvd.py (100%) rename python/cuml/{cuml => }/dask/ensemble/__init__.py (100%) rename python/cuml/{cuml => }/dask/ensemble/base.py (100%) rename python/cuml/{cuml => }/dask/ensemble/randomforestclassifier.py (100%) rename python/cuml/{cuml => }/dask/ensemble/randomforestregressor.py (100%) rename python/cuml/{cuml => }/dask/extended/__init__.py (100%) rename python/cuml/{cuml => }/dask/extended/linear_model/__init__.py (100%) rename python/cuml/{cuml => }/dask/extended/linear_model/logistic_regression.py (100%) rename python/cuml/{cuml => }/dask/feature_extraction/__init__.py (100%) rename python/cuml/{cuml => }/dask/feature_extraction/text/__init__.py (100%) rename python/cuml/{cuml => }/dask/feature_extraction/text/tfidf_transformer.py (100%) rename python/cuml/{cuml => }/dask/linear_model/__init__.py (100%) rename python/cuml/{cuml => }/dask/linear_model/elastic_net.py (100%) rename python/cuml/{cuml => }/dask/linear_model/lasso.py (100%) rename python/cuml/{cuml => }/dask/linear_model/linear_regression.py (100%) rename python/cuml/{cuml => }/dask/linear_model/ridge.py (100%) rename python/cuml/{cuml => }/dask/manifold/__init__.py (100%) rename python/cuml/{cuml => }/dask/manifold/umap.py (100%) rename python/cuml/{cuml => }/dask/metrics/__init__.py (100%) rename python/cuml/{cuml => }/dask/metrics/confusion_matrix.py (100%) rename python/cuml/{cuml => }/dask/metrics/utils.py (100%) rename python/cuml/{cuml => }/dask/naive_bayes/__init__.py (100%) rename python/cuml/{cuml => }/dask/naive_bayes/naive_bayes.py (100%) rename python/cuml/{cuml => }/dask/neighbors/__init__.py (100%) rename python/cuml/{cuml => }/dask/neighbors/kneighbors_classifier.py (100%) rename python/cuml/{cuml => }/dask/neighbors/kneighbors_regressor.py (100%) rename python/cuml/{cuml => }/dask/neighbors/nearest_neighbors.py (100%) rename python/cuml/{cuml => }/dask/preprocessing/LabelEncoder.py (100%) rename python/cuml/{cuml => }/dask/preprocessing/__init__.py (100%) rename python/cuml/{cuml => }/dask/preprocessing/encoders.py (100%) rename python/cuml/{cuml => }/dask/preprocessing/label.py (100%) rename python/cuml/{cuml => }/dask/solvers/__init__.py (100%) rename python/cuml/{cuml => }/dask/solvers/cd.py (100%) rename python/cuml/{cuml => }/datasets/CMakeLists.txt (100%) rename python/cuml/{cuml => }/datasets/__init__.py (100%) rename python/cuml/{cuml => }/datasets/arima.pyx (100%) rename python/cuml/{cuml => }/datasets/blobs.py (100%) rename python/cuml/{cuml => }/datasets/classification.py (100%) rename python/cuml/{cuml => }/datasets/regression.pyx (100%) rename python/cuml/{cuml => }/datasets/utils.py (100%) rename python/cuml/{cuml => }/decomposition/CMakeLists.txt (100%) rename python/cuml/{cuml => }/decomposition/__init__.py (100%) rename python/cuml/{cuml => }/decomposition/base_mg.pyx (100%) rename python/cuml/{cuml => }/decomposition/incremental_pca.py (100%) rename python/cuml/{cuml => }/decomposition/pca.pyx (100%) rename python/cuml/{cuml => }/decomposition/pca_mg.pyx (100%) rename python/cuml/{cuml => }/decomposition/tsvd.pyx (100%) rename python/cuml/{cuml => }/decomposition/tsvd_mg.pyx (100%) rename python/cuml/{cuml => }/decomposition/utils.pxd (100%) rename python/cuml/{cuml => }/decomposition/utils_mg.pxd (100%) rename python/cuml/{cuml => }/ensemble/CMakeLists.txt (100%) rename python/cuml/{cuml => }/ensemble/__init__.py (100%) rename python/cuml/{cuml => }/ensemble/randomforest_common.pyx (100%) rename python/cuml/{cuml => }/ensemble/randomforest_shared.pxd (100%) rename python/cuml/{cuml => }/ensemble/randomforest_shared.pyx (100%) rename python/cuml/{cuml => }/ensemble/randomforestclassifier.pyx (100%) rename python/cuml/{cuml => }/ensemble/randomforestregressor.pyx (100%) rename python/cuml/{cuml => }/experimental/__init__.py (100%) rename python/cuml/{cuml => }/experimental/hyperopt_utils/__init__.py (100%) rename python/cuml/{cuml => }/experimental/hyperopt_utils/plotting_utils.py (100%) rename python/cuml/{cuml => }/experimental/hyperparams/HPO_demo.ipynb (100%) rename python/cuml/{cuml => }/experimental/linear_model/CMakeLists.txt (100%) rename python/cuml/{cuml => }/experimental/linear_model/__init__.py (100%) rename python/cuml/{cuml => }/experimental/linear_model/lars.pyx (100%) rename python/cuml/{cuml => }/explainer/CMakeLists.txt (100%) rename python/cuml/{cuml => }/explainer/__init__.py (100%) rename python/cuml/{cuml => }/explainer/base.pyx (100%) rename python/cuml/{cuml => }/explainer/common.py (100%) rename python/cuml/{cuml => }/explainer/kernel_shap.pyx (100%) rename python/cuml/{cuml => }/explainer/permutation_shap.pyx (100%) rename python/cuml/{cuml => }/explainer/sampling.py (100%) rename python/cuml/{cuml => }/explainer/tree_shap.pyx (100%) rename python/cuml/{cuml => }/feature_extraction/__init__.py (100%) rename python/cuml/{cuml => }/feature_extraction/_stop_words.py (100%) rename python/cuml/{cuml => }/feature_extraction/_tfidf.py (100%) rename python/cuml/{cuml => }/feature_extraction/_tfidf_vectorizer.py (100%) rename python/cuml/{cuml => }/feature_extraction/_vectorizers.py (100%) rename python/cuml/{cuml => }/feature_extraction/text.py (100%) rename python/cuml/{cuml => }/fil/CMakeLists.txt (100%) rename python/cuml/{cuml => }/fil/README.md (100%) rename python/cuml/{cuml => }/fil/__init__.py (100%) rename python/cuml/{cuml => }/fil/fil.pyx (100%) rename python/cuml/{cuml => }/fil/fil_performance_nrows.png (100%) rename python/cuml/{cuml => }/internals/CMakeLists.txt (100%) rename python/cuml/{cuml => }/internals/__init__.py (100%) rename python/cuml/{cuml => }/internals/api_context_managers.py (100%) rename python/cuml/{cuml => }/internals/api_decorators.py (100%) rename python/cuml/{cuml => }/internals/base_helpers.py (100%) rename python/cuml/{cuml => }/internals/callbacks_implems.h (100%) rename python/cuml/{cuml => }/internals/global_settings.py (100%) rename python/cuml/{cuml => }/internals/internals.pyx (100%) rename python/cuml/{cuml => }/kernel_ridge/CMakeLists.txt (100%) rename python/cuml/{cuml => }/kernel_ridge/__init__.py (100%) rename python/cuml/{cuml => }/kernel_ridge/kernel_ridge.pyx (100%) rename python/cuml/{cuml => }/linear_model/CMakeLists.txt (100%) rename python/cuml/{cuml => }/linear_model/__init__.py (100%) rename python/cuml/{cuml => }/linear_model/base.pyx (100%) rename python/cuml/{cuml => }/linear_model/base_mg.pyx (100%) rename python/cuml/{cuml => }/linear_model/elastic_net.pyx (100%) rename python/cuml/{cuml => }/linear_model/lasso.py (100%) rename python/cuml/{cuml => }/linear_model/linear_regression.pyx (100%) rename python/cuml/{cuml => }/linear_model/linear_regression_mg.pyx (100%) rename python/cuml/{cuml => }/linear_model/logistic_regression.pyx (100%) rename python/cuml/{cuml => }/linear_model/mbsgd_classifier.pyx (100%) rename python/cuml/{cuml => }/linear_model/mbsgd_regressor.pyx (100%) rename python/cuml/{cuml => }/linear_model/ridge.pyx (100%) rename python/cuml/{cuml => }/linear_model/ridge_mg.pyx (100%) rename python/cuml/{cuml => }/manifold/CMakeLists.txt (100%) rename python/cuml/{cuml => }/manifold/__init__.py (100%) rename python/cuml/{cuml => }/manifold/simpl_set.pyx (100%) rename python/cuml/{cuml => }/manifold/t_sne.pyx (100%) rename python/cuml/{cuml => }/manifold/umap.pyx (100%) rename python/cuml/{cuml => }/manifold/umap_utils.pxd (100%) rename python/cuml/{cuml => }/manifold/umap_utils.pyx (100%) rename python/cuml/{cuml => }/metrics/CMakeLists.txt (100%) rename python/cuml/{cuml => }/metrics/__init__.py (100%) rename python/cuml/{cuml => }/metrics/_classification.py (100%) rename python/cuml/{cuml => }/metrics/_ranking.py (100%) rename python/cuml/{cuml => }/metrics/accuracy.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/CMakeLists.txt (100%) rename python/cuml/{cuml => }/metrics/cluster/__init__.py (100%) rename python/cuml/{cuml => }/metrics/cluster/adjusted_rand_index.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/completeness_score.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/entropy.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/homogeneity_score.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/mutual_info_score.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/silhouette_score.pyx (100%) rename python/cuml/{cuml => }/metrics/cluster/utils.pyx (100%) rename python/cuml/{cuml => }/metrics/confusion_matrix.py (100%) rename python/cuml/{cuml => }/metrics/distance_type.pxd (100%) rename python/cuml/{cuml => }/metrics/hinge_loss.pyx (100%) rename python/cuml/{cuml => }/metrics/kl_divergence.pyx (100%) rename python/cuml/{cuml => }/metrics/pairwise_distances.pyx (100%) rename python/cuml/{cuml => }/metrics/pairwise_kernels.py (100%) rename python/cuml/{cuml => }/metrics/regression.pxd (100%) rename python/cuml/{cuml => }/metrics/regression.pyx (100%) rename python/cuml/{cuml => }/metrics/trustworthiness.pyx (100%) rename python/cuml/{cuml => }/metrics/utils.py (100%) rename python/cuml/{cuml => }/model_selection/__init__.py (100%) rename python/cuml/{cuml => }/model_selection/_split.py (100%) rename python/cuml/{cuml => }/multiclass/__init__.py (100%) rename python/cuml/{cuml => }/multiclass/multiclass.py (100%) rename python/cuml/{cuml => }/naive_bayes/__init__.py (100%) rename python/cuml/{cuml => }/naive_bayes/naive_bayes.py (100%) rename python/cuml/{cuml => }/neighbors/CMakeLists.txt (100%) rename python/cuml/{cuml => }/neighbors/__init__.py (100%) rename python/cuml/{cuml => }/neighbors/ann.pxd (100%) rename python/cuml/{cuml => }/neighbors/ann.pyx (100%) rename python/cuml/{cuml => }/neighbors/kernel_density.py (100%) rename python/cuml/{cuml => }/neighbors/kneighbors_classifier.pyx (100%) rename python/cuml/{cuml => }/neighbors/kneighbors_classifier_mg.pyx (100%) rename python/cuml/{cuml => }/neighbors/kneighbors_regressor.pyx (100%) rename python/cuml/{cuml => }/neighbors/kneighbors_regressor_mg.pyx (100%) rename python/cuml/{cuml => }/neighbors/nearest_neighbors.pyx (100%) rename python/cuml/{cuml => }/neighbors/nearest_neighbors_mg.pyx (100%) rename python/cuml/{cuml => }/pipeline/__init__.py (100%) rename python/cuml/{cuml => }/preprocessing/LabelEncoder.py (100%) rename python/cuml/{cuml => }/preprocessing/TargetEncoder.py (100%) rename python/cuml/{cuml => }/preprocessing/__init__.py (100%) rename python/cuml/{cuml => }/preprocessing/encoders.py (100%) rename python/cuml/{cuml => }/preprocessing/label.py (100%) rename python/cuml/{cuml => }/preprocessing/onehotencoder_mg.py (100%) rename python/cuml/{cuml => }/preprocessing/text/__init__.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/__init__.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/__init__.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py (100%) rename python/cuml/{cuml => }/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py (100%) rename python/cuml/{cuml => }/prims/__init__.py (100%) rename python/cuml/{cuml => }/prims/array.py (100%) rename python/cuml/{cuml => }/prims/label/__init__.py (100%) rename python/cuml/{cuml => }/prims/label/classlabels.py (100%) rename python/cuml/{cuml => }/prims/stats/__init__.py (100%) rename python/cuml/{cuml => }/prims/stats/covariance.py (100%) rename python/cuml/{cuml => }/random_projection/CMakeLists.txt (100%) rename python/cuml/{cuml => }/random_projection/__init__.py (100%) rename python/cuml/{cuml => }/random_projection/random_projection.pyx (100%) rename python/cuml/{cuml => }/solvers/CMakeLists.txt (100%) rename python/cuml/{cuml => }/solvers/__init__.py (100%) rename python/cuml/{cuml => }/solvers/cd.pyx (100%) rename python/cuml/{cuml => }/solvers/cd_mg.pyx (100%) rename python/cuml/{cuml => }/solvers/qn.pyx (100%) rename python/cuml/{cuml => }/solvers/sgd.pyx (100%) rename python/cuml/{cuml => }/svm/CMakeLists.txt (100%) rename python/cuml/{cuml => }/svm/__init__.py (100%) rename python/cuml/{cuml => }/svm/linear.pyx (100%) rename python/cuml/{cuml => }/svm/linear_svc.py (100%) rename python/cuml/{cuml => }/svm/linear_svr.py (100%) rename python/cuml/{cuml => }/svm/svc.pyx (100%) rename python/cuml/{cuml => }/svm/svm_base.pyx (100%) rename python/cuml/{cuml => }/svm/svr.pyx (100%) rename python/cuml/{cuml => }/testing/__init__.py (100%) rename python/cuml/{cuml => }/testing/dask/__init__.py (100%) rename python/cuml/{cuml => }/testing/dask/utils.py (100%) rename python/cuml/{cuml => }/testing/plugins/__init__.py (100%) rename python/cuml/{cuml => }/testing/plugins/quick_run_plugin.py (100%) rename python/cuml/{cuml => }/testing/test_preproc_utils.py (100%) rename python/cuml/{cuml => }/testing/utils.py (100%) rename python/cuml/{cuml => }/tests/conftest.py (100%) rename python/cuml/{cuml => }/tests/dask/conftest.py (100%) rename python/cuml/{cuml => }/tests/dask/test_base.py (100%) rename python/cuml/{cuml => }/tests/dask/test_coordinate_descent.py (100%) rename python/cuml/{cuml => }/tests/dask/test_dask_arr_utils.py (100%) rename python/cuml/{cuml => }/tests/dask/test_dask_sql.py (100%) rename python/cuml/{cuml => }/tests/dask/test_dask_utils.py (100%) rename python/cuml/{cuml => }/tests/dask/test_datasets.py (100%) rename python/cuml/{cuml => }/tests/dask/test_dbscan.py (100%) rename python/cuml/{cuml => }/tests/dask/test_doctest.py (100%) rename python/cuml/{cuml => }/tests/dask/test_func.py (100%) rename python/cuml/{cuml => }/tests/dask/test_global_settings.py (100%) rename python/cuml/{cuml => }/tests/dask/test_input_utils.py (100%) rename python/cuml/{cuml => }/tests/dask/test_kmeans.py (100%) rename python/cuml/{cuml => }/tests/dask/test_kneighbors_classifier.py (100%) rename python/cuml/{cuml => }/tests/dask/test_kneighbors_regressor.py (100%) rename python/cuml/{cuml => }/tests/dask/test_label_binarizer.py (100%) rename python/cuml/{cuml => }/tests/dask/test_label_encoder.py (100%) rename python/cuml/{cuml => }/tests/dask/test_linear_regression.py (100%) rename python/cuml/{cuml => }/tests/dask/test_logistic_regression.py (100%) rename python/cuml/{cuml => }/tests/dask/test_metrics.py (100%) rename python/cuml/{cuml => }/tests/dask/test_naive_bayes.py (100%) rename python/cuml/{cuml => }/tests/dask/test_nearest_neighbors.py (100%) rename python/cuml/{cuml => }/tests/dask/test_one_hot_encoder.py (100%) rename python/cuml/{cuml => }/tests/dask/test_pca.py (100%) rename python/cuml/{cuml => }/tests/dask/test_random_forest.py (100%) rename python/cuml/{cuml => }/tests/dask/test_ridge_regression.py (100%) rename python/cuml/{cuml => }/tests/dask/test_serialization.py (100%) rename python/cuml/{cuml => }/tests/dask/test_tfidf.py (100%) rename python/cuml/{cuml => }/tests/dask/test_tsvd.py (100%) rename python/cuml/{cuml => }/tests/dask/test_umap.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_explainer_base.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_explainer_common.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_explainer_kernel_shap.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_explainer_permutation_shap.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_gpu_treeshap.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_sampling.py (100%) rename python/cuml/{cuml => }/tests/explainer/test_shap_plotting.py (100%) rename python/cuml/{cuml => }/tests/stemmer_tests/test_len_utils.py (100%) rename python/cuml/{cuml => }/tests/stemmer_tests/test_porter_stemmer_rules.py (100%) rename python/cuml/{cuml => }/tests/stemmer_tests/test_stemmer.py (100%) rename python/cuml/{cuml => }/tests/stemmer_tests/test_steps.py (100%) rename python/cuml/{cuml => }/tests/stemmer_tests/test_suffix_utils.py (100%) rename python/cuml/{cuml => }/tests/test_adapters.py (100%) rename python/cuml/{cuml => }/tests/test_agglomerative.py (100%) rename python/cuml/{cuml => }/tests/test_allocator.py (100%) rename python/cuml/{cuml => }/tests/test_api.py (100%) rename python/cuml/{cuml => }/tests/test_arima.py (100%) rename python/cuml/{cuml => }/tests/test_array.py (100%) rename python/cuml/{cuml => }/tests/test_array_sparse.py (100%) rename python/cuml/{cuml => }/tests/test_auto_arima.py (100%) rename python/cuml/{cuml => }/tests/test_base.py (100%) rename python/cuml/{cuml => }/tests/test_batched_lbfgs.py (100%) rename python/cuml/{cuml => }/tests/test_benchmark.py (100%) rename python/cuml/{cuml => }/tests/test_class_enumerator.py (100%) rename python/cuml/{cuml => }/tests/test_compose.py (100%) rename python/cuml/{cuml => }/tests/test_coordinate_descent.py (100%) rename python/cuml/{cuml => }/tests/test_cuml_descr_decor.py (100%) rename python/cuml/{cuml => }/tests/test_dataset_generator_types.py (100%) rename python/cuml/{cuml => }/tests/test_dbscan.py (100%) rename python/cuml/{cuml => }/tests/test_doctest.py (100%) rename python/cuml/{cuml => }/tests/test_fil.py (100%) rename python/cuml/{cuml => }/tests/test_hdbscan.py (100%) rename python/cuml/{cuml => }/tests/test_holtwinters.py (100%) rename python/cuml/{cuml => }/tests/test_incremental_pca.py (100%) rename python/cuml/{cuml => }/tests/test_input_utils.py (100%) rename python/cuml/{cuml => }/tests/test_internals_api.py (100%) rename python/cuml/{cuml => }/tests/test_kernel_density.py (100%) rename python/cuml/{cuml => }/tests/test_kernel_ridge.py (100%) rename python/cuml/{cuml => }/tests/test_kmeans.py (100%) rename python/cuml/{cuml => }/tests/test_kneighbors_classifier.py (100%) rename python/cuml/{cuml => }/tests/test_kneighbors_regressor.py (100%) rename python/cuml/{cuml => }/tests/test_label_binarizer.py (100%) rename python/cuml/{cuml => }/tests/test_label_encoder.py (100%) rename python/cuml/{cuml => }/tests/test_lars.py (100%) rename python/cuml/{cuml => }/tests/test_linear_model.py (100%) rename python/cuml/{cuml => }/tests/test_linear_svm.py (100%) rename python/cuml/{cuml => }/tests/test_logger.py (100%) rename python/cuml/{cuml => }/tests/test_make_arima.py (100%) rename python/cuml/{cuml => }/tests/test_make_blobs.py (100%) rename python/cuml/{cuml => }/tests/test_make_classification.py (100%) rename python/cuml/{cuml => }/tests/test_make_regression.py (100%) rename python/cuml/{cuml => }/tests/test_mbsgd_classifier.py (100%) rename python/cuml/{cuml => }/tests/test_mbsgd_regressor.py (100%) rename python/cuml/{cuml => }/tests/test_meta_estimators.py (100%) rename python/cuml/{cuml => }/tests/test_metrics.py (100%) rename python/cuml/{cuml => }/tests/test_module_config.py (100%) rename python/cuml/{cuml => }/tests/test_multiclass.py (100%) rename python/cuml/{cuml => }/tests/test_naive_bayes.py (100%) rename python/cuml/{cuml => }/tests/test_nearest_neighbors.py (100%) rename python/cuml/{cuml => }/tests/test_one_hot_encoder.py (100%) rename python/cuml/{cuml => }/tests/test_pca.py (100%) rename python/cuml/{cuml => }/tests/test_pickle.py (100%) rename python/cuml/{cuml => }/tests/test_preprocessing.py (100%) rename python/cuml/{cuml => }/tests/test_prims.py (100%) rename python/cuml/{cuml => }/tests/test_qn.py (100%) rename python/cuml/{cuml => }/tests/test_random_forest.py (100%) rename python/cuml/{cuml => }/tests/test_random_projection.py (100%) rename python/cuml/{cuml => }/tests/test_serialize.py (100%) rename python/cuml/{cuml => }/tests/test_sgd.py (100%) rename python/cuml/{cuml => }/tests/test_simpl_set.py (100%) rename python/cuml/{cuml => }/tests/test_solver_attributes.py (100%) rename python/cuml/{cuml => }/tests/test_sparsefuncs.py (100%) rename python/cuml/{cuml => }/tests/test_stationarity.py (100%) rename python/cuml/{cuml => }/tests/test_stats.py (100%) rename python/cuml/{cuml => }/tests/test_svm.py (100%) rename python/cuml/{cuml => }/tests/test_target_encoder.py (100%) rename python/cuml/{cuml => }/tests/test_text_feature_extraction.py (100%) rename python/cuml/{cuml => }/tests/test_tfidf.py (100%) rename python/cuml/{cuml => }/tests/test_thirdparty.py (100%) rename python/cuml/{cuml => }/tests/test_train_test_split.py (100%) rename python/cuml/{cuml => }/tests/test_trustworthiness.py (100%) rename python/cuml/{cuml => }/tests/test_tsne.py (100%) rename python/cuml/{cuml => }/tests/test_tsvd.py (100%) rename python/cuml/{cuml => }/tests/test_umap.py (100%) rename python/cuml/{cuml => }/tests/ts_datasets/README.md (100%) rename python/cuml/{cuml => }/tests/ts_datasets/alcohol.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/cattle.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/deaths_by_region.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/endog_deaths_by_region_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/exog_deaths_by_region_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/guest_nights_by_region.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/guest_nights_by_region_missing.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/hourly_earnings_by_industry.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/hourly_earnings_by_industry_missing.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/long_term_arrivals_by_citizenship.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/net_migrations_auckland_by_age.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/passenger_movements.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/police_recorded_crime.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/population_estimate.csv (100%) rename python/cuml/{cuml => }/tests/ts_datasets/population_estimate_missing.csv (100%) rename python/cuml/{cuml => }/thirdparty_adapters/__init__.py (100%) rename python/cuml/{cuml => }/thirdparty_adapters/adapters.py (100%) rename python/cuml/{cuml => }/thirdparty_adapters/sparsefuncs_fast.py (100%) rename python/cuml/{cuml => }/tsa/CMakeLists.txt (100%) rename python/cuml/{cuml => }/tsa/__init__.py (100%) rename python/cuml/{cuml => }/tsa/arima.pxd (100%) rename python/cuml/{cuml => }/tsa/arima.pyx (100%) rename python/cuml/{cuml => }/tsa/auto_arima.pyx (100%) rename python/cuml/{cuml => }/tsa/batched_lbfgs.py (100%) rename python/cuml/{cuml => }/tsa/holtwinters.pyx (100%) rename python/cuml/{cuml => }/tsa/seasonality.pyx (100%) rename python/cuml/{cuml => }/tsa/stationarity.pyx (100%) rename python/{cuml => }/pyproject.toml (100%) rename python/{cuml => }/pytest.ini (100%) rename python/{cuml => }/setup.cfg (100%) rename python/{cuml => }/setup.py (100%) rename python/{cuml => }/setuputils.py (100%) rename python/{cuml => }/versioneer.py (100%) diff --git a/python/cuml/CMakeLists.txt b/python/CMakeLists.txt similarity index 100% rename from python/cuml/CMakeLists.txt rename to python/CMakeLists.txt diff --git a/python/cuml/cuml/__init__.py b/python/cuml/__init__.py similarity index 100% rename from python/cuml/cuml/__init__.py rename to python/cuml/__init__.py diff --git a/python/cuml/cuml/_thirdparty/__init__.py b/python/cuml/_thirdparty/__init__.py similarity index 100% rename from python/cuml/cuml/_thirdparty/__init__.py rename to python/cuml/_thirdparty/__init__.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/README.md b/python/cuml/_thirdparty/sklearn/README.md similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/README.md rename to python/cuml/_thirdparty/sklearn/README.md diff --git a/python/cuml/cuml/_thirdparty/sklearn/__init__.py b/python/cuml/_thirdparty/sklearn/__init__.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/__init__.py rename to python/cuml/_thirdparty/sklearn/__init__.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/__init__.py b/python/cuml/_thirdparty/sklearn/preprocessing/__init__.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/__init__.py rename to python/cuml/_thirdparty/sklearn/preprocessing/__init__.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py b/python/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py rename to python/cuml/_thirdparty/sklearn/preprocessing/_column_transformer.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py b/python/cuml/_thirdparty/sklearn/preprocessing/_data.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/_data.py rename to python/cuml/_thirdparty/sklearn/preprocessing/_data.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_discretization.py b/python/cuml/_thirdparty/sklearn/preprocessing/_discretization.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/_discretization.py rename to python/cuml/_thirdparty/sklearn/preprocessing/_discretization.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py b/python/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py rename to python/cuml/_thirdparty/sklearn/preprocessing/_function_transformer.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/preprocessing/_imputation.py b/python/cuml/_thirdparty/sklearn/preprocessing/_imputation.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/preprocessing/_imputation.py rename to python/cuml/_thirdparty/sklearn/preprocessing/_imputation.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/utils/__init__.py b/python/cuml/_thirdparty/sklearn/utils/__init__.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/utils/__init__.py rename to python/cuml/_thirdparty/sklearn/utils/__init__.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/utils/extmath.py b/python/cuml/_thirdparty/sklearn/utils/extmath.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/utils/extmath.py rename to python/cuml/_thirdparty/sklearn/utils/extmath.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/utils/skl_dependencies.py b/python/cuml/_thirdparty/sklearn/utils/skl_dependencies.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/utils/skl_dependencies.py rename to python/cuml/_thirdparty/sklearn/utils/skl_dependencies.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/utils/sparsefuncs.py b/python/cuml/_thirdparty/sklearn/utils/sparsefuncs.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/utils/sparsefuncs.py rename to python/cuml/_thirdparty/sklearn/utils/sparsefuncs.py diff --git a/python/cuml/cuml/_thirdparty/sklearn/utils/validation.py b/python/cuml/_thirdparty/sklearn/utils/validation.py similarity index 100% rename from python/cuml/cuml/_thirdparty/sklearn/utils/validation.py rename to python/cuml/_thirdparty/sklearn/utils/validation.py diff --git a/python/cuml/cuml/_version.py b/python/cuml/_version.py similarity index 100% rename from python/cuml/cuml/_version.py rename to python/cuml/_version.py diff --git a/python/cuml/cuml/benchmark/__init__.py b/python/cuml/benchmark/__init__.py similarity index 100% rename from python/cuml/cuml/benchmark/__init__.py rename to python/cuml/benchmark/__init__.py diff --git a/python/cuml/cuml/benchmark/algorithms.py b/python/cuml/benchmark/algorithms.py similarity index 100% rename from python/cuml/cuml/benchmark/algorithms.py rename to python/cuml/benchmark/algorithms.py diff --git a/python/cuml/cuml/benchmark/automated/__init__.py b/python/cuml/benchmark/automated/__init__.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/__init__.py rename to python/cuml/benchmark/automated/__init__.py diff --git a/python/cuml/cuml/benchmark/automated/bench_classification.py b/python/cuml/benchmark/automated/bench_classification.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/bench_classification.py rename to python/cuml/benchmark/automated/bench_classification.py diff --git a/python/cuml/cuml/benchmark/automated/bench_dimensionality_reduction.py b/python/cuml/benchmark/automated/bench_dimensionality_reduction.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/bench_dimensionality_reduction.py rename to python/cuml/benchmark/automated/bench_dimensionality_reduction.py diff --git a/python/cuml/cuml/benchmark/automated/bench_preprocessing.py b/python/cuml/benchmark/automated/bench_preprocessing.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/bench_preprocessing.py rename to python/cuml/benchmark/automated/bench_preprocessing.py diff --git a/python/cuml/cuml/benchmark/automated/bench_random_forest.py b/python/cuml/benchmark/automated/bench_random_forest.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/bench_random_forest.py rename to python/cuml/benchmark/automated/bench_random_forest.py diff --git a/python/cuml/cuml/benchmark/automated/bench_regression.py b/python/cuml/benchmark/automated/bench_regression.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/bench_regression.py rename to python/cuml/benchmark/automated/bench_regression.py diff --git a/python/cuml/cuml/benchmark/automated/dask/__init__.py b/python/cuml/benchmark/automated/dask/__init__.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/dask/__init__.py rename to python/cuml/benchmark/automated/dask/__init__.py diff --git a/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_classification.py b/python/cuml/benchmark/automated/dask/bench_mnmg_classification.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/dask/bench_mnmg_classification.py rename to python/cuml/benchmark/automated/dask/bench_mnmg_classification.py diff --git a/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py b/python/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py rename to python/cuml/benchmark/automated/dask/bench_mnmg_dimensionality_reduction.py diff --git a/python/cuml/cuml/benchmark/automated/dask/bench_mnmg_regression.py b/python/cuml/benchmark/automated/dask/bench_mnmg_regression.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/dask/bench_mnmg_regression.py rename to python/cuml/benchmark/automated/dask/bench_mnmg_regression.py diff --git a/python/cuml/cuml/benchmark/automated/dask/conftest.py b/python/cuml/benchmark/automated/dask/conftest.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/dask/conftest.py rename to python/cuml/benchmark/automated/dask/conftest.py diff --git a/python/cuml/cuml/benchmark/automated/pytest.ini b/python/cuml/benchmark/automated/pytest.ini similarity index 100% rename from python/cuml/cuml/benchmark/automated/pytest.ini rename to python/cuml/benchmark/automated/pytest.ini diff --git a/python/cuml/cuml/benchmark/automated/utils/__init__.py b/python/cuml/benchmark/automated/utils/__init__.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/utils/__init__.py rename to python/cuml/benchmark/automated/utils/__init__.py diff --git a/python/cuml/cuml/benchmark/automated/utils/auto_nvtx_bench.py b/python/cuml/benchmark/automated/utils/auto_nvtx_bench.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/utils/auto_nvtx_bench.py rename to python/cuml/benchmark/automated/utils/auto_nvtx_bench.py diff --git a/python/cuml/cuml/benchmark/automated/utils/utils.py b/python/cuml/benchmark/automated/utils/utils.py similarity index 100% rename from python/cuml/cuml/benchmark/automated/utils/utils.py rename to python/cuml/benchmark/automated/utils/utils.py diff --git a/python/cuml/cuml/benchmark/bench_helper_funcs.py b/python/cuml/benchmark/bench_helper_funcs.py similarity index 100% rename from python/cuml/cuml/benchmark/bench_helper_funcs.py rename to python/cuml/benchmark/bench_helper_funcs.py diff --git a/python/cuml/cuml/benchmark/ci_benchmark.py b/python/cuml/benchmark/ci_benchmark.py similarity index 100% rename from python/cuml/cuml/benchmark/ci_benchmark.py rename to python/cuml/benchmark/ci_benchmark.py diff --git a/python/cuml/cuml/benchmark/datagen.py b/python/cuml/benchmark/datagen.py similarity index 100% rename from python/cuml/cuml/benchmark/datagen.py rename to python/cuml/benchmark/datagen.py diff --git a/python/cuml/cuml/benchmark/nvtx_benchmark.py b/python/cuml/benchmark/nvtx_benchmark.py similarity index 100% rename from python/cuml/cuml/benchmark/nvtx_benchmark.py rename to python/cuml/benchmark/nvtx_benchmark.py diff --git a/python/cuml/cuml/benchmark/run_benchmarks.py b/python/cuml/benchmark/run_benchmarks.py similarity index 100% rename from python/cuml/cuml/benchmark/run_benchmarks.py rename to python/cuml/benchmark/run_benchmarks.py diff --git a/python/cuml/cuml/benchmark/runners.py b/python/cuml/benchmark/runners.py similarity index 100% rename from python/cuml/cuml/benchmark/runners.py rename to python/cuml/benchmark/runners.py diff --git a/python/cuml/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/cluster/CMakeLists.txt rename to python/cuml/cluster/CMakeLists.txt diff --git a/python/cuml/cuml/cluster/__init__.py b/python/cuml/cluster/__init__.py similarity index 100% rename from python/cuml/cuml/cluster/__init__.py rename to python/cuml/cluster/__init__.py diff --git a/python/cuml/cuml/cluster/agglomerative.pyx b/python/cuml/cluster/agglomerative.pyx similarity index 100% rename from python/cuml/cuml/cluster/agglomerative.pyx rename to python/cuml/cluster/agglomerative.pyx diff --git a/python/cuml/cuml/cluster/dbscan.pyx b/python/cuml/cluster/dbscan.pyx similarity index 100% rename from python/cuml/cuml/cluster/dbscan.pyx rename to python/cuml/cluster/dbscan.pyx diff --git a/python/cuml/cuml/cluster/dbscan_mg.pyx b/python/cuml/cluster/dbscan_mg.pyx similarity index 100% rename from python/cuml/cuml/cluster/dbscan_mg.pyx rename to python/cuml/cluster/dbscan_mg.pyx diff --git a/python/cuml/cuml/cluster/hdbscan.pyx b/python/cuml/cluster/hdbscan.pyx similarity index 100% rename from python/cuml/cuml/cluster/hdbscan.pyx rename to python/cuml/cluster/hdbscan.pyx diff --git a/python/cuml/cuml/cluster/kmeans.pyx b/python/cuml/cluster/kmeans.pyx similarity index 100% rename from python/cuml/cuml/cluster/kmeans.pyx rename to python/cuml/cluster/kmeans.pyx diff --git a/python/cuml/cuml/cluster/kmeans_mg.pyx b/python/cuml/cluster/kmeans_mg.pyx similarity index 100% rename from python/cuml/cuml/cluster/kmeans_mg.pyx rename to python/cuml/cluster/kmeans_mg.pyx diff --git a/python/cuml/cuml/cluster/kmeans_utils.pxd b/python/cuml/cluster/kmeans_utils.pxd similarity index 100% rename from python/cuml/cuml/cluster/kmeans_utils.pxd rename to python/cuml/cluster/kmeans_utils.pxd diff --git a/python/cuml/cuml/comm/__init__.py b/python/cuml/comm/__init__.py similarity index 100% rename from python/cuml/cuml/comm/__init__.py rename to python/cuml/comm/__init__.py diff --git a/python/cuml/cuml/comm/serialize.py b/python/cuml/comm/serialize.py similarity index 100% rename from python/cuml/cuml/comm/serialize.py rename to python/cuml/comm/serialize.py diff --git a/python/cuml/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/common/CMakeLists.txt rename to python/cuml/common/CMakeLists.txt diff --git a/python/cuml/cuml/common/__init__.py b/python/cuml/common/__init__.py similarity index 100% rename from python/cuml/cuml/common/__init__.py rename to python/cuml/common/__init__.py diff --git a/python/cuml/cuml/common/array.py b/python/cuml/common/array.py similarity index 100% rename from python/cuml/cuml/common/array.py rename to python/cuml/common/array.py diff --git a/python/cuml/cuml/common/array_descriptor.py b/python/cuml/common/array_descriptor.py similarity index 100% rename from python/cuml/cuml/common/array_descriptor.py rename to python/cuml/common/array_descriptor.py diff --git a/python/cuml/cuml/common/array_sparse.py b/python/cuml/common/array_sparse.py similarity index 100% rename from python/cuml/cuml/common/array_sparse.py rename to python/cuml/common/array_sparse.py diff --git a/python/cuml/cuml/common/base.pyx b/python/cuml/common/base.pyx similarity index 100% rename from python/cuml/cuml/common/base.pyx rename to python/cuml/common/base.pyx diff --git a/python/cuml/cuml/common/cuda.pxd b/python/cuml/common/cuda.pxd similarity index 100% rename from python/cuml/cuml/common/cuda.pxd rename to python/cuml/common/cuda.pxd diff --git a/python/cuml/cuml/common/cuda.pyx b/python/cuml/common/cuda.pyx similarity index 100% rename from python/cuml/cuml/common/cuda.pyx rename to python/cuml/common/cuda.pyx diff --git a/python/cuml/cuml/common/doc_utils.py b/python/cuml/common/doc_utils.py similarity index 100% rename from python/cuml/cuml/common/doc_utils.py rename to python/cuml/common/doc_utils.py diff --git a/python/cuml/cuml/common/exceptions.py b/python/cuml/common/exceptions.py similarity index 100% rename from python/cuml/cuml/common/exceptions.py rename to python/cuml/common/exceptions.py diff --git a/python/cuml/cuml/common/handle.pyx b/python/cuml/common/handle.pyx similarity index 100% rename from python/cuml/cuml/common/handle.pyx rename to python/cuml/common/handle.pyx diff --git a/python/cuml/cuml/common/import_utils.py b/python/cuml/common/import_utils.py similarity index 100% rename from python/cuml/cuml/common/import_utils.py rename to python/cuml/common/import_utils.py diff --git a/python/cuml/cuml/common/input_utils.py b/python/cuml/common/input_utils.py similarity index 100% rename from python/cuml/cuml/common/input_utils.py rename to python/cuml/common/input_utils.py diff --git a/python/cuml/cuml/common/kernel_utils.py b/python/cuml/common/kernel_utils.py similarity index 100% rename from python/cuml/cuml/common/kernel_utils.py rename to python/cuml/common/kernel_utils.py diff --git a/python/cuml/cuml/common/logger.pyx b/python/cuml/common/logger.pyx similarity index 100% rename from python/cuml/cuml/common/logger.pyx rename to python/cuml/common/logger.pyx diff --git a/python/cuml/cuml/common/memory_utils.py b/python/cuml/common/memory_utils.py similarity index 100% rename from python/cuml/cuml/common/memory_utils.py rename to python/cuml/common/memory_utils.py diff --git a/python/cuml/cuml/common/mixins.py b/python/cuml/common/mixins.py similarity index 100% rename from python/cuml/cuml/common/mixins.py rename to python/cuml/common/mixins.py diff --git a/python/cuml/cuml/common/numba_utils.py b/python/cuml/common/numba_utils.py similarity index 100% rename from python/cuml/cuml/common/numba_utils.py rename to python/cuml/common/numba_utils.py diff --git a/python/cuml/cuml/common/opg_data_utils_mg.pxd b/python/cuml/common/opg_data_utils_mg.pxd similarity index 100% rename from python/cuml/cuml/common/opg_data_utils_mg.pxd rename to python/cuml/common/opg_data_utils_mg.pxd diff --git a/python/cuml/cuml/common/opg_data_utils_mg.pyx b/python/cuml/common/opg_data_utils_mg.pyx similarity index 100% rename from python/cuml/cuml/common/opg_data_utils_mg.pyx rename to python/cuml/common/opg_data_utils_mg.pyx diff --git a/python/cuml/cuml/common/pointer_utils.pyx b/python/cuml/common/pointer_utils.pyx similarity index 100% rename from python/cuml/cuml/common/pointer_utils.pyx rename to python/cuml/common/pointer_utils.pyx diff --git a/python/cuml/cuml/common/sparse_utils.py b/python/cuml/common/sparse_utils.py similarity index 100% rename from python/cuml/cuml/common/sparse_utils.py rename to python/cuml/common/sparse_utils.py diff --git a/python/cuml/cuml/common/sparsefuncs.py b/python/cuml/common/sparsefuncs.py similarity index 100% rename from python/cuml/cuml/common/sparsefuncs.py rename to python/cuml/common/sparsefuncs.py diff --git a/python/cuml/cuml/common/timing_utils.py b/python/cuml/common/timing_utils.py similarity index 100% rename from python/cuml/cuml/common/timing_utils.py rename to python/cuml/common/timing_utils.py diff --git a/python/cuml/cuml/common/type_utils.py b/python/cuml/common/type_utils.py similarity index 100% rename from python/cuml/cuml/common/type_utils.py rename to python/cuml/common/type_utils.py diff --git a/python/cuml/cuml/compose/__init__.py b/python/cuml/compose/__init__.py similarity index 100% rename from python/cuml/cuml/compose/__init__.py rename to python/cuml/compose/__init__.py diff --git a/python/cuml/cuml/dask/__init__.py b/python/cuml/dask/__init__.py similarity index 100% rename from python/cuml/cuml/dask/__init__.py rename to python/cuml/dask/__init__.py diff --git a/python/cuml/cuml/dask/cluster/__init__.py b/python/cuml/dask/cluster/__init__.py similarity index 100% rename from python/cuml/cuml/dask/cluster/__init__.py rename to python/cuml/dask/cluster/__init__.py diff --git a/python/cuml/cuml/dask/cluster/dbscan.py b/python/cuml/dask/cluster/dbscan.py similarity index 100% rename from python/cuml/cuml/dask/cluster/dbscan.py rename to python/cuml/dask/cluster/dbscan.py diff --git a/python/cuml/cuml/dask/cluster/kmeans.py b/python/cuml/dask/cluster/kmeans.py similarity index 100% rename from python/cuml/cuml/dask/cluster/kmeans.py rename to python/cuml/dask/cluster/kmeans.py diff --git a/python/cuml/cuml/dask/common/__init__.py b/python/cuml/dask/common/__init__.py similarity index 100% rename from python/cuml/cuml/dask/common/__init__.py rename to python/cuml/dask/common/__init__.py diff --git a/python/cuml/cuml/dask/common/base.py b/python/cuml/dask/common/base.py similarity index 100% rename from python/cuml/cuml/dask/common/base.py rename to python/cuml/dask/common/base.py diff --git a/python/cuml/cuml/dask/common/dask_arr_utils.py b/python/cuml/dask/common/dask_arr_utils.py similarity index 100% rename from python/cuml/cuml/dask/common/dask_arr_utils.py rename to python/cuml/dask/common/dask_arr_utils.py diff --git a/python/cuml/cuml/dask/common/dask_df_utils.py b/python/cuml/dask/common/dask_df_utils.py similarity index 100% rename from python/cuml/cuml/dask/common/dask_df_utils.py rename to python/cuml/dask/common/dask_df_utils.py diff --git a/python/cuml/cuml/dask/common/func.py b/python/cuml/dask/common/func.py similarity index 100% rename from python/cuml/cuml/dask/common/func.py rename to python/cuml/dask/common/func.py diff --git a/python/cuml/cuml/dask/common/input_utils.py b/python/cuml/dask/common/input_utils.py similarity index 100% rename from python/cuml/cuml/dask/common/input_utils.py rename to python/cuml/dask/common/input_utils.py diff --git a/python/cuml/cuml/dask/common/part_utils.py b/python/cuml/dask/common/part_utils.py similarity index 100% rename from python/cuml/cuml/dask/common/part_utils.py rename to python/cuml/dask/common/part_utils.py diff --git a/python/cuml/cuml/dask/common/utils.py b/python/cuml/dask/common/utils.py similarity index 100% rename from python/cuml/cuml/dask/common/utils.py rename to python/cuml/dask/common/utils.py diff --git a/python/cuml/cuml/dask/datasets/__init__.py b/python/cuml/dask/datasets/__init__.py similarity index 100% rename from python/cuml/cuml/dask/datasets/__init__.py rename to python/cuml/dask/datasets/__init__.py diff --git a/python/cuml/cuml/dask/datasets/blobs.py b/python/cuml/dask/datasets/blobs.py similarity index 100% rename from python/cuml/cuml/dask/datasets/blobs.py rename to python/cuml/dask/datasets/blobs.py diff --git a/python/cuml/cuml/dask/datasets/classification.py b/python/cuml/dask/datasets/classification.py similarity index 100% rename from python/cuml/cuml/dask/datasets/classification.py rename to python/cuml/dask/datasets/classification.py diff --git a/python/cuml/cuml/dask/datasets/regression.py b/python/cuml/dask/datasets/regression.py similarity index 100% rename from python/cuml/cuml/dask/datasets/regression.py rename to python/cuml/dask/datasets/regression.py diff --git a/python/cuml/cuml/dask/datasets/utils.py b/python/cuml/dask/datasets/utils.py similarity index 100% rename from python/cuml/cuml/dask/datasets/utils.py rename to python/cuml/dask/datasets/utils.py diff --git a/python/cuml/cuml/dask/decomposition/__init__.py b/python/cuml/dask/decomposition/__init__.py similarity index 100% rename from python/cuml/cuml/dask/decomposition/__init__.py rename to python/cuml/dask/decomposition/__init__.py diff --git a/python/cuml/cuml/dask/decomposition/base.py b/python/cuml/dask/decomposition/base.py similarity index 100% rename from python/cuml/cuml/dask/decomposition/base.py rename to python/cuml/dask/decomposition/base.py diff --git a/python/cuml/cuml/dask/decomposition/pca.py b/python/cuml/dask/decomposition/pca.py similarity index 100% rename from python/cuml/cuml/dask/decomposition/pca.py rename to python/cuml/dask/decomposition/pca.py diff --git a/python/cuml/cuml/dask/decomposition/tsvd.py b/python/cuml/dask/decomposition/tsvd.py similarity index 100% rename from python/cuml/cuml/dask/decomposition/tsvd.py rename to python/cuml/dask/decomposition/tsvd.py diff --git a/python/cuml/cuml/dask/ensemble/__init__.py b/python/cuml/dask/ensemble/__init__.py similarity index 100% rename from python/cuml/cuml/dask/ensemble/__init__.py rename to python/cuml/dask/ensemble/__init__.py diff --git a/python/cuml/cuml/dask/ensemble/base.py b/python/cuml/dask/ensemble/base.py similarity index 100% rename from python/cuml/cuml/dask/ensemble/base.py rename to python/cuml/dask/ensemble/base.py diff --git a/python/cuml/cuml/dask/ensemble/randomforestclassifier.py b/python/cuml/dask/ensemble/randomforestclassifier.py similarity index 100% rename from python/cuml/cuml/dask/ensemble/randomforestclassifier.py rename to python/cuml/dask/ensemble/randomforestclassifier.py diff --git a/python/cuml/cuml/dask/ensemble/randomforestregressor.py b/python/cuml/dask/ensemble/randomforestregressor.py similarity index 100% rename from python/cuml/cuml/dask/ensemble/randomforestregressor.py rename to python/cuml/dask/ensemble/randomforestregressor.py diff --git a/python/cuml/cuml/dask/extended/__init__.py b/python/cuml/dask/extended/__init__.py similarity index 100% rename from python/cuml/cuml/dask/extended/__init__.py rename to python/cuml/dask/extended/__init__.py diff --git a/python/cuml/cuml/dask/extended/linear_model/__init__.py b/python/cuml/dask/extended/linear_model/__init__.py similarity index 100% rename from python/cuml/cuml/dask/extended/linear_model/__init__.py rename to python/cuml/dask/extended/linear_model/__init__.py diff --git a/python/cuml/cuml/dask/extended/linear_model/logistic_regression.py b/python/cuml/dask/extended/linear_model/logistic_regression.py similarity index 100% rename from python/cuml/cuml/dask/extended/linear_model/logistic_regression.py rename to python/cuml/dask/extended/linear_model/logistic_regression.py diff --git a/python/cuml/cuml/dask/feature_extraction/__init__.py b/python/cuml/dask/feature_extraction/__init__.py similarity index 100% rename from python/cuml/cuml/dask/feature_extraction/__init__.py rename to python/cuml/dask/feature_extraction/__init__.py diff --git a/python/cuml/cuml/dask/feature_extraction/text/__init__.py b/python/cuml/dask/feature_extraction/text/__init__.py similarity index 100% rename from python/cuml/cuml/dask/feature_extraction/text/__init__.py rename to python/cuml/dask/feature_extraction/text/__init__.py diff --git a/python/cuml/cuml/dask/feature_extraction/text/tfidf_transformer.py b/python/cuml/dask/feature_extraction/text/tfidf_transformer.py similarity index 100% rename from python/cuml/cuml/dask/feature_extraction/text/tfidf_transformer.py rename to python/cuml/dask/feature_extraction/text/tfidf_transformer.py diff --git a/python/cuml/cuml/dask/linear_model/__init__.py b/python/cuml/dask/linear_model/__init__.py similarity index 100% rename from python/cuml/cuml/dask/linear_model/__init__.py rename to python/cuml/dask/linear_model/__init__.py diff --git a/python/cuml/cuml/dask/linear_model/elastic_net.py b/python/cuml/dask/linear_model/elastic_net.py similarity index 100% rename from python/cuml/cuml/dask/linear_model/elastic_net.py rename to python/cuml/dask/linear_model/elastic_net.py diff --git a/python/cuml/cuml/dask/linear_model/lasso.py b/python/cuml/dask/linear_model/lasso.py similarity index 100% rename from python/cuml/cuml/dask/linear_model/lasso.py rename to python/cuml/dask/linear_model/lasso.py diff --git a/python/cuml/cuml/dask/linear_model/linear_regression.py b/python/cuml/dask/linear_model/linear_regression.py similarity index 100% rename from python/cuml/cuml/dask/linear_model/linear_regression.py rename to python/cuml/dask/linear_model/linear_regression.py diff --git a/python/cuml/cuml/dask/linear_model/ridge.py b/python/cuml/dask/linear_model/ridge.py similarity index 100% rename from python/cuml/cuml/dask/linear_model/ridge.py rename to python/cuml/dask/linear_model/ridge.py diff --git a/python/cuml/cuml/dask/manifold/__init__.py b/python/cuml/dask/manifold/__init__.py similarity index 100% rename from python/cuml/cuml/dask/manifold/__init__.py rename to python/cuml/dask/manifold/__init__.py diff --git a/python/cuml/cuml/dask/manifold/umap.py b/python/cuml/dask/manifold/umap.py similarity index 100% rename from python/cuml/cuml/dask/manifold/umap.py rename to python/cuml/dask/manifold/umap.py diff --git a/python/cuml/cuml/dask/metrics/__init__.py b/python/cuml/dask/metrics/__init__.py similarity index 100% rename from python/cuml/cuml/dask/metrics/__init__.py rename to python/cuml/dask/metrics/__init__.py diff --git a/python/cuml/cuml/dask/metrics/confusion_matrix.py b/python/cuml/dask/metrics/confusion_matrix.py similarity index 100% rename from python/cuml/cuml/dask/metrics/confusion_matrix.py rename to python/cuml/dask/metrics/confusion_matrix.py diff --git a/python/cuml/cuml/dask/metrics/utils.py b/python/cuml/dask/metrics/utils.py similarity index 100% rename from python/cuml/cuml/dask/metrics/utils.py rename to python/cuml/dask/metrics/utils.py diff --git a/python/cuml/cuml/dask/naive_bayes/__init__.py b/python/cuml/dask/naive_bayes/__init__.py similarity index 100% rename from python/cuml/cuml/dask/naive_bayes/__init__.py rename to python/cuml/dask/naive_bayes/__init__.py diff --git a/python/cuml/cuml/dask/naive_bayes/naive_bayes.py b/python/cuml/dask/naive_bayes/naive_bayes.py similarity index 100% rename from python/cuml/cuml/dask/naive_bayes/naive_bayes.py rename to python/cuml/dask/naive_bayes/naive_bayes.py diff --git a/python/cuml/cuml/dask/neighbors/__init__.py b/python/cuml/dask/neighbors/__init__.py similarity index 100% rename from python/cuml/cuml/dask/neighbors/__init__.py rename to python/cuml/dask/neighbors/__init__.py diff --git a/python/cuml/cuml/dask/neighbors/kneighbors_classifier.py b/python/cuml/dask/neighbors/kneighbors_classifier.py similarity index 100% rename from python/cuml/cuml/dask/neighbors/kneighbors_classifier.py rename to python/cuml/dask/neighbors/kneighbors_classifier.py diff --git a/python/cuml/cuml/dask/neighbors/kneighbors_regressor.py b/python/cuml/dask/neighbors/kneighbors_regressor.py similarity index 100% rename from python/cuml/cuml/dask/neighbors/kneighbors_regressor.py rename to python/cuml/dask/neighbors/kneighbors_regressor.py diff --git a/python/cuml/cuml/dask/neighbors/nearest_neighbors.py b/python/cuml/dask/neighbors/nearest_neighbors.py similarity index 100% rename from python/cuml/cuml/dask/neighbors/nearest_neighbors.py rename to python/cuml/dask/neighbors/nearest_neighbors.py diff --git a/python/cuml/cuml/dask/preprocessing/LabelEncoder.py b/python/cuml/dask/preprocessing/LabelEncoder.py similarity index 100% rename from python/cuml/cuml/dask/preprocessing/LabelEncoder.py rename to python/cuml/dask/preprocessing/LabelEncoder.py diff --git a/python/cuml/cuml/dask/preprocessing/__init__.py b/python/cuml/dask/preprocessing/__init__.py similarity index 100% rename from python/cuml/cuml/dask/preprocessing/__init__.py rename to python/cuml/dask/preprocessing/__init__.py diff --git a/python/cuml/cuml/dask/preprocessing/encoders.py b/python/cuml/dask/preprocessing/encoders.py similarity index 100% rename from python/cuml/cuml/dask/preprocessing/encoders.py rename to python/cuml/dask/preprocessing/encoders.py diff --git a/python/cuml/cuml/dask/preprocessing/label.py b/python/cuml/dask/preprocessing/label.py similarity index 100% rename from python/cuml/cuml/dask/preprocessing/label.py rename to python/cuml/dask/preprocessing/label.py diff --git a/python/cuml/cuml/dask/solvers/__init__.py b/python/cuml/dask/solvers/__init__.py similarity index 100% rename from python/cuml/cuml/dask/solvers/__init__.py rename to python/cuml/dask/solvers/__init__.py diff --git a/python/cuml/cuml/dask/solvers/cd.py b/python/cuml/dask/solvers/cd.py similarity index 100% rename from python/cuml/cuml/dask/solvers/cd.py rename to python/cuml/dask/solvers/cd.py diff --git a/python/cuml/cuml/datasets/CMakeLists.txt b/python/cuml/datasets/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/datasets/CMakeLists.txt rename to python/cuml/datasets/CMakeLists.txt diff --git a/python/cuml/cuml/datasets/__init__.py b/python/cuml/datasets/__init__.py similarity index 100% rename from python/cuml/cuml/datasets/__init__.py rename to python/cuml/datasets/__init__.py diff --git a/python/cuml/cuml/datasets/arima.pyx b/python/cuml/datasets/arima.pyx similarity index 100% rename from python/cuml/cuml/datasets/arima.pyx rename to python/cuml/datasets/arima.pyx diff --git a/python/cuml/cuml/datasets/blobs.py b/python/cuml/datasets/blobs.py similarity index 100% rename from python/cuml/cuml/datasets/blobs.py rename to python/cuml/datasets/blobs.py diff --git a/python/cuml/cuml/datasets/classification.py b/python/cuml/datasets/classification.py similarity index 100% rename from python/cuml/cuml/datasets/classification.py rename to python/cuml/datasets/classification.py diff --git a/python/cuml/cuml/datasets/regression.pyx b/python/cuml/datasets/regression.pyx similarity index 100% rename from python/cuml/cuml/datasets/regression.pyx rename to python/cuml/datasets/regression.pyx diff --git a/python/cuml/cuml/datasets/utils.py b/python/cuml/datasets/utils.py similarity index 100% rename from python/cuml/cuml/datasets/utils.py rename to python/cuml/datasets/utils.py diff --git a/python/cuml/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/decomposition/CMakeLists.txt rename to python/cuml/decomposition/CMakeLists.txt diff --git a/python/cuml/cuml/decomposition/__init__.py b/python/cuml/decomposition/__init__.py similarity index 100% rename from python/cuml/cuml/decomposition/__init__.py rename to python/cuml/decomposition/__init__.py diff --git a/python/cuml/cuml/decomposition/base_mg.pyx b/python/cuml/decomposition/base_mg.pyx similarity index 100% rename from python/cuml/cuml/decomposition/base_mg.pyx rename to python/cuml/decomposition/base_mg.pyx diff --git a/python/cuml/cuml/decomposition/incremental_pca.py b/python/cuml/decomposition/incremental_pca.py similarity index 100% rename from python/cuml/cuml/decomposition/incremental_pca.py rename to python/cuml/decomposition/incremental_pca.py diff --git a/python/cuml/cuml/decomposition/pca.pyx b/python/cuml/decomposition/pca.pyx similarity index 100% rename from python/cuml/cuml/decomposition/pca.pyx rename to python/cuml/decomposition/pca.pyx diff --git a/python/cuml/cuml/decomposition/pca_mg.pyx b/python/cuml/decomposition/pca_mg.pyx similarity index 100% rename from python/cuml/cuml/decomposition/pca_mg.pyx rename to python/cuml/decomposition/pca_mg.pyx diff --git a/python/cuml/cuml/decomposition/tsvd.pyx b/python/cuml/decomposition/tsvd.pyx similarity index 100% rename from python/cuml/cuml/decomposition/tsvd.pyx rename to python/cuml/decomposition/tsvd.pyx diff --git a/python/cuml/cuml/decomposition/tsvd_mg.pyx b/python/cuml/decomposition/tsvd_mg.pyx similarity index 100% rename from python/cuml/cuml/decomposition/tsvd_mg.pyx rename to python/cuml/decomposition/tsvd_mg.pyx diff --git a/python/cuml/cuml/decomposition/utils.pxd b/python/cuml/decomposition/utils.pxd similarity index 100% rename from python/cuml/cuml/decomposition/utils.pxd rename to python/cuml/decomposition/utils.pxd diff --git a/python/cuml/cuml/decomposition/utils_mg.pxd b/python/cuml/decomposition/utils_mg.pxd similarity index 100% rename from python/cuml/cuml/decomposition/utils_mg.pxd rename to python/cuml/decomposition/utils_mg.pxd diff --git a/python/cuml/cuml/ensemble/CMakeLists.txt b/python/cuml/ensemble/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/ensemble/CMakeLists.txt rename to python/cuml/ensemble/CMakeLists.txt diff --git a/python/cuml/cuml/ensemble/__init__.py b/python/cuml/ensemble/__init__.py similarity index 100% rename from python/cuml/cuml/ensemble/__init__.py rename to python/cuml/ensemble/__init__.py diff --git a/python/cuml/cuml/ensemble/randomforest_common.pyx b/python/cuml/ensemble/randomforest_common.pyx similarity index 100% rename from python/cuml/cuml/ensemble/randomforest_common.pyx rename to python/cuml/ensemble/randomforest_common.pyx diff --git a/python/cuml/cuml/ensemble/randomforest_shared.pxd b/python/cuml/ensemble/randomforest_shared.pxd similarity index 100% rename from python/cuml/cuml/ensemble/randomforest_shared.pxd rename to python/cuml/ensemble/randomforest_shared.pxd diff --git a/python/cuml/cuml/ensemble/randomforest_shared.pyx b/python/cuml/ensemble/randomforest_shared.pyx similarity index 100% rename from python/cuml/cuml/ensemble/randomforest_shared.pyx rename to python/cuml/ensemble/randomforest_shared.pyx diff --git a/python/cuml/cuml/ensemble/randomforestclassifier.pyx b/python/cuml/ensemble/randomforestclassifier.pyx similarity index 100% rename from python/cuml/cuml/ensemble/randomforestclassifier.pyx rename to python/cuml/ensemble/randomforestclassifier.pyx diff --git a/python/cuml/cuml/ensemble/randomforestregressor.pyx b/python/cuml/ensemble/randomforestregressor.pyx similarity index 100% rename from python/cuml/cuml/ensemble/randomforestregressor.pyx rename to python/cuml/ensemble/randomforestregressor.pyx diff --git a/python/cuml/cuml/experimental/__init__.py b/python/cuml/experimental/__init__.py similarity index 100% rename from python/cuml/cuml/experimental/__init__.py rename to python/cuml/experimental/__init__.py diff --git a/python/cuml/cuml/experimental/hyperopt_utils/__init__.py b/python/cuml/experimental/hyperopt_utils/__init__.py similarity index 100% rename from python/cuml/cuml/experimental/hyperopt_utils/__init__.py rename to python/cuml/experimental/hyperopt_utils/__init__.py diff --git a/python/cuml/cuml/experimental/hyperopt_utils/plotting_utils.py b/python/cuml/experimental/hyperopt_utils/plotting_utils.py similarity index 100% rename from python/cuml/cuml/experimental/hyperopt_utils/plotting_utils.py rename to python/cuml/experimental/hyperopt_utils/plotting_utils.py diff --git a/python/cuml/cuml/experimental/hyperparams/HPO_demo.ipynb b/python/cuml/experimental/hyperparams/HPO_demo.ipynb similarity index 100% rename from python/cuml/cuml/experimental/hyperparams/HPO_demo.ipynb rename to python/cuml/experimental/hyperparams/HPO_demo.ipynb diff --git a/python/cuml/cuml/experimental/linear_model/CMakeLists.txt b/python/cuml/experimental/linear_model/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/experimental/linear_model/CMakeLists.txt rename to python/cuml/experimental/linear_model/CMakeLists.txt diff --git a/python/cuml/cuml/experimental/linear_model/__init__.py b/python/cuml/experimental/linear_model/__init__.py similarity index 100% rename from python/cuml/cuml/experimental/linear_model/__init__.py rename to python/cuml/experimental/linear_model/__init__.py diff --git a/python/cuml/cuml/experimental/linear_model/lars.pyx b/python/cuml/experimental/linear_model/lars.pyx similarity index 100% rename from python/cuml/cuml/experimental/linear_model/lars.pyx rename to python/cuml/experimental/linear_model/lars.pyx diff --git a/python/cuml/cuml/explainer/CMakeLists.txt b/python/cuml/explainer/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/explainer/CMakeLists.txt rename to python/cuml/explainer/CMakeLists.txt diff --git a/python/cuml/cuml/explainer/__init__.py b/python/cuml/explainer/__init__.py similarity index 100% rename from python/cuml/cuml/explainer/__init__.py rename to python/cuml/explainer/__init__.py diff --git a/python/cuml/cuml/explainer/base.pyx b/python/cuml/explainer/base.pyx similarity index 100% rename from python/cuml/cuml/explainer/base.pyx rename to python/cuml/explainer/base.pyx diff --git a/python/cuml/cuml/explainer/common.py b/python/cuml/explainer/common.py similarity index 100% rename from python/cuml/cuml/explainer/common.py rename to python/cuml/explainer/common.py diff --git a/python/cuml/cuml/explainer/kernel_shap.pyx b/python/cuml/explainer/kernel_shap.pyx similarity index 100% rename from python/cuml/cuml/explainer/kernel_shap.pyx rename to python/cuml/explainer/kernel_shap.pyx diff --git a/python/cuml/cuml/explainer/permutation_shap.pyx b/python/cuml/explainer/permutation_shap.pyx similarity index 100% rename from python/cuml/cuml/explainer/permutation_shap.pyx rename to python/cuml/explainer/permutation_shap.pyx diff --git a/python/cuml/cuml/explainer/sampling.py b/python/cuml/explainer/sampling.py similarity index 100% rename from python/cuml/cuml/explainer/sampling.py rename to python/cuml/explainer/sampling.py diff --git a/python/cuml/cuml/explainer/tree_shap.pyx b/python/cuml/explainer/tree_shap.pyx similarity index 100% rename from python/cuml/cuml/explainer/tree_shap.pyx rename to python/cuml/explainer/tree_shap.pyx diff --git a/python/cuml/cuml/feature_extraction/__init__.py b/python/cuml/feature_extraction/__init__.py similarity index 100% rename from python/cuml/cuml/feature_extraction/__init__.py rename to python/cuml/feature_extraction/__init__.py diff --git a/python/cuml/cuml/feature_extraction/_stop_words.py b/python/cuml/feature_extraction/_stop_words.py similarity index 100% rename from python/cuml/cuml/feature_extraction/_stop_words.py rename to python/cuml/feature_extraction/_stop_words.py diff --git a/python/cuml/cuml/feature_extraction/_tfidf.py b/python/cuml/feature_extraction/_tfidf.py similarity index 100% rename from python/cuml/cuml/feature_extraction/_tfidf.py rename to python/cuml/feature_extraction/_tfidf.py diff --git a/python/cuml/cuml/feature_extraction/_tfidf_vectorizer.py b/python/cuml/feature_extraction/_tfidf_vectorizer.py similarity index 100% rename from python/cuml/cuml/feature_extraction/_tfidf_vectorizer.py rename to python/cuml/feature_extraction/_tfidf_vectorizer.py diff --git a/python/cuml/cuml/feature_extraction/_vectorizers.py b/python/cuml/feature_extraction/_vectorizers.py similarity index 100% rename from python/cuml/cuml/feature_extraction/_vectorizers.py rename to python/cuml/feature_extraction/_vectorizers.py diff --git a/python/cuml/cuml/feature_extraction/text.py b/python/cuml/feature_extraction/text.py similarity index 100% rename from python/cuml/cuml/feature_extraction/text.py rename to python/cuml/feature_extraction/text.py diff --git a/python/cuml/cuml/fil/CMakeLists.txt b/python/cuml/fil/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/fil/CMakeLists.txt rename to python/cuml/fil/CMakeLists.txt diff --git a/python/cuml/cuml/fil/README.md b/python/cuml/fil/README.md similarity index 100% rename from python/cuml/cuml/fil/README.md rename to python/cuml/fil/README.md diff --git a/python/cuml/cuml/fil/__init__.py b/python/cuml/fil/__init__.py similarity index 100% rename from python/cuml/cuml/fil/__init__.py rename to python/cuml/fil/__init__.py diff --git a/python/cuml/cuml/fil/fil.pyx b/python/cuml/fil/fil.pyx similarity index 100% rename from python/cuml/cuml/fil/fil.pyx rename to python/cuml/fil/fil.pyx diff --git a/python/cuml/cuml/fil/fil_performance_nrows.png b/python/cuml/fil/fil_performance_nrows.png similarity index 100% rename from python/cuml/cuml/fil/fil_performance_nrows.png rename to python/cuml/fil/fil_performance_nrows.png diff --git a/python/cuml/cuml/internals/CMakeLists.txt b/python/cuml/internals/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/internals/CMakeLists.txt rename to python/cuml/internals/CMakeLists.txt diff --git a/python/cuml/cuml/internals/__init__.py b/python/cuml/internals/__init__.py similarity index 100% rename from python/cuml/cuml/internals/__init__.py rename to python/cuml/internals/__init__.py diff --git a/python/cuml/cuml/internals/api_context_managers.py b/python/cuml/internals/api_context_managers.py similarity index 100% rename from python/cuml/cuml/internals/api_context_managers.py rename to python/cuml/internals/api_context_managers.py diff --git a/python/cuml/cuml/internals/api_decorators.py b/python/cuml/internals/api_decorators.py similarity index 100% rename from python/cuml/cuml/internals/api_decorators.py rename to python/cuml/internals/api_decorators.py diff --git a/python/cuml/cuml/internals/base_helpers.py b/python/cuml/internals/base_helpers.py similarity index 100% rename from python/cuml/cuml/internals/base_helpers.py rename to python/cuml/internals/base_helpers.py diff --git a/python/cuml/cuml/internals/callbacks_implems.h b/python/cuml/internals/callbacks_implems.h similarity index 100% rename from python/cuml/cuml/internals/callbacks_implems.h rename to python/cuml/internals/callbacks_implems.h diff --git a/python/cuml/cuml/internals/global_settings.py b/python/cuml/internals/global_settings.py similarity index 100% rename from python/cuml/cuml/internals/global_settings.py rename to python/cuml/internals/global_settings.py diff --git a/python/cuml/cuml/internals/internals.pyx b/python/cuml/internals/internals.pyx similarity index 100% rename from python/cuml/cuml/internals/internals.pyx rename to python/cuml/internals/internals.pyx diff --git a/python/cuml/cuml/kernel_ridge/CMakeLists.txt b/python/cuml/kernel_ridge/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/kernel_ridge/CMakeLists.txt rename to python/cuml/kernel_ridge/CMakeLists.txt diff --git a/python/cuml/cuml/kernel_ridge/__init__.py b/python/cuml/kernel_ridge/__init__.py similarity index 100% rename from python/cuml/cuml/kernel_ridge/__init__.py rename to python/cuml/kernel_ridge/__init__.py diff --git a/python/cuml/cuml/kernel_ridge/kernel_ridge.pyx b/python/cuml/kernel_ridge/kernel_ridge.pyx similarity index 100% rename from python/cuml/cuml/kernel_ridge/kernel_ridge.pyx rename to python/cuml/kernel_ridge/kernel_ridge.pyx diff --git a/python/cuml/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/linear_model/CMakeLists.txt rename to python/cuml/linear_model/CMakeLists.txt diff --git a/python/cuml/cuml/linear_model/__init__.py b/python/cuml/linear_model/__init__.py similarity index 100% rename from python/cuml/cuml/linear_model/__init__.py rename to python/cuml/linear_model/__init__.py diff --git a/python/cuml/cuml/linear_model/base.pyx b/python/cuml/linear_model/base.pyx similarity index 100% rename from python/cuml/cuml/linear_model/base.pyx rename to python/cuml/linear_model/base.pyx diff --git a/python/cuml/cuml/linear_model/base_mg.pyx b/python/cuml/linear_model/base_mg.pyx similarity index 100% rename from python/cuml/cuml/linear_model/base_mg.pyx rename to python/cuml/linear_model/base_mg.pyx diff --git a/python/cuml/cuml/linear_model/elastic_net.pyx b/python/cuml/linear_model/elastic_net.pyx similarity index 100% rename from python/cuml/cuml/linear_model/elastic_net.pyx rename to python/cuml/linear_model/elastic_net.pyx diff --git a/python/cuml/cuml/linear_model/lasso.py b/python/cuml/linear_model/lasso.py similarity index 100% rename from python/cuml/cuml/linear_model/lasso.py rename to python/cuml/linear_model/lasso.py diff --git a/python/cuml/cuml/linear_model/linear_regression.pyx b/python/cuml/linear_model/linear_regression.pyx similarity index 100% rename from python/cuml/cuml/linear_model/linear_regression.pyx rename to python/cuml/linear_model/linear_regression.pyx diff --git a/python/cuml/cuml/linear_model/linear_regression_mg.pyx b/python/cuml/linear_model/linear_regression_mg.pyx similarity index 100% rename from python/cuml/cuml/linear_model/linear_regression_mg.pyx rename to python/cuml/linear_model/linear_regression_mg.pyx diff --git a/python/cuml/cuml/linear_model/logistic_regression.pyx b/python/cuml/linear_model/logistic_regression.pyx similarity index 100% rename from python/cuml/cuml/linear_model/logistic_regression.pyx rename to python/cuml/linear_model/logistic_regression.pyx diff --git a/python/cuml/cuml/linear_model/mbsgd_classifier.pyx b/python/cuml/linear_model/mbsgd_classifier.pyx similarity index 100% rename from python/cuml/cuml/linear_model/mbsgd_classifier.pyx rename to python/cuml/linear_model/mbsgd_classifier.pyx diff --git a/python/cuml/cuml/linear_model/mbsgd_regressor.pyx b/python/cuml/linear_model/mbsgd_regressor.pyx similarity index 100% rename from python/cuml/cuml/linear_model/mbsgd_regressor.pyx rename to python/cuml/linear_model/mbsgd_regressor.pyx diff --git a/python/cuml/cuml/linear_model/ridge.pyx b/python/cuml/linear_model/ridge.pyx similarity index 100% rename from python/cuml/cuml/linear_model/ridge.pyx rename to python/cuml/linear_model/ridge.pyx diff --git a/python/cuml/cuml/linear_model/ridge_mg.pyx b/python/cuml/linear_model/ridge_mg.pyx similarity index 100% rename from python/cuml/cuml/linear_model/ridge_mg.pyx rename to python/cuml/linear_model/ridge_mg.pyx diff --git a/python/cuml/cuml/manifold/CMakeLists.txt b/python/cuml/manifold/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/manifold/CMakeLists.txt rename to python/cuml/manifold/CMakeLists.txt diff --git a/python/cuml/cuml/manifold/__init__.py b/python/cuml/manifold/__init__.py similarity index 100% rename from python/cuml/cuml/manifold/__init__.py rename to python/cuml/manifold/__init__.py diff --git a/python/cuml/cuml/manifold/simpl_set.pyx b/python/cuml/manifold/simpl_set.pyx similarity index 100% rename from python/cuml/cuml/manifold/simpl_set.pyx rename to python/cuml/manifold/simpl_set.pyx diff --git a/python/cuml/cuml/manifold/t_sne.pyx b/python/cuml/manifold/t_sne.pyx similarity index 100% rename from python/cuml/cuml/manifold/t_sne.pyx rename to python/cuml/manifold/t_sne.pyx diff --git a/python/cuml/cuml/manifold/umap.pyx b/python/cuml/manifold/umap.pyx similarity index 100% rename from python/cuml/cuml/manifold/umap.pyx rename to python/cuml/manifold/umap.pyx diff --git a/python/cuml/cuml/manifold/umap_utils.pxd b/python/cuml/manifold/umap_utils.pxd similarity index 100% rename from python/cuml/cuml/manifold/umap_utils.pxd rename to python/cuml/manifold/umap_utils.pxd diff --git a/python/cuml/cuml/manifold/umap_utils.pyx b/python/cuml/manifold/umap_utils.pyx similarity index 100% rename from python/cuml/cuml/manifold/umap_utils.pyx rename to python/cuml/manifold/umap_utils.pyx diff --git a/python/cuml/cuml/metrics/CMakeLists.txt b/python/cuml/metrics/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/metrics/CMakeLists.txt rename to python/cuml/metrics/CMakeLists.txt diff --git a/python/cuml/cuml/metrics/__init__.py b/python/cuml/metrics/__init__.py similarity index 100% rename from python/cuml/cuml/metrics/__init__.py rename to python/cuml/metrics/__init__.py diff --git a/python/cuml/cuml/metrics/_classification.py b/python/cuml/metrics/_classification.py similarity index 100% rename from python/cuml/cuml/metrics/_classification.py rename to python/cuml/metrics/_classification.py diff --git a/python/cuml/cuml/metrics/_ranking.py b/python/cuml/metrics/_ranking.py similarity index 100% rename from python/cuml/cuml/metrics/_ranking.py rename to python/cuml/metrics/_ranking.py diff --git a/python/cuml/cuml/metrics/accuracy.pyx b/python/cuml/metrics/accuracy.pyx similarity index 100% rename from python/cuml/cuml/metrics/accuracy.pyx rename to python/cuml/metrics/accuracy.pyx diff --git a/python/cuml/cuml/metrics/cluster/CMakeLists.txt b/python/cuml/metrics/cluster/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/metrics/cluster/CMakeLists.txt rename to python/cuml/metrics/cluster/CMakeLists.txt diff --git a/python/cuml/cuml/metrics/cluster/__init__.py b/python/cuml/metrics/cluster/__init__.py similarity index 100% rename from python/cuml/cuml/metrics/cluster/__init__.py rename to python/cuml/metrics/cluster/__init__.py diff --git a/python/cuml/cuml/metrics/cluster/adjusted_rand_index.pyx b/python/cuml/metrics/cluster/adjusted_rand_index.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/adjusted_rand_index.pyx rename to python/cuml/metrics/cluster/adjusted_rand_index.pyx diff --git a/python/cuml/cuml/metrics/cluster/completeness_score.pyx b/python/cuml/metrics/cluster/completeness_score.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/completeness_score.pyx rename to python/cuml/metrics/cluster/completeness_score.pyx diff --git a/python/cuml/cuml/metrics/cluster/entropy.pyx b/python/cuml/metrics/cluster/entropy.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/entropy.pyx rename to python/cuml/metrics/cluster/entropy.pyx diff --git a/python/cuml/cuml/metrics/cluster/homogeneity_score.pyx b/python/cuml/metrics/cluster/homogeneity_score.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/homogeneity_score.pyx rename to python/cuml/metrics/cluster/homogeneity_score.pyx diff --git a/python/cuml/cuml/metrics/cluster/mutual_info_score.pyx b/python/cuml/metrics/cluster/mutual_info_score.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/mutual_info_score.pyx rename to python/cuml/metrics/cluster/mutual_info_score.pyx diff --git a/python/cuml/cuml/metrics/cluster/silhouette_score.pyx b/python/cuml/metrics/cluster/silhouette_score.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/silhouette_score.pyx rename to python/cuml/metrics/cluster/silhouette_score.pyx diff --git a/python/cuml/cuml/metrics/cluster/utils.pyx b/python/cuml/metrics/cluster/utils.pyx similarity index 100% rename from python/cuml/cuml/metrics/cluster/utils.pyx rename to python/cuml/metrics/cluster/utils.pyx diff --git a/python/cuml/cuml/metrics/confusion_matrix.py b/python/cuml/metrics/confusion_matrix.py similarity index 100% rename from python/cuml/cuml/metrics/confusion_matrix.py rename to python/cuml/metrics/confusion_matrix.py diff --git a/python/cuml/cuml/metrics/distance_type.pxd b/python/cuml/metrics/distance_type.pxd similarity index 100% rename from python/cuml/cuml/metrics/distance_type.pxd rename to python/cuml/metrics/distance_type.pxd diff --git a/python/cuml/cuml/metrics/hinge_loss.pyx b/python/cuml/metrics/hinge_loss.pyx similarity index 100% rename from python/cuml/cuml/metrics/hinge_loss.pyx rename to python/cuml/metrics/hinge_loss.pyx diff --git a/python/cuml/cuml/metrics/kl_divergence.pyx b/python/cuml/metrics/kl_divergence.pyx similarity index 100% rename from python/cuml/cuml/metrics/kl_divergence.pyx rename to python/cuml/metrics/kl_divergence.pyx diff --git a/python/cuml/cuml/metrics/pairwise_distances.pyx b/python/cuml/metrics/pairwise_distances.pyx similarity index 100% rename from python/cuml/cuml/metrics/pairwise_distances.pyx rename to python/cuml/metrics/pairwise_distances.pyx diff --git a/python/cuml/cuml/metrics/pairwise_kernels.py b/python/cuml/metrics/pairwise_kernels.py similarity index 100% rename from python/cuml/cuml/metrics/pairwise_kernels.py rename to python/cuml/metrics/pairwise_kernels.py diff --git a/python/cuml/cuml/metrics/regression.pxd b/python/cuml/metrics/regression.pxd similarity index 100% rename from python/cuml/cuml/metrics/regression.pxd rename to python/cuml/metrics/regression.pxd diff --git a/python/cuml/cuml/metrics/regression.pyx b/python/cuml/metrics/regression.pyx similarity index 100% rename from python/cuml/cuml/metrics/regression.pyx rename to python/cuml/metrics/regression.pyx diff --git a/python/cuml/cuml/metrics/trustworthiness.pyx b/python/cuml/metrics/trustworthiness.pyx similarity index 100% rename from python/cuml/cuml/metrics/trustworthiness.pyx rename to python/cuml/metrics/trustworthiness.pyx diff --git a/python/cuml/cuml/metrics/utils.py b/python/cuml/metrics/utils.py similarity index 100% rename from python/cuml/cuml/metrics/utils.py rename to python/cuml/metrics/utils.py diff --git a/python/cuml/cuml/model_selection/__init__.py b/python/cuml/model_selection/__init__.py similarity index 100% rename from python/cuml/cuml/model_selection/__init__.py rename to python/cuml/model_selection/__init__.py diff --git a/python/cuml/cuml/model_selection/_split.py b/python/cuml/model_selection/_split.py similarity index 100% rename from python/cuml/cuml/model_selection/_split.py rename to python/cuml/model_selection/_split.py diff --git a/python/cuml/cuml/multiclass/__init__.py b/python/cuml/multiclass/__init__.py similarity index 100% rename from python/cuml/cuml/multiclass/__init__.py rename to python/cuml/multiclass/__init__.py diff --git a/python/cuml/cuml/multiclass/multiclass.py b/python/cuml/multiclass/multiclass.py similarity index 100% rename from python/cuml/cuml/multiclass/multiclass.py rename to python/cuml/multiclass/multiclass.py diff --git a/python/cuml/cuml/naive_bayes/__init__.py b/python/cuml/naive_bayes/__init__.py similarity index 100% rename from python/cuml/cuml/naive_bayes/__init__.py rename to python/cuml/naive_bayes/__init__.py diff --git a/python/cuml/cuml/naive_bayes/naive_bayes.py b/python/cuml/naive_bayes/naive_bayes.py similarity index 100% rename from python/cuml/cuml/naive_bayes/naive_bayes.py rename to python/cuml/naive_bayes/naive_bayes.py diff --git a/python/cuml/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/neighbors/CMakeLists.txt rename to python/cuml/neighbors/CMakeLists.txt diff --git a/python/cuml/cuml/neighbors/__init__.py b/python/cuml/neighbors/__init__.py similarity index 100% rename from python/cuml/cuml/neighbors/__init__.py rename to python/cuml/neighbors/__init__.py diff --git a/python/cuml/cuml/neighbors/ann.pxd b/python/cuml/neighbors/ann.pxd similarity index 100% rename from python/cuml/cuml/neighbors/ann.pxd rename to python/cuml/neighbors/ann.pxd diff --git a/python/cuml/cuml/neighbors/ann.pyx b/python/cuml/neighbors/ann.pyx similarity index 100% rename from python/cuml/cuml/neighbors/ann.pyx rename to python/cuml/neighbors/ann.pyx diff --git a/python/cuml/cuml/neighbors/kernel_density.py b/python/cuml/neighbors/kernel_density.py similarity index 100% rename from python/cuml/cuml/neighbors/kernel_density.py rename to python/cuml/neighbors/kernel_density.py diff --git a/python/cuml/cuml/neighbors/kneighbors_classifier.pyx b/python/cuml/neighbors/kneighbors_classifier.pyx similarity index 100% rename from python/cuml/cuml/neighbors/kneighbors_classifier.pyx rename to python/cuml/neighbors/kneighbors_classifier.pyx diff --git a/python/cuml/cuml/neighbors/kneighbors_classifier_mg.pyx b/python/cuml/neighbors/kneighbors_classifier_mg.pyx similarity index 100% rename from python/cuml/cuml/neighbors/kneighbors_classifier_mg.pyx rename to python/cuml/neighbors/kneighbors_classifier_mg.pyx diff --git a/python/cuml/cuml/neighbors/kneighbors_regressor.pyx b/python/cuml/neighbors/kneighbors_regressor.pyx similarity index 100% rename from python/cuml/cuml/neighbors/kneighbors_regressor.pyx rename to python/cuml/neighbors/kneighbors_regressor.pyx diff --git a/python/cuml/cuml/neighbors/kneighbors_regressor_mg.pyx b/python/cuml/neighbors/kneighbors_regressor_mg.pyx similarity index 100% rename from python/cuml/cuml/neighbors/kneighbors_regressor_mg.pyx rename to python/cuml/neighbors/kneighbors_regressor_mg.pyx diff --git a/python/cuml/cuml/neighbors/nearest_neighbors.pyx b/python/cuml/neighbors/nearest_neighbors.pyx similarity index 100% rename from python/cuml/cuml/neighbors/nearest_neighbors.pyx rename to python/cuml/neighbors/nearest_neighbors.pyx diff --git a/python/cuml/cuml/neighbors/nearest_neighbors_mg.pyx b/python/cuml/neighbors/nearest_neighbors_mg.pyx similarity index 100% rename from python/cuml/cuml/neighbors/nearest_neighbors_mg.pyx rename to python/cuml/neighbors/nearest_neighbors_mg.pyx diff --git a/python/cuml/cuml/pipeline/__init__.py b/python/cuml/pipeline/__init__.py similarity index 100% rename from python/cuml/cuml/pipeline/__init__.py rename to python/cuml/pipeline/__init__.py diff --git a/python/cuml/cuml/preprocessing/LabelEncoder.py b/python/cuml/preprocessing/LabelEncoder.py similarity index 100% rename from python/cuml/cuml/preprocessing/LabelEncoder.py rename to python/cuml/preprocessing/LabelEncoder.py diff --git a/python/cuml/cuml/preprocessing/TargetEncoder.py b/python/cuml/preprocessing/TargetEncoder.py similarity index 100% rename from python/cuml/cuml/preprocessing/TargetEncoder.py rename to python/cuml/preprocessing/TargetEncoder.py diff --git a/python/cuml/cuml/preprocessing/__init__.py b/python/cuml/preprocessing/__init__.py similarity index 100% rename from python/cuml/cuml/preprocessing/__init__.py rename to python/cuml/preprocessing/__init__.py diff --git a/python/cuml/cuml/preprocessing/encoders.py b/python/cuml/preprocessing/encoders.py similarity index 100% rename from python/cuml/cuml/preprocessing/encoders.py rename to python/cuml/preprocessing/encoders.py diff --git a/python/cuml/cuml/preprocessing/label.py b/python/cuml/preprocessing/label.py similarity index 100% rename from python/cuml/cuml/preprocessing/label.py rename to python/cuml/preprocessing/label.py diff --git a/python/cuml/cuml/preprocessing/onehotencoder_mg.py b/python/cuml/preprocessing/onehotencoder_mg.py similarity index 100% rename from python/cuml/cuml/preprocessing/onehotencoder_mg.py rename to python/cuml/preprocessing/onehotencoder_mg.py diff --git a/python/cuml/cuml/preprocessing/text/__init__.py b/python/cuml/preprocessing/text/__init__.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/__init__.py rename to python/cuml/preprocessing/text/__init__.py diff --git a/python/cuml/cuml/preprocessing/text/stem/__init__.py b/python/cuml/preprocessing/text/stem/__init__.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/__init__.py rename to python/cuml/preprocessing/text/stem/__init__.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer.py b/python/cuml/preprocessing/text/stem/porter_stemmer.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer.py rename to python/cuml/preprocessing/text/stem/porter_stemmer.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/__init__.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/consonant_vowel_utils.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/len_flags_utils.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/measure_utils.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/porter_stemmer_rules.py diff --git a/python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py b/python/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py similarity index 100% rename from python/cuml/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py rename to python/cuml/preprocessing/text/stem/porter_stemmer_utils/suffix_utils.py diff --git a/python/cuml/cuml/prims/__init__.py b/python/cuml/prims/__init__.py similarity index 100% rename from python/cuml/cuml/prims/__init__.py rename to python/cuml/prims/__init__.py diff --git a/python/cuml/cuml/prims/array.py b/python/cuml/prims/array.py similarity index 100% rename from python/cuml/cuml/prims/array.py rename to python/cuml/prims/array.py diff --git a/python/cuml/cuml/prims/label/__init__.py b/python/cuml/prims/label/__init__.py similarity index 100% rename from python/cuml/cuml/prims/label/__init__.py rename to python/cuml/prims/label/__init__.py diff --git a/python/cuml/cuml/prims/label/classlabels.py b/python/cuml/prims/label/classlabels.py similarity index 100% rename from python/cuml/cuml/prims/label/classlabels.py rename to python/cuml/prims/label/classlabels.py diff --git a/python/cuml/cuml/prims/stats/__init__.py b/python/cuml/prims/stats/__init__.py similarity index 100% rename from python/cuml/cuml/prims/stats/__init__.py rename to python/cuml/prims/stats/__init__.py diff --git a/python/cuml/cuml/prims/stats/covariance.py b/python/cuml/prims/stats/covariance.py similarity index 100% rename from python/cuml/cuml/prims/stats/covariance.py rename to python/cuml/prims/stats/covariance.py diff --git a/python/cuml/cuml/random_projection/CMakeLists.txt b/python/cuml/random_projection/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/random_projection/CMakeLists.txt rename to python/cuml/random_projection/CMakeLists.txt diff --git a/python/cuml/cuml/random_projection/__init__.py b/python/cuml/random_projection/__init__.py similarity index 100% rename from python/cuml/cuml/random_projection/__init__.py rename to python/cuml/random_projection/__init__.py diff --git a/python/cuml/cuml/random_projection/random_projection.pyx b/python/cuml/random_projection/random_projection.pyx similarity index 100% rename from python/cuml/cuml/random_projection/random_projection.pyx rename to python/cuml/random_projection/random_projection.pyx diff --git a/python/cuml/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/solvers/CMakeLists.txt rename to python/cuml/solvers/CMakeLists.txt diff --git a/python/cuml/cuml/solvers/__init__.py b/python/cuml/solvers/__init__.py similarity index 100% rename from python/cuml/cuml/solvers/__init__.py rename to python/cuml/solvers/__init__.py diff --git a/python/cuml/cuml/solvers/cd.pyx b/python/cuml/solvers/cd.pyx similarity index 100% rename from python/cuml/cuml/solvers/cd.pyx rename to python/cuml/solvers/cd.pyx diff --git a/python/cuml/cuml/solvers/cd_mg.pyx b/python/cuml/solvers/cd_mg.pyx similarity index 100% rename from python/cuml/cuml/solvers/cd_mg.pyx rename to python/cuml/solvers/cd_mg.pyx diff --git a/python/cuml/cuml/solvers/qn.pyx b/python/cuml/solvers/qn.pyx similarity index 100% rename from python/cuml/cuml/solvers/qn.pyx rename to python/cuml/solvers/qn.pyx diff --git a/python/cuml/cuml/solvers/sgd.pyx b/python/cuml/solvers/sgd.pyx similarity index 100% rename from python/cuml/cuml/solvers/sgd.pyx rename to python/cuml/solvers/sgd.pyx diff --git a/python/cuml/cuml/svm/CMakeLists.txt b/python/cuml/svm/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/svm/CMakeLists.txt rename to python/cuml/svm/CMakeLists.txt diff --git a/python/cuml/cuml/svm/__init__.py b/python/cuml/svm/__init__.py similarity index 100% rename from python/cuml/cuml/svm/__init__.py rename to python/cuml/svm/__init__.py diff --git a/python/cuml/cuml/svm/linear.pyx b/python/cuml/svm/linear.pyx similarity index 100% rename from python/cuml/cuml/svm/linear.pyx rename to python/cuml/svm/linear.pyx diff --git a/python/cuml/cuml/svm/linear_svc.py b/python/cuml/svm/linear_svc.py similarity index 100% rename from python/cuml/cuml/svm/linear_svc.py rename to python/cuml/svm/linear_svc.py diff --git a/python/cuml/cuml/svm/linear_svr.py b/python/cuml/svm/linear_svr.py similarity index 100% rename from python/cuml/cuml/svm/linear_svr.py rename to python/cuml/svm/linear_svr.py diff --git a/python/cuml/cuml/svm/svc.pyx b/python/cuml/svm/svc.pyx similarity index 100% rename from python/cuml/cuml/svm/svc.pyx rename to python/cuml/svm/svc.pyx diff --git a/python/cuml/cuml/svm/svm_base.pyx b/python/cuml/svm/svm_base.pyx similarity index 100% rename from python/cuml/cuml/svm/svm_base.pyx rename to python/cuml/svm/svm_base.pyx diff --git a/python/cuml/cuml/svm/svr.pyx b/python/cuml/svm/svr.pyx similarity index 100% rename from python/cuml/cuml/svm/svr.pyx rename to python/cuml/svm/svr.pyx diff --git a/python/cuml/cuml/testing/__init__.py b/python/cuml/testing/__init__.py similarity index 100% rename from python/cuml/cuml/testing/__init__.py rename to python/cuml/testing/__init__.py diff --git a/python/cuml/cuml/testing/dask/__init__.py b/python/cuml/testing/dask/__init__.py similarity index 100% rename from python/cuml/cuml/testing/dask/__init__.py rename to python/cuml/testing/dask/__init__.py diff --git a/python/cuml/cuml/testing/dask/utils.py b/python/cuml/testing/dask/utils.py similarity index 100% rename from python/cuml/cuml/testing/dask/utils.py rename to python/cuml/testing/dask/utils.py diff --git a/python/cuml/cuml/testing/plugins/__init__.py b/python/cuml/testing/plugins/__init__.py similarity index 100% rename from python/cuml/cuml/testing/plugins/__init__.py rename to python/cuml/testing/plugins/__init__.py diff --git a/python/cuml/cuml/testing/plugins/quick_run_plugin.py b/python/cuml/testing/plugins/quick_run_plugin.py similarity index 100% rename from python/cuml/cuml/testing/plugins/quick_run_plugin.py rename to python/cuml/testing/plugins/quick_run_plugin.py diff --git a/python/cuml/cuml/testing/test_preproc_utils.py b/python/cuml/testing/test_preproc_utils.py similarity index 100% rename from python/cuml/cuml/testing/test_preproc_utils.py rename to python/cuml/testing/test_preproc_utils.py diff --git a/python/cuml/cuml/testing/utils.py b/python/cuml/testing/utils.py similarity index 100% rename from python/cuml/cuml/testing/utils.py rename to python/cuml/testing/utils.py diff --git a/python/cuml/cuml/tests/conftest.py b/python/cuml/tests/conftest.py similarity index 100% rename from python/cuml/cuml/tests/conftest.py rename to python/cuml/tests/conftest.py diff --git a/python/cuml/cuml/tests/dask/conftest.py b/python/cuml/tests/dask/conftest.py similarity index 100% rename from python/cuml/cuml/tests/dask/conftest.py rename to python/cuml/tests/dask/conftest.py diff --git a/python/cuml/cuml/tests/dask/test_base.py b/python/cuml/tests/dask/test_base.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_base.py rename to python/cuml/tests/dask/test_base.py diff --git a/python/cuml/cuml/tests/dask/test_coordinate_descent.py b/python/cuml/tests/dask/test_coordinate_descent.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_coordinate_descent.py rename to python/cuml/tests/dask/test_coordinate_descent.py diff --git a/python/cuml/cuml/tests/dask/test_dask_arr_utils.py b/python/cuml/tests/dask/test_dask_arr_utils.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_dask_arr_utils.py rename to python/cuml/tests/dask/test_dask_arr_utils.py diff --git a/python/cuml/cuml/tests/dask/test_dask_sql.py b/python/cuml/tests/dask/test_dask_sql.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_dask_sql.py rename to python/cuml/tests/dask/test_dask_sql.py diff --git a/python/cuml/cuml/tests/dask/test_dask_utils.py b/python/cuml/tests/dask/test_dask_utils.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_dask_utils.py rename to python/cuml/tests/dask/test_dask_utils.py diff --git a/python/cuml/cuml/tests/dask/test_datasets.py b/python/cuml/tests/dask/test_datasets.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_datasets.py rename to python/cuml/tests/dask/test_datasets.py diff --git a/python/cuml/cuml/tests/dask/test_dbscan.py b/python/cuml/tests/dask/test_dbscan.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_dbscan.py rename to python/cuml/tests/dask/test_dbscan.py diff --git a/python/cuml/cuml/tests/dask/test_doctest.py b/python/cuml/tests/dask/test_doctest.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_doctest.py rename to python/cuml/tests/dask/test_doctest.py diff --git a/python/cuml/cuml/tests/dask/test_func.py b/python/cuml/tests/dask/test_func.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_func.py rename to python/cuml/tests/dask/test_func.py diff --git a/python/cuml/cuml/tests/dask/test_global_settings.py b/python/cuml/tests/dask/test_global_settings.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_global_settings.py rename to python/cuml/tests/dask/test_global_settings.py diff --git a/python/cuml/cuml/tests/dask/test_input_utils.py b/python/cuml/tests/dask/test_input_utils.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_input_utils.py rename to python/cuml/tests/dask/test_input_utils.py diff --git a/python/cuml/cuml/tests/dask/test_kmeans.py b/python/cuml/tests/dask/test_kmeans.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_kmeans.py rename to python/cuml/tests/dask/test_kmeans.py diff --git a/python/cuml/cuml/tests/dask/test_kneighbors_classifier.py b/python/cuml/tests/dask/test_kneighbors_classifier.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_kneighbors_classifier.py rename to python/cuml/tests/dask/test_kneighbors_classifier.py diff --git a/python/cuml/cuml/tests/dask/test_kneighbors_regressor.py b/python/cuml/tests/dask/test_kneighbors_regressor.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_kneighbors_regressor.py rename to python/cuml/tests/dask/test_kneighbors_regressor.py diff --git a/python/cuml/cuml/tests/dask/test_label_binarizer.py b/python/cuml/tests/dask/test_label_binarizer.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_label_binarizer.py rename to python/cuml/tests/dask/test_label_binarizer.py diff --git a/python/cuml/cuml/tests/dask/test_label_encoder.py b/python/cuml/tests/dask/test_label_encoder.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_label_encoder.py rename to python/cuml/tests/dask/test_label_encoder.py diff --git a/python/cuml/cuml/tests/dask/test_linear_regression.py b/python/cuml/tests/dask/test_linear_regression.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_linear_regression.py rename to python/cuml/tests/dask/test_linear_regression.py diff --git a/python/cuml/cuml/tests/dask/test_logistic_regression.py b/python/cuml/tests/dask/test_logistic_regression.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_logistic_regression.py rename to python/cuml/tests/dask/test_logistic_regression.py diff --git a/python/cuml/cuml/tests/dask/test_metrics.py b/python/cuml/tests/dask/test_metrics.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_metrics.py rename to python/cuml/tests/dask/test_metrics.py diff --git a/python/cuml/cuml/tests/dask/test_naive_bayes.py b/python/cuml/tests/dask/test_naive_bayes.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_naive_bayes.py rename to python/cuml/tests/dask/test_naive_bayes.py diff --git a/python/cuml/cuml/tests/dask/test_nearest_neighbors.py b/python/cuml/tests/dask/test_nearest_neighbors.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_nearest_neighbors.py rename to python/cuml/tests/dask/test_nearest_neighbors.py diff --git a/python/cuml/cuml/tests/dask/test_one_hot_encoder.py b/python/cuml/tests/dask/test_one_hot_encoder.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_one_hot_encoder.py rename to python/cuml/tests/dask/test_one_hot_encoder.py diff --git a/python/cuml/cuml/tests/dask/test_pca.py b/python/cuml/tests/dask/test_pca.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_pca.py rename to python/cuml/tests/dask/test_pca.py diff --git a/python/cuml/cuml/tests/dask/test_random_forest.py b/python/cuml/tests/dask/test_random_forest.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_random_forest.py rename to python/cuml/tests/dask/test_random_forest.py diff --git a/python/cuml/cuml/tests/dask/test_ridge_regression.py b/python/cuml/tests/dask/test_ridge_regression.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_ridge_regression.py rename to python/cuml/tests/dask/test_ridge_regression.py diff --git a/python/cuml/cuml/tests/dask/test_serialization.py b/python/cuml/tests/dask/test_serialization.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_serialization.py rename to python/cuml/tests/dask/test_serialization.py diff --git a/python/cuml/cuml/tests/dask/test_tfidf.py b/python/cuml/tests/dask/test_tfidf.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_tfidf.py rename to python/cuml/tests/dask/test_tfidf.py diff --git a/python/cuml/cuml/tests/dask/test_tsvd.py b/python/cuml/tests/dask/test_tsvd.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_tsvd.py rename to python/cuml/tests/dask/test_tsvd.py diff --git a/python/cuml/cuml/tests/dask/test_umap.py b/python/cuml/tests/dask/test_umap.py similarity index 100% rename from python/cuml/cuml/tests/dask/test_umap.py rename to python/cuml/tests/dask/test_umap.py diff --git a/python/cuml/cuml/tests/explainer/test_explainer_base.py b/python/cuml/tests/explainer/test_explainer_base.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_explainer_base.py rename to python/cuml/tests/explainer/test_explainer_base.py diff --git a/python/cuml/cuml/tests/explainer/test_explainer_common.py b/python/cuml/tests/explainer/test_explainer_common.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_explainer_common.py rename to python/cuml/tests/explainer/test_explainer_common.py diff --git a/python/cuml/cuml/tests/explainer/test_explainer_kernel_shap.py b/python/cuml/tests/explainer/test_explainer_kernel_shap.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_explainer_kernel_shap.py rename to python/cuml/tests/explainer/test_explainer_kernel_shap.py diff --git a/python/cuml/cuml/tests/explainer/test_explainer_permutation_shap.py b/python/cuml/tests/explainer/test_explainer_permutation_shap.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_explainer_permutation_shap.py rename to python/cuml/tests/explainer/test_explainer_permutation_shap.py diff --git a/python/cuml/cuml/tests/explainer/test_gpu_treeshap.py b/python/cuml/tests/explainer/test_gpu_treeshap.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_gpu_treeshap.py rename to python/cuml/tests/explainer/test_gpu_treeshap.py diff --git a/python/cuml/cuml/tests/explainer/test_sampling.py b/python/cuml/tests/explainer/test_sampling.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_sampling.py rename to python/cuml/tests/explainer/test_sampling.py diff --git a/python/cuml/cuml/tests/explainer/test_shap_plotting.py b/python/cuml/tests/explainer/test_shap_plotting.py similarity index 100% rename from python/cuml/cuml/tests/explainer/test_shap_plotting.py rename to python/cuml/tests/explainer/test_shap_plotting.py diff --git a/python/cuml/cuml/tests/stemmer_tests/test_len_utils.py b/python/cuml/tests/stemmer_tests/test_len_utils.py similarity index 100% rename from python/cuml/cuml/tests/stemmer_tests/test_len_utils.py rename to python/cuml/tests/stemmer_tests/test_len_utils.py diff --git a/python/cuml/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py b/python/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py similarity index 100% rename from python/cuml/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py rename to python/cuml/tests/stemmer_tests/test_porter_stemmer_rules.py diff --git a/python/cuml/cuml/tests/stemmer_tests/test_stemmer.py b/python/cuml/tests/stemmer_tests/test_stemmer.py similarity index 100% rename from python/cuml/cuml/tests/stemmer_tests/test_stemmer.py rename to python/cuml/tests/stemmer_tests/test_stemmer.py diff --git a/python/cuml/cuml/tests/stemmer_tests/test_steps.py b/python/cuml/tests/stemmer_tests/test_steps.py similarity index 100% rename from python/cuml/cuml/tests/stemmer_tests/test_steps.py rename to python/cuml/tests/stemmer_tests/test_steps.py diff --git a/python/cuml/cuml/tests/stemmer_tests/test_suffix_utils.py b/python/cuml/tests/stemmer_tests/test_suffix_utils.py similarity index 100% rename from python/cuml/cuml/tests/stemmer_tests/test_suffix_utils.py rename to python/cuml/tests/stemmer_tests/test_suffix_utils.py diff --git a/python/cuml/cuml/tests/test_adapters.py b/python/cuml/tests/test_adapters.py similarity index 100% rename from python/cuml/cuml/tests/test_adapters.py rename to python/cuml/tests/test_adapters.py diff --git a/python/cuml/cuml/tests/test_agglomerative.py b/python/cuml/tests/test_agglomerative.py similarity index 100% rename from python/cuml/cuml/tests/test_agglomerative.py rename to python/cuml/tests/test_agglomerative.py diff --git a/python/cuml/cuml/tests/test_allocator.py b/python/cuml/tests/test_allocator.py similarity index 100% rename from python/cuml/cuml/tests/test_allocator.py rename to python/cuml/tests/test_allocator.py diff --git a/python/cuml/cuml/tests/test_api.py b/python/cuml/tests/test_api.py similarity index 100% rename from python/cuml/cuml/tests/test_api.py rename to python/cuml/tests/test_api.py diff --git a/python/cuml/cuml/tests/test_arima.py b/python/cuml/tests/test_arima.py similarity index 100% rename from python/cuml/cuml/tests/test_arima.py rename to python/cuml/tests/test_arima.py diff --git a/python/cuml/cuml/tests/test_array.py b/python/cuml/tests/test_array.py similarity index 100% rename from python/cuml/cuml/tests/test_array.py rename to python/cuml/tests/test_array.py diff --git a/python/cuml/cuml/tests/test_array_sparse.py b/python/cuml/tests/test_array_sparse.py similarity index 100% rename from python/cuml/cuml/tests/test_array_sparse.py rename to python/cuml/tests/test_array_sparse.py diff --git a/python/cuml/cuml/tests/test_auto_arima.py b/python/cuml/tests/test_auto_arima.py similarity index 100% rename from python/cuml/cuml/tests/test_auto_arima.py rename to python/cuml/tests/test_auto_arima.py diff --git a/python/cuml/cuml/tests/test_base.py b/python/cuml/tests/test_base.py similarity index 100% rename from python/cuml/cuml/tests/test_base.py rename to python/cuml/tests/test_base.py diff --git a/python/cuml/cuml/tests/test_batched_lbfgs.py b/python/cuml/tests/test_batched_lbfgs.py similarity index 100% rename from python/cuml/cuml/tests/test_batched_lbfgs.py rename to python/cuml/tests/test_batched_lbfgs.py diff --git a/python/cuml/cuml/tests/test_benchmark.py b/python/cuml/tests/test_benchmark.py similarity index 100% rename from python/cuml/cuml/tests/test_benchmark.py rename to python/cuml/tests/test_benchmark.py diff --git a/python/cuml/cuml/tests/test_class_enumerator.py b/python/cuml/tests/test_class_enumerator.py similarity index 100% rename from python/cuml/cuml/tests/test_class_enumerator.py rename to python/cuml/tests/test_class_enumerator.py diff --git a/python/cuml/cuml/tests/test_compose.py b/python/cuml/tests/test_compose.py similarity index 100% rename from python/cuml/cuml/tests/test_compose.py rename to python/cuml/tests/test_compose.py diff --git a/python/cuml/cuml/tests/test_coordinate_descent.py b/python/cuml/tests/test_coordinate_descent.py similarity index 100% rename from python/cuml/cuml/tests/test_coordinate_descent.py rename to python/cuml/tests/test_coordinate_descent.py diff --git a/python/cuml/cuml/tests/test_cuml_descr_decor.py b/python/cuml/tests/test_cuml_descr_decor.py similarity index 100% rename from python/cuml/cuml/tests/test_cuml_descr_decor.py rename to python/cuml/tests/test_cuml_descr_decor.py diff --git a/python/cuml/cuml/tests/test_dataset_generator_types.py b/python/cuml/tests/test_dataset_generator_types.py similarity index 100% rename from python/cuml/cuml/tests/test_dataset_generator_types.py rename to python/cuml/tests/test_dataset_generator_types.py diff --git a/python/cuml/cuml/tests/test_dbscan.py b/python/cuml/tests/test_dbscan.py similarity index 100% rename from python/cuml/cuml/tests/test_dbscan.py rename to python/cuml/tests/test_dbscan.py diff --git a/python/cuml/cuml/tests/test_doctest.py b/python/cuml/tests/test_doctest.py similarity index 100% rename from python/cuml/cuml/tests/test_doctest.py rename to python/cuml/tests/test_doctest.py diff --git a/python/cuml/cuml/tests/test_fil.py b/python/cuml/tests/test_fil.py similarity index 100% rename from python/cuml/cuml/tests/test_fil.py rename to python/cuml/tests/test_fil.py diff --git a/python/cuml/cuml/tests/test_hdbscan.py b/python/cuml/tests/test_hdbscan.py similarity index 100% rename from python/cuml/cuml/tests/test_hdbscan.py rename to python/cuml/tests/test_hdbscan.py diff --git a/python/cuml/cuml/tests/test_holtwinters.py b/python/cuml/tests/test_holtwinters.py similarity index 100% rename from python/cuml/cuml/tests/test_holtwinters.py rename to python/cuml/tests/test_holtwinters.py diff --git a/python/cuml/cuml/tests/test_incremental_pca.py b/python/cuml/tests/test_incremental_pca.py similarity index 100% rename from python/cuml/cuml/tests/test_incremental_pca.py rename to python/cuml/tests/test_incremental_pca.py diff --git a/python/cuml/cuml/tests/test_input_utils.py b/python/cuml/tests/test_input_utils.py similarity index 100% rename from python/cuml/cuml/tests/test_input_utils.py rename to python/cuml/tests/test_input_utils.py diff --git a/python/cuml/cuml/tests/test_internals_api.py b/python/cuml/tests/test_internals_api.py similarity index 100% rename from python/cuml/cuml/tests/test_internals_api.py rename to python/cuml/tests/test_internals_api.py diff --git a/python/cuml/cuml/tests/test_kernel_density.py b/python/cuml/tests/test_kernel_density.py similarity index 100% rename from python/cuml/cuml/tests/test_kernel_density.py rename to python/cuml/tests/test_kernel_density.py diff --git a/python/cuml/cuml/tests/test_kernel_ridge.py b/python/cuml/tests/test_kernel_ridge.py similarity index 100% rename from python/cuml/cuml/tests/test_kernel_ridge.py rename to python/cuml/tests/test_kernel_ridge.py diff --git a/python/cuml/cuml/tests/test_kmeans.py b/python/cuml/tests/test_kmeans.py similarity index 100% rename from python/cuml/cuml/tests/test_kmeans.py rename to python/cuml/tests/test_kmeans.py diff --git a/python/cuml/cuml/tests/test_kneighbors_classifier.py b/python/cuml/tests/test_kneighbors_classifier.py similarity index 100% rename from python/cuml/cuml/tests/test_kneighbors_classifier.py rename to python/cuml/tests/test_kneighbors_classifier.py diff --git a/python/cuml/cuml/tests/test_kneighbors_regressor.py b/python/cuml/tests/test_kneighbors_regressor.py similarity index 100% rename from python/cuml/cuml/tests/test_kneighbors_regressor.py rename to python/cuml/tests/test_kneighbors_regressor.py diff --git a/python/cuml/cuml/tests/test_label_binarizer.py b/python/cuml/tests/test_label_binarizer.py similarity index 100% rename from python/cuml/cuml/tests/test_label_binarizer.py rename to python/cuml/tests/test_label_binarizer.py diff --git a/python/cuml/cuml/tests/test_label_encoder.py b/python/cuml/tests/test_label_encoder.py similarity index 100% rename from python/cuml/cuml/tests/test_label_encoder.py rename to python/cuml/tests/test_label_encoder.py diff --git a/python/cuml/cuml/tests/test_lars.py b/python/cuml/tests/test_lars.py similarity index 100% rename from python/cuml/cuml/tests/test_lars.py rename to python/cuml/tests/test_lars.py diff --git a/python/cuml/cuml/tests/test_linear_model.py b/python/cuml/tests/test_linear_model.py similarity index 100% rename from python/cuml/cuml/tests/test_linear_model.py rename to python/cuml/tests/test_linear_model.py diff --git a/python/cuml/cuml/tests/test_linear_svm.py b/python/cuml/tests/test_linear_svm.py similarity index 100% rename from python/cuml/cuml/tests/test_linear_svm.py rename to python/cuml/tests/test_linear_svm.py diff --git a/python/cuml/cuml/tests/test_logger.py b/python/cuml/tests/test_logger.py similarity index 100% rename from python/cuml/cuml/tests/test_logger.py rename to python/cuml/tests/test_logger.py diff --git a/python/cuml/cuml/tests/test_make_arima.py b/python/cuml/tests/test_make_arima.py similarity index 100% rename from python/cuml/cuml/tests/test_make_arima.py rename to python/cuml/tests/test_make_arima.py diff --git a/python/cuml/cuml/tests/test_make_blobs.py b/python/cuml/tests/test_make_blobs.py similarity index 100% rename from python/cuml/cuml/tests/test_make_blobs.py rename to python/cuml/tests/test_make_blobs.py diff --git a/python/cuml/cuml/tests/test_make_classification.py b/python/cuml/tests/test_make_classification.py similarity index 100% rename from python/cuml/cuml/tests/test_make_classification.py rename to python/cuml/tests/test_make_classification.py diff --git a/python/cuml/cuml/tests/test_make_regression.py b/python/cuml/tests/test_make_regression.py similarity index 100% rename from python/cuml/cuml/tests/test_make_regression.py rename to python/cuml/tests/test_make_regression.py diff --git a/python/cuml/cuml/tests/test_mbsgd_classifier.py b/python/cuml/tests/test_mbsgd_classifier.py similarity index 100% rename from python/cuml/cuml/tests/test_mbsgd_classifier.py rename to python/cuml/tests/test_mbsgd_classifier.py diff --git a/python/cuml/cuml/tests/test_mbsgd_regressor.py b/python/cuml/tests/test_mbsgd_regressor.py similarity index 100% rename from python/cuml/cuml/tests/test_mbsgd_regressor.py rename to python/cuml/tests/test_mbsgd_regressor.py diff --git a/python/cuml/cuml/tests/test_meta_estimators.py b/python/cuml/tests/test_meta_estimators.py similarity index 100% rename from python/cuml/cuml/tests/test_meta_estimators.py rename to python/cuml/tests/test_meta_estimators.py diff --git a/python/cuml/cuml/tests/test_metrics.py b/python/cuml/tests/test_metrics.py similarity index 100% rename from python/cuml/cuml/tests/test_metrics.py rename to python/cuml/tests/test_metrics.py diff --git a/python/cuml/cuml/tests/test_module_config.py b/python/cuml/tests/test_module_config.py similarity index 100% rename from python/cuml/cuml/tests/test_module_config.py rename to python/cuml/tests/test_module_config.py diff --git a/python/cuml/cuml/tests/test_multiclass.py b/python/cuml/tests/test_multiclass.py similarity index 100% rename from python/cuml/cuml/tests/test_multiclass.py rename to python/cuml/tests/test_multiclass.py diff --git a/python/cuml/cuml/tests/test_naive_bayes.py b/python/cuml/tests/test_naive_bayes.py similarity index 100% rename from python/cuml/cuml/tests/test_naive_bayes.py rename to python/cuml/tests/test_naive_bayes.py diff --git a/python/cuml/cuml/tests/test_nearest_neighbors.py b/python/cuml/tests/test_nearest_neighbors.py similarity index 100% rename from python/cuml/cuml/tests/test_nearest_neighbors.py rename to python/cuml/tests/test_nearest_neighbors.py diff --git a/python/cuml/cuml/tests/test_one_hot_encoder.py b/python/cuml/tests/test_one_hot_encoder.py similarity index 100% rename from python/cuml/cuml/tests/test_one_hot_encoder.py rename to python/cuml/tests/test_one_hot_encoder.py diff --git a/python/cuml/cuml/tests/test_pca.py b/python/cuml/tests/test_pca.py similarity index 100% rename from python/cuml/cuml/tests/test_pca.py rename to python/cuml/tests/test_pca.py diff --git a/python/cuml/cuml/tests/test_pickle.py b/python/cuml/tests/test_pickle.py similarity index 100% rename from python/cuml/cuml/tests/test_pickle.py rename to python/cuml/tests/test_pickle.py diff --git a/python/cuml/cuml/tests/test_preprocessing.py b/python/cuml/tests/test_preprocessing.py similarity index 100% rename from python/cuml/cuml/tests/test_preprocessing.py rename to python/cuml/tests/test_preprocessing.py diff --git a/python/cuml/cuml/tests/test_prims.py b/python/cuml/tests/test_prims.py similarity index 100% rename from python/cuml/cuml/tests/test_prims.py rename to python/cuml/tests/test_prims.py diff --git a/python/cuml/cuml/tests/test_qn.py b/python/cuml/tests/test_qn.py similarity index 100% rename from python/cuml/cuml/tests/test_qn.py rename to python/cuml/tests/test_qn.py diff --git a/python/cuml/cuml/tests/test_random_forest.py b/python/cuml/tests/test_random_forest.py similarity index 100% rename from python/cuml/cuml/tests/test_random_forest.py rename to python/cuml/tests/test_random_forest.py diff --git a/python/cuml/cuml/tests/test_random_projection.py b/python/cuml/tests/test_random_projection.py similarity index 100% rename from python/cuml/cuml/tests/test_random_projection.py rename to python/cuml/tests/test_random_projection.py diff --git a/python/cuml/cuml/tests/test_serialize.py b/python/cuml/tests/test_serialize.py similarity index 100% rename from python/cuml/cuml/tests/test_serialize.py rename to python/cuml/tests/test_serialize.py diff --git a/python/cuml/cuml/tests/test_sgd.py b/python/cuml/tests/test_sgd.py similarity index 100% rename from python/cuml/cuml/tests/test_sgd.py rename to python/cuml/tests/test_sgd.py diff --git a/python/cuml/cuml/tests/test_simpl_set.py b/python/cuml/tests/test_simpl_set.py similarity index 100% rename from python/cuml/cuml/tests/test_simpl_set.py rename to python/cuml/tests/test_simpl_set.py diff --git a/python/cuml/cuml/tests/test_solver_attributes.py b/python/cuml/tests/test_solver_attributes.py similarity index 100% rename from python/cuml/cuml/tests/test_solver_attributes.py rename to python/cuml/tests/test_solver_attributes.py diff --git a/python/cuml/cuml/tests/test_sparsefuncs.py b/python/cuml/tests/test_sparsefuncs.py similarity index 100% rename from python/cuml/cuml/tests/test_sparsefuncs.py rename to python/cuml/tests/test_sparsefuncs.py diff --git a/python/cuml/cuml/tests/test_stationarity.py b/python/cuml/tests/test_stationarity.py similarity index 100% rename from python/cuml/cuml/tests/test_stationarity.py rename to python/cuml/tests/test_stationarity.py diff --git a/python/cuml/cuml/tests/test_stats.py b/python/cuml/tests/test_stats.py similarity index 100% rename from python/cuml/cuml/tests/test_stats.py rename to python/cuml/tests/test_stats.py diff --git a/python/cuml/cuml/tests/test_svm.py b/python/cuml/tests/test_svm.py similarity index 100% rename from python/cuml/cuml/tests/test_svm.py rename to python/cuml/tests/test_svm.py diff --git a/python/cuml/cuml/tests/test_target_encoder.py b/python/cuml/tests/test_target_encoder.py similarity index 100% rename from python/cuml/cuml/tests/test_target_encoder.py rename to python/cuml/tests/test_target_encoder.py diff --git a/python/cuml/cuml/tests/test_text_feature_extraction.py b/python/cuml/tests/test_text_feature_extraction.py similarity index 100% rename from python/cuml/cuml/tests/test_text_feature_extraction.py rename to python/cuml/tests/test_text_feature_extraction.py diff --git a/python/cuml/cuml/tests/test_tfidf.py b/python/cuml/tests/test_tfidf.py similarity index 100% rename from python/cuml/cuml/tests/test_tfidf.py rename to python/cuml/tests/test_tfidf.py diff --git a/python/cuml/cuml/tests/test_thirdparty.py b/python/cuml/tests/test_thirdparty.py similarity index 100% rename from python/cuml/cuml/tests/test_thirdparty.py rename to python/cuml/tests/test_thirdparty.py diff --git a/python/cuml/cuml/tests/test_train_test_split.py b/python/cuml/tests/test_train_test_split.py similarity index 100% rename from python/cuml/cuml/tests/test_train_test_split.py rename to python/cuml/tests/test_train_test_split.py diff --git a/python/cuml/cuml/tests/test_trustworthiness.py b/python/cuml/tests/test_trustworthiness.py similarity index 100% rename from python/cuml/cuml/tests/test_trustworthiness.py rename to python/cuml/tests/test_trustworthiness.py diff --git a/python/cuml/cuml/tests/test_tsne.py b/python/cuml/tests/test_tsne.py similarity index 100% rename from python/cuml/cuml/tests/test_tsne.py rename to python/cuml/tests/test_tsne.py diff --git a/python/cuml/cuml/tests/test_tsvd.py b/python/cuml/tests/test_tsvd.py similarity index 100% rename from python/cuml/cuml/tests/test_tsvd.py rename to python/cuml/tests/test_tsvd.py diff --git a/python/cuml/cuml/tests/test_umap.py b/python/cuml/tests/test_umap.py similarity index 100% rename from python/cuml/cuml/tests/test_umap.py rename to python/cuml/tests/test_umap.py diff --git a/python/cuml/cuml/tests/ts_datasets/README.md b/python/cuml/tests/ts_datasets/README.md similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/README.md rename to python/cuml/tests/ts_datasets/README.md diff --git a/python/cuml/cuml/tests/ts_datasets/alcohol.csv b/python/cuml/tests/ts_datasets/alcohol.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/alcohol.csv rename to python/cuml/tests/ts_datasets/alcohol.csv diff --git a/python/cuml/cuml/tests/ts_datasets/cattle.csv b/python/cuml/tests/ts_datasets/cattle.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/cattle.csv rename to python/cuml/tests/ts_datasets/cattle.csv diff --git a/python/cuml/cuml/tests/ts_datasets/deaths_by_region.csv b/python/cuml/tests/ts_datasets/deaths_by_region.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/deaths_by_region.csv rename to python/cuml/tests/ts_datasets/deaths_by_region.csv diff --git a/python/cuml/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv b/python/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv rename to python/cuml/tests/ts_datasets/endog_deaths_by_region_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv b/python/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv rename to python/cuml/tests/ts_datasets/endog_guest_nights_by_region_missing_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv b/python/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv rename to python/cuml/tests/ts_datasets/endog_hourly_earnings_by_industry_missing_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv b/python/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv rename to python/cuml/tests/ts_datasets/exog_deaths_by_region_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv b/python/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv rename to python/cuml/tests/ts_datasets/exog_guest_nights_by_region_missing_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv b/python/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv rename to python/cuml/tests/ts_datasets/exog_hourly_earnings_by_industry_missing_exog.csv diff --git a/python/cuml/cuml/tests/ts_datasets/guest_nights_by_region.csv b/python/cuml/tests/ts_datasets/guest_nights_by_region.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/guest_nights_by_region.csv rename to python/cuml/tests/ts_datasets/guest_nights_by_region.csv diff --git a/python/cuml/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv b/python/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv rename to python/cuml/tests/ts_datasets/guest_nights_by_region_missing.csv diff --git a/python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv b/python/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv rename to python/cuml/tests/ts_datasets/hourly_earnings_by_industry.csv diff --git a/python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv b/python/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv rename to python/cuml/tests/ts_datasets/hourly_earnings_by_industry_missing.csv diff --git a/python/cuml/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv b/python/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv rename to python/cuml/tests/ts_datasets/long_term_arrivals_by_citizenship.csv diff --git a/python/cuml/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv b/python/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv rename to python/cuml/tests/ts_datasets/net_migrations_auckland_by_age.csv diff --git a/python/cuml/cuml/tests/ts_datasets/passenger_movements.csv b/python/cuml/tests/ts_datasets/passenger_movements.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/passenger_movements.csv rename to python/cuml/tests/ts_datasets/passenger_movements.csv diff --git a/python/cuml/cuml/tests/ts_datasets/police_recorded_crime.csv b/python/cuml/tests/ts_datasets/police_recorded_crime.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/police_recorded_crime.csv rename to python/cuml/tests/ts_datasets/police_recorded_crime.csv diff --git a/python/cuml/cuml/tests/ts_datasets/population_estimate.csv b/python/cuml/tests/ts_datasets/population_estimate.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/population_estimate.csv rename to python/cuml/tests/ts_datasets/population_estimate.csv diff --git a/python/cuml/cuml/tests/ts_datasets/population_estimate_missing.csv b/python/cuml/tests/ts_datasets/population_estimate_missing.csv similarity index 100% rename from python/cuml/cuml/tests/ts_datasets/population_estimate_missing.csv rename to python/cuml/tests/ts_datasets/population_estimate_missing.csv diff --git a/python/cuml/cuml/thirdparty_adapters/__init__.py b/python/cuml/thirdparty_adapters/__init__.py similarity index 100% rename from python/cuml/cuml/thirdparty_adapters/__init__.py rename to python/cuml/thirdparty_adapters/__init__.py diff --git a/python/cuml/cuml/thirdparty_adapters/adapters.py b/python/cuml/thirdparty_adapters/adapters.py similarity index 100% rename from python/cuml/cuml/thirdparty_adapters/adapters.py rename to python/cuml/thirdparty_adapters/adapters.py diff --git a/python/cuml/cuml/thirdparty_adapters/sparsefuncs_fast.py b/python/cuml/thirdparty_adapters/sparsefuncs_fast.py similarity index 100% rename from python/cuml/cuml/thirdparty_adapters/sparsefuncs_fast.py rename to python/cuml/thirdparty_adapters/sparsefuncs_fast.py diff --git a/python/cuml/cuml/tsa/CMakeLists.txt b/python/cuml/tsa/CMakeLists.txt similarity index 100% rename from python/cuml/cuml/tsa/CMakeLists.txt rename to python/cuml/tsa/CMakeLists.txt diff --git a/python/cuml/cuml/tsa/__init__.py b/python/cuml/tsa/__init__.py similarity index 100% rename from python/cuml/cuml/tsa/__init__.py rename to python/cuml/tsa/__init__.py diff --git a/python/cuml/cuml/tsa/arima.pxd b/python/cuml/tsa/arima.pxd similarity index 100% rename from python/cuml/cuml/tsa/arima.pxd rename to python/cuml/tsa/arima.pxd diff --git a/python/cuml/cuml/tsa/arima.pyx b/python/cuml/tsa/arima.pyx similarity index 100% rename from python/cuml/cuml/tsa/arima.pyx rename to python/cuml/tsa/arima.pyx diff --git a/python/cuml/cuml/tsa/auto_arima.pyx b/python/cuml/tsa/auto_arima.pyx similarity index 100% rename from python/cuml/cuml/tsa/auto_arima.pyx rename to python/cuml/tsa/auto_arima.pyx diff --git a/python/cuml/cuml/tsa/batched_lbfgs.py b/python/cuml/tsa/batched_lbfgs.py similarity index 100% rename from python/cuml/cuml/tsa/batched_lbfgs.py rename to python/cuml/tsa/batched_lbfgs.py diff --git a/python/cuml/cuml/tsa/holtwinters.pyx b/python/cuml/tsa/holtwinters.pyx similarity index 100% rename from python/cuml/cuml/tsa/holtwinters.pyx rename to python/cuml/tsa/holtwinters.pyx diff --git a/python/cuml/cuml/tsa/seasonality.pyx b/python/cuml/tsa/seasonality.pyx similarity index 100% rename from python/cuml/cuml/tsa/seasonality.pyx rename to python/cuml/tsa/seasonality.pyx diff --git a/python/cuml/cuml/tsa/stationarity.pyx b/python/cuml/tsa/stationarity.pyx similarity index 100% rename from python/cuml/cuml/tsa/stationarity.pyx rename to python/cuml/tsa/stationarity.pyx diff --git a/python/cuml/pyproject.toml b/python/pyproject.toml similarity index 100% rename from python/cuml/pyproject.toml rename to python/pyproject.toml diff --git a/python/cuml/pytest.ini b/python/pytest.ini similarity index 100% rename from python/cuml/pytest.ini rename to python/pytest.ini diff --git a/python/cuml/setup.cfg b/python/setup.cfg similarity index 100% rename from python/cuml/setup.cfg rename to python/setup.cfg diff --git a/python/cuml/setup.py b/python/setup.py similarity index 100% rename from python/cuml/setup.py rename to python/setup.py diff --git a/python/cuml/setuputils.py b/python/setuputils.py similarity index 100% rename from python/cuml/setuputils.py rename to python/setuputils.py diff --git a/python/cuml/versioneer.py b/python/versioneer.py similarity index 100% rename from python/cuml/versioneer.py rename to python/versioneer.py From 1a73eb9a3d231825fb69d4549391c162005e78c2 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 16:36:49 -0500 Subject: [PATCH 05/37] FIX CMake fixes --- python/CMakeLists.txt | 2 +- python/cuml/common/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 7415d9d938..47ad50f63e 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -44,7 +44,7 @@ set(CUML_CPP_TARGET "cuml++") ################################################################################ # - Process User Options ------------------------------------------------------ rapids_cpm_init() -include(../../cpp/cmake/thirdparty/get_treelite.cmake) +include(../cpp/cmake/thirdparty/get_treelite.cmake) # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index 852d3c2482..27ccc75c79 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -45,4 +45,4 @@ foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() -target_include_directories(pointer_utils PRIVATE "../../../../cpp/src/") +target_include_directories(pointer_utils PRIVATE "../../../cpp/src/") From 5c7429665d872784af6108d959fa09d39716d805 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 17:07:37 -0500 Subject: [PATCH 06/37] FIX Use find_raft --- python/CMakeLists.txt | 67 ++++++----------- python/setup.py | 164 +----------------------------------------- 2 files changed, 22 insertions(+), 209 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 47ad50f63e..874ef1af0a 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -21,11 +21,11 @@ include(rapids-cmake) include(rapids-cpm) include(rapids-find) -set(cuml_version 22.08.00) +set(CUML_VERSION 22.08.00) project( cuml-python - VERSION ${cuml_version} + VERSION ${CUML_VERSION} LANGUAGES # TODO: Building Python extension modules via the python_extension_module requires the C # language to be enabled here. The test project that is built in scikit-build to verify # various linking options for the python library is hardcoded to build with C, so until @@ -43,11 +43,11 @@ set(CUML_CPP_TARGET "cuml++") ################################################################################ # - Process User Options ------------------------------------------------------ -rapids_cpm_init() -include(../cpp/cmake/thirdparty/get_treelite.cmake) + # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) + rapids_cpm_init() include(rapids-cuda) rapids_cuda_init_architectures(CUML) enable_language(CUDA) @@ -57,48 +57,23 @@ if(FIND_CUML_CPP) # rapids_cuda_init_architectures relies on `project` including. include("${CMAKE_PROJECT_cuml-python_INCLUDE}") -set(RAFT_VERSION "22.08") -set(RAFT_FORK "rapidsai") -set(RAFT_PINNED_TAG "branch-${RAFT_VERSION}") - -function(find_and_configure_raft) - set(oneValueArgs VERSION FORK PINNED_TAG COMPILE_LIBRARIES) - cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" - "${multiValueArgs}" ${ARGN} ) - - #----------------------------------------------------- - # Invoke CPM find_package() - #----------------------------------------------------- - - string(APPEND RAFT_COMPONENTS "distance") - string(APPEND RAFT_COMPONENTS " nn") - - rapids_cpm_find(raft ${PKG_VERSION} - GLOBAL_TARGETS raft::raft - BUILD_EXPORT_SET projname-exports - INSTALL_EXPORT_SET projname-exports - CPM_ARGS - GIT_REPOSITORY https://github.com/${PKG_FORK}/raft.git - GIT_TAG ${PKG_PINNED_TAG} - SOURCE_SUBDIR cpp - FIND_PACKAGE_ARGUMENTS "COMPONENTS ${RAFT_COMPONENTS}" - OPTIONS - "BUILD_TESTS OFF" - "BUILD_BENCH OFF" - "RAFT_COMPILE_LIBRARIES ${PKG_COMPILE_LIBRARIES}" - ) - -endfunction() - -# Change pinned tag here to test a commit in CI -# To use a different RAFT locally, set the CMake variable -# CPM_raft_SOURCE=/path/to/local/raft -find_and_configure_raft(VERSION ${RAFT_VERSION}.00 - FORK ${RAFT_FORK} - PINNED_TAG ${RAFT_PINNED_TAG} - COMPILE_LIBRARIES NO -) -find_package(cuml ${cuml_version} REQUIRED) + include(../cpp/cmake/thirdparty/get_treelite.cmake) + rapids_cpm_init() + include(rapids-cuda) + rapids_cuda_init_architectures(CUML) + enable_language(CUDA) + + include("${CMAKE_PROJECT_cuml-python_INCLUDE}") + include(../cpp/cmake/thirdparty/get_treelite.cmake) + + set(CUML_VERSION_MAJOR "22") + set(CUML_VERSION_MINOR "08") + set(CUML_USE_RAFT_NN ON) + set(CUML_USE_RAFT_DIST ON) + + include(../cpp/cmake/thirdparty/get_raft.cmake) + + find_package(cuml ${CUML_VERSION} REQUIRED) else() set(cuml_FOUND OFF) endif() diff --git a/python/setup.py b/python/setup.py index f80c3ccbf8..c84f092fac 100644 --- a/python/setup.py +++ b/python/setup.py @@ -14,23 +14,12 @@ # limitations under the License. # -# import glob import os import shutil import sys -# import sysconfig -# import warnings -# from pprint import pprint from pathlib import Path -# from setuptools import find_packages -# from setuptools import setup from setuptools import find_packages -# from setuptools.extension import Extension -# from distutils.sysconfig import get_python_lib -# from distutils.command.build import build as _build - -# import numpy from setuputils import clean_folder from setuputils import get_environment_option @@ -38,7 +27,6 @@ from setuputils import get_cuda_version_from_header import versioneer -# from cython_build_ext import cython_build_ext from skbuild import setup from skbuild.command.build_ext import build_ext @@ -113,157 +101,6 @@ if not libcuml_path: libcuml_path = '../cpp/build/' -############################################################################## -# - Cython extensions build and parameters ----------------------------------- -# -# We create custom build steps for both `build` and `build_ext` for several -# reasons: -# 1) Custom `build_ext` is needed to set `cython_build_ext.cython_exclude` when -# `--singlegpu=True` -# 2) Custom `build` is needed to exclude pacakges and directories when -# `--singlegpu=True` -# 3) These cannot be combined because `build` is used by both `build_ext` and -# `install` commands and it would be difficult to set -# `cython_build_ext.cython_exclude` from `cuml_build` since the property -# exists on a different command. -# -# Using custom commands also allows combining commands at the command line. For -# example, the following will all work as expected: -# `python setup.py clean --all build --singlegpu build_ext --inplace` -# `python setup.py clean --all build --singlegpu install --record=record.txt` -# `python setup.py build_ext --debug --singlegpu` - - -# class cuml_build(_build): - -# def initialize_options(self): - -# self.singlegpu = False -# super().initialize_options() - -# def finalize_options(self): - -# # distutils plain build command override cannot be done just setting -# # user_options and boolean options like build_ext below. Distribution -# # object has all the args used by the user, we can check that. -# self.singlegpu = '--singlegpu' in self.distribution.script_args - -# libs = ['cuml++', 'cudart', 'cusparse', 'cusolver'] - -# include_dirs = [ -# '../cpp/src', -# '../cpp/include', -# '../cpp/src_prims', -# cuda_include_dir, -# numpy.get_include(), -# '../cpp/build/faiss/src/faiss', -# os.path.dirname(sysconfig.get_path("include")) -# ] - -# python_exc_list = [] - -# if (self.singlegpu): -# python_exc_list = ["*.dask", "*.dask.*"] -# else: -# libs.append('cumlprims_mg') -# libs.append('nccl') - -# sys_include = os.path.dirname(sysconfig.get_path("include")) -# include_dirs.append("%s/cumlprims" % sys_include) - -# # Find packages now that --singlegpu has been determined -# self.distribution.packages = find_packages(include=['cuml', 'cuml.*'], -# exclude=python_exc_list) - -# # Build the extensions list -# extensions = [ -# Extension("*", -# sources=["cuml/**/*.pyx"], -# include_dirs=include_dirs, -# library_dirs=[ -# get_python_lib(), -# libcuml_path, -# cuda_lib_dir, -# os.path.join(os.sys.prefix, "lib") -# ], -# libraries=libs, -# language='c++', -# extra_compile_args=['-std=c++17']) -# ] - -# self.distribution.ext_modules = extensions - -# super().finalize_options() - - -# This custom build_ext is only responsible for setting cython_exclude when -# --singlegpu is specified -# class cuml_build_ext(cython_build_ext, object): -# user_options = [ -# ("singlegpu", None, "Specifies whether to include multi-gpu or not"), -# ] + cython_build_ext.user_options - -# boolean_options = ["singlegpu"] + cython_build_ext.boolean_options - -# def build_extensions(self): -# def remove_flags(compiler, *flags): -# for flag in flags: -# try: -# compiler.compiler_so = list( -# filter((flag).__ne__, compiler.compiler_so) -# ) -# except Exception: -# pass -# # Full optimization -# self.compiler.compiler_so.append("-O3") - -# # Ignore deprecation declaraction warnings -# self.compiler.compiler_so.append("-Wno-deprecated-declarations") - -# # adding flags to always add symbols/link of libcuml++ and transitive -# # dependencies to Cython extensions -# self.compiler.linker_so.append("-Wl,--no-as-needed") - -# # No debug symbols, full optimization, no '-Wstrict-prototypes' warning -# remove_flags( -# self.compiler, "-g", "-G", "-O1", "-O2", "-Wstrict-prototypes" -# ) -# cython_build_ext.build_extensions(self) - -# def initialize_options(self): - -# self.singlegpu = None - -# super().initialize_options() - -# def finalize_options(self): - -# # Ensure the base build class options get set so we can use singlegpu -# self.set_undefined_options( -# 'build', -# ('singlegpu', 'singlegpu'), -# ) - -# # Exclude multigpu components that use libcumlprims if -# # --singlegpu is used -# if (self.singlegpu): -# cython_exc_list = glob.glob('cuml/*/*_mg.pyx') -# cython_exc_list = cython_exc_list + glob.glob('cuml/*/*_mg.pxd') - -# print('--singlegpu: excluding the following Cython components:') -# pprint(cython_exc_list) - -# # Append to base excludes -# self.cython_exclude = cython_exc_list + \ -# (self.cython_exclude or []) - -# super().finalize_options() - - -# Specify the custom build class -# cmdclass = dict() -# cmdclass.update(versioneer.get_cmdclass()) -# cmdclass["build"] = cuml_build cmdclass = versioneer.get_cmdclass() cmdclass["build_ext"] = build_ext @@ -280,6 +117,7 @@ "Programming Language :: Python :: 3.9" ], author="NVIDIA Corporation", + url="https://github.com/rapidsai/cudf", setup_requires=['Cython>=0.29,<0.30'], packages=find_packages(include=['cuml', 'cuml.*']), install_requires=install_requires, From 390c547598e9d8338789094250d9dd80e9524ba7 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 18:50:42 -0500 Subject: [PATCH 07/37] FIX Small pytests fixes --- python/pytest.ini | 9 ++++++++- python/setup.cfg | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/python/pytest.ini b/python/pytest.ini index b6b48b8ce0..f69a613925 100644 --- a/python/pytest.ini +++ b/python/pytest.ini @@ -7,9 +7,16 @@ markers = memleak: Test that checks for memory leaks no_bad_cuml_array_check: Test that should not check for bad CumlArray uses -testpaths = cuml/tests +testpaths = + cuml/tests + cuml/tests/dask + cuml/tests/explainer + cuml/tests/stemmer_tests filterwarnings = error::FutureWarning:cuml[.*] # Catch uses of deprecated positional args in testing ignore:[^.]*ABCs[^.]*:DeprecationWarning:patsy[.*] ignore:(.*)alias(.*):DeprecationWarning:hdbscan[.*] + +pythonpath = . + diff --git a/python/setup.cfg b/python/setup.cfg index 4c4f2803bb..8b65c3682e 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -37,3 +37,19 @@ versionfile_source = cuml/_version.py versionfile_build = cuml/_version.py tag_prefix = v parentdir_prefix = cuml- + +[pytest] +markers = + unit: Quickest tests focused on accuracy and correctness + quality: More intense tests than unit with increased runtimes + stress: Longest running tests focused on stressing hardware compute resources + mg: Multi-GPU tests + memleak: Test that checks for memory leaks + no_bad_cuml_array_check: Test that should not check for bad CumlArray uses + +testpaths = cuml/tests + +filterwarnings = + error::FutureWarning:cuml[.*] # Catch uses of deprecated positional args in testing + ignore:[^.]*ABCs[^.]*:DeprecationWarning:patsy[.*] + ignore:(.*)alias(.*):DeprecationWarning:hdbscan[.*] From 2a686e36ced33598335c7631a3042532390109cf Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 18:54:53 -0500 Subject: [PATCH 08/37] DBG Rename dask tests to accomodate for pytest --- python/cuml/tests/dask/{test_base.py => test_dask_base.py} | 0 ...test_coordinate_descent.py => test_dask_coordinate_descent.py} | 0 .../cuml/tests/dask/{test_datasets.py => test_dask_datasets.py} | 0 python/cuml/tests/dask/{test_dbscan.py => test_dask_dbscan.py} | 0 python/cuml/tests/dask/{test_doctest.py => test_dask_doctest.py} | 0 python/cuml/tests/dask/{test_func.py => test_dask_func.py} | 0 .../{test_global_settings.py => test_dask_global_settings.py} | 0 .../tests/dask/{test_input_utils.py => test_dask_input_utils.py} | 0 python/cuml/tests/dask/{test_kmeans.py => test_dask_kmeans.py} | 0 ...neighbors_classifier.py => test_dask_kneighbors_classifier.py} | 0 ..._kneighbors_regressor.py => test_dask_kneighbors_regressor.py} | 0 .../{test_label_binarizer.py => test_dask_label_binarizer.py} | 0 .../dask/{test_label_encoder.py => test_dask_label_encoder.py} | 0 .../{test_linear_regression.py => test_dask_linear_regression.py} | 0 ...st_logistic_regression.py => test_dask_logistic_regression.py} | 0 python/cuml/tests/dask/{test_metrics.py => test_dask_metrics.py} | 0 .../tests/dask/{test_naive_bayes.py => test_dask_naive_bayes.py} | 0 .../{test_nearest_neighbors.py => test_dask_nearest_neighbors.py} | 0 .../{test_one_hot_encoder.py => test_dask_one_hot_encoder.py} | 0 python/cuml/tests/dask/{test_pca.py => test_dask_pca.py} | 0 .../dask/{test_random_forest.py => test_dask_random_forest.py} | 0 .../{test_ridge_regression.py => test_dask_ridge_regression.py} | 0 .../dask/{test_serialization.py => test_dask_serialization.py} | 0 python/cuml/tests/dask/{test_tfidf.py => test_dask_tfidf.py} | 0 python/cuml/tests/dask/{test_tsvd.py => test_dask_tsvd.py} | 0 python/cuml/tests/dask/{test_umap.py => test_dask_umap.py} | 0 26 files changed, 0 insertions(+), 0 deletions(-) rename python/cuml/tests/dask/{test_base.py => test_dask_base.py} (100%) rename python/cuml/tests/dask/{test_coordinate_descent.py => test_dask_coordinate_descent.py} (100%) rename python/cuml/tests/dask/{test_datasets.py => test_dask_datasets.py} (100%) rename python/cuml/tests/dask/{test_dbscan.py => test_dask_dbscan.py} (100%) rename python/cuml/tests/dask/{test_doctest.py => test_dask_doctest.py} (100%) rename python/cuml/tests/dask/{test_func.py => test_dask_func.py} (100%) rename python/cuml/tests/dask/{test_global_settings.py => test_dask_global_settings.py} (100%) rename python/cuml/tests/dask/{test_input_utils.py => test_dask_input_utils.py} (100%) rename python/cuml/tests/dask/{test_kmeans.py => test_dask_kmeans.py} (100%) rename python/cuml/tests/dask/{test_kneighbors_classifier.py => test_dask_kneighbors_classifier.py} (100%) rename python/cuml/tests/dask/{test_kneighbors_regressor.py => test_dask_kneighbors_regressor.py} (100%) rename python/cuml/tests/dask/{test_label_binarizer.py => test_dask_label_binarizer.py} (100%) rename python/cuml/tests/dask/{test_label_encoder.py => test_dask_label_encoder.py} (100%) rename python/cuml/tests/dask/{test_linear_regression.py => test_dask_linear_regression.py} (100%) rename python/cuml/tests/dask/{test_logistic_regression.py => test_dask_logistic_regression.py} (100%) rename python/cuml/tests/dask/{test_metrics.py => test_dask_metrics.py} (100%) rename python/cuml/tests/dask/{test_naive_bayes.py => test_dask_naive_bayes.py} (100%) rename python/cuml/tests/dask/{test_nearest_neighbors.py => test_dask_nearest_neighbors.py} (100%) rename python/cuml/tests/dask/{test_one_hot_encoder.py => test_dask_one_hot_encoder.py} (100%) rename python/cuml/tests/dask/{test_pca.py => test_dask_pca.py} (100%) rename python/cuml/tests/dask/{test_random_forest.py => test_dask_random_forest.py} (100%) rename python/cuml/tests/dask/{test_ridge_regression.py => test_dask_ridge_regression.py} (100%) rename python/cuml/tests/dask/{test_serialization.py => test_dask_serialization.py} (100%) rename python/cuml/tests/dask/{test_tfidf.py => test_dask_tfidf.py} (100%) rename python/cuml/tests/dask/{test_tsvd.py => test_dask_tsvd.py} (100%) rename python/cuml/tests/dask/{test_umap.py => test_dask_umap.py} (100%) diff --git a/python/cuml/tests/dask/test_base.py b/python/cuml/tests/dask/test_dask_base.py similarity index 100% rename from python/cuml/tests/dask/test_base.py rename to python/cuml/tests/dask/test_dask_base.py diff --git a/python/cuml/tests/dask/test_coordinate_descent.py b/python/cuml/tests/dask/test_dask_coordinate_descent.py similarity index 100% rename from python/cuml/tests/dask/test_coordinate_descent.py rename to python/cuml/tests/dask/test_dask_coordinate_descent.py diff --git a/python/cuml/tests/dask/test_datasets.py b/python/cuml/tests/dask/test_dask_datasets.py similarity index 100% rename from python/cuml/tests/dask/test_datasets.py rename to python/cuml/tests/dask/test_dask_datasets.py diff --git a/python/cuml/tests/dask/test_dbscan.py b/python/cuml/tests/dask/test_dask_dbscan.py similarity index 100% rename from python/cuml/tests/dask/test_dbscan.py rename to python/cuml/tests/dask/test_dask_dbscan.py diff --git a/python/cuml/tests/dask/test_doctest.py b/python/cuml/tests/dask/test_dask_doctest.py similarity index 100% rename from python/cuml/tests/dask/test_doctest.py rename to python/cuml/tests/dask/test_dask_doctest.py diff --git a/python/cuml/tests/dask/test_func.py b/python/cuml/tests/dask/test_dask_func.py similarity index 100% rename from python/cuml/tests/dask/test_func.py rename to python/cuml/tests/dask/test_dask_func.py diff --git a/python/cuml/tests/dask/test_global_settings.py b/python/cuml/tests/dask/test_dask_global_settings.py similarity index 100% rename from python/cuml/tests/dask/test_global_settings.py rename to python/cuml/tests/dask/test_dask_global_settings.py diff --git a/python/cuml/tests/dask/test_input_utils.py b/python/cuml/tests/dask/test_dask_input_utils.py similarity index 100% rename from python/cuml/tests/dask/test_input_utils.py rename to python/cuml/tests/dask/test_dask_input_utils.py diff --git a/python/cuml/tests/dask/test_kmeans.py b/python/cuml/tests/dask/test_dask_kmeans.py similarity index 100% rename from python/cuml/tests/dask/test_kmeans.py rename to python/cuml/tests/dask/test_dask_kmeans.py diff --git a/python/cuml/tests/dask/test_kneighbors_classifier.py b/python/cuml/tests/dask/test_dask_kneighbors_classifier.py similarity index 100% rename from python/cuml/tests/dask/test_kneighbors_classifier.py rename to python/cuml/tests/dask/test_dask_kneighbors_classifier.py diff --git a/python/cuml/tests/dask/test_kneighbors_regressor.py b/python/cuml/tests/dask/test_dask_kneighbors_regressor.py similarity index 100% rename from python/cuml/tests/dask/test_kneighbors_regressor.py rename to python/cuml/tests/dask/test_dask_kneighbors_regressor.py diff --git a/python/cuml/tests/dask/test_label_binarizer.py b/python/cuml/tests/dask/test_dask_label_binarizer.py similarity index 100% rename from python/cuml/tests/dask/test_label_binarizer.py rename to python/cuml/tests/dask/test_dask_label_binarizer.py diff --git a/python/cuml/tests/dask/test_label_encoder.py b/python/cuml/tests/dask/test_dask_label_encoder.py similarity index 100% rename from python/cuml/tests/dask/test_label_encoder.py rename to python/cuml/tests/dask/test_dask_label_encoder.py diff --git a/python/cuml/tests/dask/test_linear_regression.py b/python/cuml/tests/dask/test_dask_linear_regression.py similarity index 100% rename from python/cuml/tests/dask/test_linear_regression.py rename to python/cuml/tests/dask/test_dask_linear_regression.py diff --git a/python/cuml/tests/dask/test_logistic_regression.py b/python/cuml/tests/dask/test_dask_logistic_regression.py similarity index 100% rename from python/cuml/tests/dask/test_logistic_regression.py rename to python/cuml/tests/dask/test_dask_logistic_regression.py diff --git a/python/cuml/tests/dask/test_metrics.py b/python/cuml/tests/dask/test_dask_metrics.py similarity index 100% rename from python/cuml/tests/dask/test_metrics.py rename to python/cuml/tests/dask/test_dask_metrics.py diff --git a/python/cuml/tests/dask/test_naive_bayes.py b/python/cuml/tests/dask/test_dask_naive_bayes.py similarity index 100% rename from python/cuml/tests/dask/test_naive_bayes.py rename to python/cuml/tests/dask/test_dask_naive_bayes.py diff --git a/python/cuml/tests/dask/test_nearest_neighbors.py b/python/cuml/tests/dask/test_dask_nearest_neighbors.py similarity index 100% rename from python/cuml/tests/dask/test_nearest_neighbors.py rename to python/cuml/tests/dask/test_dask_nearest_neighbors.py diff --git a/python/cuml/tests/dask/test_one_hot_encoder.py b/python/cuml/tests/dask/test_dask_one_hot_encoder.py similarity index 100% rename from python/cuml/tests/dask/test_one_hot_encoder.py rename to python/cuml/tests/dask/test_dask_one_hot_encoder.py diff --git a/python/cuml/tests/dask/test_pca.py b/python/cuml/tests/dask/test_dask_pca.py similarity index 100% rename from python/cuml/tests/dask/test_pca.py rename to python/cuml/tests/dask/test_dask_pca.py diff --git a/python/cuml/tests/dask/test_random_forest.py b/python/cuml/tests/dask/test_dask_random_forest.py similarity index 100% rename from python/cuml/tests/dask/test_random_forest.py rename to python/cuml/tests/dask/test_dask_random_forest.py diff --git a/python/cuml/tests/dask/test_ridge_regression.py b/python/cuml/tests/dask/test_dask_ridge_regression.py similarity index 100% rename from python/cuml/tests/dask/test_ridge_regression.py rename to python/cuml/tests/dask/test_dask_ridge_regression.py diff --git a/python/cuml/tests/dask/test_serialization.py b/python/cuml/tests/dask/test_dask_serialization.py similarity index 100% rename from python/cuml/tests/dask/test_serialization.py rename to python/cuml/tests/dask/test_dask_serialization.py diff --git a/python/cuml/tests/dask/test_tfidf.py b/python/cuml/tests/dask/test_dask_tfidf.py similarity index 100% rename from python/cuml/tests/dask/test_tfidf.py rename to python/cuml/tests/dask/test_dask_tfidf.py diff --git a/python/cuml/tests/dask/test_tsvd.py b/python/cuml/tests/dask/test_dask_tsvd.py similarity index 100% rename from python/cuml/tests/dask/test_tsvd.py rename to python/cuml/tests/dask/test_dask_tsvd.py diff --git a/python/cuml/tests/dask/test_umap.py b/python/cuml/tests/dask/test_dask_umap.py similarity index 100% rename from python/cuml/tests/dask/test_umap.py rename to python/cuml/tests/dask/test_dask_umap.py From e700dcfe418be74e5b15a83e566a4aea99725e2d Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 19:19:31 -0500 Subject: [PATCH 09/37] FEA Add singlegpu option to cmake files --- python/CMakeLists.txt | 2 ++ python/cuml/cluster/CMakeLists.txt | 19 ++++++++++++++----- python/cuml/decomposition/CMakeLists.txt | 19 ++++++++++++++----- python/cuml/linear_model/CMakeLists.txt | 22 +++++++++++++++------- python/cuml/neighbors/CMakeLists.txt | 23 +++++++++++++++++------ python/cuml/solvers/CMakeLists.txt | 15 +++++++++++++-- python/setup.py | 2 ++ 7 files changed, 77 insertions(+), 25 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 874ef1af0a..1247503e05 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -36,8 +36,10 @@ project( ################################################################################ # - User Options -------------------------------------------------------------- option(FIND_CUML_CPP "Search for existing CUML C++ installations before defaulting to local files" OFF) +option(SINGLEGPU "Disable all mnmg components and comms libraries" OFF) message(VERBOSE "CUML_PY: Searching for existing CUML C++ installations before defaulting to local files: ${FIND_CUML_CPP}") +message(VERBOSE "CUML_PY: Disabling all mnmg components and comms libraries: ${SINGLEGPU}") set(CUML_CPP_TARGET "cuml++") diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index f20ebffc4e..bc0438a6a7 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -17,12 +17,17 @@ set(cython_sources agglomerative.pyx dbscan.pyx - dbscan_mg.pyx hdbscan.pyx kmeans.pyx - kmeans_mg.pyx ) +if(NOT SINGLEGPU) + list(APPEND cython_sources + dbscan_mg.pyx + kmeans_mg.pyx + ) +endif() + set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX @@ -37,10 +42,14 @@ find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy agglomerative dbscan - dbscan_mg hdbscan - kmeans - kmeans_mg) + kmeans) +if(NOT SINGLEGPU) + list(APPEND targets_using_numpy + dbscan_mg + kmeans_mg + ) +endif() foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt index 18db2f0ae0..93e8e76486 100644 --- a/python/cuml/decomposition/CMakeLists.txt +++ b/python/cuml/decomposition/CMakeLists.txt @@ -15,13 +15,18 @@ # todo: disable _mg for singlegpu set(cython_sources - base_mg.pyx pca.pyx - pca_mg.pyx tsvd.pyx - tsvd_mg.pyx ) +if(NOT SINGLEGPU) + list(APPEND cython_sources + base_mg.pyx + pca_mg.pyx + tsvd_mg.pyx + ) +endif() + set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX @@ -35,10 +40,14 @@ rapids_cython_create_modules( find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy pca - pca_mg tsvd - tsvd_mg ) +if(NOT SINGLEGPU) + list(APPEND targets_using_numpy + pca_mg + tsvd_mg + ) +endif() foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index 87b9fd33a4..eac4311adb 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -13,20 +13,24 @@ # ============================================================================= -# todo: disable _mg for singlegpu set(cython_sources base.pyx - base_mg.pyx elastic_net.pyx linear_regression.pyx - linear_regression_mg.pyx logistic_regression.pyx mbsgd_classifier.pyx mbsgd_regressor.pyx ridge.pyx - ridge_mg.pyx ) +if(NOT SINGLEGPU) + list(APPEND cython_sources + base_mg.pys + linear_regression_mg.pyx + ridge_mg.pyx + ) +endif() + set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX @@ -40,16 +44,20 @@ rapids_cython_create_modules( find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy linear_base - linear_base_mg linear_elastic_net linear_linear_regression - linear_linear_regression_mg linear_logistic_regression linear_mbsgd_classifier linear_mbsgd_regressor linear_ridge - linear_ridge_mg ) +if(NOT SINGLEGPU) + list(APPEND targets_using_numpy + linear_base_mg + linear_linear_regression_mg + linear_ridge_mg + ) +endif() foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt index 4fb9562aaf..6fd9d81663 100644 --- a/python/cuml/neighbors/CMakeLists.txt +++ b/python/cuml/neighbors/CMakeLists.txt @@ -17,13 +17,19 @@ set(cython_sources ann.pyx kneighbors_classifier.pyx - kneighbors_classifier_mg.pyx kneighbors_regressor.pyx - kneighbors_regressor_mg.pyx nearest_neighbors.pyx - nearest_neighbors_mg.pyx ) +if(NOT SINGLEGPU) + list(APPEND cython_sources + kneighbors_classifier_mg.pyx + kneighbors_regressor_mg.pyx + nearest_neighbors_mg.pyx + ) +endif() + + set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX @@ -38,12 +44,17 @@ find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy ann kneighbors_classifier - kneighbors_classifier_mg kneighbors_regressor - kneighbors_regressor_mg nearest_neighbors - nearest_neighbors_mg ) +if(NOT SINGLEGPU) + list(APPEND targets_using_numpy + kneighbors_classifier_mg + kneighbors_regressor_mg + nearest_neighbors_mg + ) +endif() + foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt index 446840e6b1..3edf5b2d7d 100644 --- a/python/cuml/solvers/CMakeLists.txt +++ b/python/cuml/solvers/CMakeLists.txt @@ -16,11 +16,16 @@ # todo: disable _mg for singlegpu set(cython_sources cd.pyx - cd_mg.pyx qn.pyx sgd.pyx ) +if(NOT SINGLEGPU) + list(APPEND cython_sources + cd_mg.pyx + ) +endif() + set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX @@ -34,10 +39,16 @@ rapids_cython_create_modules( find_package(Python REQUIRED COMPONENTS Development NumPy) set(targets_using_numpy cd - cd_mg qn sgd ) + +if(NOT SINGLEGPU) + list(APPEND targets_using_numpy + cd_mg + ) +endif() + foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/setup.py b/python/setup.py index c84f092fac..6b70e53c9f 100644 --- a/python/setup.py +++ b/python/setup.py @@ -83,6 +83,8 @@ clean_folder(setup_file_path + '/cuml') shutil.rmtree(setup_file_path + '/build') + shutil.rmtree(setup_file_path + '/_skbuild') + shutil.rmtree(setup_file_path + '/dist') except IOError: pass From 80012059ce2e84c2b31a7d8fc04f62beb0e81e3e Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 21:44:39 -0500 Subject: [PATCH 10/37] FEA Initial build.sh update --- build.sh | 11 +- python/setup.py | 17 +-- python/setuputils.py | 240 ------------------------------------------- 3 files changed, 12 insertions(+), 256 deletions(-) diff --git a/build.sh b/build.sh index 9cd3e358b7..6037f984e2 100755 --- a/build.sh +++ b/build.sh @@ -229,7 +229,6 @@ if (( ${CLEAN} == 1 )); then cd ${REPODIR} fi -# Before ################################################################################ # Configure for building all C++ targets @@ -283,11 +282,17 @@ fi # Build and (optionally) install the cuml Python package if completeBuild || hasArg cuml || hasArg pydocs; then + # Append `-DFIND_CUML_CPP=ON` to CUML_EXTRA_CMAKE_ARGS unless a user specified the option. + if [[ "${CUML_EXTRA_CMAKE_ARGS}" != *"DFIND_CUML_CPP"* ]]; then + CUML_EXTRA_CMAKE_ARGS="${CUML_EXTRA_CMAKE_ARGS} -DFIND_CUML_CPP=ON" + fi + cd ${REPODIR}/python if [[ ${INSTALL_TARGET} != "" ]]; then - python setup.py build_ext -j${PARALLEL_LEVEL:-1} ${CUML_EXTRA_PYTHON_ARGS} --library-dir=${LIBCUML_BUILD_DIR} install --single-version-externally-managed --record=record.txt + # python setup.py build_ext -j${PARALLEL_LEVEL:-1} ${CUML_EXTRA_PYTHON_ARGS} --library-dir=${LIBCUML_BUILD_DIR} install --single-version-externally-managed --record=record.txt + python setup.py build_ext -v --inplace -- ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} install else - python setup.py build_ext -j${PARALLEL_LEVEL:-1} ${CUML_EXTRA_PYTHON_ARGS} --library-dir=${LIBCUML_BUILD_DIR} + python setup.py build_ext -v --inplace -- ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} fi if hasArg pydocs; then diff --git a/python/setup.py b/python/setup.py index 6b70e53c9f..9c295a724e 100644 --- a/python/setup.py +++ b/python/setup.py @@ -30,12 +30,7 @@ from skbuild import setup from skbuild.command.build_ext import build_ext -# FIXME: List correct deps -install_requires = [ - "cuda-python>=11.5,<11.7.1", - "numba>=0.53.1", - "numpy", -] +install_requires = ['numba', 'cython'] ############################################################################## # - Print of build options used by setup.py -------------------------------- @@ -59,10 +54,6 @@ cuda_include_dir = os.path.join(cuda_home, "include") cuda_lib_dir = os.path.join(cuda_home, "lib64") -install_requires.append( - "cupy-cuda" + get_cuda_version_from_header(cuda_include_dir) -) - ############################################################################## # - Clean target ------------------------------------------------------------- @@ -82,9 +73,9 @@ shutil.rmtree(setup_file_path + '/__pycache__', ignore_errors=True) clean_folder(setup_file_path + '/cuml') - shutil.rmtree(setup_file_path + '/build') - shutil.rmtree(setup_file_path + '/_skbuild') - shutil.rmtree(setup_file_path + '/dist') + shutil.rmtree(setup_file_path + '/build', ignore_errors=True) + shutil.rmtree(setup_file_path + '/_skbuild', ignore_errors=True) + shutil.rmtree(setup_file_path + '/dist', ignore_errors=True) except IOError: pass diff --git a/python/setuputils.py b/python/setuputils.py index 273ff1fca3..5804770f22 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -67,243 +67,3 @@ def clean_folder(path): cython_exts.extend(glob.glob(folder + '/*.cpython*')) for file in cython_exts: os.remove(file) - - -def use_raft_package(raft_path, cpp_build_path, - git_info_file=None): - """ - Function to use the python code in RAFT in package.raft - - - If RAFT symlink already exists, don't change anything. Use setup.py clean - if you want to change RAFT location. - - Uses RAFT located in $RAFT_PATH if $RAFT_PATH exists. - - Otherwise it will look for RAFT in the libcuml build folder, - located either in the default location ../cpp/build or in - $CUML_BUILD_PATH. - - Otherwise it will clone RAFT into _external_repositories. - - Branch/git tag cloned is located in git_info_file in this case. - - """ - if os.path.islink('cuml/raft'): - raft_path = os.path.realpath('cuml/raft') - # walk up two dirs from `python/raft` - raft_path = os.path.join(raft_path, '..', '..') - print("-- Using existing RAFT folder") - elif isinstance(raft_path, (str, os.PathLike)): - print('-- Using RAFT_PATH argument') - elif os.environ.get('RAFT_PATH', False) is not False: - raft_path = str(os.environ['RAFT_PATH']) - print('-- Using RAFT_PATH environment variable') - else: - raft_path, raft_cloned = \ - clone_repo_if_needed('raft', cpp_build_path, - git_info_file=git_info_file) - raft_path = os.path.join('../', raft_path) - - raft_path = os.path.realpath(raft_path) - print('-- RAFT found at: ' + str(raft_path)) - - try: - os.symlink( - os.path.join(raft_path, 'python/raft'), - os.path.join('cuml/raft') - ) - except FileExistsError: - os.remove(os.path.join('cuml/raft')) - os.symlink( - os.path.join(raft_path, 'python/raft'), - os.path.join('cuml/raft') - ) - - return os.path.join(raft_path, 'cpp/include') - - -def clone_repo_if_needed(name, cpp_build_path=None, - git_info_file=None): - if git_info_file is None: - git_info_file = \ - _get_repo_path() + '/cpp/cmake/thirdparty/get_raft.cmake' - - if cpp_build_path is None or cpp_build_path is False: - cpp_build_path = _get_repo_path() + '/cpp/build/_deps/' - - repo_cloned = get_submodule_dependency(name, - cpp_build_path=cpp_build_path, - git_info_file=git_info_file) - - if repo_cloned: - repo_path = ( - _get_repo_path() + '/python/_external_repositories/' + name + '/') - else: - repo_path = os.path.join(cpp_build_path, name + '-src/') - - return repo_path, repo_cloned - - -def get_submodule_dependency(repo, - git_info_file, - cpp_build_path): - """ - Function to check if sub repositories (i.e. submodules in git terminology) - already exist in the libcuml build folder, otherwise will clone the - repos needed to build the cuML Python package. - - Parameters - ---------- - repo : Strings or list of Strings - Name of the repos to be cloned. Must match - the names of the cmake git clone instruction - `ExternalProject_Add(name` - git_info_file : String - Relative path of the location of the CMakeLists.txt (or the cmake - module which contains ExternalProject_Add definitions) to extract - the information. By default it will look in the standard location - `cuml_repo_root/cpp` - cpp_build_path : String - Relative location of the build folder to look if repositories - already exist - - Returns - ------- - result : boolean - True if repos were found in libcuml cpp build folder, False - if they were not found. - """ - - if isinstance(repo, str): - repos = [repo] - - repo_info = get_repo_cmake_info(repos, git_info_file) - - if os.path.exists(os.path.join(cpp_build_path, repos[0] + '-src/')): - print("-- Third party modules found succesfully in the libcuml++ " - "build folder:") - print(" " + str(cpp_build_path)) - - return False - - else: - - print("-- Third party repositories have not been found so they " - "will be cloned. To avoid this set the environment " - "variable CUML_BUILD_PATH, containing the absolute " - "path to the build folder where libcuml++ was built. ") - - for repo in repos: - clone_repo(repo, repo_info[repo][0], repo_info[repo][1]) - - return True - - -def clone_repo(name, GIT_REPOSITORY, GIT_TAG, - location_to_clone='_external_repositories/', force_clone=False): - """ - Function to clone repos if they have not been cloned already. - Variables are named identical to the cmake counterparts for clarity, - in spite of not being very pythonic. - - Parameters - ---------- - name : String - Name of the repo to be cloned - GIT_REPOSITORY : String - URL of the repo to be cloned - GIT_TAG : String - commit hash or git hash to be cloned. Accepts anything that - `git checkout` accepts - force_clone : Boolean - Set to True to ignore already cloned repositories in - _external_repositories and clone - location_to_clone: String (default: '_external_repositories/') - Name that will contain clone of repository if needed. - """ - - if not os.path.exists(location_to_clone + name) or force_clone: - print("Cloning repository " + name + " into " + location_to_clone + - name) - subprocess.check_call(['git', 'clone', - GIT_REPOSITORY, - location_to_clone + name]) - wd = os.getcwd() - os.chdir(location_to_clone + name) - subprocess.check_call(['git', 'checkout', - GIT_TAG]) - os.chdir(wd) - else: - print("Found repository " + name + " in _external_repositories/" + - name) - - -def get_repo_cmake_info(names, file_path): - """ - Function to find information about submodules from cpp/CMakeLists file - - Parameters - ---------- - name : List of Strings - List containing the names of the repos to be cloned. Must match - the names of the cmake git clone instruction - `ExternalProject_Add(name` - file_path : String - Relative path of the location of the CMakeLists.txt (or the cmake - module which contains ExternalProject_Add definitions) to extract - the information. - - Returns - ------- - results : dictionary - Dictionary where results[name] contains an array, - where results[name][0] is the url of the repo and - repo_info[repo][1] is the tag/commit hash to be cloned as - specified by cmake. - - """ - with open(file_path) as f: - s = f.read() - - results = {} - - for name in names: - repo = re.findall(r'\s.*GIT_REPOSITORY.*', s) - repo = repo[-1].split()[-1] - fork = re.findall(r'\s.*FORK.*', s) - fork = fork[-1].split()[-1] - repo = repo.replace("${PKG_FORK}", fork) - tag = re.findall(r'\s.*PINNED_TAG.*', s) - tag = tag[-1].split()[-1] - if tag == 'branch-${CUML_BRANCH_VERSION_raft}': - loc = _get_repo_path() + '/cpp/CMakeLists.txt' - with open(loc) as f: - cmakelists = f.read() - tag = re.findall(r'\s.*project\(CUML VERSION.*', cmakelists) - tag = tag[-1].split()[2].split('.') - tag = 'branch-{}.{}'.format(tag[0], tag[1]) - - results[name] = [repo, tag] - - return results - - -def _get_repo_path(): - python_dir = Path(__file__).resolve() - return str(python_dir.parent.parent.absolute()) - - -def get_cuda_version_from_header(cuda_include_dir, delimeter=""): - - cuda_version = None - - with open(os.path.join(cuda_include_dir, "cuda.h"), encoding="utf-8") as f: - for line in f.readlines(): - if re.search(r"#define CUDA_VERSION ", line) is not None: - cuda_version = line - break - - if cuda_version is None: - raise TypeError("CUDA_VERSION not found in cuda.h") - cuda_version = int(cuda_version.split()[2]) - return "%d%s%d" % ( - cuda_version // 1000, - delimeter, - (cuda_version % 1000) // 10, - ) From 6d5a7c0b51b8d583cff9793e639658fc506b0331 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 21:45:04 -0500 Subject: [PATCH 11/37] FIX Typo --- python/cuml/linear_model/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index eac4311adb..6bd437303b 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -25,7 +25,7 @@ set(cython_sources if(NOT SINGLEGPU) list(APPEND cython_sources - base_mg.pys + base_mg.pyx linear_regression_mg.pyx ridge_mg.pyx ) From 28cb356a759222f2c8734283f5600a3d5ffa25b5 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 21:46:08 -0500 Subject: [PATCH 12/37] FIX Remove accidentally deleted function --- python/setuputils.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/python/setuputils.py b/python/setuputils.py index 5804770f22..4413e4996f 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -67,3 +67,23 @@ def clean_folder(path): cython_exts.extend(glob.glob(folder + '/*.cpython*')) for file in cython_exts: os.remove(file) + + +def get_cuda_version_from_header(cuda_include_dir, delimeter=""): + + cuda_version = None + + with open(os.path.join(cuda_include_dir, "cuda.h"), encoding="utf-8") as f: + for line in f.readlines(): + if re.search(r"#define CUDA_VERSION ", line) is not None: + cuda_version = line + break + + if cuda_version is None: + raise TypeError("CUDA_VERSION not found in cuda.h") + cuda_version = int(cuda_version.split()[2]) + return "%d%s%d" % ( + cuda_version // 1000, + delimeter, + (cuda_version % 1000) // 10, + ) From 7e5751dfdd2916dd0dd7f40d2ffe876b9da0565e Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 22:03:14 -0500 Subject: [PATCH 13/37] FIX Copyright years --- python/setup.cfg | 2 +- python/setuputils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/setup.cfg b/python/setup.cfg index 8b65c3682e..b9758e4886 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -1,4 +1,4 @@ -# Copyright (c) 2018, NVIDIA CORPORATION. +# Copyright (c) 2018-2022, NVIDIA CORPORATION. [flake8] filename = *.py, *.pyx, *.pxd diff --git a/python/setuputils.py b/python/setuputils.py index 4413e4996f..8e59775e95 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2018-2021, NVIDIA CORPORATION. +# Copyright (c) 2018-2022, NVIDIA CORPORATION. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From f0b8465892361f34c34f9e7ccb6273178a761660 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Tue, 19 Jul 2022 22:43:07 -0500 Subject: [PATCH 14/37] FIX PEP8 fixes --- python/setup.py | 1 - python/setuputils.py | 3 --- 2 files changed, 4 deletions(-) diff --git a/python/setup.py b/python/setup.py index 9c295a724e..320b6b6561 100644 --- a/python/setup.py +++ b/python/setup.py @@ -24,7 +24,6 @@ from setuputils import clean_folder from setuputils import get_environment_option from setuputils import get_cli_option -from setuputils import get_cuda_version_from_header import versioneer from skbuild import setup diff --git a/python/setuputils.py b/python/setuputils.py index 4413e4996f..f91dc3f51b 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -18,11 +18,8 @@ import os import re import shutil -import subprocess import sys -from pathlib import Path - def get_environment_option(name): env_variable = os.environ.get(name, False) From c3b3d25753a0ead9e9e3d9a92220aabf0d326f3a Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 20 Jul 2022 08:42:50 -0500 Subject: [PATCH 15/37] FIX Forgot to commit conda recipe --- conda/recipes/cuml/meta.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/conda/recipes/cuml/meta.yaml b/conda/recipes/cuml/meta.yaml index c5090dbbcb..23ac04b92e 100644 --- a/conda/recipes/cuml/meta.yaml +++ b/conda/recipes/cuml/meta.yaml @@ -35,6 +35,7 @@ requirements: - python x.x - setuptools - cmake {{ cmake_version }} + - scikit-build>=0.13.1 - cython>=0.29,<0.30 - treelite=2.4.0 - cudf {{ minor_version }} From 3e75c230f55310908cd366c976ae15cef3290303 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 20 Jul 2022 18:37:35 -0500 Subject: [PATCH 16/37] FIX Add v_measure to cmakelists --- python/cuml/metrics/cluster/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/cuml/metrics/cluster/CMakeLists.txt b/python/cuml/metrics/cluster/CMakeLists.txt index e8193b7e96..ff50749a51 100644 --- a/python/cuml/metrics/cluster/CMakeLists.txt +++ b/python/cuml/metrics/cluster/CMakeLists.txt @@ -22,6 +22,7 @@ set(cython_sources mutual_info_score.pyx silhouette_score.pyx utils.pyx + v_measure.pyx ) set(linked_libraries cuml::${CUML_CPP_TARGET}) @@ -43,6 +44,7 @@ set(targets_using_numpy mutual_info_score silhouette_score utils + v_measure ) foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") From 31d9be7c46429613c774a2e3c90da92f2dc80179 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Fri, 22 Jul 2022 14:11:14 -0500 Subject: [PATCH 17/37] FIX Remove clean from libcuml conda recipe --- conda/recipes/libcuml/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda/recipes/libcuml/build.sh b/conda/recipes/libcuml/build.sh index 34758d0af2..84a4e3da07 100644 --- a/conda/recipes/libcuml/build.sh +++ b/conda/recipes/libcuml/build.sh @@ -7,4 +7,4 @@ if [ -n "$MACOSX_DEPLOYMENT_TARGET" ]; then export MACOSX_DEPLOYMENT_TARGET=10.11 fi -./build.sh -n clean libcuml prims -v --allgpuarch +./build.sh -n libcuml prims -v --allgpuarch From 9c581c121400520515c6272d98880f85cbf2644a Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Mon, 25 Jul 2022 13:59:51 -0500 Subject: [PATCH 18/37] DBG simplify find cuml codepath --- python/CMakeLists.txt | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 1247503e05..c198013ded 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -49,32 +49,6 @@ set(CUML_CPP_TARGET "cuml++") # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) - rapids_cpm_init() - include(rapids-cuda) - rapids_cuda_init_architectures(CUML) - enable_language(CUDA) - - # FIXME: check of this is necessary - # Since cugraph only enables CUDA optionally, we need to manually include the file that - # rapids_cuda_init_architectures relies on `project` including. - - include("${CMAKE_PROJECT_cuml-python_INCLUDE}") - include(../cpp/cmake/thirdparty/get_treelite.cmake) - rapids_cpm_init() - include(rapids-cuda) - rapids_cuda_init_architectures(CUML) - enable_language(CUDA) - - include("${CMAKE_PROJECT_cuml-python_INCLUDE}") - include(../cpp/cmake/thirdparty/get_treelite.cmake) - - set(CUML_VERSION_MAJOR "22") - set(CUML_VERSION_MINOR "08") - set(CUML_USE_RAFT_NN ON) - set(CUML_USE_RAFT_DIST ON) - - include(../cpp/cmake/thirdparty/get_raft.cmake) - find_package(cuml ${CUML_VERSION} REQUIRED) else() set(cuml_FOUND OFF) @@ -92,8 +66,12 @@ if(NOT cuml_FOUND) # rapids_cuda_init_architectures relies on `project` including. include("${CMAKE_PROJECT_cuml-python_INCLUDE}") - set(BUILD_TESTS OFF) - set(BUILD_BENCHMARKS OFF) + set(BUILD_CUML_TESTS OFF) + set(BUILD_PRIMS_TESTS OFF) + set(BUILD_CUML_C_LIBRARY OFF) + set(BUILD_CUML_EXAMPLES OFF) + set(BUILD_CUML_BENCH OFF) + set(BUILD_CUML_PRIMS_BENCH OFF) message(STATUS "installing packages") add_subdirectory(../../cpp cuml-cpp) From 21c3dc83a817939581d00828e47748bf1d4ae0ed Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 08:53:15 -0500 Subject: [PATCH 19/37] FIX Correct cumlprims linking --- python/CMakeLists.txt | 23 +++++++++++++++++++++++ python/cuml/cluster/CMakeLists.txt | 6 +++++- python/cuml/common/CMakeLists.txt | 12 ++++++++++-- python/cuml/decomposition/CMakeLists.txt | 7 +++++-- python/cuml/linear_model/CMakeLists.txt | 6 +++++- python/cuml/neighbors/CMakeLists.txt | 10 +++++++--- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index c198013ded..a1e164b149 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -49,7 +49,26 @@ set(CUML_CPP_TARGET "cuml++") # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) + if(FIND_CUML_CPP) + rapids_cpm_init() + include(rapids-cuda) + rapids_cuda_init_architectures(cuml-python) + enable_language(CUDA) + + set(CUML_VERSION_MAJOR "22") + set(CUML_VERSION_MINOR "08") + set(CUML_USE_RAFT_NN ON) + set(CUML_USE_RAFT_DIST ON) + + # We need to call get_raft due to cuML asing for raft::nn and + # raft::distance targets + include(../cpp/cmake/thirdparty/get_raft.cmake) + + # We need to call get_treelite explicitly because we need the correct + # ${TREELITE_LIBS} definition for RF + include(../cpp/cmake/thirdparty/get_treelite.cmake) find_package(cuml ${CUML_VERSION} REQUIRED) + else() set(cuml_FOUND OFF) endif() @@ -81,6 +100,10 @@ if(NOT cuml_FOUND) install(TARGETS cuml DESTINATION cuml/library) endif() +if(NOT SINGLEGPU) + include(../cpp/cmake/thirdparty/get_cumlprims_mg.cmake) +endif() + include(rapids-cython) rapids_cython_init() diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index bc0438a6a7..440af44498 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -21,14 +21,18 @@ set(cython_sources kmeans.pyx ) +set(linked_libraries cuml::${CUML_CPP_TARGET}) + if(NOT SINGLEGPU) list(APPEND cython_sources dbscan_mg.pyx kmeans_mg.pyx ) + + list(APPEND linked_libraries + cumlprims_mg::cumlprims_mg) endif() -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index 27ccc75c79..e05e658259 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -13,17 +13,25 @@ # ============================================================================= -# todo: disable _mg for singlegpu set(cython_sources base.pyx cuda.pyx handle.pyx logger.pyx - opg_data_utils_mg.pyx pointer_utils.pyx ) set(linked_libraries cuml::${CUML_CPP_TARGET}) + +if(NOT SINGLEGPU) + list(APPEND cython_sources + opg_data_utils_mg.pyx + ) + + list(APPEND linked_libraries + cumlprims_mg::cumlprims_mg) +endif() + rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" diff --git a/python/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt index 93e8e76486..ebe0baa9b1 100644 --- a/python/cuml/decomposition/CMakeLists.txt +++ b/python/cuml/decomposition/CMakeLists.txt @@ -13,21 +13,24 @@ # ============================================================================= -# todo: disable _mg for singlegpu set(cython_sources pca.pyx tsvd.pyx ) +set(linked_libraries cuml::${CUML_CPP_TARGET}) + if(NOT SINGLEGPU) list(APPEND cython_sources base_mg.pyx pca_mg.pyx tsvd_mg.pyx ) + + list(APPEND linked_libraries + cumlprims_mg::cumlprims_mg) endif() -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index 6bd437303b..6c95c3fa82 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -23,15 +23,19 @@ set(cython_sources ridge.pyx ) +set(linked_libraries cuml::${CUML_CPP_TARGET}) + if(NOT SINGLEGPU) list(APPEND cython_sources base_mg.pyx linear_regression_mg.pyx ridge_mg.pyx ) + + list(APPEND linked_libraries + cumlprims_mg::cumlprims_mg) endif() -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" diff --git a/python/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt index 6fd9d81663..6346bfc7a7 100644 --- a/python/cuml/neighbors/CMakeLists.txt +++ b/python/cuml/neighbors/CMakeLists.txt @@ -13,7 +13,6 @@ # ============================================================================= -# todo: disable _mg for singlegpu set(cython_sources ann.pyx kneighbors_classifier.pyx @@ -21,16 +20,21 @@ set(cython_sources nearest_neighbors.pyx ) +set(linked_libraries + cuml::${CUML_CPP_TARGET} + ) + if(NOT SINGLEGPU) list(APPEND cython_sources kneighbors_classifier_mg.pyx kneighbors_regressor_mg.pyx nearest_neighbors_mg.pyx ) -endif() + list(APPEND linked_libraries + cumlprims_mg::cumlprims_mg) +endif() -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" From 280e5d3d096e31f82b1c19e0856914dad100ac10 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 09:14:25 -0500 Subject: [PATCH 20/37] FIX cleanup --- conda/environments/cuml_dev_cuda11.0.yml | 1 + conda/environments/cuml_dev_cuda11.2.yml | 1 + conda/environments/cuml_dev_cuda11.4.yml | 1 + conda/environments/cuml_dev_cuda11.5.yml | 1 - conda/recipes/cuml/meta.yaml | 1 - cpp/CMakeLists.txt | 6 ++--- fetch_rapids.cmake | 17 ++++++++++++ python/CMakeLists.txt | 13 +++------ python/cuml/cluster/CMakeLists.txt | 20 +------------- python/cuml/common/CMakeLists.txt | 14 +++------- python/cuml/datasets/CMakeLists.txt | 15 ++--------- python/cuml/decomposition/CMakeLists.txt | 20 ++------------ python/cuml/ensemble/CMakeLists.txt | 16 ++--------- .../experimental/linear_model/CMakeLists.txt | 12 +-------- python/cuml/explainer/CMakeLists.txt | 17 ++---------- python/cuml/fil/CMakeLists.txt | 12 +-------- python/cuml/internals/CMakeLists.txt | 13 ++------- python/cuml/kernel_ridge/CMakeLists.txt | 12 +-------- python/cuml/linear_model/CMakeLists.txt | 27 ++----------------- python/cuml/manifold/CMakeLists.txt | 15 +---------- python/cuml/metrics/CMakeLists.txt | 19 ++----------- python/cuml/neighbors/CMakeLists.txt | 19 +------------ python/cuml/random_projection/CMakeLists.txt | 12 +-------- python/cuml/solvers/CMakeLists.txt | 21 +-------------- python/cuml/svm/CMakeLists.txt | 15 +---------- python/cuml/tsa/CMakeLists.txt | 16 +---------- python/setuputils.py | 2 +- 27 files changed, 54 insertions(+), 284 deletions(-) create mode 100644 fetch_rapids.cmake diff --git a/conda/environments/cuml_dev_cuda11.0.yml b/conda/environments/cuml_dev_cuda11.0.yml index 1d677d4663..e8cdd377f6 100644 --- a/conda/environments/cuml_dev_cuda11.0.yml +++ b/conda/environments/cuml_dev_cuda11.0.yml @@ -10,6 +10,7 @@ dependencies: - rapids-build-env=22.08.* - rapids-notebook-env=22.08.* - rapids-doc-env=22.08.* +- scikit-build>=0.13.1 - cudf=22.08.* - rmm=22.08.* - libcumlprims=22.08.* diff --git a/conda/environments/cuml_dev_cuda11.2.yml b/conda/environments/cuml_dev_cuda11.2.yml index 01c69a91de..bf77ed4873 100644 --- a/conda/environments/cuml_dev_cuda11.2.yml +++ b/conda/environments/cuml_dev_cuda11.2.yml @@ -10,6 +10,7 @@ dependencies: - rapids-build-env=22.08.* - rapids-notebook-env=22.08.* - rapids-doc-env=22.08.* +- scikit-build>=0.13.1 - cudf=22.08.* - rmm=22.08.* - libcumlprims=22.08.* diff --git a/conda/environments/cuml_dev_cuda11.4.yml b/conda/environments/cuml_dev_cuda11.4.yml index ab78744f15..fbbfb9d63d 100644 --- a/conda/environments/cuml_dev_cuda11.4.yml +++ b/conda/environments/cuml_dev_cuda11.4.yml @@ -10,6 +10,7 @@ dependencies: - rapids-build-env=22.08.* - rapids-notebook-env=22.08.* - rapids-doc-env=22.08.* +- scikit-build>=0.13.1 - cudf=22.08.* - rmm=22.08.* - libcumlprims=22.08.* diff --git a/conda/environments/cuml_dev_cuda11.5.yml b/conda/environments/cuml_dev_cuda11.5.yml index 5dfd988e1e..fd8ce6acb8 100644 --- a/conda/environments/cuml_dev_cuda11.5.yml +++ b/conda/environments/cuml_dev_cuda11.5.yml @@ -10,7 +10,6 @@ dependencies: - rapids-build-env=22.08.* - rapids-notebook-env=22.08.* - rapids-doc-env=22.08.* -- cmake_setuptools>=0.1.3 - scikit-build>=0.13.1 - cudf=22.08.* - rmm=22.08.* diff --git a/conda/recipes/cuml/meta.yaml b/conda/recipes/cuml/meta.yaml index 23ac04b92e..a1285a9146 100644 --- a/conda/recipes/cuml/meta.yaml +++ b/conda/recipes/cuml/meta.yaml @@ -34,7 +34,6 @@ requirements: host: - python x.x - setuptools - - cmake {{ cmake_version }} - scikit-build>=0.13.1 - cython>=0.29,<0.30 - treelite=2.4.0 diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index ebcc12751b..c00f2cce14 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -15,9 +15,9 @@ #============================================================================= cmake_minimum_required(VERSION 3.20.1 FATAL_ERROR) -file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-22.08/RAPIDS.cmake - ${CMAKE_BINARY_DIR}/RAPIDS.cmake) -include(${CMAKE_BINARY_DIR}/RAPIDS.cmake) + +include(../fetch_rapids.cmake) + include(rapids-cmake) include(rapids-cpm) include(rapids-cuda) diff --git a/fetch_rapids.cmake b/fetch_rapids.cmake new file mode 100644 index 0000000000..2b5c7e9d35 --- /dev/null +++ b/fetch_rapids.cmake @@ -0,0 +1,17 @@ +# ============================================================================= +# Copyright (c) 2022, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= +file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-22.08/RAPIDS.cmake + ${CMAKE_BINARY_DIR}/RAPIDS.cmake +) +include(${CMAKE_BINARY_DIR}/RAPIDS.cmake) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index a1e164b149..e386f95bda 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -14,9 +14,8 @@ cmake_minimum_required(VERSION 3.20.1 FATAL_ERROR) -file(DOWNLOAD https://raw.githubusercontent.com/rapidsai/rapids-cmake/branch-22.08/RAPIDS.cmake - ${CMAKE_BINARY_DIR}/RAPIDS.cmake) -include(${CMAKE_BINARY_DIR}/RAPIDS.cmake) +include(../fetch_rapids.cmake) + include(rapids-cmake) include(rapids-cpm) include(rapids-find) @@ -92,11 +91,8 @@ if(NOT cuml_FOUND) set(BUILD_CUML_BENCH OFF) set(BUILD_CUML_PRIMS_BENCH OFF) message(STATUS "installing packages") - add_subdirectory(../../cpp cuml-cpp) + add_subdirectory(../cpp cuml-cpp) - # Since there are multiple subpackages of cudf._lib that require access to libcudf, we place the - # library in the _lib/cpp directory as a single source of truth and modify the other rpaths - # appropriately. install(TARGETS cuml DESTINATION cuml/library) endif() @@ -108,9 +104,6 @@ endif() include(rapids-cython) rapids_cython_init() -# FIXME: Update build directory -# add_subdirectory(cuml) - add_subdirectory(cuml/common) add_subdirectory(cuml/internals) diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index 440af44498..c2314c1200 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -37,27 +37,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX cluster_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - agglomerative - dbscan - hdbscan - kmeans) -if(NOT SINGLEGPU) - list(APPEND targets_using_numpy - dbscan_mg - kmeans_mg - ) -endif() -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index e05e658259..f0831db37e 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -36,21 +36,13 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX common_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - opg_data_utils_mg - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() +# todo: ml_cuda_utils.h should be in the include folder of cuML or the functionality +# moved to another file, pointer_utils.pyx needs it target_include_directories(pointer_utils PRIVATE "../../../cpp/src/") diff --git a/python/cuml/datasets/CMakeLists.txt b/python/cuml/datasets/CMakeLists.txt index 69dedb31cc..04912ae65d 100644 --- a/python/cuml/datasets/CMakeLists.txt +++ b/python/cuml/datasets/CMakeLists.txt @@ -23,21 +23,10 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX datasets_ + LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX datasets_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - datasets_arima - datasets_regression - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt index ebe0baa9b1..8c1111ebf9 100644 --- a/python/cuml/decomposition/CMakeLists.txt +++ b/python/cuml/decomposition/CMakeLists.txt @@ -35,25 +35,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" -) + MODULE_PREFIX decomposition_ -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - pca - tsvd - ) -if(NOT SINGLEGPU) - list(APPEND targets_using_numpy - pca_mg - tsvd_mg - ) -endif() -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() +) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") diff --git a/python/cuml/ensemble/CMakeLists.txt b/python/cuml/ensemble/CMakeLists.txt index a11d96eafa..3c95df89c7 100644 --- a/python/cuml/ensemble/CMakeLists.txt +++ b/python/cuml/ensemble/CMakeLists.txt @@ -24,26 +24,14 @@ set(cython_sources set(linked_libraries cuml::${CUML_CPP_TARGET} ${TREELITE_LIBS}) + rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX ensemble_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - randomforest_common - randomforest_shared - randomforestclassifier - randomforestregressor - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/experimental/linear_model/CMakeLists.txt b/python/cuml/experimental/linear_model/CMakeLists.txt index 7093210d16..2c251e2a78 100644 --- a/python/cuml/experimental/linear_model/CMakeLists.txt +++ b/python/cuml/experimental/linear_model/CMakeLists.txt @@ -23,19 +23,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX experimental_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - lars - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/explainer/CMakeLists.txt b/python/cuml/explainer/CMakeLists.txt index e1dcf1a96c..47e9baacdd 100644 --- a/python/cuml/explainer/CMakeLists.txt +++ b/python/cuml/explainer/CMakeLists.txt @@ -25,23 +25,10 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX explainer_ + LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX explainer_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - explainer_base - explainer_kernel_shap - explainer_permutation_shap - explainer_tree_shap - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/fil/CMakeLists.txt b/python/cuml/fil/CMakeLists.txt index 6f3e582257..ef14651479 100644 --- a/python/cuml/fil/CMakeLists.txt +++ b/python/cuml/fil/CMakeLists.txt @@ -23,19 +23,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX fil_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - fil - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/internals/CMakeLists.txt b/python/cuml/internals/CMakeLists.txt index 4bec54c5c3..eba7187597 100644 --- a/python/cuml/internals/CMakeLists.txt +++ b/python/cuml/internals/CMakeLists.txt @@ -23,21 +23,12 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX internals_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - internals - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() +# We need to include for callbacks_implements.h in the internals folder target_include_directories(internals PRIVATE "") diff --git a/python/cuml/kernel_ridge/CMakeLists.txt b/python/cuml/kernel_ridge/CMakeLists.txt index 19dadfb2e2..1f3c7e7f56 100644 --- a/python/cuml/kernel_ridge/CMakeLists.txt +++ b/python/cuml/kernel_ridge/CMakeLists.txt @@ -23,19 +23,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX kernel_ridge_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - kernel_ridge - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index 6c95c3fa82..4c9af5b993 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -39,33 +39,10 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX linear_ + LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX linear_model_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - linear_base - linear_elastic_net - linear_linear_regression - linear_logistic_regression - linear_mbsgd_classifier - linear_mbsgd_regressor - linear_ridge - ) -if(NOT SINGLEGPU) - list(APPEND targets_using_numpy - linear_base_mg - linear_linear_regression_mg - linear_ridge_mg - ) -endif() -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/manifold/CMakeLists.txt b/python/cuml/manifold/CMakeLists.txt index d412a51f69..1445b6f2ac 100644 --- a/python/cuml/manifold/CMakeLists.txt +++ b/python/cuml/manifold/CMakeLists.txt @@ -26,22 +26,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX manifold_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - simpl_set - t_sne - umap - umap_utils - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/metrics/CMakeLists.txt b/python/cuml/metrics/CMakeLists.txt index 97e1ee422a..0bb1771b00 100644 --- a/python/cuml/metrics/CMakeLists.txt +++ b/python/cuml/metrics/CMakeLists.txt @@ -27,25 +27,10 @@ set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" MODULE_PREFIX metrics_ + LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX metrics_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - metrics_accuracy - metrics_hinge_loss - metrics_kl_divergence - metrics_pairwise_distances - metrics_regression - metrics_trustworthiness - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt index 6346bfc7a7..159ec95734 100644 --- a/python/cuml/neighbors/CMakeLists.txt +++ b/python/cuml/neighbors/CMakeLists.txt @@ -39,26 +39,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX neighbors_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - ann - kneighbors_classifier - kneighbors_regressor - nearest_neighbors - ) -if(NOT SINGLEGPU) - list(APPEND targets_using_numpy - kneighbors_classifier_mg - kneighbors_regressor_mg - nearest_neighbors_mg - ) -endif() - foreach(target IN LISTS targets_using_numpy) target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") endforeach() diff --git a/python/cuml/random_projection/CMakeLists.txt b/python/cuml/random_projection/CMakeLists.txt index 2ed574d293..353fc5b3d8 100644 --- a/python/cuml/random_projection/CMakeLists.txt +++ b/python/cuml/random_projection/CMakeLists.txt @@ -23,19 +23,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX random_projection_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - random_projection - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt index 3edf5b2d7d..9065517802 100644 --- a/python/cuml/solvers/CMakeLists.txt +++ b/python/cuml/solvers/CMakeLists.txt @@ -31,28 +31,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX solvers_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - cd - qn - sgd - ) - -if(NOT SINGLEGPU) - list(APPEND targets_using_numpy - cd_mg - ) -endif() - -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/svm/CMakeLists.txt b/python/cuml/svm/CMakeLists.txt index 4c223bfd0c..649d2cb625 100644 --- a/python/cuml/svm/CMakeLists.txt +++ b/python/cuml/svm/CMakeLists.txt @@ -26,22 +26,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX svm_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - linear - svc - svm_base - svr - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/cuml/tsa/CMakeLists.txt b/python/cuml/tsa/CMakeLists.txt index 5c9e189064..0f70d0bc81 100644 --- a/python/cuml/tsa/CMakeLists.txt +++ b/python/cuml/tsa/CMakeLists.txt @@ -27,23 +27,9 @@ rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" LINKED_LIBRARIES "${linked_libraries}" + MODULE_PREFIX tsa_ ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - arima - auto_arima - holtwinters - seasonality - stationarity - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") endforeach() diff --git a/python/setuputils.py b/python/setuputils.py index 829ceb628c..b482316bb6 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -66,7 +66,7 @@ def clean_folder(path): os.remove(file) -def get_cuda_version_from_header(cuda_include_dir, delimeter=""): +def get_cuda_version_from_header(cuda_include_dir, delimiter=""): cuda_version = None From 575ecd09be55572d19d811802046419dff56c0dd Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 09:14:53 -0500 Subject: [PATCH 21/37] FIX Remove repeated line --- python/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index e386f95bda..7a9682f8d5 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -48,7 +48,6 @@ set(CUML_CPP_TARGET "cuml++") # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) - if(FIND_CUML_CPP) rapids_cpm_init() include(rapids-cuda) rapids_cuda_init_architectures(cuml-python) From d812b50257e0f0c508af23cdea0d1a814847b0a2 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 09:16:32 -0500 Subject: [PATCH 22/37] FIX Add missing prefixes --- python/cuml/common/CMakeLists.txt | 2 +- python/cuml/internals/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index f0831db37e..f926b3f473 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -45,4 +45,4 @@ endforeach() # todo: ml_cuda_utils.h should be in the include folder of cuML or the functionality # moved to another file, pointer_utils.pyx needs it -target_include_directories(pointer_utils PRIVATE "../../../cpp/src/") +target_include_directories(common_pointer_utils PRIVATE "../../../cpp/src/") diff --git a/python/cuml/internals/CMakeLists.txt b/python/cuml/internals/CMakeLists.txt index eba7187597..3f6457ab63 100644 --- a/python/cuml/internals/CMakeLists.txt +++ b/python/cuml/internals/CMakeLists.txt @@ -31,4 +31,4 @@ foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) endforeach() # We need to include for callbacks_implements.h in the internals folder -target_include_directories(internals PRIVATE "") +target_include_directories(internals_internals PRIVATE "") From 91048288b5410bbd48324ad83fbc05421b98ec0e Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 09:31:14 -0500 Subject: [PATCH 23/37] FIX Remove straggler comment --- python/cuml/cluster/CMakeLists.txt | 2 +- python/cuml/datasets/CMakeLists.txt | 2 +- python/cuml/ensemble/CMakeLists.txt | 2 +- python/cuml/experimental/linear_model/CMakeLists.txt | 2 +- python/cuml/explainer/CMakeLists.txt | 2 +- python/cuml/fil/CMakeLists.txt | 2 +- python/cuml/internals/CMakeLists.txt | 2 +- python/cuml/kernel_ridge/CMakeLists.txt | 2 +- python/cuml/manifold/CMakeLists.txt | 2 +- python/cuml/metrics/CMakeLists.txt | 2 +- python/cuml/metrics/cluster/CMakeLists.txt | 2 +- python/cuml/random_projection/CMakeLists.txt | 2 +- python/cuml/solvers/CMakeLists.txt | 2 +- python/cuml/svm/CMakeLists.txt | 2 +- python/cuml/tsa/CMakeLists.txt | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index c2314c1200..ce5814e524 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources agglomerative.pyx dbscan.pyx diff --git a/python/cuml/datasets/CMakeLists.txt b/python/cuml/datasets/CMakeLists.txt index 04912ae65d..cf68128d13 100644 --- a/python/cuml/datasets/CMakeLists.txt +++ b/python/cuml/datasets/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources arima.pyx regression.pyx diff --git a/python/cuml/ensemble/CMakeLists.txt b/python/cuml/ensemble/CMakeLists.txt index 3c95df89c7..789f505ad3 100644 --- a/python/cuml/ensemble/CMakeLists.txt +++ b/python/cuml/ensemble/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources randomforest_common.pyx randomforest_shared.pyx diff --git a/python/cuml/experimental/linear_model/CMakeLists.txt b/python/cuml/experimental/linear_model/CMakeLists.txt index 2c251e2a78..d1620a7cfb 100644 --- a/python/cuml/experimental/linear_model/CMakeLists.txt +++ b/python/cuml/experimental/linear_model/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources lars.pyx ) diff --git a/python/cuml/explainer/CMakeLists.txt b/python/cuml/explainer/CMakeLists.txt index 47e9baacdd..55ca29733f 100644 --- a/python/cuml/explainer/CMakeLists.txt +++ b/python/cuml/explainer/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources base.pyx kernel_shap.pyx diff --git a/python/cuml/fil/CMakeLists.txt b/python/cuml/fil/CMakeLists.txt index ef14651479..37a8cdcd1a 100644 --- a/python/cuml/fil/CMakeLists.txt +++ b/python/cuml/fil/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources fil.pyx ) diff --git a/python/cuml/internals/CMakeLists.txt b/python/cuml/internals/CMakeLists.txt index 3f6457ab63..5fdbf4e42c 100644 --- a/python/cuml/internals/CMakeLists.txt +++ b/python/cuml/internals/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources internals.pyx ) diff --git a/python/cuml/kernel_ridge/CMakeLists.txt b/python/cuml/kernel_ridge/CMakeLists.txt index 1f3c7e7f56..7d29f98191 100644 --- a/python/cuml/kernel_ridge/CMakeLists.txt +++ b/python/cuml/kernel_ridge/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources kernel_ridge.pyx ) diff --git a/python/cuml/manifold/CMakeLists.txt b/python/cuml/manifold/CMakeLists.txt index 1445b6f2ac..1fcd992981 100644 --- a/python/cuml/manifold/CMakeLists.txt +++ b/python/cuml/manifold/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources simpl_set.pyx t_sne.pyx diff --git a/python/cuml/metrics/CMakeLists.txt b/python/cuml/metrics/CMakeLists.txt index 0bb1771b00..4bce3a89d6 100644 --- a/python/cuml/metrics/CMakeLists.txt +++ b/python/cuml/metrics/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources accuracy.pyx hinge_loss.pyx diff --git a/python/cuml/metrics/cluster/CMakeLists.txt b/python/cuml/metrics/cluster/CMakeLists.txt index ff50749a51..d7367d7f49 100644 --- a/python/cuml/metrics/cluster/CMakeLists.txt +++ b/python/cuml/metrics/cluster/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources adjusted_rand_index.pyx completeness_score.pyx diff --git a/python/cuml/random_projection/CMakeLists.txt b/python/cuml/random_projection/CMakeLists.txt index 353fc5b3d8..27575584a4 100644 --- a/python/cuml/random_projection/CMakeLists.txt +++ b/python/cuml/random_projection/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources random_projection.pyx ) diff --git a/python/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt index 9065517802..e6a6ce9637 100644 --- a/python/cuml/solvers/CMakeLists.txt +++ b/python/cuml/solvers/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources cd.pyx qn.pyx diff --git a/python/cuml/svm/CMakeLists.txt b/python/cuml/svm/CMakeLists.txt index 649d2cb625..fa13d84ce6 100644 --- a/python/cuml/svm/CMakeLists.txt +++ b/python/cuml/svm/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources linear.pyx svc.pyx diff --git a/python/cuml/tsa/CMakeLists.txt b/python/cuml/tsa/CMakeLists.txt index 0f70d0bc81..debbd3c52b 100644 --- a/python/cuml/tsa/CMakeLists.txt +++ b/python/cuml/tsa/CMakeLists.txt @@ -13,7 +13,7 @@ # ============================================================================= -# todo: disable _mg for singlegpu + set(cython_sources arima.pyx auto_arima.pyx From c60b9714c6fb42035e3d895a073751b7179d0330 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 09:34:55 -0500 Subject: [PATCH 24/37] FIX typo --- python/setuputils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setuputils.py b/python/setuputils.py index b482316bb6..a8085802be 100644 --- a/python/setuputils.py +++ b/python/setuputils.py @@ -81,6 +81,6 @@ def get_cuda_version_from_header(cuda_include_dir, delimiter=""): cuda_version = int(cuda_version.split()[2]) return "%d%s%d" % ( cuda_version // 1000, - delimeter, + delimiter, (cuda_version % 1000) // 10, ) From 4fb224f84aa4310d1e4d3079d98da2be0dbbcbf4 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 14:45:10 -0500 Subject: [PATCH 25/37] FIX Various fixes --- build.sh | 7 +++---- ci/gpu/build.sh | 6 +++--- python/CMakeLists.txt | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/build.sh b/build.sh index 6037f984e2..1c54276aa5 100755 --- a/build.sh +++ b/build.sh @@ -288,11 +288,10 @@ if completeBuild || hasArg cuml || hasArg pydocs; then fi cd ${REPODIR}/python + + python setup.py build_ext --inplace -- -DCMAKE_LIBRARY_PATH=${LIBCUML_BUILD_DIR} -DCMAKE_MESSAGE_LOG_LEVEL=${CMAKE_LOG_LEVEL} ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} if [[ ${INSTALL_TARGET} != "" ]]; then - # python setup.py build_ext -j${PARALLEL_LEVEL:-1} ${CUML_EXTRA_PYTHON_ARGS} --library-dir=${LIBCUML_BUILD_DIR} install --single-version-externally-managed --record=record.txt - python setup.py build_ext -v --inplace -- ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} install - else - python setup.py build_ext -v --inplace -- ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} + python setup.py install --single-version-externally-managed --record=record.txt -- -DCMAKE_LIBRARY_PATH=${LIBCUML_BUILD_DIR} -DCMAKE_MESSAGE_LOG_LEVEL=${CMAKE_LOG_LEVEL} ${CUML_EXTRA_CMAKE_ARGS} -- -j${PARALLEL_LEVEL:-1} fi if hasArg pydocs; then diff --git a/ci/gpu/build.sh b/ci/gpu/build.sh index bca46849c5..d632df2a8d 100755 --- a/ci/gpu/build.sh +++ b/ci/gpu/build.sh @@ -191,8 +191,8 @@ else gpuci_logger "Building and installing cuml" export CONDA_BLD_DIR="$WORKSPACE/.conda-bld" export VERSION_SUFFIX="" - gpuci_conda_retry mambabuild --no-build-id --croot ${CONDA_BLD_DIR} conda/recipes/cuml -c ${CONDA_ARTIFACT_PATH} --python=${PYTHON} - gpuci_mamba_retry install -c ${CONDA_ARTIFACT_PATH} -c ${CONDA_BLD_DIR} cuml + gpuci_conda_retry mambabuild --croot ${CONDA_BLD_DIR} conda/recipes/cuml -c ${CONDA_ARTIFACT_PATH} --python=${PYTHON} + gpuci_mamba_retry install cuml -c "${CONDA_BLD_DIR}" -c "${CONDA_ARTIFACT_PATH}" gpuci_logger "Install the main version of dask, distributed, and dask-glm" set -x @@ -205,7 +205,7 @@ else set +x gpuci_logger "Python pytest for cuml" - cd $WORKSPACE/python/cuml/tests + cd $WORKSPACE/python pytest --cache-clear --basetemp=${WORKSPACE}/cuml-cuda-tmp --junitxml=${WORKSPACE}/junit-cuml.xml -v -s -m "not memleak" --durations=50 --timeout=300 --ignore=dask --cov-config=.coveragerc --cov=cuml --cov-report=xml:${WORKSPACE}/python/cuml/cuml-coverage.xml --cov-report term diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 7a9682f8d5..4541832c55 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -92,7 +92,7 @@ if(NOT cuml_FOUND) message(STATUS "installing packages") add_subdirectory(../cpp cuml-cpp) - install(TARGETS cuml DESTINATION cuml/library) + install(TARGETS ${CUML_CPP_TARGET} DESTINATION cuml/library) endif() if(NOT SINGLEGPU) From df63847dd30c140dddd3f14fbf30380d4bfa4a3c Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 14:51:57 -0500 Subject: [PATCH 26/37] FIX Undo unintended change --- ci/gpu/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/gpu/build.sh b/ci/gpu/build.sh index d632df2a8d..5d36f17bcd 100755 --- a/ci/gpu/build.sh +++ b/ci/gpu/build.sh @@ -205,7 +205,7 @@ else set +x gpuci_logger "Python pytest for cuml" - cd $WORKSPACE/python + cd $WORKSPACE/python/cuml/tests pytest --cache-clear --basetemp=${WORKSPACE}/cuml-cuda-tmp --junitxml=${WORKSPACE}/junit-cuml.xml -v -s -m "not memleak" --durations=50 --timeout=300 --ignore=dask --cov-config=.coveragerc --cov=cuml --cov-report=xml:${WORKSPACE}/python/cuml/cuml-coverage.xml --cov-report term From d354cb3146bfae5fe7fa940db50dbd6b629276c6 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 16:54:36 -0500 Subject: [PATCH 27/37] DBG Add verbosity to cmake command --- conda/recipes/cuml/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda/recipes/cuml/build.sh b/conda/recipes/cuml/build.sh index 4c66e64f98..82fdf839c1 100644 --- a/conda/recipes/cuml/build.sh +++ b/conda/recipes/cuml/build.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash # This assumes the script is executed from the root of the repo directory -./build.sh cuml +./build.sh cuml -v From ae0c1b53cdc92ca29b60d7a952a18269edb9648b Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 16:57:32 -0500 Subject: [PATCH 28/37] FIX Copyright year --- conda/recipes/cuml/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/conda/recipes/cuml/build.sh b/conda/recipes/cuml/build.sh index 82fdf839c1..bfec44be2e 100644 --- a/conda/recipes/cuml/build.sh +++ b/conda/recipes/cuml/build.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# Copyright (c) 2018-2022, NVIDIA CORPORATION. # This assumes the script is executed from the root of the repo directory ./build.sh cuml -v From dbcfbe7e3c09e93b13f88939d08ee9bf2196372f Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 17:26:06 -0500 Subject: [PATCH 29/37] FIX Remove pytest.ini path change --- python/pytest.ini | 3 --- 1 file changed, 3 deletions(-) diff --git a/python/pytest.ini b/python/pytest.ini index f69a613925..6dec495c6b 100644 --- a/python/pytest.ini +++ b/python/pytest.ini @@ -17,6 +17,3 @@ filterwarnings = error::FutureWarning:cuml[.*] # Catch uses of deprecated positional args in testing ignore:[^.]*ABCs[^.]*:DeprecationWarning:patsy[.*] ignore:(.*)alias(.*):DeprecationWarning:hdbscan[.*] - -pythonpath = . - From 465b42cca9251ffb14da2b10b89dde9a8dbf2979 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Wed, 27 Jul 2022 22:26:04 -0500 Subject: [PATCH 30/37] UPD update-versions update for rap-cmake file --- ci/release/update-version.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index 401d8e0568..cd3681fbb9 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -58,3 +58,6 @@ done sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/checks/style.sh sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/cpu/build.sh sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/gpu/build.sh + +# rapids-cmake version +sed_runner 's/'"branch-.*\/RAPIDS.cmake"'/'"branch-${NEXT_SHORT_TAG}\/RAPIDS.cmake"'/g' fetch_rapids.cmake From d1ea26e7f1955228534349c24d8777d1aaff48b8 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Fri, 29 Jul 2022 12:26:01 -0500 Subject: [PATCH 31/37] FIX Review feedback --- python/CMakeLists.txt | 9 ++++++-- python/cuml/cluster/CMakeLists.txt | 9 ++------ python/cuml/common/CMakeLists.txt | 11 +++------ python/cuml/datasets/CMakeLists.txt | 7 ++---- python/cuml/decomposition/CMakeLists.txt | 9 ++------ python/cuml/ensemble/CMakeLists.txt | 4 ++-- .../experimental/linear_model/CMakeLists.txt | 5 ++-- python/cuml/explainer/CMakeLists.txt | 5 ++-- python/cuml/fil/CMakeLists.txt | 5 ++-- python/cuml/internals/CMakeLists.txt | 7 +++--- python/cuml/kernel_ridge/CMakeLists.txt | 5 ++-- python/cuml/linear_model/CMakeLists.txt | 8 ++----- python/cuml/manifold/CMakeLists.txt | 5 ++-- python/cuml/metrics/CMakeLists.txt | 5 ++-- python/cuml/metrics/cluster/CMakeLists.txt | 23 ++----------------- python/cuml/neighbors/CMakeLists.txt | 11 ++------- python/cuml/random_projection/CMakeLists.txt | 5 ++-- python/cuml/solvers/CMakeLists.txt | 5 ++-- python/cuml/svm/CMakeLists.txt | 5 ++-- python/cuml/tsa/CMakeLists.txt | 5 ++-- python/setup.py | 4 +++- 21 files changed, 50 insertions(+), 102 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 7a9682f8d5..9ff208c46d 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -58,7 +58,7 @@ if(FIND_CUML_CPP) set(CUML_USE_RAFT_NN ON) set(CUML_USE_RAFT_DIST ON) - # We need to call get_raft due to cuML asing for raft::nn and + # We need to call get_raft due to cuML asking for raft::nn and # raft::distance targets include(../cpp/cmake/thirdparty/get_raft.cmake) @@ -95,11 +95,16 @@ if(NOT cuml_FOUND) install(TARGETS cuml DESTINATION cuml/library) endif() +set(cuml_sg_libraries cuml::${CUML_CPP_TARGET}) + if(NOT SINGLEGPU) include(../cpp/cmake/thirdparty/get_cumlprims_mg.cmake) + set(cuml_mg_libraries + cuml::${CUML_CPP_TARGET} + cumlprims_mg::cumlprims_mg + ) endif() - include(rapids-cython) rapids_cython_init() diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index ce5814e524..d7fcad35df 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -21,25 +21,20 @@ set(cython_sources kmeans.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) - if(NOT SINGLEGPU) list(APPEND cython_sources dbscan_mg.pyx kmeans_mg.pyx ) - - list(APPEND linked_libraries - cumlprims_mg::cumlprims_mg) endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX cluster_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index f926b3f473..5e076cf8c3 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -12,7 +12,6 @@ # the License. # ============================================================================= - set(cython_sources base.pyx cuda.pyx @@ -21,28 +20,24 @@ set(cython_sources pointer_utils.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) - if(NOT SINGLEGPU) list(APPEND cython_sources opg_data_utils_mg.pyx ) - - list(APPEND linked_libraries - cumlprims_mg::cumlprims_mg) endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX common_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() # todo: ml_cuda_utils.h should be in the include folder of cuML or the functionality # moved to another file, pointer_utils.pyx needs it +# https://github.com/rapidsai/cuml/issues/4841 target_include_directories(common_pointer_utils PRIVATE "../../../cpp/src/") diff --git a/python/cuml/datasets/CMakeLists.txt b/python/cuml/datasets/CMakeLists.txt index cf68128d13..eb2a37e2ac 100644 --- a/python/cuml/datasets/CMakeLists.txt +++ b/python/cuml/datasets/CMakeLists.txt @@ -12,21 +12,18 @@ # the License. # ============================================================================= - - set(cython_sources arima.pyx regression.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX datasets_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt index 8c1111ebf9..bd873518be 100644 --- a/python/cuml/decomposition/CMakeLists.txt +++ b/python/cuml/decomposition/CMakeLists.txt @@ -18,27 +18,22 @@ set(cython_sources tsvd.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) - if(NOT SINGLEGPU) list(APPEND cython_sources base_mg.pyx pca_mg.pyx tsvd_mg.pyx ) - - list(APPEND linked_libraries - cumlprims_mg::cumlprims_mg) endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX decomposition_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/ensemble/CMakeLists.txt b/python/cuml/ensemble/CMakeLists.txt index 789f505ad3..ac7f0184b1 100644 --- a/python/cuml/ensemble/CMakeLists.txt +++ b/python/cuml/ensemble/CMakeLists.txt @@ -22,7 +22,7 @@ set(cython_sources ) set(linked_libraries - cuml::${CUML_CPP_TARGET} + ${cuml_sg_libraries} ${TREELITE_LIBS}) rapids_cython_create_modules( @@ -33,5 +33,5 @@ rapids_cython_create_modules( ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/experimental/linear_model/CMakeLists.txt b/python/cuml/experimental/linear_model/CMakeLists.txt index d1620a7cfb..e0988bb741 100644 --- a/python/cuml/experimental/linear_model/CMakeLists.txt +++ b/python/cuml/experimental/linear_model/CMakeLists.txt @@ -18,14 +18,13 @@ set(cython_sources lars.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX experimental_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../../library") endforeach() diff --git a/python/cuml/explainer/CMakeLists.txt b/python/cuml/explainer/CMakeLists.txt index 55ca29733f..8a0a38c2bd 100644 --- a/python/cuml/explainer/CMakeLists.txt +++ b/python/cuml/explainer/CMakeLists.txt @@ -21,14 +21,13 @@ set(cython_sources tree_shap.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX explainer_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/fil/CMakeLists.txt b/python/cuml/fil/CMakeLists.txt index 37a8cdcd1a..adea9765c0 100644 --- a/python/cuml/fil/CMakeLists.txt +++ b/python/cuml/fil/CMakeLists.txt @@ -18,14 +18,13 @@ set(cython_sources fil.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX fil_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/internals/CMakeLists.txt b/python/cuml/internals/CMakeLists.txt index 5fdbf4e42c..7fa5f4bc5c 100644 --- a/python/cuml/internals/CMakeLists.txt +++ b/python/cuml/internals/CMakeLists.txt @@ -18,17 +18,16 @@ set(cython_sources internals.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX internals_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() # We need to include for callbacks_implements.h in the internals folder -target_include_directories(internals_internals PRIVATE "") +target_include_directories(internals_internals PRIVATE ${CMAKE_CURRENT_LIST_DIR}) diff --git a/python/cuml/kernel_ridge/CMakeLists.txt b/python/cuml/kernel_ridge/CMakeLists.txt index 7d29f98191..e4ca87d23d 100644 --- a/python/cuml/kernel_ridge/CMakeLists.txt +++ b/python/cuml/kernel_ridge/CMakeLists.txt @@ -18,14 +18,13 @@ set(cython_sources kernel_ridge.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX kernel_ridge_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index 4c9af5b993..1930e5edfc 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -23,8 +23,6 @@ set(cython_sources ridge.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) - if(NOT SINGLEGPU) list(APPEND cython_sources base_mg.pyx @@ -32,17 +30,15 @@ if(NOT SINGLEGPU) ridge_mg.pyx ) - list(APPEND linked_libraries - cumlprims_mg::cumlprims_mg) endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX linear_model_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/manifold/CMakeLists.txt b/python/cuml/manifold/CMakeLists.txt index 1fcd992981..f4491936c9 100644 --- a/python/cuml/manifold/CMakeLists.txt +++ b/python/cuml/manifold/CMakeLists.txt @@ -21,14 +21,13 @@ set(cython_sources umap_utils.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX manifold_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/metrics/CMakeLists.txt b/python/cuml/metrics/CMakeLists.txt index 4bce3a89d6..dcf72ece2e 100644 --- a/python/cuml/metrics/CMakeLists.txt +++ b/python/cuml/metrics/CMakeLists.txt @@ -23,14 +23,13 @@ set(cython_sources trustworthiness.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX metrics_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/metrics/cluster/CMakeLists.txt b/python/cuml/metrics/cluster/CMakeLists.txt index d7367d7f49..ebc57faf29 100644 --- a/python/cuml/metrics/cluster/CMakeLists.txt +++ b/python/cuml/metrics/cluster/CMakeLists.txt @@ -25,32 +25,13 @@ set(cython_sources v_measure.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" ) -# TODO: Finding NumPy currently requires finding Development due to a bug in CMake. This bug was -# fixed in https://gitlab.kitware.com/cmake/cmake/-/merge_requests/7410 and will be available in -# CMake 3.24, so we can remove the Development component once we upgrade to CMake 3.24. -find_package(Python REQUIRED COMPONENTS Development NumPy) -set(targets_using_numpy - adjusted_rand_index - completeness_score - entropy - homogeneity_score - mutual_info_score - silhouette_score - utils - v_measure - ) -foreach(target IN LISTS targets_using_numpy) - target_include_directories(${target} PRIVATE "${Python_NumPy_INCLUDE_DIRS}") -endforeach() - foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../../library") endforeach() diff --git a/python/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt index 159ec95734..8b618b4668 100644 --- a/python/cuml/neighbors/CMakeLists.txt +++ b/python/cuml/neighbors/CMakeLists.txt @@ -20,25 +20,18 @@ set(cython_sources nearest_neighbors.pyx ) -set(linked_libraries - cuml::${CUML_CPP_TARGET} - ) - if(NOT SINGLEGPU) list(APPEND cython_sources kneighbors_classifier_mg.pyx kneighbors_regressor_mg.pyx nearest_neighbors_mg.pyx ) - - list(APPEND linked_libraries - cumlprims_mg::cumlprims_mg) endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX neighbors_ ) @@ -47,5 +40,5 @@ foreach(target IN LISTS targets_using_numpy) endforeach() foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/random_projection/CMakeLists.txt b/python/cuml/random_projection/CMakeLists.txt index 27575584a4..12a87161db 100644 --- a/python/cuml/random_projection/CMakeLists.txt +++ b/python/cuml/random_projection/CMakeLists.txt @@ -18,14 +18,13 @@ set(cython_sources random_projection.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX random_projection_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt index e6a6ce9637..33ec499fe8 100644 --- a/python/cuml/solvers/CMakeLists.txt +++ b/python/cuml/solvers/CMakeLists.txt @@ -26,14 +26,13 @@ if(NOT SINGLEGPU) ) endif() -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> MODULE_PREFIX solvers_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/svm/CMakeLists.txt b/python/cuml/svm/CMakeLists.txt index fa13d84ce6..865474ef22 100644 --- a/python/cuml/svm/CMakeLists.txt +++ b/python/cuml/svm/CMakeLists.txt @@ -21,14 +21,13 @@ set(cython_sources svr.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX svm_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/cuml/tsa/CMakeLists.txt b/python/cuml/tsa/CMakeLists.txt index debbd3c52b..756450a748 100644 --- a/python/cuml/tsa/CMakeLists.txt +++ b/python/cuml/tsa/CMakeLists.txt @@ -22,14 +22,13 @@ set(cython_sources stationarity.pyx ) -set(linked_libraries cuml::${CUML_CPP_TARGET}) rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES "${linked_libraries}" + LINKED_LIBRARIES "${cuml_sg_libraries}" MODULE_PREFIX tsa_ ) foreach(cython_module IN LISTS RAPIDS_CYTHON_CREATED_TARGETS) - set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/cpp") + set_target_properties(${cython_module} PROPERTIES INSTALL_RPATH "\$ORIGIN;\$ORIGIN/../library") endforeach() diff --git a/python/setup.py b/python/setup.py index 320b6b6561..66d20c5736 100644 --- a/python/setup.py +++ b/python/setup.py @@ -94,7 +94,6 @@ libcuml_path = '../cpp/build/' cmdclass = versioneer.get_cmdclass() -cmdclass["build_ext"] = build_ext ############################################################################## # - Python package generation ------------------------------------------------ @@ -112,6 +111,9 @@ url="https://github.com/rapidsai/cudf", setup_requires=['Cython>=0.29,<0.30'], packages=find_packages(include=['cuml', 'cuml.*']), + package_data={ + key: ["*.pxd"] for key in find_packages(include=['cuml', 'cuml.*']) + }, install_requires=install_requires, license="Apache", cmdclass=cmdclass, From be8cf5cd7ad8be18ca18eddf99d63c1310128aa4 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Fri, 29 Jul 2022 13:07:06 -0500 Subject: [PATCH 32/37] FIX Totally did not add the single and multigpu linked libraries backwards before --- python/CMakeLists.txt | 2 ++ python/cuml/cluster/CMakeLists.txt | 2 +- python/cuml/common/CMakeLists.txt | 2 +- python/cuml/decomposition/CMakeLists.txt | 2 +- python/cuml/linear_model/CMakeLists.txt | 2 +- python/cuml/neighbors/CMakeLists.txt | 2 +- python/cuml/solvers/CMakeLists.txt | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 9ff208c46d..2ca370e5cc 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -53,6 +53,8 @@ if(FIND_CUML_CPP) rapids_cuda_init_architectures(cuml-python) enable_language(CUDA) + # variables used by get_raft.cmake, we can get rid of them when this is solved: + # https://github.com/rapidsai/rapids-cmake/issues/228 set(CUML_VERSION_MAJOR "22") set(CUML_VERSION_MINOR "08") set(CUML_USE_RAFT_NN ON) diff --git a/python/cuml/cluster/CMakeLists.txt b/python/cuml/cluster/CMakeLists.txt index d7fcad35df..3c39f06d34 100644 --- a/python/cuml/cluster/CMakeLists.txt +++ b/python/cuml/cluster/CMakeLists.txt @@ -31,7 +31,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX cluster_ ) diff --git a/python/cuml/common/CMakeLists.txt b/python/cuml/common/CMakeLists.txt index 5e076cf8c3..41b6068dfc 100644 --- a/python/cuml/common/CMakeLists.txt +++ b/python/cuml/common/CMakeLists.txt @@ -29,7 +29,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX common_ ) diff --git a/python/cuml/decomposition/CMakeLists.txt b/python/cuml/decomposition/CMakeLists.txt index bd873518be..1ab807ba7f 100644 --- a/python/cuml/decomposition/CMakeLists.txt +++ b/python/cuml/decomposition/CMakeLists.txt @@ -29,7 +29,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX decomposition_ ) diff --git a/python/cuml/linear_model/CMakeLists.txt b/python/cuml/linear_model/CMakeLists.txt index 1930e5edfc..ed25490a33 100644 --- a/python/cuml/linear_model/CMakeLists.txt +++ b/python/cuml/linear_model/CMakeLists.txt @@ -35,7 +35,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX linear_model_ ) diff --git a/python/cuml/neighbors/CMakeLists.txt b/python/cuml/neighbors/CMakeLists.txt index 8b618b4668..5065437149 100644 --- a/python/cuml/neighbors/CMakeLists.txt +++ b/python/cuml/neighbors/CMakeLists.txt @@ -31,7 +31,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX neighbors_ ) diff --git a/python/cuml/solvers/CMakeLists.txt b/python/cuml/solvers/CMakeLists.txt index 33ec499fe8..5867fcb83d 100644 --- a/python/cuml/solvers/CMakeLists.txt +++ b/python/cuml/solvers/CMakeLists.txt @@ -29,7 +29,7 @@ endif() rapids_cython_create_modules( CXX SOURCE_FILES "${cython_sources}" - LINKED_LIBRARIES $,${cuml_mg_libraries},${cuml_sg_libraries}> + LINKED_LIBRARIES $,${cuml_sg_libraries},${cuml_mg_libraries}> MODULE_PREFIX solvers_ ) From c7500288836767cb8cfadfc4097dfa49fbd74302 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Fri, 29 Jul 2022 13:17:18 -0500 Subject: [PATCH 33/37] FIX PEP8 fixes --- python/setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 66d20c5736..b8a4b2e7ee 100644 --- a/python/setup.py +++ b/python/setup.py @@ -27,7 +27,6 @@ import versioneer from skbuild import setup -from skbuild.command.build_ext import build_ext install_requires = ['numba', 'cython'] From 3575e038fdd5523fb002dfc4f90f8461b59c0750 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Mon, 1 Aug 2022 08:49:45 -0500 Subject: [PATCH 34/37] FIX Small fixes from review --- python/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 1330555ba4..360a62ce25 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -16,10 +16,6 @@ cmake_minimum_required(VERSION 3.20.1 FATAL_ERROR) include(../fetch_rapids.cmake) -include(rapids-cmake) -include(rapids-cpm) -include(rapids-find) - set(CUML_VERSION 22.08.00) project( @@ -37,6 +33,8 @@ project( option(FIND_CUML_CPP "Search for existing CUML C++ installations before defaulting to local files" OFF) option(SINGLEGPU "Disable all mnmg components and comms libraries" OFF) +# todo: use CMAKE_MESSAGE_CONTEXT for prefix for logging. +# https://github.com/rapidsai/cuml/issues/4843 message(VERBOSE "CUML_PY: Searching for existing CUML C++ installations before defaulting to local files: ${FIND_CUML_CPP}") message(VERBOSE "CUML_PY: Disabling all mnmg components and comms libraries: ${SINGLEGPU}") @@ -48,6 +46,7 @@ set(CUML_CPP_TARGET "cuml++") # If the user requested it, we attempt to find cuml. if(FIND_CUML_CPP) + include(rapids-cpm) rapids_cpm_init() include(rapids-cuda) rapids_cuda_init_architectures(cuml-python) @@ -62,6 +61,7 @@ if(FIND_CUML_CPP) # We need to call get_raft due to cuML asking for raft::nn and # raft::distance targets + # see issue https://github.com/rapidsai/cuml/issues/4843 include(../cpp/cmake/thirdparty/get_raft.cmake) # We need to call get_treelite explicitly because we need the correct From d2e3862b315f2a70df5cbd31ccca8d083b32a224 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Mon, 1 Aug 2022 10:30:55 -0500 Subject: [PATCH 35/37] FIX Redo update-version.sh change --- ci/release/update-version.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index cd3681fbb9..f6f7268d98 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -32,7 +32,9 @@ function sed_runner() { } sed_runner 's/'"CUML VERSION .* LANGUAGES"'/'"CUML VERSION ${NEXT_FULL_TAG} LANGUAGES"'/g' cpp/CMakeLists.txt -sed_runner 's/'"branch-.*\/RAPIDS.cmake"'/'"branch-${NEXT_SHORT_TAG}\/RAPIDS.cmake"'/g' cpp/CMakeLists.txt +# rapids-cmake version +sed_runner 's/'"branch-.*\/RAPIDS.cmake"'/'"branch-${NEXT_SHORT_TAG}\/RAPIDS.cmake"'/g' fetch_rapids.cmake + # RTD update sed_runner 's/version = .*/version = '"'${NEXT_SHORT_TAG}'"'/g' docs/source/conf.py @@ -58,6 +60,3 @@ done sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/checks/style.sh sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/cpu/build.sh sed_runner "s/export UCX_PY_VERSION=.*/export UCX_PY_VERSION='${NEXT_UCX_PY_VERSION}'/g" ci/gpu/build.sh - -# rapids-cmake version -sed_runner 's/'"branch-.*\/RAPIDS.cmake"'/'"branch-${NEXT_SHORT_TAG}\/RAPIDS.cmake"'/g' fetch_rapids.cmake From 3c17fdb8356dc96c1470a947d9393d0be8e8d0f5 Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Mon, 1 Aug 2022 10:39:14 -0500 Subject: [PATCH 36/37] ENH Use cuml-python versions to compute get_raft variables --- python/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 360a62ce25..849d6a0e57 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -54,8 +54,8 @@ if(FIND_CUML_CPP) # variables used by get_raft.cmake, we can get rid of them when this is solved: # https://github.com/rapidsai/rapids-cmake/issues/228 - set(CUML_VERSION_MAJOR "22") - set(CUML_VERSION_MINOR "08") + set(CUML_VERSION_MAJOR "${cuml-python_VERSION_MAJOR}") + set(CUML_VERSION_MINOR "${cuml-python_VERSION_MINOR}") set(CUML_USE_RAFT_NN ON) set(CUML_USE_RAFT_DIST ON) From 0d3274a41127048e41f7f08463933f2a70ecd66d Mon Sep 17 00:00:00 2001 From: Dante Gama Dessavre Date: Mon, 1 Aug 2022 16:03:52 -0500 Subject: [PATCH 37/37] ENH Add python/cmakelists to update-versions --- ci/release/update-version.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/release/update-version.sh b/ci/release/update-version.sh index f6f7268d98..8722741f16 100755 --- a/ci/release/update-version.sh +++ b/ci/release/update-version.sh @@ -32,6 +32,7 @@ function sed_runner() { } sed_runner 's/'"CUML VERSION .* LANGUAGES"'/'"CUML VERSION ${NEXT_FULL_TAG} LANGUAGES"'/g' cpp/CMakeLists.txt +sed_runner 's/'"set(CUML_VERSION .*)"'/'"set(CUML_VERSION ${NEXT_FULL_TAG})"'/g' python/CMakeLists.txt # rapids-cmake version sed_runner 's/'"branch-.*\/RAPIDS.cmake"'/'"branch-${NEXT_SHORT_TAG}\/RAPIDS.cmake"'/g' fetch_rapids.cmake