code: def cache(*args, **kwargs):
      
      ## 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)
docs: The @cache decorator
  
      Compatility with using ``@cache()`` and ``@cache`` is managed in
      the current function.