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
@@ -13,14 +13,14 @@ char_to_map_name:
13
13
  "#": wall
14
14
  ".": empty
15
15
  "@": agent.agent
16
- "M": miner_station
17
- "S": scout_station
18
- "A": aligner_station
19
- "X": scrambler_station
16
+ "M": c:miner
17
+ "S": c:scout
18
+ "A": c:aligner
19
+ "X": c:scrambler
20
20
  "C": carbon_extractor
21
21
  "O": oxygen_extractor
22
22
  "G": germanium_extractor
23
23
  "I": silicon_extractor
24
24
  "J": junction
25
- "&": hub
26
- "=": chest
25
+ "&": c:hub
26
+ "=": c:chest
@@ -19,14 +19,14 @@ char_to_map_name:
19
19
  "#": wall
20
20
  ".": empty
21
21
  "@": agent.agent
22
- "M": miner_station
23
- "S": scout_station
24
- "A": aligner_station
25
- "X": scrambler_station
22
+ "M": c:miner
23
+ "S": c:scout
24
+ "A": c:aligner
25
+ "X": c:scrambler
26
26
  "C": carbon_extractor
27
27
  "O": oxygen_extractor
28
28
  "G": germanium_extractor
29
29
  "I": silicon_extractor
30
30
  "J": junction
31
- "&": hub
32
- "=": chest
31
+ "&": c:hub
32
+ "=": c:chest
@@ -13,14 +13,14 @@ char_to_map_name:
13
13
  "#": wall
14
14
  ".": empty
15
15
  "@": agent.agent
16
- "M": miner_station
17
- "S": scout_station
18
- "A": aligner_station
19
- "X": scrambler_station
16
+ "M": c:miner
17
+ "S": c:scout
18
+ "A": c:aligner
19
+ "X": c:scrambler
20
20
  "C": carbon_extractor
21
21
  "O": oxygen_extractor
22
22
  "G": germanium_extractor
23
23
  "I": silicon_extractor
24
24
  "J": junction
25
- "&": hub
26
- "=": chest
25
+ "&": c:hub
26
+ "=": c:chest
@@ -38,7 +38,7 @@ char_to_map_name:
38
38
  "N": clipped_oxygen_extractor
39
39
  "+": junction
40
40
  "@": agent.agent
41
- "&": hub
42
- "=": chest
41
+ "&": c:hub
42
+ "=": c:chest
43
43
  "F": clipped_germanium_extractor
44
44
  "R": clipped_silicon_extractor
@@ -28,7 +28,7 @@ char_to_map_name:
28
28
  "+": junction
29
29
  "o": oxygen_extractor
30
30
  "@": agent.agent
31
- "&": hub
31
+ "&": c:hub
32
32
  "g": germanium_extractor
33
- "=": chest
33
+ "=": c:chest
34
34
  "s": silicon_extractor
@@ -38,7 +38,7 @@ char_to_map_name:
38
38
  "O": oxygen_extractor
39
39
  "+": junction
40
40
  "@": agent.agent
41
- "&": hub
42
- "=": chest
41
+ "&": c:hub
42
+ "=": c:chest
43
43
  "G": germanium_extractor
44
44
  "S": silicon_extractor
@@ -26,8 +26,8 @@ char_to_map_name:
26
26
  ".": empty
27
27
  "@": agent.agent
28
28
  "+": junction
29
- "&": hub
30
- "=": chest
29
+ "&": c:hub
30
+ "=": c:chest
31
31
  "C": carbon_extractor
32
32
  "O": oxygen_extractor
33
33
  "G": germanium_extractor
@@ -26,8 +26,8 @@ char_to_map_name:
26
26
  ".": empty
27
27
  "@": agent.agent
28
28
  "+": junction
29
- "&": hub
30
- "=": chest
29
+ "&": c:hub
30
+ "=": c:chest
31
31
  "C": carbon_extractor
32
32
  "O": oxygen_extractor
33
33
  "G": germanium_extractor
@@ -26,8 +26,8 @@ char_to_map_name:
26
26
  ".": empty
27
27
  "@": agent.agent
28
28
  "+": junction
29
- "&": hub
30
- "=": chest
29
+ "&": c:hub
30
+ "=": c:chest
31
31
  "C": carbon_extractor
32
32
  "O": oxygen_extractor
33
33
  "G": germanium_extractor
@@ -47,5 +47,5 @@ char_to_map_name:
47
47
  ".": empty
48
48
  "+": junction
49
49
  "@": agent.agent
50
- "&": hub
51
- "=": chest
50
+ "&": c:hub
51
+ "=": c:chest
@@ -24,5 +24,5 @@ char_to_map_name:
24
24
  ".": empty
25
25
  "+": junction
26
26
  "@": agent.agent
27
- "&": hub
28
- "=": chest
27
+ "&": c:hub
28
+ "=": c:chest
cogames/pickup.py CHANGED
@@ -1,15 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import random
3
4
  from dataclasses import dataclass
4
5
  from pathlib import Path
5
6
  from typing import Optional
6
7
 
7
- import numpy as np
8
8
  import typer
9
9
  from rich.console import Console
10
10
  from rich.table import Table
11
11
 
12
- from metta_alo.rollout import run_multi_episode_rollout
13
12
  from metta_alo.scoring import (
14
13
  VorTotals,
15
14
  allocate_counts,
@@ -20,6 +19,7 @@ from metta_alo.scoring import (
20
19
  from mettagrid import MettaGridConfig
21
20
  from mettagrid.mapgen.mapgen import MapGen
22
21
  from mettagrid.policy.policy import PolicySpec
22
+ from mettagrid.runner.rollout import run_multi_episode_rollout
23
23
 
24
24
 
25
25
  @dataclass(frozen=True)
@@ -48,6 +48,7 @@ def pickup(
48
48
  map_seed: Optional[int],
49
49
  action_timeout_ms: int,
50
50
  save_replay_dir: Optional[Path],
51
+ device: Optional[str] = None,
51
52
  candidate_label: Optional[str] = None,
52
53
  pool_labels: Optional[list[str]] = None,
53
54
  ) -> None:
@@ -77,11 +78,11 @@ def pickup(
77
78
 
78
79
  results: list[PickupScenarioResult] = []
79
80
  totals = VorTotals()
80
- rng = np.random.default_rng(seed)
81
+ rng = random.Random(seed)
81
82
 
82
83
  with typer.progressbar(scenarios, label="Simulating") as progress:
83
84
  for scenario in progress:
84
- assignments = np.repeat(np.arange(len(policy_specs)), [scenario.candidate_count, *scenario.pool_counts])
85
+ assignments = [i for i, c in enumerate([scenario.candidate_count, *scenario.pool_counts]) for _ in range(c)]
85
86
 
86
87
  rollout, replay_paths = run_multi_episode_rollout(
87
88
  policy_specs=policy_specs,
@@ -92,7 +93,7 @@ def pickup(
92
93
  max_action_time_ms=action_timeout_ms,
93
94
  replay_dir=save_replay_dir,
94
95
  rng=rng,
95
- device="cpu",
96
+ device=device,
96
97
  )
97
98
  summary = summarize_vor_scenario(
98
99
  rollout,
cogames/play.py CHANGED
@@ -9,11 +9,11 @@ from rich import box
9
9
  from rich.console import Console
10
10
  from rich.table import Table
11
11
 
12
- from metta_alo.pure_single_episode_runner import PureSingleEpisodeResult
13
- from metta_alo.rollout import run_single_episode
14
12
  from mettagrid import MettaGridConfig
15
13
  from mettagrid.policy.policy import PolicySpec
16
14
  from mettagrid.renderer.renderer import RenderMode
15
+ from mettagrid.runner.rollout import run_episode_local
16
+ from mettagrid.runner.types import PureSingleEpisodeResult
17
17
 
18
18
  logger = logging.getLogger("cogames.play")
19
19
 
@@ -162,8 +162,10 @@ def play(
162
162
  policy_spec: PolicySpec,
163
163
  game_name: str,
164
164
  seed: int = 42,
165
+ device: str = "cpu",
165
166
  render_mode: RenderMode = "gui",
166
167
  save_replay: Optional[Path] = None,
168
+ autostart: bool = False,
167
169
  ) -> None:
168
170
  """Play a single game episode with a policy.
169
171
 
@@ -185,20 +187,16 @@ def play(
185
187
  save_replay.mkdir(parents=True, exist_ok=True)
186
188
  replay_path = save_replay / f"{uuid.uuid4()}.json.z"
187
189
 
188
- try:
189
- results, _replay = run_single_episode(
190
- policy_specs=[policy_spec],
191
- assignments=[0] * env_cfg.game.num_agents,
192
- env=env_cfg,
193
- results_uri=None,
194
- replay_uri=str(replay_path) if replay_path else None,
195
- seed=seed,
196
- device="cpu",
197
- render_mode=render_mode,
198
- )
199
- except KeyboardInterrupt:
200
- logger.info("Interrupted; ending episode early.")
201
- return
190
+ results, _replay = run_episode_local(
191
+ policy_specs=[policy_spec],
192
+ assignments=[0] * env_cfg.game.num_agents,
193
+ env=env_cfg,
194
+ replay_path=replay_path,
195
+ seed=seed,
196
+ device=device,
197
+ render_mode=render_mode,
198
+ autostart=autostart,
199
+ )
202
200
 
203
201
  # Print summary
204
202
  console.print("\n[bold green]Episode Complete![/bold green]")
@@ -13,7 +13,6 @@ try:
13
13
  import cogames.policy.nim_agents.agents as agents # noqa: F401
14
14
  from cogames.policy.nim_agents.agents import ( # noqa: F401
15
15
  CogsguardAlignAllAgentsMultiPolicy,
16
- LadyBugAgentsMultiPolicy,
17
16
  RaceCarAgentsMultiPolicy,
18
17
  RandomAgentsMultiPolicy,
19
18
  ThinkyAgentsMultiPolicy,
@@ -30,6 +29,5 @@ __all__ = [
30
29
  "RandomAgentsMultiPolicy",
31
30
  "ThinkyAgentsMultiPolicy",
32
31
  "RaceCarAgentsMultiPolicy",
33
- "LadyBugAgentsMultiPolicy",
34
32
  "CogsguardAlignAllAgentsMultiPolicy",
35
33
  ]
@@ -26,7 +26,6 @@ end_measure: Callable[[], None]
26
26
  ThinkyAgentsMultiPolicy: type[MultiAgentPolicy]
27
27
  RandomAgentsMultiPolicy: type[MultiAgentPolicy]
28
28
  RaceCarAgentsMultiPolicy: type[MultiAgentPolicy]
29
- LadyBugAgentsMultiPolicy: type[MultiAgentPolicy]
30
29
  CogsguardAgentsMultiPolicy: type[MultiAgentPolicy]
31
30
  CogsguardAlignAllAgentsMultiPolicy: type[MultiAgentPolicy]
32
31
 
@@ -37,9 +36,6 @@ try:
37
36
  from cogames_agents.policy.nim_agents.agents import (
38
37
  CogsguardAlignAllAgentsMultiPolicy as _CogsguardAlignAllAgentsMultiPolicy,
39
38
  )
40
- from cogames_agents.policy.nim_agents.agents import (
41
- LadyBugAgentsMultiPolicy as _LadyBugAgentsMultiPolicy,
42
- )
43
39
  from cogames_agents.policy.nim_agents.agents import (
44
40
  RaceCarAgentsMultiPolicy as _RaceCarAgentsMultiPolicy,
45
41
  )
@@ -85,10 +81,6 @@ except (ModuleNotFoundError, OSError) as exc:
85
81
  def __init__(self, policy_env_info: PolicyEnvInterface, **_: object):
86
82
  _raise_missing_nim_agents()
87
83
 
88
- class _MissingLadyBugAgentsMultiPolicy(MultiAgentPolicy):
89
- def __init__(self, policy_env_info: PolicyEnvInterface, **_: object):
90
- _raise_missing_nim_agents()
91
-
92
84
  class _MissingCogsguardAgentsMultiPolicy(MultiAgentPolicy):
93
85
  def __init__(self, policy_env_info: PolicyEnvInterface, **_: object):
94
86
  _raise_missing_nim_agents()
@@ -102,7 +94,6 @@ except (ModuleNotFoundError, OSError) as exc:
102
94
  ThinkyAgentsMultiPolicy = _MissingThinkyAgentsMultiPolicy
103
95
  RandomAgentsMultiPolicy = _MissingRandomAgentsMultiPolicy
104
96
  RaceCarAgentsMultiPolicy = _MissingRaceCarAgentsMultiPolicy
105
- LadyBugAgentsMultiPolicy = _MissingLadyBugAgentsMultiPolicy
106
97
  CogsguardAgentsMultiPolicy = _MissingCogsguardAgentsMultiPolicy
107
98
  CogsguardAlignAllAgentsMultiPolicy = _MissingCogsguardAlignAllAgentsMultiPolicy
108
99
  else:
@@ -111,7 +102,6 @@ else:
111
102
  ThinkyAgentsMultiPolicy = _ThinkyAgentsMultiPolicy
112
103
  RandomAgentsMultiPolicy = _RandomAgentsMultiPolicy
113
104
  RaceCarAgentsMultiPolicy = _RaceCarAgentsMultiPolicy
114
- LadyBugAgentsMultiPolicy = _LadyBugAgentsMultiPolicy
115
105
  CogsguardAgentsMultiPolicy = _CogsguardAgentsMultiPolicy
116
106
  CogsguardAlignAllAgentsMultiPolicy = _CogsguardAlignAllAgentsMultiPolicy
117
107
 
@@ -121,7 +111,6 @@ __all__ = [
121
111
  "ThinkyAgentsMultiPolicy",
122
112
  "RandomAgentsMultiPolicy",
123
113
  "RaceCarAgentsMultiPolicy",
124
- "LadyBugAgentsMultiPolicy",
125
114
  "CogsguardAgentsMultiPolicy",
126
115
  "CogsguardAlignAllAgentsMultiPolicy",
127
116
  ]
@@ -93,7 +93,10 @@ class StarterCogPolicyImpl(StatefulPolicyImpl[StarterCogState]):
93
93
  continue
94
94
  if token.value not in tag_ids:
95
95
  continue
96
- distance = abs(token.location[0] - self._center[0]) + abs(token.location[1] - self._center[1])
96
+ loc = token.location
97
+ if loc is None:
98
+ continue
99
+ distance = abs(loc[0] - self._center[0]) + abs(loc[1] - self._center[1])
97
100
  if distance < best_distance:
98
101
  best_distance = distance
99
102
  best_location = token.location