class_docstr: Compatible for different versions of gym, especially for `step()` and `reset()` APIs.
  
      .. code-block:: python
      # old version (< 0.26.0) of gym APIs
      observation = env.reset()
      observation, reward, done, info = env.step(action)
      # new version (>= 0.26.0) of gym APIs
      observation, info = env.reset()
      observation, reward, terminated, truncated, info = env.step(action)
  
  After being wrapped by `CompatWrapper`, the new version of the gym env can be used in the same way as the old version of gym.
code: def step(self, action):
      self.count_ep_step += 1
      if is_gym_version_ge(V_GYM_CHANGED):
          obs, reward, done, _, info = self.env.step(action)
          if hasattr(self.env, "_elapsed_steps"):
              self._elapsed_steps = self.env._elapsed_steps
      else:
          obs, reward, done, info = self.env.step(action)
          if hasattr(self.env, "_elapsed_steps"):
              self._elapsed_steps = self.env._elapsed_steps
      if (
          hasattr(self, "_max_episode_steps")
          and self.count_ep_step >= self._max_episode_steps
      ):
          done = True
          self.count_ep_step = 0
      return obs, reward, done, info
  
file_path: PARL/parl/env/compat_wrappers.py
imports: import gym
  import operator
label_desc: Use image node_id 4 for calling the CompatWrapper obj's underlying member method code with example usage: obj.step(action) and returns: obs,  reward,  done,  info