in gym/wrappers/record_episode_statistics.py [0:0]
def step(self, action):
"""Steps through the environment, recording the episode statistics."""
(
observations,
rewards,
terminateds,
truncateds,
infos,
) = self.env.step(action)
assert isinstance(
infos, dict
), f"`info` dtype is {type(infos)} while supported dtype is `dict`. This may be due to usage of other wrappers in the wrong order."
self.episode_returns += rewards
self.episode_lengths += 1
if not self.is_vector_env:
terminateds = [terminateds]
truncateds = [truncateds]
terminateds = list(terminateds)
truncateds = list(truncateds)
for i in range(len(terminateds)):
if terminateds[i] or truncateds[i]:
episode_return = self.episode_returns[i]
episode_length = self.episode_lengths[i]
episode_info = {
"episode": {
"r": episode_return,
"l": episode_length,
"t": round(time.perf_counter() - self.t0, 6),
}
}
if self.is_vector_env:
infos = add_vector_episode_statistics(
infos, episode_info["episode"], self.num_envs, i
)
else:
infos = {**infos, **episode_info}
self.return_queue.append(episode_return)
self.length_queue.append(episode_length)
self.episode_count += 1
self.episode_returns[i] = 0
self.episode_lengths[i] = 0
return (
observations,
rewards,
terminateds if self.is_vector_env else terminateds[0],
truncateds if self.is_vector_env else truncateds[0],
infos,
)