gen_envs_display.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. if isinstance(env_spec.entry_point, str):
  50. # minigrid.envs:Env or minigrid.envs.babyai:Env
  51. split = env_spec.entry_point.split(".")
  52. # ignore minigrid.envs.env_type:Env
  53. env_module = split[0]
  54. env_name = split[-1].split(":")[-1]
  55. env_type = env_module if len(split) == 2 else split[-1].split(":")[0]
  56. if env_module == "minigrid":
  57. if env_type not in type_dict.keys():
  58. type_dict[env_type] = []
  59. if env_name not in type_dict[env_type]:
  60. type_dict[env_type].append(env_name)
  61. else:
  62. continue
  63. for key, value in type_dict.items():
  64. env_type = key
  65. page = generate_page({"id": key, "list": value})
  66. fp = open(
  67. os.path.join(
  68. os.path.dirname(__file__), "..", "environments", env_type, "list.html"
  69. ),
  70. "w",
  71. encoding="utf-8",
  72. )
  73. fp.write(page)
  74. fp.close()