2016-04-27 19:35:33 -07:00
|
|
|
import glob
|
|
|
|
import os
|
|
|
|
|
|
|
|
import gym
|
2016-05-06 18:19:16 -07:00
|
|
|
from gym import error
|
2016-05-29 13:56:38 -07:00
|
|
|
from gym import monitoring
|
2016-04-27 19:35:33 -07:00
|
|
|
from gym.monitoring import monitor
|
2016-05-15 17:22:38 -07:00
|
|
|
from gym.monitoring.tests import helpers
|
2016-04-27 19:35:33 -07:00
|
|
|
|
|
|
|
class FakeEnv(gym.Env):
|
|
|
|
def _render(self, close=True):
|
|
|
|
raise RuntimeError('Raising')
|
|
|
|
|
|
|
|
def test_monitor_filename():
|
2016-05-15 17:22:38 -07:00
|
|
|
with helpers.tempdir() as temp:
|
2016-08-06 00:40:21 -07:00
|
|
|
env = gym.make('CartPole-v0')
|
2016-04-27 19:35:33 -07:00
|
|
|
env.monitor.start(temp)
|
|
|
|
env.monitor.close()
|
|
|
|
|
|
|
|
manifests = glob.glob(os.path.join(temp, '*.manifest.*'))
|
|
|
|
assert len(manifests) == 1
|
|
|
|
|
2016-08-17 11:25:09 -07:00
|
|
|
def test_write_upon_reset_false():
|
|
|
|
with helpers.tempdir() as temp:
|
|
|
|
env = gym.make('CartPole-v0')
|
2016-08-17 11:59:29 -07:00
|
|
|
env.monitor.start(temp, video_callable=False, write_upon_reset=False)
|
2016-08-17 11:25:09 -07:00
|
|
|
env.reset()
|
|
|
|
|
2016-08-17 11:59:29 -07:00
|
|
|
files = glob.glob(os.path.join(temp, '*'))
|
|
|
|
assert not files, "Files: {}".format(files)
|
2016-08-17 11:25:09 -07:00
|
|
|
|
|
|
|
env.monitor.close()
|
2016-08-17 11:59:29 -07:00
|
|
|
files = glob.glob(os.path.join(temp, '*'))
|
|
|
|
assert len(files) > 0
|
2016-08-17 11:25:09 -07:00
|
|
|
|
|
|
|
def test_write_upon_reset_true():
|
|
|
|
with helpers.tempdir() as temp:
|
|
|
|
env = gym.make('CartPole-v0')
|
2016-08-17 11:59:29 -07:00
|
|
|
env.monitor.start(temp, video_callable=False, write_upon_reset=True)
|
2016-08-17 11:25:09 -07:00
|
|
|
env.reset()
|
|
|
|
|
2016-08-17 11:59:29 -07:00
|
|
|
files = glob.glob(os.path.join(temp, '*'))
|
|
|
|
assert len(files) > 0, "Files: {}".format(files)
|
2016-08-17 11:25:09 -07:00
|
|
|
|
|
|
|
env.monitor.close()
|
2016-08-17 11:59:29 -07:00
|
|
|
files = glob.glob(os.path.join(temp, '*'))
|
|
|
|
assert len(files) > 0
|
2016-08-17 11:25:09 -07:00
|
|
|
|
2016-04-27 19:35:33 -07:00
|
|
|
def test_close_monitor():
|
2016-05-15 17:22:38 -07:00
|
|
|
with helpers.tempdir() as temp:
|
2016-04-27 19:35:33 -07:00
|
|
|
env = FakeEnv()
|
|
|
|
env.monitor.start(temp)
|
|
|
|
env.monitor.close()
|
|
|
|
|
|
|
|
manifests = monitor.detect_training_manifests(temp)
|
|
|
|
assert len(manifests) == 1
|
2016-05-06 18:19:16 -07:00
|
|
|
|
2016-05-29 13:56:38 -07:00
|
|
|
def test_video_callable_true_not_allowed():
|
2016-05-15 17:22:38 -07:00
|
|
|
with helpers.tempdir() as temp:
|
2016-08-06 00:40:21 -07:00
|
|
|
env = gym.make('CartPole-v0')
|
2016-05-06 18:19:16 -07:00
|
|
|
try:
|
2016-05-29 13:56:38 -07:00
|
|
|
env.monitor.start(temp, video_callable=True)
|
2016-05-06 18:19:16 -07:00
|
|
|
except error.Error:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
assert False
|
2016-05-15 16:43:53 -07:00
|
|
|
|
2016-05-29 13:56:38 -07:00
|
|
|
def test_video_callable_false_does_not_record():
|
|
|
|
with helpers.tempdir() as temp:
|
2016-08-06 00:40:21 -07:00
|
|
|
env = gym.make('CartPole-v0')
|
2016-05-29 13:56:38 -07:00
|
|
|
env.monitor.start(temp, video_callable=False)
|
|
|
|
env.reset()
|
|
|
|
env.monitor.close()
|
|
|
|
results = monitoring.load_results(temp)
|
|
|
|
assert len(results['videos']) == 0
|
|
|
|
|
|
|
|
def test_video_callable_records_videos():
|
|
|
|
with helpers.tempdir() as temp:
|
2016-08-06 00:40:21 -07:00
|
|
|
env = gym.make('CartPole-v0')
|
2016-05-29 13:56:38 -07:00
|
|
|
env.monitor.start(temp)
|
|
|
|
env.reset()
|
|
|
|
env.monitor.close()
|
|
|
|
results = monitoring.load_results(temp)
|
|
|
|
assert len(results['videos']) == 1, "Videos: {}".format(results['videos'])
|
|
|
|
|
2016-05-15 16:43:53 -07:00
|
|
|
def test_env_reuse():
|
2016-05-15 17:22:38 -07:00
|
|
|
with helpers.tempdir() as temp:
|
2016-05-15 16:43:53 -07:00
|
|
|
env = gym.make('CartPole-v0')
|
|
|
|
env.monitor.start(temp)
|
|
|
|
env.monitor.close()
|
|
|
|
|
|
|
|
env.monitor.start(temp, force=True)
|
|
|
|
env.reset()
|
|
|
|
env.step(env.action_space.sample())
|
|
|
|
env.step(env.action_space.sample())
|
|
|
|
env.monitor.close()
|
|
|
|
|
|
|
|
results = monitor.load_results(temp)
|
|
|
|
assert results['episode_lengths'] == [2], 'Results: {}'.format(results)
|
2016-10-23 10:35:24 -07:00
|
|
|
|
|
|
|
class AutoresetEnv(gym.Env):
|
|
|
|
metadata = {'semantics.autoreset': True}
|
|
|
|
|
|
|
|
def _reset(self):
|
|
|
|
return None
|
|
|
|
|
|
|
|
def _step(self, action):
|
|
|
|
return None, 0, False, {}
|
|
|
|
|
|
|
|
gym.envs.register(
|
|
|
|
id='Autoreset-v0',
|
|
|
|
entry_point='gym.monitoring.tests.test_monitor:AutoresetEnv',
|
|
|
|
timestep_limit=2,
|
|
|
|
)
|
|
|
|
def test_env_reuse():
|
|
|
|
with helpers.tempdir() as temp:
|
|
|
|
env = gym.make('Autoreset-v0')
|
|
|
|
env.monitor.start(temp)
|
|
|
|
|
|
|
|
env.reset()
|
|
|
|
|
|
|
|
env.step(None)
|
|
|
|
_, _, done, _ = env.step(None)
|
|
|
|
assert done
|
|
|
|
|
|
|
|
env.step(None)
|
|
|
|
_, _, done, _ = env.step(None)
|
|
|
|
assert done
|