Summary
bdpy.mri.fmriprep.create_bdata_fmriprep mutates fmriprep.data (and fmriprep.data[sub]) while iterating over them, which raises RuntimeError: OrderedDict mutated during iteration
Affected code
Two mutation-while-iterating sites in bdpy/mri/fmriprep.py:
Outer loop (L270–273):
bdpy/mri/fmriprep.py
|
for sub in fmriprep.data: |
|
# Exclude subject |
|
if 'subject' in exclude and sub in exclude['subject']: |
|
del(fmriprep.data[sub]) |
Triggered by
exclude['subject'] with multiple subjects.
Inner loop (L276-279):
bdpy/mri/fmriprep.py
|
for i, ses in enumerate(fmriprep.data[sub]): |
|
# Exclude session |
|
if 'session' in exclude and i + 1 in exclude['session']: |
|
del(fmriprep.data[sub][ses]) |
Triggered by
exclude['session'] removing a non-last session.
In practice, these will break whenever exclude is used on a dataset with multiple subjects or sessions.
This issue was originally identified by @izpyon. Filing as a separate issue per the request in #116 (comment)
Summary
bdpy.mri.fmriprep.create_bdata_fmriprepmutatesfmriprep.data(andfmriprep.data[sub]) while iterating over them, which raisesRuntimeError: OrderedDict mutated during iterationAffected code
Two mutation-while-iterating sites in bdpy/mri/fmriprep.py:
Outer loop (L270–273):
bdpy/mri/fmriprep.py
bdpy/bdpy/mri/fmriprep.py
Lines 270 to 273 in 9d0b724
Triggered by
exclude['subject']with multiple subjects.Inner loop (L276-279):
bdpy/mri/fmriprep.py
bdpy/bdpy/mri/fmriprep.py
Lines 276 to 279 in 9d0b724
Triggered by
exclude['session']removing a non-last session.In practice, these will break whenever exclude is used on a dataset with multiple subjects or sessions.
This issue was originally identified by @izpyon. Filing as a separate issue per the request in #116 (comment)