from __future__ import annotations
import os
import gymnasium
def create_grid_cell(type_id, env_id, base_path):
return f"""
{' '.join(env_id.split('_')).title()}
"""
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 = (
"""
"""
if not non_limited_page
else ""
)
return f"""
{cells}
{more_btn}
"""
if __name__ == "__main__":
"""
python gen_envs_display
"""
type_dict = {}
for env_spec in gymnasium.envs.registry.values():
if isinstance(env_spec.entry_point, str):
# minigrid.envs:Env or minigrid.envs.babyai:Env
split = env_spec.entry_point.split(".")
# ignore minigrid.envs.env_type:Env
env_module = split[0]
env_name = split[-1].split(":")[-1]
env_type = env_module if len(split) == 2 else split[-1].split(":")[0]
if env_module == "minigrid":
if env_type not in type_dict.keys():
type_dict[env_type] = []
if env_name not in type_dict[env_type]:
type_dict[env_type].append(env_name)
else:
continue
for key, value in type_dict.items():
env_type = key
page = generate_page({"id": key, "list": value})
fp = open(
os.path.join(
os.path.dirname(__file__), "..", "environments", env_type, "list.html"
),
"w",
encoding="utf-8",
)
fp.write(page)
fp.close()