gen_envs_display.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import os
  2. import gymnasium
  3. def create_grid_cell(type_id, env_id, base_path):
  4. return f"""
  5. <a href="{base_path}{env_id}">
  6. <div class="env-grid__cell">
  7. <div class="cell__image-container">
  8. <img src="/_static/videos/{type_id}/{env_id}.gif">
  9. </div>
  10. <div class="cell__title">
  11. <span>{' '.join(env_id.split('_')).title()}</span>
  12. </div>
  13. </div>
  14. </a>
  15. """
  16. def generate_page(env, limit=-1, base_path=""):
  17. env_type_id = env["id"]
  18. env_list = env["list"]
  19. cells = [create_grid_cell(env_type_id, env_id, base_path) for env_id in env_list]
  20. non_limited_page = limit == -1 or limit >= len(cells)
  21. if non_limited_page:
  22. cells = "\n".join(cells)
  23. else:
  24. cells = "\n".join(cells[:limit])
  25. more_btn = (
  26. """
  27. <a href="./complete_list">
  28. <button class="more-btn">
  29. See More Environments
  30. </button>
  31. </a>
  32. """
  33. if not non_limited_page
  34. else ""
  35. )
  36. return f"""
  37. <div class="env-grid">
  38. {cells}
  39. </div>
  40. {more_btn}
  41. """
  42. if __name__ == "__main__":
  43. """
  44. python gen_envs_display
  45. """
  46. type_dict = {}
  47. for env_spec in gymnasium.envs.registry.values():
  48. # minigrid.envs:Env or minigrid.envs.babyai:Env
  49. split = env_spec.entry_point.split(".")
  50. # ignore minigrid.envs.env_type:Env
  51. env_module = split[0]
  52. env_name = split[-1].split(":")[-1]
  53. env_type = env_module if len(split) == 2 else split[-1].split(":")[0]
  54. if env_module == "minigrid":
  55. if env_type not in type_dict.keys():
  56. type_dict[env_type] = []
  57. if env_name not in type_dict[env_type]:
  58. type_dict[env_type].append(env_name)
  59. for key, value in type_dict.items():
  60. env_type = key
  61. page = generate_page({"id": key, "list": value})
  62. fp = open(
  63. os.path.join(
  64. os.path.dirname(__file__), "..", "environments", env_type, "list.html"
  65. ),
  66. "w",
  67. encoding="utf-8",
  68. )
  69. fp.write(page)
  70. fp.close()