Removes the given event listener registered on the dispatcher for the given event type.

        Args:
            event_type (str): The type of the event to remove the event handler from.
                              Must not be `None` or empty string.
            event_handler (types.MethodType): The event handler to remove from the given event
                                              type of the dispatcher. Must not be `None`.

        Raises:
            ValueError: If any of the parameters are invalid.

def remove_event_listener(self, event_type: str, event_handler: types.MethodType) -> None:
        """
        Removes the given event listener registered on the dispatcher for the given event type.

        Args:
            event_type (str): The type of the event to remove the event handler from.
                              Must not be `None` or empty string.
            event_handler (types.MethodType): The event handler to remove from the given event
                                              type of the dispatcher. Must not be `None`.

        Raises:
            ValueError: If any of the parameters are invalid.
        """
        # TODO: we should also accept types.FunctionType,
        # don't forget the documentation here and in the interface.
        if not isinstance(event_type, str) or event_type == "" or\
           not isinstance(event_handler, types.MethodType):
            raise ValueError("Invalid arguments: {}, {}".format(event_type, event_handler))

        listeners: dict[types.MethodType, bool] = self._registered_listeners.get(event_type)
        listener: types.MethodType = None if listeners is None else listeners.get(event_handler)
        if listener is not None:
            del listeners[event_handler]