miniworld-maze 1.0.0__tar.gz → 1.1.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 (289) hide show
  1. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/LICENSE +2 -2
  2. miniworld_maze-1.1.0/PKG-INFO +250 -0
  3. miniworld_maze-1.1.0/README.md +186 -0
  4. miniworld_maze-1.1.0/examples/basic_usage.py +36 -0
  5. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/examples/benchmark_rendering.py +134 -98
  6. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/examples/generate_observations.py +111 -79
  7. miniworld_maze-1.1.0/examples/live_control_opencv.py +756 -0
  8. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/examples/observation_level_demo.py +19 -18
  9. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/pyproject.toml +2 -1
  10. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/__init__.py +0 -4
  11. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/unified_env.py +42 -21
  12. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/__init__.py +1 -2
  13. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/base_grid_rooms.py +140 -1
  14. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/factory.py +7 -57
  15. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/nine_rooms.py +15 -0
  16. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/spiral_nine_rooms.py +15 -0
  17. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/environments/twenty_five_rooms.py +14 -0
  18. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/tools/generate_observations.py +3 -3
  19. miniworld_maze-1.0.0/PKG-INFO +0 -108
  20. miniworld_maze-1.0.0/README.md +0 -45
  21. miniworld_maze-1.0.0/examples/live_control_opencv.py +0 -574
  22. miniworld_maze-1.0.0/src/miniworld_maze/wrappers/__init__.py +0 -5
  23. miniworld_maze-1.0.0/src/miniworld_maze/wrappers/image_transforms.py +0 -40
  24. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/examples/README.md +0 -0
  25. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/__init__.py +0 -0
  26. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/constants.py +0 -0
  27. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/README.md +0 -0
  28. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/__init__.py +0 -0
  29. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/base_env.py +0 -0
  30. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +0 -0
  31. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/agent.py +0 -0
  32. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +0 -0
  33. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/objects.py +0 -0
  34. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/entity_manager.py +0 -0
  35. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +0 -0
  36. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/math.py +0 -0
  37. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/objmesh.py +0 -0
  38. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +0 -0
  39. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/opengl.py +0 -0
  40. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/params.py +0 -0
  41. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/random.py +0 -0
  42. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +0 -0
  43. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +0 -0
  44. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +0 -0
  45. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +0 -0
  46. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +0 -0
  47. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/room.py +0 -0
  48. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/texture_utils.py +0 -0
  49. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
  50. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
  51. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
  52. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
  53. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
  54. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
  55. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
  56. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
  57. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
  58. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
  59. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
  60. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
  61. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
  62. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
  63. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
  64. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
  65. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
  66. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
  67. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
  68. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
  69. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
  70. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
  71. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
  72. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
  73. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
  74. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
  75. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
  76. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
  77. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
  78. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
  79. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
  80. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
  81. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
  82. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
  83. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
  84. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
  85. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
  86. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
  87. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
  88. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
  89. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
  90. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
  91. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
  92. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
  93. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
  94. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
  95. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
  96. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
  97. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
  98. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
  99. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
  100. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
  101. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
  102. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
  103. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
  104. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +0 -0
  105. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
  106. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +0 -0
  107. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
  108. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +0 -0
  109. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
  110. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +0 -0
  111. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
  112. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +0 -0
  113. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
  114. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +0 -0
  115. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
  116. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +0 -0
  117. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
  118. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +0 -0
  119. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
  120. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +0 -0
  121. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
  122. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +0 -0
  123. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
  124. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +0 -0
  125. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
  126. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +0 -0
  127. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
  128. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +0 -0
  129. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
  130. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +0 -0
  131. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
  132. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +0 -0
  133. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
  134. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +0 -0
  135. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
  136. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +0 -0
  137. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
  138. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +0 -0
  139. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
  140. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +0 -0
  141. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
  142. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +0 -0
  143. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
  144. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +0 -0
  145. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
  146. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +0 -0
  147. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
  148. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +0 -0
  149. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
  150. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +0 -0
  151. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
  152. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +0 -0
  153. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
  154. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +0 -0
  155. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
  156. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +0 -0
  157. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
  158. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +0 -0
  159. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
  160. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +0 -0
  161. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
  162. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +0 -0
  163. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
  164. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +0 -0
  165. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
  166. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +0 -0
  167. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
  168. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +0 -0
  169. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
  170. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +0 -0
  171. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
  172. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +0 -0
  173. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
  174. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +0 -0
  175. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
  176. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +0 -0
  177. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
  178. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +0 -0
  179. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
  180. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +0 -0
  181. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
  182. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +0 -0
  183. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
  184. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +0 -0
  185. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
  186. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +0 -0
  187. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
  188. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +0 -0
  189. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
  190. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +0 -0
  191. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
  192. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +0 -0
  193. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
  194. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +0 -0
  195. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
  196. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +0 -0
  197. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
  198. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +0 -0
  199. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
  200. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +0 -0
  201. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
  202. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +0 -0
  203. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
  204. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +0 -0
  205. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
  206. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +0 -0
  207. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
  208. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +0 -0
  209. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
  210. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +0 -0
  211. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
  212. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +0 -0
  213. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
  214. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +0 -0
  215. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
  216. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +0 -0
  217. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
  218. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +0 -0
  219. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
  220. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +0 -0
  221. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
  222. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +0 -0
  223. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
  224. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +0 -0
  225. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
  226. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +0 -0
  227. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
  228. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +0 -0
  229. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
  230. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +0 -0
  231. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
  232. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +0 -0
  233. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
  234. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +0 -0
  235. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
  236. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +0 -0
  237. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
  238. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +0 -0
  239. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
  240. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +0 -0
  241. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
  242. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +0 -0
  243. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
  244. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +0 -0
  245. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
  246. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +0 -0
  247. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
  248. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +0 -0
  249. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
  250. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +0 -0
  251. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
  252. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +0 -0
  253. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
  254. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +0 -0
  255. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
  256. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +0 -0
  257. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
  258. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +0 -0
  259. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
  260. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +0 -0
  261. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
  262. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +0 -0
  263. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
  264. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +0 -0
  265. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
  266. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +0 -0
  267. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
  268. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
  269. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
  270. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
  271. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
  272. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
  273. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
  274. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
  275. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
  276. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
  277. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
  278. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
  279. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
  280. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
  281. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
  282. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
  283. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
  284. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
  285. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
  286. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/utils.py +0 -0
  287. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/miniworld_gymnasium/wrappers.py +0 -0
  288. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/core/observation_types.py +0 -0
  289. {miniworld_maze-1.0.0 → miniworld_maze-1.1.0}/src/miniworld_maze/tools/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 DrStrategy Research Team
3
+ Copyright (c) 2025 Tim Joseph
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
@@ -0,0 +1,250 @@
1
+ Metadata-Version: 2.3
2
+ Name: miniworld-maze
3
+ Version: 1.1.0
4
+ Summary: Multi-room maze environments from the DrStrategy paper for reinforcement learning research
5
+ Keywords: reinforcement-learning,environment,gymnasium,multi-room-maze,drstrategy,maze-navigation,partial-observability,3d-environments
6
+ Author: Tim Joseph
7
+ Author-email: Tim Joseph <tim@mctigger.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2025 Tim Joseph
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ Classifier: Development Status :: 4 - Beta
30
+ Classifier: Intended Audience :: Science/Research
31
+ Classifier: Intended Audience :: Developers
32
+ Classifier: Operating System :: OS Independent
33
+ Classifier: Programming Language :: Python :: 3
34
+ Classifier: Programming Language :: Python :: 3.8
35
+ Classifier: Programming Language :: Python :: 3.9
36
+ Classifier: Programming Language :: Python :: 3.10
37
+ Classifier: Programming Language :: Python :: 3.11
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
40
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
41
+ Classifier: Environment :: Console
42
+ Classifier: Typing :: Typed
43
+ Requires-Dist: gymnasium>=1.0.0,<2.0.0
44
+ Requires-Dist: numpy>=1.20.0,<3.0.0
45
+ Requires-Dist: opencv-python>=4.5.0,<5.0.0
46
+ Requires-Dist: pillow>=8.0.0,<11.0.0
47
+ Requires-Dist: pyopengl>=3.1.0,<4.0.0
48
+ Requires-Dist: pyglet>=1.5.0,<2.0.0
49
+ Requires-Dist: black>=22.0,<25.0 ; extra == 'dev'
50
+ Requires-Dist: isort>=5.10,<6.0 ; extra == 'dev'
51
+ Requires-Dist: flake8>=4.0,<7.0 ; extra == 'dev'
52
+ Requires-Dist: ruff>=0.1.0,<1.0.0 ; extra == 'dev'
53
+ Requires-Dist: build>=0.8.0,<2.0.0 ; extra == 'dev'
54
+ Requires-Dist: twine>=4.0.0,<6.0.0 ; extra == 'dev'
55
+ Requires-Dist: mujoco>=2.3.0,<4.0.0 ; extra == 'mujoco'
56
+ Requires-Python: >=3.8
57
+ Project-URL: Bug Tracker, https://github.com/mctigger/miniworld-maze/issues
58
+ Project-URL: Documentation, https://github.com/mctigger/miniworld-maze#readme
59
+ Project-URL: Homepage, https://github.com/mctigger/miniworld-maze
60
+ Project-URL: Repository, https://github.com/mctigger/miniworld-maze
61
+ Provides-Extra: dev
62
+ Provides-Extra: mujoco
63
+ Description-Content-Type: text/markdown
64
+
65
+ # MiniWorld DrStrategy - Multi-Room Maze Environment
66
+
67
+ A refactored implementation of Dr. Strategy's MiniWorld-based maze environments with updated dependencies and modern Python packaging. Based on the now-deprecated [MiniWorld](https://github.com/Farama-Foundation/Miniworld) project and the original [DrStrategy implementation](https://github.com/ahn-ml/drstrategy).
68
+
69
+ ## Environment Observations
70
+
71
+ ### Environment Views
72
+ Full environment layout and render-on-position views:
73
+
74
+ | Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
75
+ |---|---|---|
76
+ | ![Full View Clean](assets/images/full_view_clean.png) | ![Top Middle TD](assets/images/render_on_pos_1_top_middle_room_topdown.png) ![Center TD](assets/images/render_on_pos_3_environment_center_topdown.png) | ![Top Middle FP](assets/images/render_on_pos_1_top_middle_room_firstperson.png) ![Center FP](assets/images/render_on_pos_3_environment_center_firstperson.png) |
77
+
78
+ ## Installation
79
+
80
+ ```bash
81
+ pip install miniworld-maze
82
+ ```
83
+
84
+ ## Usage
85
+
86
+ ### Basic Usage
87
+
88
+ See `examples/basic_usage.py` for a complete working example:
89
+
90
+ ```python
91
+ #!/usr/bin/env python3
92
+ """
93
+ Basic usage example for miniworld-maze environments.
94
+
95
+ This is a minimal example showing how to create and interact with the environment.
96
+ """
97
+
98
+ from miniworld_maze import NineRoomsEnvironmentWrapper
99
+
100
+
101
+ def main():
102
+ # Create environment
103
+ env = NineRoomsEnvironmentWrapper(variant="NineRooms", size=64)
104
+ obs, info = env.reset()
105
+
106
+ # obs is a dictionary containing:
107
+ # - 'observation': (64, 64, 3) RGB image array
108
+ # - 'desired_goal': (64, 64, 3) RGB image of the goal state
109
+ # - 'achieved_goal': (64, 64, 3) RGB image of the current state
110
+
111
+ # Take a few random actions
112
+ for step in range(10):
113
+ action = env.action_space.sample()
114
+ obs, reward, terminated, truncated, info = env.step(action)
115
+
116
+ print(f"Step {step + 1}: reward={reward:.3f}, terminated={terminated}")
117
+
118
+ if terminated or truncated:
119
+ obs, info = env.reset()
120
+
121
+ env.close()
122
+ print("Environment closed successfully!")
123
+
124
+
125
+ if __name__ == "__main__":
126
+ main()
127
+ ```
128
+
129
+ ### Headless Environments
130
+
131
+ When running in headless environments (servers, CI/CD, Docker containers) or when encountering X11/OpenGL context issues, you need to enable headless rendering:
132
+
133
+ ```bash
134
+ # Set environment variable before running Python
135
+ export PYGLET_HEADLESS=1
136
+ python your_script.py
137
+ ```
138
+
139
+ Or in your Python code (must be set before importing the library):
140
+
141
+ ```python
142
+ import os
143
+ os.environ['PYGLET_HEADLESS'] = '1'
144
+
145
+ import miniworld_maze
146
+ # ... rest of your code
147
+ ```
148
+
149
+ This configures the underlying pyglet library to use EGL rendering instead of X11, allowing the environments to run without a display server.
150
+
151
+ ## Environment Variants
152
+
153
+ ### Available Environments
154
+
155
+ The package provides three main environment variants, each with different room layouts and connection patterns:
156
+
157
+ #### 1. NineRooms (3×3 Grid)
158
+ ```
159
+ -------------
160
+ | 0 | 1 | 2 |
161
+ -------------
162
+ | 3 | 4 | 5 |
163
+ -------------
164
+ | 6 | 7 | 8 |
165
+ -------------
166
+ ```
167
+ A standard 3×3 grid where adjacent rooms are connected. The agent can navigate between rooms through doorways, with connections forming a fully connected grid pattern.
168
+
169
+ #### 2. SpiralNineRooms (3×3 Spiral Pattern)
170
+ ```
171
+ -------------
172
+ | 0 | 1 | 2 |
173
+ -------------
174
+ | 3 | 4 | 5 |
175
+ -------------
176
+ | 6 | 7 | 8 |
177
+ -------------
178
+ ```
179
+ Same room layout as NineRooms but with a spiral connection pattern. Only specific room pairs are connected, creating a more challenging navigation task with fewer available paths.
180
+
181
+ #### 3. TwentyFiveRooms (5×5 Grid)
182
+ ```
183
+ ---------------------
184
+ | 0 | 1 | 2 | 3 | 4 |
185
+ ---------------------
186
+ | 5 | 6 | 7 | 8 | 9 |
187
+ ---------------------
188
+ |10 |11 |12 |13 |14 |
189
+ ---------------------
190
+ |15 |16 |17 |18 |19 |
191
+ ---------------------
192
+ |20 |21 |22 |23 |24 |
193
+ ---------------------
194
+ ```
195
+ A larger 5×5 grid environment with 25 rooms, providing more complex navigation challenges and longer episode lengths.
196
+
197
+ ### Observation Types
198
+
199
+ Each environment supports three different observation modes:
200
+
201
+ - **`TOP_DOWN_PARTIAL`** (default): Agent-centered partial top-down view with limited visibility range (POMDP)
202
+ - **`TOP_DOWN_FULL`**: Complete top-down view showing the entire environment
203
+ - **`FIRST_PERSON`**: 3D first-person perspective view from the agent's current position
204
+
205
+ ### Action Space
206
+
207
+ - **Discrete Actions** (default): 7 discrete actions (turn left/right, move forward/backward, strafe left/right, no-op)
208
+ - **Continuous Actions**: Continuous control with `continuous=True` parameter
209
+
210
+ ### Environment Configuration
211
+
212
+ All environments can be customized with the following parameters:
213
+
214
+ ```python
215
+ from miniworld_maze import NineRoomsEnvironmentWrapper
216
+ from miniworld_maze.core import ObservationLevel
217
+
218
+ env = NineRoomsEnvironmentWrapper(
219
+ variant="NineRooms", # "NineRooms", "SpiralNineRooms", "TwentyFiveRooms"
220
+ obs_level=ObservationLevel.TOP_DOWN_PARTIAL, # Observation type
221
+ continuous=False, # Use continuous actions
222
+ size=64, # Observation image size (64x64)
223
+ room_size=5, # Size of each room in environment units
224
+ door_size=2, # Size of doors between rooms
225
+ agent_mode="empty", # Agent rendering: "empty", "circle", "triangle"
226
+ )
227
+ ```
228
+
229
+ ### Observation Format
230
+
231
+ The environment returns observations in dictionary format:
232
+
233
+ ```python
234
+ obs = {
235
+ 'observation': np.ndarray, # (64, 64, 3) RGB image of current view
236
+ 'desired_goal': np.ndarray, # (64, 64, 3) RGB image of goal location
237
+ 'achieved_goal': np.ndarray, # (64, 64, 3) RGB image of current state
238
+ }
239
+ ```
240
+
241
+ ### Reward Structure
242
+
243
+ - **Goal reaching**: Positive reward when agent reaches the goal location
244
+ - **Step penalty**: Small negative reward per step to encourage efficiency
245
+ - **Episode termination**: When goal is reached or maximum steps exceeded
246
+
247
+
248
+ ## License
249
+
250
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,186 @@
1
+ # MiniWorld DrStrategy - Multi-Room Maze Environment
2
+
3
+ A refactored implementation of Dr. Strategy's MiniWorld-based maze environments with updated dependencies and modern Python packaging. Based on the now-deprecated [MiniWorld](https://github.com/Farama-Foundation/Miniworld) project and the original [DrStrategy implementation](https://github.com/ahn-ml/drstrategy).
4
+
5
+ ## Environment Observations
6
+
7
+ ### Environment Views
8
+ Full environment layout and render-on-position views:
9
+
10
+ | Full Environment | Partial Top-Down Observations | Partial First-Person Observations |
11
+ |---|---|---|
12
+ | ![Full View Clean](assets/images/full_view_clean.png) | ![Top Middle TD](assets/images/render_on_pos_1_top_middle_room_topdown.png) ![Center TD](assets/images/render_on_pos_3_environment_center_topdown.png) | ![Top Middle FP](assets/images/render_on_pos_1_top_middle_room_firstperson.png) ![Center FP](assets/images/render_on_pos_3_environment_center_firstperson.png) |
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pip install miniworld-maze
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ### Basic Usage
23
+
24
+ See `examples/basic_usage.py` for a complete working example:
25
+
26
+ ```python
27
+ #!/usr/bin/env python3
28
+ """
29
+ Basic usage example for miniworld-maze environments.
30
+
31
+ This is a minimal example showing how to create and interact with the environment.
32
+ """
33
+
34
+ from miniworld_maze import NineRoomsEnvironmentWrapper
35
+
36
+
37
+ def main():
38
+ # Create environment
39
+ env = NineRoomsEnvironmentWrapper(variant="NineRooms", size=64)
40
+ obs, info = env.reset()
41
+
42
+ # obs is a dictionary containing:
43
+ # - 'observation': (64, 64, 3) RGB image array
44
+ # - 'desired_goal': (64, 64, 3) RGB image of the goal state
45
+ # - 'achieved_goal': (64, 64, 3) RGB image of the current state
46
+
47
+ # Take a few random actions
48
+ for step in range(10):
49
+ action = env.action_space.sample()
50
+ obs, reward, terminated, truncated, info = env.step(action)
51
+
52
+ print(f"Step {step + 1}: reward={reward:.3f}, terminated={terminated}")
53
+
54
+ if terminated or truncated:
55
+ obs, info = env.reset()
56
+
57
+ env.close()
58
+ print("Environment closed successfully!")
59
+
60
+
61
+ if __name__ == "__main__":
62
+ main()
63
+ ```
64
+
65
+ ### Headless Environments
66
+
67
+ When running in headless environments (servers, CI/CD, Docker containers) or when encountering X11/OpenGL context issues, you need to enable headless rendering:
68
+
69
+ ```bash
70
+ # Set environment variable before running Python
71
+ export PYGLET_HEADLESS=1
72
+ python your_script.py
73
+ ```
74
+
75
+ Or in your Python code (must be set before importing the library):
76
+
77
+ ```python
78
+ import os
79
+ os.environ['PYGLET_HEADLESS'] = '1'
80
+
81
+ import miniworld_maze
82
+ # ... rest of your code
83
+ ```
84
+
85
+ This configures the underlying pyglet library to use EGL rendering instead of X11, allowing the environments to run without a display server.
86
+
87
+ ## Environment Variants
88
+
89
+ ### Available Environments
90
+
91
+ The package provides three main environment variants, each with different room layouts and connection patterns:
92
+
93
+ #### 1. NineRooms (3×3 Grid)
94
+ ```
95
+ -------------
96
+ | 0 | 1 | 2 |
97
+ -------------
98
+ | 3 | 4 | 5 |
99
+ -------------
100
+ | 6 | 7 | 8 |
101
+ -------------
102
+ ```
103
+ A standard 3×3 grid where adjacent rooms are connected. The agent can navigate between rooms through doorways, with connections forming a fully connected grid pattern.
104
+
105
+ #### 2. SpiralNineRooms (3×3 Spiral Pattern)
106
+ ```
107
+ -------------
108
+ | 0 | 1 | 2 |
109
+ -------------
110
+ | 3 | 4 | 5 |
111
+ -------------
112
+ | 6 | 7 | 8 |
113
+ -------------
114
+ ```
115
+ Same room layout as NineRooms but with a spiral connection pattern. Only specific room pairs are connected, creating a more challenging navigation task with fewer available paths.
116
+
117
+ #### 3. TwentyFiveRooms (5×5 Grid)
118
+ ```
119
+ ---------------------
120
+ | 0 | 1 | 2 | 3 | 4 |
121
+ ---------------------
122
+ | 5 | 6 | 7 | 8 | 9 |
123
+ ---------------------
124
+ |10 |11 |12 |13 |14 |
125
+ ---------------------
126
+ |15 |16 |17 |18 |19 |
127
+ ---------------------
128
+ |20 |21 |22 |23 |24 |
129
+ ---------------------
130
+ ```
131
+ A larger 5×5 grid environment with 25 rooms, providing more complex navigation challenges and longer episode lengths.
132
+
133
+ ### Observation Types
134
+
135
+ Each environment supports three different observation modes:
136
+
137
+ - **`TOP_DOWN_PARTIAL`** (default): Agent-centered partial top-down view with limited visibility range (POMDP)
138
+ - **`TOP_DOWN_FULL`**: Complete top-down view showing the entire environment
139
+ - **`FIRST_PERSON`**: 3D first-person perspective view from the agent's current position
140
+
141
+ ### Action Space
142
+
143
+ - **Discrete Actions** (default): 7 discrete actions (turn left/right, move forward/backward, strafe left/right, no-op)
144
+ - **Continuous Actions**: Continuous control with `continuous=True` parameter
145
+
146
+ ### Environment Configuration
147
+
148
+ All environments can be customized with the following parameters:
149
+
150
+ ```python
151
+ from miniworld_maze import NineRoomsEnvironmentWrapper
152
+ from miniworld_maze.core import ObservationLevel
153
+
154
+ env = NineRoomsEnvironmentWrapper(
155
+ variant="NineRooms", # "NineRooms", "SpiralNineRooms", "TwentyFiveRooms"
156
+ obs_level=ObservationLevel.TOP_DOWN_PARTIAL, # Observation type
157
+ continuous=False, # Use continuous actions
158
+ size=64, # Observation image size (64x64)
159
+ room_size=5, # Size of each room in environment units
160
+ door_size=2, # Size of doors between rooms
161
+ agent_mode="empty", # Agent rendering: "empty", "circle", "triangle"
162
+ )
163
+ ```
164
+
165
+ ### Observation Format
166
+
167
+ The environment returns observations in dictionary format:
168
+
169
+ ```python
170
+ obs = {
171
+ 'observation': np.ndarray, # (64, 64, 3) RGB image of current view
172
+ 'desired_goal': np.ndarray, # (64, 64, 3) RGB image of goal location
173
+ 'achieved_goal': np.ndarray, # (64, 64, 3) RGB image of current state
174
+ }
175
+ ```
176
+
177
+ ### Reward Structure
178
+
179
+ - **Goal reaching**: Positive reward when agent reaches the goal location
180
+ - **Step penalty**: Small negative reward per step to encourage efficiency
181
+ - **Episode termination**: When goal is reached or maximum steps exceeded
182
+
183
+
184
+ ## License
185
+
186
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Basic usage example for miniworld-maze environments.
4
+
5
+ This is a minimal example showing how to create and interact with the environment.
6
+ """
7
+
8
+ from miniworld_maze import NineRoomsEnvironmentWrapper
9
+
10
+
11
+ def main():
12
+ # Create environment
13
+ env = NineRoomsEnvironmentWrapper(variant="NineRooms", size=64)
14
+ obs, info = env.reset()
15
+
16
+ # obs is a dictionary containing:
17
+ # - 'observation': (64, 64, 3) RGB image array
18
+ # - 'desired_goal': (64, 64, 3) RGB image of the goal state
19
+ # - 'achieved_goal': (64, 64, 3) RGB image of the current state
20
+
21
+ # Take a few random actions
22
+ for step in range(10):
23
+ action = env.action_space.sample()
24
+ obs, reward, terminated, truncated, info = env.step(action)
25
+
26
+ print(f"Step {step + 1}: reward={reward:.3f}, terminated={terminated}")
27
+
28
+ if terminated or truncated:
29
+ obs, info = env.reset()
30
+
31
+ env.close()
32
+ print("Environment closed successfully!")
33
+
34
+
35
+ if __name__ == "__main__":
36
+ main()