Example #1
0
    def _get_ids(self, np_array=False):
        """
        Returns
        -------
        ids : list[int], numpy.array (if np_array==True)
            List of IDs.

        Notes
        -----
        Print a progress bar.
        """
        if server_meet_version("2.1", self._server):
            service = self._stub.List(self._message)
            dtype = np.int32
            return _data_get_chunk_(dtype, service, np_array)
        else:
            out = []

            service = self._stub.List(self._message)
            for chunk in service:
                out.extend(chunk.ids.rep_int)
            if np_array:
                return np.array(out, dtype=np.int32)
            else:
                return out
Example #2
0
    def get_output(self, pin_name, output_type):
        """Retrieve the output of the operator on the pin number.
        A progress bar following the workflow state is printed.

        Parameters
        ----------
        pin_name : str
            Name of the pin to retrieve. This name should be
            exposed before with wf.set_output_name
        output_type : core.type enum
            Type of the requested output.
        """

        request = workflow_pb2.WorkflowEvaluationRequest()
        request.wf.CopyFrom(self._message)
        request.pin_name = pin_name

        if output_type is not None:
            dpf_operator._write_output_type_to_proto_style(
                output_type, request)
            if server_meet_version("3.0", self._server):
                # handle progress bar
                self._server._session.add_workflow(self, "workflow")
                out_future = self._stub.Get.future(request)
                while out_future.is_active():
                    self._server._session.listen_to_progress()
                out = out_future.result()
            else:
                out = self._stub.Get(request)
            return dpf_operator._convertOutputMessageToPythonInstance(
                out, output_type, self._server)
        else:
            raise ValueError(
                "please specify an output type to get the workflow's output")
Example #3
0
    def named_selection(self, named_selection):
        """Scoping containing the list of nodes or elements in the named selection.

        Parameters
        ----------
        named_selection : str
            Name of the named selection.

        Returns
        -------
        named_selection : Scoping
        """
        if server_meet_version("2.1", self._server):
            request = meshed_region_pb2.GetScopingRequest(mesh=self._message)
            request.named_selection = named_selection
            out = self._stub.GetScoping(request)
            return scoping.Scoping(scoping=out, server=self._server)
        else:
            if hasattr(self, "_stream_provider"):
                from ansys.dpf.core.dpf_operator import Operator

                op = Operator("scoping_provider_by_ns", server=self._server)
                op.connect(1, named_selection)
                op.connect(3, self._stream_provider, 0)
                return op.get_output(0, types.scoping)
            else:
                raise Exception(
                    "Getting a named selection from a meshed region is "
                    "only implemented for meshed region created from a "
                    "model for server version 2.0. Please update your server."
                )
Example #4
0
    def _set_ids(self, ids):
        """
        Parameters
        ----------
        ids : list of int
            IDs to set.

        Notes
        -----
        Print a progress bar.
        """
        # must convert to a list for gRPC
        if isinstance(ids, range):
            ids = np.array(list(ids), dtype=np.int32)
        elif not isinstance(ids, (np.ndarray, np.generic)):
            ids = np.array(ids, dtype=np.int32)
        else:
            ids = np.array(list(ids), dtype=np.int32)

        metadata = [("size_int", f"{len(ids)}")]
        request = scoping_pb2.UpdateIdsRequest()
        request.scoping.CopyFrom(self._message)
        if server_meet_version("2.1", self._server):
            self._stub.UpdateIds(_data_chunk_yielder(request, ids),
                                 metadata=metadata)
        else:
            self._stub.UpdateIds(_data_chunk_yielder(request, ids, 8.0e6),
                                 metadata=metadata)
Example #5
0
    def __init__(self, server=None):
        if server is None:
            server = dpf.core._global_server()

        self._server_weak_ref = weakref.ref(server)
        if server_meet_version("3.0", self._server):
            self._stub = self._connect()
            self.__send_init_request()
            self.add_progress_system()
Example #6
0
 def solver_version(self):
     """Version of the solver."""
     if server_meet_version("3.0", self._server):
         return self._get_property("solver_version")
     list = self._get_list()
     major = list.solver_major_version
     minor = list.solver_minor_version
     version = str(major) + "." + str(minor)
     return version
Example #7
0
 def __send_init_request(self, workflow):
     if server_meet_version("3.0", self._server) \
             and isinstance(workflow, workflow_pb2.RemoteCopyRequest):
         request = workflow_pb2.CreateRequest()
         request.remote_copy.CopyFrom(workflow)
     else:
         request = base_pb2.Empty()
         if hasattr(workflow_pb2, "CreateRequest"):
             request = workflow_pb2.CreateRequest(empty=request)
     self._message = self._stub.Create(request)
Example #8
0
 def _get_physics_type(self):
     """
     Returns
     -------
     physics_type : str
         Type of the physics, such as mechanical or electric.
     """
     if server_meet_version("3.0", self._server):
         return self._get_property("physics_type")
     intOut = self._get_list().physics_type
     return result_info_pb2.PhysicsType.Name(intOut).lower()
Example #9
0
def test_physics_type_cache(simple_bar):
    ds = dpf.DataSources(simple_bar)
    provider = dpf.operators.metadata.result_info_provider(data_sources=ds)
    res_info = provider.outputs.result_info()
    assert len(res_info._cache.cached) == 0
    res_info.unit_system
    assert len(res_info._cache.cached) == 1
    res_info.physics_type
    if server_meet_version("3.0", ds._server):
        assert len(res_info._cache.cached) == 2
    else:
        assert len(res_info._cache.cached) == 1
Example #10
0
    def __init__(self, workflow=None, server=None):
        """Initialize the workflow by connecting to a stub."""
        if server is None:
            server = dpf.core._global_server()

        self._server = server
        self._stub = self._connect()

        self._message = workflow

        remote_copy_needed = server_meet_version("3.0", self._server) \
                             and isinstance(workflow, workflow_pb2.RemoteCopyRequest)
        if isinstance(workflow, str):
            self.__create_from_stream(workflow)
        elif workflow is None or remote_copy_needed:
            self.__send_init_request(workflow)
Example #11
0
    def get_output(self, pin=0, output_type=None):
        """Retrieve the output of the operator on the pin number.

        To activate the progress bar for server version higher or equal to 3.0,
        use ``my_op.progress_bar=True``

        Parameters
        ----------
        pin : int, optional
            Number of the output pin. The default is ``0``.
        output_type : :class:`ansys.dpf.core.common.types`, optional
            Requested type of the output. The default is ``None``.

        Returns
        -------
        type
            Output of the operator.
        """

        request = operator_pb2.OperatorEvaluationRequest()
        request.op.CopyFrom(self._message)
        request.pin = pin

        if output_type:
            _write_output_type_to_proto_style(output_type, request)
            if server_meet_version("3.0", self._server) and self._progress_bar:
                self._server._session.add_operator(self, pin, "workflow")
                out_future = self._stub.Get.future(request)
                while out_future.is_active():
                    if self._progress_bar:
                        self._server._session.listen_to_progress()
                out = out_future.result()
            else:
                out = self._stub.Get(request)
            return _convertOutputMessageToPythonInstance(
                out, output_type, self._server)
        else:
            request.type = base_pb2.Type.Value("RUN")
            out_future = self._stub.Get.future(request)
            out_future.result()
Example #12
0
    def analysis_type(self):
        """Retrieves the analysis type.

        Returns
        -------
        analysis_type : str
            Type of the analysis, such as static or transient.

        Examples
        --------
        >>> from ansys.dpf import core as dpf
        >>> from ansys.dpf.core import examples
        >>> transient = examples.download_transient_result()
        >>> model = dpf.Model(transient)
        >>> result_info = model.metadata.result_info
        >>> result_info.analysis_type
        'static'

        """
        if server_meet_version("3.0", self._server):
            return self._get_property("analysis_type")

        intOut = self._get_list().analysis_type
        return result_info_pb2.AnalysisType.Name(intOut).lower()
Example #13
0
 def main_title(self):
     """Main title."""
     if server_meet_version("3.0", self._server):
         return self._get_property("main_title")
     return self._get_list().main_title
Example #14
0
 def product_name(self):
     """Name of the product."""
     if server_meet_version("3.0", self._server):
         return self._get_property("product_name")
     return self._get_list().product_name
Example #15
0
 def job_name(self):
     """Name of the job."""
     if server_meet_version("3.0", self._server):
         return self._get_property("job_name")
     return self._get_list().job_name
Example #16
0
 def user_name(self):
     """Name of the user."""
     if server_meet_version("3.0", self._server):
         return self._get_property("user_name")
     return self._get_list().user_name
Example #17
0
 def solver_time(self):
     """Time of the solver."""
     if server_meet_version("3.0", self._server):
         return int(self._get_property("solver_time"))
     return self._get_list().solver_time
Example #18
0
 def unit_system_name(self):
     """Name of the unit system."""
     if server_meet_version("3.0", self._server):
         return self._get_property("unit_system_name")
     return self._get_list().unit_system_name
Example #19
0
 def n_results(self):
     """Number of results."""
     if server_meet_version("3.0", self._server):
         str_num = self._get_property("results_count")
         return int(str_num)
     return self._get_list().nresult
Example #20
0
 def __del__(self):
     try:
         if server_meet_version("3.0", self._server):
             self._stub.Delete(self._message)
     except:
         pass
Example #21
0
 def unit_system(self):
     """Unit system of the result."""
     if server_meet_version("3.0", self._server):
         return self._get_property("unit_system_name")
     val = self._get_list().unit_system
     return map_unit_system[val]
Example #22
0
def _fillConnectionRequestMessage(request, inpt, server, pin_out=0):
    from ansys.dpf.core import (
        collection,
        cyclic_support,
        data_sources,
        field_base,
        meshed_region,
        model,
        scoping,
        workflow,
        time_freq_support,
    )
    from pathlib import Path
    if isinstance(inpt, str):
        request.str = inpt
    elif isinstance(inpt, Path):
        request.str = str(inpt)
    elif isinstance(inpt, bool):
        request.bool = inpt
    elif isinstance(inpt, int):
        request.int = inpt
    elif isinstance(inpt, float):
        request.double = inpt
    elif isinstance(inpt, list):
        if all(isinstance(x, int) for x in inpt):
            if server_meet_version("3.0", server):
                inpt = collection.Collection.integral_collection(inpt, server)
                request.collection.CopyFrom(inpt._message)
                return inpt
            else:
                request.vint.rep_int.extend(inpt)
        elif all(isinstance(x, float) for x in inpt):
            if server_meet_version("3.0", server):
                inpt = collection.Collection.integral_collection(inpt, server)
                request.collection.CopyFrom(inpt._message)
                return inpt
            else:
                request.vdouble.rep_double.extend(inpt)
        else:
            errormsg = f"input type {inpt.__class__} cannot be connected"
            raise TypeError(errormsg)
    elif isinstance(inpt, field_base._FieldBase):
        request.field.CopyFrom(inpt._message)
    elif isinstance(inpt, collection.Collection):
        request.collection.CopyFrom(inpt._message)
    elif isinstance(inpt, scoping.Scoping):
        request.scoping.CopyFrom(inpt._message)
    elif isinstance(inpt, data_sources.DataSources):
        request.data_sources.CopyFrom(inpt._message)
    elif isinstance(inpt, model.Model):
        request.data_sources.CopyFrom(inpt.metadata.data_sources._message)
    elif isinstance(inpt, meshed_region.MeshedRegion):
        request.mesh.CopyFrom(inpt._message)
    elif isinstance(inpt, cyclic_support.CyclicSupport):
        request.cyc_support.CopyFrom(inpt._message)
    elif isinstance(inpt, workflow.Workflow):
        request.workflow.CopyFrom(inpt._message)
    elif isinstance(inpt, time_freq_support.TimeFreqSupport):
        request.time_freq_support.CopyFrom(inpt._message)
    elif isinstance(inpt, Operator):
        request.inputop.inputop.CopyFrom(inpt._message)
        request.inputop.pinOut = pin_out
    elif isinstance(inpt, Output):
        request.inputop.inputop.CopyFrom(inpt._operator._message)
        request.inputop.pinOut = inpt._pin
    else:
        errormsg = f"input type {inpt.__class__} cannot be connected"
        raise TypeError(errormsg)