def METHOD_NAME(
    self,
    provider: BaseProvider,
    prefix: str = "fake.",
    with_args: bool = True,
    with_defaults: bool = True,
) -> Dict[str, str]:
    formatters = {}
    for name, method in inspect.getmembers(provider, inspect.ismethod):
        # skip 'private' method and inherited methods
        if name.startswith("_") or name in self.already_generated:
            continue
        arguments = []
        faker_args: List[Union[str, Type[Enum]]] = []
        faker_kwargs = {}
        if name == "binary":
            faker_kwargs["length"] = 1024
        elif name in ["zip", "tar"]:
            faker_kwargs.update(
                {
                    "uncompressed_size": 1024,
                    "min_file_size": 512,
                }
            )
        if name == "enum":
            faker_args = [FakerEnum]
        if with_args:
            # retrieve all parameter
            argspec = inspect.getfullargspec(method)
            lst = [x for x in argspec.args if x not in ["self", "cls"]]
            for i, arg in enumerate(lst):
                if argspec.defaults and with_defaults:
                    try:
                        default = argspec.defaults[i]
                        if isinstance(default, str):
                            default = repr(default)
                        else:
                            # TODO check default type
                            default = f"{default}"
                        arg = f"{arg}={default}"
                    except IndexError:
                        pass
                arguments.append(arg)
                if with_args == "first":
                    break
            if with_args != "first":
                if argspec.varargs:
                    arguments.append("*" + argspec.varargs)
                if argspec.varkw:
                    arguments.append("**" + argspec.varkw)
        # build fake method signature
        signature = f"{prefix}{name}({', '.join(arguments)})"
        try:
            # make a fake example
            example = self.generator.format(name, *faker_args, **faker_kwargs)
        except (AttributeError, ValueError) as e:
            warnings.warn(str(e))
            continue
        formatters[signature] = example
        self.max_name_len = max(self.max_name_len, *(len(part) for part in signature.split()))
        self.already_generated.append(name)
    return formatters