class_docstr: A replay buffer that stores episodes of transitions. The additional structure allows performing various
  calculations of total return and other values that depend on the sequential behavior of the transitions
  in the episode.
class_docstr_tok: ["A","replay","buffer","that","stores","episodes","of","transitions",".","The","additional","structure","allows","performing","various","calculations","of","total","return","and","other","values","that","depend","on","the","sequential","behavior","of","the","transitions","in","the","episode","."]
docstr: Remove the first episode (even if it is not complete yet)
  :param lock: if true, will lock the readers writers lock. this can cause a deadlock if an inheriting class
               locks and then calls store with lock = True
  :return: None
code: def remove_first_episode(self, lock: bool = True) -> None:
      """
      Remove the first episode (even if it is not complete yet)
      :param lock: if true, will lock the readers writers lock. this can cause a deadlock if an inheriting class
                   locks and then calls store with lock = True
      :return: None
      """
      if lock:
          self.reader_writer_lock.lock_writing_and_reading()
  
      self._remove_episode(0)
      if lock:
          self.reader_writer_lock.release_writing_and_reading()
  
imports: import ast
  import pickle
  from copy import deepcopy
  import math
  import pandas
  from typing import List, Tuple, Union
  import numpy
  import random
  from rl_coach.core_types import Transition, Episode
  from rl_coach.filters.filter import InputFilter
  from rl_coach.logger import screen
  from rl_coach.memories.memory import Memory, MemoryGranularity, MemoryParameters
  from rl_coach.utils import ReaderWriterLock, ProgressBar
  from rl_coach.core_types import CsvDataset
label_desc: Use image node_id 22 for calling the EpisodicExperienceReplay obj's underlying member method code with example usage: obj.remove_first_episode(lock) without return types