Skip to content

Commit 1221b9c

Browse files
authored
BUG: Force mayavi in test that uses it (#9944)
* BUG: Force mayavi in test that uses it * BUG: Fix appearance and bug * FIX: Geom
1 parent 27de731 commit 1221b9c

File tree

8 files changed

+43
-6
lines changed

8 files changed

+43
-6
lines changed

mne/conftest.py

+7
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,13 @@ def renderer_pyvistaqt(request, garbage_collect):
418418
yield renderer
419419

420420

421+
@pytest.fixture(params=["mayavi"])
422+
def renderer_mayavi(request, garbage_collect):
423+
"""Yield the mayavi backend."""
424+
with _use_backend(request.param, interactive=False) as renderer:
425+
yield renderer
426+
427+
421428
@pytest.fixture(params=["notebook"])
422429
def renderer_notebook(request):
423430
"""Yield the 3D notebook renderer."""

mne/coreg.py

+5
Original file line numberDiff line numberDiff line change
@@ -1413,6 +1413,7 @@ def _setup_bem(self):
14131413
def _setup_fiducials(self, fids):
14141414
_validate_type(fids, (str, dict, list))
14151415
# find fiducials file
1416+
fid_accurate = None
14161417
if fids == 'auto':
14171418
fid_files = _find_fiducials_files(self._subject,
14181419
self._subjects_dir)
@@ -1422,13 +1423,16 @@ def _setup_fiducials(self, fids):
14221423
subjects_dir=self._subjects_dir, subject=self._subject)
14231424
logger.info(f'Using fiducials from: {fid_filename}.')
14241425
fids, _ = read_fiducials(fid_filename)
1426+
fid_accurate = True
14251427
else:
14261428
fids = 'estimated'
14271429

14281430
if fids == 'estimated':
14291431
logger.info('Estimating fiducials from fsaverage.')
1432+
fid_accurate = False
14301433
fids = get_mni_fiducials(self._subject, self._subjects_dir)
14311434

1435+
fid_accurate = True if fid_accurate is None else fid_accurate
14321436
if isinstance(fids, list):
14331437
fid_coords = _fiducial_coords(fids)
14341438
else:
@@ -1437,6 +1441,7 @@ def _setup_fiducials(self, fids):
14371441
dtype=float)
14381442

14391443
self._fid_points = fid_coords
1444+
self._fid_accurate = fid_accurate
14401445

14411446
# does not seem to happen by itself ... so hard code it:
14421447
self._reset_fiducials()

mne/gui/_coreg.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -117,17 +117,17 @@ def _get_default(var, val):
117117
self._defaults = dict(
118118
size=_get_default(size, (800, 600)),
119119
bgcolor=_get_default(bgcolor, "grey"),
120-
orient_glyphs=_get_default(orient_glyphs, False),
120+
orient_glyphs=_get_default(orient_glyphs, True),
121121
hpi_coils=_get_default(hpi_coils, True),
122122
head_shape_points=_get_default(head_shape_points, True),
123123
eeg_channels=_get_default(eeg_channels, True),
124-
head_resolution=_get_default(head_resolution, False),
124+
head_resolution=_get_default(head_resolution, True),
125125
head_transparency=_get_default(head_transparency, False),
126126
head_opacity=0.5,
127127
sensor_opacity=_get_default(sensor_opacity, 1.0),
128128
fiducials=("LPA", "Nasion", "RPA"),
129129
fiducial="LPA",
130-
lock_fids=False,
130+
lock_fids=True,
131131
grow_hair=0.0,
132132
scale_modes=["None", "uniform", "3-axis"],
133133
scale_mode="None",
@@ -162,6 +162,7 @@ def _get_default(var, val):
162162
self._fiducials = fiducials
163163
self._coreg = Coregistration(
164164
self._info, subject, subjects_dir, fiducials)
165+
fid_accurate = self._coreg._fid_accurate
165166
for fid in self._defaults["weights"].keys():
166167
setattr(self, f"_{fid}_weight", self._defaults["weights"][fid])
167168

@@ -188,13 +189,20 @@ def _get_default(var, val):
188189
# once the docks are initialized
189190
self._set_current_fiducial(self._defaults["fiducial"])
190191
self._set_scale_mode(self._defaults["scale_mode"])
191-
self._set_lock_fids(info is not None)
192192
if trans is not None:
193193
self._load_trans(trans)
194+
if not fid_accurate:
195+
self._set_head_resolution('high')
196+
self._set_lock_fids(True) # hack to make the dig disappear
197+
self._set_lock_fids(fid_accurate)
194198

195199
# must be done last
196200
if show:
197201
self._renderer.show()
202+
# update the view once shown
203+
views = {True: dict(azimuth=90, elevation=90), # front
204+
False: dict(azimuth=180, elevation=90)} # left
205+
self._renderer.set_camera(distance=None, **views[self._lock_fids])
198206
if standalone:
199207
self._renderer.figure.store["app"].exec()
200208

@@ -343,6 +351,7 @@ def _fiducials_file_changed(self, change=None):
343351
fids, _ = read_fiducials(self._fiducials_file)
344352
self._coreg._setup_fiducials(fids)
345353
self._reset()
354+
self._set_lock_fids(True)
346355

347356
@observe("_current_fiducial")
348357
def _current_fiducial_changed(self, change=None):

mne/gui/tests/test_coreg_gui.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def test_coreg_model(subjects_dir_tmp):
171171

172172
@requires_mayavi
173173
@traits_test
174-
def test_coreg_gui_display(subjects_dir_tmp, check_gui_ci):
174+
def test_coreg_gui_display(subjects_dir_tmp, check_gui_ci, renderer_mayavi):
175175
"""Test CoregFrame."""
176176
from mayavi import mlab
177177
from tvtk.api import tvtk
@@ -423,9 +423,12 @@ def test_coreg_gui_pyvista(tmpdir, renderer_interactive_pyvistaqt):
423423
config = get_config(home_dir=os.environ.get('_MNE_FAKE_HOME_DIR'))
424424
tmp_trans = op.join(tempdir, 'tmp-trans.fif')
425425

426+
# the sample subject in testing has MRI fids
427+
assert op.isfile(op.join(
428+
subjects_dir, 'sample', 'bem', 'sample-fiducials.fif'))
426429
coreg = coregistration(subject='sample', subjects_dir=subjects_dir,
427430
trans=fname_trans)
428-
assert not coreg._lock_fids
431+
assert coreg._lock_fids
429432
coreg._reset_fiducials()
430433
coreg.close()
431434

mne/viz/backends/_abstract.py

+6
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,18 @@
1313

1414

1515
class _AbstractRenderer(ABC):
16+
1617
@abstractclassmethod
1718
def __init__(self, fig=None, size=(600, 600), bgcolor=(0., 0., 0.),
1819
name=None, show=False, shape=(1, 1)):
1920
"""Set up the scene."""
2021
pass
2122

23+
@property
24+
@abstractmethod
25+
def _kind(self):
26+
pass
27+
2228
@abstractclassmethod
2329
def subplot(self, x, y):
2430
"""Set the active subplot."""

mne/viz/backends/_notebook.py

+2
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,8 @@ def update(self, repaint=True):
433433

434434
class _Renderer(_PyVistaRenderer, _IpyDock, _IpyToolBar, _IpyMenuBar,
435435
_IpyStatusBar, _IpyWindow, _IpyPlayback):
436+
_kind = 'notebook'
437+
436438
def __init__(self, *args, **kwargs):
437439
self._dock = None
438440
self._tool_bar = None

mne/viz/backends/_pysurfer_mayavi.py

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class _Renderer(_AbstractRenderer):
6161
Mayavi scene handle.
6262
"""
6363

64+
_kind = 'mayavi'
65+
6466
def __init__(self, fig=None, size=(600, 600), bgcolor='black',
6567
name=None, show=False, shape=(1, 1), smooth_shading=True):
6668
if bgcolor is not None:

mne/viz/backends/_qt.py

+3
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,8 @@ def update(self, repaint=True):
642642

643643
class _Renderer(_PyVistaRenderer, _QtDock, _QtToolBar, _QtMenuBar,
644644
_QtStatusBar, _QtWindow, _QtPlayback):
645+
_kind = 'qt'
646+
645647
def __init__(self, *args, **kwargs):
646648
super().__init__(*args, **kwargs)
647649
self._window_initialize()
@@ -653,6 +655,7 @@ def show(self):
653655
self.plotter.app_window.show()
654656
self._update()
655657
for plotter in self._all_plotters:
658+
plotter.updateGeometry()
656659
plotter._render()
657660
self._process_events()
658661

0 commit comments

Comments
 (0)