miniworld-maze 1.3.2__tar.gz → 1.4.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.3.2 → miniworld_maze-1.4.0}/PKG-INFO +1 -1
  2. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/benchmark_rendering.py +2 -2
  3. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/generate_observations.py +1 -1
  4. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/live_control_opencv.py +12 -5
  5. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/save_topdown_views.py +96 -64
  6. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/pyproject.toml +1 -1
  7. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/__init__.py +1 -5
  8. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/unified_env.py +57 -22
  9. miniworld_maze-1.3.2/src/miniworld_maze/environments/factory.py → miniworld_maze-1.4.0/src/miniworld_maze/environments/__init__.py +17 -5
  10. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/base_grid_rooms.py +17 -15
  11. miniworld_maze-1.3.2/src/miniworld_maze/environments/__init__.py +0 -13
  12. miniworld_maze-1.3.2/src/miniworld_maze/tools/__init__.py +0 -3
  13. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/LICENSE +0 -0
  14. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/README.md +0 -0
  15. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/README.md +0 -0
  16. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/basic_usage.py +0 -0
  17. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/observation_level_demo.py +0 -0
  18. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/__init__.py +0 -0
  19. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/constants.py +1 -1
  20. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/README.md +0 -0
  21. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/__init__.py +0 -0
  22. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/base_env.py +0 -0
  23. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +0 -0
  24. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/agent.py +0 -0
  25. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +0 -0
  26. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/objects.py +0 -0
  27. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entity_manager.py +0 -0
  28. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +0 -0
  29. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/math.py +0 -0
  30. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/objmesh.py +0 -0
  31. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +0 -0
  32. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/opengl.py +0 -0
  33. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/params.py +0 -0
  34. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/random.py +0 -0
  35. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +0 -0
  36. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +0 -0
  37. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +0 -0
  38. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +0 -0
  39. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +0 -0
  40. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/room.py +0 -0
  41. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/texture_utils.py +0 -0
  42. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
  43. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
  44. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
  45. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
  46. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
  47. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
  48. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
  49. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
  50. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
  51. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
  52. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
  53. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
  54. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
  55. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
  56. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
  57. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
  58. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
  59. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
  60. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
  61. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
  62. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
  63. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
  64. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
  65. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
  66. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
  67. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
  68. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
  69. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
  70. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
  71. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
  72. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
  73. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
  74. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
  75. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
  76. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
  77. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
  78. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
  79. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
  80. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
  81. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
  82. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
  83. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
  84. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
  85. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
  86. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
  87. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
  88. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
  89. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
  90. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
  91. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
  92. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
  93. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
  94. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
  95. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
  96. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
  97. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +0 -0
  98. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
  99. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +0 -0
  100. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
  101. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +0 -0
  102. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
  103. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +0 -0
  104. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
  105. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +0 -0
  106. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
  107. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +0 -0
  108. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
  109. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +0 -0
  110. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
  111. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +0 -0
  112. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
  113. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +0 -0
  114. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
  115. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +0 -0
  116. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
  117. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +0 -0
  118. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
  119. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +0 -0
  120. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
  121. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +0 -0
  122. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
  123. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +0 -0
  124. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
  125. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +0 -0
  126. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
  127. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +0 -0
  128. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
  129. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +0 -0
  130. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
  131. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +0 -0
  132. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
  133. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +0 -0
  134. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
  135. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +0 -0
  136. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
  137. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +0 -0
  138. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
  139. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +0 -0
  140. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
  141. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +0 -0
  142. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
  143. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +0 -0
  144. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
  145. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +0 -0
  146. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
  147. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +0 -0
  148. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
  149. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +0 -0
  150. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
  151. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +0 -0
  152. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
  153. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +0 -0
  154. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
  155. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +0 -0
  156. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
  157. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +0 -0
  158. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
  159. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +0 -0
  160. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
  161. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +0 -0
  162. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
  163. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +0 -0
  164. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
  165. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +0 -0
  166. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
  167. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +0 -0
  168. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
  169. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +0 -0
  170. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
  171. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +0 -0
  172. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
  173. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +0 -0
  174. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
  175. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +0 -0
  176. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
  177. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +0 -0
  178. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
  179. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +0 -0
  180. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
  181. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +0 -0
  182. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
  183. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +0 -0
  184. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
  185. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +0 -0
  186. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
  187. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +0 -0
  188. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
  189. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +0 -0
  190. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
  191. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +0 -0
  192. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
  193. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +0 -0
  194. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
  195. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +0 -0
  196. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
  197. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +0 -0
  198. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
  199. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +0 -0
  200. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
  201. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +0 -0
  202. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
  203. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +0 -0
  204. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
  205. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +0 -0
  206. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
  207. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +0 -0
  208. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
  209. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +0 -0
  210. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
  211. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +0 -0
  212. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
  213. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +0 -0
  214. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
  215. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +0 -0
  216. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
  217. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +0 -0
  218. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
  219. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +0 -0
  220. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
  221. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +0 -0
  222. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
  223. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +0 -0
  224. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
  225. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +0 -0
  226. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
  227. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +0 -0
  228. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
  229. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +0 -0
  230. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
  231. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +0 -0
  232. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
  233. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +0 -0
  234. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
  235. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +0 -0
  236. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
  237. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +0 -0
  238. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
  239. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +0 -0
  240. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
  241. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +0 -0
  242. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
  243. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +0 -0
  244. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
  245. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +0 -0
  246. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
  247. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +0 -0
  248. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
  249. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +0 -0
  250. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
  251. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +0 -0
  252. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
  253. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +0 -0
  254. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
  255. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +0 -0
  256. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
  257. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +0 -0
  258. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
  259. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +0 -0
  260. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
  261. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
  262. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
  263. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
  264. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
  265. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
  266. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
  267. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
  268. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
  269. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
  270. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
  271. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
  272. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
  273. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
  274. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
  275. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
  276. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
  277. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
  278. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
  279. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/utils.py +0 -0
  280. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/wrappers.py +0 -0
  281. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/observation_types.py +0 -0
  282. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/nine_rooms.py +0 -0
  283. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/spiral_nine_rooms.py +0 -0
  284. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/twenty_five_rooms.py +0 -0
  285. {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: miniworld-maze
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: Multi-room maze environments from the DrStrategy paper. Provides NineRooms-v0, SpiralNineRooms-v0, and TwentyFiveRooms-v0 gymnasium environments.
5
5
  Keywords: reinforcement-learning,environment,gymnasium,multi-room-maze,drstrategy,maze-navigation,partial-observability,3d-environments
6
6
  Author: Tim Joseph
@@ -61,8 +61,8 @@ def benchmark_rendering_performance(
61
61
  # Create environment with specific observation size
62
62
  variant_mapping = {
63
63
  "NineRooms": "NineRooms-v0",
64
- "SpiralNineRooms": "SpiralNineRooms-v0",
65
- "TwentyFiveRooms": "TwentyFiveRooms-v0"
64
+ "SpiralNineRooms": "SpiralNineRooms-v0",
65
+ "TwentyFiveRooms": "TwentyFiveRooms-v0",
66
66
  }
67
67
  env = gym.make(variant_mapping[variant], obs_width=size, obs_height=size)
68
68
 
@@ -29,7 +29,7 @@ def generate_observations(variant, output_dir=None, high_res_full_views=False):
29
29
  variant_mapping = {
30
30
  "NineRooms": "NineRooms-v0",
31
31
  "SpiralNineRooms": "SpiralNineRooms-v0",
32
- "TwentyFiveRooms": "TwentyFiveRooms-v0"
32
+ "TwentyFiveRooms": "TwentyFiveRooms-v0",
33
33
  }
34
34
  env = gym.make(variant_mapping[variant], obs_width=64, obs_height=64)
35
35
 
@@ -121,7 +121,7 @@ class OpenCVLiveController:
121
121
  variant_mapping = {
122
122
  "NineRooms": "NineRooms-v0",
123
123
  "SpiralNineRooms": "SpiralNineRooms-v0",
124
- "TwentyFiveRooms": "TwentyFiveRooms-v0"
124
+ "TwentyFiveRooms": "TwentyFiveRooms-v0",
125
125
  }
126
126
  self.env = gym.make(
127
127
  variant_mapping[variant],
@@ -215,7 +215,10 @@ class OpenCVLiveController:
215
215
  Returns:
216
216
  BGR image array for OpenCV or None if failed
217
217
  """
218
- if self.current_info is not None and ObservationLevel.FIRST_PERSON in self.current_info:
218
+ if (
219
+ self.current_info is not None
220
+ and ObservationLevel.FIRST_PERSON in self.current_info
221
+ ):
219
222
  # Get first person observation from info
220
223
  obs_hwc = self.current_info[ObservationLevel.FIRST_PERSON]
221
224
 
@@ -253,8 +256,12 @@ class OpenCVLiveController:
253
256
  Map image with agent and goal markers
254
257
  """
255
258
  # Get positions from info dictionary - these are guaranteed to be available
256
- agent_pos_2d = self.current_info["agent_position"] # [x, z] coordinates as ndarray
257
- goal_pos_2d = self.current_info["goal_position"] # [x, z] coordinates as ndarray
259
+ agent_pos_2d = self.current_info[
260
+ "agent_position"
261
+ ] # [x, z] coordinates as ndarray
262
+ goal_pos_2d = self.current_info[
263
+ "goal_position"
264
+ ] # [x, z] coordinates as ndarray
258
265
 
259
266
  # Get environment bounds using utility function
260
267
  env_min_bounds, env_max_bounds = get_environment_bounds(self.map_env)
@@ -590,7 +597,7 @@ class OpenCVLiveController:
590
597
  ]
591
598
  if action < len(action_names):
592
599
  print(
593
- f"🎯 {action_names[action]} | Reward: {reward:.2f} | "
600
+ f"🎯 {action_names[action]} | Reward: {reward:.2f} | Success {self.current_info['success']} | "
594
601
  f"Step: {self.step_count}"
595
602
  )
596
603
 
@@ -21,151 +21,183 @@ import miniworld_maze # noqa: F401
21
21
  def save_single_topdown_view(env: gym.Env) -> str:
22
22
  """Generate a single top-down full view and save it as PNG."""
23
23
  print("🎯 Generating single top-down full view...")
24
-
24
+
25
25
  # Reset environment to ensure consistent state
26
26
  _, info = env.reset(seed=42)
27
-
27
+
28
28
  # Get top-down full view from info dict
29
29
  obs_image = info[ObservationLevel.TOP_DOWN_FULL]
30
-
30
+
31
31
  # Save the observation as PNG
32
32
  filename = "single_topdown_view.png"
33
33
  Image.fromarray(obs_image).save(filename)
34
34
  print(f" ✅ Saved single top-down full view to: {filename}")
35
-
35
+
36
36
  return filename
37
37
 
38
38
 
39
39
  def save_steps_comparison(env: gym.Env) -> List[str]:
40
40
  """Run 5 steps and save observation/desired_goal side by side."""
41
41
  print("🚶 Running 5 steps and saving observation/desired_goal comparisons...")
42
-
42
+
43
43
  # Reset environment
44
44
  obs, _ = env.reset(seed=42)
45
-
45
+
46
46
  saved_files = []
47
-
47
+
48
48
  # Run 5 steps
49
49
  for step in range(5):
50
50
  # Take a random action
51
51
  action = env.action_space.sample()
52
52
  obs, reward, terminated, truncated, _ = env.step(action)
53
-
53
+
54
54
  # Get observation and desired_goal
55
55
  observation = obs["observation"]
56
56
  desired_goal = obs["desired_goal"]
57
-
57
+
58
58
  # Create side-by-side comparison
59
59
  # observation (left) and desired_goal (right)
60
60
  combined_width = observation.shape[1] + desired_goal.shape[1]
61
61
  combined_height = max(observation.shape[0], desired_goal.shape[0])
62
-
62
+
63
63
  # Create blank canvas
64
- combined_image = np.ones((combined_height, combined_width, 3), dtype=np.uint8) * 255
65
-
64
+ combined_image = (
65
+ np.ones((combined_height, combined_width, 3), dtype=np.uint8) * 255
66
+ )
67
+
66
68
  # Place observation on the left
67
- combined_image[:observation.shape[0], :observation.shape[1]] = observation
68
-
69
+ combined_image[: observation.shape[0], : observation.shape[1]] = observation
70
+
69
71
  # Place desired_goal on the right
70
- combined_image[:desired_goal.shape[0], observation.shape[1]:] = desired_goal
71
-
72
+ combined_image[: desired_goal.shape[0], observation.shape[1] :] = desired_goal
73
+
72
74
  # Save the combined image
73
75
  filename = f"step_{step + 1}_obs_vs_desired.png"
74
76
  Image.fromarray(combined_image).save(filename)
75
77
  saved_files.append(filename)
76
-
78
+
77
79
  print(f" Step {step + 1}: reward={reward:.3f}, saved to {filename}")
78
-
80
+
79
81
  # Reset if episode ended
80
82
  if terminated or truncated:
81
83
  obs, _ = env.reset()
82
-
84
+
83
85
  return saved_files
84
86
 
85
87
 
86
88
  def collect_trajectory_and_visualize(env: gym.Env) -> str:
87
89
  """Execute 1000 random steps and visualize agent trajectory on top-down view."""
88
90
  print("🔍 Collecting agent trajectory over 1000 random steps...")
89
-
91
+
90
92
  # Reset environment
91
93
  obs, info = env.reset(seed=42)
92
-
94
+
93
95
  # Get scene extent from environment using the new public method
94
96
  env_unwrapped = env.unwrapped
95
97
  scene_extent = env_unwrapped.get_extent()
96
98
  scene_min_x, scene_max_x, scene_min_z, scene_max_z = scene_extent
97
-
98
- print(f" Environment bounds: x=[{scene_min_x:.1f}, {scene_max_x:.1f}], z=[{scene_min_z:.1f}, {scene_max_z:.1f}]")
99
-
99
+
100
+ print(
101
+ f" Environment bounds: x=[{scene_min_x:.1f}, {scene_max_x:.1f}], z=[{scene_min_z:.1f}, {scene_max_z:.1f}]"
102
+ )
103
+
100
104
  # Collect trajectory positions
101
105
  trajectory_positions = []
102
-
106
+
103
107
  # Execute 1000 random steps
104
108
  for step in range(1000):
105
109
  # Take random action first to get info dict with position
106
110
  action = env.action_space.sample()
107
111
  _, _, terminated, truncated, info = env.step(action)
108
-
112
+
109
113
  # Get current agent position from info dict
110
114
  agent_pos = info["pos"]
111
115
  trajectory_positions.append((agent_pos[0], agent_pos[1])) # x, z coordinates
112
-
116
+
113
117
  # Reset if episode ended
114
118
  if terminated or truncated:
115
119
  obs, info = env.reset()
116
-
120
+
117
121
  if (step + 1) % 200 == 0:
118
122
  print(f" Completed {step + 1}/1000 steps")
119
-
123
+
120
124
  print(f" ✅ Collected {len(trajectory_positions)} position points")
121
-
125
+
122
126
  # Get top-down view for background
123
127
  env.reset(seed=42)
124
128
  background_image = env.unwrapped.render_top_view(POMDP=False)
125
-
129
+
126
130
  # Create matplotlib figure
127
131
  fig, ax = plt.subplots(1, 1, figsize=(12, 12))
128
-
132
+
129
133
  # Display background image using actual scene bounds
130
134
  # Use 'upper' origin to match how single_topdown_view.png is saved (standard image coordinates)
131
- ax.imshow(background_image, extent=[scene_extent[0], scene_extent[1], scene_extent[3], scene_extent[2]], origin='upper')
132
-
135
+ ax.imshow(
136
+ background_image,
137
+ extent=[scene_extent[0], scene_extent[1], scene_extent[3], scene_extent[2]],
138
+ origin="upper",
139
+ )
140
+
133
141
  # Extract x and z coordinates (no normalization needed now)
134
142
  x_coords = [pos[0] for pos in trajectory_positions]
135
143
  z_coords = [pos[1] for pos in trajectory_positions]
136
-
144
+
137
145
  # Plot trajectory using real world coordinates
138
- ax.plot(x_coords, z_coords, 'r-', linewidth=2, alpha=0.7, label='Agent Trajectory')
139
-
146
+ ax.plot(x_coords, z_coords, "r-", linewidth=2, alpha=0.7, label="Agent Trajectory")
147
+
140
148
  # Mark start and end points
141
149
  if trajectory_positions:
142
- ax.scatter(x_coords[0], z_coords[0], c='green', s=100, marker='o',
143
- label='Start', zorder=5, edgecolors='black', linewidths=2)
144
- ax.scatter(x_coords[-1], z_coords[-1], c='red', s=100, marker='s',
145
- label='End', zorder=5, edgecolors='black', linewidths=2)
146
-
150
+ ax.scatter(
151
+ x_coords[0],
152
+ z_coords[0],
153
+ c="green",
154
+ s=100,
155
+ marker="o",
156
+ label="Start",
157
+ zorder=5,
158
+ edgecolors="black",
159
+ linewidths=2,
160
+ )
161
+ ax.scatter(
162
+ x_coords[-1],
163
+ z_coords[-1],
164
+ c="red",
165
+ s=100,
166
+ marker="s",
167
+ label="End",
168
+ zorder=5,
169
+ edgecolors="black",
170
+ linewidths=2,
171
+ )
172
+
147
173
  # Add colormap for trajectory progression (plasma colormap for better visibility)
148
174
  colors = plt.cm.plasma(np.linspace(0, 1, len(trajectory_positions)))
149
175
  for i in range(len(trajectory_positions) - 1):
150
- ax.plot([x_coords[i], x_coords[i+1]],
151
- [z_coords[i], z_coords[i+1]],
152
- color=colors[i], linewidth=2, alpha=0.8)
153
-
176
+ ax.plot(
177
+ [x_coords[i], x_coords[i + 1]],
178
+ [z_coords[i], z_coords[i + 1]],
179
+ color=colors[i],
180
+ linewidth=2,
181
+ alpha=0.8,
182
+ )
183
+
154
184
  # Formatting using scene bounds (flipped Z to match image orientation)
155
185
  ax.set_xlim(scene_min_x, scene_max_x)
156
186
  ax.set_ylim(scene_max_z, scene_min_z)
157
- ax.set_title('Agent Trajectory over 1000 Random Steps', fontsize=16, fontweight='bold')
158
- ax.set_xlabel('X Position (world coordinates)', fontsize=12)
159
- ax.set_ylabel('Z Position (world coordinates)', fontsize=12)
160
- ax.legend(loc='upper right')
161
-
187
+ ax.set_title(
188
+ "Agent Trajectory over 1000 Random Steps", fontsize=16, fontweight="bold"
189
+ )
190
+ ax.set_xlabel("X Position (world coordinates)", fontsize=12)
191
+ ax.set_ylabel("Z Position (world coordinates)", fontsize=12)
192
+ ax.legend(loc="upper right")
193
+
162
194
  # Save the visualization
163
195
  filename = "agent_trajectory_visualization.png"
164
- plt.savefig(filename, dpi=300, bbox_inches='tight')
196
+ plt.savefig(filename, dpi=300, bbox_inches="tight")
165
197
  plt.close()
166
-
198
+
167
199
  print(f" ✅ Saved trajectory visualization to: {filename}")
168
-
200
+
169
201
  return filename
170
202
 
171
203
 
@@ -173,7 +205,7 @@ def main() -> None:
173
205
  """Main function demonstrating both features."""
174
206
  print("🖼️ Top-Down View Generator")
175
207
  print("=" * 50)
176
-
208
+
177
209
  # Create a single environment instance with info_obs for top-down full view
178
210
  env = gym.make(
179
211
  "NineRooms-v0",
@@ -182,21 +214,21 @@ def main() -> None:
182
214
  obs_height=256,
183
215
  info_obs=[ObservationLevel.TOP_DOWN_FULL],
184
216
  )
185
-
217
+
186
218
  try:
187
219
  # 1. Generate single top-down view
188
220
  single_file = save_single_topdown_view(env)
189
-
221
+
190
222
  print("\n" + "=" * 50)
191
-
223
+
192
224
  # 2. Run 5 steps and save comparisons
193
225
  step_files = save_steps_comparison(env)
194
-
226
+
195
227
  print("\n" + "=" * 50)
196
-
228
+
197
229
  # 3. Collect trajectory and visualize
198
230
  trajectory_file = collect_trajectory_and_visualize(env)
199
-
231
+
200
232
  print("\n" + "=" * 50)
201
233
  print("🎉 Generation complete!")
202
234
  print("📁 Files created:")
@@ -204,12 +236,12 @@ def main() -> None:
204
236
  for file in step_files:
205
237
  print(f" • {file} (observation vs desired_goal)")
206
238
  print(f" • {trajectory_file} (agent trajectory visualization)")
207
-
239
+
208
240
  print("\n💡 Tip: Open the PNG files to see the different views!")
209
-
241
+
210
242
  finally:
211
243
  env.close()
212
244
 
213
245
 
214
246
  if __name__ == "__main__":
215
- main()
247
+ main()
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "miniworld-maze"
7
- version = "1.3.2"
7
+ version = "1.4.0"
8
8
  description = "Multi-room maze environments from the DrStrategy paper. Provides NineRooms-v0, SpiralNineRooms-v0, and TwentyFiveRooms-v0 gymnasium environments."
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -25,7 +25,7 @@ if "PYGLET_HEADLESS" not in os.environ:
25
25
  "Automatically set PYGLET_HEADLESS=1 for headless rendering. "
26
26
  "Set PYGLET_HEADLESS=0 before importing miniworld_maze to override this behavior.",
27
27
  UserWarning,
28
- stacklevel=2
28
+ stacklevel=2,
29
29
  )
30
30
 
31
31
  from .core import ObservationLevel
@@ -33,10 +33,6 @@ from .environments.nine_rooms import NineRooms
33
33
  from .environments.spiral_nine_rooms import SpiralNineRooms
34
34
  from .environments.twenty_five_rooms import TwentyFiveRooms
35
35
 
36
- # Import factory to register environments
37
- from .environments import factory # noqa: F401
38
-
39
- __version__ = "1.1.0"
40
36
  __all__ = [
41
37
  "NineRooms",
42
38
  "SpiralNineRooms",
@@ -9,29 +9,71 @@ import gymnasium as gym
9
9
  import numpy as np
10
10
  import pyglet
11
11
  from gymnasium import spaces
12
- from pyglet.gl import *
13
-
14
- from ..observation_types import ObservationLevel
15
- from .entities import *
16
- from .math import *
17
- from .objmesh import *
18
- from .occlusion_queries import OcclusionQueryManager
19
- from .opengl import *
20
- from .params import DEFAULT_PARAMS
21
- from .random import RandGen
22
- from .room import Room
12
+ from pyglet.gl import (
13
+ glEnable,
14
+ glDeleteLists,
15
+ glNewList,
16
+ glLightfv,
17
+ glShadeModel,
18
+ glColorMaterial,
19
+ glCallList,
20
+ glClearColor,
21
+ glClearDepth,
22
+ glClear,
23
+ glMatrixMode,
24
+ glLoadIdentity,
25
+ glOrtho,
26
+ glLoadMatrixf,
27
+ glDisable,
28
+ glBindFramebuffer,
29
+ glFlush,
30
+ glEndList,
31
+ gluPerspective,
32
+ gluLookAt,
33
+ GL_DEPTH_TEST,
34
+ GL_CULL_FACE,
35
+ GL_COMPILE,
36
+ GL_LIGHT0,
37
+ GL_POSITION,
38
+ GL_AMBIENT,
39
+ GL_DIFFUSE,
40
+ GL_SMOOTH,
41
+ GL_FRONT_AND_BACK,
42
+ GL_AMBIENT_AND_DIFFUSE,
43
+ GL_LIGHTING,
44
+ GL_COLOR_MATERIAL,
45
+ GL_COLOR_BUFFER_BIT,
46
+ GL_DEPTH_BUFFER_BIT,
47
+ GL_PROJECTION,
48
+ GL_MODELVIEW,
49
+ GL_TEXTURE_2D,
50
+ GL_FRAMEBUFFER,
51
+ GLubyte,
52
+ GLfloat,
53
+ )
54
+
55
+ from miniworld_maze.core.observation_types import ObservationLevel
56
+ from miniworld_maze.core.miniworld_gymnasium.entities import Entity, Agent
57
+ from miniworld_maze.core.miniworld_gymnasium.math import Y_VEC, intersect_circle_segs
58
+ from miniworld_maze.core.miniworld_gymnasium.occlusion_queries import (
59
+ OcclusionQueryManager,
60
+ )
61
+ from miniworld_maze.core.miniworld_gymnasium.opengl import Texture, FrameBuffer, drawBox
62
+ from miniworld_maze.core.miniworld_gymnasium.params import DEFAULT_PARAMS
63
+ from miniworld_maze.core.miniworld_gymnasium.random import RandGen
64
+ from miniworld_maze.core.miniworld_gymnasium.room import Room
23
65
 
24
66
  # Optional architectural improvements
25
67
  try:
26
- from .entity_manager import EntityManager
27
- from .rendering_engine import RenderingEngine
68
+ from miniworld_maze.core.miniworld_gymnasium.entity_manager import EntityManager
69
+ from miniworld_maze.core.miniworld_gymnasium.rendering_engine import RenderingEngine
28
70
 
29
71
  ARCHITECTURAL_IMPROVEMENTS_AVAILABLE = True
30
72
  except ImportError:
31
73
  RenderingEngine = None
32
74
  EntityManager = None
33
75
  ARCHITECTURAL_IMPROVEMENTS_AVAILABLE = False
34
- from ..constants import (
76
+ from miniworld_maze.core.constants import (
35
77
  CARRY_POSITION_OFFSET,
36
78
  DEFAULT_DISPLAY_WIDTH,
37
79
  DEFAULT_WINDOW_HEIGHT,
@@ -47,6 +89,7 @@ from ..constants import (
47
89
  ORTHOGRAPHIC_DEPTH_RANGE,
48
90
  PICKUP_RADIUS_MULTIPLIER,
49
91
  PICKUP_REACH_MULTIPLIER,
92
+ POMDP_VIEW_RADIUS,
50
93
  PORTAL_CONNECTION_TOLERANCE,
51
94
  TEXT_LABEL_WIDTH,
52
95
  TEXT_MARGIN_X,
@@ -363,8 +406,6 @@ class UnifiedMiniWorldEnv(gym.Env):
363
406
  render_agent: Whether to render the agent in the observation.
364
407
  If None, uses default behavior based on observation level.
365
408
  """
366
- # Import ObservationLevel here to avoid circular imports
367
- from ..observation_types import ObservationLevel
368
409
 
369
410
  if observation_level == ObservationLevel.TOP_DOWN_PARTIAL:
370
411
  if self.agent_mode == "empty":
@@ -1039,9 +1080,6 @@ class UnifiedMiniWorldEnv(gym.Env):
1039
1080
  def _calculate_scene_extents(self, POMDP):
1040
1081
  """Calculate scene extents for rendering."""
1041
1082
  if POMDP:
1042
- # Import constants for POMDP view radius
1043
- from ..constants import POMDP_VIEW_RADIUS
1044
-
1045
1083
  agent_x, _, agent_z = self.agent.pos
1046
1084
  min_x = agent_x - POMDP_VIEW_RADIUS
1047
1085
  max_x = agent_x + POMDP_VIEW_RADIUS
@@ -1287,9 +1325,6 @@ class UnifiedMiniWorldEnv(gym.Env):
1287
1325
  if view == "agent":
1288
1326
  img = self.render_obs(self.vis_fb)
1289
1327
  else:
1290
- # Import ObservationLevel here to avoid circular imports
1291
- from ..observation_types import ObservationLevel
1292
-
1293
1328
  if self.obs_level == ObservationLevel.TOP_DOWN_PARTIAL:
1294
1329
  img = self.render_top_view(self.vis_fb, POMDP=True)
1295
1330
  else:
@@ -1,8 +1,20 @@
1
- """Gymnasium environment registrations for Nine Rooms environment variants."""
1
+ """Nine Rooms environment implementations."""
2
+
3
+ from miniworld_maze.environments.base_grid_rooms import GridRoomsEnvironment
4
+ from miniworld_maze.environments.nine_rooms import NineRooms
5
+ from miniworld_maze.environments.spiral_nine_rooms import SpiralNineRooms
6
+ from miniworld_maze.environments.twenty_five_rooms import TwentyFiveRooms
2
7
 
3
8
  from gymnasium.envs.registration import register
4
- from ..core import ObservationLevel
5
- from ..core.constants import FACTORY_DOOR_SIZE, FACTORY_ROOM_SIZE
9
+ from miniworld_maze.core import ObservationLevel
10
+ from miniworld_maze.core.constants import FACTORY_DOOR_SIZE, FACTORY_ROOM_SIZE
11
+
12
+ __all__ = [
13
+ "GridRoomsEnvironment",
14
+ "NineRooms",
15
+ "SpiralNineRooms",
16
+ "TwentyFiveRooms",
17
+ ]
6
18
 
7
19
  # Register environment variants with factory defaults matching the original wrapper
8
20
  register(
@@ -18,7 +30,7 @@ register(
18
30
  )
19
31
 
20
32
  register(
21
- id="SpiralNineRooms-v0",
33
+ id="SpiralNineRooms-v0",
22
34
  entry_point="miniworld_maze.environments.spiral_nine_rooms:SpiralNineRooms",
23
35
  max_episode_steps=1000,
24
36
  kwargs={
@@ -31,7 +43,7 @@ register(
31
43
 
32
44
  register(
33
45
  id="TwentyFiveRooms-v0",
34
- entry_point="miniworld_maze.environments.twenty_five_rooms:TwentyFiveRooms",
46
+ entry_point="miniworld_maze.environments.twenty_five_rooms:TwentyFiveRooms",
35
47
  max_episode_steps=1000,
36
48
  kwargs={
37
49
  "room_size": FACTORY_ROOM_SIZE,
@@ -242,9 +242,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
242
242
  agent_pos = self.agent.pos
243
243
  info["agent_position"] = np.array([agent_pos[0], agent_pos[2]]) # x, z
244
244
 
245
- if hasattr(self, "_current_goal_position"):
246
- goal_pos = self._current_goal_position
247
- info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
245
+ goal_pos = self._current_goal_position
246
+ info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
248
247
 
249
248
  # Return observation as dict
250
249
  obs_dict = self._build_observation_dict(obs)
@@ -265,6 +264,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
265
264
  # Call parent reset
266
265
  obs, info = super().reset(seed=seed, options=options, pos=pos)
267
266
 
267
+ info["success"] = 0.0
268
+
268
269
  # Generate goal
269
270
  self.desired_goal = self._get_goal()
270
271
 
@@ -272,9 +273,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
272
273
  agent_pos = self.agent.pos
273
274
  info["agent_position"] = np.array([agent_pos[0], agent_pos[2]]) # x, z
274
275
 
275
- if hasattr(self, "_current_goal_position"):
276
- goal_pos = self._current_goal_position
277
- info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
276
+ goal_pos = self._current_goal_position
277
+ info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
278
278
 
279
279
  # Return observation as dict with desired_goal and achieved_goal
280
280
  obs_dict = self._build_observation_dict(obs)
@@ -381,22 +381,24 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
381
381
  goal_positions.append([[center_x, 0.0, center_z]])
382
382
  else:
383
383
  # Two goals per room: center-left and center-right
384
- goal_positions.append([
385
- [center_x - 1.0, 0.0, center_z], # left goal
386
- [center_x + 1.0, 0.0, center_z], # right goal
387
- ])
384
+ goal_positions.append(
385
+ [
386
+ [center_x - 1.0, 0.0, center_z], # left goal
387
+ [center_x + 1.0, 0.0, center_z], # right goal
388
+ ]
389
+ )
388
390
  return goal_positions
389
391
 
390
392
  def get_extent(self, padding: float = 1.0) -> Tuple[float, float, float, float]:
391
393
  """
392
394
  Get the scene extent for use with matplotlib imshow.
393
-
394
- Returns the scene bounds with padding in the format expected by
395
+
396
+ Returns the scene bounds with padding in the format expected by
395
397
  matplotlib's imshow(extent=...) parameter: (left, right, bottom, top).
396
-
398
+
397
399
  Args:
398
400
  padding: Padding to add around environment bounds (default: 1.0)
399
-
401
+
400
402
  Returns:
401
403
  Tuple[float, float, float, float]: (min_x, max_x, min_z, max_z) with padding
402
404
  """
@@ -404,7 +406,7 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
404
406
  self.min_x - padding,
405
407
  self.max_x + padding,
406
408
  self.min_z - padding,
407
- self.max_z + padding
409
+ self.max_z + padding,
408
410
  )
409
411
 
410
412
  def _build_observation_dict(self, obs: np.ndarray) -> dict:
@@ -1,13 +0,0 @@
1
- """Nine Rooms environment implementations."""
2
-
3
- from .base_grid_rooms import GridRoomsEnvironment
4
- from .nine_rooms import NineRooms
5
- from .spiral_nine_rooms import SpiralNineRooms
6
- from .twenty_five_rooms import TwentyFiveRooms
7
-
8
- __all__ = [
9
- "GridRoomsEnvironment",
10
- "NineRooms",
11
- "SpiralNineRooms",
12
- "TwentyFiveRooms",
13
- ]
@@ -1,3 +0,0 @@
1
- """Tools for Nine Rooms environments."""
2
-
3
- __all__ = []
File without changes
File without changes