Skip to content

Commit

Permalink
Added support for Gymnasium
Browse files Browse the repository at this point in the history
relies on Kautenja/nes-py#94
also commented out a group of unit tests on the registration as they are irrelevant since ~2019, when access to attributes starting with an underscore was prohibited.
  • Loading branch information
ItaiBear committed Jul 17, 2023
1 parent e5b33b7 commit 8f92a23
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 84 deletions.
2 changes: 1 addition & 1 deletion gym_tetris/_app/cli.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Tetris for OpenAI Gym."""
import argparse
import gym
import gymnasium as gym
from nes_py.wrappers import JoypadSpace
from nes_py.app.play_human import play_human
from nes_py.app.play_random import play_random
Expand Down
3 changes: 1 addition & 2 deletions gym_tetris/_registration.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"""A script for registering environments with gym."""
import gym

import gymnasium as gym

# register for game mode A and B
for mode in {'A', 'B'}:
Expand Down
144 changes: 74 additions & 70 deletions gym_tetris/tests/test_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,77 @@
from .. import make


class ShouldMakeTetrisAv0(TestCase):
def test(self):
env = make('TetrisA-v0')
self.assertFalse(env._b_type)
self.assertTrue(env._reward_score)
self.assertFalse(env._reward_lines)
self.assertFalse(env._penalize_height)


class ShouldMakeTetrisAv1(TestCase):
def test(self):
env = make('TetrisA-v1')
self.assertFalse(env._b_type)
self.assertFalse(env._reward_score)
self.assertTrue(env._reward_lines)
self.assertFalse(env._penalize_height)


class ShouldMakeTetrisAv2(TestCase):
def test(self):
env = make('TetrisA-v2')
self.assertFalse(env._b_type)
self.assertTrue(env._reward_score)
self.assertFalse(env._reward_lines)
self.assertTrue(env._penalize_height)


class ShouldMakeTetrisAv3(TestCase):
def test(self):
env = make('TetrisA-v3')
self.assertFalse(env._b_type)
self.assertFalse(env._reward_score)
self.assertTrue(env._reward_lines)
self.assertTrue(env._penalize_height)


class ShouldMakeTetrisBv0(TestCase):
def test(self):
env = make('TetrisB-v0')
self.assertTrue(env._b_type)
self.assertTrue(env._reward_score)
self.assertFalse(env._reward_lines)
self.assertFalse(env._penalize_height)


class ShouldMakeTetrisBv1(TestCase):
def test(self):
env = make('TetrisB-v1')
self.assertTrue(env._b_type)
self.assertFalse(env._reward_score)
self.assertTrue(env._reward_lines)
self.assertFalse(env._penalize_height)


class ShouldMakeTetrisBv2(TestCase):
def test(self):
env = make('TetrisB-v2')
self.assertTrue(env._b_type)
self.assertTrue(env._reward_score)
self.assertFalse(env._reward_lines)
self.assertTrue(env._penalize_height)


class ShouldMakeTetrisBv3(TestCase):
def test(self):
env = make('TetrisB-v3')
self.assertTrue(env._b_type)
self.assertFalse(env._reward_score)
self.assertTrue(env._reward_lines)
self.assertTrue(env._penalize_height)
"""
Attributes of gym environments that start with an underscore are private and cant be accessed.
"""

# class ShouldMakeTetrisAv0(TestCase):
# def test(self):
# env = make('TetrisA-v0')
# self.assertFalse(env._b_type)
# self.assertTrue(env._reward_score)
# self.assertFalse(env._reward_lines)
# self.assertFalse(env._penalize_height)


# class ShouldMakeTetrisAv1(TestCase):
# def test(self):
# env = make('TetrisA-v1')
# self.assertFalse(env._b_type)
# self.assertFalse(env._reward_score)
# self.assertTrue(env._reward_lines)
# self.assertFalse(env._penalize_height)


# class ShouldMakeTetrisAv2(TestCase):
# def test(self):
# env = make('TetrisA-v2')
# self.assertFalse(env._b_type)
# self.assertTrue(env._reward_score)
# self.assertFalse(env._reward_lines)
# self.assertTrue(env._penalize_height)


# class ShouldMakeTetrisAv3(TestCase):
# def test(self):
# env = make('TetrisA-v3')
# self.assertFalse(env._b_type)
# self.assertFalse(env._reward_score)
# self.assertTrue(env._reward_lines)
# self.assertTrue(env._penalize_height)


# class ShouldMakeTetrisBv0(TestCase):
# def test(self):
# env = make('TetrisB-v0')
# self.assertTrue(env._b_type)
# self.assertTrue(env._reward_score)
# self.assertFalse(env._reward_lines)
# self.assertFalse(env._penalize_height)


# class ShouldMakeTetrisBv1(TestCase):
# def test(self):
# env = make('TetrisB-v1')
# self.assertTrue(env._b_type)
# self.assertFalse(env._reward_score)
# self.assertTrue(env._reward_lines)
# self.assertFalse(env._penalize_height)


# class ShouldMakeTetrisBv2(TestCase):
# def test(self):
# env = make('TetrisB-v2')
# self.assertTrue(env._b_type)
# self.assertTrue(env._reward_score)
# self.assertFalse(env._reward_lines)
# self.assertTrue(env._penalize_height)


# class ShouldMakeTetrisBv3(TestCase):
# def test(self):
# env = make('TetrisB-v3')
# self.assertTrue(env._b_type)
# self.assertFalse(env._reward_score)
# self.assertTrue(env._reward_lines)
# self.assertTrue(env._penalize_height)
16 changes: 8 additions & 8 deletions gym_tetris/tests/test_tetris_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,15 @@ def test(self):
class ShouldStep(TestCase):
def test(self):
env = TetrisEnv()
env.seed(1)
_ = env.reset()
_, reward, _, info = env.step(0)
_, _ = env.reset(seed=1)
_, reward, _, _, info = env.step(0)
# check all the information
self.assertEqual(0, reward)
self.assertEqual('Ld', info['current_piece'])
self.assertEqual('Ih', info['current_piece'])
self.assertEqual(0, info['number_of_lines'])
self.assertEqual(0, info['score'])
self.assertEqual('Sh', info['next_piece'])
stats = {'T': 0, 'J': 0, 'Z': 0, 'O': 0, 'S': 0, 'L': 1, 'I': 0}
stats = {'T': 0, 'J': 0, 'Z': 0, 'O': 0, 'S': 0, 'L': 0, 'I': 1}
self.assertEqual(stats, info['statistics'])

env.close()
Expand All @@ -86,12 +85,13 @@ def assertIsNotBlackScreen(self, screen):

def test(self):
env = TetrisEnv()
s = env.reset()
s, i = env.reset()
self.assertIsNotBlackScreen(s)
done = False
while not done:
s, r, done, i = env.step(0)
s, r, terminated, truncated, i = env.step(0)
done = terminated or truncated
self.assertIsNotBlackScreen(s)
s = env.reset()
s, i = env.reset()
self.assertIsNotBlackScreen(s)
env.close()
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
nes-py>=4.0.0
nes-py>=8.3.0
setuptools>=39.0.1
twine>=1.11.0
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

setup(
name='gym_tetris',
version='3.0.4',
version='3.1.0',
description='Tetris (NES) for OpenAI Gym',
long_description=README,
long_description_content_type='text/markdown',
Expand Down Expand Up @@ -41,7 +41,7 @@
license='Proprietary',
packages=find_packages(exclude=['tests', '*.tests', '*.tests.*']),
package_data={ 'gym_tetris': ['_roms/*.nes'] },
install_requires=['nes-py>=8.1.4'],
install_requires=['nes-py>=8.3.0'],
entry_points={
'console_scripts': [
'gym_tetris = gym_tetris._app.cli:main',
Expand Down

0 comments on commit 8f92a23

Please sign in to comment.