julearn 0.3.5.dev117__tar.gz → 0.3.5.dev134__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 (265) hide show
  1. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/PKG-INFO +4 -4
  2. julearn-0.3.5.dev134/docs/changes/newsfragments/298.bugfix +1 -0
  3. julearn-0.3.5.dev134/docs/changes/newsfragments/299.misc +1 -0
  4. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_cm_acc_multiclass.py +1 -1
  5. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_tuning_bayessearch.py +5 -0
  6. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_inspection_docs.py +1 -0
  7. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/_version.py +3 -3
  8. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/api.py +28 -13
  9. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/conftest.py +8 -0
  10. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/final_model_cv.py +17 -6
  11. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/pipeline_creator.py +12 -0
  12. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/prepare.py +38 -12
  13. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_api.py +0 -1
  14. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_prepare.py +10 -1
  15. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/confound_remover.py +1 -1
  16. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/testing.py +5 -1
  17. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/PKG-INFO +4 -4
  18. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/SOURCES.txt +3 -0
  19. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/requires.txt +3 -3
  20. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/pyproject.toml +3 -3
  21. julearn-0.3.5.dev134/uv.lock +4047 -0
  22. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  23. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/documentation_request.yaml +0 -0
  25. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  26. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/dependabot.yml +0 -0
  27. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/check-stale.yml +0 -0
  28. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/ci-docs.yml +0 -0
  29. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/ci.yml +0 -0
  30. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/docs-preview.yml +0 -0
  31. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/docs.yml +0 -0
  32. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/lint.yml +0 -0
  33. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.github/workflows/publish.yml +0 -0
  34. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.gitignore +0 -0
  35. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/.pre-commit-config.yaml +0 -0
  36. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/AUTHORS.rst +0 -0
  37. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/LICENSE.md +0 -0
  38. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/README.md +0 -0
  39. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/codecov.yml +0 -0
  40. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/Makefile +0 -0
  41. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_static/css/custom.css +0 -0
  42. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_static/js/custom.js +0 -0
  43. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/class.rst +0 -0
  44. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/function.rst +0 -0
  45. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/function_warning.rst +0 -0
  46. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/_templates/versions.html +0 -0
  47. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/base.rst +0 -0
  48. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/config.rst +0 -0
  49. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/index.rst +0 -0
  50. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/inspect.rst +0 -0
  51. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/main.rst +0 -0
  52. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/model_selection.rst +0 -0
  53. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/models.rst +0 -0
  54. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/pipeline.rst +0 -0
  55. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/prepare.rst +0 -0
  56. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/scoring.rst +0 -0
  57. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/stats.rst +0 -0
  58. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/transformers.rst +0 -0
  59. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/utils.rst +0 -0
  60. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/api/viz.rst +0 -0
  61. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/available_pipeline_steps.rst +0 -0
  62. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/contributors.inc +0 -0
  63. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/.gitignore +0 -0
  64. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/226.bugfix +0 -0
  65. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/226.feature +0 -0
  66. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/254.bugfix +0 -0
  67. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/254.change +0 -0
  68. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/277.enh +0 -0
  69. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/278.doc +0 -0
  70. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/279.doc +0 -0
  71. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/282.doc +0 -0
  72. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/283.doc +0 -0
  73. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/284.misc +0 -0
  74. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/285.bugfix +0 -0
  75. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/286.bugfix +0 -0
  76. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/288.bugfix +0 -0
  77. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/291.bugfix +0 -0
  78. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/297.bugfix +0 -0
  79. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/changes/newsfragments/297.misc +0 -0
  80. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/conf.py +0 -0
  81. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/configuration.rst +0 -0
  82. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/contributing.rst +0 -0
  83. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/examples.rst +0 -0
  84. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/faq.rst +0 -0
  85. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/getting_started.rst +0 -0
  86. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/corrected_ttest.png +0 -0
  87. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/final_estimator.png +0 -0
  88. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_X.png +0 -0
  89. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_df.png +0 -0
  90. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/iris_y.png +0 -0
  91. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/condor_q.png +0 -0
  92. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_main.png +0 -0
  93. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_open.png +0 -0
  94. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/joblib_htcondor/ui_stacked.png +0 -0
  95. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo.png +0 -0
  96. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_calm.png +0 -0
  97. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_confbias.png +0 -0
  98. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_cv.png +0 -0
  99. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_generalization.png +0 -0
  100. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_it.png +0 -0
  101. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_ml.png +0 -0
  102. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/julearn_logo_mlit.png +0 -0
  103. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/multiple_scorers_run_cv.png +0 -0
  104. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/plot_scores.png +0 -0
  105. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv.png +0 -0
  106. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv_splitter.png +0 -0
  107. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/images/scores_run_cv_train.png +0 -0
  108. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/index.rst +0 -0
  109. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/links.inc +0 -0
  110. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/maintaining.rst +0 -0
  111. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/redirect.html +0 -0
  112. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/CBPM.rst +0 -0
  113. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/confound_removal.rst +0 -0
  114. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/cross_validation_splitter.rst +0 -0
  115. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/hyperparameter_tuning.rst +0 -0
  116. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/index.rst +0 -0
  117. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/joblib.rst +0 -0
  118. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/model_inspect.rst +0 -0
  119. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/stacked_models.rst +0 -0
  120. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/selected_deeper_topics/target_transformers.rst +0 -0
  121. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/cross_validation.rst +0 -0
  122. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/data.rst +0 -0
  123. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/index.rst +0 -0
  124. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/model_comparison.rst +0 -0
  125. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/model_evaluation.rst +0 -0
  126. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/what_really_need_know/pipeline.rst +0 -0
  127. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/docs/whats_new.rst +0 -0
  128. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/README.rst +0 -0
  129. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_example_regression.py +0 -0
  130. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/plot_stratified_kfold_reg.py +0 -0
  131. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_combine_pandas.py +0 -0
  132. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_grouped_cv.py +0 -0
  133. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/00_starting/run_simple_binary_classification.py +0 -0
  134. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/01_model_comparison/README.rst +0 -0
  135. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/01_model_comparison/plot_simple_model_comparison.py +0 -0
  136. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/README.rst +0 -0
  137. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_groupcv_inspect_svm.py +0 -0
  138. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_inspect_random_forest.py +0 -0
  139. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/plot_preprocess.py +0 -0
  140. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/02_inspection/run_binary_inspect_folds.py +0 -0
  141. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/README.rst +0 -0
  142. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_apply_to_target.py +0 -0
  143. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_example_pca_featsets.py +0 -0
  144. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_generate_target.py +0 -0
  145. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_multiple_grids.py +0 -0
  146. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_hyperparameter_tuning.py +0 -0
  147. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/03_complex_models/run_stacked_models.py +0 -0
  148. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/README.rst +0 -0
  149. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/plot_confound_removal_classification.py +0 -0
  150. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/04_confounds/run_return_confounds.py +0 -0
  151. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/05_customization/README.rst +0 -0
  152. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/05_customization/run_custom_scorers_regression.py +0 -0
  153. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/README.rst +0 -0
  154. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_cbpm_docs.py +0 -0
  155. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_confound_removal_docs.py +0 -0
  156. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_cv_splitters_docs.py +0 -0
  157. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_data_docs.py +0 -0
  158. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_hyperparameters_docs.py +0 -0
  159. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_comparison_docs.py +0 -0
  160. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_model_evaluation_docs.py +0 -0
  161. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_pipeline_docs.py +0 -0
  162. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_stacked_models_docs.py +0 -0
  163. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/99_docs/run_target_transformer_docs.py +0 -0
  164. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/README.rst +0 -0
  165. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/XX_disabled/dis_run_n_jobs.py +0 -0
  166. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/examples/XX_disabled/dis_run_target_confound_removal.py +0 -0
  167. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/ignore_words.txt +0 -0
  168. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/__init__.py +0 -0
  169. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/__init__.py +0 -0
  170. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/column_types.py +0 -0
  171. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/estimators.py +0 -0
  172. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/tests/test_base_estimators.py +0 -0
  173. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/base/tests/test_column_types.py +0 -0
  174. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/config.py +0 -0
  175. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/external/optuna_searchcv.py +0 -0
  176. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/__init__.py +0 -0
  177. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_cv.py +0 -0
  178. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_pipeline.py +0 -0
  179. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/_preprocess.py +0 -0
  180. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/inspector.py +0 -0
  181. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_cv.py +0 -0
  182. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_inspector.py +0 -0
  183. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_pipeline.py +0 -0
  184. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/inspect/tests/test_preprocess.py +0 -0
  185. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/__init__.py +0 -0
  186. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/_optuna_searcher.py +0 -0
  187. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/_skopt_searcher.py +0 -0
  188. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/available_searchers.py +0 -0
  189. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/continuous_stratified_kfold.py +0 -0
  190. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/stratified_bootstrap.py +0 -0
  191. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_available_searchers.py +0 -0
  192. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_continous_stratified_kfold.py +0 -0
  193. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_final_model_cv.py +0 -0
  194. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_optuna_searcher.py +0 -0
  195. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_skopt_searcher.py +0 -0
  196. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/tests/test_stratified_bootstrap.py +0 -0
  197. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/model_selection/utils.py +0 -0
  198. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/__init__.py +0 -0
  199. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/available_models.py +0 -0
  200. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/dynamic.py +0 -0
  201. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_available_models.py +0 -0
  202. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_dynamic.py +0 -0
  203. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/models/tests/test_models.py +0 -0
  204. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/__init__.py +0 -0
  205. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/merger.py +0 -0
  206. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/target_pipeline.py +0 -0
  207. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/target_pipeline_creator.py +0 -0
  208. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_merger.py +0 -0
  209. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_pipeline_creator.py +0 -0
  210. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_target_pipeline.py +0 -0
  211. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/pipeline/tests/test_target_pipeline_creator.py +0 -0
  212. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/__init__.py +0 -0
  213. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/available_scorers.py +0 -0
  214. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/metrics.py +0 -0
  215. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/tests/test_available_scorers.py +0 -0
  216. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/scoring/tests/test_metrics.py +0 -0
  217. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/__init__.py +0 -0
  218. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/corrected_ttest.py +0 -0
  219. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/stats/tests/test_corrected_ttest.py +0 -0
  220. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/tests/test_config.py +0 -0
  221. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/__init__.py +0 -0
  222. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/available_transformers.py +0 -0
  223. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/cbpm.py +0 -0
  224. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/__init__.py +0 -0
  225. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/change_column_types.py +0 -0
  226. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/drop_columns.py +0 -0
  227. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/filter_columns.py +0 -0
  228. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/pick_columns.py +0 -0
  229. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/set_column_types.py +0 -0
  230. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_change_column_types.py +0 -0
  231. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_drop_columns.py +0 -0
  232. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_filter_columns.py +0 -0
  233. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/dataframe/tests/test_set_column_types.py +0 -0
  234. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/ju_column_transformer.py +0 -0
  235. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/__init__.py +0 -0
  236. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/available_target_transformers.py +0 -0
  237. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_generated_target_model.py +0 -0
  238. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_target_transformer.py +0 -0
  239. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/ju_transformed_target_model.py +0 -0
  240. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/target_confound_remover.py +0 -0
  241. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_available_target_transformers.py +0 -0
  242. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_generated_target_model.py +0 -0
  243. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_target_transformer.py +0 -0
  244. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_ju_transformed_target_model.py +0 -0
  245. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/target/tests/test_target_confound_remover.py +0 -0
  246. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_available_transformers.py +0 -0
  247. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_cbpm.py +0 -0
  248. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_confounds.py +0 -0
  249. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/transformers/tests/test_jucolumntransformers.py +0 -0
  250. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/__init__.py +0 -0
  251. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/_cv.py +0 -0
  252. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/checks.py +0 -0
  253. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/logging.py +0 -0
  254. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/tests/test_logging.py +0 -0
  255. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/tests/test_version.py +0 -0
  256. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/typing.py +0 -0
  257. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/utils/versions.py +0 -0
  258. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/__init__.py +0 -0
  259. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/_scores.py +0 -0
  260. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn/viz/res/julearn_logo_generalization.png +0 -0
  261. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/dependency_links.txt +0 -0
  262. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/julearn.egg-info/top_level.txt +0 -0
  263. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/setup.cfg +0 -0
  264. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/setup.py +0 -0
  265. {julearn-0.3.5.dev117 → julearn-0.3.5.dev134}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: julearn
3
- Version: 0.3.5.dev117
3
+ Version: 0.3.5.dev134
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>
@@ -27,10 +27,10 @@ Requires-Python: >=3.9
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE.md
29
29
  License-File: AUTHORS.rst
30
- Requires-Dist: numpy<2.0.0,>=1.26.0
31
- Requires-Dist: pandas<2.4.0,>=2.0.0
30
+ Requires-Dist: numpy<3.0.0,>=1.26.0
31
+ Requires-Dist: pandas<4.0.0,>=2.1.0
32
32
  Requires-Dist: statsmodels<0.15,>=0.13
33
- Requires-Dist: scikit-learn<1.8.0,>=1.5.0
33
+ Requires-Dist: scikit-learn<1.9.0,>=1.5.0
34
34
  Requires-Dist: looseversion==1.3.0; python_version >= "3.12"
35
35
  Provides-Extra: dev
36
36
  Requires-Dist: tox; extra == "dev"
@@ -0,0 +1 @@
1
+ Enable and use metadata routing for hyperparameter tuning estimators by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Update versions of dependencies in pyproject.toml to support pandas 3.X.X, numpy 2.X.X and scikit-learn 1.8.X by `Fede Raimondo`_
@@ -89,7 +89,7 @@ print(cm)
89
89
  ###############################################################################
90
90
  # Now that we have our confusion matrix, let's build another matrix with
91
91
  # annotations.
92
- cm_sum = np.sum(cm, axis=1, keepdims=True)
92
+ cm_sum = np.sum(cm, axis=1)
93
93
  cm_perc = cm / cm_sum.astype(float) * 100
94
94
  annot = np.empty_like(cm).astype(str)
95
95
  nrows, ncols = cm.shape
@@ -19,6 +19,7 @@ References
19
19
 
20
20
  import numpy as np
21
21
  from seaborn import load_dataset
22
+ import sklearn
22
23
 
23
24
  from julearn import run_cross_validation
24
25
  from julearn.utils import configure_logging, logger
@@ -29,6 +30,10 @@ from julearn.pipeline import PipelineCreator
29
30
  # Set the logging level to info to see extra information.
30
31
  configure_logging(level="INFO")
31
32
 
33
+ ###############################################################################
34
+ # Disable metadata routing to avoid errors due to BayesSearchCV being used.
35
+ sklearn.set_config(enable_metadata_routing=False)
36
+
32
37
  ###############################################################################
33
38
  # Set the random seed to always have the same example.
34
39
  np.random.seed(42)
@@ -57,6 +57,7 @@ penguins_df = penguins_df.query("species != 'Chinstrap'").dropna()
57
57
  penguins_df["species"] = penguins_df["species"].replace(
58
58
  {"Adelie": 0, "Gentoo": 1}
59
59
  )
60
+ penguins_df["species"] = penguins_df["species"].astype(int)
60
61
  features = [x for x in penguins_df.columns if x != "species"]
61
62
 
62
63
  ##############################################################################
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.3.5.dev117'
32
- __version_tuple__ = version_tuple = (0, 3, 5, 'dev117')
31
+ __version__ = version = '0.3.5.dev134'
32
+ __version_tuple__ = version_tuple = (0, 3, 5, 'dev134')
33
33
 
34
- __commit_id__ = commit_id = 'gb64469b80'
34
+ __commit_id__ = commit_id = 'g92ed90a44'
@@ -4,6 +4,7 @@
4
4
  # Sami Hamdan <s.hamdan@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
+ import inspect
7
8
  from typing import Optional, Union
8
9
 
9
10
  import numpy as np
@@ -26,7 +27,10 @@ from .utils import _compute_cvmdsum, logger, raise_error
26
27
  from .utils.typing import CVLike
27
28
 
28
29
 
29
- def _validata_api_params( # noqa: C901
30
+ sklearn.set_config(enable_metadata_routing=True)
31
+
32
+
33
+ def _validate_api_params( # noqa: C901
30
34
  X: list[str], # noqa: N803
31
35
  y: str,
32
36
  model: Union[str, PipelineCreator, BaseEstimator, list[PipelineCreator]],
@@ -533,7 +537,7 @@ def run_cross_validation(
533
537
  return_inspector,
534
538
  wrap_score,
535
539
  problem_type,
536
- ) = _validata_api_params(
540
+ ) = _validate_api_params(
537
541
  X=X,
538
542
  y=y,
539
543
  model=model,
@@ -561,7 +565,7 @@ def run_cross_validation(
561
565
  )
562
566
  logger.info(f"Using outer CV scheme {cv_outer}")
563
567
 
564
- check_consistency(df_y, cv, groups, problem_type) # type: ignore
568
+ groups_needed = check_consistency(df_y, cv, groups, problem_type) # type: ignore
565
569
 
566
570
  scoring = check_scoring(
567
571
  pipeline, # type: ignore
@@ -570,16 +574,28 @@ def run_cross_validation(
570
574
  )
571
575
 
572
576
  cv_mdsum = _compute_cvmdsum(cv_outer)
573
- fit_params = {}
574
- if df_groups is not None:
575
- if isinstance(pipeline, BaseSearchCV):
576
- fit_params["groups"] = df_groups.values
577
577
 
578
+ fit_params = {}
578
579
  _sklearn_deprec_fit_params = {}
579
- if sklearn.__version__ >= "1.4.0":
580
- _sklearn_deprec_fit_params["params"] = fit_params
581
- else:
582
- _sklearn_deprec_fit_params["fit_params"] = fit_params
580
+
581
+ if df_groups is not None:
582
+ if groups_needed:
583
+ # If we need groups, we have to pass them to the fit method of
584
+ # the last step of the pipeline
585
+ if not isinstance(pipeline, BaseSearchCV):
586
+ last_step = pipeline.steps[-1][1]
587
+ argspec = inspect.getfullargspec(last_step.fit)
588
+ if "groups" in argspec.args:
589
+ logger.debug(
590
+ "Pipeline's last step uses groups," \
591
+ "calling `set_fit_request(groups=True)`")
592
+ last_step.set_fit_request(groups=True)
593
+ fit_params["groups"] = df_groups.values
594
+
595
+ if sklearn.__version__ >= "1.4.0":
596
+ _sklearn_deprec_fit_params["params"] = fit_params
597
+ else:
598
+ _sklearn_deprec_fit_params["fit_params"] = fit_params
583
599
 
584
600
  scores = cross_validate(
585
601
  pipeline,
@@ -587,7 +603,6 @@ def run_cross_validation(
587
603
  df_y,
588
604
  cv=cv_outer,
589
605
  scoring=scoring,
590
- groups=df_groups,
591
606
  return_estimator=cv_return_estimator,
592
607
  n_jobs=n_jobs,
593
608
  return_train_score=return_train_score,
@@ -776,7 +791,7 @@ def run_fit(
776
791
  _,
777
792
  _,
778
793
  problem_type,
779
- ) = _validata_api_params(
794
+ ) = _validate_api_params(
780
795
  X=X,
781
796
  y=y,
782
797
  model=model,
@@ -19,6 +19,14 @@ _filter_keys = {
19
19
  }
20
20
 
21
21
 
22
+ @pytest.fixture(autouse=True)
23
+ def enable_metadata_routing() -> None:
24
+ """Enable metadata routing in sklearn for all tests."""
25
+ import sklearn
26
+
27
+ sklearn.set_config(enable_metadata_routing=True)
28
+
29
+
22
30
  def pytest_configure(config: pytest.Config) -> None:
23
31
  """Add a new marker to pytest.
24
32
 
@@ -4,16 +4,13 @@
4
4
  # License: AGPL
5
5
 
6
6
  from collections.abc import Generator
7
- from typing import TYPE_CHECKING, Optional
7
+ from typing import Optional
8
8
 
9
9
  import numpy as np
10
+ from sklearn.model_selection import BaseCrossValidator
10
11
 
11
12
 
12
- if TYPE_CHECKING:
13
- from sklearn.model_selection import BaseCrossValidator
14
-
15
-
16
- class _JulearnFinalModelCV:
13
+ class _JulearnFinalModelCV(BaseCrossValidator):
17
14
  """Final model cross-validation iterator.
18
15
 
19
16
  Wraps any CV iterator to provide an extra iteration with the full dataset.
@@ -30,6 +27,20 @@ class _JulearnFinalModelCV:
30
27
  if hasattr(cv, "n_repeats"):
31
28
  self.n_repeats = cv.n_repeats
32
29
 
30
+ def get_metadata_routing(self) -> dict:
31
+ """Get metadata routing information from the underlying CV.
32
+
33
+ Returns
34
+ -------
35
+ dict
36
+ The metadata routing information.
37
+
38
+ """
39
+ if hasattr(self.cv, "get_metadata_routing"):
40
+ return self.cv.get_metadata_routing()
41
+ else:
42
+ return {}
43
+
33
44
  def split(
34
45
  self,
35
46
  X: np.ndarray, # noqa: N803
@@ -9,7 +9,9 @@ from dataclasses import dataclass, field
9
9
  from typing import Any, Optional, Union
10
10
 
11
11
  import numpy as np
12
+ import sklearn
12
13
  from scipy import stats
14
+ from sklearn.ensemble import AdaBoostClassifier, AdaBoostRegressor
13
15
  from sklearn.model_selection import RandomizedSearchCV, check_cv
14
16
  from sklearn.pipeline import Pipeline
15
17
 
@@ -417,6 +419,16 @@ class PipelineCreator:
417
419
  f"{name}__{param}": val for param, val in params_to_tune.items()
418
420
  }
419
421
 
422
+ # Disable metadata routing for AdaBoost-based estimators until
423
+ # scikit-learn implements them.
424
+
425
+ if isinstance(step, (AdaBoostClassifier, AdaBoostRegressor)):
426
+ warn_with_log(
427
+ "Disabling metadata routing for AdaBoost-based "
428
+ "estimators until scikit-learn implements them."
429
+ )
430
+ sklearn.set_config(enable_metadata_routing=False)
431
+
420
432
  self._steps.append(
421
433
  Step(
422
434
  name=name,
@@ -365,7 +365,7 @@ def check_consistency(
365
365
  cv: CVLike,
366
366
  groups: Optional[pd.Series],
367
367
  problem_type: str,
368
- ) -> None:
368
+ ) -> bool:
369
369
  """Check the consistency of the parameters/input.
370
370
 
371
371
  Parameters
@@ -379,6 +379,12 @@ def check_consistency(
379
379
  problem_type : str
380
380
  The problem type. Can be "classification" or "regression".
381
381
 
382
+ Returns
383
+ -------
384
+ groups_needed : bool
385
+ True if the groups variable is needed for the CV scheme,
386
+ False otherwise.
387
+
382
388
  Raises
383
389
  ------
384
390
  ValueError
@@ -395,6 +401,15 @@ def check_consistency(
395
401
  # Check problem type and the target.
396
402
  n_classes = np.unique(y.values).shape[0] # type: ignore
397
403
  if problem_type == "classification":
404
+ is_numeric = isinstance(y.values.dtype, np.dtype) and np.issubdtype(
405
+ y.values.dtype, np.number
406
+ ) # type: ignore
407
+ if not is_numeric:
408
+ warn_with_log(
409
+ f"The kind of values in y ({y.values.dtype}) is not "
410
+ "suitable for a classification. Values should be numeric."
411
+ )
412
+
398
413
  # If not exactly two classes:
399
414
  if n_classes == 1:
400
415
  raise_error(
@@ -417,7 +432,9 @@ def check_consistency(
417
432
  logger.info("Binary classification problem detected.")
418
433
  elif problem_type == "regression":
419
434
  # Regression
420
- is_numeric = np.issubdtype(y.values.dtype, np.number) # type: ignore
435
+ is_numeric = isinstance(y.values.dtype, np.dtype) and np.issubdtype(
436
+ y.values.dtype, np.number
437
+ ) # type: ignore
421
438
  if not is_numeric:
422
439
  warn_with_log(
423
440
  f"The kind of values in y ({y.values.dtype}) is not "
@@ -435,21 +452,30 @@ def check_consistency(
435
452
  "The problem type must be either 'classification' or 'regression'."
436
453
  )
437
454
  # Check groups and CV scheme
455
+ groups_needed = False
456
+ valid_group_cv_instances = (
457
+ GroupKFold,
458
+ GroupShuffleSplit,
459
+ LeaveOneGroupOut,
460
+ LeavePGroupsOut,
461
+ StratifiedGroupKFold,
462
+ ContinuousStratifiedGroupKFold,
463
+ RepeatedContinuousStratifiedGroupKFold,
464
+ )
438
465
  if groups is not None:
439
- valid_instances = (
440
- GroupKFold,
441
- GroupShuffleSplit,
442
- LeaveOneGroupOut,
443
- LeavePGroupsOut,
444
- StratifiedGroupKFold,
445
- ContinuousStratifiedGroupKFold,
446
- RepeatedContinuousStratifiedGroupKFold,
447
- )
448
- if not isinstance(cv, valid_instances):
466
+ if not isinstance(cv, valid_group_cv_instances):
449
467
  warn_with_log(
450
468
  "The parameter groups was specified but the CV strategy "
451
469
  "will not consider them."
452
470
  )
471
+ else:
472
+ groups_needed = True
473
+ elif isinstance(cv, valid_group_cv_instances):
474
+ raise_error(
475
+ "The CV strategy requires groups but the parameter groups was "
476
+ "not specified."
477
+ )
478
+ return groups_needed
453
479
 
454
480
 
455
481
  def _check_x_types(
@@ -549,7 +549,6 @@ def test_tune_hyperparam_gridsearch_groups(df_iris: pd.DataFrame) -> None:
549
549
  sk_y, # type: ignore
550
550
  cv=cv_outer,
551
551
  scoring=[scoring],
552
- groups=sk_groups,
553
552
  params={"groups": sk_groups},
554
553
  )
555
554
 
@@ -701,7 +701,16 @@ def test_check_consistency() -> None:
701
701
  with pytest.warns(RuntimeWarning, match="larger than the number"):
702
702
  check_consistency(y=y, cv=cv, groups=groups, problem_type=problem_type)
703
703
 
704
- # Test with wrong problem type
704
+ # Test with wrong dtype in series
705
+ y = pd.Series(np.random.randint(0, 2, size=10)).astype(object)
706
+ problem_type = "classification"
707
+ groups = None
708
+ cv = 5
709
+ with pytest.warns(RuntimeWarning, match="should be numeric"):
710
+ check_consistency(y=y, cv=cv, groups=groups, problem_type=problem_type)
711
+
712
+
713
+ # Test with wrong dtype in series
705
714
  y = pd.Series(["A"] * 10)
706
715
  problem_type = "regression"
707
716
  groups = None
@@ -259,7 +259,7 @@ class ConfoundRemover(JuTransformer):
259
259
  if self.threshold is not None:
260
260
  # Accounting for correlated rounding errors for very small
261
261
  # residuals
262
- residuals = residuals.applymap( # type: ignore
262
+ residuals = residuals.map( # type: ignore
263
263
  lambda x: 0 if abs(x) <= self.threshold else x
264
264
  )
265
265
  return residuals
@@ -245,13 +245,17 @@ def do_scoring_test(
245
245
  )
246
246
 
247
247
  np.random.seed(42)
248
+ if sk_groups is not None:
249
+ params = {"groups": sk_groups}
250
+ else:
251
+ params = {}
248
252
  expected = cross_validate(
249
253
  sklearn_model, # type: ignore
250
254
  sk_X,
251
255
  sk_y,
252
256
  cv=sk_cv,
253
257
  scoring=scorers,
254
- groups=sk_groups, # type: ignore
258
+ params=params, # type: ignore
255
259
  )
256
260
 
257
261
  # Compare the models
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: julearn
3
- Version: 0.3.5.dev117
3
+ Version: 0.3.5.dev134
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>
@@ -27,10 +27,10 @@ Requires-Python: >=3.9
27
27
  Description-Content-Type: text/markdown
28
28
  License-File: LICENSE.md
29
29
  License-File: AUTHORS.rst
30
- Requires-Dist: numpy<2.0.0,>=1.26.0
31
- Requires-Dist: pandas<2.4.0,>=2.0.0
30
+ Requires-Dist: numpy<3.0.0,>=1.26.0
31
+ Requires-Dist: pandas<4.0.0,>=2.1.0
32
32
  Requires-Dist: statsmodels<0.15,>=0.13
33
- Requires-Dist: scikit-learn<1.8.0,>=1.5.0
33
+ Requires-Dist: scikit-learn<1.9.0,>=1.5.0
34
34
  Requires-Dist: looseversion==1.3.0; python_version >= "3.12"
35
35
  Provides-Extra: dev
36
36
  Requires-Dist: tox; extra == "dev"
@@ -8,6 +8,7 @@ ignore_words.txt
8
8
  pyproject.toml
9
9
  setup.py
10
10
  tox.ini
11
+ uv.lock
11
12
  .github/dependabot.yml
12
13
  .github/ISSUE_TEMPLATE/bug_report.yaml
13
14
  .github/ISSUE_TEMPLATE/config.yml
@@ -71,6 +72,8 @@ docs/changes/newsfragments/288.bugfix
71
72
  docs/changes/newsfragments/291.bugfix
72
73
  docs/changes/newsfragments/297.bugfix
73
74
  docs/changes/newsfragments/297.misc
75
+ docs/changes/newsfragments/298.bugfix
76
+ docs/changes/newsfragments/299.misc
74
77
  docs/images/corrected_ttest.png
75
78
  docs/images/final_estimator.png
76
79
  docs/images/iris_X.png
@@ -1,7 +1,7 @@
1
- numpy<2.0.0,>=1.26.0
2
- pandas<2.4.0,>=2.0.0
1
+ numpy<3.0.0,>=1.26.0
2
+ pandas<4.0.0,>=2.1.0
3
3
  statsmodels<0.15,>=0.13
4
- scikit-learn<1.8.0,>=1.5.0
4
+ scikit-learn<1.9.0,>=1.5.0
5
5
 
6
6
  [:python_version >= "3.12"]
7
7
  looseversion==1.3.0
@@ -34,10 +34,10 @@ classifiers = [
34
34
  "Programming Language :: Python :: 3.13",
35
35
  ]
36
36
  dependencies = [
37
- "numpy>=1.26.0,<2.0.0",
38
- "pandas>=2.0.0,<2.4.0",
37
+ "numpy>=1.26.0,<3.0.0",
38
+ "pandas>=2.1.0,<4.0.0",
39
39
  "statsmodels>=0.13,<0.15",
40
- "scikit-learn>=1.5.0,<1.8.0",
40
+ "scikit-learn>=1.5.0,<1.9.0",
41
41
  "looseversion==1.3.0; python_version>='3.12'",
42
42
  ]
43
43
  dynamic = ["version"]