def test_clip(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = array_spec.BoundedArraySpec((2,), np.float32, [-1, 0], 1) 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.ActionClipWrapper(env) env.reset() # actions within bounds, use NumPy action action = env.step(np.array([0, 0])) np.testing.assert_array_almost_equal([0.0, 0.0], action) # action 1 outside bounds, use list action action = env.step([-4, 0]) np.testing.assert_array_almost_equal([-1.0, 0.0], action) # action 2 outside bounds, use NumPy action action = env.step(np.array([0, -4])) np.testing.assert_array_almost_equal([0.0, 0.0], action) # actions outside bounds, use list action action = env.step([4, 4]) action = env.step(np.array([4, 4])) np.testing.assert_array_almost_equal([1.0, 1.0], action)
def test_nested(self): obs_spec = array_spec.BoundedArraySpec((2, 3), np.int32, -10, 10) action_spec = [ array_spec.BoundedArraySpec((2,), np.float32, -1, 1), [ array_spec.BoundedArraySpec((2,), np.float32, -2, 2), array_spec.BoundedArraySpec((2,), np.float32, -3, 3) ] ] 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.ActionClipWrapper(env) # use NumPy action action = [np.array([10, -10]), [np.array([10, -10]), np.array([10, -10])]] action = env.step(action) np.testing.assert_array_almost_equal([1, -1], action[0]) np.testing.assert_array_almost_equal([2, -2], action[1][0]) np.testing.assert_array_almost_equal([3, -3], action[1][1]) # use list action action = [[10, -10], [[10, -10], [10, -10]]] action = env.step(action) np.testing.assert_array_almost_equal([1, -1], action[0]) np.testing.assert_array_almost_equal([2, -2], action[1][0]) np.testing.assert_array_almost_equal([3, -3], action[1][1])