gradlab 0.2.1__tar.gz → 0.2.2__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 (348) hide show
  1. {gradlab-0.2.1 → gradlab-0.2.2}/PKG-INFO +2 -2
  2. {gradlab-0.2.1 → gradlab-0.2.2}/README.md +1 -1
  3. {gradlab-0.2.1 → gradlab-0.2.2}/pyproject.toml +1 -1
  4. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/__init__.py +1 -1
  5. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/batch_runtime.py +17 -10
  6. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/checkpoint_acceptance.py +2 -4
  7. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/task_kernels.py +24 -14
  8. {gradlab-0.2.1 → gradlab-0.2.2}/.gitignore +0 -0
  9. {gradlab-0.2.1 → gradlab-0.2.2}/LICENSE +0 -0
  10. {gradlab-0.2.1 → gradlab-0.2.2}/METRICS.md +0 -0
  11. {gradlab-0.2.1 → gradlab-0.2.2}/THIRD_PARTY_NOTICES.md +0 -0
  12. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Acrobot-v1/_goal.yaml +0 -0
  13. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Acrobot-v1/recipes/ppo.yaml +0 -0
  14. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Blackjack-v1/_goal.yaml +0 -0
  15. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Blackjack-v1/recipes/ppo.yaml +0 -0
  16. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/_goal.yaml +0 -0
  17. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/go-explore-20m.yaml +0 -0
  18. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-128x64.yaml +0 -0
  19. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-archive-curriculum.yaml +0 -0
  20. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-ball-state.yaml +0 -0
  21. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-fusion-256.yaml +0 -0
  22. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo-stable-updates.yaml +0 -0
  23. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Breakout-Atari2600-v0/recipes/ppo.yaml +0 -0
  24. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CartPole-v1/_goal.yaml +0 -0
  25. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CartPole-v1/recipes/ppo.yaml +0 -0
  26. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CliffWalking-v1/_goal.yaml +0 -0
  27. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CliffWalking-v1/recipes/ppo.yaml +0 -0
  28. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CliffWalkingSlippery-v1/_goal.yaml +0 -0
  29. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/CliffWalkingSlippery-v1/recipes/ppo.yaml +0 -0
  30. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/FrozenLake-v1/_goal.yaml +0 -0
  31. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/FrozenLake-v1/recipes/ppo.yaml +0 -0
  32. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/FrozenLake8x8-v1/_goal.yaml +0 -0
  33. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/FrozenLake8x8-v1/recipes/ppo.yaml +0 -0
  34. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/LunarLander-v3/_goal.yaml +0 -0
  35. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/LunarLander-v3/recipes/ppo.yaml +0 -0
  36. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/MountainCar-v0/_goal.yaml +0 -0
  37. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/MountainCar-v0/recipes/ppo.yaml +0 -0
  38. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/EndToEnd/_goal.yaml +0 -0
  39. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/EndToEnd/recipes/ppo.yaml +0 -0
  40. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/_goal.yaml +0 -0
  41. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/a2c.yaml +0 -0
  42. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/dstack-smoke.yaml +0 -0
  43. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/go-explore-20m.yaml +0 -0
  44. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/jerk.yaml +0 -0
  45. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/ppo.yaml +0 -0
  46. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/turbo-demo.yaml +0 -0
  47. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-2/_goal.yaml +0 -0
  48. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-2/recipes/ppo.yaml +0 -0
  49. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/_goal.yaml +0 -0
  50. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/recipes/ppo-train-clear-100.yaml +0 -0
  51. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-3/recipes/ppo.yaml +0 -0
  52. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-4/_goal.yaml +0 -0
  53. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level1-4/recipes/ppo-l14-soft-update.yaml +0 -0
  54. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-1/_goal.yaml +0 -0
  55. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-1/recipes/ppo.yaml +0 -0
  56. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-2/_goal.yaml +0 -0
  57. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-2/recipes/ppo.yaml +0 -0
  58. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-3/_goal.yaml +0 -0
  59. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-3/recipes/ppo.yaml +0 -0
  60. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-4/_goal.yaml +0 -0
  61. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level2-4/recipes/ppo.yaml +0 -0
  62. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-1/_goal.yaml +0 -0
  63. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-1/recipes/ppo.yaml +0 -0
  64. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-2/_goal.yaml +0 -0
  65. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-2/recipes/ppo.yaml +0 -0
  66. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-3/_goal.yaml +0 -0
  67. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-3/recipes/ppo.yaml +0 -0
  68. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-4/_goal.yaml +0 -0
  69. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level3-4/recipes/ppo.yaml +0 -0
  70. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-1/_goal.yaml +0 -0
  71. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-1/recipes/ppo.yaml +0 -0
  72. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-2/_goal.yaml +0 -0
  73. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-2/recipes/ppo.yaml +0 -0
  74. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-3/_goal.yaml +0 -0
  75. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-3/recipes/ppo.yaml +0 -0
  76. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-4/_goal.yaml +0 -0
  77. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Level4-4/recipes/ppo.yaml +0 -0
  78. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/_goal.yaml +0 -0
  79. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/recipes/ppo.yaml +0 -0
  80. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/Levels_1-1_1-2/recipes/raw-advantage.yaml +0 -0
  81. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/_goal-common.yaml +0 -0
  82. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/_goal-family-common.yaml +0 -0
  83. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/_reports.yaml +0 -0
  84. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/SuperMarioBros-Nes-v0/_reward-shapes-common.yaml +0 -0
  85. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Taxi-v3/_goal.yaml +0 -0
  86. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/Taxi-v3/recipes/ppo.yaml +0 -0
  87. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomBasic-Plus-v1/_goal.yaml +0 -0
  88. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomBasic-Plus-v1/recipes/ppo.yaml +0 -0
  89. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomBasic-v1/_goal.yaml +0 -0
  90. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomBasic-v1/recipes/ppo.yaml +0 -0
  91. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDeadlyCorridor-v1/_goal.yaml +0 -0
  92. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDeadlyCorridor-v1/recipes/ppo.yaml +0 -0
  93. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDeathmatch-v1/_goal.yaml +0 -0
  94. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDeathmatch-v1/recipes/gradoom-ppo.yaml +0 -0
  95. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDeathmatch-v1/recipes/ppo.yaml +0 -0
  96. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendCenter-v1/_goal.yaml +0 -0
  97. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendCenter-v1/recipes/ppo.yaml +0 -0
  98. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendLine-Plus-v1/_goal.yaml +0 -0
  99. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendLine-Plus-v1/recipes/ppo.yaml +0 -0
  100. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendLine-v1/_goal.yaml +0 -0
  101. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomDefendLine-v1/recipes/ppo.yaml +0 -0
  102. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGathering-Plus-v1/_goal.yaml +0 -0
  103. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGathering-Plus-v1/recipes/ppo.yaml +0 -0
  104. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGathering-v1/_goal.yaml +0 -0
  105. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGathering-v1/recipes/ppo.yaml +0 -0
  106. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGatheringSupreme-v1/_goal.yaml +0 -0
  107. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomHealthGatheringSupreme-v1/recipes/ppo.yaml +0 -0
  108. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomMyWayHome-v1/_goal.yaml +0 -0
  109. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomMyWayHome-v1/recipes/ppo-cell-novelty.yaml +0 -0
  110. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomMyWayHome-v1/recipes/ppo.yaml +0 -0
  111. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomPredictPosition-v1/_goal.yaml +0 -0
  112. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomPredictPosition-v1/recipes/ppo.yaml +0 -0
  113. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomTakeCover-v1/_goal.yaml +0 -0
  114. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/VizdoomTakeCover-v1/recipes/ppo.yaml +0 -0
  115. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/_catalog.yaml +0 -0
  116. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/_gymnasium-classic-control-common.yaml +0 -0
  117. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/_gymnasium-discrete-common.yaml +0 -0
  118. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/_vizdoom-common.yaml +0 -0
  119. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/_workspaces.yaml +0 -0
  120. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/alepy__mspacman/_goal.yaml +0 -0
  121. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/alepy__mspacman/recipes/ppo.yaml +0 -0
  122. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/gradlab__bandit/_goal.yaml +0 -0
  123. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/goals/gradlab__bandit/recipes/ppo.yaml +0 -0
  124. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/atari-ppo.yaml +0 -0
  125. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/breakout-ball-state-ablation-ppo.yaml +0 -0
  126. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/breakout-high-throughput-ppo.yaml +0 -0
  127. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/classic-control-ppo.yaml +0 -0
  128. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/gymnasium-discrete-ppo.yaml +0 -0
  129. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/mario-mixed-ppo.yaml +0 -0
  130. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/mario-single-on-policy.yaml +0 -0
  131. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/mario-single-ppo.yaml +0 -0
  132. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/vizdoom-basic-ppo.yaml +0 -0
  133. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/vizdoom-defend-line-ppo.yaml +0 -0
  134. {gradlab-0.2.1 → gradlab-0.2.2}/experiments/recipes/_presets/vizdoom-health-gathering-ppo.yaml +0 -0
  135. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_codecs.py +0 -0
  136. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_contract.py +0 -0
  137. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_distributions.py +0 -0
  138. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_overrides.py +0 -0
  139. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_profiles.py +0 -0
  140. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/action_program.py +0 -0
  141. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/actor_critic_policy.py +0 -0
  142. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/artifacts.py +0 -0
  143. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/bandit_env.py +0 -0
  144. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/benchmark.py +0 -0
  145. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/benchmark_profiles.py +0 -0
  146. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/boundary_schema.py +0 -0
  147. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/callbacks.py +0 -0
  148. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/catalog_errors.py +0 -0
  149. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/catalog_jobs.py +0 -0
  150. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/cell_graph.py +0 -0
  151. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/checkpoint_contract.py +0 -0
  152. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/cli_args.py +0 -0
  153. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/cli_parser.py +0 -0
  154. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/clock.py +0 -0
  155. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/config_loader.py +0 -0
  156. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/config_validation.py +0 -0
  157. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/contract_inspection.py +0 -0
  158. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/contract_versions.py +0 -0
  159. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/coordinator_connection.py +0 -0
  160. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_cli.py +0 -0
  161. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_contract.py +0 -0
  162. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_hub.py +0 -0
  163. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_media.py +0 -0
  164. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_minari.py +0 -0
  165. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_providers.py +0 -0
  166. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_record.py +0 -0
  167. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dataset_store.py +0 -0
  168. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/device.py +0 -0
  169. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dotenv.py +0 -0
  170. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/dstack_backend.py +0 -0
  171. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/early_stop.py +0 -0
  172. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env.py +0 -0
  173. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_cli.py +0 -0
  174. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_config.py +0 -0
  175. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_identity.py +0 -0
  176. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_metadata.py +0 -0
  177. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_providers.py +0 -0
  178. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/env_registry.py +0 -0
  179. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/environment_fields.py +0 -0
  180. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/eval.py +0 -0
  181. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/eval_backend.py +0 -0
  182. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/eval_metrics.py +0 -0
  183. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/eval_runner.py +0 -0
  184. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/evaluation_attempts.py +0 -0
  185. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/evaluation_fence.py +0 -0
  186. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/evaluation_projection.py +0 -0
  187. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/experiment_cli.py +0 -0
  188. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/experiment_contracts.py +0 -0
  189. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/file_utils.py +0 -0
  190. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/go_explore.py +0 -0
  191. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/goal_catalog.py +0 -0
  192. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/goal_catalog_projection.py +0 -0
  193. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/goal_schema.py +0 -0
  194. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/goal_variants.py +0 -0
  195. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/gradoom_device_runtime.py +0 -0
  196. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/gymnasium_vec_env.py +0 -0
  197. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/jerk.py +0 -0
  198. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/job_queue.py +0 -0
  199. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/jobs_cli.py +0 -0
  200. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/json_utils.py +0 -0
  201. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/lifecycle_certification.py +0 -0
  202. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/local_paths.py +0 -0
  203. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/local_train.py +0 -0
  204. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/main.py +0 -0
  205. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/manual_evaluation.py +0 -0
  206. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/metric_names.py +0 -0
  207. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/metric_store.py +0 -0
  208. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_app.py +0 -0
  209. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_app_lifecycle.py +0 -0
  210. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_eval_backend.py +0 -0
  211. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_eval_config.py +0 -0
  212. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_eval_protocol.py +0 -0
  213. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_eval_storage.py +0 -0
  214. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/modal_eval_worker.py +0 -0
  215. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/model_inputs.py +0 -0
  216. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/model_sources.py +0 -0
  217. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/operator_credentials.py +0 -0
  218. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/operator_environment.py +0 -0
  219. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play.py +0 -0
  220. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_application.py +0 -0
  221. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_attribution.py +0 -0
  222. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_capture.py +0 -0
  223. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_catalog.py +0 -0
  224. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_catalog_authority.py +0 -0
  225. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_cnn.py +0 -0
  226. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_debug.py +0 -0
  227. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_processing.py +0 -0
  228. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_runtime.py +0 -0
  229. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_session.py +0 -0
  230. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_termination.py +0 -0
  231. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/play_web.py +0 -0
  232. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/playback_worker.py +0 -0
  233. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/player_publication.py +0 -0
  234. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_bundle.py +0 -0
  235. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_execution.py +0 -0
  236. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_model_config.py +0 -0
  237. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_models.py +0 -0
  238. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_observation.py +0 -0
  239. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_registry.py +0 -0
  240. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/policy_runtime.py +0 -0
  241. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/ppo.py +0 -0
  242. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/preprocessing.py +0 -0
  243. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/provider_config.py +0 -0
  244. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/provider_data/stable_retro/Breakout-Atari2600-v0/data.json +0 -0
  245. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/publication.py +0 -0
  246. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/publication_credentials.py +0 -0
  247. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/publication_evidence.py +0 -0
  248. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/publication_jobs.py +0 -0
  249. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/r2_store.py +0 -0
  250. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/ranking.py +0 -0
  251. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/recipe_catalog.py +0 -0
  252. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/recipe_documents.py +0 -0
  253. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/recipe_schema.py +0 -0
  254. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/recipe_variants.py +0 -0
  255. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/reward_programs.py +0 -0
  256. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/reward_transform.py +0 -0
  257. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/rom_assets.py +0 -0
  258. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/rom_cli.py +0 -0
  259. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/rom_runtime.py +0 -0
  260. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/routed_policy.py +0 -0
  261. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/run_authority.py +0 -0
  262. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/run_contracts.py +0 -0
  263. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/run_supervisor.py +0 -0
  264. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/runtime_contract.py +0 -0
  265. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/runtime_refs.py +0 -0
  266. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/sb3_models.py +0 -0
  267. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/schedules.py +0 -0
  268. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/seeds.py +0 -0
  269. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/state_archive.py +0 -0
  270. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/supervision_fault_learner.py +0 -0
  271. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/supervisor_ledger.py +0 -0
  272. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/supervisor_runtime.py +0 -0
  273. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/task_advantage.py +0 -0
  274. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/templates/model_card_v3.md.j2 +0 -0
  275. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/templates/model_card_v4.md.j2 +0 -0
  276. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/train.py +0 -0
  277. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/train_config.py +0 -0
  278. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/__init__.py +0 -0
  279. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/go_explore.py +0 -0
  280. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/jerk.py +0 -0
  281. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/ppo.py +0 -0
  282. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/ppo_engine.py +0 -0
  283. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/sb3.py +0 -0
  284. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/sb3_helpers.py +0 -0
  285. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/sb3_on_policy.py +0 -0
  286. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training/sb3_vec_env.py +0 -0
  287. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training_backend.py +0 -0
  288. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training_lifecycle.py +0 -0
  289. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training_metrics.py +0 -0
  290. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training_tui.py +0 -0
  291. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/training_tui.tcss +0 -0
  292. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/trusted_inputs.py +0 -0
  293. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/turbo_api.py +0 -0
  294. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/validation.py +0 -0
  295. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/video.py +0 -0
  296. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/vizdoom_assets.py +0 -0
  297. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_leaders.py +0 -0
  298. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_publisher.py +0 -0
  299. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_reports.py +0 -0
  300. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_utils.py +0 -0
  301. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_workspace_declarations.py +0 -0
  302. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/wandb_workspaces.py +0 -0
  303. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/app.js +0 -0
  304. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/documents/diff.js +0 -0
  305. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/documents/syntax.js +0 -0
  306. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/documents/viewer.js +0 -0
  307. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/episode-report.js +0 -0
  308. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/event-colors.js +0 -0
  309. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/favicon.svg +0 -0
  310. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/fonts/ChivoVariable.woff2 +0 -0
  311. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/fonts/InterVariable-Italic.woff2 +0 -0
  312. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/fonts/InterVariable.woff2 +0 -0
  313. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/fonts/JetBrainsMonoVariable-Italic.woff2 +0 -0
  314. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/fonts/JetBrainsMonoVariable.woff2 +0 -0
  315. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/index.html +0 -0
  316. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/oauth_complete.html +0 -0
  317. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/oauth_complete.js +0 -0
  318. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/README.md +0 -0
  319. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/action-contract.js +0 -0
  320. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/attribution.js +0 -0
  321. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/catalog.js +0 -0
  322. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/cnn.js +0 -0
  323. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/controls.js +0 -0
  324. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/diagnostic-availability.js +0 -0
  325. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/diagnostic-overlays.js +0 -0
  326. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/events.js +0 -0
  327. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/game.js +0 -0
  328. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/layout-sizing.js +0 -0
  329. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/manager.js +0 -0
  330. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/observation.js +0 -0
  331. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/raw.js +0 -0
  332. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/reward-breakdown.js +0 -0
  333. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/runtime.js +0 -0
  334. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/shared.js +0 -0
  335. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/telemetry-panel.js +0 -0
  336. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/telemetry.js +0 -0
  337. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/panels/workspace.js +0 -0
  338. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/playback-settings.js +0 -0
  339. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/playback-transition.js +0 -0
  340. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/player-presentation.js +0 -0
  341. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/sources/browser.js +0 -0
  342. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/styles.css +0 -0
  343. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/synchronized-presentation.js +0 -0
  344. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/tabler-chevron-down.svg +0 -0
  345. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/tabler-icons.svg +0 -0
  346. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/vendor/gridstack/gridstack-all.js +0 -0
  347. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/web_player/vendor/gridstack/gridstack.min.css +0 -0
  348. {gradlab-0.2.1 → gradlab-0.2.2}/src/gradlab/youtube_publication.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gradlab
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Generic reinforcement-learning lab for training and evaluating game agents
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -64,7 +64,7 @@ with portable policies and evidence-backed results.
64
64
  Try the bundled ROM-free smoke recipe without cloning, credentials, or a ROM:
65
65
 
66
66
  ```bash
67
- uvx gradlab@0.2.1 train gradlab__bandit/ppo
67
+ uvx gradlab@0.2.2 train gradlab__bandit/ppo
68
68
  ```
69
69
 
70
70
  The run writes a directly playable policy below `~/.config/gradlab/runs/`.
@@ -12,7 +12,7 @@ with portable policies and evidence-backed results.
12
12
  Try the bundled ROM-free smoke recipe without cloning, credentials, or a ROM:
13
13
 
14
14
  ```bash
15
- uvx gradlab@0.2.1 train gradlab__bandit/ppo
15
+ uvx gradlab@0.2.2 train gradlab__bandit/ppo
16
16
  ```
17
17
 
18
18
  The run writes a directly playable policy below `~/.config/gradlab/runs/`.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gradlab"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = "Generic reinforcement-learning lab for training and evaluating game agents"
5
5
  readme = "README.md"
6
6
  requires-python = "==3.14.*"
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.1"
5
+ __version__ = "0.2.2"
@@ -585,6 +585,7 @@ class BatchRuntime:
585
585
  "live snapshot continuation"
586
586
  )
587
587
  self.reset_infos: list[dict[str, Any]] = [{} for _ in range(self.num_envs)]
588
+ self._reset_info_dtypes: dict[str, np.dtype[Any]] = {}
588
589
  self._episode_returns = np.zeros(self.num_envs, dtype=np.float64)
589
590
  self._episode_lengths = np.zeros(self.num_envs, dtype=np.int64)
590
591
  self._episode_indices = np.zeros(self.num_envs, dtype=np.int64)
@@ -748,6 +749,7 @@ class BatchRuntime:
748
749
  observations, infos = self.provider.reset(seed=normalized_seeds, options=options)
749
750
  if not isinstance(infos, Mapping):
750
751
  raise TypeError("native provider reset infos must be a columnar mapping")
752
+ self._remember_reset_info_dtypes(infos)
751
753
  self.kernel.on_reset(observations, infos, mask)
752
754
  encoded = self.kernel.encode_observations(observations)
753
755
  if self._reuse_provider_observations:
@@ -942,28 +944,32 @@ class BatchRuntime:
942
944
  ) -> tuple[bytes, ...]:
943
945
  if any(not info for info in self.reset_infos):
944
946
  raise RuntimeError("policy reset cell keys require an initialized runtime")
945
- keys = set().union(*(info.keys() for info in self.reset_infos))
946
- infos = {
947
- key: np.asarray([info.get(key) for info in self.reset_infos])
948
- for key in keys
949
- if not key.startswith("_")
950
- }
951
947
  return self.policy_cell_keys(
952
948
  cell_config,
953
- infos,
949
+ self._columnar_reset_infos(),
954
950
  source="reset",
955
951
  )
956
952
 
957
953
  def state_archive_reset_cell_keys(self) -> tuple[bytes, ...]:
958
954
  if any(not info for info in self.reset_infos):
959
955
  raise RuntimeError("state archive reset cell keys require an initialized runtime")
956
+ return self.state_archive_cell_keys(self._columnar_reset_infos(), source="reset")
957
+
958
+ def _remember_reset_info_dtypes(self, infos: Mapping[str, Any]) -> None:
959
+ for key, value in infos.items():
960
+ if isinstance(key, str) and not key.startswith("_") and isinstance(value, np.ndarray):
961
+ self._reset_info_dtypes[key] = value.dtype
962
+
963
+ def _columnar_reset_infos(self) -> dict[str, np.ndarray]:
960
964
  keys = set().union(*(info.keys() for info in self.reset_infos))
961
- infos = {
962
- key: np.asarray([info.get(key) for info in self.reset_infos])
965
+ return {
966
+ key: np.asarray(
967
+ [info.get(key) for info in self.reset_infos],
968
+ dtype=self._reset_info_dtypes.get(key),
969
+ )
963
970
  for key in keys
964
971
  if not key.startswith("_")
965
972
  }
966
- return self.state_archive_cell_keys(infos, source="reset")
967
973
 
968
974
  def _set_curriculum_reset_baselines(
969
975
  self,
@@ -1669,6 +1675,7 @@ class BatchRuntime:
1669
1675
  reset_seconds = time.perf_counter() - reset_started_at
1670
1676
  if not isinstance(reset_infos, Mapping):
1671
1677
  raise TypeError("native provider reset infos must be a columnar mapping")
1678
+ self._remember_reset_info_dtypes(reset_infos)
1672
1679
  if curriculum is not None and archive_selections:
1673
1680
  curriculum.note_reset(
1674
1681
  len(archive_selections),
@@ -330,7 +330,7 @@ def build_checkpoint_eval_contract(
330
330
  if str(seed_protocol) != SEED_PROTOCOL:
331
331
  raise ValueError(f"unsupported checkpoint eval seed protocol: {seed_protocol!r}")
332
332
  action_sampling = str(action_sampling).strip()
333
- if action_sampling not in {"stochastic", "epsilon_greedy", "program"}:
333
+ if action_sampling not in {"stochastic", "epsilon_greedy", "program", "route"}:
334
334
  raise ValueError(f"unsupported checkpoint eval action selection: {action_sampling!r}")
335
335
  rules = normalize_metric_threshold_rules(acceptance, label="goal.eval.acceptance")
336
336
  if not rules:
@@ -438,9 +438,7 @@ def acceptance_aggregates(
438
438
  if len(rows) == int(contract["episodes"]):
439
439
  if rates:
440
440
  result[EVAL_FULL_OUTCOME_SUCCESS_STARTS_RATE_MIN] = min(rates.values())
441
- result[EVAL_FULL_OUTCOME_SUCCESS_STARTS_RATE_MEAN] = sum(rates.values()) / len(
442
- rates
443
- )
441
+ result[EVAL_FULL_OUTCOME_SUCCESS_STARTS_RATE_MEAN] = sum(rates.values()) / len(rates)
444
442
  returns = [float(row["return"]) for row in rows if row.get("return") is not None]
445
443
  if len(returns) == len(rows) and returns:
446
444
  if not all(math.isfinite(value) for value in returns):
@@ -2053,11 +2053,9 @@ class IdentityTaskDefinition:
2053
2053
  raise ValueError(
2054
2054
  "identity task termination.bootstrap references unknown events: "
2055
2055
  + ", ".join(unknown_bootstrap_events)
2056
- )
2056
+ )
2057
2057
  non_success_bootstrap_events = sorted(
2058
- name
2059
- for name in bootstrap_events
2060
- if event_outcomes.get(name) != Outcome.SUCCESS
2058
+ name for name in bootstrap_events if event_outcomes.get(name) != Outcome.SUCCESS
2061
2059
  )
2062
2060
  if non_success_bootstrap_events:
2063
2061
  raise ValueError(
@@ -2467,7 +2465,7 @@ class IdentityTaskKernel:
2467
2465
  if len(dtypes) != 1:
2468
2466
  raise ValueError(f"archive signal {semantic_name!r} must be scalar")
2469
2467
  dtype = dtypes[0]
2470
- if not np.issubdtype(dtype, np.number) or np.issubdtype(dtype, np.bool_):
2468
+ if not (np.issubdtype(dtype, np.number) or np.issubdtype(dtype, np.bool_)):
2471
2469
  raise ValueError(f"archive signal {semantic_name!r} must be numeric")
2472
2470
 
2473
2471
  def archive_signal_values(
@@ -2559,8 +2557,7 @@ class EventRewardTaskKernel:
2559
2557
  "task.reward.event_rewards references unknown events: " + ", ".join(missing)
2560
2558
  )
2561
2559
  self._configured = tuple(
2562
- (name, event_indices[name], coefficient)
2563
- for name, coefficient in normalized.items()
2560
+ (name, event_indices[name], coefficient) for name, coefficient in normalized.items()
2564
2561
  )
2565
2562
  self._event_reward_components = {
2566
2563
  name: np.zeros(self.num_envs, dtype=np.float32) for name in normalized
@@ -2684,6 +2681,7 @@ class MarioTaskConfig:
2684
2681
  lives: SignalSource = "lives"
2685
2682
  level: SignalSource = ("levelHi", "levelLo")
2686
2683
  game_mode: SignalSource | None = None
2684
+ declared_signals: tuple[tuple[str, SignalSource], ...] = ()
2687
2685
  action_masks: np.ndarray | None = None
2688
2686
  reward_mode: str = "baseline"
2689
2687
  use_native_reward: bool = False
@@ -2814,6 +2812,14 @@ class MarioTaskConfig:
2814
2812
  value = signals.get(name, default)
2815
2813
  return value if isinstance(value, str) else tuple(value)
2816
2814
 
2815
+ declared_signals = tuple(
2816
+ (
2817
+ str(name),
2818
+ source if isinstance(source, str) else tuple(source),
2819
+ )
2820
+ for name, source in signals.items()
2821
+ )
2822
+
2817
2823
  reward_mode = str(reward_value("reward_mode", "baseline"))
2818
2824
  if reward_mode not in {"native", "bounded", "baseline", "score", "additive"}:
2819
2825
  raise ValueError(f"unsupported Mario reward mode {reward_mode!r}")
@@ -2824,6 +2830,7 @@ class MarioTaskConfig:
2824
2830
  lives=signal_value("lives", cls.lives),
2825
2831
  level=signal_value("level", cls.level),
2826
2832
  game_mode=game_mode_source if game_complete_rule else None,
2833
+ declared_signals=declared_signals,
2827
2834
  action_masks=None,
2828
2835
  reward_mode=reward_mode,
2829
2836
  use_native_reward=reward.get("use_native_reward", False),
@@ -2881,12 +2888,15 @@ class MarioTaskKernel:
2881
2888
  self.num_envs = int(num_envs)
2882
2889
  self._native_observation_space = descriptor.native_observation_space
2883
2890
  self.observation_space = _policy_observation_space(self._native_observation_space)
2884
- signal_sources: dict[str, SignalSource] = {
2885
- "x": config.x,
2886
- "score": config.score,
2887
- "lives": config.lives,
2888
- "level": config.level,
2889
- }
2891
+ signal_sources: dict[str, SignalSource] = dict(config.declared_signals)
2892
+ signal_sources.update(
2893
+ {
2894
+ "x": config.x,
2895
+ "score": config.score,
2896
+ "lives": config.lives,
2897
+ "level": config.level,
2898
+ }
2899
+ )
2890
2900
  if config.game_mode is not None:
2891
2901
  signal_sources["game_mode"] = config.game_mode
2892
2902
  self.bindings = SignalBindings(descriptor, signal_sources, self.num_envs)
@@ -3252,7 +3262,7 @@ class MarioTaskKernel:
3252
3262
  elif len(dtypes) != 1:
3253
3263
  raise ValueError(f"archive signal {semantic_name!r} must be scalar")
3254
3264
  if any(
3255
- not np.issubdtype(dtype, np.number) or np.issubdtype(dtype, np.bool_)
3265
+ not (np.issubdtype(dtype, np.number) or np.issubdtype(dtype, np.bool_))
3256
3266
  for dtype in dtypes
3257
3267
  ):
3258
3268
  raise ValueError(f"archive signal {semantic_name!r} must be numeric")
File without changes
File without changes
File without changes
File without changes
File without changes