init
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
"""Support dynamic or static jupyter notebook plotting.
|
||||
|
||||
Includes:
|
||||
|
||||
* ``trame``
|
||||
* ``client``
|
||||
* ``server``
|
||||
* ``html``
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import io
|
||||
from pathlib import Path
|
||||
|
||||
from IPython.lib.display import IFrame
|
||||
from PIL.Image import Image
|
||||
|
||||
from pyvista.jupyter import JupyterBackendOptions
|
||||
from pyvista.plotting.plotter import Plotter
|
||||
from pyvista.trame.jupyter import EmbeddableWidget
|
||||
from pyvista.trame.jupyter import Widget
|
||||
|
||||
|
||||
def handle_plotter(
|
||||
plotter: Plotter,
|
||||
backend: JupyterBackendOptions | None = None,
|
||||
screenshot: str | Path | io.BytesIO | bool | None = None, # noqa: FBT001
|
||||
**kwargs,
|
||||
) -> EmbeddableWidget | IFrame | Widget | Image:
|
||||
"""Show the ``pyvista`` plot in a jupyter environment.
|
||||
|
||||
Returns
|
||||
-------
|
||||
IPython Widget
|
||||
IPython widget or image.
|
||||
|
||||
"""
|
||||
if screenshot is False:
|
||||
screenshot = None
|
||||
|
||||
try:
|
||||
if backend in ['server', 'client', 'trame', 'html']:
|
||||
from pyvista.trame.jupyter import show_trame # noqa: PLC0415
|
||||
|
||||
return show_trame(plotter, mode=backend, **kwargs)
|
||||
|
||||
except ImportError as e:
|
||||
warnings.warn(
|
||||
f'Failed to use notebook backend: \n\n{e}\n\nFalling back to a static output.',
|
||||
)
|
||||
|
||||
return show_static_image(plotter, screenshot)
|
||||
|
||||
|
||||
def show_static_image(
|
||||
plotter: Plotter,
|
||||
screenshot: str | Path | io.BytesIO | bool | None, # noqa: FBT001
|
||||
) -> Image: # numpydoc ignore=RT01
|
||||
"""Display a static image to be displayed within a jupyter notebook."""
|
||||
import PIL.Image # noqa: PLC0415
|
||||
|
||||
if plotter.last_image is None:
|
||||
# Must render here, otherwise plotter will segfault.
|
||||
plotter.render()
|
||||
plotter.last_image = plotter.screenshot(screenshot, return_img=True)
|
||||
assert isinstance(plotter.last_image, np.ndarray)
|
||||
return PIL.Image.fromarray(plotter.last_image)
|
||||
Reference in New Issue
Block a user