Files
Gymnasium/tests/envs/test_atari_legacy_env_specs.py
Andrea PIERRÉ e913bc81b8 Improve pre-commit workflow (#2602)
* feat: add `isort` to `pre-commit`

* ci: skip `__init__.py` file for `isort`

* ci: make `isort` mandatory in lint pipeline

* docs: add a section on Git hooks

* ci: check isort diff

* fix: isort from master branch

* docs: add pre-commit badge

* ci: update black + bandit versions

* feat: add PR template

* refactor: PR template

* ci: remove bandit

* docs: add Black badge

* ci: try to remove all `|| true` statements

* ci: remove lint_python job

- Remove `lint_python` CI job
- Move `pyupgrade` job to `pre-commit` workflow

* fix: avoid messing with typing

* docs: add a note on running `pre-cpmmit` manually

* ci: apply `pre-commit` to the whole codebase
2022-03-31 15:50:38 -04:00

137 lines
3.4 KiB
Python

import pytest
pytest.importorskip("gym.envs.atari")
from itertools import product
from gym.envs.registration import registry
def test_ale_legacy_env_specs():
versions = ["-v0", "-v4"]
suffixes = ["", "NoFrameskip", "Deterministic"]
obs_types = ["", "-ram"]
games = [
"adventure",
"air_raid",
"alien",
"amidar",
"assault",
"asterix",
"asteroids",
"atlantis",
"bank_heist",
"battle_zone",
"beam_rider",
"berzerk",
"bowling",
"boxing",
"breakout",
"carnival",
"centipede",
"chopper_command",
"crazy_climber",
"defender",
"demon_attack",
"double_dunk",
"elevator_action",
"enduro",
"fishing_derby",
"freeway",
"frostbite",
"gopher",
"gravitar",
"hero",
"ice_hockey",
"jamesbond",
"journey_escape",
"kangaroo",
"krull",
"kung_fu_master",
"montezuma_revenge",
"ms_pacman",
"name_this_game",
"phoenix",
"pitfall",
"pong",
"pooyan",
"private_eye",
"qbert",
"riverraid",
"road_runner",
"robotank",
"seaquest",
"skiing",
"solaris",
"space_invaders",
"star_gunner",
"tennis",
"time_pilot",
"tutankham",
"up_n_down",
"venture",
"video_pinball",
"wizard_of_wor",
"yars_revenge",
"zaxxon",
]
# Convert snake case to camel case
games = list(map(lambda x: x.title().replace("_", ""), games))
specs = list(map("".join, product(games, obs_types, suffixes, versions)))
"""
defaults:
repeat_action_probability = 0.0
full_action_space = False
frameskip = (2, 5)
game = "Pong"
obs_type = "ram"
mode = None
difficulty = None
v0: repeat_action_probability = 0.25
v4: inherits defaults
-NoFrameskip: frameskip = 1
-Deterministic: frameskip = 4 or 3 for space_invaders
"""
for spec in specs:
assert spec in registry.env_specs
kwargs = registry.env_specs[spec]._kwargs
# Assert necessary parameters are set
assert "frameskip" in kwargs
assert "game" in kwargs
assert "obs_type" in kwargs
assert "repeat_action_probability" in kwargs
assert "full_action_space" in kwargs
# Common defaults
assert kwargs["full_action_space"] is False
assert "mode" not in kwargs
assert "difficulty" not in kwargs
if "-ram" in spec:
assert kwargs["obs_type"] == "ram"
else:
assert kwargs["obs_type"] == "rgb"
if "NoFrameskip" in spec:
assert kwargs["frameskip"] == 1
elif "Deterministic" in spec:
assert isinstance(kwargs["frameskip"], int)
frameskip = 3 if "SpaceInvaders" in spec else 4
assert kwargs["frameskip"] == frameskip
else:
assert isinstance(kwargs["frameskip"], tuple) and kwargs["frameskip"] == (
2,
5,
)
assert spec.endswith("v0") or spec.endswith("v4")
if spec.endswith("v0"):
assert kwargs["repeat_action_probability"] == 0.25
elif spec.endswith("v4"):
assert kwargs["repeat_action_probability"] == 0.0