123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- r"""
- Internal functions not intended for use by users. This may change without
- notice.
- """
- from .. import logger
- from ..modules.vtkPVInSitu import vtkInSituPipelinePython
- from ..modules.vtkPVPythonCatalyst import vtkCPPythonScriptV2Helper
- def _get_active_helper():
- return vtkCPPythonScriptV2Helper.GetActiveInstance()
- def _get_active_data_description():
- if not IsInsitu():
- return None
- helper = _get_active_helper()
- return helper.GetDataDescription()
- def _transform_registration_name(name):
- from . import get_args
- import re, argparse
- regex = re.compile(r"^\${args\.([\w.-]+)}$")
- m = regex.match(name)
- if not m:
- return name
- argname = m.group(1)
- parser = argparse.ArgumentParser()
- parser.add_argument("--%s" % argname, dest=argname)
- parser.add_argument("-%s" % argname, dest=argname)
- result = parser.parse_known_args(get_args())[0]
- val = getattr(result, argname)
- return val if val else name
- def IsInsitu():
- """Returns True if executing in an insitu environment, else false"""
- helper = _get_active_helper()
- return (helper is not None)
- def IsLegacyCatalystAdaptor():
- """Returns True if the active execution environment is from within a legacy
- Catalyst adaptor implementation that uses vtkCPProcessor etc. manually,
- instead of the Conduit-based in situ API"""
- return _get_active_data_description() is not None
- if IsInsitu() and not IsLegacyCatalystAdaptor():
- from ..modules.vtkPVInSitu import vtkInSituInitializationHelper
- def IsCatalystInSituAPI():
- """Returns True if the active execution environment is from within
- an implementation of the Conduit-based Catalyst In Situ API."""
- return IsInsitu() and not IsLegacyCatalystAdaptor() and vtkInSituInitializationHelper.IsInitialized()
- def IsInsituInput(name):
- if not name or not IsInsitu():
- return False
- name = _transform_registration_name(name)
- dataDesc = _get_active_data_description()
- if IsLegacyCatalystAdaptor():
- # Legacy Catalyst
- if dataDesc.GetInputDescriptionByName(name) is not None:
- return True
- elif IsCatalystInSituAPI() and (vtkInSituInitializationHelper.GetProducer(name) is not None):
- # Catalyst 2.0
- return True
- return False
- def RegisterExtractor(extractor):
- """Keeps track of extractors created inside a specific Catalyst
- script. This is useful to ensure we only update the extractors for that
- current script when multiple scripts are being executed in the same run.
- """
- assert IsInsitu()
- _get_active_helper().RegisterExtractor(extractor.SMProxy)
- def RegisterView(view):
- """Keeps track of views created inside a specific Catalyst
- script. This is useful to ensure we only update the views for the
- current script when multiple scripts are being executed in the same run.
- """
- assert IsInsitu()
- _get_active_helper().RegisterView(view.SMProxy)
- if IsCatalystInSituAPI():
- view.ViewTime = vtkInSituInitializationHelper.GetTime()
- else:
- view.ViewTime = _get_active_data_description().GetTime()
- def CreateProducer(name):
- assert IsInsituInput(name)
- from . import log_level
- from .. import log
- originalname = name
- name = _transform_registration_name(name)
- log(log_level(), "creating producer for simulation input named '%s' (original-name=%s)" \
- % (name, originalname))
- if IsCatalystInSituAPI():
- # Catalyst 2.0
- from paraview import servermanager
- producer = servermanager._getPyProxy(vtkInSituInitializationHelper.GetProducer(name))
- # since state file may have arbitrary properties being specified
- # on the original source, we ensure we ignore them
- producer.IgnoreUnknownSetRequests = True
- return producer
- # Legacy Catalyst
- from paraview import servermanager
- helper = _get_active_helper()
- producer = helper.GetTrivialProducer(name)
- producer = servermanager._getPyProxy(producer)
- # since state file may have arbitrary properties being specified
- # on the original source, we ensure we ignore them
- producer.IgnoreUnknownSetRequests = True
- return producer
- def InitializePythonEnvironment():
- """
- This is called in vtkCPPythonPipeline to initialize the Python
- environment to be more suitable for Catalyst in situ execution.
- """
- from . import log_level
- from .. import log
- log(log_level(), "initializing Python environment for in situ")
- # disable writing bytecode, we don't want to generate pyc files
- # when running in situ.
- log(log_level(), "disable byte-code generation")
- import sys
- sys.dont_write_bytecode = True
- # ensure we can import ParaView servermanager and necessary modules
- log(log_level(), "import paraview.servermanager")
- from paraview import servermanager
- # import Python wrapping for vtkPVCatalyst module
- log(log_level(), "import paraview.modules.vtkPVCatalyst")
- from paraview.modules import vtkPVCatalyst
- def RegisterPackageFromZip(zipfilename, packagename=None):
- from . import importers
- zipfilename = _mpi_exchange_if_needed(zipfilename)
- return importers.add_file(zipfilename, packagename)
- def RegisterPackageFromDir(path):
- import os.path
- from . import importers
- packagename = os.path.basename(path)
- init_py = os.path.join(path, "__init__.py")
- return importers.add_file(init_py, packagename)
- def RegisterModuleFromFile(filename):
- from . import importers
- return importers.add_file(filename)
- _temp_directory = None
- def _mpi_exchange_if_needed(filename):
- global _temp_directory
- from ..modules.vtkRemotingCore import vtkProcessModule
- pm = vtkProcessModule.GetProcessModule()
- if pm.GetNumberOfLocalPartitions() <= 1:
- return filename
- from mpi4py import MPI
- from vtkmodules.vtkParallelMPI4Py import vtkMPI4PyCommunicator
- comm = vtkMPI4PyCommunicator.ConvertToPython(pm.GetGlobalController().GetCommunicator())
- if comm.Get_rank() == 0:
- with open(filename, 'rb') as f:
- data = f.read()
- else:
- data = None
- data = comm.bcast(data, root=0)
- if comm.Get_rank() == 0:
- return filename
- else:
- if not _temp_directory:
- import tempfile, os.path
- # we hook the temp-dir to the module so it lasts for the livetime of
- # the interpreter and gets cleaned up on exit.
- _temp_directory = tempfile.TemporaryDirectory()
- filename = os.path.join(_temp_directory.name, os.path.basename(filename))
- with open(filename, "wb") as f:
- f.write(data)
- return filename
|