Source code for meeg_utils.presets

"""Ready-made pipelines.

Recommended presets (``eeg-erp``, ``eeg-rest``, ``meg-erp``, ``meg-rest``)
take every parameter from a published default; the sources are listed in
``docs/presets/recommended.md``. Dataset presets reproduce the
preprocessing of a published dataset with its known problems fixed; every
difference from the original code is listed in ``docs/presets/<name>.md``.
Use them through :meth:`meeg_utils.Pipeline.preset`, or :func:`get` and
:func:`available`.
"""

from __future__ import annotations

from collections.abc import Callable
from typing import TYPE_CHECKING

from ._had_meeg import had_meeg
from ._recommended import eeg_erp, eeg_rest, meg_erp, meg_rest

if TYPE_CHECKING:
    from ..core import Pipeline

#: Preset name mapped to its factory; each factory documents its parameters.
_PRESETS: dict[str, Callable[..., Pipeline]] = {
    "eeg-erp": eeg_erp,
    "eeg-rest": eeg_rest,
    "meg-erp": meg_erp,
    "meg-rest": meg_rest,
    "had-meeg": had_meeg,
}


[docs] def available() -> dict[str, str]: """Return the preset names with the first line of their description. Returns ------- dict Preset name mapped to a one-line summary. """ return { name: (factory.__doc__ or "").strip().splitlines()[0] for name, factory in _PRESETS.items() }
[docs] def get(name: str, **kwargs) -> Pipeline: """Build the pipeline of a preset. Parameters ---------- name : str Preset name, see :func:`available`. **kwargs Preset options, e.g. ``stage``, ``system`` (MEG presets), ``event_id`` (ERP epochs) or ``datatype`` (``"had-meeg"``). Returns ------- Pipeline A new, unfitted pipeline; change parameters with ``set_params``. Raises ------ ValueError If the preset does not exist. """ if name not in _PRESETS: raise ValueError(f"Unknown preset {name!r}; available: {sorted(_PRESETS)}") return _PRESETS[name](**kwargs)
[docs] def options(name: str) -> list[str]: """Return the options a preset accepts. Parameters ---------- name : str Preset name, see :func:`available`. Returns ------- list of str Option names (keyword arguments of :func:`get`). """ import inspect if name not in _PRESETS: raise ValueError(f"Unknown preset {name!r}; available: {sorted(_PRESETS)}") return list(inspect.signature(_PRESETS[name]).parameters)
__all__ = ["available", "get", "options"]