FLAML 2.3.4__tar.gz → 2.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flaml-2.3.4 → FLAML-2.3.6}/FLAML.egg-info/PKG-INFO +6 -116
- {flaml-2.3.4 → FLAML-2.3.6}/FLAML.egg-info/SOURCES.txt +1 -0
- {flaml-2.3.4 → FLAML-2.3.6}/FLAML.egg-info/requires.txt +1 -1
- {flaml-2.3.4 → FLAML-2.3.6}/PKG-INFO +6 -116
- {flaml-2.3.4 → FLAML-2.3.6}/README.md +1 -1
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/automl.py +82 -12
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/contrib/histgb.py +2 -2
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/data.py +335 -2
- FLAML-2.3.6/flaml/automl/logger.py +37 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/task/generic_task.py +4 -1
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/fabric/mlflow.py +393 -74
- FLAML-2.3.6/flaml/tune/logger.py +37 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/spark/utils.py +22 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/tune.py +8 -8
- FLAML-2.3.6/flaml/version.py +1 -0
- {flaml-2.3.4 → FLAML-2.3.6}/setup.py +2 -3
- flaml-2.3.4/flaml/automl/logger.py +0 -7
- flaml-2.3.4/flaml/version.py +0 -1
- {flaml-2.3.4 → FLAML-2.3.6}/FLAML.egg-info/dependency_links.txt +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/FLAML.egg-info/top_level.txt +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/LICENSE +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/NOTICE.md +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/agent.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/assistant_agent.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/conversable_agent.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/groupchat.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/agentchat/user_proxy_agent.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/code_utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/extensions/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/math_utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/oai/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/oai/completion.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/oai/openai_utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/autogen/retrieve_utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/contrib/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/ml.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/model.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/huggingface/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/huggingface/data_collator.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/huggingface/trainer.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/huggingface/training_args.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/huggingface/utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/nlp/utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/spark/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/spark/metrics.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/spark/utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/state.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/task/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/task/factory.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/task/task.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/task/time_series_task.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/feature.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/sklearn.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/tcn.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/tft.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/ts_data.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/time_series/ts_model.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/automl/training_log.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/config.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/all/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/all/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/all/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/estimator.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/extra_tree/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/extra_tree/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/extra_tree/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/greedy.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/lgbm/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/lgbm/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/lgbm/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/portfolio.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/regret.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/rf/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/rf/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/rf/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/suggest.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgb_limitdepth/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgb_limitdepth/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgb_limitdepth/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgboost/binary.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgboost/multiclass.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/default/xgboost/regression.json +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/fabric/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/ml.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/onlineml/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/onlineml/autovw.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/onlineml/trial.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/onlineml/trial_runner.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/analysis.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/result.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/sample.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/scheduler/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/scheduler/online_scheduler.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/scheduler/trial_scheduler.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/blendsearch.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/cfo_cat.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/flow2.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/online_searcher.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/search_thread.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/suggestion.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/searcher/variant_generator.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/space.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/spark/__init__.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/trial.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/trial_runner.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/flaml/tune/utils.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/pyproject.toml +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/setup.cfg +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/test/test_autovw.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/test/test_conda_distribution.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/test/test_gpu.py +0 -0
- {flaml-2.3.4 → FLAML-2.3.6}/test/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: FLAML
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.6
|
|
4
4
|
Summary: A fast library for automated machine learning and tuning
|
|
5
5
|
Home-page: https://github.com/microsoft/FLAML
|
|
6
6
|
Author: Microsoft Corporation
|
|
@@ -8,144 +8,34 @@ Author-email: hpo@microsoft.com
|
|
|
8
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.9
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.9
|
|
16
15
|
Description-Content-Type: text/markdown
|
|
17
|
-
License-File: LICENSE
|
|
18
|
-
License-File: NOTICE.md
|
|
19
|
-
Requires-Dist: NumPy>=1.17
|
|
20
16
|
Provides-Extra: automl
|
|
21
|
-
Requires-Dist: lightgbm>=2.3.1; extra == "automl"
|
|
22
|
-
Requires-Dist: xgboost<3.0.0,>=0.90; extra == "automl"
|
|
23
|
-
Requires-Dist: scipy>=1.4.1; extra == "automl"
|
|
24
|
-
Requires-Dist: pandas>=1.1.4; extra == "automl"
|
|
25
|
-
Requires-Dist: scikit-learn>=1.0.0; extra == "automl"
|
|
26
17
|
Provides-Extra: notebook
|
|
27
|
-
Requires-Dist: jupyter; extra == "notebook"
|
|
28
18
|
Provides-Extra: spark
|
|
29
|
-
Requires-Dist: pyspark>=3.2.0; extra == "spark"
|
|
30
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "spark"
|
|
31
|
-
Requires-Dist: joblib<=1.3.2; extra == "spark"
|
|
32
19
|
Provides-Extra: test
|
|
33
|
-
Requires-Dist: jupyter; extra == "test"
|
|
34
|
-
Requires-Dist: lightgbm>=2.3.1; extra == "test"
|
|
35
|
-
Requires-Dist: xgboost<2.0.0,>=0.90; extra == "test"
|
|
36
|
-
Requires-Dist: scipy>=1.4.1; extra == "test"
|
|
37
|
-
Requires-Dist: pandas<2.0.0,>=1.1.4; python_version < "3.10" and extra == "test"
|
|
38
|
-
Requires-Dist: pandas>=1.1.4; python_version >= "3.10" and extra == "test"
|
|
39
|
-
Requires-Dist: scikit-learn>=1.0.0; extra == "test"
|
|
40
|
-
Requires-Dist: thop; extra == "test"
|
|
41
|
-
Requires-Dist: pytest>=6.1.1; extra == "test"
|
|
42
|
-
Requires-Dist: coverage>=5.3; extra == "test"
|
|
43
|
-
Requires-Dist: pre-commit; extra == "test"
|
|
44
|
-
Requires-Dist: torch; extra == "test"
|
|
45
|
-
Requires-Dist: torchvision; extra == "test"
|
|
46
|
-
Requires-Dist: catboost<1.2,>=0.26; python_version < "3.11" and extra == "test"
|
|
47
|
-
Requires-Dist: catboost>=0.26; python_version >= "3.11" and extra == "test"
|
|
48
|
-
Requires-Dist: rgf-python; extra == "test"
|
|
49
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "test"
|
|
50
|
-
Requires-Dist: openml; extra == "test"
|
|
51
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "test"
|
|
52
|
-
Requires-Dist: psutil==5.8.0; extra == "test"
|
|
53
|
-
Requires-Dist: dataclasses; extra == "test"
|
|
54
|
-
Requires-Dist: transformers[torch]==4.26; extra == "test"
|
|
55
|
-
Requires-Dist: datasets; extra == "test"
|
|
56
|
-
Requires-Dist: nltk<=3.8.1; extra == "test"
|
|
57
|
-
Requires-Dist: rouge_score; extra == "test"
|
|
58
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "test"
|
|
59
|
-
Requires-Dist: seqeval; extra == "test"
|
|
60
|
-
Requires-Dist: pytorch-forecasting<=0.10.1,>=0.9.0; python_version < "3.11" and extra == "test"
|
|
61
|
-
Requires-Dist: mlflow==2.15.1; extra == "test"
|
|
62
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "test"
|
|
63
|
-
Requires-Dist: joblib<=1.3.2; extra == "test"
|
|
64
|
-
Requires-Dist: nbconvert; extra == "test"
|
|
65
|
-
Requires-Dist: nbformat; extra == "test"
|
|
66
|
-
Requires-Dist: ipykernel; extra == "test"
|
|
67
|
-
Requires-Dist: pytorch-lightning<1.9.1; extra == "test"
|
|
68
|
-
Requires-Dist: tensorboardX==2.6; extra == "test"
|
|
69
|
-
Requires-Dist: requests<2.29.0; extra == "test"
|
|
70
|
-
Requires-Dist: packaging; extra == "test"
|
|
71
|
-
Requires-Dist: pydantic==1.10.9; extra == "test"
|
|
72
|
-
Requires-Dist: sympy; extra == "test"
|
|
73
|
-
Requires-Dist: wolframalpha; extra == "test"
|
|
74
|
-
Requires-Dist: dill; extra == "test"
|
|
75
20
|
Provides-Extra: catboost
|
|
76
|
-
Requires-Dist: catboost<1.2,>=0.26; python_version < "3.11" and extra == "catboost"
|
|
77
|
-
Requires-Dist: catboost<=1.2.5,>=0.26; python_version >= "3.11" and extra == "catboost"
|
|
78
21
|
Provides-Extra: blendsearch
|
|
79
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "blendsearch"
|
|
80
|
-
Requires-Dist: packaging; extra == "blendsearch"
|
|
81
22
|
Provides-Extra: ray
|
|
82
|
-
Requires-Dist: ray[tune]~=1.13; extra == "ray"
|
|
83
23
|
Provides-Extra: azureml
|
|
84
|
-
Requires-Dist: azureml-mlflow; extra == "azureml"
|
|
85
24
|
Provides-Extra: nni
|
|
86
|
-
Requires-Dist: nni; extra == "nni"
|
|
87
25
|
Provides-Extra: vw
|
|
88
|
-
Requires-Dist: vowpalwabbit<9.0.0,>=8.10.0; extra == "vw"
|
|
89
|
-
Requires-Dist: scikit-learn; extra == "vw"
|
|
90
26
|
Provides-Extra: hf
|
|
91
|
-
Requires-Dist: transformers[torch]==4.26; extra == "hf"
|
|
92
|
-
Requires-Dist: datasets; extra == "hf"
|
|
93
|
-
Requires-Dist: nltk<=3.8.1; extra == "hf"
|
|
94
|
-
Requires-Dist: rouge_score; extra == "hf"
|
|
95
|
-
Requires-Dist: seqeval; extra == "hf"
|
|
96
27
|
Provides-Extra: nlp
|
|
97
|
-
|
|
98
|
-
Requires-Dist: datasets; extra == "nlp"
|
|
99
|
-
Requires-Dist: nltk<=3.8.1; extra == "nlp"
|
|
100
|
-
Requires-Dist: rouge_score; extra == "nlp"
|
|
101
|
-
Requires-Dist: seqeval; extra == "nlp"
|
|
102
|
-
Provides-Extra: ts-forecast
|
|
103
|
-
Requires-Dist: holidays<0.14; extra == "ts-forecast"
|
|
104
|
-
Requires-Dist: prophet>=1.0.1; extra == "ts-forecast"
|
|
105
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "ts-forecast"
|
|
106
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "ts-forecast"
|
|
28
|
+
Provides-Extra: ts_forecast
|
|
107
29
|
Provides-Extra: forecast
|
|
108
|
-
Requires-Dist: holidays<0.14; extra == "forecast"
|
|
109
|
-
Requires-Dist: prophet>=1.0.1; extra == "forecast"
|
|
110
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "forecast"
|
|
111
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "forecast"
|
|
112
|
-
Requires-Dist: pytorch-forecasting>=0.9.0; python_version < "3.11" and extra == "forecast"
|
|
113
|
-
Requires-Dist: pytorch-lightning==1.9.0; extra == "forecast"
|
|
114
|
-
Requires-Dist: tensorboardX==2.6; extra == "forecast"
|
|
115
30
|
Provides-Extra: benchmark
|
|
116
|
-
Requires-Dist: catboost>=0.26; extra == "benchmark"
|
|
117
|
-
Requires-Dist: psutil==5.8.0; extra == "benchmark"
|
|
118
|
-
Requires-Dist: xgboost==1.3.3; extra == "benchmark"
|
|
119
|
-
Requires-Dist: pandas==1.1.4; extra == "benchmark"
|
|
120
31
|
Provides-Extra: openai
|
|
121
|
-
Requires-Dist: openai==0.27.8; extra == "openai"
|
|
122
|
-
Requires-Dist: diskcache; extra == "openai"
|
|
123
32
|
Provides-Extra: autogen
|
|
124
|
-
Requires-Dist: openai==0.27.8; extra == "autogen"
|
|
125
|
-
Requires-Dist: diskcache; extra == "autogen"
|
|
126
|
-
Requires-Dist: termcolor; extra == "autogen"
|
|
127
33
|
Provides-Extra: mathchat
|
|
128
|
-
Requires-Dist: openai==0.27.8; extra == "mathchat"
|
|
129
|
-
Requires-Dist: diskcache; extra == "mathchat"
|
|
130
|
-
Requires-Dist: termcolor; extra == "mathchat"
|
|
131
|
-
Requires-Dist: sympy; extra == "mathchat"
|
|
132
|
-
Requires-Dist: pydantic==1.10.9; extra == "mathchat"
|
|
133
|
-
Requires-Dist: wolframalpha; extra == "mathchat"
|
|
134
34
|
Provides-Extra: retrievechat
|
|
135
|
-
Requires-Dist: openai==0.27.8; extra == "retrievechat"
|
|
136
|
-
Requires-Dist: diskcache; extra == "retrievechat"
|
|
137
|
-
Requires-Dist: termcolor; extra == "retrievechat"
|
|
138
|
-
Requires-Dist: chromadb; extra == "retrievechat"
|
|
139
|
-
Requires-Dist: tiktoken; extra == "retrievechat"
|
|
140
|
-
Requires-Dist: sentence_transformers; extra == "retrievechat"
|
|
141
35
|
Provides-Extra: synapse
|
|
142
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "synapse"
|
|
143
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "synapse"
|
|
144
|
-
Requires-Dist: pyspark>=3.2.0; extra == "synapse"
|
|
145
36
|
Provides-Extra: autozero
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
Requires-Dist: packaging; extra == "autozero"
|
|
37
|
+
License-File: LICENSE
|
|
38
|
+
License-File: NOTICE.md
|
|
149
39
|
|
|
150
40
|
[](https://badge.fury.io/py/FLAML)
|
|
151
41
|

|
|
@@ -189,7 +79,7 @@ FLAML has a .NET implementation in [ML.NET](http://dot.net/ml), an open-source,
|
|
|
189
79
|
|
|
190
80
|
## Installation
|
|
191
81
|
|
|
192
|
-
FLAML requires **Python version >= 3.
|
|
82
|
+
FLAML requires **Python version >= 3.9**. It can be installed from pip:
|
|
193
83
|
|
|
194
84
|
```bash
|
|
195
85
|
pip install flaml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: FLAML
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.6
|
|
4
4
|
Summary: A fast library for automated machine learning and tuning
|
|
5
5
|
Home-page: https://github.com/microsoft/FLAML
|
|
6
6
|
Author: Microsoft Corporation
|
|
@@ -8,144 +8,34 @@ Author-email: hpo@microsoft.com
|
|
|
8
8
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.9
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.9
|
|
16
15
|
Description-Content-Type: text/markdown
|
|
17
|
-
License-File: LICENSE
|
|
18
|
-
License-File: NOTICE.md
|
|
19
|
-
Requires-Dist: NumPy>=1.17
|
|
20
16
|
Provides-Extra: automl
|
|
21
|
-
Requires-Dist: lightgbm>=2.3.1; extra == "automl"
|
|
22
|
-
Requires-Dist: xgboost<3.0.0,>=0.90; extra == "automl"
|
|
23
|
-
Requires-Dist: scipy>=1.4.1; extra == "automl"
|
|
24
|
-
Requires-Dist: pandas>=1.1.4; extra == "automl"
|
|
25
|
-
Requires-Dist: scikit-learn>=1.0.0; extra == "automl"
|
|
26
17
|
Provides-Extra: notebook
|
|
27
|
-
Requires-Dist: jupyter; extra == "notebook"
|
|
28
18
|
Provides-Extra: spark
|
|
29
|
-
Requires-Dist: pyspark>=3.2.0; extra == "spark"
|
|
30
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "spark"
|
|
31
|
-
Requires-Dist: joblib<=1.3.2; extra == "spark"
|
|
32
19
|
Provides-Extra: test
|
|
33
|
-
Requires-Dist: jupyter; extra == "test"
|
|
34
|
-
Requires-Dist: lightgbm>=2.3.1; extra == "test"
|
|
35
|
-
Requires-Dist: xgboost<2.0.0,>=0.90; extra == "test"
|
|
36
|
-
Requires-Dist: scipy>=1.4.1; extra == "test"
|
|
37
|
-
Requires-Dist: pandas<2.0.0,>=1.1.4; python_version < "3.10" and extra == "test"
|
|
38
|
-
Requires-Dist: pandas>=1.1.4; python_version >= "3.10" and extra == "test"
|
|
39
|
-
Requires-Dist: scikit-learn>=1.0.0; extra == "test"
|
|
40
|
-
Requires-Dist: thop; extra == "test"
|
|
41
|
-
Requires-Dist: pytest>=6.1.1; extra == "test"
|
|
42
|
-
Requires-Dist: coverage>=5.3; extra == "test"
|
|
43
|
-
Requires-Dist: pre-commit; extra == "test"
|
|
44
|
-
Requires-Dist: torch; extra == "test"
|
|
45
|
-
Requires-Dist: torchvision; extra == "test"
|
|
46
|
-
Requires-Dist: catboost<1.2,>=0.26; python_version < "3.11" and extra == "test"
|
|
47
|
-
Requires-Dist: catboost>=0.26; python_version >= "3.11" and extra == "test"
|
|
48
|
-
Requires-Dist: rgf-python; extra == "test"
|
|
49
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "test"
|
|
50
|
-
Requires-Dist: openml; extra == "test"
|
|
51
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "test"
|
|
52
|
-
Requires-Dist: psutil==5.8.0; extra == "test"
|
|
53
|
-
Requires-Dist: dataclasses; extra == "test"
|
|
54
|
-
Requires-Dist: transformers[torch]==4.26; extra == "test"
|
|
55
|
-
Requires-Dist: datasets; extra == "test"
|
|
56
|
-
Requires-Dist: nltk<=3.8.1; extra == "test"
|
|
57
|
-
Requires-Dist: rouge_score; extra == "test"
|
|
58
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "test"
|
|
59
|
-
Requires-Dist: seqeval; extra == "test"
|
|
60
|
-
Requires-Dist: pytorch-forecasting<=0.10.1,>=0.9.0; python_version < "3.11" and extra == "test"
|
|
61
|
-
Requires-Dist: mlflow==2.15.1; extra == "test"
|
|
62
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "test"
|
|
63
|
-
Requires-Dist: joblib<=1.3.2; extra == "test"
|
|
64
|
-
Requires-Dist: nbconvert; extra == "test"
|
|
65
|
-
Requires-Dist: nbformat; extra == "test"
|
|
66
|
-
Requires-Dist: ipykernel; extra == "test"
|
|
67
|
-
Requires-Dist: pytorch-lightning<1.9.1; extra == "test"
|
|
68
|
-
Requires-Dist: tensorboardX==2.6; extra == "test"
|
|
69
|
-
Requires-Dist: requests<2.29.0; extra == "test"
|
|
70
|
-
Requires-Dist: packaging; extra == "test"
|
|
71
|
-
Requires-Dist: pydantic==1.10.9; extra == "test"
|
|
72
|
-
Requires-Dist: sympy; extra == "test"
|
|
73
|
-
Requires-Dist: wolframalpha; extra == "test"
|
|
74
|
-
Requires-Dist: dill; extra == "test"
|
|
75
20
|
Provides-Extra: catboost
|
|
76
|
-
Requires-Dist: catboost<1.2,>=0.26; python_version < "3.11" and extra == "catboost"
|
|
77
|
-
Requires-Dist: catboost<=1.2.5,>=0.26; python_version >= "3.11" and extra == "catboost"
|
|
78
21
|
Provides-Extra: blendsearch
|
|
79
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "blendsearch"
|
|
80
|
-
Requires-Dist: packaging; extra == "blendsearch"
|
|
81
22
|
Provides-Extra: ray
|
|
82
|
-
Requires-Dist: ray[tune]~=1.13; extra == "ray"
|
|
83
23
|
Provides-Extra: azureml
|
|
84
|
-
Requires-Dist: azureml-mlflow; extra == "azureml"
|
|
85
24
|
Provides-Extra: nni
|
|
86
|
-
Requires-Dist: nni; extra == "nni"
|
|
87
25
|
Provides-Extra: vw
|
|
88
|
-
Requires-Dist: vowpalwabbit<9.0.0,>=8.10.0; extra == "vw"
|
|
89
|
-
Requires-Dist: scikit-learn; extra == "vw"
|
|
90
26
|
Provides-Extra: hf
|
|
91
|
-
Requires-Dist: transformers[torch]==4.26; extra == "hf"
|
|
92
|
-
Requires-Dist: datasets; extra == "hf"
|
|
93
|
-
Requires-Dist: nltk<=3.8.1; extra == "hf"
|
|
94
|
-
Requires-Dist: rouge_score; extra == "hf"
|
|
95
|
-
Requires-Dist: seqeval; extra == "hf"
|
|
96
27
|
Provides-Extra: nlp
|
|
97
|
-
|
|
98
|
-
Requires-Dist: datasets; extra == "nlp"
|
|
99
|
-
Requires-Dist: nltk<=3.8.1; extra == "nlp"
|
|
100
|
-
Requires-Dist: rouge_score; extra == "nlp"
|
|
101
|
-
Requires-Dist: seqeval; extra == "nlp"
|
|
102
|
-
Provides-Extra: ts-forecast
|
|
103
|
-
Requires-Dist: holidays<0.14; extra == "ts-forecast"
|
|
104
|
-
Requires-Dist: prophet>=1.0.1; extra == "ts-forecast"
|
|
105
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "ts-forecast"
|
|
106
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "ts-forecast"
|
|
28
|
+
Provides-Extra: ts_forecast
|
|
107
29
|
Provides-Extra: forecast
|
|
108
|
-
Requires-Dist: holidays<0.14; extra == "forecast"
|
|
109
|
-
Requires-Dist: prophet>=1.0.1; extra == "forecast"
|
|
110
|
-
Requires-Dist: statsmodels>=0.12.2; extra == "forecast"
|
|
111
|
-
Requires-Dist: hcrystalball==0.1.10; extra == "forecast"
|
|
112
|
-
Requires-Dist: pytorch-forecasting>=0.9.0; python_version < "3.11" and extra == "forecast"
|
|
113
|
-
Requires-Dist: pytorch-lightning==1.9.0; extra == "forecast"
|
|
114
|
-
Requires-Dist: tensorboardX==2.6; extra == "forecast"
|
|
115
30
|
Provides-Extra: benchmark
|
|
116
|
-
Requires-Dist: catboost>=0.26; extra == "benchmark"
|
|
117
|
-
Requires-Dist: psutil==5.8.0; extra == "benchmark"
|
|
118
|
-
Requires-Dist: xgboost==1.3.3; extra == "benchmark"
|
|
119
|
-
Requires-Dist: pandas==1.1.4; extra == "benchmark"
|
|
120
31
|
Provides-Extra: openai
|
|
121
|
-
Requires-Dist: openai==0.27.8; extra == "openai"
|
|
122
|
-
Requires-Dist: diskcache; extra == "openai"
|
|
123
32
|
Provides-Extra: autogen
|
|
124
|
-
Requires-Dist: openai==0.27.8; extra == "autogen"
|
|
125
|
-
Requires-Dist: diskcache; extra == "autogen"
|
|
126
|
-
Requires-Dist: termcolor; extra == "autogen"
|
|
127
33
|
Provides-Extra: mathchat
|
|
128
|
-
Requires-Dist: openai==0.27.8; extra == "mathchat"
|
|
129
|
-
Requires-Dist: diskcache; extra == "mathchat"
|
|
130
|
-
Requires-Dist: termcolor; extra == "mathchat"
|
|
131
|
-
Requires-Dist: sympy; extra == "mathchat"
|
|
132
|
-
Requires-Dist: pydantic==1.10.9; extra == "mathchat"
|
|
133
|
-
Requires-Dist: wolframalpha; extra == "mathchat"
|
|
134
34
|
Provides-Extra: retrievechat
|
|
135
|
-
Requires-Dist: openai==0.27.8; extra == "retrievechat"
|
|
136
|
-
Requires-Dist: diskcache; extra == "retrievechat"
|
|
137
|
-
Requires-Dist: termcolor; extra == "retrievechat"
|
|
138
|
-
Requires-Dist: chromadb; extra == "retrievechat"
|
|
139
|
-
Requires-Dist: tiktoken; extra == "retrievechat"
|
|
140
|
-
Requires-Dist: sentence_transformers; extra == "retrievechat"
|
|
141
35
|
Provides-Extra: synapse
|
|
142
|
-
Requires-Dist: joblibspark>=0.5.0; extra == "synapse"
|
|
143
|
-
Requires-Dist: optuna<=3.6.1,>=2.8.0; extra == "synapse"
|
|
144
|
-
Requires-Dist: pyspark>=3.2.0; extra == "synapse"
|
|
145
36
|
Provides-Extra: autozero
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
Requires-Dist: packaging; extra == "autozero"
|
|
37
|
+
License-File: LICENSE
|
|
38
|
+
License-File: NOTICE.md
|
|
149
39
|
|
|
150
40
|
[](https://badge.fury.io/py/FLAML)
|
|
151
41
|

|
|
@@ -189,7 +79,7 @@ FLAML has a .NET implementation in [ML.NET](http://dot.net/ml), an open-source,
|
|
|
189
79
|
|
|
190
80
|
## Installation
|
|
191
81
|
|
|
192
|
-
FLAML requires **Python version >= 3.
|
|
82
|
+
FLAML requires **Python version >= 3.9**. It can be installed from pip:
|
|
193
83
|
|
|
194
84
|
```bash
|
|
195
85
|
pip install flaml
|
|
@@ -40,7 +40,7 @@ FLAML has a .NET implementation in [ML.NET](http://dot.net/ml), an open-source,
|
|
|
40
40
|
|
|
41
41
|
## Installation
|
|
42
42
|
|
|
43
|
-
FLAML requires **Python version >= 3.
|
|
43
|
+
FLAML requires **Python version >= 3.9**. It can be installed from pip:
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
46
|
pip install flaml
|
|
@@ -10,6 +10,7 @@ import os
|
|
|
10
10
|
import random
|
|
11
11
|
import sys
|
|
12
12
|
import time
|
|
13
|
+
from concurrent.futures import as_completed
|
|
13
14
|
from functools import partial
|
|
14
15
|
from typing import Callable, List, Optional, Union
|
|
15
16
|
|
|
@@ -187,9 +188,16 @@ class AutoML(BaseEstimator):
|
|
|
187
188
|
mem_thres: A float of the memory size constraint in bytes.
|
|
188
189
|
pred_time_limit: A float of the prediction latency constraint in seconds.
|
|
189
190
|
It refers to the average prediction time per row in validation data.
|
|
190
|
-
train_time_limit:
|
|
191
|
+
train_time_limit: None or a float of the training time constraint in seconds for each trial.
|
|
192
|
+
Only valid for sequential search.
|
|
191
193
|
verbose: int, default=3 | Controls the verbosity, higher means more
|
|
192
194
|
messages.
|
|
195
|
+
verbose=0: logger level = CRITICAL
|
|
196
|
+
verbose=1: logger level = ERROR
|
|
197
|
+
verbose=2: logger level = WARNING
|
|
198
|
+
verbose=3: logger level = INFO
|
|
199
|
+
verbose=4: logger level = DEBUG
|
|
200
|
+
verbose>5: logger level = NOTSET
|
|
193
201
|
retrain_full: bool or str, default=True | whether to retrain the
|
|
194
202
|
selected model on the full training data when using holdout.
|
|
195
203
|
True - retrain only after search finishes; False - no retraining;
|
|
@@ -424,6 +432,8 @@ class AutoML(BaseEstimator):
|
|
|
424
432
|
If `model_history` was set to True, then the returned model is trained.
|
|
425
433
|
"""
|
|
426
434
|
state = self._search_states.get(estimator_name)
|
|
435
|
+
if state and estimator_name == self._best_estimator:
|
|
436
|
+
return self.model
|
|
427
437
|
return state and getattr(state, "trained_estimator", None)
|
|
428
438
|
|
|
429
439
|
@property
|
|
@@ -1332,7 +1342,8 @@ class AutoML(BaseEstimator):
|
|
|
1332
1342
|
mem_thres: A float of the memory size constraint in bytes.
|
|
1333
1343
|
pred_time_limit: A float of the prediction latency constraint in seconds.
|
|
1334
1344
|
It refers to the average prediction time per row in validation data.
|
|
1335
|
-
train_time_limit: None or a float of the training time constraint in seconds.
|
|
1345
|
+
train_time_limit: None or a float of the training time constraint in seconds for each trial.
|
|
1346
|
+
Only valid for sequential search.
|
|
1336
1347
|
X_val: None or a numpy array or a pandas dataframe of validation data.
|
|
1337
1348
|
y_val: None or a numpy array or a pandas series of validation labels.
|
|
1338
1349
|
sample_weight_val: None or a numpy array of the sample weight of
|
|
@@ -1345,6 +1356,12 @@ class AutoML(BaseEstimator):
|
|
|
1345
1356
|
for training data.
|
|
1346
1357
|
verbose: int, default=3 | Controls the verbosity, higher means more
|
|
1347
1358
|
messages.
|
|
1359
|
+
verbose=0: logger level = CRITICAL
|
|
1360
|
+
verbose=1: logger level = ERROR
|
|
1361
|
+
verbose=2: logger level = WARNING
|
|
1362
|
+
verbose=3: logger level = INFO
|
|
1363
|
+
verbose=4: logger level = DEBUG
|
|
1364
|
+
verbose>5: logger level = NOTSET
|
|
1348
1365
|
retrain_full: bool or str, default=True | whether to retrain the
|
|
1349
1366
|
selected model on the full training data when using holdout.
|
|
1350
1367
|
True - retrain only after search finishes; False - no retraining;
|
|
@@ -1623,6 +1640,13 @@ class AutoML(BaseEstimator):
|
|
|
1623
1640
|
_ch.setFormatter(logger_formatter)
|
|
1624
1641
|
logger.addHandler(_ch)
|
|
1625
1642
|
|
|
1643
|
+
if model_history:
|
|
1644
|
+
logger.warning(
|
|
1645
|
+
"With `model_history` set to `True` by default, all intermediate models are retained in memory, "
|
|
1646
|
+
"which may significantly increase memory usage and slow down training. "
|
|
1647
|
+
"Consider setting `model_history=False` to optimize memory and accelerate the training process."
|
|
1648
|
+
)
|
|
1649
|
+
|
|
1626
1650
|
if not use_ray and not use_spark and n_concurrent_trials > 1:
|
|
1627
1651
|
if ray_available:
|
|
1628
1652
|
logger.warning(
|
|
@@ -1708,7 +1732,7 @@ class AutoML(BaseEstimator):
|
|
|
1708
1732
|
if not (mlflow.active_run() is not None or is_autolog_enabled()):
|
|
1709
1733
|
self.mlflow_integration.only_history = True
|
|
1710
1734
|
except KeyError:
|
|
1711
|
-
|
|
1735
|
+
logger.info("Not in Fabric, Skipped")
|
|
1712
1736
|
task.validate_data(
|
|
1713
1737
|
self,
|
|
1714
1738
|
self._state,
|
|
@@ -2529,6 +2553,21 @@ class AutoML(BaseEstimator):
|
|
|
2529
2553
|
self._selected = state = self._search_states[estimator]
|
|
2530
2554
|
state.best_config_sample_size = self._state.data_size[0]
|
|
2531
2555
|
state.best_config = state.init_config[0] if state.init_config else {}
|
|
2556
|
+
self._track_iter = 0
|
|
2557
|
+
self._config_history[self._track_iter] = (estimator, state.best_config, self._state.time_from_start)
|
|
2558
|
+
self._best_iteration = self._track_iter
|
|
2559
|
+
state.val_loss = getattr(state, "val_loss", float("inf"))
|
|
2560
|
+
state.best_loss = getattr(state, "best_loss", float("inf"))
|
|
2561
|
+
state.config = getattr(state, "config", state.best_config.copy())
|
|
2562
|
+
state.metric_for_logging = getattr(state, "metric_for_logging", None)
|
|
2563
|
+
state.sample_size = getattr(state, "sample_size", self._state.data_size[0])
|
|
2564
|
+
state.learner_class = getattr(state, "learner_class", self._state.learner_classes.get(estimator))
|
|
2565
|
+
if hasattr(self, "mlflow_integration") and self.mlflow_integration:
|
|
2566
|
+
self.mlflow_integration.record_state(
|
|
2567
|
+
automl=self,
|
|
2568
|
+
search_state=state,
|
|
2569
|
+
estimator=estimator,
|
|
2570
|
+
)
|
|
2532
2571
|
elif self._use_ray is False and self._use_spark is False:
|
|
2533
2572
|
self._search_sequential()
|
|
2534
2573
|
else:
|
|
@@ -2700,16 +2739,47 @@ class AutoML(BaseEstimator):
|
|
|
2700
2739
|
):
|
|
2701
2740
|
if mlflow.active_run() is None:
|
|
2702
2741
|
mlflow.start_run(run_id=self.mlflow_integration.parent_run_id)
|
|
2703
|
-
self.
|
|
2704
|
-
self.
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2742
|
+
if self.best_estimator.endswith("_spark"):
|
|
2743
|
+
self.mlflow_integration.log_model(
|
|
2744
|
+
self._trained_estimator.model,
|
|
2745
|
+
self.best_estimator,
|
|
2746
|
+
signature=self.estimator_signature,
|
|
2747
|
+
run_id=self.mlflow_integration.parent_run_id,
|
|
2748
|
+
)
|
|
2749
|
+
else:
|
|
2750
|
+
self.mlflow_integration.pickle_and_log_automl_artifacts(
|
|
2751
|
+
self,
|
|
2752
|
+
self.model,
|
|
2753
|
+
self.best_estimator,
|
|
2754
|
+
signature=self.pipeline_signature,
|
|
2755
|
+
run_id=self.mlflow_integration.parent_run_id,
|
|
2756
|
+
)
|
|
2711
2757
|
else:
|
|
2712
|
-
logger.
|
|
2758
|
+
logger.warning("not retraining because the time budget is too small.")
|
|
2759
|
+
self.wait_futures()
|
|
2760
|
+
|
|
2761
|
+
def wait_futures(self):
|
|
2762
|
+
if self.mlflow_integration is not None:
|
|
2763
|
+
logger.debug("Collecting results from submitted record_state tasks")
|
|
2764
|
+
t1 = time.perf_counter()
|
|
2765
|
+
for future in as_completed(self.mlflow_integration.futures):
|
|
2766
|
+
_task = self.mlflow_integration.futures[future]
|
|
2767
|
+
try:
|
|
2768
|
+
result = future.result()
|
|
2769
|
+
logger.debug(f"Result for record_state task {_task}: {result}")
|
|
2770
|
+
except Exception as e:
|
|
2771
|
+
logger.warning(f"Exception for record_state task {_task}: {e}")
|
|
2772
|
+
for future in as_completed(self.mlflow_integration.futures_log_model):
|
|
2773
|
+
_task = self.mlflow_integration.futures_log_model[future]
|
|
2774
|
+
try:
|
|
2775
|
+
result = future.result()
|
|
2776
|
+
logger.debug(f"Result for log_model task {_task}: {result}")
|
|
2777
|
+
except Exception as e:
|
|
2778
|
+
logger.warning(f"Exception for log_model task {_task}: {e}")
|
|
2779
|
+
t2 = time.perf_counter()
|
|
2780
|
+
logger.debug(f"Collecting results from tasks submitted to executors costs {t2-t1} seconds.")
|
|
2781
|
+
else:
|
|
2782
|
+
logger.debug("No futures to wait for.")
|
|
2713
2783
|
|
|
2714
2784
|
def __del__(self):
|
|
2715
2785
|
if (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
try:
|
|
2
2
|
from sklearn.ensemble import HistGradientBoostingClassifier, HistGradientBoostingRegressor
|
|
3
|
-
except ImportError:
|
|
4
|
-
|
|
3
|
+
except ImportError as e:
|
|
4
|
+
print(f"scikit-learn is required for HistGradientBoostingEstimator. Please install it; error: {e}")
|
|
5
5
|
|
|
6
6
|
from flaml import tune
|
|
7
7
|
from flaml.automl.model import SKLearnEstimator
|