class_docstr: Experience replay buffer that are saved to disk storage
  
  :py:class:`ReplayBuffer` is used to store sampled experience data, but
  the data is stored in DRAM memory and removed after program termination.
  This class add persistence to :py:class:`ReplayBuffer`,
  so that the learning process can be restarted from a previously saved replay
  data.
  
  Args:
      dirname (str): Directory name where the buffer data is saved.
          Please note that it tries to load data from it as well. Also, it
          would be important to note that it can't be used with ancestor.
      capacity (int): Capacity in terms of number of transitions
      ancestor (str): Path to pre-generated replay buffer. The `ancestor`
          directory is used to load/save, instead of `dirname`.
      logger: logger object
      distributed (bool): Use a distributed version for the underlying
          persistent queue class. You need the private package `pfrlmn`
          to use this option.
      group: `torch.distributed` group object. Only used when
          `distributed=True` and pfrlmn package is available
  
  .. note:: Contrary to the original :py:class:`ReplayBuffer`
          implementation, ``state`` and ``next_state``, ``action`` and
          ``next_action`` are pickled and stored as different objects even
          they point to the same object. This may lead to inefficient usage
          of storage space, but it is recommended to buy more
          storage - hardware is sometimes cheaper than software.
class_docstr_tok: ["Experience","replay","buffer","that","are","saved","to","disk","storage",":","py",":","class",":","`","ReplayBuffer","`","is","used","to","store","sampled","experience","data",",","but","the","data","is","stored","in","DRAM","memory","and","removed","after","program","termination",".","This","class","add","persistence","to",":","py",":","class",":","`","ReplayBuffer","`",",","so","that","the","learning","process","can","be","restarted","from","a","previously","saved","replay","data",".","Args",":","dirname","(","str",")",":","Directory","name","where","the","buffer","data","is","saved",".","Please","note","that","it","tries","to","load","data","from","it","as","well",".","Also",",","it","would","be","important","to","note","that","it","ca","n't","be","used","with","ancestor",".","capacity","(","int",")",":","Capacity","in","terms","of","number","of","transitions","ancestor","(","str",")",":","Path","to","pre-generated","replay","buffer",".","The","`","ancestor","`","directory","is","used","to","load\/save",",","instead","of","`","dirname","`",".","logger",":","logger","object","distributed","(","bool",")",":","Use","a","distributed","version","for","the","underlying","persistent","queue","class",".","You","need","the","private","package","`","pfrlmn","`","to","use","this","option",".","group",":","`","torch.distributed","`","group","object",".","Only","used","when","`","distributed=True","`","and","pfrlmn","package","is","available","..","note",":",":","Contrary","to","the","original",":","py",":","class",":","`","ReplayBuffer","`","implementation",",","``","state","``","and","``","next_state","``",",","``","action","``","and","``","next_action","``","are","pickled","and","stored","as","different","objects","even","they","point","to","the","same","object",".","This","may","lead","to","inefficient","usage","of","storage","space",",","but","it","is","recommended","to","buy","more","storage","-","hardware","is","sometimes","cheaper","than","software","."]
code: def save(self, _):
      pass
  
file_path: pfrl/pfrl/replay_buffers/persistent.py
imports: import os
  import warnings
  from pfrl.collections.persistent_collections import PersistentRandomAccessQueue
  from .episodic import EpisodicReplayBuffer
  from .replay_buffer import ReplayBuffer
label_desc: Use image node_id 2 for calling the PersistentReplayBuffer obj's underlying member method code with example usage: obj.save(_) without return types