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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions