code: def run(self, fetch_list, feed_dict=None, sess=None):
      
      if tf.get_default_graph() != self._graph:
        raise ValueError('The current default graph is different from the graph'
                         ' used at construction time of RecurrentRunner.')
      if feed_dict is None:
        all_feeds_dict = {}
      else:
        all_feeds_dict = dict(feed_dict)
      all_feeds_dict.update(self._state_feeds)
      all_fetches_list = list(fetch_list)
      all_fetches_list += self._state_fetches
  
      sess = sess or tf.get_default_session()
  
      # Run the compute graph.
      fetches = sess.run(all_fetches_list, all_feeds_dict)
      # Update the feeds for the next time step.
      states = fetches[len(fetch_list):]
      for i, s in enumerate(states):
        self._state_feeds[self._state_feed_names[i]] = s
  
      return fetches[:len(fetch_list)]
docs: Runs the graph with the provided feeds and fetches.
  
      This function wraps sess.Run(), but takes care of state saving and
      restoring by feeding in states and storing the new state values.
      Args:
        fetch_list: A list of requested output tensors.
        feed_dict: A dictionary of feeds - see Session.Run(). Optional.
        sess: The Tensorflow session to run. Can be None.
      Returns:
        The requested tensors as numpy arrays.
      Raises:
        ValueError: If the default graph during object construction was
        different from the current default graph.