mettagrid 0.0.0__cp311-cp311-macosx_11_0_arm64.whl

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

Potentially problematic release.


This version of mettagrid might be problematic. Click here for more details.

Files changed (413) hide show
  1. mettagrid/__init__.py +70 -0
  2. mettagrid/builder/__init__.py +7 -0
  3. mettagrid/builder/building.py +176 -0
  4. mettagrid/builder/empty_converters.py +85 -0
  5. mettagrid/builder/envs.py +261 -0
  6. mettagrid/config/__init__.py +35 -0
  7. mettagrid/config/config.py +106 -0
  8. mettagrid/config/mettagrid_c_config.py +414 -0
  9. mettagrid/config/mettagrid_config.py +228 -0
  10. mettagrid/core.py +297 -0
  11. mettagrid/demo.py +35 -0
  12. mettagrid/envs/__init__.py +13 -0
  13. mettagrid/envs/gym_env.py +127 -0
  14. mettagrid/envs/gym_wrapper.py +63 -0
  15. mettagrid/envs/mettagrid_env.py +310 -0
  16. mettagrid/envs/pettingzoo_env.py +213 -0
  17. mettagrid/envs/puffer_base.py +143 -0
  18. mettagrid/map_builder/__init__.py +10 -0
  19. mettagrid/map_builder/ascii.py +38 -0
  20. mettagrid/map_builder/map_builder.py +147 -0
  21. mettagrid/map_builder/maze.py +122 -0
  22. mettagrid/map_builder/perimeter_incontext.py +330 -0
  23. mettagrid/map_builder/random.py +95 -0
  24. mettagrid/map_builder/utils.py +94 -0
  25. mettagrid/mapgen/__init__.py +0 -0
  26. mettagrid/mapgen/load.py +35 -0
  27. mettagrid/mapgen/mapgen.py +322 -0
  28. mettagrid/mapgen/mapgen_ascii.py +51 -0
  29. mettagrid/mapgen/random/float.py +99 -0
  30. mettagrid/mapgen/random/int.py +50 -0
  31. mettagrid/mapgen/scene.py +323 -0
  32. mettagrid/mapgen/scenes/ascii.py +41 -0
  33. mettagrid/mapgen/scenes/auto.py +149 -0
  34. mettagrid/mapgen/scenes/bsp.py +417 -0
  35. mettagrid/mapgen/scenes/convchain.py +180 -0
  36. mettagrid/mapgen/scenes/copy_grid.py +36 -0
  37. mettagrid/mapgen/scenes/dcss/README.md +7 -0
  38. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_choice.yaml +14 -0
  39. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_double_pillar.yaml +34 -0
  40. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_feature_with_door.yaml +18 -0
  41. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_flooded_fountain.yaml +34 -0
  42. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_single_pillar.yaml +24 -0
  43. mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_underground_garden.yaml +22 -0
  44. mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_concentric_rings.yaml +38 -0
  45. mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_pentagon.yaml +32 -0
  46. mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_single_sparkle.yaml +38 -0
  47. mettagrid/mapgen/scenes/dcss/convchain/co_arrival_square_in_a_square_in_a_square.yaml +42 -0
  48. mettagrid/mapgen/scenes/dcss/convchain/co_arrival_two_rings.yaml +40 -0
  49. mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_hothouse.yaml +42 -0
  50. mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_planthouse.yaml +40 -0
  51. mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_waterhouse.yaml +44 -0
  52. mettagrid/mapgen/scenes/dcss/convchain/doesnt_arrival_eight_statues.yaml +22 -0
  53. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_boxes_within_box.yaml +36 -0
  54. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_boxorama.yaml +36 -0
  55. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_line_fractal.yaml +18 -0
  56. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_long_road.yaml +26 -0
  57. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_radiant.yaml +22 -0
  58. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_rooms_a.yaml +26 -0
  59. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_rooms_with_view.yaml +30 -0
  60. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_shelter.yaml +22 -0
  61. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_snail.yaml +42 -0
  62. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_ternary.yaml +24 -0
  63. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_three_bigger_balls.yaml +48 -0
  64. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_three_smaller_balls.yaml +40 -0
  65. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_a.yaml +6 -0
  66. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_b.yaml +10 -0
  67. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_c.yaml +12 -0
  68. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_d.yaml +14 -0
  69. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_e.yaml +14 -0
  70. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_f.yaml +16 -0
  71. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_g.yaml +16 -0
  72. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_h.yaml +16 -0
  73. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_i.yaml +10 -0
  74. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_j.yaml +14 -0
  75. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_k.yaml +10 -0
  76. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_triangle_fractal.yaml +30 -0
  77. mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_windows_large_door.yaml +20 -0
  78. mettagrid/mapgen/scenes/dcss/convchain/dpeg_chamrin_arrival_tetris.yaml +44 -0
  79. mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_angles.yaml +30 -0
  80. mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_boulevard.yaml +36 -0
  81. mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_nine_rooms.yaml +30 -0
  82. mettagrid/mapgen/scenes/dcss/convchain/ebering_hopf_link.yaml +28 -0
  83. mettagrid/mapgen/scenes/dcss/convchain/ebering_trefoil_3fold.yaml +28 -0
  84. mettagrid/mapgen/scenes/dcss/convchain/ebering_trefoil_twist.yaml +26 -0
  85. mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_druids_welcome.yaml +26 -0
  86. mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_tree_alley.yaml +14 -0
  87. mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_water_cross.yaml +18 -0
  88. mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_water_star.yaml +34 -0
  89. mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_blinker_ship.yaml +42 -0
  90. mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_huge.yaml +30 -0
  91. mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_large.yaml +26 -0
  92. mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_medium.yaml +22 -0
  93. mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_small.yaml +18 -0
  94. mettagrid/mapgen/scenes/dcss/convchain/giann_bridges.yaml +26 -0
  95. mettagrid/mapgen/scenes/dcss/convchain/giann_forest_graveyard.yaml +30 -0
  96. mettagrid/mapgen/scenes/dcss/convchain/giann_horns.yaml +20 -0
  97. mettagrid/mapgen/scenes/dcss/convchain/giann_wishing_wells.yaml +20 -0
  98. mettagrid/mapgen/scenes/dcss/convchain/grunt_arrival_crossed_arrows.yaml +30 -0
  99. mettagrid/mapgen/scenes/dcss/convchain/grunt_arrival_lava_bath.yaml +22 -0
  100. mettagrid/mapgen/scenes/dcss/convchain/ldierk_walled_garden.yaml +30 -0
  101. mettagrid/mapgen/scenes/dcss/convchain/ldierk_walled_garden_2.yaml +24 -0
  102. mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_cross.yaml +36 -0
  103. mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_funnel.yaml +36 -0
  104. mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_lava_pool.yaml +36 -0
  105. mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_chessboard.yaml +20 -0
  106. mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_flooded_house.yaml +22 -0
  107. mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_lavapool.yaml +24 -0
  108. mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_maybe_door_vault.yaml +20 -0
  109. mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_statue_moat.yaml +24 -0
  110. mettagrid/mapgen/scenes/dcss/convchain/lightli_iron_boxes.yaml +24 -0
  111. mettagrid/mapgen/scenes/dcss/convchain/lightli_molten_gateway.yaml +36 -0
  112. mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_grand_opening.yaml +38 -0
  113. mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_los_fun.yaml +50 -0
  114. mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_refuge.yaml +38 -0
  115. mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_spirals.yaml +34 -0
  116. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_diagonal_passages.yaml +30 -0
  117. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_doors.yaml +30 -0
  118. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_four_houses.yaml +30 -0
  119. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_open_corners.yaml +34 -0
  120. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_plants_in_alcoves.yaml +18 -0
  121. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_pointy.yaml +32 -0
  122. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_radiant_lines.yaml +46 -0
  123. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_three_doors.yaml +12 -0
  124. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_up_and_down.yaml +22 -0
  125. mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_wavy_path.yaml +28 -0
  126. mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_arrow.yaml +30 -0
  127. mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue.yaml +16 -0
  128. mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue_2.yaml +20 -0
  129. mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue_3.yaml +22 -0
  130. mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_large.yaml +22 -0
  131. mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_med.yaml +20 -0
  132. mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_small.yaml +18 -0
  133. mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_square_statues.yaml +18 -0
  134. mettagrid/mapgen/scenes/dcss/convchain/mushboom_english_gardens.yaml +26 -0
  135. mettagrid/mapgen/scenes/dcss/convchain/ncdulo_halloftheorcs.yaml +26 -0
  136. mettagrid/mapgen/scenes/dcss/convchain/ncdulo_lavacross.yaml +22 -0
  137. mettagrid/mapgen/scenes/dcss/convchain/ncdulo_smallfort.yaml +20 -0
  138. mettagrid/mapgen/scenes/dcss/convchain/ncdulo_watergridlock.yaml +22 -0
  139. mettagrid/mapgen/scenes/dcss/convchain/ncdulo_wetmaze.yaml +24 -0
  140. mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_crosshair.yaml +30 -0
  141. mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_depleted_hourglass.yaml +34 -0
  142. mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_water_spiral.yaml +40 -0
  143. mettagrid/mapgen/scenes/dcss/convchain/onia_arrival_mini_spirals.yaml +20 -0
  144. mettagrid/mapgen/scenes/dcss/convchain/onia_arrival_pyramid.yaml +32 -0
  145. mettagrid/mapgen/scenes/dcss/convchain/pf_arrival_petrified_forest.yaml +22 -0
  146. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_basics.yaml +22 -0
  147. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_conway.yaml +32 -0
  148. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_dodecagon.yaml +54 -0
  149. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_heroes.yaml +42 -0
  150. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_radial01.yaml +38 -0
  151. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_radial02.yaml +46 -0
  152. mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_whirlpool.yaml +30 -0
  153. mettagrid/mapgen/scenes/dcss/convchain/reono_arrival_forest_river.yaml +30 -0
  154. mettagrid/mapgen/scenes/dcss/convchain/reono_arrival_mine.yaml +30 -0
  155. mettagrid/mapgen/scenes/dcss/convchain/roderic_chinese_lattice_arrival.yaml +34 -0
  156. mettagrid/mapgen/scenes/dcss/convchain/roderic_crossed_star.yaml +34 -0
  157. mettagrid/mapgen/scenes/dcss/convchain/roderic_dead_forest.yaml +40 -0
  158. mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_a.yaml +10 -0
  159. mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_b.yaml +14 -0
  160. mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_c.yaml +16 -0
  161. mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_d.yaml +22 -0
  162. mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_e.yaml +20 -0
  163. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_checkerplants.yaml +28 -0
  164. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_forest.yaml +22 -0
  165. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_gate.yaml +26 -0
  166. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_hexagon.yaml +22 -0
  167. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_simple_crosswalls.yaml +26 -0
  168. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_simple_fountains.yaml +18 -0
  169. mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_star.yaml +32 -0
  170. mettagrid/mapgen/scenes/dcss/convchain/spicycebolla_green_bress_n_ham.yaml +32 -0
  171. mettagrid/mapgen/scenes/dcss/convchain/spicycebolla_green_bress_n_ham_2.yaml +32 -0
  172. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_a.yaml +22 -0
  173. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_b.yaml +34 -0
  174. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_c.yaml +20 -0
  175. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_d.yaml +18 -0
  176. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_e.yaml +18 -0
  177. mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_f.yaml +16 -0
  178. mettagrid/mapgen/scenes/dcss/convchain/wander_arrival_chamber.yaml +18 -0
  179. mettagrid/mapgen/scenes/dcss/convchain/wander_arrival_desolate.yaml +22 -0
  180. mettagrid/mapgen/scenes/dcss/convchain/wheals_arrival_linesprint.yaml +18 -0
  181. mettagrid/mapgen/scenes/dcss/convchain/wheals_arrival_shading.yaml +14 -0
  182. mettagrid/mapgen/scenes/dcss/convchain/zelgadis_glass_arrival_small.yaml +24 -0
  183. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_choice.yaml +11 -0
  184. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_double_pillar.yaml +31 -0
  185. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_feature_with_door.yaml +15 -0
  186. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_flooded_fountain.yaml +31 -0
  187. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_single_pillar.yaml +21 -0
  188. mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_underground_garden.yaml +19 -0
  189. mettagrid/mapgen/scenes/dcss/wfc/angelslayer_arrival_concentric_rings.yaml +35 -0
  190. mettagrid/mapgen/scenes/dcss/wfc/angelslayer_arrival_single_sparkle.yaml +35 -0
  191. mettagrid/mapgen/scenes/dcss/wfc/co_arrival_square_in_a_square_in_a_square.yaml +39 -0
  192. mettagrid/mapgen/scenes/dcss/wfc/co_arrival_two_rings.yaml +37 -0
  193. mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_hothouse.yaml +39 -0
  194. mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_planthouse.yaml +37 -0
  195. mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_waterhouse.yaml +41 -0
  196. mettagrid/mapgen/scenes/dcss/wfc/doesnt_arrival_eight_statues.yaml +19 -0
  197. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_boxes_within_box.yaml +33 -0
  198. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_boxorama.yaml +33 -0
  199. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_line_fractal.yaml +15 -0
  200. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_long_road.yaml +23 -0
  201. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_radiant.yaml +19 -0
  202. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_rooms_a.yaml +23 -0
  203. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_rooms_with_view.yaml +27 -0
  204. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_shelter.yaml +19 -0
  205. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_snail.yaml +39 -0
  206. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_ternary.yaml +21 -0
  207. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_three_bigger_balls.yaml +45 -0
  208. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_three_smaller_balls.yaml +37 -0
  209. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_a.yaml +3 -0
  210. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_b.yaml +7 -0
  211. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_c.yaml +9 -0
  212. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_d.yaml +11 -0
  213. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_e.yaml +11 -0
  214. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_f.yaml +13 -0
  215. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_g.yaml +13 -0
  216. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_h.yaml +13 -0
  217. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_i.yaml +7 -0
  218. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_j.yaml +11 -0
  219. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_k.yaml +7 -0
  220. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_triangle_fractal.yaml +27 -0
  221. mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_windows_large_door.yaml +17 -0
  222. mettagrid/mapgen/scenes/dcss/wfc/dpeg_chamrin_arrival_tetris.yaml +41 -0
  223. mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_angles.yaml +27 -0
  224. mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_boulevard.yaml +33 -0
  225. mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_nine_rooms.yaml +27 -0
  226. mettagrid/mapgen/scenes/dcss/wfc/ebering_hopf_link.yaml +25 -0
  227. mettagrid/mapgen/scenes/dcss/wfc/ebering_trefoil_3fold.yaml +25 -0
  228. mettagrid/mapgen/scenes/dcss/wfc/ebering_trefoil_twist.yaml +23 -0
  229. mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_druids_welcome.yaml +23 -0
  230. mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_tree_alley.yaml +11 -0
  231. mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_water_cross.yaml +15 -0
  232. mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_water_star.yaml +31 -0
  233. mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_blinker_ship.yaml +39 -0
  234. mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_huge.yaml +27 -0
  235. mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_large.yaml +23 -0
  236. mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_medium.yaml +19 -0
  237. mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_small.yaml +15 -0
  238. mettagrid/mapgen/scenes/dcss/wfc/giann_bridges.yaml +23 -0
  239. mettagrid/mapgen/scenes/dcss/wfc/giann_forest_graveyard.yaml +27 -0
  240. mettagrid/mapgen/scenes/dcss/wfc/giann_horns.yaml +17 -0
  241. mettagrid/mapgen/scenes/dcss/wfc/giann_wishing_wells.yaml +17 -0
  242. mettagrid/mapgen/scenes/dcss/wfc/grunt_arrival_crossed_arrows.yaml +27 -0
  243. mettagrid/mapgen/scenes/dcss/wfc/grunt_arrival_lava_bath.yaml +19 -0
  244. mettagrid/mapgen/scenes/dcss/wfc/ldierk_walled_garden.yaml +27 -0
  245. mettagrid/mapgen/scenes/dcss/wfc/ldierk_walled_garden_2.yaml +21 -0
  246. mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_cross.yaml +33 -0
  247. mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_funnel.yaml +33 -0
  248. mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_lava_pool.yaml +33 -0
  249. mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_chessboard.yaml +17 -0
  250. mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_flooded_house.yaml +19 -0
  251. mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_lavapool.yaml +21 -0
  252. mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_maybe_door_vault.yaml +17 -0
  253. mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_statue_moat.yaml +21 -0
  254. mettagrid/mapgen/scenes/dcss/wfc/lightli_iron_boxes.yaml +21 -0
  255. mettagrid/mapgen/scenes/dcss/wfc/lightli_molten_gateway.yaml +33 -0
  256. mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_grand_opening.yaml +35 -0
  257. mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_los_fun.yaml +47 -0
  258. mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_refuge.yaml +35 -0
  259. mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_spirals.yaml +31 -0
  260. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_diagonal_passages.yaml +27 -0
  261. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_doors.yaml +27 -0
  262. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_four_houses.yaml +27 -0
  263. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_open_corners.yaml +31 -0
  264. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_plants_in_alcoves.yaml +15 -0
  265. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_pointy.yaml +29 -0
  266. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_radiant_lines.yaml +43 -0
  267. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_three_doors.yaml +9 -0
  268. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_up_and_down.yaml +19 -0
  269. mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_wavy_path.yaml +25 -0
  270. mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_arrow.yaml +27 -0
  271. mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue.yaml +13 -0
  272. mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue_2.yaml +17 -0
  273. mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue_3.yaml +19 -0
  274. mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_large.yaml +19 -0
  275. mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_med.yaml +17 -0
  276. mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_small.yaml +15 -0
  277. mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_square_statues.yaml +15 -0
  278. mettagrid/mapgen/scenes/dcss/wfc/mushboom_english_gardens.yaml +23 -0
  279. mettagrid/mapgen/scenes/dcss/wfc/ncdulo_halloftheorcs.yaml +23 -0
  280. mettagrid/mapgen/scenes/dcss/wfc/ncdulo_lavacross.yaml +19 -0
  281. mettagrid/mapgen/scenes/dcss/wfc/ncdulo_smallfort.yaml +17 -0
  282. mettagrid/mapgen/scenes/dcss/wfc/ncdulo_watergridlock.yaml +19 -0
  283. mettagrid/mapgen/scenes/dcss/wfc/ncdulo_wetmaze.yaml +21 -0
  284. mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_crosshair.yaml +27 -0
  285. mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_depleted_hourglass.yaml +31 -0
  286. mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_water_spiral.yaml +37 -0
  287. mettagrid/mapgen/scenes/dcss/wfc/onia_arrival_mini_spirals.yaml +17 -0
  288. mettagrid/mapgen/scenes/dcss/wfc/onia_arrival_pyramid.yaml +29 -0
  289. mettagrid/mapgen/scenes/dcss/wfc/pf_arrival_petrified_forest.yaml +19 -0
  290. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_basics.yaml +19 -0
  291. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_conway.yaml +29 -0
  292. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_dodecagon.yaml +51 -0
  293. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_heroes.yaml +39 -0
  294. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_radial01.yaml +35 -0
  295. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_radial02.yaml +43 -0
  296. mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_whirlpool.yaml +27 -0
  297. mettagrid/mapgen/scenes/dcss/wfc/reono_arrival_forest_river.yaml +27 -0
  298. mettagrid/mapgen/scenes/dcss/wfc/reono_arrival_mine.yaml +27 -0
  299. mettagrid/mapgen/scenes/dcss/wfc/roderic_chinese_lattice_arrival.yaml +31 -0
  300. mettagrid/mapgen/scenes/dcss/wfc/roderic_crossed_star.yaml +31 -0
  301. mettagrid/mapgen/scenes/dcss/wfc/roderic_dead_forest.yaml +37 -0
  302. mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_a.yaml +7 -0
  303. mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_b.yaml +11 -0
  304. mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_c.yaml +13 -0
  305. mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_d.yaml +19 -0
  306. mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_e.yaml +17 -0
  307. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_checkerplants.yaml +25 -0
  308. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_forest.yaml +19 -0
  309. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_gate.yaml +23 -0
  310. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_hexagon.yaml +19 -0
  311. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_simple_crosswalls.yaml +23 -0
  312. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_simple_fountains.yaml +15 -0
  313. mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_star.yaml +29 -0
  314. mettagrid/mapgen/scenes/dcss/wfc/spicycebolla_green_bress_n_ham.yaml +29 -0
  315. mettagrid/mapgen/scenes/dcss/wfc/spicycebolla_green_bress_n_ham_2.yaml +29 -0
  316. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_a.yaml +19 -0
  317. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_b.yaml +31 -0
  318. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_c.yaml +17 -0
  319. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_d.yaml +15 -0
  320. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_e.yaml +15 -0
  321. mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_f.yaml +13 -0
  322. mettagrid/mapgen/scenes/dcss/wfc/wander_arrival_chamber.yaml +15 -0
  323. mettagrid/mapgen/scenes/dcss/wfc/wander_arrival_desolate.yaml +19 -0
  324. mettagrid/mapgen/scenes/dcss/wfc/wheals_arrival_linesprint.yaml +15 -0
  325. mettagrid/mapgen/scenes/dcss/wfc/wheals_arrival_shading.yaml +11 -0
  326. mettagrid/mapgen/scenes/dcss/wfc/zelgadis_glass_arrival_small.yaml +21 -0
  327. mettagrid/mapgen/scenes/grid_altars.py +118 -0
  328. mettagrid/mapgen/scenes/inline_ascii.py +42 -0
  329. mettagrid/mapgen/scenes/layout.py +31 -0
  330. mettagrid/mapgen/scenes/make_connected.py +163 -0
  331. mettagrid/mapgen/scenes/maze.py +212 -0
  332. mettagrid/mapgen/scenes/mean_distance.py +48 -0
  333. mettagrid/mapgen/scenes/mirror.py +120 -0
  334. mettagrid/mapgen/scenes/multi_left_and_right.py +117 -0
  335. mettagrid/mapgen/scenes/nop.py +15 -0
  336. mettagrid/mapgen/scenes/radial_maze.py +50 -0
  337. mettagrid/mapgen/scenes/random.py +65 -0
  338. mettagrid/mapgen/scenes/random_dcss_scene.py +48 -0
  339. mettagrid/mapgen/scenes/random_objects.py +35 -0
  340. mettagrid/mapgen/scenes/random_scene.py +31 -0
  341. mettagrid/mapgen/scenes/random_yaml_scene.py +32 -0
  342. mettagrid/mapgen/scenes/remove_agents.py +26 -0
  343. mettagrid/mapgen/scenes/room_grid.py +77 -0
  344. mettagrid/mapgen/scenes/spiral.py +104 -0
  345. mettagrid/mapgen/scenes/transplant_scene.py +42 -0
  346. mettagrid/mapgen/scenes/varied_terrain.py +376 -0
  347. mettagrid/mapgen/scenes/wfc.py +269 -0
  348. mettagrid/mapgen/scenes/yaml.py +22 -0
  349. mettagrid/mapgen/tools/dcss_import.py +123 -0
  350. mettagrid/mapgen/tools/gen.py +94 -0
  351. mettagrid/mapgen/tools/gen_scene.py +51 -0
  352. mettagrid/mapgen/tools/view.py +25 -0
  353. mettagrid/mapgen/types.py +81 -0
  354. mettagrid/mapgen/utils/ascii_grid.py +55 -0
  355. mettagrid/mapgen/utils/draw.py +32 -0
  356. mettagrid/mapgen/utils/make_scene_config.py +36 -0
  357. mettagrid/mapgen/utils/pattern.py +181 -0
  358. mettagrid/mapgen/utils/s3utils.py +44 -0
  359. mettagrid/mapgen/utils/show.py +21 -0
  360. mettagrid/mapgen/utils/storable_map.py +117 -0
  361. mettagrid/mapgen/utils/storable_map_index.py +92 -0
  362. mettagrid/mapgen/utils/thumbnail.py +360 -0
  363. mettagrid/mettagrid_c.pyi +224 -0
  364. mettagrid/mettagrid_c.so +0 -0
  365. mettagrid/mettascope.py +40 -0
  366. mettagrid/profiling/__init__.py +1 -0
  367. mettagrid/profiling/memory_monitor.py +242 -0
  368. mettagrid/profiling/stopwatch.py +711 -0
  369. mettagrid/profiling/system_monitor.py +355 -0
  370. mettagrid/py.typed +0 -0
  371. mettagrid/renderer/assets/Inter-Regular.ttf +0 -0
  372. mettagrid/renderer/assets/altar.png +0 -0
  373. mettagrid/renderer/assets/atlas.json +920 -0
  374. mettagrid/renderer/assets/atlas.png +0 -0
  375. mettagrid/renderer/assets/converter.png +0 -0
  376. mettagrid/renderer/assets/generator.png +0 -0
  377. mettagrid/renderer/assets/items.png +0 -0
  378. mettagrid/renderer/assets/monsters.png +0 -0
  379. mettagrid/renderer/assets/ore-0.png +0 -0
  380. mettagrid/renderer/assets/ore-1.png +0 -0
  381. mettagrid/renderer/assets/ore-2.png +0 -0
  382. mettagrid/renderer/assets/ore-3.png +0 -0
  383. mettagrid/renderer/assets/ore-4.png +0 -0
  384. mettagrid/renderer/assets/ore-5.png +0 -0
  385. mettagrid/renderer/assets/ore-6.png +0 -0
  386. mettagrid/renderer/assets/puffer_chars.png +0 -0
  387. mettagrid/renderer/assets/wall.png +0 -0
  388. mettagrid/renderer/miniscope.py +138 -0
  389. mettagrid/renderer/nethack.py +101 -0
  390. mettagrid/test_support/__init__.py +7 -0
  391. mettagrid/test_support/actions.py +426 -0
  392. mettagrid/test_support/mapgen.py +77 -0
  393. mettagrid/test_support/observation_helper.py +50 -0
  394. mettagrid/test_support/orientation.py +100 -0
  395. mettagrid/test_support/token_types.py +18 -0
  396. mettagrid/util/__init__.py +0 -0
  397. mettagrid/util/char_encoder.py +55 -0
  398. mettagrid/util/debug.py +501 -0
  399. mettagrid/util/dict_utils.py +10 -0
  400. mettagrid/util/diversity.py +71 -0
  401. mettagrid/util/episode_stats_db.py +157 -0
  402. mettagrid/util/file.py +503 -0
  403. mettagrid/util/grid_object_formatter.py +95 -0
  404. mettagrid/util/module.py +12 -0
  405. mettagrid/util/replay_writer.py +136 -0
  406. mettagrid/util/stats_writer.py +55 -0
  407. mettagrid/util/uri.py +162 -0
  408. mettagrid-0.0.0.dist-info/METADATA +256 -0
  409. mettagrid-0.0.0.dist-info/RECORD +413 -0
  410. mettagrid-0.0.0.dist-info/WHEEL +5 -0
  411. mettagrid-0.0.0.dist-info/entry_points.txt +2 -0
  412. mettagrid-0.0.0.dist-info/licenses/LICENSE +21 -0
  413. mettagrid-0.0.0.dist-info/top_level.txt +1 -0
mettagrid/__init__.py ADDED
@@ -0,0 +1,70 @@
1
+ """
2
+ MettaGrid - Multi-agent reinforcement learning grid environments.
3
+
4
+ This module provides various environment adapters for different RL frameworks:
5
+ - MettaGridCore: Core C++ wrapper (no training features)
6
+ - MettaGridEnv: Training environment (PufferLib-based with stats/replay)
7
+ - MettaGridGymEnv: Gymnasium adapter
8
+ - MettaGridPettingZooEnv: PettingZoo adapter
9
+
10
+ All adapters inherit from MettaGridCore and provide framework-specific interfaces.
11
+ For PufferLib integration, use PufferLib's MettaPuff wrapper directly.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from mettagrid.config.mettagrid_config import MettaGridConfig
17
+
18
+ # Import environment classes
19
+ from mettagrid.core import MettaGridCore
20
+
21
+ # Import other commonly used classes
22
+ from mettagrid.envs.gym_env import MettaGridGymEnv
23
+ from mettagrid.envs.mettagrid_env import MettaGridEnv
24
+ from mettagrid.envs.pettingzoo_env import MettaGridPettingZooEnv
25
+ from mettagrid.map_builder.map_builder import GameMap
26
+
27
+ # Import data types from C++ module (source of truth)
28
+ from mettagrid.mettagrid_c import (
29
+ dtype_actions,
30
+ dtype_masks,
31
+ dtype_observations,
32
+ dtype_rewards,
33
+ dtype_success,
34
+ dtype_terminals,
35
+ dtype_truncations,
36
+ )
37
+ from mettagrid.util.replay_writer import ReplayWriter
38
+ from mettagrid.util.stats_writer import StatsWriter
39
+
40
+ # Import mettascope submodule (optional, for visualization)
41
+ try:
42
+ from mettagrid import mettascope
43
+ except ImportError:
44
+ mettascope = None
45
+
46
+ __all__ = [
47
+ # Config
48
+ "MettaGridConfig",
49
+ # Core classes
50
+ "MettaGridCore",
51
+ # Main environment (backward compatible)
52
+ "MettaGridEnv",
53
+ # Environment adapters
54
+ "MettaGridGymEnv",
55
+ "MettaGridPettingZooEnv",
56
+ # Data types
57
+ "dtype_actions",
58
+ "dtype_observations",
59
+ "dtype_rewards",
60
+ "dtype_terminals",
61
+ "dtype_truncations",
62
+ "dtype_masks",
63
+ "dtype_success",
64
+ # Supporting classes
65
+ "GameMap",
66
+ "ReplayWriter",
67
+ "StatsWriter",
68
+ # Optional visualization module
69
+ "mettascope",
70
+ ]
@@ -0,0 +1,7 @@
1
+ """
2
+ Configuration builders for Metta environments.
3
+ """
4
+
5
+ from . import building, empty_converters, envs
6
+
7
+ __all__ = ["building", "envs", "empty_converters"]
@@ -0,0 +1,176 @@
1
+ from typing import Literal
2
+
3
+ from mettagrid.config.mettagrid_config import AssemblerConfig, ChestConfig, ConverterConfig, RecipeConfig, WallConfig
4
+
5
+ wall = WallConfig(type_id=1)
6
+ block = WallConfig(type_id=14, swappable=True)
7
+
8
+ altar = ConverterConfig(
9
+ type_id=8,
10
+ input_resources={"battery_red": 3},
11
+ output_resources={"heart": 1},
12
+ cooldown=10,
13
+ )
14
+
15
+
16
+ def make_mine(color: str, type_id: int) -> ConverterConfig:
17
+ return ConverterConfig(
18
+ type_id=type_id,
19
+ output_resources={f"ore_{color}": 1},
20
+ cooldown=50,
21
+ )
22
+
23
+
24
+ mine_red = make_mine("red", 2)
25
+ mine_blue = make_mine("blue", 3)
26
+ mine_green = make_mine("green", 4)
27
+
28
+
29
+ def make_generator(color: str, type_id: int) -> ConverterConfig:
30
+ return ConverterConfig(
31
+ type_id=type_id,
32
+ input_resources={f"ore_{color}": 1},
33
+ output_resources={f"battery_{color}": 1},
34
+ cooldown=25,
35
+ )
36
+
37
+
38
+ generator_red = make_generator("red", 5)
39
+ generator_blue = make_generator("blue", 6)
40
+ generator_green = make_generator("green", 7)
41
+
42
+ lasery = ConverterConfig(
43
+ type_id=15,
44
+ input_resources={"battery_red": 1, "ore_red": 2},
45
+ output_resources={"laser": 1},
46
+ cooldown=10,
47
+ )
48
+
49
+ armory = ConverterConfig(
50
+ type_id=16,
51
+ input_resources={"ore_red": 3},
52
+ output_resources={"armor": 1},
53
+ cooldown=10,
54
+ )
55
+
56
+ # Assembler building definitions
57
+ assembler_altar = AssemblerConfig(
58
+ type_id=8,
59
+ recipes=[
60
+ (
61
+ ["Any"],
62
+ RecipeConfig(
63
+ input_resources={"battery_red": 3},
64
+ output_resources={"heart": 1},
65
+ cooldown=10,
66
+ ),
67
+ )
68
+ ],
69
+ )
70
+
71
+
72
+ def make_assembler_mine(color: str, type_id: int) -> AssemblerConfig:
73
+ return AssemblerConfig(
74
+ type_id=type_id,
75
+ recipes=[
76
+ (
77
+ ["Any"],
78
+ RecipeConfig(
79
+ output_resources={f"ore_{color}": 1},
80
+ cooldown=50,
81
+ ),
82
+ )
83
+ ],
84
+ )
85
+
86
+
87
+ assembler_mine_red = make_assembler_mine("red", 2)
88
+ assembler_mine_blue = make_assembler_mine("blue", 3)
89
+ assembler_mine_green = make_assembler_mine("green", 4)
90
+
91
+
92
+ def make_assembler_generator(color: str, type_id: int) -> AssemblerConfig:
93
+ return AssemblerConfig(
94
+ type_id=type_id,
95
+ recipes=[
96
+ (
97
+ ["Any"],
98
+ RecipeConfig(
99
+ input_resources={f"ore_{color}": 1},
100
+ output_resources={f"battery_{color}": 1},
101
+ cooldown=25,
102
+ ),
103
+ )
104
+ ],
105
+ )
106
+
107
+
108
+ assembler_generator_red = make_assembler_generator("red", 5)
109
+ assembler_generator_blue = make_assembler_generator("blue", 6)
110
+ assembler_generator_green = make_assembler_generator("green", 7)
111
+
112
+ assembler_lasery = AssemblerConfig(
113
+ type_id=15,
114
+ recipes=[
115
+ (
116
+ ["Any"],
117
+ RecipeConfig(
118
+ input_resources={"battery_red": 1, "ore_red": 2},
119
+ output_resources={"laser": 1},
120
+ cooldown=10,
121
+ ),
122
+ )
123
+ ],
124
+ )
125
+
126
+ assembler_armory = AssemblerConfig(
127
+ type_id=16,
128
+ recipes=[
129
+ (
130
+ ["Any"],
131
+ RecipeConfig(
132
+ input_resources={"ore_red": 3},
133
+ output_resources={"armor": 1},
134
+ cooldown=10,
135
+ ),
136
+ )
137
+ ],
138
+ )
139
+
140
+
141
+ # Chest building definitions
142
+ def make_chest(
143
+ resource_type: str,
144
+ type_id: int,
145
+ deposit_positions: list[Literal["NW", "N", "NE", "W", "E", "SW", "S", "SE"]] | None = None,
146
+ withdrawal_positions: list[Literal["NW", "N", "NE", "W", "E", "SW", "S", "SE"]] | None = None,
147
+ ) -> ChestConfig:
148
+ """Create a chest configuration for a specific resource type."""
149
+ if deposit_positions is None:
150
+ deposit_positions = ["N", "S", "E", "W"] # Default to cardinal directions
151
+ if withdrawal_positions is None:
152
+ withdrawal_positions = ["N", "S", "E", "W"] # Default to cardinal directions
153
+
154
+ return ChestConfig(
155
+ type_id=type_id,
156
+ resource_type=resource_type,
157
+ deposit_positions=deposit_positions,
158
+ withdrawal_positions=withdrawal_positions,
159
+ )
160
+
161
+
162
+ # Example chest configurations
163
+ chest_ore_red = make_chest("ore_red", 20)
164
+ chest_ore_blue = make_chest("ore_blue", 21)
165
+ chest_ore_green = make_chest("ore_green", 22)
166
+ chest_battery_red = make_chest("battery_red", 23)
167
+ chest_battery_blue = make_chest("battery_blue", 24)
168
+ chest_battery_green = make_chest("battery_green", 25)
169
+
170
+ # Special chest that only allows deposits from North and withdrawals from South
171
+ chest_depot = ChestConfig(
172
+ type_id=26,
173
+ resource_type="ore_red",
174
+ deposit_positions=["N"],
175
+ withdrawal_positions=["S"],
176
+ )
@@ -0,0 +1,85 @@
1
+ from mettagrid.config.mettagrid_config import ConverterConfig, WallConfig
2
+
3
+ wall = WallConfig(type_id=1)
4
+ block = WallConfig(type_id=14, swappable=True)
5
+
6
+ mine_red = ConverterConfig(
7
+ type_id=2,
8
+ input_resources={},
9
+ output_resources={},
10
+ cooldown=5,
11
+ )
12
+
13
+ mine_blue = ConverterConfig(
14
+ type_id=3,
15
+ input_resources={},
16
+ output_resources={},
17
+ cooldown=5,
18
+ )
19
+
20
+ mine_green = ConverterConfig(
21
+ type_id=4,
22
+ input_resources={},
23
+ output_resources={},
24
+ cooldown=5,
25
+ )
26
+
27
+ generator_red = ConverterConfig(
28
+ type_id=5,
29
+ input_resources={},
30
+ output_resources={},
31
+ cooldown=5,
32
+ )
33
+
34
+ generator_blue = ConverterConfig(
35
+ type_id=6,
36
+ input_resources={},
37
+ output_resources={},
38
+ cooldown=5,
39
+ )
40
+
41
+ generator_green = ConverterConfig(
42
+ type_id=7,
43
+ input_resources={},
44
+ output_resources={},
45
+ cooldown=5,
46
+ )
47
+
48
+ altar = ConverterConfig(
49
+ type_id=8,
50
+ input_resources={},
51
+ output_resources={},
52
+ cooldown=5,
53
+ )
54
+
55
+
56
+ lasery = ConverterConfig(
57
+ type_id=15,
58
+ input_resources={},
59
+ output_resources={},
60
+ cooldown=5,
61
+ )
62
+ armory = ConverterConfig(
63
+ type_id=16,
64
+ input_resources={},
65
+ output_resources={},
66
+ cooldown=5,
67
+ )
68
+ lab = ConverterConfig(
69
+ type_id=17,
70
+ input_resources={},
71
+ output_resources={},
72
+ cooldown=5,
73
+ )
74
+ factory = ConverterConfig(
75
+ type_id=18,
76
+ input_resources={},
77
+ output_resources={},
78
+ cooldown=5,
79
+ )
80
+ temple = ConverterConfig(
81
+ type_id=19,
82
+ input_resources={},
83
+ output_resources={},
84
+ cooldown=5,
85
+ )
@@ -0,0 +1,261 @@
1
+ from typing import Optional
2
+
3
+ import mettagrid.mapgen.scenes.random
4
+
5
+ # Local import moved to factory usage to avoid forbidden cross-package dependency at import time
6
+ from mettagrid.config.mettagrid_config import (
7
+ ActionConfig,
8
+ ActionsConfig,
9
+ AgentConfig,
10
+ AgentRewards,
11
+ AttackActionConfig,
12
+ GameConfig,
13
+ MettaGridConfig,
14
+ )
15
+ from mettagrid.map_builder.map_builder import MapBuilderConfig
16
+ from mettagrid.map_builder.perimeter_incontext import PerimeterInContextMapBuilder
17
+ from mettagrid.map_builder.random import RandomMapBuilder
18
+ from mettagrid.mapgen.mapgen import MapGen
19
+
20
+ from . import building, empty_converters
21
+
22
+
23
+ def make_arena(
24
+ num_agents: int,
25
+ combat: bool = True,
26
+ map_builder: MapBuilderConfig | None = None, # custom map builder; must match num_agents
27
+ ) -> MettaGridConfig:
28
+ objects = {
29
+ "wall": building.wall,
30
+ "altar": building.altar,
31
+ "mine_red": building.mine_red,
32
+ "generator_red": building.generator_red,
33
+ "lasery": building.lasery,
34
+ "armory": building.armory,
35
+ }
36
+
37
+ actions = ActionsConfig(
38
+ noop=ActionConfig(),
39
+ move=ActionConfig(),
40
+ rotate=ActionConfig(enabled=False), # Disabled for unified movement system
41
+ put_items=ActionConfig(),
42
+ get_items=ActionConfig(),
43
+ attack=AttackActionConfig(
44
+ consumed_resources={
45
+ "laser": 1,
46
+ },
47
+ defense_resources={
48
+ "armor": 1,
49
+ },
50
+ ),
51
+ swap=ActionConfig(enabled=False),
52
+ change_color=ActionConfig(enabled=False),
53
+ )
54
+
55
+ if not combat:
56
+ actions.attack.consumed_resources = {"laser": 100}
57
+
58
+ if map_builder is None:
59
+ map_builder = MapGen.Config(
60
+ num_agents=num_agents,
61
+ width=25,
62
+ height=25,
63
+ border_width=6,
64
+ instance_border_width=0,
65
+ root=mettagrid.mapgen.scenes.random.Random.factory(
66
+ params=mettagrid.mapgen.scenes.random.Random.Params(
67
+ agents=6,
68
+ objects={
69
+ "wall": 10,
70
+ "altar": 5,
71
+ "mine_red": 10,
72
+ "generator_red": 5,
73
+ "lasery": 1,
74
+ "armory": 1,
75
+ },
76
+ ),
77
+ ),
78
+ )
79
+
80
+ return MettaGridConfig(
81
+ label="arena" + (".combat" if combat else ""),
82
+ game=GameConfig(
83
+ num_agents=num_agents,
84
+ actions=actions,
85
+ objects=objects,
86
+ agent=AgentConfig(
87
+ default_resource_limit=50,
88
+ resource_limits={
89
+ "heart": 255,
90
+ },
91
+ rewards=AgentRewards(
92
+ inventory={
93
+ "heart": 1,
94
+ },
95
+ ),
96
+ ),
97
+ map_builder=map_builder,
98
+ ),
99
+ )
100
+
101
+
102
+ def make_navigation(num_agents: int) -> MettaGridConfig:
103
+ altar = empty_converters.altar.model_copy()
104
+ altar.cooldown = 255 # Maximum cooldown
105
+ altar.initial_resource_count = 1
106
+ altar.max_conversions = 0
107
+ altar.input_resources = {}
108
+ altar.output_resources = {"heart": 1}
109
+ cfg = MettaGridConfig(
110
+ game=GameConfig(
111
+ num_agents=num_agents,
112
+ objects={
113
+ "altar": altar,
114
+ "wall": building.wall,
115
+ },
116
+ resource_names=["heart"],
117
+ actions=ActionsConfig(
118
+ move=ActionConfig(),
119
+ rotate=ActionConfig(enabled=False),
120
+ get_items=ActionConfig(),
121
+ ),
122
+ agent=AgentConfig(
123
+ rewards=AgentRewards(
124
+ inventory={
125
+ "heart": 1,
126
+ },
127
+ ),
128
+ ),
129
+ # Always provide a concrete map builder config so tests can set width/height
130
+ map_builder=RandomMapBuilder.Config(agents=num_agents),
131
+ )
132
+ )
133
+ return cfg
134
+
135
+
136
+ def make_navigation_sequence(num_agents: int) -> MettaGridConfig:
137
+ altar = building.altar.model_copy()
138
+ altar.input_resources = {"battery_red": 1}
139
+ altar.cooldown = 15
140
+ mine = building.mine_red.model_copy()
141
+ mine.cooldown = 15
142
+ generator = building.generator_red.model_copy()
143
+ generator.cooldown = 15
144
+ cfg = MettaGridConfig(
145
+ game=GameConfig(
146
+ num_agents=num_agents,
147
+ objects={
148
+ "altar": altar,
149
+ "wall": building.wall,
150
+ "mine_red": mine,
151
+ "generator_red": generator,
152
+ },
153
+ resource_names=["heart", "ore_red", "battery_red"],
154
+ actions=ActionsConfig(
155
+ move=ActionConfig(),
156
+ rotate=ActionConfig(enabled=False),
157
+ get_items=ActionConfig(),
158
+ ),
159
+ agent=AgentConfig(
160
+ rewards=AgentRewards(
161
+ inventory={
162
+ "heart": 1,
163
+ "ore_red": 0.001,
164
+ "battery_red": 0.01,
165
+ },
166
+ ),
167
+ default_resource_limit=1,
168
+ resource_limits={
169
+ "heart": 100,
170
+ },
171
+ ),
172
+ # Always provide a concrete map builder config so tests can set width/height
173
+ map_builder=RandomMapBuilder.Config(agents=num_agents),
174
+ )
175
+ )
176
+ return cfg
177
+
178
+
179
+ def make_in_context_chains(
180
+ num_agents: int,
181
+ max_steps,
182
+ game_objects: dict,
183
+ map_builder_objects: dict,
184
+ width: int = 6,
185
+ height: int = 6,
186
+ obstacle_type: Optional[str] = None,
187
+ density: Optional[str] = None,
188
+ ) -> MettaGridConfig:
189
+ game_objects["wall"] = empty_converters.wall
190
+ cfg = MettaGridConfig(
191
+ game=GameConfig(
192
+ max_steps=max_steps,
193
+ num_agents=num_agents,
194
+ objects=game_objects,
195
+ map_builder=MapGen.Config(
196
+ instances=num_agents,
197
+ instance_map=PerimeterInContextMapBuilder.Config(
198
+ agents=1,
199
+ width=width,
200
+ height=height,
201
+ objects=map_builder_objects,
202
+ obstacle_type=obstacle_type,
203
+ density=density,
204
+ ),
205
+ ),
206
+ actions=ActionsConfig(
207
+ move=ActionConfig(),
208
+ rotate=ActionConfig(enabled=False), # Disabled for unified movement system
209
+ get_items=ActionConfig(),
210
+ put_items=ActionConfig(),
211
+ ),
212
+ agent=AgentConfig(
213
+ rewards=AgentRewards(
214
+ inventory={
215
+ "heart": 1,
216
+ },
217
+ ),
218
+ default_resource_limit=1,
219
+ resource_limits={"heart": 15},
220
+ ),
221
+ )
222
+ )
223
+ return cfg
224
+
225
+
226
+ def make_icl_with_numpy(
227
+ num_agents: int,
228
+ num_instances: int,
229
+ max_steps,
230
+ game_objects: dict,
231
+ instance_map: MapBuilderConfig,
232
+ ) -> MettaGridConfig:
233
+ game_objects["wall"] = empty_converters.wall
234
+ cfg = MettaGridConfig(
235
+ game=GameConfig(
236
+ max_steps=max_steps,
237
+ num_agents=num_agents * num_instances,
238
+ objects=game_objects,
239
+ map_builder=MapGen.Config(
240
+ instances=num_instances,
241
+ instance_map=instance_map,
242
+ ),
243
+ actions=ActionsConfig(
244
+ move=ActionConfig(),
245
+ rotate=ActionConfig(enabled=False), # Disabled for unified movement system
246
+ get_items=ActionConfig(),
247
+ put_items=ActionConfig(),
248
+ ),
249
+ agent=AgentConfig(
250
+ rewards=AgentRewards(
251
+ inventory={
252
+ "heart": 1,
253
+ },
254
+ ),
255
+ default_resource_limit=1,
256
+ resource_limits={"heart": 15},
257
+ ),
258
+ )
259
+ )
260
+
261
+ return cfg
@@ -0,0 +1,35 @@
1
+ from .config import Config
2
+ from .mettagrid_c_config import from_mettagrid_config
3
+ from .mettagrid_config import (
4
+ ActionConfig,
5
+ ActionsConfig,
6
+ AgentConfig,
7
+ AgentRewards,
8
+ AssemblerConfig,
9
+ AttackActionConfig,
10
+ ChangeGlyphActionConfig,
11
+ ConverterConfig,
12
+ GameConfig,
13
+ GlobalObsConfig,
14
+ MettaGridConfig,
15
+ RecipeConfig,
16
+ WallConfig,
17
+ )
18
+
19
+ __all__ = [
20
+ "ActionConfig",
21
+ "ActionsConfig",
22
+ "AgentConfig",
23
+ "AgentRewards",
24
+ "AssemblerConfig",
25
+ "AttackActionConfig",
26
+ "ChangeGlyphActionConfig",
27
+ "Config",
28
+ "ConverterConfig",
29
+ "from_mettagrid_config",
30
+ "GameConfig",
31
+ "GlobalObsConfig",
32
+ "MettaGridConfig",
33
+ "RecipeConfig",
34
+ "WallConfig",
35
+ ]