def send_command( self, recipient: "BaseWorker", cmd_name: str, target: PointerTensor = None, args_: tuple = (), kwargs_: dict = {}, return_ids: str = None, return_value: bool = False, ) -> Union[List[PointerTensor], PointerTensor]: """ Sends a command through a message to a recipient worker. Args: recipient: A recipient worker. cmd_name: Command number. target: Target pointer Tensor. args_: additional args for command execution. kwargs_: additional kwargs for command execution. return_ids: A list of strings indicating the ids of the tensors that should be returned as response to the command execution. Returns: A list of PointerTensors or a single PointerTensor if just one response is expected. """ if return_ids is None: return_ids = (sy.ID_PROVIDER.pop(), ) try: message = TensorCommandMessage.computation(cmd_name, target, args_, kwargs_, return_ids, return_value) ret_val = self.send_msg(message, location=recipient) except ResponseSignatureError as e: ret_val = None return_ids = e.ids_generated if ret_val is None or type(ret_val) == bytes: responses = [] for return_id in return_ids: response = PointerTensor( location=recipient, id_at_location=return_id, owner=self, id=sy.ID_PROVIDER.pop(), ) responses.append(response) if return_value: responses = [response.get() for response in responses] if len(return_ids) == 1: responses = responses[0] else: responses = tuple(responses) else: responses = ret_val return responses
def _get_plan_output(self, result_ids, return_ptr=False): responses = [] for return_id in result_ids: response = PointerTensor( location=self.owner, id_at_location=return_id, owner=self, id=sy.ID_PROVIDER.pop() ) responses.append(response if return_ptr else response.get()) if len(responses) == 1: return responses[0] return responses