class_docstr: Multi agent environement for which some of the agents have been fixed
class_docstr_tok: ["Multi","agent","environement","for","which","some","of","the","agents","have","been","fixed"]
docstr: Returns observations from ready agents.
  The returns are dicts mapping from agent_id strings to StepOutcome. The
  number of agents in the env can vary over time.
docstr_tok: ["Returns","observations","from","ready","agents",".","The","returns","are","dicts","mapping","from","agent_id","strings","to","StepOutcome",".","The","number","of","agents","in","the","env","can","vary","over","time","."]
code: def step(self, action_dict: tp.Dict[str, tp.Any]) -> StepReturn:
      """Returns observations from ready agents.
      The returns are dicts mapping from agent_id strings to StepOutcome. The
      number of agents in the env can vary over time.
      """
      full_action_dict = {name: self.agents[name].act(*outcome) for name, outcome in self._agents_outcome.items()}  # type: ignore
      full_action_dict.update(action_dict)
      outcomes, done = StepOutcome.from_multiagent_step(
          *self.env.step(full_action_dict)
      )
      self._agents_outcome = {
          name: outcomes[name] for name in self.agents
      }
      return StepOutcome.to_multiagent_step(
          {
              name: outcomes[name]
              for name in outcomes
              if name not in self.agents
          },
          done,
      )
  
imports: import typing
  from collections import defaultdict
  import gym
label_desc: Use image node_id 3 for calling the PartialMultiAgentEnv obj's underlying member method code with example usage: obj.step(action_dict) and returns: StepOutcome