human
I wrote the below code

    if (backoff <= 1):
        raise ValueError("'backoff'    must    be    greater    than    1")
    tries = math.floor(tries)
    if (tries < 1):
        raise ValueError("'tries'    must    be    1    or    greater.")
    if (delay < 0):
        raise ValueError("'delay'    must    be    non    negative.")
    def deco_retry(f):
        @wraps(f)
        def f_retry(*args, **kwargs):
            (mtries, mdelay) = ((tries - 1), delay)
            while (mtries >= 0):
                try:
                    rv = f(*args, **kwargs)
                except Exception as ex:
                    if (mtries == 0):
                        if exc_class:
                            raise exc_class((err_msg or str(ex)))
                        raise
                else:
                    return rv
                mtries -= 1
                time.sleep(mdelay)
                mdelay *= backoff
                if (log_msg is not None):
                    om.out.debug(log_msg)
        return f_retry
    return deco_retry

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

def retry(tries, delay=1, backoff=2, exc_class=None, err_msg='', log_msg=None):