Skip to content

Commit c08a2c7

Browse files
authored
Add preload keyward argument to Inst.load_data() method call (#13858)
1 parent 7332ac6 commit c08a2c7

3 files changed

Lines changed: 22 additions & 2 deletions

File tree

doc/changes/dev/13858.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add a ``memmap`` keyword argument to :meth:`mne.io.BaseRaw.load_data`, allowing loading deferred raw data into a memory-mapped file after object creation, by `Aniket Singh Yadav`_.

mne/io/base.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,11 +566,16 @@ def _check_bad_segment(
566566
return self._getitem((picks, slice(start, stop)), return_times=False)
567567

568568
@verbose
569-
def load_data(self, verbose=None):
569+
def load_data(self, *, memmap=None, verbose=None):
570570
"""Load raw data.
571571
572572
Parameters
573573
----------
574+
memmap : path-like | None
575+
If not ``None``, preload data into a memory-mapped file at this
576+
path. If ``None`` (default), preload data into RAM.
577+
578+
.. versionadded:: 1.13
574579
%(verbose)s
575580
576581
Returns
@@ -586,7 +591,9 @@ def load_data(self, verbose=None):
586591
.. versionadded:: 0.10.0
587592
"""
588593
if not self.preload:
589-
self._preload_data(True)
594+
if memmap is not None:
595+
_validate_type(memmap, "path-like", "memmap")
596+
self._preload_data(memmap if memmap is not None else True)
590597
return self
591598

592599
def _preload_data(self, preload):

mne/io/tests/test_raw.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,18 @@ def _read_raw_arange(preload=False, verbose=None):
843843
return _RawArange(preload, verbose)
844844

845845

846+
def test_load_data_memmap(tmp_path):
847+
"""Test loading raw data into a memmap via load_data."""
848+
raw = _read_raw_arange(preload=False)
849+
memmap_fname = tmp_path / "raw-load-data-memmap.dat"
850+
raw.load_data(memmap=memmap_fname)
851+
852+
assert raw.preload
853+
assert isinstance(raw._data, np.memmap)
854+
assert Path(raw._data.filename) == memmap_fname
855+
assert_array_equal(raw._data[:, 0], np.arange(1, 9))
856+
857+
846858
def test_test_raw_reader():
847859
"""Test _test_raw_reader."""
848860
_test_raw_reader(_read_raw_arange, test_scaling=False, test_rank="less")

0 commit comments

Comments
 (0)