text: from collections import deque
  
  import numpy as np
  from gym import Env
  from gym.spaces import Box
  
  from plaidrl.envs.proxy_env import ProxyEnv
  
  
  class HistoryEnv(ProxyEnv, Env):
      def __init__(self, wrapped_env, history_len):
          super().__init__(wrapped_env)
          self.history_len = history_len
  
          high = np.inf * np.ones(self.history_len * self.observation_space.low.size)
          low = -high
          self.observation_space = Box(
              low=low,
              high=high,
          )
          self.history = deque(maxlen=self.history_len)
  
      def step(self, action):
          state, reward, done, info = super().step(action)
          self.history.append(state)
          flattened_history = self._get_history().flatten()
          return flattened_history, reward, done, info
  
      def reset(self, **kwargs):
          state = super().reset()
          self.history = deque(maxlen=self.history_len)
          self.history.append(state)
          flattened_history = self._get_history().flatten()
          return flattened_history
  
      def _get_history(self):
          observations = list(self.history)
  
          obs_count = len(observations)
          for _ in range(self.history_len - obs_count):
              dummy = np.zeros(self._wrapped_env.observation_space.low.size)
              observations.append(dummy)
          return np.c_[observations]
  