Controlling ParaView from Jupyter Notebook
We are happy to announce the release of a ParaView kernel for Jupyter notebooks [1] [2]!
Basically, creating a ParaView Notebook launches the ParaView GUI in background. Then, the whole API of ParaView is available from the Notebook. At this point, it is very similar to the standard Python shell. Below is a demonstration video.
Demonstration of our ParaView kernel for Jupyter Notebooks.
API to ease data manipulation
In addition, we created a simple Python API so numpy data can easily be added to the pipeline. The API includes:
- create an empty grid;
- create a grid from data;
- add/remove data to a grid;
- remove a grid;
- get the current selection;
- display screenshots (current View states) in the notebook.
For instance, the following notebook generate data with numpy and initialize a regular grid – see Fig. 1.
Figure 1 – A new source can be created and initialized from numpy array.
The dimensions of the resulting grid are set accordingly to the numpy array shape, and a PointData array is created with the data
values – see Fig. 2.
Figure 2 – Resulting information panel
Then the ParaView API can be used to create visualization. Note the Display
method to bring back screenshots in the cell output – see Fig. 3.
Figure 3 – Screenshots can be displayed inside the notebook.
Generating Notebooks from the GUI
In ParaView’s GUI, the Python Trace utility can be used to generate a python script. This feature records action from the GUI and creates a Python version of those actions. To ease creation of notebooks, we added a button in the toolbar to create a trace and transfer it to the current notebook – see Fig. 4.
Figure 4 – This last Notebook cell is the ParaView trace for creating a clip retrieved by clicking a button in the UI.
Technical information
This ParaView plugin implements Jupyter kernel based on the Xeus project [4]. It provides a kernel configuration file for Jupyter. In this configuration, the executable to be launch is ParaView, configured to load the plugin at startup. It uses environment environment variables to specify the plugin location and to initialize the Jupyter communication.
Also please note that current version does not work on Windows.
Next steps
Some features from notebook, such as widgets and magics could be useful but are not implemented yet. They may come in the future, stay tuned!
Acknowledgements
This work was supported by Total SA
Developments were done by Kitware SAS, France.
We wanted to thank the 3DSlicer team who worked on a similar project a few months ago [3], and helped us a lot to start the work.
Resources
[1] Kernel repository https://gitlab.kitware.com/paraview/paraviewjupyterkernel
[2] Jupyter main page https://jupyter.org/
[3] Slicer kernel announcement https://discourse.slicer.org/t/jupyter-notebooks-are-now-usable-in-3d-slicer/3438
[4] xeus https://xeus.readthedocs.io/en/latest/
Hi, I have followed the installation step by step on Ubuntu 16.04.
I installed Xeus with Conda, I compiled Paraview, I then download the Kernel and built it using cmake.
But then, when I run it in Jupyter notebook, the Kernel connects and it seems to work, but when I run the Example DemoAPI, I am unable to run any command in it.
When I run “from PVInterface import ” for example, the star [] appears but then do not dissapear. There is no error message whatsoever.
Any idea what might go wrong and how to check?
Thank you very much
Cyprien
Is this project still being developed or is it deprecated at this point? I am giving Python courses for Scientists and am currently planning a lecture on Jupyter – Paraview interoperability
Indeed, this project is not maintained anymore. You should have a look at its successor, https://gitlab.kitware.com/paraview/iparaview-kernel
Alas, this last one is not compatible with ParaView 5.10 (current release at time of writing) but will be OK with next one (5.11), and is already usable with master branch of ParaView.
Thank you for the quick reply! Are you working together with the NVidia people for the ipyparaview project or are these basically two competing libraries?
Those are different and independant projects: nvidia code (https://github.com/NVIDIA/ipyparaview) add a jupyter widget containing a ParaView view, in pure python. Our project aimed to be used together with a running ParaView client application, as you can do from the GUI with the embeded python shell.