def test_brain_timeviewer(renderer_interactive, pixel_ratio): """Test _TimeViewer primitives.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip('TimeViewer tests only supported on PyVista') brain_data = _create_testing_brain(hemi='both', show_traces=False) with pytest.raises(RuntimeError, match='already'): _TimeViewer(brain_data) time_viewer = brain_data.time_viewer time_viewer.time_call(value=0) time_viewer.orientation_call(value='lat', update_widget=True) time_viewer.orientation_call(value='medial', update_widget=True) time_viewer.smoothing_call(value=1) time_viewer.fmin_call(value=12.0) time_viewer.fmax_call(value=4.0) time_viewer.fmid_call(value=6.0) time_viewer.fmid_call(value=4.0) time_viewer.fscale_call(value=1.1) time_viewer.toggle_interface() time_viewer.playback_speed_call(value=0.1) time_viewer.toggle_playback() time_viewer.apply_auto_scaling() time_viewer.restore_user_scaling() time_viewer.reset() plt.close('all') time_viewer.help() assert len(plt.get_fignums()) == 1 plt.close('all') # screenshot brain_data.show_view(view=dict(azimuth=180., elevation=90.)) img = brain_data.screenshot(mode='rgb') want_shape = np.array([300 * pixel_ratio, 300 * pixel_ratio, 3]) assert_allclose(img.shape, want_shape)
def test_brain_linkviewer(renderer_interactive): """Test _LinkViewer primitives.""" brain_data = _create_testing_brain(hemi='split') _TimeViewer(brain_data) link_viewer = _LinkViewer([brain_data]) link_viewer.set_time_point(value=0) link_viewer.set_playback_speed(value=0.1) link_viewer.toggle_playback()
def test_brain_linkviewer(renderer_interactive): """Test _LinkViewer primitives.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip() brain_data = _create_testing_brain(hemi='split') _TimeViewer(brain_data) link_viewer = _LinkViewer([brain_data]) link_viewer.set_time_point(value=0) link_viewer.set_playback_speed(value=0.1) link_viewer.toggle_playback()
def test_brain_linkviewer(renderer_interactive, travis_macos): """Test _LinkViewer primitives.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip('Linkviewer only supported on PyVista') if travis_macos: pytest.skip('Linkviewer tests unstable on Travis macOS') brain_data = _create_testing_brain(hemi='split') _TimeViewer(brain_data) link_viewer = _LinkViewer([brain_data]) link_viewer.set_time_point(value=0) link_viewer.set_playback_speed(value=0.1) link_viewer.toggle_playback()
def test_brain_timeviewer(renderer_interactive): """Test _TimeViewer primitives.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip() brain_data = _create_testing_brain(hemi='both') time_viewer = _TimeViewer(brain_data) time_viewer.time_call(value=0) time_viewer.orientation_call(value='lat', update_widget=True) time_viewer.orientation_call(value='medial', update_widget=True) time_viewer.smoothing_call(value=1) time_viewer.fmin_call(value=12.0) time_viewer.fmax_call(value=4.0) time_viewer.fmid_call(value=6.0) time_viewer.fmid_call(value=4.0) time_viewer.fscale_call(value=1.1) time_viewer.toggle_interface() time_viewer.playback_speed_call(value=0.1) time_viewer.toggle_playback() time_viewer.apply_auto_scaling() time_viewer.restore_user_scaling() # screenshot brain_data.show_view(view=dict(azimuth=180., elevation=90.)) img = brain_data.screenshot(mode='rgb') assert (img.shape == (300, 300, 3))
def test_brain_timeviewer(renderer): """Test _TimeViewer primitives.""" if renderer.get_3d_backend() == "mayavi": pytest.skip() # Skip PySurfer.TimeViewer else: # Disable testing to allow interactive window renderer.MNE_3D_BACKEND_TESTING = False sample_src = read_source_spaces(src_fname) # dense version vertices = [s['vertno'] for s in sample_src] n_time = 5 n_verts = sum(len(v) for v in vertices) stc_data = np.zeros((n_verts * n_time)) stc_size = stc_data.size stc_data[(np.random.rand(stc_size // 20) * stc_size).astype(int)] = \ np.random.RandomState(0).rand(stc_data.size // 20) stc_data.shape = (n_verts, n_time) stc = SourceEstimate(stc_data, vertices, 1, 1) fmin = stc.data.min() fmax = stc.data.max() brain_data = _Brain(subject_id, 'split', surf, size=300, subjects_dir=subjects_dir) for hemi in ['lh', 'rh']: hemi_idx = 0 if hemi == 'lh' else 1 data = getattr(stc, hemi + '_data') vertices = stc.vertices[hemi_idx] brain_data.add_data(data, fmin=fmin, hemi=hemi, fmax=fmax, colormap='hot', vertices=vertices, colorbar=True) time_viewer = _TimeViewer(brain_data) time_viewer.time_call(value=0) time_viewer.orientation_call(value='lat', update_widget=True) time_viewer.orientation_call(value='medial', update_widget=True) time_viewer.smoothing_call(value=1) time_viewer.fmin_call(value=12.0) time_viewer.fmax_call(value=4.0) time_viewer.fmid_call(value=6.0) time_viewer.fmid_call(value=4.0) time_viewer.fscale_call(value=1.1) time_viewer.toggle_interface() time_viewer.playback_speed_call(value=0.1) time_viewer.toggle_playback() time_viewer.apply_auto_scaling() time_viewer.restore_user_scaling() link_viewer = _LinkViewer([brain_data]) link_viewer.set_time_point(value=0) link_viewer.set_playback_speed(value=0.1) link_viewer.toggle_playback()
def test_brain_timeviewer_traces(renderer_interactive, hemi): """Test _TimeViewer traces.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip() brain_data = _create_testing_brain(hemi=hemi) time_viewer = _TimeViewer(brain_data, show_traces=True) assert hasattr(time_viewer, "picked_points") assert hasattr(time_viewer, "_spheres") # test points picked by default picked_points = brain_data.get_picked_points() spheres = time_viewer._spheres hemi_str = [hemi] if hemi in ('lh', 'rh') else ['lh', 'rh'] for current_hemi in hemi_str: assert len(picked_points[current_hemi]) == 1 assert len(spheres) == len(hemi_str) # test removing points time_viewer.clear_points() assert len(picked_points['lh']) == 0 assert len(picked_points['rh']) == 0 # test picking a cell at random for idx, current_hemi in enumerate(hemi_str): current_mesh = brain_data._hemi_meshes[current_hemi] cell_id = np.random.randint(0, current_mesh.n_cells) test_picker = TstVTKPicker(current_mesh, cell_id) assert cell_id == test_picker.cell_id assert test_picker.point_id is None time_viewer.on_pick(test_picker, None) assert test_picker.point_id is not None assert len(picked_points[current_hemi]) == 1 assert picked_points[current_hemi][0] == test_picker.point_id sphere = spheres[idx] vertex_id = sphere._vertex_id assert vertex_id == test_picker.point_id line = sphere._line hemi_prefix = 'L' if current_hemi == 'lh' else 'R' hemi_int = 0 if current_hemi == 'lh' else 1 mni = vertex_to_mni(vertices=vertex_id, hemis=hemi_int, subject=brain_data._subject_id, subjects_dir=brain_data._subjects_dir) label = "{}:{} MNI: {}".format(hemi_prefix, str(vertex_id).ljust(6), ', '.join('%5.1f' % m for m in mni)) assert line.get_label() == label assert len(spheres) == len(hemi_str)
def test_brain_timeviewer(renderer_interactive): """Test _TimeViewer primitives.""" brain_data = _create_testing_brain(hemi='both') time_viewer = _TimeViewer(brain_data) time_viewer.time_call(value=0) time_viewer.orientation_call(value='lat', update_widget=True) time_viewer.orientation_call(value='medial', update_widget=True) time_viewer.smoothing_call(value=1) time_viewer.fmin_call(value=12.0) time_viewer.fmax_call(value=4.0) time_viewer.fmid_call(value=6.0) time_viewer.fmid_call(value=4.0) time_viewer.fscale_call(value=1.1) time_viewer.toggle_interface() time_viewer.playback_speed_call(value=0.1) time_viewer.toggle_playback() time_viewer.apply_auto_scaling() time_viewer.restore_user_scaling()
def test_brain_timeviewer_traces(renderer_interactive, hemi, src, tmpdir): """Test _TimeViewer traces.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip('Only PyVista supports traces') brain_data = _create_testing_brain( hemi=hemi, surf='white', src=src, show_traces=0.5, initial_time=0, volume_options=None, # for speed, don't upsample ) with pytest.raises(RuntimeError, match='already'): _TimeViewer(brain_data) time_viewer = brain_data.time_viewer assert time_viewer.show_traces assert hasattr(time_viewer, "picked_points") assert hasattr(time_viewer, "_spheres") # test points picked by default picked_points = brain_data.get_picked_points() spheres = time_viewer._spheres hemi_str = list() if src in ('surface', 'mixed'): hemi_str.extend([hemi] if hemi in ('lh', 'rh') else ['lh', 'rh']) if src in ('mixed', 'volume'): hemi_str.extend(['vol']) for current_hemi in hemi_str: assert len(picked_points[current_hemi]) == 1 n_spheres = len(hemi_str) if hemi == 'split' and src in ('mixed', 'volume'): n_spheres += 1 assert len(spheres) == n_spheres # test removing points time_viewer.clear_points() assert len(spheres) == 0 for key in ('lh', 'rh', 'vol'): assert len(picked_points[key]) == 0 # test picking a cell at random rng = np.random.RandomState(0) for idx, current_hemi in enumerate(hemi_str): assert len(spheres) == 0 if current_hemi == 'vol': current_mesh = brain_data._data['vol']['grid'] vertices = brain_data._data['vol']['vertices'] values = current_mesh.cell_arrays['values'][vertices] cell_id = vertices[np.argmax(np.abs(values))] else: current_mesh = brain_data._hemi_meshes[current_hemi] cell_id = rng.randint(0, current_mesh.n_cells) test_picker = TstVTKPicker(None, None, current_hemi, brain_data) assert time_viewer.on_pick(test_picker, None) is None test_picker = TstVTKPicker(current_mesh, cell_id, current_hemi, brain_data) assert cell_id == test_picker.cell_id assert test_picker.point_id is None time_viewer.on_pick(test_picker, None) assert test_picker.point_id is not None assert len(picked_points[current_hemi]) == 1 assert picked_points[current_hemi][0] == test_picker.point_id assert len(spheres) > 0 sphere = spheres[-1] vertex_id = sphere._vertex_id assert vertex_id == test_picker.point_id line = sphere._line hemi_prefix = current_hemi[0].upper() if current_hemi == 'vol': assert hemi_prefix + ':' in line.get_label() assert 'MNI' in line.get_label() continue # the MNI conversion is more complex hemi_int = 0 if current_hemi == 'lh' else 1 mni = vertex_to_mni(vertices=vertex_id, hemis=hemi_int, subject=brain_data._subject_id, subjects_dir=brain_data._subjects_dir) label = "{}:{} MNI: {}".format(hemi_prefix, str(vertex_id).ljust(6), ', '.join('%5.1f' % m for m in mni)) assert line.get_label() == label # remove the sphere by clicking in its vicinity old_len = len(spheres) test_picker._actors = sum((s._actors for s in spheres), []) time_viewer.on_pick(test_picker, None) assert len(spheres) < old_len # and the scraper for it (will close the instance) if not check_version('sphinx_gallery'): return screenshot = brain_data.screenshot() fnames = [str(tmpdir.join('temp.png'))] block_vars = dict(image_path_iterator=iter(fnames), example_globals=dict(brain=brain_data)) gallery_conf = dict(src_dir=str(tmpdir)) scraper = _BrainScraper() rst = scraper(None, block_vars, gallery_conf) assert 'temp.png' in rst assert path.isfile(fnames[0]) img = image.imread(fnames[0]) assert img.shape[1] == screenshot.shape[1] # same width assert img.shape[0] > screenshot.shape[0] # larger height
def test_brain_timeviewer_traces(renderer_interactive, hemi, tmpdir): """Test _TimeViewer traces.""" if renderer_interactive._get_3d_backend() != 'pyvista': pytest.skip('Only PyVista supports traces') brain_data = _create_testing_brain(hemi=hemi) time_viewer = _TimeViewer(brain_data, show_traces=True) assert hasattr(time_viewer, "picked_points") assert hasattr(time_viewer, "_spheres") # test points picked by default picked_points = brain_data.get_picked_points() spheres = time_viewer._spheres hemi_str = [hemi] if hemi in ('lh', 'rh') else ['lh', 'rh'] for current_hemi in hemi_str: assert len(picked_points[current_hemi]) == 1 assert len(spheres) == len(hemi_str) # test removing points time_viewer.clear_points() assert len(picked_points['lh']) == 0 assert len(picked_points['rh']) == 0 # test picking a cell at random for idx, current_hemi in enumerate(hemi_str): current_mesh = brain_data._hemi_meshes[current_hemi] cell_id = np.random.randint(0, current_mesh.n_cells) test_picker = TstVTKPicker(current_mesh, cell_id) assert cell_id == test_picker.cell_id assert test_picker.point_id is None time_viewer.on_pick(test_picker, None) assert test_picker.point_id is not None assert len(picked_points[current_hemi]) == 1 assert picked_points[current_hemi][0] == test_picker.point_id sphere = spheres[idx] vertex_id = sphere._vertex_id assert vertex_id == test_picker.point_id line = sphere._line hemi_prefix = 'L' if current_hemi == 'lh' else 'R' hemi_int = 0 if current_hemi == 'lh' else 1 mni = vertex_to_mni(vertices=vertex_id, hemis=hemi_int, subject=brain_data._subject_id, subjects_dir=brain_data._subjects_dir) label = "{}:{} MNI: {}".format(hemi_prefix, str(vertex_id).ljust(6), ', '.join('%5.1f' % m for m in mni)) assert line.get_label() == label assert len(spheres) == len(hemi_str) # and the scraper for it (will close the instance) if not check_version('sphinx_gallery'): return screenshot = brain_data.screenshot() fnames = [str(tmpdir.join('temp.png'))] block_vars = dict(image_path_iterator=iter(fnames), example_globals=dict(brain=brain_data)) gallery_conf = dict(src_dir=str(tmpdir)) scraper = _BrainScraper() rst = scraper(None, block_vars, gallery_conf) assert 'temp.png' in rst assert path.isfile(fnames[0]) img = image.imread(fnames[0]) assert img.shape[1] == screenshot.shape[1] # same width assert img.shape[0] > screenshot.shape[0] # larger height