def get(self, user=None, reason: str = "", deregister_ptr: bool = True, get_copy: bool = False): """Requests the object being pointed to. The object to which the pointer points will be requested, serialized and returned. Note: This will typically mean that the remote object will be removed/destroyed. Setting get_copy True doesn't destroy remote. Args: user (obj, optional) : authenticate/allow user to perform get on remote private objects. reason (str, optional) : a description of why the data scientist wants to see it. deregister_ptr (bool, optional): this determines whether to deregister this pointer from the pointer's owner during this method. This defaults to True because the main reason people use this method is to move the tensor from the location to the local one, at which time the pointer has no use. get_copy (bool): Setting get_copy True doesn't destroy remote. Returns: An AbstractObject object which is the tensor (or chain) that this object used to point to on a location. """ if self.point_to_attr is not None: raise exceptions.CannotRequestObjectAttribute( "You called .get() on a pointer to" " a tensor attribute. This is not yet" " supported. Call .clone().get() instead.") # if the pointer happens to be pointing to a local object, # just return that object (this is an edge case) if self.location == self.owner: obj = self.owner.get_obj(self.id_at_location) if hasattr(obj, "child"): obj = obj.child else: # get tensor from location obj = self.owner.request_obj(self.id_at_location, self.location, user, reason, get_copy) # Remove this pointer by default if deregister_ptr: self.owner.de_register_obj(self) if self.garbage_collect_data: # data already retrieved, do not collect any more. self.garbage_collect_data = False return obj
def get(self, deregister_ptr: bool = True): """Requests the object being pointed to. The object to which the pointer points will be requested, serialized and returned. Note: This will typically mean that the remote object will be removed/destroyed. Args: deregister_ptr (bool, optional): this determines whether to deregister this pointer from the pointer's owner during this method. This defaults to True because the main reason people use this method is to move the tensor from the location to the local one, at which time the pointer has no use. Returns: An AbstractObject object which is the tensor (or chain) that this object used to point to on a location. TODO: add param get_copy which doesn't destroy remote if true. """ if self.point_to_attr is not None: raise exceptions.CannotRequestObjectAttribute( "You called .get() on a pointer to" " a tensor attribute. This is not yet" " supported. Call .clone().get() instead.") # if the pointer happens to be pointing to a local object, # just return that object (this is an edge case) if self.location == self.owner: obj = self.owner.get_obj(self.id_at_location).child else: # get tensor from location obj = self.owner.request_obj(self.id_at_location, self.location) # Register the result assigned_id = self.id_at_location self.owner.register_obj(obj, assigned_id) # Remove this pointer by default if deregister_ptr: self.owner.de_register_obj(self) return obj