<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def persist(self, ttl=None, **kwargs):
 """Save data from this source to local persistent storage"""

        from ..container import container_map
        from ..container.persist import PersistStore
        import time
        if 'original_tok' in self.metadata:
            raise ValueError('Cannot persist a source taken from the persist '
                             'store')
        method = container_map[self.container]._persist
        store = PersistStore()
        out = method(self, path=store.getdir(self), **kwargs)
        out.description = self.description
        metadata = {'timestamp': time.time(),
                    'original_metadata': self.metadata,
                    'original_source': self.__getstate__(),
                    'original_name': self.name,
                    'original_tok': self._tok,
                    'persist_kwargs': kwargs,
                    'ttl': ttl,
                    'cat': {} if self.cat is None else self.cat.__getstate__()}
        out.metadata = metadata
        out.name = self.name
        store.add(self._tok, out)
        return out