The @cache decorator

    Compatility with using ``@cache()`` and ``@cache`` is managed in
    the current function.

def cache(*args, **kwargs):
    """The @cache decorator

    Compatility with using ``@cache()`` and ``@cache`` is managed in
    the current function.

    """
    ## only one argument ?
    if len(args) == 1 and len(kwargs) == 0 and \
           (callable(args[0]) or \
            isinstance(args[0], tuple(SUPPORTED_DECORATOR.keys()))):
        return _cache_w_args(args[0])
    return lambda f: _cache_w_args(f, *args, **kwargs)