<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def move_rel(self, mount: top_types.Mount, delta: top_types.Point, speed: float = None):
 """ Move the critical point of the specified mount by a specified displacement in a specified direction, at the specified speed. 'speed' sets the speed of all axes to the given value. So, if multiple axes are to be moved, they will do so at the same speed """

        if not self._current_position:
            raise MustHomeError

        await self._cache_and_maybe_retract_mount(mount)

        z_axis = Axis.by_mount(mount)
        try:
            target_position = OrderedDict(
                ((Axis.X,
                  self._current_position[Axis.X] + delta.x),
                 (Axis.Y,
                  self._current_position[Axis.Y] + delta.y),
                 (z_axis,
                  self._current_position[z_axis] + delta.z))
                )
        except KeyError:
            raise MustHomeError
        await self._move(target_position, speed=speed)