def METHOD_NAME(self, actions):
    truncated = self.num_steps >= self.max_cycles
    for agent in self.agents:
        assert agent in actions
    all_truncations = {agent: truncated for agent in self.agents}
    all_terminations = {agent: False for agent in self.agents}
    if not truncated:
        for i in range(6):
            if self.np_random.random() < 0.1 and len(self.agents) >= 10:
                all_terminations[
                    self.agents[self.np_random.choice(len(self.agents))]
                ] = True
        for i in range(3):
            if self.np_random.random() < 0.1:
                if self.np_random.random() < 0.1:
                    type = self.add_type()
                else:
                    type = self.np_random.choice(self.types)
                new_agent = self.add_agent(type)
                all_terminations[new_agent] = False
                all_truncations[new_agent] = False
    all_infos = {agent: {} for agent in self.agents}
    all_rewards = {agent: 0 for agent in self.agents}
    all_rewards[self.agents[self.np_random.choice(len(self.agents))]] = 1
    all_observes = {agent: self.observe(agent) for agent in self.agents}
    self.agents = [
        agent
        for agent in self.agents
        if not (all_truncations[agent] or all_terminations[agent])
    ]
    if self.render_mode == "human":
        self.render()
    return all_observes, all_rewards, all_terminations, all_truncations, all_infos