2021-09-22 17:11:21 -06:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
pytest.importorskip("gym.envs.atari")
|
|
|
|
|
2021-09-13 10:35:40 -06:00
|
|
|
from itertools import product
|
|
|
|
|
2022-03-31 12:50:38 -07:00
|
|
|
from gym.envs.registration import registry
|
|
|
|
|
2021-09-13 10:35:40 -06:00
|
|
|
|
|
|
|
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
|