miniworld-maze 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of miniworld-maze might be problematic. Click here for more details.

Files changed (285) hide show
  1. miniworld_maze-1.0.0/LICENSE +21 -0
  2. miniworld_maze-1.0.0/PKG-INFO +108 -0
  3. miniworld_maze-1.0.0/README.md +45 -0
  4. miniworld_maze-1.0.0/examples/README.md +125 -0
  5. miniworld_maze-1.0.0/examples/benchmark_rendering.py +233 -0
  6. miniworld_maze-1.0.0/examples/generate_observations.py +187 -0
  7. miniworld_maze-1.0.0/examples/live_control_opencv.py +574 -0
  8. miniworld_maze-1.0.0/examples/observation_level_demo.py +66 -0
  9. miniworld_maze-1.0.0/pyproject.toml +100 -0
  10. miniworld_maze-1.0.0/src/miniworld_maze/__init__.py +37 -0
  11. miniworld_maze-1.0.0/src/miniworld_maze/core/__init__.py +8 -0
  12. miniworld_maze-1.0.0/src/miniworld_maze/core/constants.py +130 -0
  13. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/README.md +1 -0
  14. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/__init__.py +4 -0
  15. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/base_env.py +52 -0
  16. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +7 -0
  17. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/agent.py +117 -0
  18. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +135 -0
  19. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entities/objects.py +116 -0
  20. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/entity_manager.py +358 -0
  21. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +3 -0
  22. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/math.py +83 -0
  23. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/objmesh.py +294 -0
  24. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +97 -0
  25. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/opengl.py +21 -0
  26. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/params.py +128 -0
  27. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/random.py +105 -0
  28. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +7 -0
  29. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +77 -0
  30. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +260 -0
  31. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +101 -0
  32. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +293 -0
  33. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/room.py +330 -0
  34. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/texture_utils.py +64 -0
  35. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
  36. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
  37. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
  38. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
  39. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
  40. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
  41. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
  42. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
  43. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
  44. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
  45. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
  46. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
  47. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
  48. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
  49. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
  50. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
  51. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
  52. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
  53. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
  54. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
  55. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
  56. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
  57. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
  58. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
  59. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
  60. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
  61. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
  62. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
  63. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
  64. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
  65. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
  66. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
  67. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
  68. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
  69. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
  70. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
  71. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
  72. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
  73. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
  74. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
  75. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
  76. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
  77. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
  78. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
  79. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
  80. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
  81. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
  82. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
  83. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
  84. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
  85. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
  86. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
  87. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
  88. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
  89. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
  90. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +2 -0
  91. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
  92. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +2 -0
  93. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
  94. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +2 -0
  95. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
  96. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +2 -0
  97. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
  98. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +2 -0
  99. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
  100. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +2 -0
  101. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
  102. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +2 -0
  103. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
  104. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +2 -0
  105. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
  106. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +2 -0
  107. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
  108. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +2 -0
  109. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
  110. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +2 -0
  111. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
  112. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +2 -0
  113. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
  114. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +2 -0
  115. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
  116. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +2 -0
  117. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
  118. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +2 -0
  119. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
  120. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +2 -0
  121. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
  122. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +2 -0
  123. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
  124. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +2 -0
  125. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
  126. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +2 -0
  127. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
  128. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +2 -0
  129. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
  130. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +2 -0
  131. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
  132. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +2 -0
  133. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
  134. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +2 -0
  135. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
  136. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +2 -0
  137. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
  138. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +2 -0
  139. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
  140. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +2 -0
  141. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
  142. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +2 -0
  143. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
  144. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +2 -0
  145. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
  146. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +2 -0
  147. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
  148. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +2 -0
  149. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
  150. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +2 -0
  151. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
  152. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +2 -0
  153. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
  154. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +2 -0
  155. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
  156. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +2 -0
  157. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
  158. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +2 -0
  159. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
  160. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +2 -0
  161. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
  162. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +2 -0
  163. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
  164. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +2 -0
  165. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
  166. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +2 -0
  167. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
  168. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +2 -0
  169. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
  170. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +2 -0
  171. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
  172. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +2 -0
  173. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
  174. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +2 -0
  175. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
  176. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +2 -0
  177. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
  178. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +2 -0
  179. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
  180. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +2 -0
  181. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
  182. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +2 -0
  183. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
  184. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +2 -0
  185. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
  186. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +2 -0
  187. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
  188. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +2 -0
  189. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
  190. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +2 -0
  191. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
  192. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +2 -0
  193. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
  194. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +2 -0
  195. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
  196. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +2 -0
  197. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
  198. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +2 -0
  199. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
  200. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +2 -0
  201. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
  202. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +2 -0
  203. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
  204. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +2 -0
  205. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
  206. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +2 -0
  207. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
  208. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +2 -0
  209. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
  210. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +2 -0
  211. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
  212. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +2 -0
  213. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
  214. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +2 -0
  215. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
  216. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +2 -0
  217. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
  218. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +2 -0
  219. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
  220. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +2 -0
  221. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
  222. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +2 -0
  223. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
  224. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +2 -0
  225. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
  226. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +2 -0
  227. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
  228. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +2 -0
  229. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
  230. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +2 -0
  231. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
  232. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +2 -0
  233. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
  234. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +2 -0
  235. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
  236. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +2 -0
  237. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
  238. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +2 -0
  239. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
  240. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +2 -0
  241. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
  242. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +2 -0
  243. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
  244. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +2 -0
  245. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
  246. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +2 -0
  247. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
  248. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +2 -0
  249. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
  250. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +2 -0
  251. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
  252. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +2 -0
  253. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
  254. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
  255. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
  256. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
  257. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
  258. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
  259. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
  260. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
  261. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
  262. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
  263. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
  264. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
  265. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
  266. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
  267. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
  268. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
  269. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
  270. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
  271. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
  272. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/unified_env.py +1364 -0
  273. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/utils.py +37 -0
  274. miniworld_maze-1.0.0/src/miniworld_maze/core/miniworld_gymnasium/wrappers.py +2 -0
  275. miniworld_maze-1.0.0/src/miniworld_maze/core/observation_types.py +32 -0
  276. miniworld_maze-1.0.0/src/miniworld_maze/environments/__init__.py +16 -0
  277. miniworld_maze-1.0.0/src/miniworld_maze/environments/base_grid_rooms.py +204 -0
  278. miniworld_maze-1.0.0/src/miniworld_maze/environments/factory.py +155 -0
  279. miniworld_maze-1.0.0/src/miniworld_maze/environments/nine_rooms.py +74 -0
  280. miniworld_maze-1.0.0/src/miniworld_maze/environments/spiral_nine_rooms.py +70 -0
  281. miniworld_maze-1.0.0/src/miniworld_maze/environments/twenty_five_rooms.py +122 -0
  282. miniworld_maze-1.0.0/src/miniworld_maze/tools/__init__.py +5 -0
  283. miniworld_maze-1.0.0/src/miniworld_maze/tools/generate_observations.py +199 -0
  284. miniworld_maze-1.0.0/src/miniworld_maze/wrappers/__init__.py +5 -0
  285. miniworld_maze-1.0.0/src/miniworld_maze/wrappers/image_transforms.py +40 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 DrStrategy Research Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,108 @@
1
+ Metadata-Version: 2.3
2
+ Name: miniworld-maze
3
+ Version: 1.0.0
4
+ Summary: Multi-room maze environments from the DrStrategy paper for reinforcement learning research
5
+ Keywords: reinforcement-learning,environment,gymnasium,multi-room-maze,drstrategy,maze-navigation,partial-observability,3d-environments
6
+ Author: Tim Joseph
7
+ Author-email: Tim Joseph <tim@mctigger.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2025 DrStrategy Research Team
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ Classifier: Development Status :: 4 - Beta
30
+ Classifier: Intended Audience :: Science/Research
31
+ Classifier: Intended Audience :: Developers
32
+ Classifier: Operating System :: OS Independent
33
+ Classifier: Programming Language :: Python :: 3
34
+ Classifier: Programming Language :: Python :: 3.8
35
+ Classifier: Programming Language :: Python :: 3.9
36
+ Classifier: Programming Language :: Python :: 3.10
37
+ Classifier: Programming Language :: Python :: 3.11
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
40
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
41
+ Classifier: Environment :: Console
42
+ Classifier: Typing :: Typed
43
+ Requires-Dist: gymnasium>=1.0.0,<2.0.0
44
+ Requires-Dist: numpy>=1.20.0,<3.0.0
45
+ Requires-Dist: opencv-python>=4.5.0,<5.0.0
46
+ Requires-Dist: pillow>=8.0.0,<11.0.0
47
+ Requires-Dist: pyopengl>=3.1.0,<4.0.0
48
+ Requires-Dist: pyglet>=1.5.0,<2.0.0
49
+ Requires-Dist: black>=22.0,<25.0 ; extra == 'dev'
50
+ Requires-Dist: isort>=5.10,<6.0 ; extra == 'dev'
51
+ Requires-Dist: flake8>=4.0,<7.0 ; extra == 'dev'
52
+ Requires-Dist: build>=0.8.0,<2.0.0 ; extra == 'dev'
53
+ Requires-Dist: twine>=4.0.0,<6.0.0 ; extra == 'dev'
54
+ Requires-Dist: mujoco>=2.3.0,<4.0.0 ; extra == 'mujoco'
55
+ Requires-Python: >=3.8
56
+ Project-URL: Bug Tracker, https://github.com/mctigger/miniworld-maze/issues
57
+ Project-URL: Documentation, https://github.com/mctigger/miniworld-maze#readme
58
+ Project-URL: Homepage, https://github.com/mctigger/miniworld-maze
59
+ Project-URL: Repository, https://github.com/mctigger/miniworld-maze
60
+ Provides-Extra: dev
61
+ Provides-Extra: mujoco
62
+ Description-Content-Type: text/markdown
63
+
64
+ # MiniWorld DrStrategy - Multi-Room Maze Environment
65
+
66
+ A refactored implementation of Dr. Strategy's MiniWorld-based maze environments with updated dependencies and modern Python packaging. Based on the now-deprecated [MiniWorld](https://github.com/Farama-Foundation/Miniworld) project and the original [DrStrategy implementation](https://github.com/ahn-ml/drstrategy).
67
+
68
+ ## Environment Observations
69
+
70
+ ### Environment Views
71
+ Full environment layout and render-on-position views:
72
+
73
+ | Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
74
+ |---|---|---|
75
+ | ![Full View Clean](assets/images/full_view_clean.png) | ![Top Middle TD](assets/images/render_on_pos_1_top_middle_room_topdown.png) ![Center TD](assets/images/render_on_pos_3_environment_center_topdown.png) | ![Top Middle FP](assets/images/render_on_pos_1_top_middle_room_firstperson.png) ![Center FP](assets/images/render_on_pos_3_environment_center_firstperson.png) |
76
+
77
+ ## Installation
78
+
79
+ ```bash
80
+ pip install miniworld-maze
81
+ ```
82
+
83
+ ## Usage
84
+
85
+ ```python
86
+ from miniworld_drstrategy import create_nine_rooms_env
87
+
88
+ # Create environment
89
+ env = create_nine_rooms_env(variant="NineRooms", size=64)
90
+ obs, info = env.reset()
91
+
92
+ # Take actions
93
+ action = env.action_space.sample()
94
+ obs, reward, terminated, truncated, info = env.step(action)
95
+
96
+ env.close()
97
+ ```
98
+
99
+ ## Environment Variants
100
+
101
+ - **NineRooms**: 3Ɨ3 grid layout
102
+ - **SpiralNineRooms**: Spiral connection pattern
103
+ - **TwentyFiveRooms**: 5Ɨ5 grid layout
104
+
105
+
106
+ ## License
107
+
108
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,45 @@
1
+ # MiniWorld DrStrategy - Multi-Room Maze Environment
2
+
3
+ A refactored implementation of Dr. Strategy's MiniWorld-based maze environments with updated dependencies and modern Python packaging. Based on the now-deprecated [MiniWorld](https://github.com/Farama-Foundation/Miniworld) project and the original [DrStrategy implementation](https://github.com/ahn-ml/drstrategy).
4
+
5
+ ## Environment Observations
6
+
7
+ ### Environment Views
8
+ Full environment layout and render-on-position views:
9
+
10
+ | Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
11
+ |---|---|---|
12
+ | ![Full View Clean](assets/images/full_view_clean.png) | ![Top Middle TD](assets/images/render_on_pos_1_top_middle_room_topdown.png) ![Center TD](assets/images/render_on_pos_3_environment_center_topdown.png) | ![Top Middle FP](assets/images/render_on_pos_1_top_middle_room_firstperson.png) ![Center FP](assets/images/render_on_pos_3_environment_center_firstperson.png) |
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pip install miniworld-maze
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```python
23
+ from miniworld_drstrategy import create_nine_rooms_env
24
+
25
+ # Create environment
26
+ env = create_nine_rooms_env(variant="NineRooms", size=64)
27
+ obs, info = env.reset()
28
+
29
+ # Take actions
30
+ action = env.action_space.sample()
31
+ obs, reward, terminated, truncated, info = env.step(action)
32
+
33
+ env.close()
34
+ ```
35
+
36
+ ## Environment Variants
37
+
38
+ - **NineRooms**: 3Ɨ3 grid layout
39
+ - **SpiralNineRooms**: Spiral connection pattern
40
+ - **TwentyFiveRooms**: 5Ɨ5 grid layout
41
+
42
+
43
+ ## License
44
+
45
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,125 @@
1
+ # Examples
2
+
3
+ This directory contains example scripts demonstrating the usage and performance of the Nine Rooms environments.
4
+
5
+ ## Scripts
6
+
7
+ ### live_control_opencv.py ⭐ **RECOMMENDED**
8
+
9
+ Real-time dual-view OpenCV live control with ego view and top-down map side by side.
10
+
11
+ **Usage:**
12
+ ```bash
13
+ # Dual-view window with first-person ego view + top-down map
14
+ python examples/live_control_opencv.py --variant NineRooms --size 128
15
+
16
+ # Use top-down partial view as ego view + full map
17
+ python examples/live_control_opencv.py --variant NineRooms --size 128 --obs-level TOP_DOWN_PARTIAL
18
+
19
+ # Different environment variants
20
+ python examples/live_control_opencv.py --variant TwentyFiveRooms --size 128
21
+ ```
22
+
23
+ **Controls:**
24
+ - `W/A/S/D` - Move forward/turn left/move backward/turn right
25
+ - `SPACE` - Pick up object, `X` - Drop object, `E` - Toggle/activate
26
+ - `R` - Reset environment, `1/2/3` - Switch environment variants
27
+ - `ESC/Q` - Quit
28
+
29
+ **Requirements:**
30
+ - Display environment (not headless)
31
+ - Click OpenCV window to focus for keyboard input
32
+
33
+ **Features:**
34
+ - **Dual synchronized views**: Ego view (configurable) + top-down full map
35
+ - **Real-time agent tracking**: See your position and orientation on the map
36
+ - **Perfect synchronization**: Both environments step together automatically
37
+ - **No OpenGL conflicts**: Reliable operation using OpenCV
38
+ - **Multiple view combinations**: First-person + map, top-down + map, etc.
39
+
40
+ ### generate_observations.py
41
+
42
+ Generate comprehensive observation datasets for all environment variants.
43
+
44
+ **Usage:**
45
+ ```bash
46
+ # Generate observations for NineRooms (default 64x64)
47
+ python examples/generate_observations.py NineRooms
48
+
49
+ # Generate observations for SpiralNineRooms with custom output directory
50
+ python examples/generate_observations.py SpiralNineRooms --output-dir my_observations
51
+
52
+ # Generate high-resolution full environment views (512x512)
53
+ python examples/generate_observations.py TwentyFiveRooms --high-res-full
54
+ ```
55
+
56
+ **Generated observations:**
57
+ - Full environment views (with/without agent)
58
+ - Partial observations from different positions
59
+ - Standard Gymnasium observations after actions
60
+ - render_on_pos examples from strategic locations
61
+
62
+ ### benchmark_rendering.py
63
+
64
+ Benchmark rendering performance across different observation sizes and environment variants.
65
+
66
+ **Usage:**
67
+ ```bash
68
+ # Quick benchmark of NineRooms with common sizes
69
+ python examples/benchmark_rendering.py --quick --variant NineRooms
70
+
71
+ # Comprehensive benchmark of all variants and sizes
72
+ python examples/benchmark_rendering.py --all-variants --sizes 32 64 128 256 --steps 100
73
+
74
+ # Custom benchmark with specific parameters
75
+ python examples/benchmark_rendering.py --variant SpiralNineRooms --sizes 64 128 256 --steps 50
76
+ ```
77
+
78
+ **Features:**
79
+ - FPS measurement across different observation sizes
80
+ - Performance comparison between environment variants
81
+ - Memory usage analysis
82
+ - Detailed timing statistics (min/max/avg/std)
83
+ - Scaling analysis (how performance scales with resolution)
84
+
85
+ ### observation_level_demo.py
86
+
87
+ Demonstrates different observation levels and their visual differences.
88
+
89
+ **Usage:**
90
+ ```bash
91
+ python examples/observation_level_demo.py
92
+ ```
93
+
94
+ **Features:**
95
+ - Shows first-person, top-down partial, and top-down full views
96
+ - Saves comparison images for each observation level
97
+ - Demonstrates the impact of different observation settings
98
+
99
+ ## Key Benefits Demonstrated
100
+
101
+ ### Interactive Control
102
+ - **Dual-View Navigation**: Ego view + top-down map displayed simultaneously
103
+ - **Real-time Agent Tracking**: Always see your position and orientation on the map
104
+ - **Synchronized Environments**: Both views update together for perfect consistency
105
+ - **No OpenGL Conflicts**: Reliable operation using OpenCV for display
106
+ - **Multiple View Combinations**: First-person + map, top-down + map, etc.
107
+
108
+ ### Direct Rendering Performance
109
+ - **No Resize Overhead**: Environments render directly at requested size
110
+ - **Excellent Scaling**: 256x256 images only ~1.2x slower than 32x32 despite 64x more pixels
111
+ - **High Frame Rates**: 60-80 FPS for standard sizes (64x64, 128x128)
112
+ - **Flexible Resolutions**: Any custom size supported without performance penalty
113
+
114
+ ### Environment Variants
115
+ - **NineRooms**: ~73 FPS average (fastest, simplest 3x3 grid)
116
+ - **SpiralNineRooms**: ~62 FPS average (moderate complexity)
117
+ - **TwentyFiveRooms**: ~26 FPS average (most complex, 5x5 grid with 25 rooms)
118
+
119
+ ## Usage Tips
120
+
121
+ 1. **For Interactive Exploration**: Use `live_control_opencv.py` for real-time navigation
122
+ 2. **For Research**: Use higher resolutions (256x256+) for detailed analysis
123
+ 3. **For Training**: Use standard sizes (64x64, 128x128) for optimal speed
124
+ 4. **For Visualization**: Use `generate_observations.py` to create comprehensive datasets
125
+ 5. **For Optimization**: Use `benchmark_rendering.py` to find optimal settings
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Benchmark rendering performance (FPS) for various observation sizes.
4
+
5
+ This script tests the direct rendering performance of the Nine Rooms environments
6
+ across different observation sizes to demonstrate the efficiency of the
7
+ direct rendering approach vs the old resize-based approach.
8
+ """
9
+
10
+ import time
11
+ import argparse
12
+ import numpy as np
13
+ from miniworld_drstrategy.environments.factory import create_nine_rooms_env
14
+ from miniworld_drstrategy.core.constants import (
15
+ DEFAULT_BENCHMARK_STEPS, DEFAULT_WARMUP_STEPS, RGB_CHANNELS, FLOAT32_BYTES, MB_TO_BYTES
16
+ )
17
+
18
+
19
+ def benchmark_rendering_performance(variant="NineRooms", sizes=None, num_steps=DEFAULT_BENCHMARK_STEPS, num_warmup=DEFAULT_WARMUP_STEPS):
20
+ """
21
+ Benchmark rendering performance across different observation sizes.
22
+
23
+ Args:
24
+ variant: Environment variant to test
25
+ sizes: List of observation sizes to test
26
+ num_steps: Number of steps to run for timing
27
+ num_warmup: Number of warmup steps (not timed)
28
+
29
+ Returns:
30
+ Dictionary with benchmark results
31
+ """
32
+ if sizes is None:
33
+ sizes = [32, 48, 64, 96, 128, 192, 256]
34
+
35
+ print(f"šŸš€ Benchmarking {variant} rendering performance...")
36
+ print(f"šŸ“Š Testing sizes: {sizes}")
37
+ print(f"ā±ļø Steps per test: {num_steps} (+ {num_warmup} warmup)")
38
+ print("=" * 60)
39
+
40
+ results = {}
41
+
42
+ for size in sizes:
43
+ print(f"\nšŸ” Testing {size}x{size} observations...")
44
+
45
+ # Create environment with specific observation size
46
+ env = create_nine_rooms_env(variant, size=size)
47
+
48
+ # Warmup phase
49
+ print(f" šŸ”„ Warming up ({num_warmup} steps)...")
50
+ obs, info = env.reset(seed=42)
51
+ for _ in range(num_warmup):
52
+ action = env.action_space.sample()
53
+ obs, reward, terminated, truncated, info = env.step(action)
54
+ if terminated or truncated:
55
+ obs, info = env.reset()
56
+
57
+ # Benchmark phase
58
+ print(f" ā±ļø Benchmarking ({num_steps} steps)...")
59
+ start_time = time.time()
60
+
61
+ step_times = []
62
+ for i in range(num_steps):
63
+ step_start = time.time()
64
+ action = env.action_space.sample()
65
+ obs, reward, terminated, truncated, info = env.step(action)
66
+ if terminated or truncated:
67
+ obs, info = env.reset()
68
+ step_end = time.time()
69
+ step_times.append(step_end - step_start)
70
+
71
+ end_time = time.time()
72
+ total_time = end_time - start_time
73
+
74
+ env.close()
75
+
76
+ # Calculate statistics
77
+ fps = num_steps / total_time
78
+ avg_step_time = np.mean(step_times)
79
+ min_step_time = np.min(step_times)
80
+ max_step_time = np.max(step_times)
81
+ std_step_time = np.std(step_times)
82
+
83
+ # Memory per observation
84
+ pixels_per_obs = size * size * RGB_CHANNELS
85
+ memory_mb = (pixels_per_obs * FLOAT32_BYTES) / MB_TO_BYTES
86
+
87
+ results[size] = {
88
+ 'fps': fps,
89
+ 'avg_step_time': avg_step_time,
90
+ 'min_step_time': min_step_time,
91
+ 'max_step_time': max_step_time,
92
+ 'std_step_time': std_step_time,
93
+ 'total_time': total_time,
94
+ 'memory_mb': memory_mb,
95
+ 'pixels': size * size
96
+ }
97
+
98
+ print(f" āœ… {fps:.2f} FPS (avg: {avg_step_time*1000:.2f}ms/step)")
99
+
100
+ return results
101
+
102
+
103
+ def print_benchmark_results(results, variant):
104
+ """Print detailed benchmark results in a formatted table."""
105
+
106
+ print(f"\n{'='*80}")
107
+ print(f"šŸ“Š RENDERING PERFORMANCE BENCHMARK RESULTS - {variant}")
108
+ print(f"{'='*80}")
109
+
110
+ # Table header
111
+ print(f"{'Size':>8} {'Pixels':>10} {'FPS':>8} {'Avg ms':>8} {'Min ms':>8} {'Max ms':>8} {'Std ms':>8} {'Memory':>8}")
112
+ print("-" * 80)
113
+
114
+ # Table rows
115
+ for size, data in sorted(results.items()):
116
+ print(f"{size:>8} {data['pixels']:>10,} {data['fps']:>8.1f} {data['avg_step_time']*1000:>8.1f} "
117
+ f"{data['min_step_time']*1000:>8.1f} {data['max_step_time']*1000:>8.1f} "
118
+ f"{data['std_step_time']*1000:>8.1f} {data['memory_mb']:>7.1f}MB")
119
+
120
+ print("-" * 80)
121
+
122
+ # Performance insights
123
+ print(f"\nšŸŽÆ PERFORMANCE INSIGHTS:")
124
+
125
+ # Find best and worst performers
126
+ best_fps = max(results.values(), key=lambda x: x['fps'])
127
+ worst_fps = min(results.values(), key=lambda x: x['fps'])
128
+ best_size = next(size for size, data in results.items() if data['fps'] == best_fps['fps'])
129
+ worst_size = next(size for size, data in results.items() if data['fps'] == worst_fps['fps'])
130
+
131
+ print(f" šŸ† Highest FPS: {best_size}x{best_size} at {best_fps['fps']:.1f} FPS")
132
+ print(f" 🐌 Lowest FPS: {worst_size}x{worst_size} at {worst_fps['fps']:.1f} FPS")
133
+
134
+ # Calculate performance scaling
135
+ size_32 = results.get(32)
136
+ size_256 = results.get(256)
137
+ if size_32 and size_256:
138
+ pixel_ratio = (256 * 256) / (32 * 32)
139
+ fps_ratio = size_32['fps'] / size_256['fps']
140
+ print(f" šŸ“ˆ Scaling: 256x256 has {pixel_ratio:.1f}x more pixels but only {fps_ratio:.1f}x slower")
141
+
142
+ # Memory usage
143
+ total_memory = sum(data['memory_mb'] for data in results.values())
144
+ print(f" šŸ’¾ Total memory tested: {total_memory:.1f}MB across all sizes")
145
+
146
+
147
+ def benchmark_environment_variants(sizes=None, num_steps=50):
148
+ """Benchmark all environment variants."""
149
+
150
+ if sizes is None:
151
+ sizes = [64, 128, 256]
152
+
153
+ variants = ["NineRooms", "SpiralNineRooms", "TwentyFiveRooms"]
154
+ all_results = {}
155
+
156
+ print(f"🌟 COMPREHENSIVE ENVIRONMENT BENCHMARK")
157
+ print(f"Testing variants: {variants}")
158
+ print(f"Testing sizes: {sizes}")
159
+ print("=" * 80)
160
+
161
+ for variant in variants:
162
+ results = benchmark_rendering_performance(
163
+ variant=variant,
164
+ sizes=sizes,
165
+ num_steps=num_steps,
166
+ num_warmup=5
167
+ )
168
+ all_results[variant] = results
169
+
170
+ # Quick summary
171
+ avg_fps = np.mean([data['fps'] for data in results.values()])
172
+ print(f"\nšŸ“ˆ {variant} average FPS across all sizes: {avg_fps:.1f}")
173
+
174
+ # Comparative analysis
175
+ print(f"\n{'='*80}")
176
+ print("šŸ”„ VARIANT COMPARISON")
177
+ print("=" * 80)
178
+
179
+ for size in sizes:
180
+ print(f"\nSize {size}x{size}:")
181
+ for variant in variants:
182
+ if size in all_results[variant]:
183
+ fps = all_results[variant][size]['fps']
184
+ print(f" {variant:20}: {fps:6.1f} FPS")
185
+
186
+ return all_results
187
+
188
+
189
+ def main():
190
+ parser = argparse.ArgumentParser(description='Benchmark Nine Rooms rendering performance')
191
+ parser.add_argument('--variant', default='NineRooms',
192
+ choices=['NineRooms', 'SpiralNineRooms', 'TwentyFiveRooms'],
193
+ help='Environment variant to benchmark')
194
+ parser.add_argument('--sizes', nargs='+', type=int,
195
+ default=[32, 48, 64, 96, 128, 192, 256],
196
+ help='Observation sizes to test')
197
+ parser.add_argument('--steps', type=int, default=1000,
198
+ help='Number of steps per benchmark')
199
+ parser.add_argument('--all-variants', action='store_true',
200
+ help='Benchmark all environment variants')
201
+ parser.add_argument('--quick', action='store_true',
202
+ help='Quick benchmark with fewer steps and sizes')
203
+
204
+ args = parser.parse_args()
205
+
206
+ if args.quick:
207
+ args.steps = 30
208
+ args.sizes = [64, 128, 256]
209
+
210
+ print("šŸŽ® Nine Rooms Rendering Performance Benchmark")
211
+ print("=" * 80)
212
+
213
+ if args.all_variants:
214
+ all_results = benchmark_environment_variants(sizes=args.sizes, num_steps=args.steps)
215
+
216
+ # Print detailed results for each variant
217
+ for variant, results in all_results.items():
218
+ print_benchmark_results(results, variant)
219
+
220
+ else:
221
+ results = benchmark_rendering_performance(
222
+ variant=args.variant,
223
+ sizes=args.sizes,
224
+ num_steps=args.steps
225
+ )
226
+ print_benchmark_results(results, args.variant)
227
+
228
+ print(f"\nšŸŽ‰ Benchmark complete!")
229
+ print(f"✨ Direct rendering approach shows excellent performance scaling!")
230
+
231
+
232
+ if __name__ == "__main__":
233
+ main()