mirror of
https://github.com/Farama-Foundation/Gymnasium.git
synced 2025-08-20 05:52:03 +00:00
* Add WIP Monitored wrapper * Remove irrelevant render after close monitor test * py27 compatibility * Fix test_benchmark * Move Monitored out of wrappers __init__ * Turn Monitored into a function that returns a Monitor class * Fix monitor tests * Remove deprecated test * Remove deprecated utility * Prevent duplicate wrapping, add test * Fix test * close env in tests to prevent writing to nonexistent file * Disable semisuper tests * typo * Fix failing spec * Fix monitoring on semisuper tasks * Allow disabling of duplicate check * Rename MonitorManager * Monitored -> Monitor * Clean up comments * Remove cruft
42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from gym import monitoring
|
|
from gym import Wrapper
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def Monitor(directory, video_callable=None, force=False, resume=False,
|
|
write_upon_reset=False, uid=None, mode=None):
|
|
class Monitor(Wrapper):
|
|
def __init__(self, env):
|
|
super(Monitor, self).__init__(env)
|
|
self._monitor = monitoring.MonitorManager(env)
|
|
self._monitor.start(directory, video_callable, force, resume,
|
|
write_upon_reset, uid, mode)
|
|
|
|
def _step(self, action):
|
|
self._monitor._before_step(action)
|
|
observation, reward, done, info = self.env.step(action)
|
|
done = self._monitor._after_step(observation, reward, done, info)
|
|
|
|
return observation, reward, done, info
|
|
|
|
def _reset(self):
|
|
self._monitor._before_reset()
|
|
observation = self.env.reset()
|
|
self._monitor._after_reset(observation)
|
|
|
|
return observation
|
|
|
|
def _close(self):
|
|
super(Monitor, self)._close()
|
|
|
|
# _monitor will not be set if super(Monitor, self).__init__ raises, this check prevents a confusing error message
|
|
if getattr(self, '_monitor', None):
|
|
self._monitor.close()
|
|
|
|
def set_monitor_mode(self, mode):
|
|
logger.info("Setting the monitor mode is deprecated and will be removed soon")
|
|
self._monitor._set_mode(mode)
|
|
return Monitor
|