'return a tuple of (s,r,a,o),
where s is of shape STATE_SIZE + (hist_len+1,)'

def sample(self, idx):

    idx = ((self._curr_pos + idx) % self._curr_size)
    k = (self.history_len + 1)
    if ((idx + k) <= self._curr_size):
        state = self.state[idx:(idx + k)]
        reward = self.reward[idx:(idx + k)]
        action = self.action[idx:(idx + k)]
        isOver = self.isOver[idx:(idx + k)]
    else:
        end = ((idx + k) - self._curr_size)
        state = self._slice(self.state, idx, end)
        reward = self._slice(self.reward, idx, end)
        action = self._slice(self.action, idx, end)
        isOver = self._slice(self.isOver, idx, end)
    ret = self._pad_sample(state, reward, action, isOver)
    return ret
