From 997df74df8e4149f3f5a07f6baaba88bc56fc8e3 Mon Sep 17 00:00:00 2001 From: Alistair Muldal Date: Wed, 24 Jun 2020 08:14:00 -0700 Subject: [PATCH] Temporarily exclude 'dog' domain from control suite due to VFS bug Also moved the tests for the control suite into the root directory and gave them more descriptive names PiperOrigin-RevId: 318066097 Change-Id: I73c4d707fe8783c47b1a91298244ca3664ed56f1 --- .../{domains_test.py => manipulation_test.py} | 2 +- dm_control/suite/__init__.py | 5 ++++ dm_control/suite/{tests => }/loader_test.py | 0 dm_control/suite/{tests => }/lqr_test.py | 0 .../{tests/domains_test.py => suite_test.py} | 23 +++++++++++-------- setup.py | 2 +- 6 files changed, 21 insertions(+), 11 deletions(-) rename dm_control/manipulation/{domains_test.py => manipulation_test.py} (98%) rename dm_control/suite/{tests => }/loader_test.py (100%) rename dm_control/suite/{tests => }/lqr_test.py (100%) rename dm_control/suite/{tests/domains_test.py => suite_test.py} (95%) diff --git a/dm_control/manipulation/domains_test.py b/dm_control/manipulation/manipulation_test.py similarity index 98% rename from dm_control/manipulation/domains_test.py rename to dm_control/manipulation/manipulation_test.py index dd93253a..c40ebd7d 100644 --- a/dm_control/manipulation/domains_test.py +++ b/dm_control/manipulation/manipulation_test.py @@ -53,7 +53,7 @@ def _get_fix_seed(): return _FIX_SEED -class DomainTest(parameterized.TestCase): +class ManipulationTest(parameterized.TestCase): """Tests run on all the tasks registered.""" def _validate_observation(self, observation, observation_spec): diff --git a/dm_control/suite/__init__.py b/dm_control/suite/__init__.py index aab1f3e8..61b4da71 100644 --- a/dm_control/suite/__init__.py +++ b/dm_control/suite/__init__.py @@ -55,6 +55,11 @@ def _get_tasks(tag): result = [] for domain_name in sorted(_DOMAINS.keys()): + + # TODO(b/159786444): Fix VFS-related error affecting dog domain + if domain_name == 'dog': + continue + domain = _DOMAINS[domain_name] if tag is None: diff --git a/dm_control/suite/tests/loader_test.py b/dm_control/suite/loader_test.py similarity index 100% rename from dm_control/suite/tests/loader_test.py rename to dm_control/suite/loader_test.py diff --git a/dm_control/suite/tests/lqr_test.py b/dm_control/suite/lqr_test.py similarity index 100% rename from dm_control/suite/tests/lqr_test.py rename to dm_control/suite/lqr_test.py diff --git a/dm_control/suite/tests/domains_test.py b/dm_control/suite/suite_test.py similarity index 95% rename from dm_control/suite/tests/domains_test.py rename to dm_control/suite/suite_test.py index 5bb9e52f..67ac046a 100644 --- a/dm_control/suite/tests/domains_test.py +++ b/dm_control/suite/suite_test.py @@ -31,6 +31,11 @@ from six.moves import zip +_DOMAINS_AND_TASKS = [ + dict(domain=domain, task=task) for domain, task in suite.ALL_TASKS +] + + def uniform_random_policy(action_spec, random=None): lower_bounds = action_spec.minimum upper_bounds = action_spec.maximum @@ -64,7 +69,7 @@ def make_trajectory(domain, task, seed, **trajectory_kwargs): return step_environment(env, policy, **trajectory_kwargs) -class DomainTest(parameterized.TestCase): +class SuiteTest(parameterized.TestCase): """Tests run on all the tasks registered.""" def test_constants(self): @@ -107,7 +112,7 @@ def _validate_control_range(self, lower_bounds, upper_bounds): for b in upper_bounds: self.assertEqual(b, 1.0) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_components_have_names(self, domain, task): env = suite.load(domain, task) model = env.physics.model @@ -138,7 +143,7 @@ def test_components_have_names(self, domain, task): msg='Model {!r} contains unnamed {!r} with ID {}.' .format(model.name, object_type, idx)) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_model_has_at_least_2_cameras(self, domain, task): env = suite.load(domain, task) model = env.physics.model @@ -146,7 +151,7 @@ def test_model_has_at_least_2_cameras(self, domain, task): 'Model {!r} should have at least 2 cameras, has {}.' .format(model.name, model.ncam)) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_task_conforms_to_spec(self, domain, task): """Tests that the environment timesteps conform to specifications.""" is_benchmark = (domain, task) in suite.BENCHMARKING @@ -167,7 +172,7 @@ def test_task_conforms_to_spec(self, domain, task): if is_benchmark: self._validate_reward_range(time_step) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_environment_is_deterministic(self, domain, task): """Tests that identical seeds and actions produce identical trajectories.""" seed = 0 @@ -227,7 +232,7 @@ def test_visualize_reward(self, domain, task): mock_get_reward.assert_called_with(env.physics) self.assertCorrectColors(env.physics, reward=mock_get_reward.return_value) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_task_supports_environment_kwargs(self, domain, task): env = suite.load(domain, task, environment_kwargs=dict(flat_observation=True)) @@ -235,7 +240,7 @@ def test_task_supports_environment_kwargs(self, domain, task): self.assertSetEqual(set(env.observation_spec()), {control.FLAT_OBSERVATION_KEY}) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_observation_arrays_dont_share_memory(self, domain, task): env = suite.load(domain, task) first_timestep = env.reset() @@ -247,7 +252,7 @@ def test_observation_arrays_dont_share_memory(self, domain, task): np.may_share_memory(first_array, second_array), msg='Consecutive observations of {!r} may share memory.'.format(name)) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_observations_dont_contain_constant_elements(self, domain, task): env = suite.load(domain, task) trajectory = make_trajectory(domain=domain, task=task, seed=0, @@ -278,7 +283,7 @@ def test_observations_dont_contain_constant_elements(self, domain, task): .format('\n'.join(':\t'.join([name, str(is_constant)]) for (name, is_constant) in failures))) - @parameterized.parameters(*suite.ALL_TASKS) + @parameterized.parameters(_DOMAINS_AND_TASKS) def test_initial_state_is_randomized(self, domain, task): env = suite.load(domain, task, task_kwargs={'random': 42}) obs1 = env.reset().observation diff --git a/setup.py b/setup.py index df9bb8c5..ed5fb2f7 100644 --- a/setup.py +++ b/setup.py @@ -177,7 +177,7 @@ def is_excluded(s): setup( name='dm_control', - version='0.0.318049052', + version='0.0.318066097', description='Continuous control environments and MuJoCo Python bindings.', author='DeepMind', license='Apache License, Version 2.0',