gen_envs_display.py 2.2 KB

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