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

    def _find_x(func):
        free = func.free_symbols
        if (len(func.free_symbols) == 1):
            return free.pop()
        elif (len(func.free_symbols) == 0):
            return Dummy('k')
        else:
            raise ValueError(('    specify    dummy    variables    for    %s.    If    the    function    contains    more    than    one    free    symbol,    a    dummy    variable    should    be    supplied    explicitly    e.g.    FourierSeries(m*n**2,    (n,    -pi,    pi))' % func))
    (x, start, stop) = (None, None, None)
    if (limits is None):
        (x, start, stop) = (_find_x(func), (- pi), pi)
    if is_sequence(limits, Tuple):
        if (len(limits) == 3):
            (x, start, stop) = limits
        elif (len(limits) == 2):
            x = _find_x(func)
            (start, stop) = limits
    if ((not isinstance(x, Symbol)) or (start is None) or (stop is None)):
        raise ValueError(('Invalid    limits    given:    %s' % str(limits)))
    unbounded = [S.NegativeInfinity, S.Infinity]
    if ((start in unbounded) or (stop in unbounded)):
        raise ValueError('Both    the    start    and    end    value    should    be    bounded')
    return sympify((x, start, stop))

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

def _process_limits(func, limits):