"""PyVista package for 3D plotting and mesh analysis.""" from __future__ import annotations import os import sys from typing import TYPE_CHECKING from typing import Literal import warnings from pyvista._plot import plot as plot from pyvista._version import __version__ as __version__ from pyvista._version import version_info as version_info from pyvista.core import * from pyvista.core import _validation as _validation from pyvista.core._typing_core._dataset_types import _DataObjectType as _DataObjectType from pyvista.core._typing_core._dataset_types import ( _DataSetOrMultiBlockType as _DataSetOrMultiBlockType, ) from pyvista.core._typing_core._dataset_types import _DataSetType as _DataSetType from pyvista.core._typing_core._dataset_types import _GridType as _GridType from pyvista.core._typing_core._dataset_types import _PointGridType as _PointGridType from pyvista.core._typing_core._dataset_types import _PointSetType as _PointSetType from pyvista.core._vtk_core import vtk_version_info as vtk_version_info from pyvista.core.cell import _get_vtk_id_type from pyvista.core.utilities.observers import send_errors_to_logging from pyvista.core.wrappers import _wrappers as _wrappers from pyvista.jupyter import set_jupyter_backend as set_jupyter_backend from pyvista.report import GPUInfo as GPUInfo from pyvista.report import Report as Report from pyvista.report import get_gpu_info as get_gpu_info if TYPE_CHECKING: import numpy as np # get the int type from vtk ID_TYPE: type[np.int32 | np.int64] = _get_vtk_id_type() # determine if using at least vtk 9.0.0 if vtk_version_info.major < 9: # pragma: no cover from pyvista.core.errors import VTKVersionError msg = 'VTK version must be 9.0.0 or greater.' raise VTKVersionError(msg) # catch annoying numpy/vtk future warning: warnings.simplefilter(action='ignore', category=FutureWarning) # A simple flag to set when generating the documentation OFF_SCREEN = os.environ.get('PYVISTA_OFF_SCREEN', 'false').lower() == 'true' # flag for when building the sphinx_gallery BUILDING_GALLERY = os.environ.get('PYVISTA_BUILDING_GALLERY', 'false').lower() == 'true' # A threshold for the max cells to compute a volume for when repr-ing REPR_VOLUME_MAX_CELLS = 1e6 # Set where figures are saved FIGURE_PATH = os.environ.get('PYVISTA_FIGURE_PATH', None) ON_SCREENSHOT = os.environ.get('PYVISTA_ON_SCREENSHOT', 'false').lower() == 'true' # Send VTK messages to the logging module: send_errors_to_logging() # theme to use by default for the plot directive PLOT_DIRECTIVE_THEME = None # Set a parameter to control default print format for floats outside # of the plotter FLOAT_FORMAT = '{:.3e}' # Serialization format to be used when pickling `DataObject` PICKLE_FORMAT: Literal['vtk', 'xml', 'legacy'] = 'vtk' if vtk_version_info >= (9, 3) else 'xml' # Name used for unnamed scalars DEFAULT_SCALARS_NAME = 'Data' MAX_N_COLOR_BARS = 10 _VTK_SNAKE_CASE_STATE: Literal['allow', 'warning', 'error'] = 'error' # Import all modules for type checkers and linters if TYPE_CHECKING: from pyvista import demos as demos from pyvista import examples as examples from pyvista import ext as ext from pyvista import trame as trame from pyvista import utilities as utilities from pyvista.plotting import * # Lazily import/access the plotting module def __getattr__(name): """Fetch an attribute ``name`` from ``globals()`` or the ``pyvista.plotting`` module. This override is implemented to prevent importing all of the plotting module and GL-dependent VTK modules when importing PyVista. Raises ------ AttributeError If the attribute is not found. """ import importlib # noqa: PLC0415 import inspect # noqa: PLC0415 allow = { 'demos', 'examples', 'ext', 'trame', 'utilities', } if name in allow: return importlib.import_module(f'pyvista.{name}') # avoid recursive import if 'pyvista.plotting' not in sys.modules: import pyvista.plotting # noqa: F401, PLC0415 try: feature = inspect.getattr_static(sys.modules['pyvista.plotting'], name) except AttributeError: msg = f"module 'pyvista' has no attribute '{name}'" raise AttributeError(msg) from None return feature