in gym3/interactive.py [0:0]
def _update(self, dt, keys_clicked, keys_pressed):
# if we're displaying done info, don't advance the simulation
if self._display_info_seconds_remaining > 0:
self._display_info_seconds_remaining -= dt
return
first = False
if self._synchronous:
keys = keys_clicked
act = self._keys_to_act(keys)
if act is not None:
first = self._act(act)
print(
"first={} steps={} episode_steps={} rew={} episode_return={}".format(
int(first), # shoter than printing True/False
self._steps,
self._episode_steps,
self._last_rew,
self._episode_return,
)
)
else:
# cap the number of frames rendered so we don't just spend forever trying to catch up on frames
# if rendering is slow
max_dt = self._max_sim_frames_per_update * self._sec_per_timestep
if dt > max_dt:
dt = max_dt
# catch up the simulation to the current time
self._current_time += dt
while self._sim_time < self._current_time or self._synchronous:
self._sim_time += self._sec_per_timestep
# assume that for async environments, we just want to repeat keys for as long as they are held
keys = keys_pressed
act = self._keys_to_act(keys)
if act is None:
act = types_np.zeros(self._env.ac_space, bshape=(self._env.num,))
first = self._act(act)
if self._steps % self._tps == 0 or first:
episode_return_delta = (
self._episode_return - self._prev_episode_return
)
self._prev_episode_return = self._episode_return
print(
"first={} steps={} episode_steps={} episode_return_delta={} episode_return={}".format(
int(first),
self._steps,
self._episode_steps,
episode_return_delta,
self._episode_return,
)
)
if first:
break
if first:
print(f"final info={self._last_info}")
self._episode_steps = 0
self._episode_return = 0
self._prev_episode_return = 0
self._display_info_seconds_remaining = SECONDS_TO_DISPLAY_DONE_INFO