parameters: (self, func, *args, **kwargs)
return_statement: return self.cache(func)(*args, **kwargs)
docstring: Eval function func with arguments `*args` and `**kwargs`,
              in the context of the memory.
  
              This method works similarly to the builtin `apply`, except
              that the function is called only if the cache is not
              up to date.
docstring_summary: Eval function func with arguments `*args` and `**kwargs`,
              in the context of the memory.
docstring_tokens: Eval function func with arguments * args and ** kwargs in the context of the memory .
function: def eval(self, func, *args, **kwargs):
          """ Eval function func with arguments `*args` and `**kwargs`,
              in the context of the memory.
  
              This method works similarly to the builtin `apply`, except
              that the function is called only if the cache is not
              up to date.
  
          """
          if self.cachedir is None:
              return func(*args, **kwargs)
          return self.cache(func)(*args, **kwargs)
function_tokens: def eval ( self , func , * args , * * kwargs ) : if self . cachedir is None : return func ( * args , * * kwargs ) return self . cache ( func ) ( * args , * * kwargs )