mettagrid 0.2__tar.gz → 0.2.0.1__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 mettagrid might be problematic. Click here for more details.

Files changed (178) hide show
  1. {mettagrid-0.2 → mettagrid-0.2.0.1}/PKG-INFO +2 -2
  2. {mettagrid-0.2 → mettagrid-0.2.0.1}/bazel_build.py +15 -5
  3. {mettagrid-0.2 → mettagrid-0.2.0.1}/pyproject.toml +3 -3
  4. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/get_output.hpp +1 -31
  5. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/builder/envs.py +4 -4
  6. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_c.cpp +0 -29
  7. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_c.pyi +2 -0
  8. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_c_config.py +1 -12
  9. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_config.hpp +7 -3
  10. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_config.py +4 -11
  11. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_env.py +44 -1
  12. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/agent.hpp +1 -4
  13. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/mettagrid.egg-info/PKG-INFO +2 -2
  14. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/mettagrid.egg-info/SOURCES.txt +0 -4
  15. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/mettagrid.egg-info/requires.txt +1 -1
  16. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_action_compatibility.py +8 -9
  17. mettagrid-0.2/MODULE.bazel.lock +0 -809
  18. mettagrid-0.2/src/metta/mettagrid/actions/place_box.hpp +0 -41
  19. mettagrid-0.2/src/metta/mettagrid/mettagrid_c.so +0 -0
  20. mettagrid-0.2/src/metta/mettagrid/objects/box.hpp +0 -51
  21. {mettagrid-0.2 → mettagrid-0.2.0.1}/.bazelrc +0 -0
  22. {mettagrid-0.2 → mettagrid-0.2.0.1}/BUILD.bazel +0 -0
  23. {mettagrid-0.2 → mettagrid-0.2.0.1}/LICENSE +0 -0
  24. {mettagrid-0.2 → mettagrid-0.2.0.1}/MANIFEST.in +0 -0
  25. {mettagrid-0.2 → mettagrid-0.2.0.1}/MODULE.bazel +0 -0
  26. {mettagrid-0.2 → mettagrid-0.2.0.1}/README.md +0 -0
  27. {mettagrid-0.2 → mettagrid-0.2.0.1}/setup.cfg +0 -0
  28. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/__init__.py +0 -0
  29. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/action_handler.hpp +0 -0
  30. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/__init__.py +0 -0
  31. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/attack.hpp +0 -0
  32. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/change_color.hpp +0 -0
  33. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/change_glyph.hpp +0 -0
  34. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/move.hpp +0 -0
  35. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/noop.hpp +0 -0
  36. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/orientation.hpp +0 -0
  37. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/put_recipe_items.hpp +0 -0
  38. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/rotate.hpp +0 -0
  39. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/actions/swap.hpp +0 -0
  40. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/builder/__init__.py +0 -0
  41. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/builder/building.py +0 -0
  42. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/builder/empty_converters.py +0 -0
  43. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/char_encoder.py +0 -0
  44. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/config.py +0 -0
  45. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/core.py +0 -0
  46. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/episode_stats_db.py +0 -0
  47. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/event.hpp +0 -0
  48. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/grid.hpp +0 -0
  49. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/grid_object.hpp +0 -0
  50. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/grid_object_formatter.py +0 -0
  51. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/gym_env.py +0 -0
  52. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/gym_wrapper.py +0 -0
  53. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/hash.hpp +0 -0
  54. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/__init__.py +0 -0
  55. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/ascii.py +0 -0
  56. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/map_builder.py +0 -0
  57. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/maze.py +0 -0
  58. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/perimeter_incontext.py +0 -0
  59. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/random.py +0 -0
  60. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/map_builder/utils.py +0 -0
  61. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/__init__.py +0 -0
  62. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/load.py +0 -0
  63. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/mapgen.py +0 -0
  64. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/mapgen_ascii.py +0 -0
  65. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/random/float.py +0 -0
  66. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/random/int.py +0 -0
  67. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scene.py +0 -0
  68. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/ascii.py +0 -0
  69. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/auto.py +0 -0
  70. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/bsp.py +0 -0
  71. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/convchain.py +0 -0
  72. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/copy_grid.py +0 -0
  73. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/grid_altars.py +0 -0
  74. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/inline_ascii.py +0 -0
  75. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/layout.py +0 -0
  76. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/make_connected.py +0 -0
  77. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/maze.py +0 -0
  78. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/mean_distance.py +0 -0
  79. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/mirror.py +0 -0
  80. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/multi_left_and_right.py +0 -0
  81. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/nop.py +0 -0
  82. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/radial_maze.py +0 -0
  83. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/random.py +0 -0
  84. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/random_dcss_scene.py +0 -0
  85. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/random_objects.py +0 -0
  86. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/random_scene.py +0 -0
  87. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/random_yaml_scene.py +0 -0
  88. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/remove_agents.py +0 -0
  89. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/room_grid.py +0 -0
  90. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/spiral.py +0 -0
  91. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/transplant_scene.py +0 -0
  92. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/varied_terrain.py +0 -0
  93. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/wfc.py +0 -0
  94. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/scenes/yaml.py +0 -0
  95. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/tools/dcss_import.py +0 -0
  96. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/tools/gen.py +0 -0
  97. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/tools/gen_scene.py +0 -0
  98. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/tools/view.py +0 -0
  99. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/types.py +0 -0
  100. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/ascii_grid.py +0 -0
  101. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/draw.py +0 -0
  102. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/make_scene_config.py +0 -0
  103. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/pattern.py +0 -0
  104. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/s3utils.py +0 -0
  105. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/show.py +0 -0
  106. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/storable_map.py +0 -0
  107. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/storable_map_index.py +0 -0
  108. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mapgen/utils/thumbnail.py +0 -0
  109. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/mettagrid_c.hpp +0 -0
  110. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/__init__.py +0 -0
  111. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/agent_config.hpp +0 -0
  112. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/constants.hpp +0 -0
  113. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/converter.hpp +0 -0
  114. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/converter_config.hpp +0 -0
  115. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/has_inventory.hpp +0 -0
  116. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/production_handler.hpp +0 -0
  117. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/objects/wall.hpp +0 -0
  118. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/observation_encoder.hpp +0 -0
  119. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/packed_coordinate.hpp +0 -0
  120. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/pettingzoo_env.py +0 -0
  121. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/profiling/__init__.py +0 -0
  122. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/profiling/memory_monitor.py +0 -0
  123. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/profiling/stopwatch.py +0 -0
  124. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/profiling/system_monitor.py +0 -0
  125. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/puffer_base.py +0 -0
  126. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/py.typed +0 -0
  127. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/renderer/hermes.cpp +0 -0
  128. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/renderer/hermes.hpp +0 -0
  129. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/renderer/hermes.py +0 -0
  130. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/renderer/miniscope.py +0 -0
  131. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/renderer/nethack.py +0 -0
  132. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/replay_writer.py +0 -0
  133. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/stats_tracker.hpp +0 -0
  134. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/stats_writer.py +0 -0
  135. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/__init__.py +0 -0
  136. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/actions.py +0 -0
  137. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/mapgen.py +0 -0
  138. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/observation_helper.py +0 -0
  139. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/orientation.py +0 -0
  140. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/test_support/token_types.py +0 -0
  141. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/types.hpp +0 -0
  142. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/__init__.py +0 -0
  143. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/debug.py +0 -0
  144. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/dict_utils.py +0 -0
  145. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/diversity.py +0 -0
  146. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/file.py +0 -0
  147. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/metta/mettagrid/util/module.py +0 -0
  148. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/mettagrid.egg-info/dependency_links.txt +0 -0
  149. {mettagrid-0.2 → mettagrid-0.2.0.1}/src/mettagrid.egg-info/top_level.txt +0 -0
  150. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_actions.py +0 -0
  151. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_attack_resource_exception.py +0 -0
  152. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_buffer_reuse.py +0 -0
  153. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_buffers.py +0 -0
  154. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_converter.py +0 -0
  155. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_diversity.py +0 -0
  156. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_env_config_serialization.py +0 -0
  157. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_env_map.py +0 -0
  158. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_forbidden_imports.py +0 -0
  159. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_gdrive.py +0 -0
  160. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_global_obs_config.py +0 -0
  161. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_global_observations.py +0 -0
  162. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_global_reward_observations.py +0 -0
  163. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_gym_env.py +0 -0
  164. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_interactive.py +0 -0
  165. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_leaks.py +0 -0
  166. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_mettagrid.py +0 -0
  167. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_move.py +0 -0
  168. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_new_env_hierarchy.py +0 -0
  169. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_observations.py +0 -0
  170. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_pettingzoo_env.py +0 -0
  171. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_pufferlib_integration.py +0 -0
  172. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_resource_loss.py +0 -0
  173. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_rewards.py +0 -0
  174. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_rotate.py +0 -0
  175. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_stats_rewards.py +0 -0
  176. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_stats_writer.py +0 -0
  177. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_swap.py +0 -0
  178. {mettagrid-0.2 → mettagrid-0.2.0.1}/tests/test_visitation_counts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mettagrid
3
- Version: 0.2
3
+ Version: 0.2.0.1
4
4
  Summary: A fast grid-based open-ended MARL environment
5
5
  Author-email: David Bloomin <daveey@gmail.com>
6
6
  License-Expression: MIT
@@ -18,7 +18,7 @@ Requires-Dist: google-auth-oauthlib>=1.0.0
18
18
  Requires-Dist: gymnasium==0.29.1
19
19
  Requires-Dist: matplotlib>=3.10.3
20
20
  Requires-Dist: numpy<2,>=1.26.4
21
- Requires-Dist: omegaconf>=2.4.0.dev3
21
+ Requires-Dist: omegaconf>=2.3.0
22
22
  Requires-Dist: duckdb>=1.3.0
23
23
  Requires-Dist: pettingzoo<1.25,>=1.24.1
24
24
  Requires-Dist: pufferlib<3.1.0,>=3.0.0
@@ -23,6 +23,7 @@ from setuptools.build_meta import (
23
23
  prepare_metadata_for_build_editable,
24
24
  prepare_metadata_for_build_wheel,
25
25
  )
26
+ from setuptools.dist import Distribution
26
27
 
27
28
  PROJECT_ROOT = Path(__file__).resolve().parent
28
29
 
@@ -31,9 +32,7 @@ def _run_bazel_build() -> None:
31
32
  """Run Bazel build to compile the C++ extension."""
32
33
  # Check if bazel is available
33
34
  if shutil.which("bazel") is None:
34
- raise RuntimeError(
35
- "Bazel is required to build metta-mettagrid. Please install Bazel: https://bazel.build/install"
36
- )
35
+ raise RuntimeError("Bazel is required to build mettagrid. Please install Bazel: https://bazel.build/install")
37
36
 
38
37
  # Determine build configuration from environment
39
38
  debug = os.environ.get("DEBUG", "").lower() in ("1", "true", "yes")
@@ -52,6 +51,7 @@ def _run_bazel_build() -> None:
52
51
  "bazel",
53
52
  "build",
54
53
  f"--config={config}",
54
+ "--verbose_failures",
55
55
  "//:mettagrid_c",
56
56
  ]
57
57
 
@@ -59,7 +59,10 @@ def _run_bazel_build() -> None:
59
59
  result = subprocess.run(cmd, cwd=PROJECT_ROOT, capture_output=True, text=True)
60
60
 
61
61
  if result.returncode != 0:
62
- print(f"Bazel build failed:\n{result.stderr}", file=sys.stderr)
62
+ print("Bazel build failed. STDERR:", file=sys.stderr)
63
+ print(result.stderr, file=sys.stderr)
64
+ print("Bazel build STDOUT:", file=sys.stderr)
65
+ print(result.stdout, file=sys.stderr)
63
66
  raise RuntimeError("Bazel build failed")
64
67
 
65
68
  # Copy the built extension to the package directory
@@ -92,7 +95,14 @@ def _run_bazel_build() -> None:
92
95
  def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
93
96
  """Build a wheel, compiling the C++ extension with Bazel first."""
94
97
  _run_bazel_build()
95
- return _build_wheel(wheel_directory, config_settings, metadata_directory)
98
+ # Ensure wheel is tagged as non-pure (platform-specific) since we bundle a native extension
99
+ # Setuptools/wheel derive purity from Distribution.has_ext_modules(). Monkeypatch to force True.
100
+ original_has_ext_modules = Distribution.has_ext_modules
101
+ try:
102
+ Distribution.has_ext_modules = lambda self: True # type: ignore[assignment]
103
+ return _build_wheel(wheel_directory, config_settings, metadata_directory)
104
+ finally:
105
+ Distribution.has_ext_modules = original_has_ext_modules
96
106
 
97
107
 
98
108
  def build_editable(wheel_directory, config_settings=None, metadata_directory=None):
@@ -4,8 +4,8 @@ build-backend = "bazel_build"
4
4
  backend-path = ["."]
5
5
 
6
6
  [project]
7
- name = "mettagrid"
8
- version = "0.2"
7
+ name = "mettagrid" # Do not change! Has to be 'mettagrid' for our PyPi package
8
+ version = "0.2.0.1"
9
9
  description = "A fast grid-based open-ended MARL environment"
10
10
  authors = [{ name = "David Bloomin", email = "daveey@gmail.com" }]
11
11
  requires-python = "==3.11.7"
@@ -29,7 +29,7 @@ dependencies = [
29
29
  "gymnasium==0.29.1",
30
30
  "matplotlib>=3.10.3",
31
31
  "numpy>=1.26.4,<2",
32
- "omegaconf>=2.4.0.dev3",
32
+ "omegaconf>=2.3.0",
33
33
  "duckdb>=1.3.0",
34
34
  "pettingzoo>=1.24.1,<1.25",
35
35
  "pufferlib>=3.0.0,<3.1.0",
@@ -26,11 +26,7 @@ protected:
26
26
  // Once we generalize this to `get`, we should be able to get from any HasInventory object, which
27
27
  // should include agents. That's (e.g.) why we're checking inventory_is_accessible.
28
28
  Converter* converter = dynamic_cast<Converter*>(_grid->object_at(target_loc));
29
- Box* box = dynamic_cast<Box*>(_grid->object_at(target_loc));
30
- if (!converter && !box) {
31
- return false;
32
- }
33
- // If converter, get output from converter
29
+
34
30
  if (converter) {
35
31
  if (!converter->inventory_is_accessible()) {
36
32
  return false;
@@ -55,32 +51,6 @@ protected:
55
51
  }
56
52
  return resources_taken;
57
53
  }
58
-
59
- // If box, pick up box if allowed
60
- if (box) {
61
- if (actor->agent_id == box->creator_agent_id) {
62
- // Creator cannot open their own box
63
- return false;
64
- }
65
- // If the creator of the box is an agent, return blue battery to creator and penalize creator
66
- if (box->creator_agent_id != 255) {
67
- Agent* creator = dynamic_cast<Agent*>(_grid->object(box->creator_agent_object_id));
68
- if (!creator) {
69
- return false;
70
- }
71
- // Return required resources to create box to creator inventory
72
- for (const auto& [item, amount] : box->returned_resources) {
73
- if (amount > 0) {
74
- creator->update_inventory(item, amount);
75
- }
76
- }
77
- }
78
-
79
- // Reward the agent for opening the box and teleport back to top-left corner
80
- _grid->ghost_move_object(box->id, GridLocation(0, 0, GridLayer::ObjectLayer));
81
- actor->stats.add("box.opened", 1.0f);
82
- return true;
83
- }
84
54
  return false;
85
55
  }
86
56
  };
@@ -112,7 +112,7 @@ def make_navigation(num_agents: int) -> MettaGridConfig:
112
112
  resource_names=["heart"],
113
113
  actions=ActionsConfig(
114
114
  move=ActionConfig(),
115
- rotate=ActionConfig(),
115
+ rotate=ActionConfig(enabled=False),
116
116
  get_items=ActionConfig(),
117
117
  ),
118
118
  agent=AgentConfig(
@@ -149,7 +149,7 @@ def make_navigation_sequence(num_agents: int) -> MettaGridConfig:
149
149
  resource_names=["heart", "ore_red", "battery_red"],
150
150
  actions=ActionsConfig(
151
151
  move=ActionConfig(),
152
- rotate=ActionConfig(),
152
+ rotate=ActionConfig(enabled=False),
153
153
  get_items=ActionConfig(),
154
154
  ),
155
155
  agent=AgentConfig(
@@ -173,7 +173,7 @@ def make_navigation_sequence(num_agents: int) -> MettaGridConfig:
173
173
 
174
174
 
175
175
  def make_icl_resource_chain(
176
- num_agents: int, max_steps, game_objects: dict, map_builder_objects: dict
176
+ num_agents: int, max_steps, game_objects: dict, map_builder_objects: dict, width: int = 6, height: int = 6
177
177
  ) -> MettaGridConfig:
178
178
  game_objects["wall"] = empty_converters.wall
179
179
  cfg = MettaGridConfig(
@@ -184,7 +184,7 @@ def make_icl_resource_chain(
184
184
  map_builder=MapGen.Config(
185
185
  instances=num_agents,
186
186
  instance_map=PerimeterInContextMapBuilder.Config(
187
- agents=1, width=6, height=6, objects=map_builder_objects
187
+ agents=1, width=width, height=height, objects=map_builder_objects
188
188
  ),
189
189
  ),
190
190
  actions=ActionsConfig(
@@ -16,7 +16,6 @@
16
16
  #include "actions/get_output.hpp"
17
17
  #include "actions/move.hpp"
18
18
  #include "actions/noop.hpp"
19
- #include "actions/place_box.hpp"
20
19
  #include "actions/put_recipe_items.hpp"
21
20
  #include "actions/rotate.hpp"
22
21
  #include "actions/swap.hpp"
@@ -24,7 +23,6 @@
24
23
  #include "grid.hpp"
25
24
  #include "hash.hpp"
26
25
  #include "objects/agent.hpp"
27
- #include "objects/box.hpp"
28
26
  #include "objects/constants.hpp"
29
27
  #include "objects/converter.hpp"
30
28
  #include "objects/converter_config.hpp"
@@ -85,8 +83,6 @@ MettaGrid::MettaGrid(const GameConfig& game_config, const py::list map, unsigned
85
83
  for (const auto& [action_name, action_config] : game_config.actions) {
86
84
  if (action_name == "put_items") {
87
85
  _action_handlers.push_back(std::make_unique<PutRecipeItems>(*action_config));
88
- } else if (action_name == "place_box") {
89
- _action_handlers.push_back(std::make_unique<PlaceBox>(*action_config));
90
86
  } else if (action_name == "get_items") {
91
87
  _action_handlers.push_back(std::make_unique<GetOutput>(*action_config));
92
88
  } else if (action_name == "noop") {
@@ -168,14 +164,6 @@ MettaGrid::MettaGrid(const GameConfig& game_config, const py::list map, unsigned
168
164
  continue;
169
165
  }
170
166
 
171
- const BoxConfig* box_config = dynamic_cast<const BoxConfig*>(object_cfg);
172
- if (box_config) {
173
- Box* box = new Box(r, c, *box_config, 255, 255); // Default creator values
174
- _grid->add_object(box);
175
- _stats->incr("objects." + cell);
176
- continue;
177
- }
178
-
179
167
  const ConverterConfig* converter_config = dynamic_cast<const ConverterConfig*>(object_cfg);
180
168
  if (converter_config) {
181
169
  // Create a new ConverterConfig with the recipe offsets from the observation encoder
@@ -204,14 +192,6 @@ MettaGrid::MettaGrid(const GameConfig& game_config, const py::list map, unsigned
204
192
  if (_global_obs_config.visitation_counts) {
205
193
  agent->init_visitation_grid(height, width);
206
194
  }
207
- // add agent box
208
- if (game_config.objects.contains("box")) {
209
- const BoxConfig* local_box_cfg = dynamic_cast<const BoxConfig*>(game_config.objects.at("box").get());
210
- if (local_box_cfg) {
211
- agent->box = new Box(0, 0, *local_box_cfg, agent->id, static_cast<unsigned char>(agent->agent_id));
212
- _grid->ghost_add_object(agent->box);
213
- }
214
- }
215
195
  add_agent(agent);
216
196
  _group_sizes[agent->group] += 1;
217
197
  continue;
@@ -929,15 +909,6 @@ PYBIND11_MODULE(mettagrid_c, m) {
929
909
 
930
910
  bind_wall_config(m);
931
911
 
932
- py::class_<BoxConfig, GridObjectConfig, std::shared_ptr<BoxConfig>>(m, "BoxConfig")
933
- .def(py::init<TypeId, const std::string&, const std::map<InventoryItem, InventoryQuantity>&>(),
934
- py::arg("type_id"),
935
- py::arg("type_name") = "box",
936
- py::arg("returned_resources"))
937
- .def_readwrite("type_id", &BoxConfig::type_id)
938
- .def_readwrite("type_name", &BoxConfig::type_name)
939
- .def_readwrite("returned_resources", &BoxConfig::returned_resources);
940
-
941
912
  // ##MettaGridConfig
942
913
  // We expose these as much as we can to Python. Defining the initializer (and the object's constructor) means
943
914
  // we can create these in Python as AgentConfig(**agent_config_dict). And then we expose the fields individually.
@@ -186,6 +186,7 @@ class GameConfig:
186
186
  track_movement_metrics: bool = False,
187
187
  recipe_details_obs: bool = False,
188
188
  allow_diagonals: bool = False,
189
+ reward_estimates: Optional[dict[str, float]] = None,
189
190
  ) -> None: ...
190
191
  num_agents: int
191
192
  max_steps: int
@@ -200,6 +201,7 @@ class GameConfig:
200
201
  track_movement_metrics: bool
201
202
  recipe_details_obs: bool
202
203
  allow_diagonals: bool
204
+ reward_estimates: Optional[dict[str, float]]
203
205
 
204
206
  class MettaGrid:
205
207
  obs_width: int
@@ -1,13 +1,12 @@
1
1
  from metta.mettagrid.mettagrid_c import ActionConfig as CppActionConfig
2
2
  from metta.mettagrid.mettagrid_c import AgentConfig as CppAgentConfig
3
3
  from metta.mettagrid.mettagrid_c import AttackActionConfig as CppAttackActionConfig
4
- from metta.mettagrid.mettagrid_c import BoxConfig as CppBoxConfig
5
4
  from metta.mettagrid.mettagrid_c import ChangeGlyphActionConfig as CppChangeGlyphActionConfig
6
5
  from metta.mettagrid.mettagrid_c import ConverterConfig as CppConverterConfig
7
6
  from metta.mettagrid.mettagrid_c import GameConfig as CppGameConfig
8
7
  from metta.mettagrid.mettagrid_c import GlobalObsConfig as CppGlobalObsConfig
9
8
  from metta.mettagrid.mettagrid_c import WallConfig as CppWallConfig
10
- from metta.mettagrid.mettagrid_config import AgentConfig, BoxConfig, ConverterConfig, GameConfig, WallConfig
9
+ from metta.mettagrid.mettagrid_config import AgentConfig, ConverterConfig, GameConfig, WallConfig
11
10
 
12
11
 
13
12
  def recursive_update(d, u):
@@ -156,16 +155,6 @@ def convert_to_cpp_game_config(mettagrid_config: dict | GameConfig):
156
155
  swappable=object_config.swappable,
157
156
  )
158
157
  objects_cpp_params[object_type] = cpp_wall_config
159
- elif isinstance(object_config, BoxConfig):
160
- returned_resources = game_config.actions.place_box.consumed_resources
161
- cpp_box_config = CppBoxConfig(
162
- type_id=object_config.type_id,
163
- type_name=object_type,
164
- returned_resources={
165
- resource_name_to_id[k]: v for k, v in returned_resources.items() if k in resource_name_to_id
166
- },
167
- )
168
- objects_cpp_params[object_type] = cpp_box_config
169
158
  else:
170
159
  raise ValueError(f"Unknown object type: {object_type}")
171
160
 
@@ -42,6 +42,7 @@ struct GameConfig {
42
42
  bool track_movement_metrics = false;
43
43
  bool recipe_details_obs = false;
44
44
  bool allow_diagonals = false;
45
+ std::map<std::string, float> reward_estimates = {};
45
46
  };
46
47
 
47
48
  namespace py = pybind11;
@@ -79,7 +80,8 @@ inline void bind_game_config(py::module& m) {
79
80
  // FEATURE FLAGS
80
81
  bool,
81
82
  bool,
82
- bool>(),
83
+ bool,
84
+ const std::map<std::string, float>&>(),
83
85
  py::arg("num_agents"),
84
86
  py::arg("max_steps"),
85
87
  py::arg("episode_truncates"),
@@ -95,7 +97,8 @@ inline void bind_game_config(py::module& m) {
95
97
  // FEATURE FLAGS
96
98
  py::arg("track_movement_metrics"),
97
99
  py::arg("recipe_details_obs") = false,
98
- py::arg("allow_diagonals") = false)
100
+ py::arg("allow_diagonals") = false,
101
+ py::arg("reward_estimates") = std::map<std::string, float>())
99
102
  .def_readwrite("num_agents", &GameConfig::num_agents)
100
103
  .def_readwrite("max_steps", &GameConfig::max_steps)
101
104
  .def_readwrite("episode_truncates", &GameConfig::episode_truncates)
@@ -116,7 +119,8 @@ inline void bind_game_config(py::module& m) {
116
119
  // FEATURE FLAGS
117
120
  .def_readwrite("track_movement_metrics", &GameConfig::track_movement_metrics)
118
121
  .def_readwrite("recipe_details_obs", &GameConfig::recipe_details_obs)
119
- .def_readwrite("allow_diagonals", &GameConfig::allow_diagonals);
122
+ .def_readwrite("allow_diagonals", &GameConfig::allow_diagonals)
123
+ .def_readwrite("reward_estimates", &GameConfig::reward_estimates);
120
124
  }
121
125
 
122
126
  #endif // METTAGRID_CONFIG_HPP_
@@ -74,8 +74,7 @@ class ActionsConfig(Config):
74
74
  noop: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=False))
75
75
  move: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=True)) # Default movement action
76
76
  rotate: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=False))
77
- put_items: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=False))
78
- place_box: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=False))
77
+ put_items: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=True))
79
78
  get_items: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=True))
80
79
  attack: AttackActionConfig = Field(default_factory=lambda: AttackActionConfig(enabled=False))
81
80
  swap: ActionConfig = Field(default_factory=lambda: ActionConfig(enabled=False))
@@ -107,14 +106,6 @@ class WallConfig(Config):
107
106
  swappable: bool = Field(default=False)
108
107
 
109
108
 
110
- class BoxConfig(Config):
111
- """Python box configuration."""
112
-
113
- type_id: int = Field(default=0, ge=0, le=255)
114
- # We don't allow setting of returned_resources -- it should always match
115
- # the consumed_resources by place_box.
116
-
117
-
118
109
  class ConverterConfig(Config):
119
110
  """Python converter configuration."""
120
111
 
@@ -160,7 +151,7 @@ class GameConfig(Config):
160
151
  agents: list[AgentConfig] = Field(default_factory=list)
161
152
  actions: ActionsConfig = Field(default_factory=lambda: ActionsConfig(noop=ActionConfig()))
162
153
  global_obs: GlobalObsConfig = Field(default_factory=GlobalObsConfig)
163
- objects: dict[str, ConverterConfig | WallConfig | BoxConfig] = Field(default_factory=dict)
154
+ objects: dict[str, ConverterConfig | WallConfig] = Field(default_factory=dict)
164
155
  # these are not used in the C++ code, but we allow them to be set for other uses.
165
156
  # E.g., templates can use params as a place where values are expected to be written,
166
157
  # and other parts of the template can read from there.
@@ -180,6 +171,8 @@ class GameConfig(Config):
180
171
  )
181
172
  allow_diagonals: bool = Field(default=False, description="Enable actions to be aware of diagonal orientations")
182
173
 
174
+ reward_estimates: Optional[dict[str, float]] = Field(default=None)
175
+
183
176
 
184
177
  class MettaGridConfig(Config):
185
178
  """Environment configuration."""
@@ -59,6 +59,8 @@ class MettaGridEnv(MettaGridPufferBase):
59
59
  self._episode_id: str | None = None
60
60
  self._last_reset_ts = datetime.datetime.now()
61
61
  self._is_training = is_training
62
+ self._label_completions = {"completed_tasks": [], "completion_rates": {}}
63
+ self.per_label_rewards = {}
62
64
 
63
65
  # DesyncEpisodes - when training we want to stagger experience. The first episode
64
66
  # will end early so that the next episode can begin at a different time on each worker.
@@ -125,7 +127,25 @@ class MettaGridEnv(MettaGridPufferBase):
125
127
  self.timer.start("thread_idle")
126
128
  return observations, rewards, terminals, truncations, infos
127
129
 
128
- def _process_episode_completion(self, infos: Dict[str, Any]) -> None:
130
+ def _update_label_completions(self, moving_avg_window: int = 500) -> None:
131
+ """Update label completions."""
132
+ label = self.mg_config.label
133
+
134
+ # keep track of a list of the last 500 labels
135
+ if len(self._label_completions["completed_tasks"]) >= moving_avg_window:
136
+ self._label_completions["completed_tasks"].pop(0)
137
+ self._label_completions["completed_tasks"].append(label)
138
+
139
+ # moving average of the completion rates
140
+ self._label_completions["completion_rates"] = {t: 0 for t in set(self._label_completions["completed_tasks"])}
141
+ for t in self._label_completions["completed_tasks"]:
142
+ self._label_completions["completion_rates"][t] += 1
143
+ self._label_completions["completion_rates"] = {
144
+ t: self._label_completions["completion_rates"][t] / len(self._label_completions["completed_tasks"])
145
+ for t in self._label_completions["completion_rates"]
146
+ }
147
+
148
+ def _process_episode_completion(self, infos: Dict[str, Any], moving_avg_window: int = 500, alpha=0.9) -> None:
129
149
  """Process episode completion - stats, etc."""
130
150
  self.timer.start("process_episode_stats")
131
151
 
@@ -148,6 +168,29 @@ class MettaGridEnv(MettaGridPufferBase):
148
168
  for n, v in infos["agent"].items():
149
169
  infos["agent"][n] = v / self.num_agents
150
170
 
171
+ # If reward estimates are set, plot them compared to the mean reward
172
+ if self.mg_config.game.reward_estimates:
173
+ infos["reward_estimates"] = {}
174
+ infos["reward_estimates"]["diff_from_efficient_optimal"] = (
175
+ self.mg_config.game.reward_estimates["most_efficient_optimal_reward"] - episode_rewards.mean()
176
+ )
177
+ infos["reward_estimates"]["diff_from_inefficient_optimal"] = (
178
+ self.mg_config.game.reward_estimates["least_efficient_optimal_reward"] - episode_rewards.mean()
179
+ )
180
+
181
+ self._update_label_completions(moving_avg_window)
182
+
183
+ # only plot label completions once we have a full moving average window, to prevent initial bias
184
+ if len(self._label_completions["completed_tasks"]) == moving_avg_window:
185
+ infos["label_completions"] = self._label_completions["completion_rates"]
186
+
187
+ if self.mg_config.label not in self.per_label_rewards:
188
+ self.per_label_rewards[self.mg_config.label] = 0
189
+ self.per_label_rewards[self.mg_config.label] += episode_rewards.mean()
190
+ infos["per_label_rewards"] = (
191
+ alpha * self.per_label_rewards[self.mg_config.label] + (1 - alpha) * episode_rewards.mean()
192
+ )
193
+
151
194
  # Add attributes
152
195
  attributes: Dict[str, Any] = {
153
196
  "seed": self._current_seed,
@@ -10,7 +10,6 @@
10
10
  #include "../stats_tracker.hpp"
11
11
  #include "agent_config.hpp"
12
12
  #include "constants.hpp"
13
- #include "objects/box.hpp"
14
13
  #include "types.hpp"
15
14
 
16
15
  class Agent : public GridObject {
@@ -44,7 +43,6 @@ public:
44
43
  GridLocation prev_location;
45
44
  std::string prev_action_name;
46
45
  unsigned int steps_without_motion;
47
- Box* box;
48
46
 
49
47
  Agent(GridCoord r, GridCoord c, const AgentConfig& config)
50
48
  : group(config.group_id),
@@ -67,8 +65,7 @@ public:
67
65
  reward(nullptr),
68
66
  prev_location(r, c, GridLayer::AgentLayer),
69
67
  prev_action_name(""),
70
- steps_without_motion(0),
71
- box(nullptr) {
68
+ steps_without_motion(0) {
72
69
  populate_initial_inventory(config.initial_inventory);
73
70
  GridObject::init(config.type_id, config.type_name, GridLocation(r, c, GridLayer::AgentLayer));
74
71
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mettagrid
3
- Version: 0.2
3
+ Version: 0.2.0.1
4
4
  Summary: A fast grid-based open-ended MARL environment
5
5
  Author-email: David Bloomin <daveey@gmail.com>
6
6
  License-Expression: MIT
@@ -18,7 +18,7 @@ Requires-Dist: google-auth-oauthlib>=1.0.0
18
18
  Requires-Dist: gymnasium==0.29.1
19
19
  Requires-Dist: matplotlib>=3.10.3
20
20
  Requires-Dist: numpy<2,>=1.26.4
21
- Requires-Dist: omegaconf>=2.4.0.dev3
21
+ Requires-Dist: omegaconf>=2.3.0
22
22
  Requires-Dist: duckdb>=1.3.0
23
23
  Requires-Dist: pettingzoo<1.25,>=1.24.1
24
24
  Requires-Dist: pufferlib<3.1.0,>=3.0.0
@@ -3,7 +3,6 @@ BUILD.bazel
3
3
  LICENSE
4
4
  MANIFEST.in
5
5
  MODULE.bazel
6
- MODULE.bazel.lock
7
6
  README.md
8
7
  bazel_build.py
9
8
  pyproject.toml
@@ -23,7 +22,6 @@ src/metta/mettagrid/hash.hpp
23
22
  src/metta/mettagrid/mettagrid_c.cpp
24
23
  src/metta/mettagrid/mettagrid_c.hpp
25
24
  src/metta/mettagrid/mettagrid_c.pyi
26
- src/metta/mettagrid/mettagrid_c.so
27
25
  src/metta/mettagrid/mettagrid_c_config.py
28
26
  src/metta/mettagrid/mettagrid_config.hpp
29
27
  src/metta/mettagrid/mettagrid_config.py
@@ -45,7 +43,6 @@ src/metta/mettagrid/actions/get_output.hpp
45
43
  src/metta/mettagrid/actions/move.hpp
46
44
  src/metta/mettagrid/actions/noop.hpp
47
45
  src/metta/mettagrid/actions/orientation.hpp
48
- src/metta/mettagrid/actions/place_box.hpp
49
46
  src/metta/mettagrid/actions/put_recipe_items.hpp
50
47
  src/metta/mettagrid/actions/rotate.hpp
51
48
  src/metta/mettagrid/actions/swap.hpp
@@ -111,7 +108,6 @@ src/metta/mettagrid/mapgen/utils/thumbnail.py
111
108
  src/metta/mettagrid/objects/__init__.py
112
109
  src/metta/mettagrid/objects/agent.hpp
113
110
  src/metta/mettagrid/objects/agent_config.hpp
114
- src/metta/mettagrid/objects/box.hpp
115
111
  src/metta/mettagrid/objects/constants.hpp
116
112
  src/metta/mettagrid/objects/converter.hpp
117
113
  src/metta/mettagrid/objects/converter_config.hpp
@@ -6,7 +6,7 @@ google-auth-oauthlib>=1.0.0
6
6
  gymnasium==0.29.1
7
7
  matplotlib>=3.10.3
8
8
  numpy<2,>=1.26.4
9
- omegaconf>=2.4.0.dev3
9
+ omegaconf>=2.3.0
10
10
  duckdb>=1.3.0
11
11
  pettingzoo<1.25,>=1.24.1
12
12
  pufferlib<3.1.0,>=3.0.0
@@ -110,21 +110,20 @@ class TestActionOrdering:
110
110
  # Action order should remain the same despite different config order
111
111
  assert action_names1 == action_names2, "Action order should be deterministic"
112
112
 
113
- # Verify the expected order
114
- assert action_names1 == ["get_items", "move", "noop", "rotate"]
113
+ # Verify the expected order (put_items is now enabled by default)
114
+ assert action_names1 == ["get_items", "move", "noop", "put_items", "rotate"]
115
115
 
116
116
  def test_action_indices_consistency(self, basic_config, simple_map):
117
117
  """Test that action indices remain consistent."""
118
118
  env = MettaGrid(from_mettagrid_config(basic_config), simple_map, 42)
119
119
  action_names = env.action_names()
120
120
 
121
- # Verify indices
121
+ # Verify indices (put_items is now enabled by default)
122
+ assert action_names.index("get_items") == 0
122
123
  assert action_names.index("move") == 1
123
124
  assert action_names.index("noop") == 2
124
- assert action_names.index("rotate") == 3
125
-
126
- # get_items is always present even if not explicitly configured
127
- assert action_names.index("get_items") == 0
125
+ assert action_names.index("put_items") == 3
126
+ assert action_names.index("rotate") == 4
128
127
 
129
128
 
130
129
  class TestActionValidation:
@@ -394,8 +393,8 @@ class TestSpecialActions:
394
393
  # Attack should be present
395
394
  assert "attack" in action_names
396
395
 
397
- # Check the expected order (attack comes before other actions)
398
- expected_actions = ["attack", "get_items", "move", "noop", "rotate"]
396
+ # Check the expected order (attack comes before other actions, put_items is enabled by default)
397
+ expected_actions = ["attack", "get_items", "move", "noop", "put_items", "rotate"]
399
398
  assert action_names == expected_actions
400
399
 
401
400
  def test_swap_action_registration(self, basic_config, simple_map):