You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This meta issue holds a dynamic log of planned and ongoing tasks around enhancing the event system in MNE.
It is also the Working Product Report for Google Summer of Code 2026.
Details
GSoC Contributor: Lifeng Qiu Lin
Main Supervisor/Mentor: Marijn van Vliet
Organisation: Python Software Foundation - MNE-Python
Project Title: Implement and Improve Bidirectional Event System across MNE plots
Description
The event system allows property transfer between plots dynamically, even from different sources in MNE. The existing architecture is well-structured; however, the integration of the events in plots is not complete. This project emerged as an idea to implement new and appropriate behaviours in diverse kinds of plots, including in future GUIs like the dipole-fitting system, to handle events.
In the end, we expect to see plots interacting in real time when toggling one of them, providing accurate cues in all others after one selection.
Not all code logic is commented here for length reasons; see each PR for details
All new functions come with their respective tests, even when they are not explicitly written in the changelog
Documentation is provided for each PR, also provided inside the framework in variable length, depending on the scope
Lessons and challenges
Along the way, I faced many challenges and learnt a lot of lessons as a result. I hope sharing them would help future contributors who want to get involved in MNE, or simply another read for one's programming experience.
One big problem I faced at the beginning was understanding the main pipelines in the framework, as anyone starting on a new code base. In this case, tutorials on the MNE website, the search function, and starting by fixing a small bug, these are things that help a lot.
One lesson I learnt is to continue implementing the solution until you face a behavioural decision. One could wait for guidance there at early stages, while after getting used to it, choose to proceed with one of the options, and then explain later to the mentor to agree or discard the design (with justification).
Another interesting challenge is how tangled the calls and variables are in some of the classes or functions, especially the plotting ones, which require lots of decorating. There is no excellent solution to this, but get used to the naming convention (ask if unsure), and try to trace back through the lines and calls.
Finally, mentor usually has the expertise to know what you are looking for or where to look for a certain thing, which can save a lot of time when you are unfamiliar, but you should carefully weigh the effort and time needed.
Introduction
This meta issue holds a dynamic log of planned and ongoing tasks around enhancing the event system in MNE.
It is also the Working Product Report for Google Summer of Code 2026.
Details
GSoC Contributor: Lifeng Qiu Lin
Main Supervisor/Mentor: Marijn van Vliet
Organisation: Python Software Foundation - MNE-Python
Project Title: Implement and Improve Bidirectional Event System across MNE plots
Description
The event system allows property transfer between plots dynamically, even from different sources in MNE. The existing architecture is well-structured; however, the integration of the events in plots is not complete. This project emerged as an idea to implement new and appropriate behaviours in diverse kinds of plots, including in future GUIs like the dipole-fitting system, to handle events.
In the end, we expect to see plots interacting in real time when toggling one of them, providing accurate cues in all others after one selection.
Issues solved and PRs implemented
Main Code Contributions
mne.viz.plot_compare_evokedswhenaxes="topo"#13924mne.viz.plot_evoked_topowith TimeChange event #13928plot_evoked_topowithTimeChangebehaviour - vertical barplot_evoked_topomain and subfigures, both react toTimeChangeand is able to publishui_events.link, allowrecursiveoption to link the groups the figures belong to toomne.viz.iter_topography, theon_pickcallable accepts new parameterorig_figthat refers to the main figuremne.viz.plot_evoked,spatial_colorsis not "auto" by default, as described by docs or likemne.Evoked.plotplot_evokedplot_evokedwithTimeChangebehaviour - vertical bar, able to subscribe and publishTimeChangeeventmne.viz.plot_ica_sourceswhen passingEvokedinstance, streamline and plug into existing functions, removing tech debtplot_evokedmne/viz/_brain/_brain.pyBrain plotting to carrysource_idparameter inVertexSelecteventmne/gui/tests/test_dipolefit.py-DipoleFitUIclassChannelsSelectionproblem when sensors didn't change colour according to user selectionmne/viz/_3d.pyto record channels from upstream; now each cloud iterates through channel types and coilsChannelsSelectionto be propagated to outer main figure links when retrieved by subfiguresIssues participated:
Note
Lessons and challenges
Along the way, I faced many challenges and learnt a lot of lessons as a result. I hope sharing them would help future contributors who want to get involved in MNE, or simply another read for one's programming experience.