<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find_signature_parameters(callable_, candidates, excluded=('self', 'cls')):
 """Find on a set of candidates the parameters needed to execute a callable. Returns a dictionary with the `candidates` found on `callable_`. When any of the required parameters of a callable is not found, it raises a `AttributeError` exception. A signature parameter whitout a default value is considered as required. :param callable_: callable object :param candidates: dict with the possible parameters to use with the callable :param excluded: tuple with default parameters to exclude :result: dict of parameters ready to use with the callable :raises AttributeError: when any of the required parameters for executing a callable is not found in `candidates` """

    signature_params = inspect_signature_parameters(callable_,
                                                    excluded=excluded)
    exec_params = {}

    add_all = False
    for param in signature_params:
        name = param.name

        if str(param).startswith('*'):
            add_all = True
        elif name in candidates:
            exec_params[name] = candidates[name]
        elif param.default == inspect.Parameter.empty:
            msg = "required argument %s not found" % name
            raise AttributeError(msg, name)
        else:
            continue

    if add_all:
        exec_params = candidates

    return exec_params