0.10.3
Released January 2024
HIGHLIGHTS
Warning
Support for python 3.7 has been dropped. We recommend moving to python >= 3.11.
Minimum supported versions of packages have been bumped up:
- Numpy – v1.19.0
- SciPy – v1.8.0
- Scikit-learn – v1.0.0
- Nibabel – v4.0.0
- Pandas – v1.1.5
- Joblib – v1.0.0
-
API Allow passing arguments to first_level_from_bids to build first level models that include specific set of confounds by relying on the strategies from load_confounds (#4103 by Rémi Gau).
-
Support passing t and F contrasts to compute_contrast that that have fewer columns than the number of estimated parameters. Remaining columns are padded with zero (#4067 by Rémi Gau).
-
NiftiSpheresMasker now has generate_report method (#3102 by Yasmin Mzayek and Nicolas Gensollen).
-
Update the CompCor strategy in load_confounds and load_confounds_strategy to support fmriprep 21.x series and above. (#3285 by Hao-Ting Wang).
-
Allow setting vmin in plot_glass_brain and plot_stat_map (#3993 by Michelle Wang).
-
When plotting thresholded statistical maps with a colorbar, the threshold value(s) will now be displayed as tick labels on the colorbar (##2833 by Nicolas Gensollen).
-
Combine GLM examples plot_fixed_effect and plot_fiac_analysis into a a single example plot_two_runs_model (#3191 by Taylor Salo and Rémi Gau).
NEW
- The temp_file_lifetime parameter of interactive plots’ open_in_browser method is deprecated and has no effect (#4180 by Jerome Dockes)..
Fixes
-
MultiNiftiMasker can now call generate_report which will generate a report for the first subject in the list of subjects (#4001 by Yasmin Mzayek).
-
Make sure that all atlases and datasets fetchers return a description (#4215 Rémi Gau).
-
Update the CompCor strategy in load_confounds and load_confounds_strategy to support fmriprep 21.x series and above. (#3285 by Hao-Ting Wang).
-
Fix SimpleRegressionResults to accommodate for the lack of a model attribute (#4071 Rémi Gau)
-
clean_img can now use kwargs clean__sample_mask argument to correctly reshape the nifti image to the dimensions of the mask in the output (#4051 by Mia Zwally).
-
Fix plotting of an image with color bar when maximum value is exactly zero (#4204 by Rémi Gau).
-
Code Fix PSC normalisation method applied by standardize_signal in signal (#4116 by Hao-Ting Wang and Yasmin Mzayek).
-
Fixed inheritance of decoder classes to keep compatibility with scikit-learn>v1.3 (#4188 by Yasmin Mzayek).
-
Make sure that all the fetchers for atlas and func from nilearn.datasets return a sklearn.utils.Bunch. Add new behavior to fetch_language_localizer_demo_dataset to return output as Bunch. This behavior will become the default in version 0.13.0 (#4233 by Rémi Gau).
Enhancements
-
NiftiSpheresMasker now has generate_report method (#3102 by Yasmin Mzayek and Nicolas Gensollen).
-
Allow passing Pandas Series of image filenames to SecondLevelModel (#4070 by Rémi Gau).
-
Allow passing arguments to first_level_from_bids to build first level models that include specific set of confounds by relying on the strategies from load_confounds (#4103 by Rémi Gau).
-
Support passing t and F contrasts to compute_contrast that that have fewer columns than the number of estimated parameters. Remaining columns are padded with zero (#4067 by Rémi Gau).
-
Multi-subject maskers’ generate_report method no longer fails with 5D data but instead shows report of first subject. User can index input list to show report for different subjects (#3935 by Yasmin Mzayek).
-
Allow global_signal parameter in load_confounds_strategy in denoise_strategy='compcor' (#4225 by Hao-Ting Wang).
-
Add two_sided option for binarize_img (#4121 by Steven Meisler).
-
generate_report now uses appropriate cut coordinates when functional image is provided (#4099 by Yasmin Mzayek and Nicolas Gensollen).
-
Mention the classification type (all-vs-one) in Decoding of a dataset after GLM fit for signal extraction (#4122 by Tamer Gezici).
-
Add backslash to homogenize Parcellations documentation (#4042 by Nikhil Krish).
-
Specify full form of LSS in Beta-Series Modeling for Task-Based Functional Connectivity and Decoding (#4141 by Tamer Gezici).
-
Don’t fetch tmaps in examples if tmaps aren’t used in the example. (#4136 by Christina Roßmanith).
-
Describe the return value in fetch_abide_pcp documentation (#4159 by Suramya Pokharel).
-
Allow setting vmin in plot_glass_brain and plot_stat_map (#3993 by Michelle Wang).
-
When plotting thresholded statistical maps with a colorbar, the threshold value(s) will now be displayed as tick labels on the colorbar (##2833 by Nicolas Gensollen).
Changes
-
Expose scipy CubicSpline extrapolate parameter in clean to control the interpolation of censored volumes in both ends of the BOLD signal data (#4028 by Jordi Huguet).
-
Make nilearn.reporting._get_clusters_table module public and move copy_img out of nilearn._utils.niimg (#4166 by Rémi Gau).
-
Private utility context manager write_tmp_imgs is refactored into function write_imgs_to_path (#4094 by Yasmin Mzayek).
-
Move user facing function concat_niimgs out of private module nilearn._utils.niimg_conversions (#4167 by Rémi Gau).
-
Remove leading underscore from non private functions to align with PEP8 (#4086 by Rémi Gau).
-
Make decoding/proximal_operator explicitly private to align with PEP8 (#4153 by Rémi Gau).
-
Make private functions public when used outside of their module nilearn.interface to align with PEP8 (#4168 by Rémi Gau).
-
img_to_signals_labels will also return masked_atlas in release 0.15. Meanwhile, use return_masked_atlas parameter to enable/disable this behavior. (#3761 by Mohammad Torabi).
-
cation Rename the parameter contrast_type in compute_contrast and attribute contrast_type in Contrast to stat_type (#4191 by Rémi Gau).
-
plot_surf_roi will raise a warning if roi_map contains negative or non-integer values; in version 0.13 this will be a ValueError (#4131 by Michelle Wang).
-
nilearn.datasets.fetch_bids_langloc_dataset will be deprecated in release 0.13 as it returns data simuilar to fetch_language_localizer_demo_dataset (#4219 by Rémi Gau).
-
the default parameter of fd_threshold and std_dvars_threshold in load_confounds with be updated to match fmriprep default in version 0.13 (#4225 by Hao-Ting Wang).
-
Combine GLM examples plot_fixed_effect and plot_fiac_analysis into a a single example plot_two_runs_model (#3191 by Taylor Salo and Rémi Gau).
-
Switch to using tox to manage environments during development and testing. All plotting python dependencies (matplotlib AND plotly) are now installed when running pip install nilearn[plotting] (#4029 by Rémi Gau).
List of pull requests
- [MAINT] Post release 0.10.2 by @Remi-Gau in #4022
- [FIX] fix spelling by @Remi-Gau in #4026
- [MAINT] Add python 3.12 to CI by @Remi-Gau in #4023
- [FIX] Allow
MultiNiftiMasker
to usegenerate_report
method by @ymzayek in #4001 - [MAINT] Implement deprecation warnings-as-errors in prerelease test using pytest fixture by @ymzayek in #3936
- [MAINT] Ignore private visual testing file when running pytest by @ymzayek in #4030
- [BOT] update pre-commit hooks by @github-actions in #4041
- [DOC] Change all block splitters in examples to use short syntax by @ymzayek in #4031
- [MAINT] Update issue labels by @Remi-Gau in #4036
- [MAINT] Add partial build specific to CI doc build workflow by @ymzayek in #4044
- [ENH] Allow setting
vmin
inplot_glass_brain
andplot_stat_map
by @michellewang in #3993 - [MAINT] Use correct target name for Makefile recipe by @ymzayek in #4045
- [MAINT] Rename and move testing utilities under tests directory in each module by @ymzayek in #4047
- [MAINT] refactor is plotly installed by @Remi-Gau in #4034
- [FIX] fix typos in Harvard Oxford atlas labels by @Remi-Gau in #4035
- [ENH] add readme to default data locations by @Remi-Gau in #4037
- [DOC] link terms to glossary by @Remi-Gau in #4038
- [DOC] update URLs with
http://
tohttps://
by @DimitriPapadopoulos in #4050 - [DOC] Fix wrong indentation of example code by @ymzayek in #4053
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4058
- [BOT] update pre-commit hooks by @github-actions in #4059
- [MAINT] Use rng fixture for setting up np.random.RandomState() - part 2 by @ymzayek in #4054
- [MAINT] use affine_eye fixture by @Remi-Gau in #4056
- [MAINT] Refactor fixture for plotting by @Remi-Gau in #4057
- [DOC] move default from end of argument description to type name by @Remi-Gau in #4040
- [MAINT fix typo in fixture name by @Remi-Gau in https://github.com//pull/4062
- [MAINT] Pytest fixture to ignore internal deprecation warnings by @ymzayek in #4043
- [MAINT] change function privacy in _utils by @Remi-Gau in #4061
- [MAINT] change future warning to deprecation warning by @Remi-Gau in #4060
- [MAINT] Use rng fixture for setting up
np.random.RandomState()
- part 1 by @ymzayek in #4052 - [FIX] fix experimental example private function in monkeypatch by @Remi-Gau in #4065
- [DOC] Formatting of docstring in regions.Parcellations by @NIkhilgKrish in #4042
- [MAINT] Use rng fixture instead of check_random_state by @Remi-Gau in #4063
- [STY] Minor doc formatting by @Remi-Gau in #4072
- [BOT] update pre-commit hooks by @github-actions in #4075
- [ENH] Allow pandas.Series as valid input for second_level_input by @Remi-Gau in #4070
- [ENH] pad t and F 'short' contrasts with zeros by @Remi-Gau in #4067
- [DOC] Fix failing docs on main by @ymzayek in #4079
- [MAINT] refactor of tests and code in GLM module by @Remi-Gau in #4066
- [MAINT] drop python 3.7 by @Remi-Gau in #4033
- [DOC] Make scope limit more obvious regarding accepting new downloaders by @Remi-Gau in #4080
- [DOC][MAINT] Remove restriction on Sphinx version by @ymzayek in #4081
- [FIX] image.clean_img() kwargs integration by @MIZwally in #4051
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4083
- [FIX] fix typo by @Remi-Gau in #4091
- [MAINT] update DOI and add RRID by @Remi-Gau in #4032
- [DOC] mention checking badges during release by @Remi-Gau in #4085
- [MAINT] Fix Zenodo DOI badge by @ymzayek in #4093
- [BOT] update pre-commit hooks by @github-actions in #4097
- [DOC] Remove extraneous hash symbols for examples' section splitters by @ymzayek in #4096
- [DOC] Improve docstring rendering for typed experimental surface module by @ymzayek in #4049
- [DOC] Add tagging of release version to stable doc build by @ymzayek in #4100
- [FIX] Disable extrapolation of out-of-bounds volumes by @jhuguetn in #4028
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4102
- [MAINT] Add listing utilities by @NicolasGensollen in #2991
- [MAINT] Pin kaleido version to
0.1.0.post1
for windows by @ymzayek in #4101 - [BOT] update pre-commit hooks by @github-actions in #4105
- [MAINT] Rewrite
write_tmp_imgs
function and use it with pytest'stmp_path
by @ymzayek in #4094 - [MAINT] Use Numpy Random Generator to replace legacy RandomState by @ymzayek in #4084
- [MAINT] Store 1 timepoint for 4D generating a report with the maskers by @ymzayek in #3935
- [DOC] Speed up fit computation with parallel processing by @ymzayek in #4108
- [REF] Clarify code in
find_parcellation_cut_coords
function by @ymzayek in #4107 - [MAINT] using tox to test in different environments by @Remi-Gau in #4029
- [DOC] Fix label in changelog by @Remi-Gau in #4114
- [DOC] Clarify docstrings of plotting functions in
img_plotting
by @ymzayek in #4115 - [EHN] Implement signal.clean to SurfaceMasker by @htwangtw in #4117
- [ENH] Update binarize_img for negative value handling by @smeisler in #4121
- [ENH] Colorbar ticks at threshold values by @NicolasGensollen in #2887
- [ENH] Add new returns to
NiftiLabelsMasker
'stransform
output by @mtorabi59 in #3761 - [ENH] Set appropriate cut coordinates for NiftiLabelsMasker reports by @ymzayek in #4099
- [MAINT] minor pre-commit fix by @Remi-Gau in #4125
- [ENH] Let _check_embedded_nifti_masker work with surface masker by @ymzayek in #4120
- [MAINT] Test against Numpy 2.0 nightly releases by @ymzayek in #4130
- [MAINT] Remove trigger on PR for numpy2 test by @ymzayek in #4133
- [DOC] Mention classification type in plot_haxby_glm_decoding.py by @TamerGezici in #4122
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4134
- [MAINT] remove leading underscore from non private functions by @Remi-Gau in #4086
- [ENH]
NiftiSpheresMasker
reports by @NicolasGensollen in #3102 - [BOT] update pre-commit hooks by @github-actions in #4142
- Bump actions/setup-python from 4 to 5 by @dependabot in #4143
- Don't use get_tmaps=True if tmaps aren't used by @crossmanith in #4136
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4148
- [ENH] Raise error when negative or non-integer ROI values are passed to
plot_surf_roi
by @michellewang in #4131 - [DOC] Specify full form of LSS in beta series tutorial by @TamerGezici in #4141
- [MAINT] Apply Black to nifti_labels_masker.py by @ymzayek in #4146
- [MAINT] Apply Black to reporting files by @ymzayek in #4145
- [MAINT] Apply Black img_plotting.py by @ymzayek in #4147
- [INFRA] Remove CI workflow to error on DeprecationWarnings of dependencies by @ymzayek in #4149
- [MAINT] Apply Black to nifti_spheres_masker.py by @ymzayek in #4144
- [MAINT] Improve error for nifti masker when fit is called without imgs or mask_img by @ymzayek in #4151
- [MAINT] make proximal_operator a private module by @Remi-Gau in #4153
- [ENH] rename
nilearn.datasets._utils.fetch_file
tonilearn.datasets._utils.fetch_single_file
by @Remi-Gau in #4156 - [MAINT] make
__all__
and API doc more consistent by @Remi-Gau in #4157 - [MAINT] relocate functions from nilearn.datasets.utils by @Remi-Gau in #4154
- [FIX] Load compcor related confounds generated from fmriprep 21.x series by @htwangtw in #3285
- [STY] run black on nilearn/interfaces/fmriprep by @Remi-Gau in #4163
- [FIX] Adjust figure size to display title for functions calling
plot_surf
by @ymzayek in #4164 - [FIX] fix SimpleRegressionResults by @Remi-Gau in #4071
- [BOT] update pre-commit hooks by @github-actions in #4169
- [ENH] integrate load_confounds into first_level_from_bids by @Remi-Gau in #4103
- Bump actions/upload-artifact from 3 to 4 by @dependabot in #4170
- Updated docs for fetch_abide_pcp by @SuramyaP in #4159
- [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4174
- [MAINT] nilearn.interface: make private functions used outside of their module public by @Remi-Gau in #4168
- [DOC] link surface terms to glossary by @Remi-Gau in #4161
- [STY] apply black to
nilearn._utils.data_gen
by @Remi-Gau in #4171 - [BOT] update pre-commit hooks by @github-actions in #4179
- [INFRA] Proposal for building stable docs in remote runner for releases by @ymzayek in #4160
- [INFRA] Quick fix for automated stable doc build by @ymzayek in #4181
- [INFRA] Fix auto trigger for release doc build in Actions workflow by @ymzayek in #4182
- [FIX] use a local server rather than temp file to open plots in a browser by @jeromedockes in #4180
- [FIX] rich display in jupyter notebook/lab by @jeromedockes in #4183
- [MAINT] move user facing functions out of private modules by @Remi-Gau in #4166
- [MAINT] move user facing functions out of private modules - part 2 by @Remi-Gau in #4167
- [FIX] use parameter deprecation decorator by @Remi-Gau in #4189
- [BOT] update pre-commit hooks by @github-actions in #4193
- [STY] deal with private functions in nilearn.glm that do not coform to PEP8 naming by @Remi-Gau in #4190
- [ENH] Allow string expressions for
second_level_contrast
ofnon_parametric_inference
by @ymzayek in #4150 - [FIX] rename
contrast_type
tostat_type
by @Remi-Gau in #4191 - [DOC] fix edit button for examples by @Remi-Gau in #4196
- [MAINT] remove duplicate dependency by @Remi-Gau in #4199
- [MAINT] remove some old mention of nistats by @Remi-Gau in #4200
- [MAINT] make private functions in
nilearn.plotting
used outside of their module public by @Remi-Gau in #4197 - [MAINT] testing minimal version of dependencies by @Remi-Gau in #4068
- [MAINT] sort changelog by labels by @Remi-Gau in #4201
- [MAINT] Remove unnecessary lines describe in
test_clean_psc
by @paul-reiners in #4208 - [BOT] update AUTHORS.rst and doc/changes/names.rst by @github-actions in #4213
- [DOC] format citation by @Remi-Gau in #4212
- [DOC] replace
session
byrun
to align with BIDS terminology by @Remi-Gau in #4214 - Bump actions/setup-python from 4 to 5 by @dependabot in #4217
- [FIX] fix plotting of an image with color bar when maximum value is exactly zero by @Remi-Gau in #4204
- [FIX] Fix PSC normalization when a high-pass filter is applied by @ymzayek in #4116
- [MAINT] Adapt decoder for scikit-learn > 1.3 by @ymzayek in #4188
- [DOC] update dataset descriptions by @Remi-Gau in #4215
- [DOC] Combine similar two-runs GLM examples by @tsalo in #3191
- [MAINT] speed up tests for html reports by @Remi-Gau in #4221
- [DEP] deprecate bids_langloc fetcher by @Remi-Gau in #4219
- FIX/EHN update load_confound_strategy defaults by @htwangtw in #4225
- [FIX] Let decoder accept list of paths as input by @ymzayek in #4227
- [FIX] Ensure that fetchers for atlas and func return a Bunch by @Remi-Gau in #4233
- [MAINT] Examples output all their results in a single main directory by @Remi-Gau in #4230
- Bump actions/cache from 3 to 4 by @dependabot in #4234
- [DOC] update version in sphinx directives by @Remi-Gau in #4238
- [DOC] sort changelog and add highlights by @Remi-Gau in #4237
- [STY] apply black 24.1.0 by @Remi-Gau in #4162
- [DOC] remove warning from experimental module and add it as doc string by @Remi-Gau in #4240
- [STY] re apply black by @Remi-Gau in #4241
- Release 0.10.3 by @Remi-Gau in #4242
New Contributors
- @NIkhilgKrish made their first contribution in #4042
- @MIZwally made their first contribution in #4051
- @jhuguetn made their first contribution in #4028
- @TamerGezici made their first contribution in #4122
- @crossmanith made their first contribution in #4136
- @SuramyaP made their first contribution in #4159
- @paul-reiners made their first contribution in #4208
Full Changelog: 0.10.2...0.10.3