def METHOD_NAME(self, cls, interface, error_mode):
    """ Checks that a class implements the methods on an interface.
    """
    cls_methods = self._get_public_methods(cls)
    interface_methods = self._get_public_methods(interface)
    for name in interface_methods:
        if name not in cls_methods:
            return self._handle_error(
                MISSING_METHOD
                % (
                    self._class_name(cls),
                    name,
                    self._class_name(interface),
                ),
                error_mode,
            )
        # Check that the method signatures are the same:
        cls_argspec = getfullargspec(cls_methods[name])
        interface_argspec = getfullargspec(interface_methods[name])
        if cls_argspec != interface_argspec:
            return self._handle_error(
                BAD_SIGNATURE
                % (
                    self._class_name(cls),
                    name,
                    self._class_name(interface),
                ),
                error_mode,
            )
    return True