Files
Gymnasium/docs/_scripts/gen_mds.py

95 lines
2.8 KiB
Python
Raw Permalink Normal View History

2022-09-13 20:27:34 +01:00
import os
import re
2023-03-08 18:01:24 +00:00
from collections import defaultdict
2022-09-13 20:27:34 +01:00
2022-09-15 09:49:24 +01:00
import gymnasium as gym
2023-03-08 18:01:24 +00:00
from gymnasium.envs.registration import find_highest_version, get_env_id
from utils import trim
2023-03-08 18:01:24 +00:00
filtered_envs = defaultdict(list)
exclude_env_names = [
"GymV21Environment",
"GymV26Environment",
"FrozenLake8x8",
"LunarLanderContinuous",
"BipedalWalkerHardcore",
2023-03-30 14:00:14 +01:00
"phys2d/CartPole",
"phys2d/Pendulum",
"tabular/Blackjack",
"tabular/CliffWalking",
2023-03-08 18:01:24 +00:00
]
for env_spec in gym.registry.values():
2023-03-30 14:49:18 +01:00
if get_env_id(env_spec.namespace, env_spec.name, None) not in exclude_env_names:
2023-03-08 18:01:24 +00:00
highest_version = find_highest_version(env_spec.namespace, env_spec.name)
env_id = get_env_id(env_spec.namespace, env_spec.name, highest_version)
env_spec = gym.spec(env_id)
if (
isinstance(env_spec.entry_point, str)
and "gymnasium" in env_spec.entry_point
):
env_module = env_spec.entry_point.split(".")[2]
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
if env_spec not in filtered_envs[env_module]:
filtered_envs[env_module].append(env_spec)
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
# print(filtered_envs.keys())
for env_module, env_specs in filtered_envs.items():
env_module_name = env_module.replace("_", " ").title()
print(env_module_name)
env_specs = sorted(env_specs, key=lambda spec: spec.name)
2022-09-15 09:49:24 +01:00
2023-03-08 18:01:24 +00:00
for i, env_spec in enumerate(env_specs):
print(f"\t{i=}, {env_spec.name}")
env = gym.make(env_spec)
env_docstring = trim(env.unwrapped.__doc__)
assert env_docstring
2022-09-15 09:49:24 +01:00
2023-03-08 18:01:24 +00:00
snake_env_name = re.sub(r"(?<!^)(?=[A-Z])", "_", env_spec.name).lower()
title_env_name = re.sub(r"(?<!^)(?=[A-Z])", " ", env_spec.name).title()
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
if i == 0:
2022-09-13 20:27:34 +01:00
related_pages_meta = "firstpage:\n"
2023-03-08 18:01:24 +00:00
elif i == len(env_specs) - 1:
2022-09-13 20:27:34 +01:00
related_pages_meta = "lastpage:\n"
2023-03-08 18:01:24 +00:00
else:
related_pages_meta = ""
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
action_space_table = env.action_space.__repr__().replace("\n", "")
observation_space_table = env.observation_space.__repr__().replace("\n", "")
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
env_page = f"""---
2022-10-09 00:39:35 +01:00
autogenerated:
2022-09-13 20:27:34 +01:00
title: {title_env_name}
{related_pages_meta}---
2023-03-08 18:01:24 +00:00
# {title_env_name}
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
```{{figure}} ../../_static/videos/{env_module}/{snake_env_name}.gif
:width: 200px
:name: {snake_env_name}
```
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
This environment is part of the {env_module_name} environments which contains general information about the environment.
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
| | |
|---|---|
| Action Space | `{re.sub(' +', ' ', action_space_table)}` |
| Observation Space | `{re.sub(' +', ' ', observation_space_table)}` |
| import | `gymnasium.make("{env.spec.id}")` |
2022-09-13 20:27:34 +01:00
2023-03-08 18:01:24 +00:00
{env_docstring}
2022-09-13 20:27:34 +01:00
"""
2023-03-08 18:01:24 +00:00
env_md_path = os.path.join(
os.path.dirname(__file__),
"..",
"environments",
env_module,
snake_env_name + ".md",
)
file = open(env_md_path, "w", encoding="utf-8")
file.write(env_page)
2022-09-13 20:27:34 +01:00
file.close()