class_docstr: Internal adapter of MultiAgentEnv to BaseEnv.
  
  This also supports vectorization if num_envs > 1.
class_docstr_tok: ["Internal","adapter","of","MultiAgentEnv","to","BaseEnv",".","This","also","supports","vectorization","if","num_envs",">","1","."]
code: def poll(
      self,
  ) -> Tuple[
      MultiEnvDict,
      MultiEnvDict,
      MultiEnvDict,
      MultiEnvDict,
      MultiEnvDict,
      MultiEnvDict,
  ]:
      obs, rewards, terminateds, truncateds, infos = {}, {}, {}, {}, {}
      for i, env_state in enumerate(self.env_states):
          (
              obs[i],
              rewards[i],
              terminateds[i],
              truncateds[i],
              infos[i],
          ) = env_state.poll()
      return obs, rewards, terminateds, truncateds, infos, {}
  
imports: import gymnasium
  import logging
  from typing import Callable, Dict, List, Tuple, Optional, Union, Set, Type
  from ray.rllib.env.base_env import BaseEnv
  from ray.rllib.env.env_context import EnvContext
  from ray.rllib.utils.annotations import ExperimentalAPI, override, PublicAPI, DeveloperAPI
  from ray.rllib.utils.typing import AgentID, EnvCreator, EnvID, EnvType, MultiAgentDict, MultiEnvDict
  from ray.util import log_once
label_desc: Use image node_id 2 for calling the MultiAgentEnvWrapper obj's underlying member method code with example usage: obj.poll() and returns: obs,  rewards,  terminateds,  truncateds,  infos,  dict