<> = Python = == matplotlib: no window == === The problem === No window is opened when a script is run from a command line. Running the script in an interactive IDE is fine. === What happens === The module `matplotlib` closes all windows when unloaded. This happens immediately after the script terminates if it is run from a command line. When run inside a IDE, then the module stays loaded, keeping windows opened. === How to fix === A quick solution is wait for an input from a user at the end of the script. The following code, when added at the end of the script, opens an extra window asking to press any key: {{{#!highlight python ctrlWindow = matplotlib.pyplot.figure(figsize=(5, 1.5)) ctrlWindow.text(0.5, 0.5, "Press any key to close\nwhile this window is active.", ha="center", va="center", size=16) ctrlWindow.show() while not mathplotlib.pyplot.waitforbuttonpress(): pass }}} The function `waitforbuttonpress()` waits for a mouse click or a key being pressed and returns respectively `False` or `True`. The loop makes it sure that the program exists only in the second situation, so that you can interact with the windows using your mouse. '''Note:''' the program stops only when a key is pressed while the extra window is active. This allows to interact with other windows without limitation. == ngsolve.webgui.Draw() does not show a picture == === The problem === The command `Draw(...)` prints `BaseWebGuiScene` instead of showing a graphics === What happens === The WebGUI extension used by NGSolve has not been integrated with Jupyter, so that the notebook does not know what to do with them. === How to solve === Install the WebGUI extension with the following commands: {{{ pip3 install webgui_jupyter_widgets jupyter nbextension install --user --py widgetsnbextension jupyter nbextension enable --user --py widgetsnbextension jupyter nbextension install --user --py webgui_jupyter_widgets jupyter nbextension enable --user --py webgui_jupyter_widgets }}} == ngsolve/netgen: RuntimeError: std::bad_cast == === The problem === Importing `netgen.gui` opens a separate NGSolve window. After the window is closed, any Python code using ngsolve ends with `RuntimeError: std::bad_cast`. === What happens === NGSolve is not written entirely in Python, but instead it delegates computation to external libraries written in C/C++. In order for this to work, netgen.gui loads the libraries in a separate window and then it communicates with it. Once the window is closed, the libraries are no longer in the memory and ngsolve/netgen functions fail to access them. === How to solve === Keep the window opened by netgen.gui opened all the time. In case the window was closed, please reopen it with {{{#!highlight python netgen.gui.StartGUI() }}} '''Note''': the ngsolve libraries should be loaded in a background without opening the window. Currently we are not aware why this is not the case.