time a function decorator
    :param args: any args to pass to the function
    :paran kwargs: any key arguments to pass to the function
        (if 'operations' is in kwargs keys it is used to calculate operations per second)

def time_func(func):
    """
    time a function decorator
    :param args: any args to pass to the function
    :paran kwargs: any key arguments to pass to the function
        (if 'operations' is in kwargs keys it is used to calculate operations per second)

    """
    def timed(*args, **kwargs):
        ts = time.time()
        result = func(*args, **kwargs)
        secs = time.time() - ts
        ops_ps = kwargs.get('operations', secs) / secs
        print ("finc{} took: {} {:2.4f} operations/sec={:5.2f}".format(func.__name__, seconds_to_DHMS(secs), secs, ops_ps))
        return result
    return timed