julearn 0.3.5.dev140__tar.gz → 0.3.6.dev15__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.
Files changed (251) hide show
  1. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/PKG-INFO +1 -1
  2. julearn-0.3.6.dev15/docs/changes/newsfragments/301.misc +1 -0
  3. julearn-0.3.6.dev15/docs/changes/newsfragments/303.feature +1 -0
  4. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/configuration.rst +13 -0
  5. julearn-0.3.6.dev15/julearn/_version.py +24 -0
  6. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/api.py +52 -9
  7. julearn-0.3.6.dev15/julearn/config.py +118 -0
  8. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/_optuna_searcher.py +39 -11
  9. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/_skopt_searcher.py +24 -6
  10. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/available_searchers.py +14 -2
  11. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/available_models.py +13 -4
  12. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/pipeline_creator.py +90 -24
  13. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/prepare.py +25 -8
  14. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/scoring/available_scorers.py +15 -3
  15. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/available_transformers.py +7 -1
  16. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/drop_columns.py +2 -1
  17. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/pick_columns.py +2 -1
  18. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/set_column_types.py +10 -2
  19. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/available_target_transformers.py +4 -1
  20. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/ju_generated_target_model.py +3 -2
  21. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/logging.py +37 -1
  22. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn.egg-info/PKG-INFO +1 -1
  23. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn.egg-info/SOURCES.txt +2 -0
  24. julearn-0.3.5.dev140/julearn/_version.py +0 -34
  25. julearn-0.3.5.dev140/julearn/config.py +0 -52
  26. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  27. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  28. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/ISSUE_TEMPLATE/documentation_request.yaml +0 -0
  29. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  30. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/dependabot.yml +0 -0
  31. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/check-stale.yml +0 -0
  32. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/ci-docs.yml +0 -0
  33. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/ci.yml +0 -0
  34. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/docs-preview.yml +0 -0
  35. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/docs.yml +0 -0
  36. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/lint.yml +0 -0
  37. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.github/workflows/publish.yml +0 -0
  38. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.gitignore +0 -0
  39. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/.pre-commit-config.yaml +0 -0
  40. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/AUTHORS.rst +0 -0
  41. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/LICENSE.md +0 -0
  42. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/README.md +0 -0
  43. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/codecov.yml +0 -0
  44. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/Makefile +0 -0
  45. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_static/css/custom.css +0 -0
  46. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_static/js/custom.js +0 -0
  47. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_templates/class.rst +0 -0
  48. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_templates/function.rst +0 -0
  49. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_templates/function_warning.rst +0 -0
  50. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/_templates/versions.html +0 -0
  51. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/base.rst +0 -0
  52. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/config.rst +0 -0
  53. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/index.rst +0 -0
  54. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/inspect.rst +0 -0
  55. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/main.rst +0 -0
  56. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/model_selection.rst +0 -0
  57. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/models.rst +0 -0
  58. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/pipeline.rst +0 -0
  59. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/prepare.rst +0 -0
  60. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/scoring.rst +0 -0
  61. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/stats.rst +0 -0
  62. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/transformers.rst +0 -0
  63. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/utils.rst +0 -0
  64. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/api/viz.rst +0 -0
  65. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/available_pipeline_steps.rst +0 -0
  66. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/changes/contributors.inc +0 -0
  67. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/changes/newsfragments/.gitignore +0 -0
  68. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/conf.py +0 -0
  69. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/contributing.rst +0 -0
  70. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/examples.rst +0 -0
  71. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/faq.rst +0 -0
  72. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/getting_started.rst +0 -0
  73. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/corrected_ttest.png +0 -0
  74. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/final_estimator.png +0 -0
  75. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/iris_X.png +0 -0
  76. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/iris_df.png +0 -0
  77. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/iris_y.png +0 -0
  78. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/joblib_htcondor/condor_q.png +0 -0
  79. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/joblib_htcondor/ui_main.png +0 -0
  80. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/joblib_htcondor/ui_open.png +0 -0
  81. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/joblib_htcondor/ui_stacked.png +0 -0
  82. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo.png +0 -0
  83. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_calm.png +0 -0
  84. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_confbias.png +0 -0
  85. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_cv.png +0 -0
  86. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_generalization.png +0 -0
  87. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_it.png +0 -0
  88. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_ml.png +0 -0
  89. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/julearn_logo_mlit.png +0 -0
  90. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/multiple_scorers_run_cv.png +0 -0
  91. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/plot_scores.png +0 -0
  92. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/scores_run_cv.png +0 -0
  93. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/scores_run_cv_splitter.png +0 -0
  94. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/images/scores_run_cv_train.png +0 -0
  95. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/index.rst +0 -0
  96. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/links.inc +0 -0
  97. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/maintaining.rst +0 -0
  98. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/redirect.html +0 -0
  99. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/CBPM.rst +0 -0
  100. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/confound_removal.rst +0 -0
  101. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/cross_validation_splitter.rst +0 -0
  102. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/hyperparameter_tuning.rst +0 -0
  103. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/index.rst +0 -0
  104. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/joblib.rst +0 -0
  105. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/model_inspect.rst +0 -0
  106. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/stacked_models.rst +0 -0
  107. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/selected_deeper_topics/target_transformers.rst +0 -0
  108. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/cross_validation.rst +0 -0
  109. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/data.rst +0 -0
  110. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/index.rst +0 -0
  111. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/model_comparison.rst +0 -0
  112. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/model_evaluation.rst +0 -0
  113. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/what_really_need_know/pipeline.rst +0 -0
  114. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/docs/whats_new.rst +0 -0
  115. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/README.rst +0 -0
  116. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/plot_cm_acc_multiclass.py +0 -0
  117. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/plot_example_regression.py +0 -0
  118. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/plot_stratified_kfold_reg.py +0 -0
  119. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/run_combine_pandas.py +0 -0
  120. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/run_grouped_cv.py +0 -0
  121. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/00_starting/run_simple_binary_classification.py +0 -0
  122. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/01_model_comparison/README.rst +0 -0
  123. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/01_model_comparison/plot_simple_model_comparison.py +0 -0
  124. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/02_inspection/README.rst +0 -0
  125. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/02_inspection/plot_groupcv_inspect_svm.py +0 -0
  126. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/02_inspection/plot_inspect_random_forest.py +0 -0
  127. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/02_inspection/plot_preprocess.py +0 -0
  128. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/02_inspection/run_binary_inspect_folds.py +0 -0
  129. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/README.rst +0 -0
  130. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_apply_to_target.py +0 -0
  131. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_example_pca_featsets.py +0 -0
  132. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_generate_target.py +0 -0
  133. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_hyperparameter_multiple_grids.py +0 -0
  134. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_hyperparameter_tuning.py +0 -0
  135. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_hyperparameter_tuning_bayessearch.py +0 -0
  136. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/03_complex_models/run_stacked_models.py +0 -0
  137. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/04_confounds/README.rst +0 -0
  138. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/04_confounds/plot_confound_removal_classification.py +0 -0
  139. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/04_confounds/run_return_confounds.py +0 -0
  140. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/05_customization/README.rst +0 -0
  141. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/05_customization/run_custom_scorers_regression.py +0 -0
  142. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/README.rst +0 -0
  143. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_cbpm_docs.py +0 -0
  144. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_confound_removal_docs.py +0 -0
  145. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_cv_splitters_docs.py +0 -0
  146. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_data_docs.py +0 -0
  147. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_hyperparameters_docs.py +0 -0
  148. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_model_comparison_docs.py +0 -0
  149. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_model_evaluation_docs.py +0 -0
  150. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_model_inspection_docs.py +0 -0
  151. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_pipeline_docs.py +0 -0
  152. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_stacked_models_docs.py +0 -0
  153. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/99_docs/run_target_transformer_docs.py +0 -0
  154. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/README.rst +0 -0
  155. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/XX_disabled/dis_run_n_jobs.py +0 -0
  156. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/examples/XX_disabled/dis_run_target_confound_removal.py +0 -0
  157. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/ignore_words.txt +0 -0
  158. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/__init__.py +0 -0
  159. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/base/__init__.py +0 -0
  160. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/base/column_types.py +0 -0
  161. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/base/estimators.py +0 -0
  162. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/base/tests/test_base_estimators.py +0 -0
  163. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/base/tests/test_column_types.py +0 -0
  164. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/conftest.py +0 -0
  165. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/external/optuna_searchcv.py +0 -0
  166. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/__init__.py +0 -0
  167. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/_cv.py +0 -0
  168. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/_pipeline.py +0 -0
  169. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/_preprocess.py +0 -0
  170. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/inspector.py +0 -0
  171. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/tests/test_cv.py +0 -0
  172. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/tests/test_inspector.py +0 -0
  173. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/tests/test_pipeline.py +0 -0
  174. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/inspect/tests/test_preprocess.py +0 -0
  175. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/__init__.py +0 -0
  176. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/continuous_stratified_kfold.py +0 -0
  177. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/final_model_cv.py +0 -0
  178. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/stratified_bootstrap.py +0 -0
  179. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_available_searchers.py +0 -0
  180. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_continous_stratified_kfold.py +0 -0
  181. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_final_model_cv.py +0 -0
  182. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_optuna_searcher.py +0 -0
  183. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_skopt_searcher.py +0 -0
  184. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/tests/test_stratified_bootstrap.py +0 -0
  185. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/model_selection/utils.py +0 -0
  186. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/__init__.py +0 -0
  187. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/dynamic.py +0 -0
  188. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/tests/test_available_models.py +0 -0
  189. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/tests/test_dynamic.py +0 -0
  190. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/models/tests/test_models.py +0 -0
  191. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/__init__.py +0 -0
  192. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/merger.py +0 -0
  193. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/target_pipeline.py +0 -0
  194. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/target_pipeline_creator.py +0 -0
  195. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/tests/test_merger.py +0 -0
  196. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/tests/test_pipeline_creator.py +0 -0
  197. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/tests/test_target_pipeline.py +0 -0
  198. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/pipeline/tests/test_target_pipeline_creator.py +0 -0
  199. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/scoring/__init__.py +0 -0
  200. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/scoring/metrics.py +0 -0
  201. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/scoring/tests/test_available_scorers.py +0 -0
  202. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/scoring/tests/test_metrics.py +0 -0
  203. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/stats/__init__.py +0 -0
  204. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/stats/corrected_ttest.py +0 -0
  205. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/stats/tests/test_corrected_ttest.py +0 -0
  206. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/tests/test_api.py +0 -0
  207. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/tests/test_config.py +0 -0
  208. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/tests/test_prepare.py +0 -0
  209. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/__init__.py +0 -0
  210. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/cbpm.py +0 -0
  211. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/confound_remover.py +0 -0
  212. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/__init__.py +0 -0
  213. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/change_column_types.py +0 -0
  214. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/filter_columns.py +0 -0
  215. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/tests/test_change_column_types.py +0 -0
  216. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/tests/test_drop_columns.py +0 -0
  217. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/tests/test_filter_columns.py +0 -0
  218. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/dataframe/tests/test_set_column_types.py +0 -0
  219. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/ju_column_transformer.py +0 -0
  220. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/__init__.py +0 -0
  221. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/ju_target_transformer.py +0 -0
  222. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/ju_transformed_target_model.py +0 -0
  223. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/target_confound_remover.py +0 -0
  224. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/tests/test_available_target_transformers.py +0 -0
  225. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/tests/test_ju_generated_target_model.py +0 -0
  226. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/tests/test_ju_target_transformer.py +0 -0
  227. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/tests/test_ju_transformed_target_model.py +0 -0
  228. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/target/tests/test_target_confound_remover.py +0 -0
  229. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/tests/test_available_transformers.py +0 -0
  230. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/tests/test_cbpm.py +0 -0
  231. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/tests/test_confounds.py +0 -0
  232. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/transformers/tests/test_jucolumntransformers.py +0 -0
  233. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/__init__.py +0 -0
  234. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/_cv.py +0 -0
  235. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/checks.py +0 -0
  236. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/testing.py +0 -0
  237. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/tests/test_logging.py +0 -0
  238. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/tests/test_version.py +0 -0
  239. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/typing.py +0 -0
  240. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/utils/versions.py +0 -0
  241. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/viz/__init__.py +0 -0
  242. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/viz/_scores.py +0 -0
  243. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn/viz/res/julearn_logo_generalization.png +0 -0
  244. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn.egg-info/dependency_links.txt +0 -0
  245. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn.egg-info/requires.txt +0 -0
  246. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/julearn.egg-info/top_level.txt +0 -0
  247. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/pyproject.toml +0 -0
  248. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/setup.cfg +0 -0
  249. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/setup.py +0 -0
  250. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/tox.ini +0 -0
  251. {julearn-0.3.5.dev140 → julearn-0.3.6.dev15}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: julearn
3
- Version: 0.3.5.dev140
3
+ Version: 0.3.6.dev15
4
4
  Summary: Juelich Machine Learning Library
5
5
  Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Sami Hamdan <s.hamdan@fz-juelich.de>
6
6
  Maintainer-email: Sami Hamdan <s.hamdan@fz-juelich.de>
@@ -0,0 +1 @@
1
+ Delay log message formatting by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Allow setting of ``context_func`` for ``joblib-htcondor`` by `Fede Raimondo`_
@@ -22,15 +22,18 @@ Here you can find the comprehensive list of flags that can be set:
22
22
  :header-rows: 1
23
23
 
24
24
  * - Flag
25
+ - Value
25
26
  - Description
26
27
  - Potential problem(s)
27
28
  * - ``disable_x_check``
29
+ - ``False``
28
30
  - | Disable checking for unmatched column names in ``X``.
29
31
  | If set to ``True``, any element in ``X`` that is not present in the
30
32
  | dataframe will not result in an error.
31
33
  - | The user might think that a certain feature is used in the model when
32
34
  | it is not.
33
35
  * - ``disable_xtypes_check``
36
+ - ``False``
34
37
  - | Disable checking for missing/present ``X_types`` in the ``X`` parameter
35
38
  | of the :func:`.run_cross_validation` method.
36
39
  | If set to ``True``, the ``X_types`` parameter will not be checked for
@@ -40,14 +43,17 @@ Here you can find the comprehensive list of flags that can be set:
40
43
  - | The user might think that a certain feature is considered in the model
41
44
  | when it is not.
42
45
  * - ``disable_x_verbose``
46
+ - ``False``
43
47
  - | Disable printing the list of expanded column names in ``X``.
44
48
  | If set to ``True``, the list of column names will not be printed.
45
49
  - The user will not see the expanded column names in ``X``.
46
50
  * - ``disable_xtypes_verbose``
51
+ - ``False``
47
52
  - | Disable printing the list of expanded column names in ``X_types``.
48
53
  | If set to ``True``, the list of types of X will not be printed.
49
54
  - The user will not see the expanded ``X_types`` column names.
50
55
  * - ``enable_parallel_column_transformers``
56
+ - ``False``
51
57
  - | This flag enables parallel execution of column transformers by
52
58
  | reverting to the default behaviour of scikit-learn
53
59
  | (instead of using ``n_jobs=1``)
@@ -55,6 +61,13 @@ Here you can find the comprehensive list of flags that can be set:
55
61
  - | Column transformers will be applied in parallel, using more resources.
56
62
  | than expected.
57
63
  * - ``enable_auto_escape_parenthesis``
64
+ - ``True``
58
65
  - | This flag enables escaping parenthesis in column names.
59
66
  - | If column names include parenthesis, then they will be treated as regular
60
67
  | expression metacharacters and not regular characters.
68
+ * - ``max_x_logs``
69
+ - ``100``
70
+ - | This flag sets the maximum number of columns in ``X`` for which the
71
+ | column names will be printed.
72
+ - | If ``X`` has more columns than this value, the column names will
73
+ | not be printed, and a the number of columns will be displayed instead.
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '0.3.6.dev15'
22
+ __version_tuple__ = version_tuple = (0, 3, 6, 'dev15')
23
+
24
+ __commit_id__ = commit_id = 'g4baf848be'
@@ -10,6 +10,7 @@ from typing import Optional, Union
10
10
  import numpy as np
11
11
  import pandas as pd
12
12
  import sklearn
13
+ from joblib.parallel import get_active_backend
13
14
  from sklearn.base import BaseEstimator
14
15
  from sklearn.model_selection import (
15
16
  cross_validate,
@@ -17,6 +18,7 @@ from sklearn.model_selection import (
17
18
  from sklearn.model_selection._search import BaseSearchCV
18
19
  from sklearn.pipeline import Pipeline
19
20
 
21
+ from .config import _joblib_htcondor_context_func
20
22
  from .inspect import Inspector
21
23
  from .model_selection.utils import check_cv
22
24
  from .pipeline import PipelineCreator
@@ -24,6 +26,7 @@ from .pipeline.merger import merge_pipelines
24
26
  from .prepare import check_consistency, prepare_input_data
25
27
  from .scoring import check_scoring
26
28
  from .utils import _compute_cvmdsum, logger, raise_error
29
+ from .utils.logging import DelayedFmtMessage as __
27
30
  from .utils.typing import CVLike
28
31
 
29
32
 
@@ -185,7 +188,7 @@ def _validate_api_params( # noqa: C901
185
188
  if seed is not None:
186
189
  # If a seed is passed, use it, otherwise do not do anything. User
187
190
  # might have set the seed outside of the library
188
- logger.info(f"Setting random seed to {seed}")
191
+ logger.info(__("Setting random seed to {seed}", seed=seed))
189
192
  np.random.seed(seed)
190
193
 
191
194
  # Interpret the input data and prepare it to be used with the library
@@ -341,18 +344,32 @@ def _validate_api_params( # noqa: C901
341
344
 
342
345
  # Log some information
343
346
  logger.info("= Data Information =")
344
- logger.info(f"\tProblem type: {problem_type}")
345
- logger.info(f"\tNumber of samples: {len(df_X)}")
346
- logger.info(f"\tNumber of features: {len(df_X.columns)}")
347
+ logger.info(
348
+ __("\tProblem type: {problem_type}", problem_type=problem_type)
349
+ )
350
+ logger.info(__("\tNumber of samples: {n_samples}", n_samples=len(df_X)))
351
+ logger.info(
352
+ __("\tNumber of features: {n_features}", n_features=len(df_X.columns))
353
+ )
347
354
  logger.info("====================")
348
355
  logger.info("")
349
356
 
350
357
  if problem_type == "classification":
351
- logger.info(f"\tNumber of classes: {len(np.unique(df_y))}")
352
- logger.info(f"\tTarget type: {df_y.dtype}")
353
- logger.info(f"\tClass distributions: {df_y.value_counts()}")
358
+ logger.info(
359
+ __(
360
+ "\tNumber of classes: {n_classes}",
361
+ n_classes=len(np.unique(df_y)),
362
+ )
363
+ )
364
+ logger.info(__("\tTarget type: {target_type}", target_type=df_y.dtype))
365
+ logger.info(
366
+ __(
367
+ "\tClass distributions: {class_distributions}",
368
+ class_distributions=df_y.value_counts(),
369
+ )
370
+ )
354
371
  elif problem_type == "regression":
355
- logger.info(f"\tTarget type: {df_y.dtype}")
372
+ logger.info(__("\tTarget type: {target_type}", target_type=df_y.dtype))
356
373
 
357
374
  out = (
358
375
  df_X,
@@ -367,6 +384,28 @@ def _validate_api_params( # noqa: C901
367
384
  return out
368
385
 
369
386
 
387
+ def _check_configure_joblib_backend() -> None:
388
+ """Check and configure if we are running in a joblib parallel backend."""
389
+ backend, _ = get_active_backend()
390
+
391
+ # If we are in an HTCondor backend, we need to set the context function to
392
+ # set the global configuration variables from both julearn and scikit-
393
+ # learn, as these are not automatically propagated to the workers in
394
+ # non-shared memory backends.
395
+ if backend.__class__.__name__ == "_HTCondorBackend":
396
+ if hasattr(backend, "_context_func"):
397
+ backend._context_func = _joblib_htcondor_context_func(
398
+ current_func=backend._context_func
399
+ )
400
+ else:
401
+ raise_error(
402
+ "Running in an HTCondor backend, but it does not have a "
403
+ "_context_func attribute. Global configuration variables "
404
+ "will not be propagated to the workers. Please update your "
405
+ "joblib-htcondor package to version 0.2.3 or higher."
406
+ )
407
+
408
+
370
409
  def run_cross_validation(
371
410
  X: list[str], # noqa: N803
372
411
  y: str,
@@ -563,7 +602,7 @@ def run_cross_validation(
563
602
  classifier=problem_type == "classification",
564
603
  include_final_model=include_final_model,
565
604
  )
566
- logger.info(f"Using outer CV scheme {cv_outer}")
605
+ logger.info(__("Using outer CV scheme {cv_outer}", cv_outer=cv_outer))
567
606
 
568
607
  groups_needed = check_consistency(df_y, cv, groups, problem_type) # type: ignore
569
608
 
@@ -598,6 +637,8 @@ def run_cross_validation(
598
637
  else:
599
638
  _sklearn_deprec_fit_params["fit_params"] = fit_params
600
639
 
640
+ _check_configure_joblib_backend()
641
+
601
642
  scores = cross_validate(
602
643
  pipeline,
603
644
  df_X,
@@ -820,6 +861,8 @@ def run_fit(
820
861
  else:
821
862
  _sklearn_deprec_fit_params["fit_params"] = fit_params
822
863
 
864
+ _check_configure_joblib_backend()
865
+
823
866
  logger.info("Fitting final model")
824
867
  pipeline.fit(df_X, df_y, **fit_params)
825
868
 
@@ -0,0 +1,118 @@
1
+ """Global config module."""
2
+
3
+ # Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ from typing import Any
7
+
8
+ from .utils import logger, raise_error
9
+ from .utils.logging import DelayedFmtMessage as __
10
+
11
+
12
+ _global_config = {}
13
+ _global_config["MAX_X_WARNS"] = 5000
14
+ _global_config["max_x_logs"] = 100
15
+ _global_config["disable_x_check"] = False
16
+ _global_config["disable_xtypes_check"] = False
17
+ _global_config["disable_x_verbose"] = False
18
+ _global_config["disable_xtypes_verbose"] = False
19
+ _global_config["enable_parallel_column_transformers"] = False
20
+ _global_config["enable_auto_escape_parenthesis"] = True
21
+
22
+
23
+ def set_config(key: str, value: Any) -> None:
24
+ """Set a global config value.
25
+
26
+ Parameters
27
+ ----------
28
+ key : str
29
+ The key to set.
30
+ value : Any
31
+ The value to set.
32
+
33
+ """
34
+ if key not in _global_config:
35
+ raise_error(f"Global config {key} does not exist")
36
+ logger.info(
37
+ __("Setting global config {key} to {value}", key=key, value=value)
38
+ )
39
+ _global_config[key] = value
40
+
41
+
42
+ def get_config(key: str) -> Any:
43
+ """Get a global config value.
44
+
45
+ Parameters
46
+ ----------
47
+ key : str
48
+ The key to get.
49
+
50
+ Returns
51
+ -------
52
+ Any
53
+ The value of the key.
54
+
55
+ """
56
+ return _global_config.get(key, None)
57
+
58
+
59
+ def _joblib_htcondor_context_func(current_func=None) -> None:
60
+ """Create a function to seet the config variables.
61
+
62
+ Parameters
63
+ ----------
64
+ current_func : function
65
+ The current function that was set in the joblib context. If not None,
66
+ it will be called before setting the config variables (default None).
67
+
68
+ Returns
69
+ -------
70
+ function
71
+ A function to set the config variables.
72
+
73
+ """
74
+ from copy import deepcopy
75
+ from functools import partial
76
+
77
+ import sklearn
78
+
79
+ # Copy the global config
80
+ _config = {}
81
+ _config["julearn_config"] = deepcopy(_global_config)
82
+
83
+ _config["sklearn_config"] = sklearn.get_config()
84
+
85
+ # add the logging configuration
86
+ level = logger.level
87
+ fmt = None
88
+ if len(logger.handlers) > 0:
89
+ fmt = logger.handlers[0].formatter._fmt # type: ignore
90
+
91
+ _config["julearn_logging_config"] = {
92
+ "level": level,
93
+ "output_format": fmt,
94
+ }
95
+
96
+ # Log the current function, if any, to be called before setting the config
97
+ _config["jht_current_func"] = current_func
98
+
99
+ def _set_context_vars(**kwargs):
100
+ # First, call the previous function
101
+ jht_current_func = kwargs.pop("jht_current_func")
102
+ if jht_current_func is not None:
103
+ jht_current_func()
104
+
105
+ # Julearn then sets the config variables. If user has set any variable
106
+ # in the context function, current julearn state should override this
107
+ # setting.
108
+ for key, value in kwargs.items():
109
+ if key == "sklearn_config":
110
+ sklearn.set_config(**value)
111
+ elif key == "julearn_logging_config":
112
+ from julearn.utils import configure_logging
113
+ configure_logging(**value)
114
+ elif key == "julearn_config":
115
+ for k, v in value.items():
116
+ set_config(k, v)
117
+
118
+ return partial(_set_context_vars, **_config) # type: ignore
@@ -6,6 +6,7 @@
6
6
  from typing import Any
7
7
 
8
8
  from ..utils import logger
9
+ from ..utils.logging import DelayedFmtMessage as __
9
10
  from .available_searchers import _recreate_reset_copy, register_searcher
10
11
 
11
12
 
@@ -90,32 +91,57 @@ def _prepare_optuna_hyperparameters_distributions(
90
91
  if v[2] == "uniform":
91
92
  if isinstance(v[0], int) and isinstance(v[1], int):
92
93
  logger.info(
93
- f"Hyperparameter {k} is uniform integer "
94
- f"[{v[0]}, {v[1]}]"
94
+ __(
95
+ "Hyperparameter {k} is uniform integer "
96
+ "[{v1}, {v2}]",
97
+ k=k,
98
+ v1=v[0],
99
+ v2=v[1],
100
+ )
95
101
  )
96
102
  out[k] = optd.IntDistribution(v[0], v[1], log=False)
97
103
  else:
98
104
  logger.info(
99
- f"Hyperparameter {k} is uniform float [{v[0]}, {v[1]}]"
105
+ __(
106
+ "Hyperparameter {k} is uniform float [{v1}, {v2}]",
107
+ k=k,
108
+ v1=v[0],
109
+ v2=v[1],
110
+ )
100
111
  )
101
112
  out[k] = optd.FloatDistribution(v[0], v[1], log=False)
102
113
  elif v[2] == "log-uniform":
103
114
  if isinstance(v[0], int) and isinstance(v[1], int):
104
115
  logger.info(
105
- f"Hyperparameter {k} is log-uniform int "
106
- f"[{v[0]}, {v[1]}]"
116
+ __(
117
+ "Hyperparameter {k} is log-uniform int "
118
+ "[{v1}, {v2}]",
119
+ k=k,
120
+ v1=v[0],
121
+ v2=v[1],
122
+ )
107
123
  )
108
124
  out[k] = optd.IntDistribution(v[0], v[1], log=True)
109
125
  else:
110
126
  logger.info(
111
- f"Hyperparameter {k} is log-uniform float "
112
- f"[{v[0]}, {v[1]}]"
127
+ __(
128
+ "Hyperparameter {k} is log-uniform float "
129
+ "[{v1}, {v2}]",
130
+ k=k,
131
+ v1=v[0],
132
+ v2=v[1],
133
+ )
113
134
  )
114
135
  out[k] = optd.FloatDistribution(v[0], v[1], log=True)
115
136
  elif v[2] == "categorical":
116
137
  logger.info(
117
- f"Hyperparameter {k} is categorical with 2 "
118
- f"options: [{v[0]} and {v[1]}]"
138
+ __(
139
+ "Hyperparameter {k} is categorical with 2 "
140
+ "options: [{v1} and {v2}]",
141
+ k=k,
142
+ v1=v[0],
143
+ v2=v[1],
144
+ )
119
145
  )
120
146
  out[k] = optd.CategoricalDistribution((v[0], v[1]))
121
147
  else:
@@ -125,9 +151,11 @@ def _prepare_optuna_hyperparameters_distributions(
125
151
  and isinstance(v[-1], str)
126
152
  and v[-1] == "categorical"
127
153
  ):
128
- logger.info(f"Hyperparameter {k} is categorical [{v[:-1]}]")
154
+ logger.info(
155
+ __("Hyperparameter {k} is categorical [{v}]", k=k, v=v[:-1])
156
+ )
129
157
  out[k] = optd.CategoricalDistribution(v[:-1])
130
158
  else:
131
- logger.info(f"Hyperparameter {k} as is {v}")
159
+ logger.info(__("Hyperparameter {k} as is {v}", k=k, v=v))
132
160
  out[k] = v
133
161
  return out
@@ -6,6 +6,7 @@
6
6
  from typing import Any
7
7
 
8
8
  from ..utils import logger
9
+ from ..utils.logging import DelayedFmtMessage as __
9
10
  from .available_searchers import _recreate_reset_copy, register_searcher
10
11
 
11
12
 
@@ -65,22 +66,39 @@ def _prepare_skopt_hyperparameters_distributions(
65
66
  prior = v[2]
66
67
  if prior == "categorical":
67
68
  logger.info(
68
- f"Hyperparameter {k} is categorical with 2 "
69
- f"options: [{v[0]} and {v[1]}]"
69
+ __(
70
+ "Hyperparameter {k} is categorical with 2 "
71
+ "options: [{v1} and {v2}]",
72
+ k=k,
73
+ v1=v[0],
74
+ v2=v[1],
75
+ )
70
76
  )
71
77
  out[k] = sksp.Categorical(v[:-1])
72
78
  elif isinstance(v[0], int) and isinstance(v[1], int):
73
79
  logger.info(
74
- f"Hyperparameter {k} is {prior} integer [{v[0]}, {v[1]}]"
80
+ __(
81
+ "Hyperparameter {k} is {prior} integer [{v1}, {v2}]",
82
+ k=k,
83
+ prior=prior,
84
+ v1=v[0],
85
+ v2=v[1],
86
+ )
75
87
  )
76
88
  out[k] = sksp.Integer(v[0], v[1], prior=prior)
77
89
  elif isinstance(v[0], float) and isinstance(v[1], float):
78
90
  logger.info(
79
- f"Hyperparameter {k} is {prior} float [{v[0]}, {v[1]}]"
91
+ __(
92
+ "Hyperparameter {k} is {prior} float [{v1}, {v2}]",
93
+ k=k,
94
+ prior=prior,
95
+ v1=v[0],
96
+ v2=v[1],
97
+ )
80
98
  )
81
99
  out[k] = sksp.Real(v[0], v[1], prior=prior)
82
100
  else:
83
- logger.info(f"Hyperparameter {k} as is {v}")
101
+ logger.info(__("Hyperparameter {k} as is {v}", k=k, v=v))
84
102
  out[k] = v
85
103
  elif (
86
104
  isinstance(v, tuple)
@@ -89,6 +107,6 @@ def _prepare_skopt_hyperparameters_distributions(
89
107
  ):
90
108
  out[k] = sksp.Categorical(v[:-1])
91
109
  else:
92
- logger.info(f"Hyperparameter {k} as is {v}")
110
+ logger.info(__("Hyperparameter {k} as is {v}", k=k, v=v))
93
111
  out[k] = v
94
112
  return out
@@ -9,7 +9,14 @@ from typing import Optional, Union
9
9
 
10
10
  from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
11
11
 
12
- from julearn.utils.logging import logger, raise_error, warn_with_log
12
+ from julearn.utils.logging import (
13
+ DelayedFmtMessage as __,
14
+ )
15
+ from julearn.utils.logging import (
16
+ logger,
17
+ raise_error,
18
+ warn_with_log,
19
+ )
13
20
 
14
21
 
15
22
  _available_searchers = {
@@ -125,7 +132,12 @@ def register_searcher(
125
132
  "Set `overwrite=True` in case you want to "
126
133
  "overwrite existing searchers."
127
134
  )
128
- logger.info(f"Registering new searcher: {searcher_name}")
135
+ logger.info(
136
+ __(
137
+ "Registering new searcher: {searcher_name}",
138
+ searcher_name=searcher_name,
139
+ )
140
+ )
129
141
  _available_searchers[searcher_name] = {
130
142
  "class": searcher,
131
143
  "params_attr": params_attr,
@@ -47,6 +47,7 @@ from sklearn.naive_bayes import (
47
47
  from sklearn.svm import SVC, SVR
48
48
 
49
49
  from ..utils import logger, raise_error, warn_with_log
50
+ from ..utils.logging import DelayedFmtMessage as __
50
51
  from ..utils.typing import ModelLike
51
52
  from .dynamic import DynamicSelection
52
53
 
@@ -256,15 +257,23 @@ def register_model(
256
257
  )
257
258
 
258
259
  logger.info(
259
- f"registering model named {model_name} "
260
- f"with problem_type {problem_type}"
260
+ __(
261
+ "registering model named {model_name} "
262
+ "with problem_type {problem_type}",
263
+ model_name=model_name,
264
+ problem_type=problem_type,
265
+ )
261
266
  )
262
267
 
263
268
  _available_models[model_name][problem_type] = cls
264
269
  else:
265
270
  logger.info(
266
- f"registering model named {model_name} "
267
- f"with problem_type {problem_type}"
271
+ __(
272
+ "registering model named {model_name} "
273
+ "with problem_type {problem_type}",
274
+ model_name=model_name,
275
+ problem_type=problem_type,
276
+ )
268
277
  )
269
278
  _available_models[model_name] = {problem_type: cls}
270
279