def cached_object(self, path, compute_fn):
        """
        If `cached_object` has already been called for a value of `path` in this
        running Python instance, then it should have a cached value in the
         _memory_cache; return that value.

        If this function was never called before with a particular value of
        `path`, then call compute_fn, and pickle it to `path`.

        If `path` already exists, unpickle it and store that value in
        _memory_cache.
        """
        if path in self._memory_cache:
            return self._memory_cache[path]

        if exists(path) and not self.is_empty(path):
            obj = load_pickle(path)
        else:
            obj = compute_fn()
            dump_pickle(obj, path)
        self._memory_cache[path] = obj
        return obj
If `cached_object` has already been called for a value of `path` in this
        running Python instance, then it should have a cached value in the
         _memory_cache; return that value.

        If this function was never called before with a particular value of
        `path`, then call compute_fn, and pickle it to `path`.

        If `path` already exists, unpickle it and store that value in
        _memory_cache.