cogames 0.3.65__py3-none-any.whl → 0.3.68__py3-none-any.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.
Files changed (134) hide show
  1. cogames/cli/client.py +0 -3
  2. cogames/cli/docsync/docsync.py +7 -1
  3. cogames/cli/mission.py +44 -19
  4. cogames/cli/policy.py +26 -10
  5. cogames/cli/submit.py +127 -141
  6. cogames/cli/utils.py +5 -0
  7. cogames/cogs_vs_clips/clip_difficulty.py +57 -0
  8. cogames/cogs_vs_clips/clips.py +23 -6
  9. cogames/cogs_vs_clips/cog.py +16 -5
  10. cogames/cogs_vs_clips/cogsguard_curriculum.py +122 -0
  11. cogames/cogs_vs_clips/cogsguard_tutorial.py +5 -5
  12. cogames/cogs_vs_clips/config.py +1 -1
  13. cogames/cogs_vs_clips/docs/cogs_vs_clips_mapgen.md +2 -3
  14. cogames/cogs_vs_clips/evals/README.md +8 -32
  15. cogames/cogs_vs_clips/evals/diagnostic_evals.py +0 -1
  16. cogames/cogs_vs_clips/evals/difficulty_variants.py +7 -10
  17. cogames/cogs_vs_clips/mission.py +38 -10
  18. cogames/cogs_vs_clips/missions.py +1 -1
  19. cogames/cogs_vs_clips/reward_variants.py +173 -0
  20. cogames/cogs_vs_clips/sites.py +6 -5
  21. cogames/cogs_vs_clips/stations.py +13 -9
  22. cogames/cogs_vs_clips/team.py +3 -1
  23. cogames/cogs_vs_clips/terrain.py +2 -2
  24. cogames/cogs_vs_clips/variants.py +175 -4
  25. cogames/cogs_vs_clips/weather.py +52 -0
  26. cogames/docs/SCRIPTED_AGENT.md +3 -3
  27. cogames/evaluate.py +4 -2
  28. cogames/main.py +357 -51
  29. cogames/maps/canidate1_1000.map +1 -1
  30. cogames/maps/canidate1_1000_stations.map +2 -2
  31. cogames/maps/canidate1_500.map +1 -1
  32. cogames/maps/canidate1_500_stations.map +2 -2
  33. cogames/maps/canidate2_1000.map +1 -1
  34. cogames/maps/canidate2_1000_stations.map +2 -2
  35. cogames/maps/canidate2_500.map +1 -1
  36. cogames/maps/canidate2_500_stations.map +1 -1
  37. cogames/maps/canidate3_1000.map +1 -1
  38. cogames/maps/canidate3_1000_stations.map +2 -2
  39. cogames/maps/canidate3_500.map +1 -1
  40. cogames/maps/canidate3_500_stations.map +2 -2
  41. cogames/maps/canidate4_500.map +1 -1
  42. cogames/maps/canidate4_500_stations.map +2 -2
  43. cogames/maps/cave_base_50.map +2 -2
  44. cogames/maps/diagnostic_evals/diagnostic_agile.map +2 -2
  45. cogames/maps/diagnostic_evals/diagnostic_agile_hard.map +2 -2
  46. cogames/maps/diagnostic_evals/diagnostic_charge_up.map +6 -6
  47. cogames/maps/diagnostic_evals/diagnostic_charge_up_hard.map +6 -6
  48. cogames/maps/diagnostic_evals/diagnostic_chest_navigation1.map +6 -6
  49. cogames/maps/diagnostic_evals/diagnostic_chest_navigation1_hard.map +6 -6
  50. cogames/maps/diagnostic_evals/diagnostic_chest_navigation2.map +6 -6
  51. cogames/maps/diagnostic_evals/diagnostic_chest_navigation2_hard.map +6 -6
  52. cogames/maps/diagnostic_evals/diagnostic_chest_navigation3.map +6 -6
  53. cogames/maps/diagnostic_evals/diagnostic_chest_navigation3_hard.map +6 -6
  54. cogames/maps/diagnostic_evals/diagnostic_chest_near.map +6 -6
  55. cogames/maps/diagnostic_evals/diagnostic_chest_search.map +6 -6
  56. cogames/maps/diagnostic_evals/diagnostic_chest_search_hard.map +6 -6
  57. cogames/maps/diagnostic_evals/diagnostic_extract_lab.map +6 -6
  58. cogames/maps/diagnostic_evals/diagnostic_extract_lab_hard.map +6 -6
  59. cogames/maps/diagnostic_evals/diagnostic_memory.map +6 -6
  60. cogames/maps/diagnostic_evals/diagnostic_memory_hard.map +6 -6
  61. cogames/maps/diagnostic_evals/diagnostic_radial.map +2 -2
  62. cogames/maps/diagnostic_evals/diagnostic_radial_hard.map +2 -2
  63. cogames/maps/diagnostic_evals/diagnostic_resource_lab.map +6 -6
  64. cogames/maps/diagnostic_evals/diagnostic_unclip.map +6 -6
  65. cogames/maps/evals/eval_balanced_spread.map +6 -6
  66. cogames/maps/evals/eval_clip_oxygen.map +6 -6
  67. cogames/maps/evals/eval_collect_resources.map +6 -6
  68. cogames/maps/evals/eval_collect_resources_hard.map +6 -6
  69. cogames/maps/evals/eval_collect_resources_medium.map +6 -6
  70. cogames/maps/evals/eval_divide_and_conquer.map +6 -6
  71. cogames/maps/evals/eval_energy_starved.map +6 -6
  72. cogames/maps/evals/eval_multi_coordinated_collect_hard.map +6 -6
  73. cogames/maps/evals/eval_oxygen_bottleneck.map +6 -6
  74. cogames/maps/evals/eval_single_use_world.map +6 -6
  75. cogames/maps/evals/extractor_hub_100x100.map +6 -6
  76. cogames/maps/evals/extractor_hub_30x30.map +6 -6
  77. cogames/maps/evals/extractor_hub_50x50.map +6 -6
  78. cogames/maps/evals/extractor_hub_70x70.map +6 -6
  79. cogames/maps/evals/extractor_hub_80x80.map +6 -6
  80. cogames/maps/machina_100_stations.map +2 -2
  81. cogames/maps/machina_200_stations.map +2 -2
  82. cogames/maps/machina_200_stations_small.map +2 -2
  83. cogames/maps/machina_eval_exp01.map +2 -2
  84. cogames/maps/machina_eval_template_large.map +2 -2
  85. cogames/maps/machinatrainer4agents.map +2 -2
  86. cogames/maps/machinatrainer4agentsbase.map +2 -2
  87. cogames/maps/machinatrainerbig.map +2 -2
  88. cogames/maps/machinatrainersmall.map +2 -2
  89. cogames/maps/planky_evals/aligner_avoid_aoe.map +6 -6
  90. cogames/maps/planky_evals/aligner_full_cycle.map +6 -6
  91. cogames/maps/planky_evals/aligner_gear.map +6 -6
  92. cogames/maps/planky_evals/aligner_hearts.map +6 -6
  93. cogames/maps/planky_evals/aligner_junction.map +6 -6
  94. cogames/maps/planky_evals/exploration_distant.map +6 -6
  95. cogames/maps/planky_evals/maze.map +6 -6
  96. cogames/maps/planky_evals/miner_best_resource.map +6 -6
  97. cogames/maps/planky_evals/miner_deposit.map +6 -6
  98. cogames/maps/planky_evals/miner_extract.map +6 -6
  99. cogames/maps/planky_evals/miner_full_cycle.map +6 -6
  100. cogames/maps/planky_evals/miner_gear.map +6 -6
  101. cogames/maps/planky_evals/multi_role.map +6 -6
  102. cogames/maps/planky_evals/resource_chain.map +6 -6
  103. cogames/maps/planky_evals/scout_explore.map +6 -6
  104. cogames/maps/planky_evals/scout_gear.map +6 -6
  105. cogames/maps/planky_evals/scrambler_full_cycle.map +6 -6
  106. cogames/maps/planky_evals/scrambler_gear.map +6 -6
  107. cogames/maps/planky_evals/scrambler_target.map +6 -6
  108. cogames/maps/planky_evals/stuck_corridor.map +6 -6
  109. cogames/maps/planky_evals/survive_retreat.map +6 -6
  110. cogames/maps/training_facility_clipped.map +2 -2
  111. cogames/maps/training_facility_open_1.map +2 -2
  112. cogames/maps/training_facility_open_2.map +2 -2
  113. cogames/maps/training_facility_open_3.map +2 -2
  114. cogames/maps/training_facility_tight_4.map +2 -2
  115. cogames/maps/training_facility_tight_5.map +2 -2
  116. cogames/maps/vanilla_large.map +2 -2
  117. cogames/maps/vanilla_small.map +2 -2
  118. cogames/pickup.py +6 -5
  119. cogames/play.py +14 -16
  120. cogames/policy/nim_agents/__init__.py +0 -2
  121. cogames/policy/nim_agents/agents.py +0 -11
  122. cogames/policy/starter_agent.py +4 -1
  123. {cogames-0.3.65.dist-info → cogames-0.3.68.dist-info}/METADATA +45 -29
  124. cogames-0.3.68.dist-info/RECORD +160 -0
  125. metta_alo/scoring.py +7 -7
  126. cogames-0.3.65.dist-info/RECORD +0 -160
  127. metta_alo/job_specs.py +0 -17
  128. metta_alo/policy.py +0 -16
  129. metta_alo/pure_single_episode_runner.py +0 -75
  130. metta_alo/rollout.py +0 -322
  131. {cogames-0.3.65.dist-info → cogames-0.3.68.dist-info}/WHEEL +0 -0
  132. {cogames-0.3.65.dist-info → cogames-0.3.68.dist-info}/entry_points.txt +0 -0
  133. {cogames-0.3.65.dist-info → cogames-0.3.68.dist-info}/licenses/LICENSE +0 -0
  134. {cogames-0.3.65.dist-info → cogames-0.3.68.dist-info}/top_level.txt +0 -0
@@ -1,160 +0,0 @@
1
- cogames/__init__.py,sha256=Loao4kW7AqCRVKcQuA7lKEsyKl9k_Zf1oVlPXvgqjbw,23
2
- cogames/auth.py,sha256=W7BgRhrCTKob68p6HHTKVFjPayySaBG03eIgcGjw_jI,15852
3
- cogames/core.py,sha256=ISoWiRQXuqJhMyN-tROvmIU0_c9s5H__pJVE8BLQCyw,2859
4
- cogames/curricula.py,sha256=a7Nd-av4epAjmoqlefyU4q5eAitpYjCEGDCF_tS_iaY,825
5
- cogames/device.py,sha256=GVC7g4tNVySn_rSbHJB0jGKvpYBL8-VmeYEQXWXtvy0,1680
6
- cogames/evaluate.py,sha256=xm4dCLAXZFhfygDeC_617QXRa5DQYB_6EENEeeDAiWQ,9287
7
- cogames/game.py,sha256=Qpyd4UOv97S-PCcEb422XFVbuXk46qhEx7_FlAr8ayA,3331
8
- cogames/main.py,sha256=zYiY_cB0kiRproN4-Xa6MSwlff3-9hpFZLOZ-YfSwEg,79367
9
- cogames/pickup.py,sha256=gCm-BLMSKN4iflyn2EdsxE7ywKYzMgjozep5o_306yE,6545
10
- cogames/play.py,sha256=SV_gKg5kNj68m7bavmEYomLmmWxVGbc50ZhwAEMDy5E,8014
11
- cogames/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- cogames/train.py,sha256=C4ZP00fxHspiQK-p00EPXyfcwiFKNIBUF1iBe2EE0GE,17894
13
- cogames/verbose.py,sha256=cqdGgSjoTQFektxfDglEZgobm1zfWsxReG2jLborzqI,2916
14
- cogames/cli/base.py,sha256=UpMqeJ0C8i0pkue1AHnnyyX0bFJ9zZeJ7HBR6yhuA8A,54
15
- cogames/cli/client.py,sha256=UFWn6Kjbp6nCYjeC5wMwIJAM5o_hngNdZ_yv24aeiOI,9025
16
- cogames/cli/leaderboard.py,sha256=eIbiSBOkvoi5IL2weiKBOJAjWGHquDk1PWoHKA8uu3g,13941
17
- cogames/cli/login.py,sha256=_i1Hdbp_wAMsX0NLbCTSr7GmOFbzSqwyNP79OqLOg40,1237
18
- cogames/cli/mission.py,sha256=GyHDSDjLnQ0zRp-zk5kOO90IUZE9_860uAfCb_4L1v0,21354
19
- cogames/cli/policy.py,sha256=JI_aX0lcY-kaZWl-RhUfFu0vknF2mXHS8y0CQRRhpao,8743
20
- cogames/cli/submit.py,sha256=jH0ZLdypL43UkrqXmix1-QwwJhv0G_WVVqsiLNaJ1n0,20897
21
- cogames/cli/utils.py,sha256=K4eb-RL73HtavNGxZjn_SVDLAwfFamLCEQNTCNVdmPU,895
22
- cogames/cli/docsync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- cogames/cli/docsync/_nb_md_directive_processing.py,sha256=A920oS21mw9ZU2vp-cILzq5Sa-AMtmwMSayZKcQwX9M,6365
24
- cogames/cli/docsync/_nb_md_sync.py,sha256=oa7P-7OOPUtkKFX6C7SD4fk8ufGDNFvi__zKfhkw4rw,3942
25
- cogames/cli/docsync/_nb_py_sync.py,sha256=BfnfJ-1cRjmpzvggiR8E4vQkTak7AHm36pIK6xJVy-s,4578
26
- cogames/cli/docsync/_three_way_sync.py,sha256=fug-HXNYqJhJvusWHnGmLQewtiAUKhCBOd1Tuu7__sA,4877
27
- cogames/cli/docsync/_utils.py,sha256=zPfXzVa0XbqZReGvMUvxl4yLWc2oFeJJiefOBjOHaCA,2616
28
- cogames/cli/docsync/docsync.py,sha256=dtGG91Co89VdiwRwKk57kYd-qnHiFIgIkS1OI12AYyQ,5664
29
- cogames/cogs_vs_clips/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- cogames/cogs_vs_clips/clips.py,sha256=FlaG2GNx605eSgf3dU2G5GbgtgnG0rAIrhsdjuvKkKs,3611
31
- cogames/cogs_vs_clips/cog.py,sha256=rcFwpG24MHjHx6Erk9sj-bHTvAKgSfExB0YZbFnRwvk,3596
32
- cogames/cogs_vs_clips/cogsguard_tutorial.py,sha256=FjVep1F2q2W9pieCbbJZIR21ImT4ylMiR87P9r98zFI,1577
33
- cogames/cogs_vs_clips/config.py,sha256=TbDGpU_tS0ClG92uvBNzWh-VzFPMko2tt8r_QYj5R7U,1178
34
- cogames/cogs_vs_clips/mission.py,sha256=NRidQF81g0pVcZzGnlTpjXZRcMuojP0-tNMwdJdSzR0,4413
35
- cogames/cogs_vs_clips/missions.py,sha256=feOLCwkpEIcBP6-HeKlo_AyP0-eZmdV58LdG-4gkTLw,2116
36
- cogames/cogs_vs_clips/sites.py,sha256=2GTKwJweipbKVKIameMZYEO2hTixBoEtrVpyjSGHGX8,5446
37
- cogames/cogs_vs_clips/stations.py,sha256=pZCA2_AAcAhV0QjLpFg1rqgLS9LEsID60lTGcMNARw8,7800
38
- cogames/cogs_vs_clips/team.py,sha256=o3FceRfRqiOdwKkO8SGAMw4kCnEOPE9OGrjm_ucZYN8,1480
39
- cogames/cogs_vs_clips/terrain.py,sha256=TeKIydkdZ4prrPfRPy8pE-_5OiNSzh2g5Pjt31gZA40,26105
40
- cogames/cogs_vs_clips/variants.py,sha256=0AuwIx9IQjxMSRtp5OUeQw9qDqCtdAjRpmAQGkzBnoE,7899
41
- cogames/cogs_vs_clips/docs/cogs_vs_clips_mapgen.md,sha256=5vgdYPKWryeh6qEV8nY1bKyDdqriQXGwh8JuGnSoQqE,13198
42
- cogames/cogs_vs_clips/evals/README.md,sha256=sHlK2XDOPK0L3kphSvYWeKqVUjEg9p6TjAa8yhMtKlw,7053
43
- cogames/cogs_vs_clips/evals/cogsguard_evals.py,sha256=LiV6J8WIoUf6pWoWN1DcP9UdyNo7XHGzhhuraw4ZNQ8,2952
44
- cogames/cogs_vs_clips/evals/diagnostic_evals.py,sha256=29sIV_sOC3XWA7s77_dPE0MEbFhqFYQ71rmckx5e9iU,10123
45
- cogames/cogs_vs_clips/evals/difficulty_variants.py,sha256=tm5cFdOzE_HoaOKZ_Mqb0I1vnmNOEpWfjZoYTRGz-14,3803
46
- cogames/cogs_vs_clips/evals/integrated_evals.py,sha256=SfR-VTzEjLIViqpbeCnVHDqQMocK6cBstXD7CshdI6g,1433
47
- cogames/cogs_vs_clips/evals/spanning_evals.py,sha256=PtHABzA_rlM_uyqo-RTLl3lCC84GZZdjrnPevRfT1Ts,7340
48
- cogames/docs/SCRIPTED_AGENT.md,sha256=MDvYQ1Xccexnr_HjCnF5hNsZtqGAy2s0VA3tdgZHego,10918
49
- cogames/maps/canidate1_1000.map,sha256=DjLOgWDX9e9bmnA7oXcyIR-yilpoWufW0tsU12wSMmI,1023273
50
- cogames/maps/canidate1_1000_stations.map,sha256=RXqSceZiEf6TmEfeFO8vsNiAnyhox4zCLp77xPwSO7g,1023402
51
- cogames/maps/canidate1_500.map,sha256=FEhoftpEy9m4tgPwKKK6aZZp_gsgAbxZpMGWYMdtdls,261773
52
- cogames/maps/canidate1_500_stations.map,sha256=IdmnGb0djh9XzwCalJJ51sa5dXsyC5_T7r12w8t_nEo,261902
53
- cogames/maps/canidate2_1000.map,sha256=g6l7lnXEtg0TCEsLzY3WZ2opAa7nZSGUqnQdy8IpZGo,1023273
54
- cogames/maps/canidate2_1000_stations.map,sha256=t6pCH0EZ75VRPTOgtNbIfQ0AmSaxhjRpiXMbCCsnk0M,1023402
55
- cogames/maps/canidate2_500.map,sha256=zLOu4--t8BTDawScdt9eTDHnVugUBRp-6FBn0RtvCoU,261773
56
- cogames/maps/canidate2_500_stations.map,sha256=jyL7DKfmxrogybxa6abJa7ClM_xWq30hvRMmsyvDUK8,261889
57
- cogames/maps/canidate3_1000.map,sha256=AMNljeavU6z15Q4Ts4w9QtgCnPj3S0AcEncEaHKL_0o,1023273
58
- cogames/maps/canidate3_1000_stations.map,sha256=AENVFj_oQ2UBNiWeBWUKkM3QR-9M_vRO-TdxBh3KDoQ,1023402
59
- cogames/maps/canidate3_500.map,sha256=Tu_cTJWz1KRso48wtLHAa7-6M5PAltOCMGwnNDSK8co,261773
60
- cogames/maps/canidate3_500_stations.map,sha256=99QB-4o4jh8SKTkNryh7QuK7X71iIX7DeRYgQ8MMA38,261902
61
- cogames/maps/canidate4_500.map,sha256=Jn0CBxX5iwGHBlV7u-xyAQAuIdlUSzMYCSN1F_BvpLk,261773
62
- cogames/maps/canidate4_500_stations.map,sha256=GBXWYYjEVk2N2JDeRs_cowfXRTjEG2m18PQYILLJ-pQ,261902
63
- cogames/maps/cave_base_50.map,sha256=jHZyZfEJ9awJS2cwK5sWjTN23irhhyDeb4gWirClvzw,4052
64
- cogames/maps/machina_100_stations.map,sha256=oJqPvGVpLyqm35YFgJ2qLfdA2PW1ww-4a-m6JlDdshY,12702
65
- cogames/maps/machina_200_stations.map,sha256=svhatiFmKPq08u1_xeiCuBhkJKq3ucTSn8k06_yMWik,45002
66
- cogames/maps/machina_200_stations_small.map,sha256=7OVVBCOCWCIpJkaCG1uxDQUDn1aFrrImNX92wOMLukE,5927
67
- cogames/maps/machina_eval_exp01.map,sha256=ep5_8N8JyDMVRK2YrAPFbrqiR5WsVKkJPkhTxYxtOqE,2073
68
- cogames/maps/machina_eval_template_large.map,sha256=gZVIICxthSDnzEa8rT5EHR63XapT1-4xa6sQcsYl1mw,4823
69
- cogames/maps/machinatrainer4agents.map,sha256=O3dzwawhcXf72CPlDY4u0aN2M9sZ2W_vgte-hIKoA8g,5382
70
- cogames/maps/machinatrainer4agentsbase.map,sha256=7dUwTtCJK4Nz5rEgXVKzEx3xiZb8X3euXYZNj55nw0E,5382
71
- cogames/maps/machinatrainerbig.map,sha256=X5DkcUflf8mAt9X_rtatsixekwX2H1JClLGCG2Xp9iQ,51348
72
- cogames/maps/machinatrainersmall.map,sha256=F8ndClYV6lw5p0XMe8hFp_ip_zzPE2-ynCX7oeSwQKA,12476
73
- cogames/maps/training_facility_clipped.map,sha256=3xMzGq085cPBOmlSig8OTCOsWXKJ7c667k3wEj2gaHc,1358
74
- cogames/maps/training_facility_open_1.map,sha256=y48S99f5YiVNbvTfuSlfAImloH7IsAMi5LxwircClKI,776
75
- cogames/maps/training_facility_open_2.map,sha256=FMYqOC9ayQyOID6b6-ZgKHyKBuEyhhkfbEHo0MlYv5A,1326
76
- cogames/maps/training_facility_open_3.map,sha256=cc_whap2-U6zvxGGOXeUIYw4_tCR_0V4mMd1YmfMeJI,776
77
- cogames/maps/training_facility_tight_4.map,sha256=xH1RvLFt6XWdeAaWjyVQdSr-KkThAvQO47kaXhg5DkU,776
78
- cogames/maps/training_facility_tight_5.map,sha256=aVF66xgV0Df-NYFkXopabn30mPt_ZRQVER4v5ycm9F0,776
79
- cogames/maps/vanilla_large.map,sha256=hnlo1w8mAnPTl_LT1h-MW66_bplNiJ4OSFw13zG0yu4,2062
80
- cogames/maps/vanilla_small.map,sha256=P1l1tNL68Z8U3gFSwAIYsJzgx7kWz0O_UxfCfeeMFOs,590
81
- cogames/maps/zelda.map,sha256=1_rwezA27n5V9R3JY7WXniFVm8d31_Y1kyr9vn_gPjg,22387
82
- cogames/maps/diagnostic_evals/diagnostic_agile.map,sha256=tFRCId6FyEPCuaVEeSYySHcDH3rq29KLiAz2a1vANHM,812
83
- cogames/maps/diagnostic_evals/diagnostic_agile_hard.map,sha256=sW019536JKJBeVKT5T1mWaeqaOBttlRJ2IpEQjO5jc8,1540
84
- cogames/maps/diagnostic_evals/diagnostic_charge_up.map,sha256=g9Nvtgb7kCGcKr7b387NmVOLWbEeGJTyizRzx-MEfBc,831
85
- cogames/maps/diagnostic_evals/diagnostic_charge_up_hard.map,sha256=wj0vlpDQETSmYpcw0bmJDDqcQ5QbPNnoWBqBZibZKlc,1701
86
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation1.map,sha256=T12a6zUgVfsJhQyvL0kNCx8vWU_FdJCoa75ZVXCi3xU,1763
87
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation1_hard.map,sha256=1PzBOT1j5R0eT1glOXop01UdIZtMOTEHTaL28cjKmKU,3096
88
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation2.map,sha256=17GVIQs5mJEywC0tLV1y3uyEwIpVomnkhEFeNebCAl4,1041
89
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation2_hard.map,sha256=NmLbVM90xRpHJLiPPSeU8puFXUZ7eQougPnjsVse_3g,2770
90
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation3.map,sha256=66zB8rAv85ZiPDq6dYto54g2XCaBIV6m1qqAFS2yWKM,1123
91
- cogames/maps/diagnostic_evals/diagnostic_chest_navigation3_hard.map,sha256=hGJUVN7igzbuPoD9tRu8GCAsn3ea6T2CAwcFPrjIW7w,2636
92
- cogames/maps/diagnostic_evals/diagnostic_chest_near.map,sha256=FN7nA1QpIkg454buDSuIhYTrKJ1zmS_0S_cs--jTf6c,1798
93
- cogames/maps/diagnostic_evals/diagnostic_chest_search.map,sha256=NgWr6ZZ6z5caOdZAxAIXuNwLKnbShKUcC4J7adm0xxc,1798
94
- cogames/maps/diagnostic_evals/diagnostic_chest_search_hard.map,sha256=rgn6kw3-pYWS586UK7ecuSWcU-tNCsC63gPHg51PAlE,14378
95
- cogames/maps/diagnostic_evals/diagnostic_extract_lab.map,sha256=w6k0Srm1Z3P7oAHzIab1uUlVNUTrxi99VDA1rjgYZMk,642
96
- cogames/maps/diagnostic_evals/diagnostic_extract_lab_hard.map,sha256=IWwi5emOlfR2h3aX4lzNVBlIlcWFlsktUMYiws71cdE,1512
97
- cogames/maps/diagnostic_evals/diagnostic_memory.map,sha256=TWMLViQT9b4pYlWgpZUlO-7Z1CGkNfFIg4Y7vboBng8,1210
98
- cogames/maps/diagnostic_evals/diagnostic_memory_hard.map,sha256=pY4KyQ56YYWFkAWVHmegoO9KdGL5WjsMFPYy6rhF2s4,1992
99
- cogames/maps/diagnostic_evals/diagnostic_radial.map,sha256=RxVoYmm6U_qUwmmgXZqB2ck3q6fk0al7P5CwU41wdas,3045
100
- cogames/maps/diagnostic_evals/diagnostic_radial_hard.map,sha256=PPAxa97Eb5LQaDlKaPhJoWxnw31ADLh_soXhOTJ-zlA,24525
101
- cogames/maps/diagnostic_evals/diagnostic_resource_lab.map,sha256=CEZlD1OGnOP9VEksGbxnfSWAZ-JV1hrGF16FtDJTRY0,1798
102
- cogames/maps/diagnostic_evals/diagnostic_unclip.map,sha256=Qj3Slpl7hCP5Xa84A1Ek6wWl0dI_8U7Etm1DMitDyxs,1798
103
- cogames/maps/evals/eval_balanced_spread.map,sha256=Ix-NFCndwvJds3JTSam7HtYJjiuXJRoR8c33SDwUdZc,2162
104
- cogames/maps/evals/eval_clip_oxygen.map,sha256=a3RqOglzbNScOhsN-WDBuZY0CgmgFwKgSwTginmpbT4,2164
105
- cogames/maps/evals/eval_collect_resources.map,sha256=6rQpYwqDHR-bmA3sW-XHBDP9n09uorv8yQLTaBUWmfA,2164
106
- cogames/maps/evals/eval_collect_resources_hard.map,sha256=6LLWYSvdByGqqi-x9-w-akbpz_I--upLTTfmy7uXRvU,2164
107
- cogames/maps/evals/eval_collect_resources_medium.map,sha256=avNWaX3TfSxyKveRb6dfymUKq390PXzGvP1D0c4GlN8,2164
108
- cogames/maps/evals/eval_divide_and_conquer.map,sha256=p_Aw_g2GoAD1zlf45FR4fNjvBAdngpaqV6KZmEiFxxk,2162
109
- cogames/maps/evals/eval_energy_starved.map,sha256=1R5K0XHFHG_sJF3jgDQt5vkEd2S0Xoqc5H3iSq_4QVQ,2162
110
- cogames/maps/evals/eval_multi_coordinated_collect_hard.map,sha256=2ED8sqV9RHPdFEo5F3DBUwC9T0DqcGNTmJbF9iprMLY,2165
111
- cogames/maps/evals/eval_oxygen_bottleneck.map,sha256=XlUTquPT4V3YpbVc5sLpQBm8HVTeeq0W6pRX-dTpXEU,2164
112
- cogames/maps/evals/eval_single_use_world.map,sha256=Hj1KX5Fa4FAmhI8wIR2opRXqn5uUFbDLRthkiZA0ie4,2164
113
- cogames/maps/evals/extractor_hub_100x100.map,sha256=knCtQaQjHV5hwOn95JEfXbusB9NvODGG2u6lIHKZmSY,12792
114
- cogames/maps/evals/extractor_hub_30x30.map,sha256=RM4ZDkThW1emXOPwyKBr_3TB1JsQ0_NVSr7Ma8AHLdQ,2082
115
- cogames/maps/evals/extractor_hub_50x50.map,sha256=Y3BhaSqUNXmas-5ESWVmceeKIX4tbHdbCHG5UkWLvy0,4142
116
- cogames/maps/evals/extractor_hub_70x70.map,sha256=nB-GV-DDDZcUZLciCga5WJJYh932M8xgL7aZiU1OwmI,7002
117
- cogames/maps/evals/extractor_hub_80x80.map,sha256=hPL2bjISsayK7slBPQkGyQBvkDkWFrxd7jbNSNupXE8,8732
118
- cogames/maps/planky_evals/aligner_avoid_aoe.map,sha256=9C2pJsASv7rVUfqpLdoMTA1K01wGRJrBXBvbRRXaGqE,648
119
- cogames/maps/planky_evals/aligner_full_cycle.map,sha256=0ONRKlUI7XSI3L6PhglzNHup_SuNHzsHxl9bNYdmxUw,604
120
- cogames/maps/planky_evals/aligner_gear.map,sha256=5bK9MwJ3HGzB1sWmRol5AdxZ9rwjPp6-OsfFPPQSdDw,460
121
- cogames/maps/planky_evals/aligner_hearts.map,sha256=oCF8DpmxyqpIARzlQRwAEZs3mMvy-KMPmVnVAYn---E,474
122
- cogames/maps/planky_evals/aligner_junction.map,sha256=NzkDOi9lGOpR2avkEPaK2jZcq3x1OBnM-AWc_hTzwUI,542
123
- cogames/maps/planky_evals/exploration_distant.map,sha256=CMk3M5uzrCUZjdow9_DErD2vJzdLe1e9idsFKkMcxZo,648
124
- cogames/maps/planky_evals/maze.map,sha256=cJDGu2b9JHOxWQgeXQsGWKO9xN_CGjbeOeypAehPfUY,662
125
- cogames/maps/planky_evals/miner_best_resource.map,sha256=I5MT8ChAlFu6fXWnD3yqQvqFax9KRjRnCYDTd0hyAAY,542
126
- cogames/maps/planky_evals/miner_deposit.map,sha256=8DgTMdxpvJ4QAbNyu90twhFKLjnxav0k7sRzTNTEf5c,474
127
- cogames/maps/planky_evals/miner_extract.map,sha256=XUgtZaXsnA6rcE2W7DBPjQxS4eUsYC3ZnX6IjzY6Ljk,488
128
- cogames/maps/planky_evals/miner_full_cycle.map,sha256=38nPZ8TujgWIUFzBlZgwDq_Ylr2jlglczgxV53joa7o,560
129
- cogames/maps/planky_evals/miner_gear.map,sha256=PVh6xU8gNKy2XwDv9Vv4ZaX_-0UtGO3cDQg4EQLVWH4,446
130
- cogames/maps/planky_evals/multi_role.map,sha256=8HTHlWxWvsXSbpSU9U0Polq08MOdgKLZMkwndXmsqmU,604
131
- cogames/maps/planky_evals/resource_chain.map,sha256=NWrOKQkcezvZ9LK4Fz26LOYTlLJD2e6AyKk_gxQdNP0,622
132
- cogames/maps/planky_evals/scout_explore.map,sha256=AiYUNrRBZpI6t-ObSx3yZLAIV1ofdNe9gXzn07U9AF8,662
133
- cogames/maps/planky_evals/scout_gear.map,sha256=DoC3Dulxih20js67PuE9mXEiLy3kFafZNuHVWaKzjB4,460
134
- cogames/maps/planky_evals/scrambler_full_cycle.map,sha256=fkmuibPalfsUUMXtawMLt3FquWmJEPb6JdLlTUuDn98,604
135
- cogames/maps/planky_evals/scrambler_gear.map,sha256=WwUCa_kKUQqPdsS_UG2KgPtZIlBd9sUejo0ls8u7lL4,460
136
- cogames/maps/planky_evals/scrambler_target.map,sha256=HwwSIvQvGuEmge3MrzLViPZRuWHNcwY6ZFp134GIN30,524
137
- cogames/maps/planky_evals/stuck_corridor.map,sha256=8wMEjZkZQXevtl2uYKUjFZnln5PWzuePqYRCAooyc_I,572
138
- cogames/maps/planky_evals/survive_retreat.map,sha256=bf2bWTZQ6ZY1RPMrRQC2lyMufCfGiJ-VvDI_A2aiS4s,542
139
- cogames/policy/__init__.py,sha256=JFjmvqYzj_j_mQ4Bmqmc60KU49HF63i0s8lIEu1G_b4,116
140
- cogames/policy/chaos_monkey.py,sha256=FBUK5kZj5Kzgeo8VJ61iFk59AHLLE7Y0bvE7ffPIiHE,1825
141
- cogames/policy/pufferlib_policy.py,sha256=5JaPTLSsicWNCNWYSiJnbijOCKpjkyie4KKvw0-awYE,5617
142
- cogames/policy/signal_handler.py,sha256=19_i72AlYZmMifBDvZuaqLVrFIbWLa8mW-7In7nbG3c,2060
143
- cogames/policy/starter_agent.py,sha256=7jRPOiNLHsR6Nrz6zy09YP02zH87PTQ9ogQadCczd68,7680
144
- cogames/policy/trainable_policy_template.py,sha256=GbB4vi0wsIiuh_APtfjnavvh9ZVUx4SBmBDhU6Msx7s,7337
145
- cogames/policy/nim_agents/__init__.py,sha256=q22rmDMKHMO2A4Cqt0P-kuH3f6yaldlaBaRuGydeEKM,1247
146
- cogames/policy/nim_agents/agents.py,sha256=2uxzs8yxcz3obdA_gaWf0qgojFbXSIU0W3cS-9XD0AI,5038
147
- cogames/policy/nim_agents/thinky_eval.py,sha256=NqIZng30MpyZD5hF03uoje4potd873hWyHOb3AZdeZk,1154
148
- cogames-0.3.65.dist-info/licenses/LICENSE,sha256=NG4hf0NHdGZhkabVCK1MKX8RAJmWaEm4eaGcUsONZ_E,1065
149
- metta_alo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
- metta_alo/job_specs.py,sha256=_QT23tGb7V8W1jqiUijeQUQh6ZvKfW5-KYiYSuNTdVI,450
151
- metta_alo/policy.py,sha256=RnBwDzQ7abFiQSJe6MYr_JtsyHlKBES1CkDN6mZuvQI,613
152
- metta_alo/pure_single_episode_runner.py,sha256=VsSBEn2BVWWHtiZ0SdL9_QMTom_vbbIyPohRVa9rjTc,2720
153
- metta_alo/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- metta_alo/rollout.py,sha256=hc7JRQD4ilfqTO57BvKav2v_JW1Vbcc-oYcEmoWVlB4,10192
155
- metta_alo/scoring.py,sha256=7ikuP6Vnvv57bAc_ARbTadDSf6wm5dCY49xX9QjD_fs,5809
156
- cogames-0.3.65.dist-info/METADATA,sha256=MmW7r978aI0QKGZoD7J47oVHGGz9mmIu8P26htS2ZCY,234991
157
- cogames-0.3.65.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
158
- cogames-0.3.65.dist-info/entry_points.txt,sha256=GTHdgj-RC2hQYmjUMSp9RHX8kbru19k0LS2lAj8DnLE,45
159
- cogames-0.3.65.dist-info/top_level.txt,sha256=YErBkYWJd3-eksLpbgbMrETni1MPBNL4mqEyhZUa0UE,18
160
- cogames-0.3.65.dist-info/RECORD,,
metta_alo/job_specs.py DELETED
@@ -1,17 +0,0 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, Field
4
-
5
- from mettagrid import MettaGridConfig
6
-
7
-
8
- class SingleEpisodeJob(BaseModel):
9
- policy_uris: list[str]
10
- assignments: list[int]
11
- env: MettaGridConfig
12
- results_uri: Optional[str] = None
13
- replay_uri: Optional[str] = None
14
- debug_uri: Optional[str] = None
15
- seed: int = 0
16
- max_action_time_ms: int = 10000
17
- episode_tags: dict[str, str] = Field(default_factory=dict)
metta_alo/policy.py DELETED
@@ -1,16 +0,0 @@
1
- from typing import Optional
2
-
3
-
4
- def parse_policy_identifier(identifier: str) -> tuple[str, Optional[int]]:
5
- """Parse a policy identifier into (name, version)."""
6
- if identifier.endswith(":latest"):
7
- return identifier[:-7], None
8
- if ":" not in identifier:
9
- return identifier, None
10
- name, version_str = identifier.rsplit(":", 1)
11
- if not name:
12
- raise ValueError(f"Invalid policy identifier: {identifier}")
13
- version_str = version_str.lstrip("v")
14
- if not version_str.isdigit():
15
- raise ValueError(f"Invalid version format: {identifier}")
16
- return name, int(version_str)
@@ -1,75 +0,0 @@
1
- import json
2
- import sys
3
- from typing import Sequence
4
-
5
- from pydantic import BaseModel, Field, model_validator
6
-
7
- from mettagrid import MettaGridConfig
8
- from mettagrid.types import EpisodeStats
9
- from mettagrid.util.uri_resolvers.schemes import parse_uri
10
-
11
-
12
- def _validate_output_uri(uri: str) -> None:
13
- parsed = parse_uri(uri, allow_none=False)
14
- if parsed.scheme != "file" or not parsed.local_path.parent.exists():
15
- raise ValueError(f"URI {uri} must be a file:// URI with an existing parent directory")
16
-
17
-
18
- def _validate_assignments(assignments: Sequence[int], num_agents: int, num_policies: int) -> None:
19
- if len(assignments) != num_agents or not all(0 <= assignment < num_policies for assignment in assignments):
20
- raise ValueError("Assignments must match agent count and be within policy range")
21
-
22
-
23
- class PureSingleEpisodeJob(BaseModel):
24
- policy_uris: list[str]
25
-
26
- # It is important that this is explicit, else the results will have to include the choices we made
27
- # when randomizing
28
- assignments: list[int]
29
-
30
- env: MettaGridConfig
31
-
32
- # For now, this only supports file:// scheme. Will eventually support https:// to send to s3
33
- results_uri: str | None # Contains EpisodeRolloutResult
34
- replay_uri: str | None # Where to place replay file. If missing, do not generate a replay
35
- debug_dir: str | None = None # Directory for observability outputs (trace.json, etc.)
36
-
37
- # There's no way to ask us to generate a seed; the caller has to pick one
38
- seed: int = 0
39
-
40
- max_action_time_ms: int = 10000
41
- episode_tags: dict[str, str] = Field(default_factory=dict)
42
-
43
- @model_validator(mode="after")
44
- def validate_output_uris(self) -> "PureSingleEpisodeJob":
45
- for uri in (self.replay_uri, self.results_uri):
46
- if uri is None:
47
- continue
48
- _validate_output_uri(uri)
49
-
50
- if self.replay_uri is not None and not self.replay_uri.endswith((".json.z", ".json.gz")):
51
- raise ValueError("Replay URI must end with .json.z or .json.gz")
52
-
53
- _validate_assignments(self.assignments, self.env.game.num_agents, len(self.policy_uris))
54
-
55
- return self
56
-
57
-
58
- class PureSingleEpisodeResult(BaseModel):
59
- rewards: list[float]
60
- action_timeouts: list[int]
61
- stats: EpisodeStats
62
- steps: int
63
-
64
-
65
- if __name__ == "__main__":
66
- from metta_alo.rollout import run_sandboxed_episode
67
-
68
- with open(sys.argv[1]) as f:
69
- args = json.load(f)
70
- job = PureSingleEpisodeJob.model_validate(args["job"])
71
- allow_network = args.get("allow_network", False)
72
- if allow_network:
73
- raise ValueError("allow_network is not supported by the sandboxed runner")
74
- device = args.get("device")
75
- run_sandboxed_episode(job, device=device)
metta_alo/rollout.py DELETED
@@ -1,322 +0,0 @@
1
- import json
2
- import socket
3
- import sys
4
- import uuid
5
- from contextlib import contextmanager, nullcontext
6
- from pathlib import Path
7
- from typing import Callable, Optional, Protocol, Sequence
8
-
9
- import numpy as np
10
-
11
- from metta_alo.pure_single_episode_runner import (
12
- PureSingleEpisodeJob,
13
- PureSingleEpisodeResult,
14
- _validate_assignments,
15
- _validate_output_uri,
16
- )
17
- from mettagrid import MettaGridConfig
18
- from mettagrid.policy.loader import AgentPolicy, PolicyEnvInterface, initialize_or_load_policy
19
- from mettagrid.policy.policy import PolicySpec
20
- from mettagrid.renderer.renderer import RenderMode
21
- from mettagrid.simulator.multi_episode.rollout import EpisodeRolloutResult, MultiEpisodeRolloutResult
22
- from mettagrid.simulator.replay_log_writer import EpisodeReplay, InMemoryReplayWriter
23
- from mettagrid.simulator.rollout import Rollout
24
- from mettagrid.util.file import write_data
25
- from mettagrid.util.tracer import Tracer
26
- from mettagrid.util.uri_resolvers.schemes import parse_uri, policy_spec_from_uri
27
-
28
-
29
- class ReplayLike(Protocol):
30
- def set_compression(self, compression: str) -> None: ...
31
-
32
- def write_replay(self, path: str) -> None: ...
33
-
34
-
35
- def write_replay(replay: ReplayLike, path: str) -> None:
36
- if path.endswith(".gz"):
37
- replay.set_compression("gzip")
38
- elif path.endswith(".z"):
39
- replay.set_compression("zlib")
40
- replay.write_replay(path)
41
-
42
-
43
- @contextmanager
44
- def _no_python_sockets():
45
- _real_socket = socket.socket
46
- _real_getaddrinfo = socket.getaddrinfo
47
-
48
- def _blocked(*args: object, **kwargs: object):
49
- raise RuntimeError("Network access disabled")
50
-
51
- socket.socket = _blocked
52
- socket.getaddrinfo = _blocked
53
-
54
- try:
55
- yield
56
- finally:
57
- socket.socket = _real_socket
58
- socket.getaddrinfo = _real_getaddrinfo
59
-
60
-
61
- def _policy_specs_from_uris(
62
- policy_uris: Sequence[str],
63
- *,
64
- device: Optional[str],
65
- allow_network: bool,
66
- ) -> list[PolicySpec]:
67
- policy_specs: list[PolicySpec] = []
68
- for uri in policy_uris:
69
- parsed = parse_uri(uri, allow_none=False)
70
- if parsed.scheme != "file" and not allow_network:
71
- raise ValueError("Sandboxed runner requires file:// policy URIs")
72
- policy_specs.append(
73
- policy_spec_from_uri(
74
- uri,
75
- device=device or "cpu",
76
- remove_downloaded_copy_on_exit=True,
77
- )
78
- )
79
- return policy_specs
80
-
81
-
82
- def _write_outputs(
83
- results: PureSingleEpisodeResult,
84
- replay: Optional[EpisodeReplay],
85
- *,
86
- results_uri: Optional[str],
87
- replay_uri: Optional[str],
88
- ) -> None:
89
- if replay_uri is not None:
90
- if replay is None:
91
- raise ValueError("No replay was generated")
92
- write_replay(replay, replay_uri)
93
- if results_uri is not None:
94
- write_data(results_uri, results.model_dump_json(), content_type="application/json")
95
-
96
-
97
- def _run_pure_episode(
98
- policy_specs: Sequence[PolicySpec],
99
- assignments: Sequence[int],
100
- env: MettaGridConfig,
101
- *,
102
- seed: int,
103
- max_action_time_ms: int,
104
- device: Optional[str],
105
- render_mode: RenderMode,
106
- autostart: bool,
107
- capture_replay: bool,
108
- trace_path: Optional[Path] = None,
109
- ) -> tuple[PureSingleEpisodeResult, Optional[EpisodeReplay]]:
110
- env_interface = PolicyEnvInterface.from_mg_cfg(env)
111
- agent_policies: list[AgentPolicy] = [
112
- initialize_or_load_policy(
113
- env_interface,
114
- policy_specs[assignment],
115
- device_override=device,
116
- ).agent_policy(agent_id)
117
- for agent_id, assignment in enumerate(assignments)
118
- ]
119
- replay_writer: Optional[InMemoryReplayWriter] = None
120
- if capture_replay:
121
- replay_writer = InMemoryReplayWriter()
122
-
123
- tracer: Optional[Tracer] = None
124
- if trace_path:
125
- tracer = Tracer(trace_path)
126
-
127
- rollout = Rollout(
128
- env,
129
- agent_policies,
130
- max_action_time_ms=max_action_time_ms,
131
- render_mode=render_mode,
132
- autostart=autostart,
133
- seed=seed,
134
- event_handlers=[replay_writer] if replay_writer is not None else None,
135
- tracer=tracer,
136
- )
137
- rollout.run_until_done()
138
-
139
- results = PureSingleEpisodeResult(
140
- rewards=list(rollout._sim.episode_rewards),
141
- action_timeouts=list(rollout.timeout_counts),
142
- stats=rollout._sim.episode_stats,
143
- steps=rollout._sim.current_step,
144
- )
145
- replay: Optional[EpisodeReplay] = None
146
- if replay_writer is not None:
147
- replays = replay_writer.get_completed_replays()
148
- if len(replays) != 1:
149
- raise ValueError(f"Expected 1 replay, got {len(replays)}")
150
- replay = replays[0]
151
-
152
- return results, replay
153
-
154
-
155
- def run_single_episode(
156
- *,
157
- policy_specs: Sequence[PolicySpec],
158
- assignments: Sequence[int],
159
- env: MettaGridConfig,
160
- results_uri: Optional[str] = None,
161
- replay_uri: Optional[str] = None,
162
- debug_dir: Optional[str] = None,
163
- seed: int = 0,
164
- max_action_time_ms: int = 10000,
165
- device: Optional[str] = None,
166
- render_mode: Optional[RenderMode] = None,
167
- autostart: bool = False,
168
- allow_network: bool = True,
169
- ) -> tuple[PureSingleEpisodeResult, Optional[EpisodeReplay]]:
170
- _validate_assignments(assignments, env.game.num_agents, len(policy_specs))
171
-
172
- for uri in (replay_uri, results_uri):
173
- if uri is None:
174
- continue
175
- _validate_output_uri(uri)
176
-
177
- if replay_uri is not None and not replay_uri.endswith((".json.z", ".json.gz")):
178
- raise ValueError("Replay URI must end with .json.z or .json.gz")
179
-
180
- trace_path: Optional[Path] = None
181
- if debug_dir is not None:
182
- debug_path = Path(debug_dir)
183
- debug_path.mkdir(parents=True, exist_ok=True)
184
- trace_path = debug_path / "trace.json"
185
-
186
- with (_no_python_sockets if not allow_network else nullcontext)():
187
- results, replay = _run_pure_episode(
188
- policy_specs,
189
- assignments,
190
- env,
191
- seed=seed,
192
- max_action_time_ms=max_action_time_ms,
193
- device=device,
194
- render_mode=render_mode or "none",
195
- autostart=autostart,
196
- capture_replay=replay_uri is not None,
197
- trace_path=trace_path,
198
- )
199
-
200
- _write_outputs(results, replay, results_uri=results_uri, replay_uri=replay_uri)
201
- return results, replay
202
-
203
-
204
- def run_sandboxed_episode(
205
- job: PureSingleEpisodeJob,
206
- *,
207
- device: Optional[str] = None,
208
- render_mode: Optional[RenderMode] = None,
209
- ) -> tuple[PureSingleEpisodeResult, Optional[EpisodeReplay]]:
210
- policy_specs = _policy_specs_from_uris(job.policy_uris, device=device, allow_network=False)
211
- return run_single_episode(
212
- policy_specs=policy_specs,
213
- assignments=job.assignments,
214
- env=job.env,
215
- results_uri=job.results_uri,
216
- replay_uri=job.replay_uri,
217
- debug_dir=job.debug_dir,
218
- seed=job.seed,
219
- max_action_time_ms=job.max_action_time_ms,
220
- device=device,
221
- render_mode=render_mode,
222
- allow_network=False,
223
- )
224
-
225
-
226
- def run_single_episode_rollout(
227
- *,
228
- policy_specs: Sequence[PolicySpec],
229
- assignments: np.ndarray,
230
- env_cfg: MettaGridConfig,
231
- seed: int,
232
- max_action_time_ms: int,
233
- replay_path: Optional[str] = None,
234
- device: Optional[str] = None,
235
- ) -> EpisodeRolloutResult:
236
- results, _replay = run_single_episode(
237
- policy_specs=policy_specs,
238
- assignments=assignments.tolist(),
239
- env=env_cfg,
240
- results_uri=None,
241
- replay_uri=replay_path,
242
- seed=seed,
243
- max_action_time_ms=max_action_time_ms,
244
- device=device,
245
- )
246
-
247
- return EpisodeRolloutResult(
248
- assignments=assignments.copy(),
249
- rewards=np.array(results.rewards, dtype=float),
250
- action_timeouts=np.array(results.action_timeouts, dtype=float),
251
- stats=results.stats,
252
- replay_path=replay_path,
253
- steps=results.steps,
254
- max_steps=env_cfg.game.max_steps,
255
- )
256
-
257
-
258
- def run_multi_episode_rollout(
259
- *,
260
- policy_specs: Sequence[PolicySpec],
261
- assignments: np.ndarray,
262
- env_cfg: MettaGridConfig,
263
- episodes: int,
264
- seed: int,
265
- max_action_time_ms: int,
266
- replay_dir: Optional[str | Path] = None,
267
- create_replay_dir: bool = False,
268
- rng: Optional[np.random.Generator] = None,
269
- device: Optional[str] = None,
270
- on_progress: Optional[Callable[[int, EpisodeRolloutResult], None]] = None,
271
- ) -> tuple[MultiEpisodeRolloutResult, list[str]]:
272
- if replay_dir is not None and create_replay_dir:
273
- Path(replay_dir).mkdir(parents=True, exist_ok=True)
274
-
275
- assignments = np.array(assignments, dtype=int, copy=True)
276
- rng = rng or np.random.default_rng(seed)
277
- episode_results: list[EpisodeRolloutResult] = []
278
- replay_paths: list[str] = []
279
-
280
- for episode_idx in range(episodes):
281
- rng.shuffle(assignments)
282
- replay_path = None
283
- if replay_dir is not None:
284
- replay_path = str(Path(replay_dir) / f"{uuid.uuid4()}.json.z")
285
-
286
- result = run_single_episode_rollout(
287
- policy_specs=policy_specs,
288
- assignments=assignments,
289
- env_cfg=env_cfg,
290
- seed=seed + episode_idx,
291
- max_action_time_ms=max_action_time_ms,
292
- replay_path=replay_path,
293
- device=device,
294
- )
295
- episode_results.append(result)
296
- if on_progress:
297
- on_progress(episode_idx, result)
298
- if replay_path is not None:
299
- replay_paths.append(replay_path)
300
-
301
- return MultiEpisodeRolloutResult(episodes=episode_results), replay_paths
302
-
303
-
304
- if __name__ == "__main__":
305
- with open(sys.argv[1]) as f:
306
- args = json.load(f)
307
- job = PureSingleEpisodeJob.model_validate(args["job"])
308
- device = args.get("device")
309
- allow_network = args.get("allow_network", False)
310
- policy_specs = _policy_specs_from_uris(job.policy_uris, device=device, allow_network=allow_network)
311
- run_single_episode(
312
- policy_specs=policy_specs,
313
- assignments=job.assignments,
314
- env=job.env,
315
- results_uri=job.results_uri,
316
- replay_uri=job.replay_uri,
317
- debug_dir=job.debug_dir,
318
- seed=job.seed,
319
- max_action_time_ms=job.max_action_time_ms,
320
- device=device,
321
- allow_network=allow_network,
322
- )