cogames 0.3.59.post1.dev2__tar.gz → 0.3.64__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.
Files changed (206) hide show
  1. {cogames-0.3.59.post1.dev2/src/cogames.egg-info → cogames-0.3.64}/PKG-INFO +19 -3
  2. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/README.ipynb +36 -2
  3. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/README.md +17 -1
  4. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/pyproject.toml +1 -1
  5. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/client.py +12 -0
  6. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/leaderboard.py +40 -0
  7. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/mission.py +11 -4
  8. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/cogsguard_reward_variants.py +17 -2
  9. cogames-0.3.64/src/cogames/cogs_vs_clips/evals/cogsguard_evals.py +81 -0
  10. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/missions.py +3 -1
  11. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/main.py +5 -1
  12. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_balanced_spread.map +7 -3
  13. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_clip_oxygen.map +7 -3
  14. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_collect_resources.map +7 -3
  15. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_collect_resources_hard.map +7 -3
  16. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_collect_resources_medium.map +7 -3
  17. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_divide_and_conquer.map +7 -3
  18. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_energy_starved.map +7 -3
  19. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_multi_coordinated_collect_hard.map +7 -3
  20. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_oxygen_bottleneck.map +7 -3
  21. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/eval_single_use_world.map +7 -3
  22. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/extractor_hub_100x100.map +7 -3
  23. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/extractor_hub_30x30.map +7 -3
  24. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/extractor_hub_50x50.map +7 -3
  25. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/extractor_hub_70x70.map +7 -3
  26. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/evals/extractor_hub_80x80.map +7 -3
  27. {cogames-0.3.59.post1.dev2 → cogames-0.3.64/src/cogames.egg-info}/PKG-INFO +19 -3
  28. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames.egg-info/SOURCES.txt +2 -0
  29. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames.egg-info/requires.txt +1 -1
  30. cogames-0.3.64/tests/test_cogsguard_eval_missions.py +51 -0
  31. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_upload_cli.py +10 -0
  32. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/CHANGELOG.md +0 -0
  33. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/LICENSE +0 -0
  34. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/MISSION.md +0 -0
  35. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/README.py +0 -0
  36. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/TECHNICAL_MANUAL.md +0 -0
  37. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/charger.png +0 -0
  38. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/cvc-reel.gif +0 -0
  39. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/cvc-snap.png +0 -0
  40. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/extractor.png +0 -0
  41. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/hub.png +0 -0
  42. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/assets/showoff.gif +0 -0
  43. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/scripts/run_evaluation.py +0 -0
  44. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/setup.cfg +0 -0
  45. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/__init__.py +0 -0
  46. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/auth.py +0 -0
  47. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/base.py +0 -0
  48. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/__init__.py +0 -0
  49. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/_nb_md_directive_processing.py +0 -0
  50. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/_nb_md_sync.py +0 -0
  51. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/_nb_py_sync.py +0 -0
  52. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/_three_way_sync.py +0 -0
  53. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/_utils.py +0 -0
  54. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/docsync/docsync.py +0 -0
  55. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/login.py +0 -0
  56. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/policy.py +0 -0
  57. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/submit.py +0 -0
  58. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cli/utils.py +0 -0
  59. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/__init__.py +0 -0
  60. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/cog.py +0 -0
  61. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/cogs_vs_clips_mapgen.md +0 -0
  62. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/cogsguard_tutorial.py +0 -0
  63. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/evals/README.md +0 -0
  64. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/evals/diagnostic_evals.py +0 -0
  65. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/evals/difficulty_variants.py +0 -0
  66. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/evals/integrated_evals.py +0 -0
  67. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/evals/spanning_evals.py +0 -0
  68. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/mission.py +0 -0
  69. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/mission_utils.py +0 -0
  70. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/procedural.py +0 -0
  71. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/sites.py +0 -0
  72. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/stations.py +0 -0
  73. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/tutorial_missions.py +0 -0
  74. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/cogs_vs_clips/variants.py +0 -0
  75. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/curricula.py +0 -0
  76. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/device.py +0 -0
  77. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/docs/SCRIPTED_AGENT.md +0 -0
  78. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/evaluate.py +0 -0
  79. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/game.py +0 -0
  80. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate1_1000.map +0 -0
  81. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate1_1000_stations.map +0 -0
  82. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate1_500.map +0 -0
  83. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate1_500_stations.map +0 -0
  84. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate2_1000.map +0 -0
  85. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate2_1000_stations.map +0 -0
  86. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate2_500.map +0 -0
  87. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate2_500_stations.map +0 -0
  88. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate3_1000.map +0 -0
  89. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate3_1000_stations.map +0 -0
  90. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate3_500.map +0 -0
  91. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate3_500_stations.map +0 -0
  92. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate4_500.map +0 -0
  93. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/canidate4_500_stations.map +0 -0
  94. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/cave_base_50.map +0 -0
  95. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_agile.map +0 -0
  96. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_agile_hard.map +0 -0
  97. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_charge_up.map +0 -0
  98. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_charge_up_hard.map +0 -0
  99. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation1.map +0 -0
  100. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation1_hard.map +0 -0
  101. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation2.map +0 -0
  102. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation2_hard.map +0 -0
  103. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation3.map +0 -0
  104. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_navigation3_hard.map +0 -0
  105. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_near.map +0 -0
  106. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_search.map +0 -0
  107. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_chest_search_hard.map +0 -0
  108. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_extract_lab.map +0 -0
  109. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_extract_lab_hard.map +0 -0
  110. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_memory.map +0 -0
  111. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_memory_hard.map +0 -0
  112. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_radial.map +0 -0
  113. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_radial_hard.map +0 -0
  114. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_resource_lab.map +0 -0
  115. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/diagnostic_evals/diagnostic_unclip.map +0 -0
  116. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machina_100_stations.map +0 -0
  117. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machina_200_stations.map +0 -0
  118. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machina_200_stations_small.map +0 -0
  119. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machina_eval_exp01.map +0 -0
  120. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machina_eval_template_large.map +0 -0
  121. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machinatrainer4agents.map +0 -0
  122. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machinatrainer4agentsbase.map +0 -0
  123. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machinatrainerbig.map +0 -0
  124. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/machinatrainersmall.map +0 -0
  125. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/aligner_avoid_aoe.map +0 -0
  126. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/aligner_full_cycle.map +0 -0
  127. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/aligner_gear.map +0 -0
  128. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/aligner_hearts.map +0 -0
  129. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/aligner_junction.map +0 -0
  130. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/exploration_distant.map +0 -0
  131. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/maze.map +0 -0
  132. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/miner_best_resource.map +0 -0
  133. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/miner_deposit.map +0 -0
  134. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/miner_extract.map +0 -0
  135. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/miner_full_cycle.map +0 -0
  136. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/miner_gear.map +0 -0
  137. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/multi_role.map +0 -0
  138. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/resource_chain.map +0 -0
  139. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/scout_explore.map +0 -0
  140. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/scout_gear.map +0 -0
  141. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/scrambler_full_cycle.map +0 -0
  142. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/scrambler_gear.map +0 -0
  143. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/scrambler_target.map +0 -0
  144. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/stuck_corridor.map +0 -0
  145. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/planky_evals/survive_retreat.map +0 -0
  146. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_clipped.map +0 -0
  147. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_open_1.map +0 -0
  148. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_open_2.map +0 -0
  149. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_open_3.map +0 -0
  150. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_tight_4.map +0 -0
  151. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/training_facility_tight_5.map +0 -0
  152. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/vanilla_large.map +0 -0
  153. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/vanilla_small.map +0 -0
  154. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/maps/zelda.map +0 -0
  155. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/pickup.py +0 -0
  156. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/play.py +0 -0
  157. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/__init__.py +0 -0
  158. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/chaos_monkey.py +0 -0
  159. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/nim_agents/__init__.py +0 -0
  160. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/nim_agents/agents.py +0 -0
  161. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/nim_agents/thinky_eval.py +0 -0
  162. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/pufferlib_policy.py +0 -0
  163. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/signal_handler.py +0 -0
  164. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/starter_agent.py +0 -0
  165. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/policy/trainable_policy_template.py +0 -0
  166. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/py.typed +0 -0
  167. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/train.py +0 -0
  168. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames/verbose.py +0 -0
  169. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames.egg-info/dependency_links.txt +0 -0
  170. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames.egg-info/entry_points.txt +0 -0
  171. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/cogames.egg-info/top_level.txt +0 -0
  172. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/__init__.py +0 -0
  173. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/job_specs.py +0 -0
  174. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/policy.py +0 -0
  175. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/pure_single_episode_runner.py +0 -0
  176. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/py.typed +0 -0
  177. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/rollout.py +0 -0
  178. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/src/metta_alo/scoring.py +0 -0
  179. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/conftest.py +0 -0
  180. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/helpers.py +0 -0
  181. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/test_docsync_all.py +0 -0
  182. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/test_docsync_check.py +0 -0
  183. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/test_docsync_nb_to_md.py +0 -0
  184. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/test_docsync_nb_to_py.py +0 -0
  185. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/docsync/test_docsync_py_to_nb.py +0 -0
  186. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/metta_alo/test_scoring.py +0 -0
  187. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_all_games_describe.py +0 -0
  188. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_all_games_eval.py +0 -0
  189. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_all_games_play.py +0 -0
  190. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_chaos_monkey.py +0 -0
  191. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_cli.py +0 -0
  192. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_cogs_vs_clips.py +0 -0
  193. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_policy_cli_parsing.py +0 -0
  194. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_procedural_maps.py +0 -0
  195. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_train_integration.py +0 -0
  196. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_train_vector_alignment.py +0 -0
  197. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tests/test_upload_policy_bundles.py +0 -0
  198. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/01_MAKE_POLICY.ipynb +0 -0
  199. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/01_MAKE_POLICY.md +0 -0
  200. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/01_MAKE_POLICY.py +0 -0
  201. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/02_TRAIN.ipynb +0 -0
  202. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/02_TRAIN.md +0 -0
  203. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/02_TRAIN.py +0 -0
  204. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/03_SUBMIT.ipynb +0 -0
  205. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/03_SUBMIT.md +0 -0
  206. {cogames-0.3.59.post1.dev2 → cogames-0.3.64}/tutorials/03_SUBMIT.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cogames
3
- Version: 0.3.59.post1.dev2
3
+ Version: 0.3.64
4
4
  Summary: Multi-agent cooperative games
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.12
7
7
  Requires-Python: <3.13,>=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
- Requires-Dist: mettagrid==0.2.0.67
10
+ Requires-Dist: mettagrid==0.2.0.74
11
11
  Requires-Dist: packaging>=24.0.0
12
12
  Requires-Dist: pufferlib-core
13
13
  Requires-Dist: pydantic>=2.11.5
@@ -1306,7 +1306,7 @@ cogames [COMMAND] --help
1306
1306
 
1307
1307
 
1308
1308
  <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="font-weight: bold"> </span>
1309
- <span style="font-weight: bold"> </span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">Usage: </span><span style="font-weight: bold">cogames seasons [OPTIONS] </span>
1309
+ <span style="font-weight: bold"> </span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">Usage: </span><span style="font-weight: bold">cogames seasons [OPTIONS] [SEASON_NAME] </span>
1310
1310
  <span style="font-weight: bold"> </span>
1311
1311
  </pre>
1312
1312
 
@@ -1320,6 +1320,22 @@ cogames [COMMAND] --help
1320
1320
 
1321
1321
 
1322
1322
 
1323
+ <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1324
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> season_name <span style="color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold">[</span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">SEASON_NAME</span><span style="color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold">]</span> Show versions of a specific season <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1325
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
1326
+ </pre>
1327
+
1328
+
1329
+
1330
+
1331
+ <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1332
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--versions</span> <span style="color: #008000; text-decoration-color: #008000; font-weight: bold">-v</span> List all versions of the season <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1333
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
1334
+ </pre>
1335
+
1336
+
1337
+
1338
+
1323
1339
  <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Server ────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1324
1340
  <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--login-server</span> <span style="color: #808000; text-decoration-color: #808000; font-weight: bold">URL</span> Authentication server URL <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">[default: https://softmax.com/api]</span> <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1325
1341
  <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--server</span> <span style="color: #008000; text-decoration-color: #008000; font-weight: bold">-s</span> <span style="color: #808000; text-decoration-color: #808000; font-weight: bold">URL</span> Tournament server URL <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">[default: https://api.observatory.softmax-research.net]</span> <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
@@ -2609,13 +2609,13 @@
2609
2609
  "data": {
2610
2610
  "text/html": [
2611
2611
  "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> </span>\n",
2612
- "<span style=\"font-weight: bold\"> </span><span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">Usage: </span><span style=\"font-weight: bold\">cogames seasons [OPTIONS] </span>\n",
2612
+ "<span style=\"font-weight: bold\"> </span><span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">Usage: </span><span style=\"font-weight: bold\">cogames seasons [OPTIONS] [SEASON_NAME] </span>\n",
2613
2613
  "<span style=\"font-weight: bold\"> </span>\n",
2614
2614
  "</pre>\n"
2615
2615
  ],
2616
2616
  "text/plain": [
2617
2617
  "\u001b[1m \u001b[0m\n",
2618
- "\u001b[1m \u001b[0m\u001b[1;33mUsage: \u001b[0m\u001b[1mcogames seasons [OPTIONS]\u001b[0m\u001b[1m \u001b[0m\u001b[1m \u001b[0m\n",
2618
+ "\u001b[1m \u001b[0m\u001b[1;33mUsage: \u001b[0m\u001b[1mcogames seasons [OPTIONS] [SEASON_NAME]\u001b[0m\u001b[1m \u001b[0m\u001b[1m \u001b[0m\n",
2619
2619
  "\u001b[1m \u001b[0m\n"
2620
2620
  ]
2621
2621
  },
@@ -2637,6 +2637,40 @@
2637
2637
  "metadata": {},
2638
2638
  "output_type": "display_data"
2639
2639
  },
2640
+ {
2641
+ "data": {
2642
+ "text/html": [
2643
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
2644
+ "<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">│</span> season_name <span style=\"color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold\">[</span><span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">SEASON_NAME</span><span style=\"color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold\">]</span> Show versions of a specific season <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">│</span>\n",
2645
+ "<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
2646
+ "</pre>\n"
2647
+ ],
2648
+ "text/plain": [
2649
+ "\u001b[2m╭─\u001b[0m\u001b[2m Arguments \u001b[0m\u001b[2m────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[2m─╮\u001b[0m\n",
2650
+ "\u001b[2m│\u001b[0m season_name \u001b[1;2;33m[\u001b[0m\u001b[1;33mSEASON_NAME\u001b[0m\u001b[1;2;33m]\u001b[0m Show versions of a specific season \u001b[2m│\u001b[0m\n",
2651
+ "\u001b[2m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
2652
+ ]
2653
+ },
2654
+ "metadata": {},
2655
+ "output_type": "display_data"
2656
+ },
2657
+ {
2658
+ "data": {
2659
+ "text/html": [
2660
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>\n",
2661
+ "<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">--versions</span> <span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">-v</span> List all versions of the season <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">│</span>\n",
2662
+ "<span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
2663
+ "</pre>\n"
2664
+ ],
2665
+ "text/plain": [
2666
+ "\u001b[2m╭─\u001b[0m\u001b[2m Options \u001b[0m\u001b[2m──────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\u001b[2m─╮\u001b[0m\n",
2667
+ "\u001b[2m│\u001b[0m \u001b[1;36m-\u001b[0m\u001b[1;36m-versions\u001b[0m \u001b[1;32m-v\u001b[0m List all versions of the season \u001b[2m│\u001b[0m\n",
2668
+ "\u001b[2m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
2669
+ ]
2670
+ },
2671
+ "metadata": {},
2672
+ "output_type": "display_data"
2673
+ },
2640
2674
  {
2641
2675
  "data": {
2642
2676
  "text/html": [
@@ -1270,7 +1270,7 @@ cogames [COMMAND] --help
1270
1270
 
1271
1271
 
1272
1272
  <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="font-weight: bold"> </span>
1273
- <span style="font-weight: bold"> </span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">Usage: </span><span style="font-weight: bold">cogames seasons [OPTIONS] </span>
1273
+ <span style="font-weight: bold"> </span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">Usage: </span><span style="font-weight: bold">cogames seasons [OPTIONS] [SEASON_NAME] </span>
1274
1274
  <span style="font-weight: bold"> </span>
1275
1275
  </pre>
1276
1276
 
@@ -1284,6 +1284,22 @@ cogames [COMMAND] --help
1284
1284
 
1285
1285
 
1286
1286
 
1287
+ <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1288
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> season_name <span style="color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold">[</span><span style="color: #808000; text-decoration-color: #808000; font-weight: bold">SEASON_NAME</span><span style="color: #bfbf7f; text-decoration-color: #bfbf7f; font-weight: bold">]</span> Show versions of a specific season <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1289
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
1290
+ </pre>
1291
+
1292
+
1293
+
1294
+
1295
+ <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1296
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--versions</span> <span style="color: #008000; text-decoration-color: #008000; font-weight: bold">-v</span> List all versions of the season <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1297
+ <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>
1298
+ </pre>
1299
+
1300
+
1301
+
1302
+
1287
1303
  <pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"><span style="color: #7f7f7f; text-decoration-color: #7f7f7f">╭─ Server ────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span>
1288
1304
  <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--login-server</span> <span style="color: #808000; text-decoration-color: #808000; font-weight: bold">URL</span> Authentication server URL <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">[default: https://softmax.com/api]</span> <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
1289
1305
  <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span> <span style="color: #008080; text-decoration-color: #008080; font-weight: bold">--server</span> <span style="color: #008000; text-decoration-color: #008000; font-weight: bold">-s</span> <span style="color: #808000; text-decoration-color: #808000; font-weight: bold">URL</span> Tournament server URL <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">[default: https://api.observatory.softmax-research.net]</span> <span style="color: #7f7f7f; text-decoration-color: #7f7f7f">│</span>
@@ -9,7 +9,7 @@ readme = "README.md"
9
9
  requires-python = ">=3.12,<3.13"
10
10
  classifiers = ["Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12"]
11
11
  dependencies = [
12
- "mettagrid==0.2.0.67",
12
+ "mettagrid==0.2.0.74",
13
13
  "packaging>=24.0.0",
14
14
  "pufferlib-core",
15
15
  "pydantic>=2.11.5",
@@ -51,6 +51,8 @@ class PoolInfo(BaseModel):
51
51
 
52
52
  class SeasonInfo(BaseModel):
53
53
  name: str
54
+ version: int
55
+ canonical: bool
54
56
  summary: str
55
57
  entry_pool: str | None = None
56
58
  leaderboard_pool: str | None = None
@@ -58,6 +60,13 @@ class SeasonInfo(BaseModel):
58
60
  pools: list[PoolInfo]
59
61
 
60
62
 
63
+ class SeasonVersionInfo(BaseModel):
64
+ version: int
65
+ canonical: bool
66
+ disabled_at: str | None
67
+ created_at: str
68
+
69
+
61
70
  class LeaderboardEntry(BaseModel):
62
71
  rank: int
63
72
  policy: PolicyVersionSummary
@@ -174,6 +183,9 @@ class TournamentServerClient:
174
183
  def get_config(self, config_id: str) -> dict[str, Any]:
175
184
  return self._get(f"/tournament/configs/{config_id}")
176
185
 
186
+ def get_season_versions(self, season_name: str) -> list[SeasonVersionInfo]:
187
+ return self._get(f"/tournament/seasons/{season_name}/versions", list[SeasonVersionInfo])
188
+
177
189
  def get_leaderboard(self, season_name: str, include_hidden_seasons: bool = False) -> list[LeaderboardEntry]:
178
190
  return self._get(
179
191
  f"/tournament/seasons/{season_name}/leaderboard",
@@ -36,6 +36,22 @@ def parse_policy_identifier(identifier: str) -> tuple[str, int | None]:
36
36
  return identifier, None
37
37
 
38
38
 
39
+ def parse_season_ref(season_ref: str) -> tuple[str, int | None]:
40
+ if ":v" in season_ref:
41
+ name, version_str = season_ref.rsplit(":v", 1)
42
+ try:
43
+ return name, int(version_str)
44
+ except ValueError:
45
+ return season_ref, None
46
+ if ":" in season_ref:
47
+ name, version_str = season_ref.rsplit(":", 1)
48
+ try:
49
+ return name, int(version_str)
50
+ except ValueError:
51
+ return season_ref, None
52
+ return season_ref, None
53
+
54
+
39
55
  def _format_timestamp(value: Optional[str]) -> str:
40
56
  """Format ISO timestamps for CLI output."""
41
57
  if not value:
@@ -321,6 +337,8 @@ def leaderboard_cmd(
321
337
 
322
338
 
323
339
  def seasons_cmd(
340
+ season_name: Optional[str] = typer.Argument(None, help="Show versions of a specific season"),
341
+ versions: bool = typer.Option(False, "--versions", "-v", help="List all versions of the season"),
324
342
  login_server: str = typer.Option(
325
343
  DEFAULT_COGAMES_SERVER,
326
344
  "--login-server",
@@ -358,6 +376,28 @@ def seasons_cmd(
358
376
 
359
377
  try:
360
378
  with client:
379
+ if season_name and versions:
380
+ season_versions = client.get_season_versions(season_name)
381
+ if json_output:
382
+ console.print(json.dumps([v.model_dump() for v in season_versions], indent=2))
383
+ return
384
+
385
+ if not season_versions:
386
+ console.print(f"[yellow]No versions found for season '{season_name}'.[/yellow]")
387
+ return
388
+
389
+ table = Table(title=f"Versions: {season_name}", box=box.SIMPLE_HEAVY, show_lines=False, pad_edge=False)
390
+ table.add_column("Version", style="bold cyan")
391
+ table.add_column("Status", style="white")
392
+ table.add_column("Created", style="dim")
393
+
394
+ for v in season_versions:
395
+ status = "[green]canonical[/green]" if v.canonical else "[dim]historical[/dim]"
396
+ table.add_row(f"v{v.version}", status, _format_timestamp(v.created_at))
397
+
398
+ console.print(table)
399
+ return
400
+
361
401
  seasons = client.get_seasons()
362
402
  except httpx.HTTPError as exc:
363
403
  console.print(f"[red]Failed to reach server:[/red] {exc}")
@@ -39,12 +39,14 @@ def _get_legacy_missions() -> list[Mission]:
39
39
 
40
40
 
41
41
  @lru_cache(maxsize=1)
42
- def _get_eval_missions_all() -> list[Mission]:
42
+ def _get_eval_missions_all() -> list[AnyMission]:
43
+ from cogames.cogs_vs_clips.evals.cogsguard_evals import COGSGUARD_EVAL_MISSIONS
43
44
  from cogames.cogs_vs_clips.evals.diagnostic_evals import DIAGNOSTIC_EVALS
44
45
  from cogames.cogs_vs_clips.evals.integrated_evals import EVAL_MISSIONS as INTEGRATED_EVAL_MISSIONS
45
46
  from cogames.cogs_vs_clips.evals.spanning_evals import EVAL_MISSIONS as SPANNING_EVAL_MISSIONS
46
47
 
47
- missions: list[Mission] = []
48
+ missions: list[AnyMission] = []
49
+ missions.extend(COGSGUARD_EVAL_MISSIONS)
48
50
  missions.extend(INTEGRATED_EVAL_MISSIONS)
49
51
  missions.extend(SPANNING_EVAL_MISSIONS)
50
52
  missions.extend(mission_cls() for mission_cls in DIAGNOSTIC_EVALS) # type: ignore[call-arg]
@@ -56,6 +58,7 @@ def load_mission_set(mission_set: str) -> list[AnyMission]:
56
58
 
57
59
  Args:
58
60
  mission_set: Name of mission set to load. Options:
61
+ - "cogsguard_evals": CogsGuard evaluation missions (map-based)
59
62
  - "integrated_evals": Integrated evaluation missions
60
63
  - "spanning_evals": Spanning evaluation missions
61
64
  - "diagnostic_evals": Diagnostic evaluation missions
@@ -82,6 +85,10 @@ def load_mission_set(mission_set: str) -> list[AnyMission]:
82
85
  from cogames.cogs_vs_clips.evals.diagnostic_evals import DIAGNOSTIC_EVALS
83
86
 
84
87
  missions_list = [mission_cls() for mission_cls in DIAGNOSTIC_EVALS] # type: ignore[call-arg]
88
+ elif mission_set == "cogsguard_evals":
89
+ from cogames.cogs_vs_clips.evals.cogsguard_evals import COGSGUARD_EVAL_MISSIONS
90
+
91
+ missions_list = list(COGSGUARD_EVAL_MISSIONS)
85
92
  elif mission_set == "integrated_evals":
86
93
  from cogames.cogs_vs_clips.evals.integrated_evals import EVAL_MISSIONS as INTEGRATED_EVAL_MISSIONS
87
94
 
@@ -91,7 +98,7 @@ def load_mission_set(mission_set: str) -> list[AnyMission]:
91
98
 
92
99
  missions_list = list(SPANNING_EVAL_MISSIONS)
93
100
  else:
94
- available = "integrated_evals, spanning_evals, diagnostic_evals, all"
101
+ available = "cogsguard_evals, integrated_evals, spanning_evals, diagnostic_evals, all"
95
102
  raise ValueError(f"Unknown mission set: {mission_set}\nAvailable sets: {available}")
96
103
 
97
104
  return missions_list
@@ -447,7 +454,7 @@ def list_evals() -> None:
447
454
  return
448
455
 
449
456
  # Group missions by site
450
- missions_by_site: dict[str, list[Mission]] = {}
457
+ missions_by_site: dict[str, list[AnyMission]] = {}
451
458
  for m in evals:
452
459
  missions_by_site.setdefault(m.site.name, []).append(m)
453
460
 
@@ -13,9 +13,15 @@ from mettagrid.config.game_value import stat
13
13
  from mettagrid.config.mettagrid_config import MettaGridConfig
14
14
  from mettagrid.config.reward_config import AgentReward, reward
15
15
 
16
- CogsGuardRewardVariant = Literal["credit", "milestones", "no_objective", "objective"]
16
+ CogsGuardRewardVariant = Literal["credit", "milestones", "no_objective", "penalize_vibe_change", "objective"]
17
17
 
18
- AVAILABLE_REWARD_VARIANTS: tuple[CogsGuardRewardVariant, ...] = ("objective", "no_objective", "milestones", "credit")
18
+ AVAILABLE_REWARD_VARIANTS: tuple[CogsGuardRewardVariant, ...] = (
19
+ "objective",
20
+ "no_objective",
21
+ "milestones",
22
+ "credit",
23
+ "penalize_vibe_change",
24
+ )
19
25
 
20
26
  _OBJECTIVE_STAT_KEY = "aligned_junction_held"
21
27
 
@@ -55,6 +61,12 @@ def _apply_milestones(rewards: dict[str, AgentReward], *, max_junctions: int = 1
55
61
  )
56
62
 
57
63
 
64
+ def _apply_penalize_vibe_change(rewards: dict[str, AgentReward]) -> None:
65
+ """Add penalty for vibe changes to discourage spamming."""
66
+ w_vibe_change = -0.01
67
+ rewards["vibe_change_penalty"] = reward(stat("action.change_vibe.success"), weight=w_vibe_change)
68
+
69
+
58
70
  def _apply_credit(rewards: dict[str, AgentReward]) -> None:
59
71
  """Add dense precursor shaping rewards onto an existing baseline."""
60
72
  w_heart = 0.05
@@ -98,6 +110,7 @@ def apply_reward_variants(env: MettaGridConfig, *, variants: str | Sequence[str]
98
110
  - `no_objective`: disables the objective stat reward (`junction.held`).
99
111
  - `milestones`: adds shaped rewards for aligning/scrambling junctions and holding more junctions.
100
112
  - `credit`: adds additional dense shaping for precursor behaviors (resources/gear/deposits).
113
+ - `penalize_vibe_change`: adds a penalty for vibe changes to discourage spamming.
101
114
  """
102
115
  if not variants:
103
116
  return
@@ -127,6 +140,8 @@ def apply_reward_variants(env: MettaGridConfig, *, variants: str | Sequence[str]
127
140
  _apply_milestones(rewards)
128
141
  if "credit" in enabled:
129
142
  _apply_credit(rewards)
143
+ if "penalize_vibe_change" in enabled:
144
+ _apply_penalize_vibe_change(rewards)
130
145
 
131
146
  env.game.agent.rewards = rewards
132
147
 
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+ from cogames.cogs_vs_clips.mission import CogsGuardMission, Site
6
+ from cogames.cogs_vs_clips.mission_utils import get_map
7
+
8
+ MAPS_DIR = Path(__file__).resolve().parent.parent.parent / "maps"
9
+
10
+ COGSGUARD_EVALS_BASE = Site(
11
+ name="cogsguard_evals",
12
+ description="CogsGuard evaluation arenas.",
13
+ map_builder=get_map("evals/eval_balanced_spread.map"),
14
+ min_cogs=1,
15
+ max_cogs=20,
16
+ )
17
+
18
+
19
+ def _count_spawn_pads(map_path: Path) -> int:
20
+ text = map_path.read_text()
21
+ if "map_data:" not in text:
22
+ raise ValueError(f"Missing map_data block in {map_path}")
23
+ map_section = text.split("map_data:", 1)[1].split("char_to_map_name:", 1)[0]
24
+ count = map_section.count("@")
25
+ if count <= 0:
26
+ raise ValueError(f"No spawn pads found in {map_path}")
27
+ return count
28
+
29
+
30
+ def _make_eval_site(map_name: str, num_cogs: int) -> Site:
31
+ site = COGSGUARD_EVALS_BASE.model_copy(
32
+ update={
33
+ "map_builder": get_map(map_name),
34
+ "min_cogs": num_cogs,
35
+ "max_cogs": num_cogs,
36
+ }
37
+ )
38
+ return site
39
+
40
+
41
+ def _description_from_stem(stem: str) -> str:
42
+ display = stem
43
+ if display.startswith("eval_"):
44
+ display = display[len("eval_") :]
45
+ display = display.replace("_", " ")
46
+ return f"CogsGuard eval: {display}."
47
+
48
+
49
+ COGSGUARD_EVAL_MAPS: list[str] = [
50
+ "evals/eval_balanced_spread.map",
51
+ "evals/eval_clip_oxygen.map",
52
+ "evals/eval_collect_resources.map",
53
+ "evals/eval_collect_resources_medium.map",
54
+ "evals/eval_collect_resources_hard.map",
55
+ "evals/eval_divide_and_conquer.map",
56
+ "evals/eval_energy_starved.map",
57
+ "evals/eval_multi_coordinated_collect_hard.map",
58
+ "evals/eval_oxygen_bottleneck.map",
59
+ "evals/eval_single_use_world.map",
60
+ "evals/extractor_hub_30x30.map",
61
+ "evals/extractor_hub_50x50.map",
62
+ "evals/extractor_hub_70x70.map",
63
+ "evals/extractor_hub_80x80.map",
64
+ "evals/extractor_hub_100x100.map",
65
+ ]
66
+
67
+ COGSGUARD_EVAL_COGS = {map_name: _count_spawn_pads(MAPS_DIR / map_name) for map_name in COGSGUARD_EVAL_MAPS}
68
+
69
+ COGSGUARD_EVAL_MISSIONS: list[CogsGuardMission] = []
70
+ for map_name in COGSGUARD_EVAL_MAPS:
71
+ stem = Path(map_name).stem
72
+ num_cogs = COGSGUARD_EVAL_COGS[map_name]
73
+ site = _make_eval_site(map_name, num_cogs)
74
+ COGSGUARD_EVAL_MISSIONS.append(
75
+ CogsGuardMission(
76
+ name=stem,
77
+ description=_description_from_stem(stem),
78
+ site=site,
79
+ num_cogs=num_cogs,
80
+ )
81
+ )
@@ -57,10 +57,12 @@ def get_legacy_missions() -> list[Mission]:
57
57
  return []
58
58
 
59
59
 
60
- def _build_eval_missions() -> list[Mission]:
60
+ def _build_eval_missions() -> list[AnyMission]:
61
+ from cogames.cogs_vs_clips.evals.cogsguard_evals import COGSGUARD_EVAL_MISSIONS
61
62
  from cogames.cogs_vs_clips.evals.integrated_evals import EVAL_MISSIONS as INTEGRATED_EVAL_MISSIONS
62
63
 
63
64
  return [
65
+ *COGSGUARD_EVAL_MISSIONS,
64
66
  *INTEGRATED_EVAL_MISSIONS,
65
67
  ]
66
68
 
@@ -109,13 +109,17 @@ def _register_policies() -> None:
109
109
  discover_and_register_policies()
110
110
 
111
111
 
112
+ def _register_policies_callback() -> None:
113
+ _register_policies()
114
+
115
+
112
116
  app = typer.Typer(
113
117
  help="CoGames - Multi-agent cooperative and competitive games",
114
118
  context_settings={"help_option_names": ["-h", "--help"]},
115
119
  no_args_is_help=True,
116
120
  rich_markup_mode="rich",
117
121
  pretty_exceptions_show_locals=False,
118
- callback=_register_policies,
122
+ callback=_register_policies_callback,
119
123
  )
120
124
 
121
125
  tutorial_app = typer.Typer(
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.C....O......................#
16
16
  #C.......#.......................G.....#
17
17
  #......C.#.....###.....###.............#
18
- #........#.....#O.......G#...........O.#
19
- #.....#........#....=....#......#......#
20
- #.....#.....G...................##.....#
18
+ #........#.....#O...m...G#...........O.#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#.....G.......t...........##.....#
21
21
  #....C#.............&....S.......##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#....C...........................#
@@ -51,3 +51,7 @@ char_to_map_name:
51
51
  "@": agent.agent
52
52
  "&": hub
53
53
  "=": chest
54
+ "a": aligner_station
55
+ "r": scrambler_station
56
+ "m": miner_station
57
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.............................#
16
16
  #........#.............................#
17
17
  #........#.....###.....###.............#
18
- #........#.....#O.......G#.............#
19
- #.....#........#....=....#......#......#
20
- #.....#.........................##.....#
18
+ #........#.....#O...m...G#.............#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#.............t...........##.....#
21
21
  #.....#.............&............##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#........S.......................#
@@ -53,3 +53,7 @@ char_to_map_name:
53
53
  "=": chest
54
54
 
55
55
 
56
+ "a": aligner_station
57
+ "r": scrambler_station
58
+ "m": miner_station
59
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####...........C.................#
16
16
  #....S...#........................O....#
17
17
  #........#.....###.....###.............#
18
- #........#.....#O.......G#.............#
19
- #.....#........#.@..=..@.#......#......#
20
- #.....#................@........##.....#
18
+ #........#.....#O...m...G#.............#
19
+ #.....#........#.@.a=r.@.#......#......#
20
+ #.....#.............t..@........##.....#
21
21
  #.....#...C......@..&............##....#
22
22
  #.....#.............@..@..........#....#
23
23
  #.....#..........@.......@.............#
@@ -53,3 +53,7 @@ char_to_map_name:
53
53
  "=": chest
54
54
 
55
55
 
56
+ "a": aligner_station
57
+ "r": scrambler_station
58
+ "m": miner_station
59
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.............................#
16
16
  #........#.............................#
17
17
  #........#.....###.....###.............#
18
- #........#.....#.........#.............#
19
- #.....#........#....=....#......#......#
20
- #.....#.........................##.....#
18
+ #........#.....#....m....#.............#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#.............t...........##.....#
21
21
  #.....#.............&............##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#................................#
@@ -53,3 +53,7 @@ char_to_map_name:
53
53
  "=": chest
54
54
 
55
55
 
56
+ "a": aligner_station
57
+ "r": scrambler_station
58
+ "m": miner_station
59
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.............................#
16
16
  #........#.............................#
17
17
  #........#.....###.....###...........G.#
18
- #........#.....#.........#.............#
19
- #.....#........#....=....#......#......#
20
- #.....#......C..................##.....#
18
+ #........#.....#....m....#.............#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#......C......t...........##.....#
21
21
  #.....#.............&............##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#................................#
@@ -53,3 +53,7 @@ char_to_map_name:
53
53
  "=": chest
54
54
 
55
55
 
56
+ "a": aligner_station
57
+ "r": scrambler_station
58
+ "m": miner_station
59
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.............................#
16
16
  #........#.............................#
17
17
  #........#.....###.....###.............#
18
- #........#.....#.........#.............#
19
- #.....#........#....=....#......#......#
20
- #.....#.........................##.....#
18
+ #........#.....#....m....#.............#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#.............t...........##.....#
21
21
  #.....#.............&............##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#................................#
@@ -51,3 +51,7 @@ char_to_map_name:
51
51
  "@": agent.agent
52
52
  "&": hub
53
53
  "=": chest
54
+ "a": aligner_station
55
+ "r": scrambler_station
56
+ "m": miner_station
57
+ "t": scout_station
@@ -15,9 +15,9 @@ map_data: |-
15
15
  #.....####.............................#
16
16
  #...S....#........................S....#
17
17
  #........#.....###.....###.............#
18
- #........#.....#.........#.............#
19
- #.....#........#....=....#......#......#
20
- #.....#.........................##.....#
18
+ #........#.....#....m....#.............#
19
+ #.....#........#...a=r...#......#......#
20
+ #.....#.............t...........##.....#
21
21
  #.....#...O.........&............##....#
22
22
  #.....#.............@@@@@@@@......#....#
23
23
  #.....#................................#
@@ -51,3 +51,7 @@ char_to_map_name:
51
51
  "@": agent.agent
52
52
  "&": hub
53
53
  "=": chest
54
+ "a": aligner_station
55
+ "r": scrambler_station
56
+ "m": miner_station
57
+ "t": scout_station