gen_mds.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. LAYOUT = "env"
  12. pattern = re.compile(r"(?<!^)(?=[A-Z])")
  13. all_envs = list(registry.values())
  14. filtered_envs_by_type = {}
  15. # Obtain filtered list
  16. for env_spec in tqdm(all_envs):
  17. # minigrid.envs:Env
  18. split = env_spec.entry_point.split(".")
  19. # ignore gymnasium.envs.env_type:Env
  20. env_module = split[0]
  21. if env_module != "minigrid":
  22. continue
  23. env_name = split[1]
  24. filtered_envs_by_type[env_name] = env_spec
  25. filtered_envs = {
  26. k.split(":")[1]: v
  27. for k, v in sorted(
  28. filtered_envs_by_type.items(),
  29. key=lambda item: item[1].entry_point.split(".")[1],
  30. )
  31. }
  32. for env_name, env_spec in filtered_envs.items():
  33. made = env_spec.make()
  34. docstring = trim(made.unwrapped.__doc__)
  35. pascal_env_name = env_spec.id.split("-")[1]
  36. snake_env_name = pattern.sub("_", pascal_env_name).lower()
  37. title_env_name = snake_env_name.replace("_", " ").title()
  38. v_path = os.path.join(
  39. os.path.dirname(os.path.dirname(__file__)),
  40. "environments",
  41. snake_env_name + ".md",
  42. )
  43. front_matter = f"""---
  44. AUTOGENERATED: DO NOT EDIT FILE DIRECTLY
  45. title: {title_env_name}
  46. ---
  47. """
  48. title = f"# {title_env_name}"
  49. if docstring is None:
  50. docstring = "No information provided"
  51. all_text = f"""{front_matter}
  52. {title}
  53. {docstring}
  54. """
  55. file = open(v_path, "w+", encoding="utf-8")
  56. file.write(all_text)
  57. file.close()