# Path: sacred/utils.py
# class MissingConfigError(SacredError):
#     """A config value that is needed by a captured function is not present in the provided config."""
# 
#     def __init__(
#         self,
#         message="Configuration values are missing:",
#         missing_configs=(),
#         print_traceback=False,
#         filter_traceback="default",
#         print_usage=True,
#     ):
#         message = "{} {}".format(message, missing_configs)
#         super().__init__(
#             message,
#             print_traceback=print_traceback,
#             filter_traceback=filter_traceback,
#             print_usage=print_usage,
#         )
# 
# class SignatureError(SacredError, TypeError):
#     """Error that is raised when the passed arguments do not match the functions signature."""
# 
#     def __init__(
#         self,
#         message,
#         print_traceback=True,
#         filter_traceback="always",
#         print_usage=False,
#     ):
#         super().__init__(message, print_traceback, filter_traceback, print_usage)


import inspect
from inspect import Parameter
from collections import OrderedDict
from sacred.utils import MissingConfigError, SignatureError
        varg = ["*" + self.vararg_name] if self.vararg_name else []
        kwargs = ["{}={}".format(n, v.__repr__()) for n, v in self.kwargs.items()]
        kw_wc = ["**" + self.kw_wildcard_name] if self.kw_wildcard_name else []
        arglist = pos_args + varg + kwargs + kw_wc
        return "{}({})".format(self.name, ", ".join(arglist))

    def __repr__(self):
        return "<Signature at 0x{1:x} for '{0}'>".format(self.name, id(self))

    def _get_expected_args(self, bound):
        if bound:
            # When called as instance method, the instance ('self') will be
            # passed as first argument automatically, so the first argument
            # should be excluded from the signature during this invocation.
            return self.arguments[1:]
        else:
            return self.arguments

    def _assert_no_unexpected_args(self, expected_args, args):
        if not self.vararg_name and len(args) > len(expected_args):
            unexpected_args = args[len(expected_args) :]
            raise SignatureError(
                "{} got unexpected argument(s): {}".format(self.name, unexpected_args)
            )

    def _assert_no_unexpected_kwargs(self, expected_args, kwargs):
        if self.kw_wildcard_name:
            return
        unexpected_kwargs = set(kwargs) - set(expected_args)
        if unexpected_kwargs:

# Path: sacred/utils.py
# class MissingConfigError(SacredError):
#     """A config value that is needed by a captured function is not present in the provided config."""
# 
#     def __init__(
#         self,
#         message="Configuration values are missing:",
#         missing_configs=(),
#         print_traceback=False,
#         filter_traceback="default",
#         print_usage=True,
#     ):
#         message = "{} {}".format(message, missing_configs)
#         super().__init__(
#             message,
#             print_traceback=print_traceback,
#             filter_traceback=filter_traceback,
#             print_usage=print_usage,
#         )
# 
# class SignatureError(SacredError, TypeError):
#     """Error that is raised when the passed arguments do not match the functions signature."""
# 
#     def __init__(
#         self,
#         message,
#         print_traceback=True,
#         filter_traceback="always",
#         print_usage=False,
#     ):
#         super().__init__(message, print_traceback, filter_traceback, print_usage)


# Path: sacred/config/signature.py
import inspect
from inspect import Parameter
from collections import OrderedDict
from sacred.utils import MissingConfigError, SignatureError

        varg = ["*" + self.vararg_name] if self.vararg_name else []
        kwargs = ["{}={}".format(n, v.__repr__()) for n, v in self.kwargs.items()]
        kw_wc = ["**" + self.kw_wildcard_name] if self.kw_wildcard_name else []
        arglist = pos_args + varg + kwargs + kw_wc
        return "{}({})".format(self.name, ", ".join(arglist))

    def __repr__(self):
        return "<Signature at 0x{1:x} for '{0}'>".format(self.name, id(self))

    def _get_expected_args(self, bound):
        if bound:
            # When called as instance method, the instance ('self') will be
            # passed as first argument automatically, so the first argument
            # should be excluded from the signature during this invocation.
            return self.arguments[1:]
        else:
            return self.arguments

    def _assert_no_unexpected_args(self, expected_args, args):
        if not self.vararg_name and len(args) > len(expected_args):
            unexpected_args = args[len(expected_args) :]
            raise SignatureError(
                "{} got unexpected argument(s): {}".format(self.name, unexpected_args)
            )

    def _assert_no_unexpected_kwargs(self, expected_args, kwargs):
        if self.kw_wildcard_name:
            return
        unexpected_kwargs = set(kwargs) - set(expected_args)
        if unexpected_kwargs:

            raise SignatureError(