docstr: Args:
      actions: array of action
  
  Returns:
      obs_batch: array of next obs of envs
      reward_batch: array of return reward of envs
      done_batch: array of done of envs
      info_batch: array of info of envs
docstr_tok: ["Args",":","actions",":","array","of","action","Returns",":","obs_batch",":","array","of","next","obs","of","envs","reward_batch",":","array","of","return","reward","of","envs","done_batch",":","array","of","done","of","envs","info_batch",":","array","of","info","of","envs"]
code: def step(self, actions):
      """
      Args:
          actions: array of action
  
      Returns:
          obs_batch: array of next obs of envs
          reward_batch: array of return reward of envs
          done_batch: array of done of envs
          info_batch: array of info of envs
      """
      obs_batch, rews_batch, dones_batch, infos_batch = [], [], [], []
  
      for env_id in range(len(actions)):
          obs, rews, dones, infos = self.envs[env_id].step(
              actions[env_id]
          )
  
          if "bool" in dones.__class__.__name__:
              if dones:
                  obs = self.envs[env_id].reset()
          else:
              if np.all(dones):
                  obs = self.envs[env_id].reset()
  
          obs_batch.append(obs)
          rews_batch.append(rews)
          dones_batch.append(dones)
          infos_batch.append(infos)
  
      obs_batch = np.array(obs_batch)
      rews_batch = np.array(rews_batch)
      dones_batch = np.array(dones_batch)
      infos_batch = np.array(infos_batch)
  
      return obs_batch, rews_batch, dones_batch, infos_batch
  
file_path: PARL/benchmark/torch/mappo/env_wrappers.py
imports: import numpy
  from multiagent.environment import MultiAgentEnv
  from multiagent.scenarios import load
label_desc: Use image node_id 3 for calling the VectorEnv obj's underlying member method code with example usage: obj.step(actions) and returns: obs_batch,  rews_batch,  dones_batch,  infos_batch