Skip to content

Commit b0d9f83

Browse files
committed
Merge remote-tracking branch 'upstream/main' into bugfix
* upstream/main: ENH: Parse EyeLink BUTTON Events (e.g. from a game controller) (mne-tools#13499) FIX: Fix regression with mne.viz.plot_evoked (mne-tools#13481) DOC: related software doc (mne-tools#13498) FIX: Replace use of deprecated Numpy func in GDF reader (Supersedes mne-tools#13415) (mne-tools#13497) DOC: Link to membership from governance page (mne-tools#13496) [pre-commit.ci] pre-commit autoupdate (mne-tools#13495) BUG: Fix issue with Montage.plot (mne-tools#13494)
2 parents 7e359c3 + 90e5232 commit b0d9f83

File tree

20 files changed

+171
-69
lines changed

20 files changed

+171
-69
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
repos:
22
# Ruff mne
33
- repo: https://github.com/astral-sh/ruff-pre-commit
4-
rev: v0.14.4
4+
rev: v0.14.5
55
hooks:
66
- id: ruff-check
77
name: ruff lint mne

doc/changes/dev/13481.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix bug with :func:`mne.viz.plot_evoked` when using ``gfp="only"`` or ``gfp=True``, by `Michael Straube`_.

doc/changes/dev/13494.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix bug where :meth:`mne.channels.DigMontage.plot` would error when ``axes`` was passed by `Christian O'Reilly`_.

doc/changes/dev/13497.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed a bug where ``mne.io.read_raw_gdf`` failed with NumPy ≥1.24 due to the removal of ``np.fromstring`` binary mode. Replaced with ``np.frombuffer`` for compatibility, by :newcontrib:`Dev Parikh`.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added support for parsing Eyelink ``BUTTON`` events (i.e. external controller button presses) to :func:`~mne.io.read_raw_eyelink` by :newcontrib:`Wouter Kroot`

doc/changes/names.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
.. _David Sabbagh: https://github.com/DavidSabbagh
6868
.. _Demetres Kostas: https://github.com/kostasde
6969
.. _Denis Engemann: https://denis-engemann.de
70+
.. _Dev Parikh: https://github.com/devparikh0506
7071
.. _Dinara Issagaliyeva: https://github.com/dissagaliyeva
7172
.. _Diptyajit Das: https://github.com/dasdiptyajit
7273
.. _Dirk Gütlin: https://github.com/DiGyt
@@ -339,6 +340,7 @@
339340
.. _Victoria Peterson: https://github.com/vpeterson
340341
.. _Wei Xu: https://github.com/psyxw
341342
.. _Will Turner: https://bootstrapbill.github.io
343+
.. _Wouter Kroot: https://github.com/WouterKroot
342344
.. _Xabier de Zuazo: https://github.com/zuazo
343345
.. _Xiaokai Xia: https://github.com/dddd1007
344346
.. _Yaroslav Halchenko: http://haxbylab.dartmouth.edu/ppl/yarik.html

doc/development/governance.rst

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ page :ref:`governance-people`.
5353
Maintainer Team
5454
---------------
5555

56-
The Maintainer Team is responsible for implementing changes to the software and
57-
supporting the user community. Duties:
56+
The Maintainer Team (:ref:`members <maintainer-team-people>`) is responsible for
57+
implementing changes to the software and supporting the user community. Duties:
5858

5959
- Infrastructure/large-scale software decisions, in partnership with the Steering
6060
Council
@@ -73,8 +73,8 @@ automatically.
7373
Steering Council
7474
----------------
7575

76-
The Steering Council is responsible for guiding and shepherding the project on a
77-
day-to-day basis. Duties:
76+
The Steering Council (:ref:`members <steering-council-people>`) is responsible for
77+
guiding and shepherding the project on a day-to-day basis. Duties:
7878

7979
- Obtaining funding (either by writing grants specifically for MNE development, or
8080
convincing others to include funds for MNE development in their research grants)
@@ -102,8 +102,8 @@ afforded to maintainers (passwords, merge rights, etc).
102102
Chair of the Steering Council
103103
-----------------------------
104104

105-
The Chair of the Steering Council is responsible for liaising between the Steering
106-
Council and the community. Duties:
105+
The Chair (:ref:`member <steering-council-people>`) of the Steering Council is
106+
responsible for liaising between the Steering Council and the community. Duties:
107107

108108
- Convening the Steering Council meetings
109109
- Calling for votes when consensus fails
@@ -113,8 +113,8 @@ Council and the community. Duties:
113113
External Advisory Board
114114
-----------------------
115115

116-
The External Advisory Board is responsible for high-level roadmap and funding
117-
guidance. Duties:
116+
The External Advisory Board (:ref:`members <advisory-board-people>`) is responsible for
117+
high-level roadmap and funding guidance. Duties:
118118

119119
- Attendance at Advisory Board meetings (approx. every 1-2 years)
120120
- Periodically communicating with Steering Council to impart guidance

doc/overview/people.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
Current Project Leadership and Institutional Partners
66
=====================================================
77

8+
.. _maintainer-team-people:
9+
810
Maintainer Team
911
---------------
1012

@@ -24,13 +26,17 @@ Maintainer Team
2426
* `Robert Luke`_
2527
* `Stefan Appelhoff`_
2628

29+
.. _steering-council-people:
30+
2731
Steering Council
2832
----------------
2933

3034
* `Britta Westner`_
3135
* `Daniel McCloy`_ (chair)
3236
* `Eric Larson`_
3337

38+
.. _advisory-board-people:
39+
3440
Advisory Board
3541
--------------
3642

doc/sphinxext/related_software.py

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
# If it's not available on PyPI, add it to this dict:
3939
MANUAL_PACKAGES = {
40-
# TODO: These packages are not pip-installable as of 2024/07/17, so we have to
40+
# TODO: These packages are not pip-installable as of 2025/11/19, so we have to
4141
# manually populate them -- should open issues on their package repos.
4242
"best-python": {
4343
"Home-page": "https://github.com/multifunkim/best-python",
@@ -54,68 +54,34 @@
5454
# This package does not provide wheels, so don't force CircleCI to build it.
5555
# If it eventually provides binary wheels we could add it to
5656
# `tools/circleci_dependencies.sh` and remove from here.
57+
# https://github.com/Eelbrain/Eelbrain/issues/130
5758
"eelbrain": {
5859
"Home-page": "https://eelbrain.readthedocs.io/en/stable/",
5960
"Summary": "Open-source Python toolkit for MEG and EEG data analysis.",
6061
},
61-
# mne-kit-gui requires mayavi (ugh)
62-
"mne-kit-gui": {
63-
"Home-page": "https://github.com/mne-tools/mne-kit-gui",
64-
"Summary": "A module for KIT MEG coregistration.",
65-
},
66-
# fsleyes requires wxpython, which needs to build
67-
"fsleyes": {
68-
"Home-page": "https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FSLeyes",
69-
"Summary": "FSLeyes is the FSL image viewer.",
70-
},
71-
# dcm2niix must be built from source
72-
"dcm2niix": {
73-
"Home-page": "https://github.com/rordenlab/dcm2niix",
74-
"Summary": "DICOM to NIfTI converter",
75-
},
7662
# TODO: these do not set a valid homepage or documentation page on PyPI
7763
"python-picard": { # https://github.com/mind-inria/picard/issues/60
7864
"Home-page": "https://github.com/mind-inria/picard",
7965
"Summary": "Preconditioned ICA for Real Data",
8066
},
81-
"eeg_positions": {
82-
"Home-page": "https://eeg-positions.readthedocs.io",
83-
"Summary": "Compute and plot standard EEG electrode positions.",
84-
},
85-
"mne-faster": {
86-
"Home-page": "https://github.com/wmvanvliet/mne-faster",
87-
"Summary": "MNE-FASTER: automatic bad channel/epoch/component detection.", # noqa: E501
88-
},
8967
"mne-features": {
9068
"Home-page": "https://mne.tools/mne-features",
9169
"Summary": "MNE-Features software for extracting features from multivariate time series", # noqa: E501
9270
},
93-
"mne-rsa": {
94-
"Home-page": "https://users.aalto.fi/~vanvlm1/mne-rsa",
95-
"Summary": "Code for performing Representational Similarity Analysis on MNE-Python data structures.", # noqa: E501
96-
},
9771
"mffpy": {
9872
"Home-page": "https://github.com/BEL-Public/mffpy",
9973
"Summary": "Reader and Writer for Philips' MFF file format.",
10074
},
101-
"emd": {
102-
"Home-page": "https://emd.readthedocs.io/en/stable",
103-
"Summary": "Empirical Mode Decomposition in Python.",
104-
},
105-
# Needs a release with homepage set properly
106-
"meegkit": {
107-
"Home-page": "https://nbara.github.io/python-meegkit",
108-
"Summary": "Denoising tools for M/EEG processing.",
109-
},
11075
# not on PyPI
11176
"conpy": {
11277
"Home-page": "https://github.com/aaltoimaginglanguage/conpy",
11378
"Summary": "Functions and classes for performing connectivity analysis on MEG data.", # noqa: E501
11479
},
11580
}
11681

117-
REQUIRE_METADATA = os.getenv("MNE_REQUIRE_RELATED_SOFTWARE_INSTALLED", "false").lower()
118-
REQUIRE_METADATA = REQUIRE_METADATA in ("true", "1")
82+
REQUIRE_INSTALLED = os.getenv("MNE_REQUIRE_RELATED_SOFTWARE_INSTALLED", "false").lower()
83+
REQUIRE_INSTALLED = REQUIRE_INSTALLED in ("true", "1")
84+
REQUIRE_METADATA = REQUIRE_INSTALLED
11985

12086
# These packages pip-install with a different name than the package name
12187
RENAMES = {
@@ -201,7 +167,7 @@ def _get_packages() -> dict[str, str]:
201167
if "Home-page" in md:
202168
url = md["Home-page"]
203169
else:
204-
for prefix in ("homepage", "documentation"):
170+
for prefix in ("homepage", "documentation", "user documentation"):
205171
for key, val in md.items():
206172
if key == "Project-URL" and val.lower().startswith(
207173
f"{prefix}, "
@@ -217,6 +183,12 @@ def _get_packages() -> dict[str, str]:
217183
continue
218184
out[package]["url"] = url
219185
out[package]["description"] = md["Summary"].replace("\n", "")
186+
if not REQUIRE_INSTALLED:
187+
reasons = [
188+
reason
189+
for reason in reasons
190+
if "not found, needs to be installed" not in reason
191+
]
220192
reason_str = "\n".join(reasons)
221193
if reason_str and REQUIRE_METADATA:
222194
raise ExtensionError(
@@ -263,6 +235,9 @@ def setup(app):
263235

264236

265237
if __name__ == "__main__": # pragma: no cover
238+
# running `python doc/sphinxext/related_software.py` for testing
239+
# require metadata for any installed packages (for debugging)
240+
REQUIRE_METADATA = True
266241
items = list(RelatedSoftwareDirective.run(None)[0].children)
267242
print(f"Got {len(items)} related software packages:")
268243
for item in items:

doc/sphinxext/related_software.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ autoreject
55
bycycle
66
conpy
77
curryreader
8+
dcm2niix
89
eeg_positions
910
emd
1011
fooof

0 commit comments

Comments
 (0)