gen_mds.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. __author__ = "Feng Gu"
  2. __email__ = "contact@fenggu.me"
  3. """
  4. isort:skip_file
  5. """
  6. import os
  7. import re
  8. from gymnasium.envs.registration import registry
  9. from tqdm import tqdm
  10. from utils import trim
  11. from itertools import chain
  12. from utils import env_name_format
  13. readme_path = os.path.join(
  14. os.path.dirname(os.path.dirname(os.path.dirname(__file__))),
  15. "README.md",
  16. )
  17. LAYOUT = "env"
  18. pattern = re.compile(r"(?<!^)(?=[A-Z])")
  19. all_envs = list(registry.values())
  20. filtered_envs_by_type = {}
  21. env_names = []
  22. babyai_envs = {}
  23. # Obtain filtered list
  24. for env_spec in tqdm(all_envs):
  25. # minigrid.envs:Env
  26. split = env_spec.entry_point.split(".")
  27. # ignore gymnasium.envs.env_type:Env
  28. env_module = split[0]
  29. if len(split) > 2 and "babyai" in split[2]:
  30. curr_babyai_env = split[2]
  31. babyai_env_name = curr_babyai_env.split(":")[1]
  32. babyai_envs[babyai_env_name] = env_spec
  33. elif env_module == "minigrid":
  34. env_name = split[1]
  35. filtered_envs_by_type[env_name] = env_spec
  36. # if env_module != "minigrid":
  37. else:
  38. continue
  39. filtered_envs = {
  40. env[0]: env[1]
  41. for env in sorted(
  42. filtered_envs_by_type.items(),
  43. key=lambda item: item[1].entry_point.split(".")[1],
  44. )
  45. }
  46. filtered_babyai_envs = {
  47. env[0]: env[1]
  48. for env in sorted(
  49. babyai_envs.items(),
  50. key=lambda item: item[1].entry_point.split(".")[1],
  51. )
  52. }
  53. for env_name, env_spec in chain(filtered_envs.items(), filtered_babyai_envs.items()):
  54. made = env_spec.make()
  55. docstring = trim(made.unwrapped.__doc__)
  56. # minigrid.envs:Env or minigrid.envs.babyai:Env
  57. split = env_spec.entry_point.split(".")
  58. # ignore minigrid.envs.env_type:Env
  59. env_module = split[0]
  60. env_name = split[-1].split(":")[-1]
  61. env_type = env_module if len(split) == 2 else split[-1].split(":")[0]
  62. path_name = ""
  63. os.makedirs(
  64. os.path.join(
  65. os.path.dirname(os.path.dirname(__file__)), "environments", env_type
  66. ),
  67. exist_ok=True,
  68. )
  69. v_path = os.path.join(
  70. os.path.dirname(os.path.dirname(__file__)),
  71. "environments",
  72. env_type,
  73. f"{env_name}.md",
  74. )
  75. formatted_env_name = env_name_format(env_name)
  76. front_matter = f"""---
  77. autogenerated:
  78. title: {formatted_env_name}
  79. ---
  80. """
  81. title = f"# {formatted_env_name}"
  82. gif = (
  83. "```{figure} "
  84. + f"""/_static/videos/{env_type}/{env_name}.gif
  85. :alt: {formatted_env_name}
  86. :width: 200px
  87. ```
  88. """
  89. )
  90. if docstring is None:
  91. docstring = "No information provided"
  92. all_text = f"""{front_matter}
  93. {title}
  94. {gif}
  95. {docstring}
  96. """
  97. file = open(v_path, "w+", encoding="utf-8")
  98. file.write(all_text)
  99. file.close()