code: def __init__(self, config=None):
      self.config = config
      self.env_num = config["env_num"]
  
      if config["xparl_addr"]:
          self.use_xparl = True
          parl.connect(config["xparl_addr"])
          base_env = RemoteEnv
      else:
          self.use_xparl = False
          base_env = LocalEnv
  
      if config["seed"]:
          self.env_list = [
              base_env(config["env"], config["seed"] + i)
              for i in range(self.env_num)
          ]
      else:
          self.env_list = [
              base_env(config["env"]) for _ in range(self.env_num)
          ]
  
      if hasattr(self.env_list[0], "_max_episode_steps"):
          self._max_episode_steps = self.env_list[0]._max_episode_steps
      else:
          self._max_episode_steps = float("inf")
  
      self.total_steps = 0
      self.episode_steps_list = [0] * self.env_num
      self.episode_reward_list = [0] * self.env_num
      # used for env initialization for evaluating in mujoco environment
      self.eval_ob_rms = None
  
file_path: PARL/benchmark/torch/ppo/env_utils.py
imports: import parl
  import gym
  import numpy
  from parl.utils import logger
label_desc: Use image node_id 1 to create a new ParallelEnv object from inherited base classes: object with example: obj = ParallelEnv(config)