def test_check_array_bounds(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2,), np.float32, [-10, 0], 10) limits = np.array([2, 5]) def mock_step(_, action): return action with mock.patch.object( random_py_environment.RandomPyEnvironment, '_step', side_effect=mock_step, autospec=True, ): env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec, auto_reset=False) env = wrappers.ActionDiscretizeWrapper(env, limits) env.reset() action = env.step([0, 0]) np.testing.assert_array_almost_equal([-10.0, 0.0], action) action = env.step([1, 4]) np.testing.assert_array_almost_equal([10.0, 10.0], action) action = env.step([0, 2]) np.testing.assert_array_almost_equal([-10.0, 5.0], action)
def test_check_limits(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2, 2), np.float32, -10, 10) limits = np.array([[1, 5], [2, 2]]) with self.assertRaisesRegexp(ValueError, '.*size 2.'): env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits)
def test_check_action_shape(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2, 2), np.float32, -10, 10) limits = np.array([[2, 5], [2, 2]]) with self.assertRaisesRegexp(ValueError, '.*incorrect shape.*'): env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits) env.reset() env.step([0, 0])
def test_discrete_spec_nd(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2, 2), np.float32, -10, 10) limits = np.array([[2, 4], [3, 2]]) env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits) expected_spec = array_spec.BoundedArraySpec((2, 2), np.int32, 0, limits - 1) self.assertEqual(expected_spec, env.action_spec())
def test_discrete_spec_scalar_limit(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((), np.float32, -10, 10) limits = 3 env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits) expected_spec = array_spec.BoundedArraySpec((), np.int32, 0, np.asarray(limits) - 1) self.assertEqual(expected_spec, env.action_spec())
def test_shapes_broadcast(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2, 2), np.float32, -10, 10) limits = np.array([[2, 5]]) def mock_step(_, action): return action with mock.patch.object( random_py_environment.RandomPyEnvironment, 'step', side_effect=mock_step, autospec=True, ): env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits) action = env.step([[0, 2], [1, 4]]) np.testing.assert_array_almost_equal([[-10.0, 0.0], [10.0, 10.0]], action)
def test_action_mapping_1d(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((), np.float32, -10, 10) limits = np.array(5) def mock_step(_, action): return action with mock.patch.object( random_py_environment.RandomPyEnvironment, 'step', side_effect=mock_step, autospec=True, ): env = random_py_environment.RandomPyEnvironment( obs_spec, action_spec=action_spec) env = wrappers.ActionDiscretizeWrapper(env, limits) action = env.step(2) np.testing.assert_array_almost_equal(0.0, action) action = env.step(4) np.testing.assert_array_almost_equal(10.0, action)