Skip to content

create_bdata_fmriprep in bdpy.mri.fmriprep mutates OrderedDict` while iterating over it #125

Description

@kencan7749

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

bdpy/bdpy/mri/fmriprep.py

Lines 270 to 273 in 9d0b724

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

bdpy/bdpy/mri/fmriprep.py

Lines 276 to 279 in 9d0b724

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions