human
Here's a good function header given the following:
I wrote the below code

    if (((returns is not None) or (keeps is not None)) and (not repack)):
        raise ValueError(u'returns    or    keeps    should    only    be    set    if    repack=True.')
    elif ((returns is None) and repack):
        raise ValueError(u'returns    should    be    set    if    repack=True.')
    else:
        if (returns is None):
            returns = []
        if (keeps is None):
            keeps = []
    attr_arg_map = attribute_argument_mapping
    if any(((keep in returns) for keep in keeps)):
        raise ValueError(u'cannot    specify    the    same    attribute    in    `returns`    and    `keeps`.')
    all_returns = (returns + keeps)
    def support_nddata_decorator(func):
        (func_args, func_kwargs) = ([], [])
        sig = signature(func).parameters
        for (param_name, param) in six.iteritems(sig):
            if (param.kind in (param.VAR_POSITIONAL, param.VAR_KEYWORD)):
                raise ValueError(u'func    may    not    have    *args    or    **kwargs.')
            try:
                if (param.default == param.empty):
                    func_args.append(param_name)
                else:
                    func_kwargs.append(param_name)
            except ValueError as exc:
                if (u'The    truth    value    of    an    array    with    more    than    one    element    is    ambiguous.' in str(exc)):
                    func_kwargs.append(param_name)
                else:
                    raise
        if ((not func_args) or (func_args[0] != attr_arg_map.get(u'data', u'data'))):
            raise ValueError(u'Can    only    wrap    functions    whose    first    positional    argument    is    `{0}`'.format(attr_arg_map.get(u'data', u'data')))
        @wraps(func)
        def wrapper(data, *args, **kwargs):
            unpack = isinstance(data, accepts)
            input_data = data
            ignored = []
            if ((not unpack) and isinstance(data, NDData)):
                raise TypeError(u'Only    NDData    sub-classes    that    inherit  ...

What's a good function header?
assistant
#Here's a good function header.

def support_nddata(_func=None, accepts=NDData, repack=False, returns=None, keeps=None, **attribute_argument_mapping):