diff --git a/doc/sphinxext/mne_doc_utils.py b/doc/sphinxext/mne_doc_utils.py index b9b1e430471..7d6c545837e 100644 --- a/doc/sphinxext/mne_doc_utils.py +++ b/doc/sphinxext/mne_doc_utils.py @@ -13,10 +13,13 @@ import numpy as np import pyvista import sphinx.util.logging +from sphinx.errors import ExtensionError import mne from mne.utils import ( - _assert_no_instances, + _assert_no_instances as _assert_no_instances_mne, +) +from mne.utils import ( _get_extra_data_path, sizeof_fmt, ) @@ -104,6 +107,14 @@ def reset_warnings(gallery_conf, fname): t0 = time.time() +def _assert_no_instances(cls, when): + """Wrap our internal one but make the traceback nicer when it fails.""" + try: + _assert_no_instances_mne(cls, when) + except Exception as exc: + raise ExtensionError(str(exc)) from None + + def reset_modules(gallery_conf, fname, when): """Do the reset.""" import matplotlib.pyplot as plt diff --git a/mne/gui/_coreg.py b/mne/gui/_coreg.py index 31bf37e496a..7480a50231d 100644 --- a/mne/gui/_coreg.py +++ b/mne/gui/_coreg.py @@ -10,6 +10,7 @@ import re import threading import time +import weakref from contextlib import contextmanager from functools import partial from pathlib import Path @@ -914,7 +915,7 @@ def _on_pick(self, vtk_picker, event): mesh = vtk_picker.GetDataSet() if mesh is None or cell_id == -1 or not self._mouse_no_mvt: return - if not any(mesh is target for target in self._picking_targets): + if not any(mesh is target() for target in self._picking_targets): return pos = np.array(vtk_picker.GetPickPosition()) vtk_cell = mesh.GetCell(cell_id) @@ -1342,7 +1343,7 @@ def _add_head_surface(self): key = "low" self._update_actor("head", head_actor) # mark head surface mesh to restrict picking - self._picking_targets.append(head_surf) + self._picking_targets.append(weakref.ref(head_surf)) # We need to use _get_processed_mri_points to incorporate grow_hair rr = self.coreg._get_processed_mri_points(key) * self.coreg._scale.T head_surf.points = rr