class_docstr: A simple out-of-graph Replay Buffer.
  
  Stores transitions, state, action, reward, next_state, terminal (and any
  extra contents specified) in a circular buffer and provides a uniform
  transition sampling function.
  
  When the states consist of stacks of observations storing the states is
  inefficient. This class writes observations and constructs the stacked states
  at sample time.
  
  Attributes:
    add_count: int, counter of how many transitions have been added (including
      the blank ones at the beginning of an episode).
    invalid_range: np.array, an array with the indices of cursor-related invalid
      transitions
    episode_end_indices: set[int], a set of indices corresponding to the
      end of an episode.
docstr: Returns a 'type signature' for sample_transition_batch.
  
  Args:
    batch_size: int, number of transitions returned. If None, the default
      batch_size will be used.
  Returns:
    signature: A namedtuple describing the method's return type signature.
docstr_tok: ["Returns","a","'type","signature","'","for","sample_transition_batch",".","Args",":","batch_size",":","int",",","number","of","transitions","returned",".","If","None",",","the","default","batch_size","will","be","used",".","Returns",":","signature",":","A","namedtuple","describing","the","method","'s","return","type","signature","."]
code: def get_transition_elements(self, batch_size=None):
      """Returns a 'type signature' for sample_transition_batch.
  
      Args:
        batch_size: int, number of transitions returned. If None, the default
          batch_size will be used.
      Returns:
        signature: A namedtuple describing the method's return type signature.
      """
      batch_size = (
          self._batch_size if batch_size is None else batch_size
      )
  
      transition_elements = [
          ReplayElement(
              "state",
              (batch_size,) + self._state_shape,
              self._observation_dtype,
          ),
          ReplayElement(
              "action",
              (batch_size,) + self._action_shape,
              self._action_dtype,
          ),
          ReplayElement(
              "reward",
              (batch_size,) + self._reward_shape,
              self._reward_dtype,
          ),
          ReplayElement(
              "next_state",
              (batch_size,) + self._state_shape,
              self._observation_dtype,
          ),
          ReplayElement(
              "next_action",
              (batch_size,) + self._action_shape,
              self._action_dtype,
          ),
          ReplayElement(
              "next_reward",
              (batch_size,) + self._reward_shape,
              self._reward_dtype,
          ),
          ReplayElement(
              "terminal", (batch_size,), self._terminal_dtype
          ),
          ReplayElement("indices", (batch_size,), np.int32),
      ]
      for element in self._extra_storage_types:
          transition_elements.append(
              ReplayElement(
                  element.name,
                  (batch_size,) + tuple(element.shape),
                  element.type,
              )
          )
      return transition_elements
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  import gzip
  import math
  import os
  import pickle
  from absl import logging
  import gin.tf
  import numpy
  import tensorflow
label_desc: Use image node_id 23 for calling the OutOfGraphReplayBuffer obj's underlying member method code with example usage: obj.get_transition_elements(batch_size) and returns: transition_elements