Files
Gymnasium/docs/scripts/gen_envs_display.py

249 lines
6.2 KiB
Python
Raw Normal View History

2022-10-03 19:01:14 +01:00
import os
2022-09-13 20:27:34 +01:00
import sys
2022-09-13 20:27:34 +01:00
all_envs = [
{
"id": "mujoco",
"list": [
"ant",
"half_cheetah",
"hopper",
"humanoid_standup",
"humanoid",
"inverted_double_pendulum",
"inverted_pendulum",
"pusher",
2022-09-13 20:27:34 +01:00
"reacher",
"swimmer",
"walker2d",
],
},
2022-10-03 19:01:14 +01:00
{"id": "toy_text", "list": ["blackjack", "cliff_walking", "frozen_lake", "taxi"]},
2022-09-13 20:27:34 +01:00
{"id": "box2d", "list": ["bipedal_walker", "car_racing", "lunar_lander"]},
{
"id": "classic_control",
"list": [
"acrobot",
"cart_pole",
"mountain_car_continuous",
"mountain_car",
"pendulum",
],
},
{
"id": "atari",
"list": [
"adventure",
"air_raid",
"alien",
"amidar",
"assault",
"asterix",
"asteroids",
"atlantis",
2023-03-30 14:49:18 +01:00
"atlantis2",
"backgammon",
2022-09-13 20:27:34 +01:00
"bank_heist",
2023-03-30 14:49:18 +01:00
"basic_math",
2022-09-13 20:27:34 +01:00
"battle_zone",
"beam_rider",
"berzerk",
2023-03-30 14:49:18 +01:00
"blackjack",
2022-09-13 20:27:34 +01:00
"bowling",
"boxing",
"breakout",
"carnival",
2023-03-30 14:49:18 +01:00
"casino",
2022-09-13 20:27:34 +01:00
"centipede",
"chopper_command",
"crazy_climber",
2023-03-30 14:49:18 +01:00
"crossbow",
"darkchambers",
2022-09-13 20:27:34 +01:00
"defender",
"demon_attack",
2023-03-30 14:49:18 +01:00
"donkey_kong",
2022-09-13 20:27:34 +01:00
"double_dunk",
2023-03-30 14:49:18 +01:00
"earthworld",
2022-09-13 20:27:34 +01:00
"elevator_action",
"enduro",
2023-03-30 14:49:18 +01:00
"entombed",
"et",
2022-09-13 20:27:34 +01:00
"fishing_derby",
2023-03-30 14:49:18 +01:00
"flag_capture",
2022-09-13 20:27:34 +01:00
"freeway",
2023-03-30 14:49:18 +01:00
"frogger",
2022-09-13 20:27:34 +01:00
"frostbite",
2023-03-30 14:49:18 +01:00
"galaxian",
2022-09-13 20:27:34 +01:00
"gopher",
"gravitar",
2023-03-30 14:49:18 +01:00
"hangman",
"haunted_house",
2022-09-13 20:27:34 +01:00
"hero",
2023-03-30 14:49:18 +01:00
"human_cannonball",
2022-09-13 20:27:34 +01:00
"ice_hockey",
"jamesbond",
"journey_escape",
2023-03-30 14:49:18 +01:00
"kaboom",
2022-09-13 20:27:34 +01:00
"kangaroo",
2023-03-30 14:49:18 +01:00
"keystone_kapers",
"king_kong",
"klax",
"koolaid",
2022-09-13 20:27:34 +01:00
"krull",
"kung_fu_master",
2023-03-30 14:49:18 +01:00
"laser_gates",
"lost_luggage",
"mario_bros",
"miniature_golf",
2022-09-13 20:27:34 +01:00
"montezuma_revenge",
2023-03-30 14:49:18 +01:00
"mr_do",
2022-09-13 20:27:34 +01:00
"ms_pacman",
"name_this_game",
2023-03-30 14:49:18 +01:00
"othello",
"pacman",
2022-09-13 20:27:34 +01:00
"phoenix",
"pitfall",
2023-03-30 14:49:18 +01:00
"pitfall2",
2022-09-13 20:27:34 +01:00
"pong",
"pooyan",
"private_eye",
"qbert",
"riverraid",
"road_runner",
"robotank",
"seaquest",
2023-03-30 14:49:18 +01:00
"sir_lancelot",
2022-09-13 20:27:34 +01:00
"skiing",
"solaris",
"space_invaders",
2023-03-30 14:49:18 +01:00
"space_war",
2022-09-13 20:27:34 +01:00
"star_gunner",
2023-03-30 14:49:18 +01:00
"superman",
"surround",
2022-09-13 20:27:34 +01:00
"tennis",
2023-03-30 14:49:18 +01:00
"tetris",
"tic_tac_toe_3d",
2022-09-13 20:27:34 +01:00
"time_pilot",
2023-03-30 14:49:18 +01:00
"trondead",
"turmoil",
2022-09-13 20:27:34 +01:00
"tutankham",
"up_n_down",
"venture",
2023-03-30 14:49:18 +01:00
"video_checkers",
"video_chess",
"video_cube",
2022-09-13 20:27:34 +01:00
"video_pinball",
"wizard_of_wor",
2023-03-30 14:49:18 +01:00
"word_zapper",
2022-09-13 20:27:34 +01:00
"yars_revenge",
"zaxxon",
],
},
]
def create_grid_cell(type_id, env_id, base_path):
return f"""
<a href="{base_path}{env_id}">
<div class="env-grid__cell">
<div class="cell__image-container">
<img src="/_static/videos/{type_id}/{env_id}.gif">
</div>
<div class="cell__title">
<span>{' '.join(env_id.split('_')).title()}</span>
</div>
</div>
</a>
"""
def generate_page(env, limit=-1, base_path=""):
env_type_id = env["id"]
env_list = env["list"]
cells = [create_grid_cell(env_type_id, env_id, base_path) for env_id in env_list]
non_limited_page = limit == -1 or limit >= len(cells)
if non_limited_page:
cells = "\n".join(cells)
else:
cells = "\n".join(cells[:limit])
more_btn = (
2022-10-03 19:01:14 +01:00
"""
<a href="./complete_list">
<button class="more-btn">
See More Environments
</button>
</a>
"""
2022-09-13 20:27:34 +01:00
if not non_limited_page
else ""
)
return f"""
<div class="env-grid">
{cells}
</div>
{more_btn}
"""
if __name__ == "__main__":
"""
python gen_envs_display [ env_type ]
"""
type_dict_arr = []
type_arg = ""
if len(sys.argv) > 1:
type_arg = sys.argv[1]
for env in all_envs:
if type_arg == env["id"] or type_arg == "":
type_dict_arr.append(env)
for type_dict in type_dict_arr:
type_id = type_dict["id"]
envs_path = f"../environments/{type_id}"
if len(type_dict["list"]) > 20:
page = generate_page(type_dict, limit=8)
2022-10-03 19:01:14 +01:00
fp = open(
os.path.join(os.path.dirname(__file__), envs_path, "list.html"),
"w",
encoding="utf-8",
)
2022-09-13 20:27:34 +01:00
fp.write(page)
fp.close()
page = generate_page(type_dict, base_path="../")
2022-10-03 19:01:14 +01:00
fp = open(
os.path.join(
os.path.dirname(__file__), envs_path, "complete_list.html"
),
"w",
encoding="utf-8",
)
2022-09-13 20:27:34 +01:00
fp.write(page)
fp.close()
2022-10-03 19:01:14 +01:00
fp = open(
2022-10-07 11:21:30 +01:00
os.path.join(os.path.dirname(__file__), envs_path, "complete_list.md"),
2022-10-03 19:01:14 +01:00
"w",
encoding="utf-8",
)
2022-09-13 20:27:34 +01:00
env_name = " ".join(type_id.split("_")).title()
fp.write(
2022-10-07 11:21:30 +01:00
f"# Complete List - {env_name}\n\n"
2022-09-13 20:27:34 +01:00
+ "```{raw} html\n:file: complete_list.html\n```"
)
fp.close()
else:
page = generate_page(type_dict)
2022-10-03 19:01:14 +01:00
fp = open(
os.path.join(os.path.dirname(__file__), envs_path, "list.html"),
"w",
encoding="utf-8",
)
2022-09-13 20:27:34 +01:00
fp.write(page)
fp.close()