miniworld-maze 1.0.0__py3-none-any.whl

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 (280) hide show
  1. miniworld_maze/__init__.py +37 -0
  2. miniworld_maze/core/__init__.py +8 -0
  3. miniworld_maze/core/constants.py +130 -0
  4. miniworld_maze/core/miniworld_gymnasium/README.md +1 -0
  5. miniworld_maze/core/miniworld_gymnasium/__init__.py +4 -0
  6. miniworld_maze/core/miniworld_gymnasium/base_env.py +52 -0
  7. miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +7 -0
  8. miniworld_maze/core/miniworld_gymnasium/entities/agent.py +117 -0
  9. miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +135 -0
  10. miniworld_maze/core/miniworld_gymnasium/entities/objects.py +116 -0
  11. miniworld_maze/core/miniworld_gymnasium/entity_manager.py +358 -0
  12. miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +3 -0
  13. miniworld_maze/core/miniworld_gymnasium/math.py +83 -0
  14. miniworld_maze/core/miniworld_gymnasium/objmesh.py +294 -0
  15. miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +97 -0
  16. miniworld_maze/core/miniworld_gymnasium/opengl.py +21 -0
  17. miniworld_maze/core/miniworld_gymnasium/params.py +128 -0
  18. miniworld_maze/core/miniworld_gymnasium/random.py +105 -0
  19. miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +7 -0
  20. miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +77 -0
  21. miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +260 -0
  22. miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +101 -0
  23. miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +293 -0
  24. miniworld_maze/core/miniworld_gymnasium/room.py +330 -0
  25. miniworld_maze/core/miniworld_gymnasium/texture_utils.py +64 -0
  26. miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
  27. miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
  28. miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
  29. miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
  30. miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
  31. miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
  32. miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
  33. miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
  34. miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
  35. miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
  36. miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
  37. miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
  38. miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
  39. miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
  40. miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
  41. miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
  42. miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
  43. miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
  44. miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
  45. miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
  46. miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
  47. miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
  48. miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
  49. miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
  50. miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
  51. miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
  52. miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
  53. miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
  54. miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
  55. miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
  56. miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
  57. miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
  58. miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
  59. miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
  60. miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
  61. miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
  62. miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
  63. miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
  64. miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
  65. miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
  66. miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
  67. miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
  68. miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
  69. miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
  70. miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
  71. miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
  72. miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
  73. miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
  74. miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
  75. miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
  76. miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
  77. miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
  78. miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
  79. miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
  80. miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
  81. miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +2 -0
  82. miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
  83. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +2 -0
  84. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
  85. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +2 -0
  86. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
  87. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +2 -0
  88. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
  89. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +2 -0
  90. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
  91. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +2 -0
  92. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
  93. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +2 -0
  94. miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
  95. miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +2 -0
  96. miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
  97. miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +2 -0
  98. miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
  99. miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +2 -0
  100. miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
  101. miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +2 -0
  102. miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
  103. miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +2 -0
  104. miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
  105. miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +2 -0
  106. miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
  107. miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +2 -0
  108. miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
  109. miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +2 -0
  110. miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
  111. miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +2 -0
  112. miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
  113. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +2 -0
  114. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
  115. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +2 -0
  116. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
  117. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +2 -0
  118. miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
  119. miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +2 -0
  120. miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
  121. miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +2 -0
  122. miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
  123. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +2 -0
  124. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
  125. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +2 -0
  126. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
  127. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +2 -0
  128. miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
  129. miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +2 -0
  130. miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
  131. miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +2 -0
  132. miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
  133. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +2 -0
  134. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
  135. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +2 -0
  136. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
  137. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +2 -0
  138. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
  139. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +2 -0
  140. miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
  141. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +2 -0
  142. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
  143. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +2 -0
  144. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
  145. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +2 -0
  146. miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
  147. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +2 -0
  148. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
  149. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +2 -0
  150. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
  151. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +2 -0
  152. miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
  153. miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +2 -0
  154. miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
  155. miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +2 -0
  156. miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
  157. miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +2 -0
  158. miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
  159. miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +2 -0
  160. miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
  161. miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +2 -0
  162. miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
  163. miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +2 -0
  164. miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
  165. miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +2 -0
  166. miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
  167. miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +2 -0
  168. miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
  169. miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +2 -0
  170. miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
  171. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +2 -0
  172. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
  173. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +2 -0
  174. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
  175. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +2 -0
  176. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
  177. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +2 -0
  178. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
  179. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +2 -0
  180. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
  181. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +2 -0
  182. miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
  183. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +2 -0
  184. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
  185. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +2 -0
  186. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
  187. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +2 -0
  188. miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
  189. miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +2 -0
  190. miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
  191. miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +2 -0
  192. miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
  193. miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +2 -0
  194. miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
  195. miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +2 -0
  196. miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
  197. miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +2 -0
  198. miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
  199. miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +2 -0
  200. miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
  201. miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +2 -0
  202. miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
  203. miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +2 -0
  204. miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
  205. miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +2 -0
  206. miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
  207. miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +2 -0
  208. miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
  209. miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +2 -0
  210. miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
  211. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +2 -0
  212. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
  213. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +2 -0
  214. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
  215. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +2 -0
  216. miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
  217. miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +2 -0
  218. miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
  219. miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +2 -0
  220. miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
  221. miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +2 -0
  222. miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
  223. miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +2 -0
  224. miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
  225. miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +2 -0
  226. miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
  227. miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +2 -0
  228. miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
  229. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +2 -0
  230. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
  231. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +2 -0
  232. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
  233. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +2 -0
  234. miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
  235. miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +2 -0
  236. miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
  237. miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +2 -0
  238. miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
  239. miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +2 -0
  240. miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
  241. miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +2 -0
  242. miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
  243. miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +2 -0
  244. miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
  245. miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
  246. miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
  247. miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
  248. miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
  249. miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
  250. miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
  251. miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
  252. miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
  253. miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
  254. miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
  255. miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
  256. miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
  257. miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
  258. miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
  259. miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
  260. miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
  261. miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
  262. miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
  263. miniworld_maze/core/miniworld_gymnasium/unified_env.py +1364 -0
  264. miniworld_maze/core/miniworld_gymnasium/utils.py +37 -0
  265. miniworld_maze/core/miniworld_gymnasium/wrappers.py +2 -0
  266. miniworld_maze/core/observation_types.py +32 -0
  267. miniworld_maze/environments/__init__.py +16 -0
  268. miniworld_maze/environments/base_grid_rooms.py +204 -0
  269. miniworld_maze/environments/factory.py +155 -0
  270. miniworld_maze/environments/nine_rooms.py +74 -0
  271. miniworld_maze/environments/spiral_nine_rooms.py +70 -0
  272. miniworld_maze/environments/twenty_five_rooms.py +122 -0
  273. miniworld_maze/tools/__init__.py +5 -0
  274. miniworld_maze/tools/generate_observations.py +199 -0
  275. miniworld_maze/wrappers/__init__.py +5 -0
  276. miniworld_maze/wrappers/image_transforms.py +40 -0
  277. miniworld_maze-1.0.0.dist-info/METADATA +108 -0
  278. miniworld_maze-1.0.0.dist-info/RECORD +280 -0
  279. miniworld_maze-1.0.0.dist-info/WHEEL +4 -0
  280. miniworld_maze-1.0.0.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,77 @@
1
+ """Drawing utility functions for MiniWorld environments."""
2
+
3
+ from pyglet.gl import *
4
+
5
+
6
+ def drawAxes(axis_length=0.1):
7
+ """
8
+ Draw coordinate system axes in red/green/blue colors.
9
+
10
+ Renders X, Y, Z axes as colored line segments for debugging and visualization.
11
+ X-axis is red, Y-axis is green, Z-axis is blue.
12
+
13
+ Args:
14
+ axis_length (float): Length of each axis line, defaults to 0.1 units
15
+ """
16
+
17
+ glBegin(GL_LINES)
18
+
19
+ glColor3f(1, 0, 0)
20
+ glVertex3f(0, 0, 0)
21
+ glVertex3f(axis_length, 0, 0)
22
+
23
+ glColor3f(0, 1, 0)
24
+ glVertex3f(0, 0, 0)
25
+ glVertex3f(0, axis_length, 0)
26
+
27
+ glColor3f(0, 0, 1)
28
+ glVertex3f(0, 0, 0)
29
+ glVertex3f(0, 0, axis_length)
30
+
31
+ glEnd()
32
+
33
+
34
+ def drawBox(x_min, x_max, y_min, y_max, z_min, z_max):
35
+ """
36
+ Draw a 3D box
37
+ """
38
+
39
+ glBegin(GL_QUADS)
40
+
41
+ glNormal3f(0, 0, 1)
42
+ glVertex3f(x_max, y_max, z_max)
43
+ glVertex3f(x_min, y_max, z_max)
44
+ glVertex3f(x_min, y_min, z_max)
45
+ glVertex3f(x_max, y_min, z_max)
46
+
47
+ glNormal3f(0, 0, -1)
48
+ glVertex3f(x_min, y_max, z_min)
49
+ glVertex3f(x_max, y_max, z_min)
50
+ glVertex3f(x_max, y_min, z_min)
51
+ glVertex3f(x_min, y_min, z_min)
52
+
53
+ glNormal3f(-1, 0, 0)
54
+ glVertex3f(x_min, y_max, z_max)
55
+ glVertex3f(x_min, y_max, z_min)
56
+ glVertex3f(x_min, y_min, z_min)
57
+ glVertex3f(x_min, y_min, z_max)
58
+
59
+ glNormal3f(1, 0, 0)
60
+ glVertex3f(x_max, y_max, z_min)
61
+ glVertex3f(x_max, y_max, z_max)
62
+ glVertex3f(x_max, y_min, z_max)
63
+ glVertex3f(x_max, y_min, z_min)
64
+
65
+ glNormal3f(0, 1, 0)
66
+ glVertex3f(x_max, y_max, z_max)
67
+ glVertex3f(x_max, y_max, z_min)
68
+ glVertex3f(x_min, y_max, z_min)
69
+ glVertex3f(x_min, y_max, z_max)
70
+
71
+ glNormal3f(0, -1, 0)
72
+ glVertex3f(x_max, y_min, z_min)
73
+ glVertex3f(x_max, y_min, z_max)
74
+ glVertex3f(x_min, y_min, z_max)
75
+ glVertex3f(x_min, y_min, z_min)
76
+
77
+ glEnd()
@@ -0,0 +1,260 @@
1
+ """Frame buffer management for MiniWorld environments."""
2
+
3
+ from ctypes import POINTER, byref
4
+
5
+ import numpy as np
6
+ from pyglet.gl import *
7
+
8
+ # Mapping of frame buffer error enums to strings
9
+ FB_ERROR_ENUMS = {
10
+ GL_FRAMEBUFFER_UNDEFINED: "GL_FRAMEBUFFER_UNDEFINED",
11
+ GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
12
+ GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
13
+ GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER",
14
+ GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER",
15
+ GL_FRAMEBUFFER_UNSUPPORTED: "GL_FRAMEBUFFER_UNSUPPORTED",
16
+ GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
17
+ GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
18
+ GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS",
19
+ }
20
+
21
+
22
+ class FrameBuffer:
23
+ """
24
+ Manage frame buffers for rendering
25
+ """
26
+
27
+ def __init__(self, width, height, num_samples=1):
28
+ """Create the frame buffer objects"""
29
+
30
+ assert num_samples > 0
31
+ assert num_samples <= 16
32
+
33
+ self.width = width
34
+ self.height = height
35
+
36
+ # Create a frame buffer (rendering target)
37
+ self.multi_fbo = GLuint(0)
38
+ glGenFramebuffers(1, byref(self.multi_fbo))
39
+ glBindFramebuffer(GL_FRAMEBUFFER, self.multi_fbo)
40
+
41
+ # The try block here is because some OpenGL drivers
42
+ # (Intel GPU drivers on MacBooks in particular) do not
43
+ # support multisampling on frame buffer objects
44
+ try:
45
+ # Ensure that the correct extension is supported
46
+ assert gl_info.have_extension("GL_EXT_framebuffer_multisample")
47
+
48
+ # Get the maximum number of samples supported
49
+ MAX_SAMPLES_EXT = 0x8D57
50
+ max_samples = (GLint)()
51
+ glGetIntegerv(MAX_SAMPLES_EXT, max_samples)
52
+ max_samples = max_samples.value
53
+
54
+ if num_samples > max_samples:
55
+ print("Falling back to num_samples={}".format(max_samples))
56
+ num_samples = max_samples
57
+
58
+ # Create a multisampled texture to render into
59
+ fbTex = GLuint(0)
60
+ glGenTextures(1, byref(fbTex))
61
+ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, fbTex)
62
+ glTexImage2DMultisample(
63
+ GL_TEXTURE_2D_MULTISAMPLE, num_samples, GL_RGBA32F, width, height, True
64
+ )
65
+ glFramebufferTexture2D(
66
+ GL_FRAMEBUFFER,
67
+ GL_COLOR_ATTACHMENT0,
68
+ GL_TEXTURE_2D_MULTISAMPLE,
69
+ fbTex,
70
+ 0,
71
+ )
72
+
73
+ # Attach a multisampled depth buffer to the FBO
74
+ depth_rb = GLuint(0)
75
+ glGenRenderbuffers(1, byref(depth_rb))
76
+ glBindRenderbuffer(GL_RENDERBUFFER, depth_rb)
77
+ glRenderbufferStorageMultisample(
78
+ GL_RENDERBUFFER, num_samples, GL_DEPTH_COMPONENT16, width, height
79
+ )
80
+ glFramebufferRenderbuffer(
81
+ GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb
82
+ )
83
+
84
+ # Check that the frame buffer creation succeeded
85
+ res = glCheckFramebufferStatus(GL_FRAMEBUFFER)
86
+ assert res == GL_FRAMEBUFFER_COMPLETE, FB_ERROR_ENUMS.get(res, res)
87
+
88
+ except:
89
+ print("Falling back to non-multisampled frame buffer")
90
+
91
+ # Create a plain texture texture to render into
92
+ fbTex = GLuint(0)
93
+ glGenTextures(1, byref(fbTex))
94
+ glBindTexture(GL_TEXTURE_2D, fbTex)
95
+ glTexImage2D(
96
+ GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_FLOAT, None
97
+ )
98
+ glFramebufferTexture2D(
99
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbTex, 0
100
+ )
101
+
102
+ # Attach depth buffer to FBO
103
+ depth_rb = GLuint(0)
104
+ glGenRenderbuffers(1, byref(depth_rb))
105
+ glBindRenderbuffer(GL_RENDERBUFFER, depth_rb)
106
+ glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height)
107
+ glFramebufferRenderbuffer(
108
+ GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb
109
+ )
110
+
111
+ # Sanity check
112
+ res = glCheckFramebufferStatus(GL_FRAMEBUFFER)
113
+ assert res == GL_FRAMEBUFFER_COMPLETE, FB_ERROR_ENUMS.get(res, res)
114
+
115
+ # Create the frame buffer used to resolve the final render
116
+ self.final_fbo = GLuint(0)
117
+ glGenFramebuffers(1, byref(self.final_fbo))
118
+ glBindFramebuffer(GL_FRAMEBUFFER, self.final_fbo)
119
+
120
+ # Create the texture used to resolve the final render
121
+ fbTex = GLuint(0)
122
+ glGenTextures(1, byref(fbTex))
123
+ glBindTexture(GL_TEXTURE_2D, fbTex)
124
+ glTexImage2D(
125
+ GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_FLOAT, None
126
+ )
127
+ glFramebufferTexture2D(
128
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbTex, 0
129
+ )
130
+
131
+ # Create a depth buffer for the final frame buffer
132
+ depth_rb = GLuint(0)
133
+ glGenRenderbuffers(1, byref(depth_rb))
134
+ glBindRenderbuffer(GL_RENDERBUFFER, depth_rb)
135
+ glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height)
136
+ glFramebufferRenderbuffer(
137
+ GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb
138
+ )
139
+
140
+ # Sanity check
141
+ res = glCheckFramebufferStatus(GL_FRAMEBUFFER)
142
+ assert res == GL_FRAMEBUFFER_COMPLETE, FB_ERROR_ENUMS.get(res, res)
143
+
144
+ # Enable depth testing
145
+ glEnable(GL_DEPTH_TEST)
146
+
147
+ # Unbind the frame buffer
148
+ glBindFramebuffer(GL_FRAMEBUFFER, 0)
149
+
150
+ # Array to render the image into (for observation rendering)
151
+ # The array is stored in column-major order
152
+ self.img_array = np.zeros(shape=(height, width, 3), dtype=np.uint8)
153
+
154
+ def bind(self):
155
+ """
156
+ Bind the frame buffer before rendering into it
157
+ """
158
+
159
+ # Bind the multisampled frame buffer
160
+ glEnable(GL_MULTISAMPLE)
161
+ glBindFramebuffer(GL_FRAMEBUFFER, self.multi_fbo)
162
+ glViewport(0, 0, self.width, self.height)
163
+
164
+ def resolve(self):
165
+ """
166
+ Produce a numpy image array from the rendered image
167
+ """
168
+
169
+ # Resolve the multisampled frame buffer into the final frame buffer
170
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, self.multi_fbo)
171
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, self.final_fbo)
172
+ glBlitFramebuffer(
173
+ 0,
174
+ 0,
175
+ self.width,
176
+ self.height,
177
+ 0,
178
+ 0,
179
+ self.width,
180
+ self.height,
181
+ GL_COLOR_BUFFER_BIT,
182
+ GL_LINEAR,
183
+ )
184
+
185
+ # Resolve the depth component as well
186
+ glBlitFramebuffer(
187
+ 0,
188
+ 0,
189
+ self.width,
190
+ self.height,
191
+ 0,
192
+ 0,
193
+ self.width,
194
+ self.height,
195
+ GL_DEPTH_BUFFER_BIT,
196
+ GL_NEAREST,
197
+ )
198
+
199
+ # Copy the frame buffer contents into a numpy array
200
+ # Note: glReadPixels reads starting from the lower left corner
201
+ glBindFramebuffer(GL_FRAMEBUFFER, self.final_fbo)
202
+ glPixelStorei(GL_PACK_ALIGNMENT, 1)
203
+ glReadPixels(
204
+ 0,
205
+ 0,
206
+ self.width,
207
+ self.height,
208
+ GL_RGB,
209
+ GL_UNSIGNED_BYTE,
210
+ self.img_array.ctypes.data_as(POINTER(GLubyte)),
211
+ )
212
+
213
+ # Unbind the frame buffer
214
+ glBindFramebuffer(GL_FRAMEBUFFER, 0)
215
+
216
+ # Flip the image because OpenGL maps (0,0) to the lower-left corner
217
+ # Note: this is necessary for gym.wrappers.Monitor to record videos
218
+ # properly, otherwise they are vertically inverted.
219
+ # Note: ascontiguousarray operates in constant time because it
220
+ # does not copy the data
221
+ img = np.ascontiguousarray(np.flip(self.img_array, axis=0))
222
+
223
+ return img
224
+
225
+ def get_depth_map(self, z_near=0.04, z_far=1.0):
226
+ """
227
+ Read the depth buffer into a depth map
228
+ The values returned are real-world z-distance from the observer
229
+ """
230
+
231
+ depth_map = np.zeros(shape=(self.height, self.width, 1), dtype=np.uint16)
232
+
233
+ glBindFramebuffer(GL_FRAMEBUFFER, self.final_fbo)
234
+ glPixelStorei(GL_PACK_ALIGNMENT, 1)
235
+ glReadPixels(
236
+ 0,
237
+ 0,
238
+ self.width,
239
+ self.height,
240
+ GL_DEPTH_COMPONENT,
241
+ GL_UNSIGNED_SHORT,
242
+ depth_map.ctypes.data_as(POINTER(GLushort)),
243
+ )
244
+
245
+ # Unbind the frame buffer
246
+ glBindFramebuffer(GL_FRAMEBUFFER, 0)
247
+
248
+ # Flip the depth map vertically to map OpenAI gym conventions
249
+ depth_map = np.flip(depth_map, axis=0)
250
+
251
+ # Transform into floating-point values
252
+ depth_map = depth_map.astype(np.float32) / 65535
253
+
254
+ # Convert to real-world z-distances
255
+ clip_z = (depth_map - 0.5) * 2.0
256
+ world_z = -2 * z_far * z_near / (clip_z * (z_far - z_near) - (z_far + z_near))
257
+
258
+ depth_map = np.ascontiguousarray(world_z)
259
+
260
+ return depth_map
@@ -0,0 +1,101 @@
1
+ """Texture management for MiniWorld environments."""
2
+
3
+ import os
4
+
5
+ import pyglet
6
+ from pyglet.gl import *
7
+
8
+ from ..utils import get_file_path
9
+
10
+
11
+ class Texture:
12
+ """
13
+ Manage the loading and caching of textures, as well as texture randomization
14
+ """
15
+
16
+ # List of textures available for a given path
17
+ tex_paths = {}
18
+
19
+ # Cache of textures
20
+ tex_cache = {}
21
+
22
+ @classmethod
23
+ def get(self, tex_name, rng=None):
24
+ """
25
+ Load a texture by name (or used a cached version)
26
+ Also performs domain randomization if multiple versions are available.
27
+ """
28
+
29
+ paths = self.tex_paths.get(tex_name, [])
30
+
31
+ # Get an inventory of the existing texture files
32
+ if len(paths) == 0:
33
+ for i in range(1, 10):
34
+ path = get_file_path("textures", "%s_%d" % (tex_name, i), "png")
35
+
36
+ if not os.path.exists(path):
37
+ break
38
+ paths.append(path)
39
+
40
+ assert len(paths) > 0, 'failed to load textures for name "%s"' % tex_name
41
+
42
+ # If domain-randomization is to be used
43
+ if rng:
44
+ path_idx = rng.int(0, len(paths))
45
+ path = paths[path_idx]
46
+ else:
47
+ path = paths[0]
48
+
49
+ if path not in self.tex_cache:
50
+ self.tex_cache[path] = Texture(Texture.load(path), tex_name)
51
+
52
+ return self.tex_cache[path]
53
+
54
+ @classmethod
55
+ def load(cls, tex_path):
56
+ """
57
+ Load a texture based on its path. No domain randomization.
58
+ In mose cases, this method should not be used directly.
59
+ """
60
+
61
+ # print('Loading texture "%s"' % tex_path)
62
+
63
+ img = pyglet.image.load(tex_path)
64
+ tex = img.get_texture()
65
+ glEnable(tex.target)
66
+ glBindTexture(tex.target, tex.id)
67
+
68
+ glTexImage2D(
69
+ GL_TEXTURE_2D,
70
+ 0,
71
+ GL_RGB,
72
+ img.width,
73
+ img.height,
74
+ 0,
75
+ GL_RGBA,
76
+ GL_UNSIGNED_BYTE,
77
+ img.get_image_data().get_data("RGBA", img.width * 4),
78
+ )
79
+
80
+ # Generate mipmaps (multiple levels of detail)
81
+ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST)
82
+ glGenerateMipmap(GL_TEXTURE_2D)
83
+
84
+ # Trilinear texture filtering
85
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
86
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
87
+
88
+ # Unbind the texture
89
+ glBindTexture(GL_TEXTURE_2D, 0)
90
+
91
+ return tex
92
+
93
+ def __init__(self, tex, tex_name):
94
+ assert not isinstance(tex, str)
95
+ self.tex = tex
96
+ self.width = self.tex.width
97
+ self.height = self.tex.height
98
+ self.name = tex_name
99
+
100
+ def bind(self):
101
+ glBindTexture(self.tex.target, self.tex.id)