Exemplo n.º 1
0
class TestMaxAndSkip:
    def setup_method(self):
        self.env = DummyDiscretePixelEnv(random=False)
        self.env_wrap = MaxAndSkip(DummyDiscretePixelEnv(random=False), skip=4)

    def teardown_method(self):
        self.env.close()
        self.env_wrap.close()

    def test_max_and_skip_reset(self):
        np.testing.assert_array_equal(self.env.reset(), self.env_wrap.reset())

    def test_max_and_skip_step(self):
        self.env.reset()
        self.env_wrap.reset()
        obs_wrap, reward_wrap, _, _ = self.env_wrap.step(1)
        reward = 0
        for _ in range(4):
            obs, r, _, _ = self.env.step(1)
            reward += r

        np.testing.assert_array_equal(obs, obs_wrap)
        np.testing.assert_array_equal(reward, reward_wrap)

        # done=True because both env stepped more than 4 times in total
        obs_wrap, _, done_wrap, _ = self.env_wrap.step(1)
        obs, _, done, _ = self.env.step(1)

        assert done
        assert done_wrap
        np.testing.assert_array_equal(obs, obs_wrap)
Exemplo n.º 2
0
class TestGrayscale:
    def setup_method(self):
        self.env = DummyDiscretePixelEnv(random=False)
        self.env_g = Grayscale(DummyDiscretePixelEnv(random=False))

    def teardown_method(self):
        self.env.close()
        self.env_g.close()

    def test_grayscale_invalid_environment_type(self):
        with pytest.raises(ValueError):
            self.env.observation_space = gym.spaces.Discrete(64)
            Grayscale(self.env)

    def test_grayscale_invalid_environment_shape(self):
        with pytest.raises(ValueError):
            self.env.observation_space = gym.spaces.Box(low=0,
                                                        high=255,
                                                        shape=(4, ),
                                                        dtype=np.uint8)
            Grayscale(self.env)

    def test_grayscale_observation_space(self):
        assert self.env_g.observation_space.shape == (
            self.env.observation_space.shape[:-1])

    def test_grayscale_reset(self):
        """
        RGB to grayscale conversion using scikit-image.

        Weights used for conversion:
        Y = 0.2125 R + 0.7154 G + 0.0721 B

        Reference:
        http://scikit-image.org/docs/dev/api/skimage.color.html#skimage.color.rgb2grey
        """
        grayscale_output = np.round(
            np.dot(self.env.reset()[:, :, :3],
                   [0.2125, 0.7154, 0.0721])).astype(np.uint8)
        np.testing.assert_array_almost_equal(grayscale_output,
                                             self.env_g.reset())

    def test_grayscale_step(self):
        self.env.reset()
        self.env_g.reset()
        obs, _, _, _ = self.env.step(1)
        obs_g, _, _, _ = self.env_g.step(1)

        grayscale_output = np.round(
            np.dot(obs[:, :, :3], [0.2125, 0.7154, 0.0721])).astype(np.uint8)
        np.testing.assert_array_almost_equal(grayscale_output, obs_g)