This week was a bit of a slog with the same PR (https://github.com/mne-tools/mne-python/pull/10913) as before, and although it's not the central focus of the project, I think it will greatly improve the maintainability and long-term adoption of this project within MNE because the backend is such a fundamental thing to all GUIs. I hope it might even be used outside of MNE, as I think it was a really worthwhile framework. This week will proceed onto the time-frequency source estimate aspects without any further ado. What ended up taking a long time was versioning issues with the dependencies and tweaks to make both the notebook and pyvistaqt backends look as similar as possible. Also, a lot of the functionality for notebook had not been implemented yet. Finally, it also took some time to implement the backend (partially) for mne.viz.Brain to troubleshoot parts that didn't work and show that it could be the framework for a GUI. This week, I am moving on to the new source space class definition which hopefully I will be able to finish tomorrow although I am on vacation Wednesday-Friday.
This week I had a great code sprint in a transitioning role from sprint participant to more of a mentor which was really great. I helped Adie with her tutorial about importing and integrating objects from 3D Slicer into MNE https://github.com/mne-tools/mne-python/pull/10803. I also finished abstracting the backend code so that there are working examples for both the notebook and pyvistaqt backends for a wide range of widgets that covers those that are used in the MNE GUIs currently. I still have to refactor the GUIs to use these backends though. This has been quite a bit of work and isn't really the main thrust of the GSoC project but it is the low-level code that it depends on so it is really essential that it be done well for this project for its stability into the future. The added benefit is that it benefits all the other MNE GUIs as well and will make them much more portable across the two backends as well as opening up the possibility of adding new backends.
In order to implement a successful user interface to do the time-frequency source space viewing, I thought it was necessary to synchronize among MNE GUIs so understanding the other GUIs well and working on the backend renderer was the theme for this week. First, I recorded a YouTube tutorial embedded in the documentation for the coregistration user interface https://github.com/mne-tools/mne-python/pull/10802. There were a few road blocks from failing CIs https://github.com/mne-tools/mne-python/pull/10825, https://github.com/mne-tools/mne-python/pull/10824 that had to be fixed as well. Then, the real workload was refactoring the backend so that it works on both notebook and pyvistaqt https://github.com/mne-tools/mne-python/pull/10803 for when the time-frequency viewer is added. This was quite a bit of work but is almost done, and cleans up the code tremendously.
The first PR is done, there are just some failures of the CIs related to issues with updates in other packages https://github.com/mne-tools/mne-python/pull/10777! This PR abstracts the slice browser from the ieeg locate GUI so that it can be used in the time-frequency viewer. Instead of calling Qt widgets directly, another step (not in the timeline) that would be great would be to abstract the widgets so that they will work on either the Qt backend or a notebook backend. The original first PR plan has been discussed https://github.com/mne-tools/mne-python/issues/10721 but, after talking to Britta, the thought was to delay this a beat to see more what the GUI would look like and plan the input to match (as well as waiting for any progress of Dan's refactoring of TFR classes to harmonize with that).