diff --git a/environment.yml b/environment.yml index f8d589f32a4..a5cbdea0ed2 100644 --- a/environment.yml +++ b/environment.yml @@ -23,7 +23,7 @@ dependencies: - spyder-kernels>=1.10.0 - imageio-ffmpeg>=0.4.1 - vtk>=9.0.1 -- pyvista>=0.24,<=0.29 +- pyvista>=0.24 - pyvistaqt>=0.2.0 - mayavi - PySurfer diff --git a/mne/viz/_brain/_brain.py b/mne/viz/_brain/_brain.py index e1f86f9b390..7fe5291c33b 100644 --- a/mne/viz/_brain/_brain.py +++ b/mne/viz/_brain/_brain.py @@ -1692,8 +1692,10 @@ def _clear_callbacks(self): # Remove the default key binding if getattr(self, "iren", None) is not None: try: + # pyvista<0.3.0 self.plotter._key_press_event_callbacks.clear() except AttributeError: + # pyvista>=0.3.0 self.plotter.iren.clear_key_event_callbacks() def _clear_widgets(self): diff --git a/mne/viz/backends/_notebook.py b/mne/viz/backends/_notebook.py index 08cc8ab2cb2..af1aea447eb 100644 --- a/mne/viz/backends/_notebook.py +++ b/mne/viz/backends/_notebook.py @@ -342,11 +342,13 @@ def show(self): display(self._tool_bar) # viewer try: + # pyvista<0.30.0 viewer = self.plotter.show( use_ipyvtk=True, return_viewer=True) except RuntimeError: + # pyvista>=0.30.0 viewer = self.plotter.show( - backend="ipyvtk_simple", return_viewer=True) + jupyter_backend="ipyvtk_simple", return_viewer=True) viewer.layout.width = None # unlock the fixed layout # main widget if self._dock is None: diff --git a/mne/viz/backends/_pyvista.py b/mne/viz/backends/_pyvista.py index 8e7cfac9be2..a0016d7da4d 100644 --- a/mne/viz/backends/_pyvista.py +++ b/mne/viz/backends/_pyvista.py @@ -668,18 +668,15 @@ def _update_picking_callback(self, on_button_press, on_button_release, on_pick): - self.plotter.iren.AddObserver( - vtk.vtkCommand.RenderEvent, - on_mouse_move - ) - self.plotter.iren.AddObserver( - vtk.vtkCommand.LeftButtonPressEvent, - on_button_press - ) - self.plotter.iren.AddObserver( - vtk.vtkCommand.EndInteractionEvent, - on_button_release - ) + try: + # pyvista<0.30.0 + add_obs = self.plotter.iren.AddObserver + except AttributeError: + # pyvista>=0.30.0 + add_obs = self.plotter.iren.add_observer + add_obs(vtk.vtkCommand.RenderEvent, on_mouse_move) + add_obs(vtk.vtkCommand.LeftButtonPressEvent, on_button_press) + add_obs(vtk.vtkCommand.EndInteractionEvent, on_button_release) self.plotter.picker = vtk.vtkCellPicker() self.plotter.picker.AddObserver( vtk.vtkCommand.EndPickEvent, diff --git a/mne/viz/tests/test_3d.py b/mne/viz/tests/test_3d.py index aba0903a32c..2d59f8e62b2 100644 --- a/mne/viz/tests/test_3d.py +++ b/mne/viz/tests/test_3d.py @@ -724,7 +724,12 @@ def test_plot_sensors_connectivity(renderer): fig = plot_sensors_connectivity(info=info, con=con, picks=picks) if renderer._get_3d_backend() == 'pyvista': - title = fig.plotter.scalar_bar.GetTitle() + try: + # pyvista<0.30.0 + title = fig.plotter.scalar_bar.GetTitle() + except AttributeError: + # pyvista>=0.30.0 + title = list(fig.plotter.scalar_bars.values())[0].GetTitle() else: assert renderer._get_3d_backend() == 'mayavi' # the last thing we add is the Tube, so we need to go diff --git a/requirements.txt b/requirements.txt index d5bb3c1620e..577ab76a427 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,7 +26,7 @@ nilearn xlrd imageio>=2.6.1 imageio-ffmpeg>=0.4.1 -pyvista>=0.24,<=0.29 +pyvista>=0.24 pyvistaqt>=0.2.0 tqdm mffpy>=0.5.7 diff --git a/tools/azure_dependencies.sh b/tools/azure_dependencies.sh index f0a6d837269..1b7f2dcc3f4 100755 --- a/tools/azure_dependencies.sh +++ b/tools/azure_dependencies.sh @@ -10,7 +10,7 @@ elif [ "${TEST_MODE}" == "pip-pre" ]; then python -m pip install --progress-bar off --upgrade --pre --only-binary ":all:" -f "https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com" h5py Pillow python -m pip install --progress-bar off --upgrade --pre --only-binary ":all" vtk python -m pip install --progress-bar off --upgrade --only-binary ":all" matplotlib - python -m pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/cb59a9ddfd97f5724f733bc226b41fb9ad4c9c5f + python -m pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/master python -m pip install --progress-bar off https://github.com/pyvista/pyvistaqt/zipball/master python -m pip install --progress-bar off --upgrade --only-binary="numba,llvmlite" -r requirements.txt else diff --git a/tools/circleci_dependencies.sh b/tools/circleci_dependencies.sh index 7c61486bd0c..b671fc5d161 100755 --- a/tools/circleci_dependencies.sh +++ b/tools/circleci_dependencies.sh @@ -20,6 +20,7 @@ if [[ "$CIRCLE_JOB" == "interactive_test" ]]; then python -m pip install --progress-bar off --upgrade --pre --only-binary ":all:" numba llvmlite wget -q https://osf.io/kej3v/download -O vtk-9.0.20201117-cp39-cp39-linux_x86_64.whl python -m pip install --progress-bar off vtk-9.0.20201117-cp39-cp39-linux_x86_64.whl + python -m pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/master python -m pip install --progress-bar off https://github.com/pyvista/pyvistaqt/zipball/master python -m pip install --progress-bar off --upgrade -r requirements_testing.txt python -m pip install nitime @@ -33,7 +34,7 @@ else # standard doc build echo "Installing doc build dependencies" python -m pip uninstall -y pydata-sphinx-theme python -m pip install --upgrade --progress-bar off -r requirements.txt -r requirements_testing.txt -r requirements_doc.txt - python -m pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/cb59a9ddfd97f5724f733bc226b41fb9ad4c9c5f + python -m pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/master python -m pip install --progress-bar off https://github.com/pyvista/pyvistaqt/zipball/master python -m pip uninstall -yq pysurfer mayavi python -m pip install -e . diff --git a/tools/github_actions_dependencies.sh b/tools/github_actions_dependencies.sh index 5d1a492c506..455a7b70c90 100755 --- a/tools/github_actions_dependencies.sh +++ b/tools/github_actions_dependencies.sh @@ -15,7 +15,7 @@ else # pip --pre 3.9 (missing dipy in pre) # built using vtk master branch on an Ubuntu 18.04.5 VM and uploaded to OSF: wget -q https://osf.io/kej3v/download -O vtk-9.0.20201117-cp39-cp39-linux_x86_64.whl pip install --progress-bar off vtk-9.0.20201117-cp39-cp39-linux_x86_64.whl - pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/cb59a9ddfd97f5724f733bc226b41fb9ad4c9c5f + pip install --progress-bar off https://github.com/pyvista/pyvista/zipball/master pip install --progress-bar off https://github.com/pyvista/pyvistaqt/zipball/master fi pip install --progress-bar off --upgrade -r requirements_testing.txt