def METHOD_NAME(self, timestamp: datetime.datetime):
    """Carry out actions up to a timestamp.
    Parameters
    ----------
    timestamp: datetime.datetime
        Carry out actions up to this timestamp.
    """
    if not self.validate_timestamp():
        self.timestamp = timestamp
        return
    for name, property_ in self._actionable_properties.items():
        value = getattr(self, name)
        try:
            action = self.scheduled_actions[name]
        except KeyError:
            action = self._default_action(name, property_, timestamp)
            setattr(self, name, action.METHOD_NAME(self.timestamp, timestamp, value))
        else:
            end_time = action.end_time
            if end_time < timestamp:
                # complete action, remove from schedule
                # switch to default, and carry-out default until timestamp
                interim_value = action.METHOD_NAME(self.timestamp, end_time, value)
                # remove scheduled action
                self.scheduled_actions.pop(name)
                action = self._default_action(name, property_, timestamp)
                setattr(self, name, action.METHOD_NAME(end_time, timestamp, interim_value))
            elif end_time == timestamp:
                # complete action and remove from schedule
                setattr(self, name, action.METHOD_NAME(self.timestamp, timestamp, value))
                self.scheduled_actions.pop(name)
            else:
                # carry-out action to timestamp
                setattr(self, name, action.METHOD_NAME(self.timestamp, timestamp, value))
    self.timestamp = timestamp