'Call wrapped function, cache result and return a reference.
This method returns a reference to the cached result instead of the
result itself. The reference object is small and pickeable, allowing
to send or store it easily. Call .get() on reference object to get
result.
Returns
cached_result: MemorizedResult or NotMemorizedResult
reference to the value returned by the wrapped function. The
class "NotMemorizedResult" is used when there is no cache
activated (e.g. cachedir=None in Memory).'

def call_and_shelve(self, *args, **kwargs):

    (_, argument_hash, metadata) = self._cached_call(args, kwargs)
    return MemorizedResult(self.cachedir, self.func, argument_hash, metadata=metadata, verbose=(self._verbose - 1), timestamp=self.timestamp)
