synth-ai 0.2.8.dev4__py3-none-any.whl → 0.2.23.dev3__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 (889) hide show
  1. examples/README.md +1 -0
  2. examples/__init__.py +16 -0
  3. examples/analyze_semantic_words.sh +17 -0
  4. examples/baseline/banking77_baseline.py +243 -0
  5. examples/baseline/banking77_pipeline_baseline.py +294 -0
  6. examples/baseline/crafter_baseline.py +407 -0
  7. examples/baseline/pokemon_red_baseline.py +326 -0
  8. examples/baseline/simple_baseline.py +56 -0
  9. examples/baseline/warming_up_to_rl_baseline.py +239 -0
  10. examples/blog_posts/gepa/README.md +355 -0
  11. examples/blog_posts/gepa/configs/banking77_gepa_local.toml +95 -0
  12. examples/blog_posts/gepa/configs/banking77_gepa_test.toml +80 -0
  13. examples/blog_posts/gepa/configs/banking77_mipro_local.toml +50 -0
  14. examples/blog_posts/gepa/configs/banking77_pipeline_gepa_local.toml +101 -0
  15. examples/blog_posts/gepa/configs/banking77_pipeline_gepa_test.toml +96 -0
  16. examples/blog_posts/gepa/configs/hotpotqa_gepa_local.toml +57 -0
  17. examples/blog_posts/gepa/configs/hotpotqa_gepa_qwen.toml +35 -0
  18. examples/blog_posts/gepa/configs/hotpotqa_mipro_local.toml +51 -0
  19. examples/blog_posts/gepa/configs/hover_gepa_local.toml +57 -0
  20. examples/blog_posts/gepa/configs/hover_gepa_qwen.toml +35 -0
  21. examples/blog_posts/gepa/configs/hover_mipro_local.toml +51 -0
  22. examples/blog_posts/gepa/configs/ifbench_gepa_local.toml +57 -0
  23. examples/blog_posts/gepa/configs/ifbench_gepa_qwen.toml +35 -0
  24. examples/blog_posts/gepa/configs/ifbench_mipro_local.toml +51 -0
  25. examples/blog_posts/gepa/configs/pupa_gepa_local.toml +58 -0
  26. examples/blog_posts/gepa/configs/pupa_mipro_local.toml +52 -0
  27. examples/blog_posts/gepa/deploy_banking77_task_app.sh +54 -0
  28. examples/blog_posts/gepa/gepa_baseline.py +204 -0
  29. examples/blog_posts/gepa/query_prompts_example.py +97 -0
  30. examples/blog_posts/gepa/run_gepa_banking77.sh +112 -0
  31. examples/blog_posts/gepa/run_gepa_banking77_pipeline.sh +163 -0
  32. examples/blog_posts/gepa/task_apps.py +105 -0
  33. examples/blog_posts/gepa/test_gepa_local.sh +67 -0
  34. examples/blog_posts/gepa/verify_banking77_setup.sh +123 -0
  35. examples/blog_posts/mipro/README.md +415 -0
  36. examples/blog_posts/mipro/configs/banking77_mipro_local.toml +91 -0
  37. examples/blog_posts/mipro/configs/banking77_mipro_test.toml +87 -0
  38. examples/blog_posts/mipro/configs/banking77_pipeline_mipro_gemini_flash_lite_local.toml +98 -0
  39. examples/blog_posts/mipro/configs/banking77_pipeline_mipro_gpt41mini_local.toml +96 -0
  40. examples/blog_posts/mipro/configs/banking77_pipeline_mipro_local.toml +94 -0
  41. examples/blog_posts/mipro/configs/banking77_pipeline_mipro_test.toml +170 -0
  42. examples/blog_posts/mipro/deploy_banking77_pipeline_task_app.sh +59 -0
  43. examples/blog_posts/mipro/deploy_banking77_task_app.sh +41 -0
  44. examples/blog_posts/mipro/multi_step.md +79 -0
  45. examples/blog_posts/mipro/run_mipro_banking77.sh +191 -0
  46. examples/blog_posts/mipro/run_mipro_banking77_pipeline.sh +171 -0
  47. examples/blog_posts/mipro/run_mipro_banking77_pipeline_gemini_flash_lite.sh +177 -0
  48. examples/blog_posts/mipro/run_mipro_banking77_pipeline_gpt41mini.sh +173 -0
  49. examples/blog_posts/mipro/verify_banking77_setup.sh +117 -0
  50. examples/blog_posts/pokemon_vl/README.md +98 -0
  51. examples/blog_posts/pokemon_vl/configs/eval_gpt5nano.toml +26 -0
  52. examples/blog_posts/pokemon_vl/configs/eval_qwen3_vl.toml +27 -0
  53. examples/blog_posts/pokemon_vl/configs/eval_rl_final.toml +24 -0
  54. examples/blog_posts/pokemon_vl/configs/filter_high_reward.toml +10 -0
  55. examples/blog_posts/pokemon_vl/configs/train_rl_from_sft.toml +43 -0
  56. examples/blog_posts/pokemon_vl/configs/train_sft_qwen4b_vl.toml +40 -0
  57. examples/blog_posts/pokemon_vl/extract_images.py +239 -0
  58. examples/blog_posts/pokemon_vl/pokemon_vl_baseline.py +326 -0
  59. examples/blog_posts/pokemon_vl/run_eval_extract_images.py +209 -0
  60. examples/blog_posts/pokemon_vl/run_qwen_eval_extract_images.py +212 -0
  61. examples/blog_posts/pokemon_vl/text_box_analysis.md +106 -0
  62. examples/blog_posts/warming_up_to_rl/ARCHITECTURE.md +195 -0
  63. examples/blog_posts/warming_up_to_rl/FINAL_TEST_RESULTS.md +127 -0
  64. examples/blog_posts/warming_up_to_rl/INFERENCE_SUCCESS.md +132 -0
  65. examples/blog_posts/warming_up_to_rl/README.md +158 -0
  66. examples/blog_posts/warming_up_to_rl/SMOKE_TESTING.md +164 -0
  67. examples/blog_posts/warming_up_to_rl/SMOKE_TEST_COMPLETE.md +253 -0
  68. examples/blog_posts/warming_up_to_rl/configs/eval_baseline_qwen32b_10x20.toml +25 -0
  69. examples/blog_posts/warming_up_to_rl/configs/eval_ft_qwen4b.toml +25 -0
  70. examples/blog_posts/warming_up_to_rl/configs/eval_ft_qwen4b_10x20.toml +26 -0
  71. examples/blog_posts/warming_up_to_rl/configs/eval_groq_qwen32b.toml +25 -0
  72. examples/blog_posts/warming_up_to_rl/configs/eval_openai_gpt_oss_120b.toml +29 -0
  73. examples/blog_posts/warming_up_to_rl/configs/filter_high_reward_dataset.toml +10 -0
  74. examples/blog_posts/warming_up_to_rl/configs/smoke_test.toml +75 -0
  75. examples/blog_posts/warming_up_to_rl/configs/train_rl_from_sft.toml +91 -0
  76. examples/blog_posts/warming_up_to_rl/configs/train_sft_qwen4b.toml +40 -0
  77. examples/blog_posts/warming_up_to_rl/warming_up_to_rl_baseline.py +187 -0
  78. examples/crafter_debug_render.py +186 -0
  79. examples/dev/qwen3_32b_qlora_4xh100.toml +45 -0
  80. examples/gepa/banking77_pipeline_gepa.toml +96 -0
  81. examples/gepa/multi_stage_gepa_example.toml +84 -0
  82. examples/gepa/run_gepa_banking77_pipeline.sh +157 -0
  83. examples/multi_step/SFT_README.md +147 -0
  84. examples/multi_step/configs/README_verilog_rl.md +77 -0
  85. examples/multi_step/configs/VERILOG_REWARDS.md +103 -0
  86. examples/multi_step/configs/VERILOG_RL_CHECKLIST.md +196 -0
  87. examples/multi_step/configs/crafter_eval_synth_qwen4b.toml +35 -0
  88. examples/multi_step/configs/crafter_eval_text_only_groq_qwen32b.toml +36 -0
  89. examples/multi_step/configs/crafter_rl_outcome.toml +75 -0
  90. examples/multi_step/configs/crafter_rl_stepwise_hosted_judge.toml +145 -0
  91. examples/multi_step/configs/crafter_rl_stepwise_shaped.toml +84 -0
  92. examples/multi_step/configs/crafter_rl_stepwise_simple.toml +79 -0
  93. examples/multi_step/configs/crafter_rl_stepwise_simple_NEW_FORMAT.toml +105 -0
  94. examples/multi_step/configs/crafter_sft_qwen30b_lora.toml +62 -0
  95. examples/multi_step/configs/crafter_synth_backend.md +40 -0
  96. examples/multi_step/configs/verilog_eval_groq_qwen32b.toml +31 -0
  97. examples/multi_step/configs/verilog_eval_synth_qwen8b.toml +33 -0
  98. examples/multi_step/configs/verilog_rl_lora.toml +147 -0
  99. examples/multi_step/convert_traces_to_sft.py +84 -0
  100. examples/multi_step/crafter_rl_lora.md +70 -0
  101. examples/multi_step/judges/crafter_backend_judge.py +220 -0
  102. examples/multi_step/judges/verilog_backend_judge.py +234 -0
  103. examples/multi_step/readme.md +48 -0
  104. examples/multi_step/run_sft_qwen30b.sh +45 -0
  105. examples/multi_step/sse_metrics_streaming_notes.md +357 -0
  106. examples/multi_step/task_app_config_notes.md +494 -0
  107. examples/multi_step/verilog_rl_lora.md +218 -0
  108. examples/qwen_coder/README.md +102 -0
  109. examples/qwen_coder/_shared.py +113 -0
  110. examples/qwen_coder/configs/coder_lora_30b.toml +60 -0
  111. examples/qwen_coder/configs/coder_lora_4b.toml +61 -0
  112. examples/qwen_coder/configs/coder_lora_small.toml +57 -0
  113. examples/qwen_coder/generate_dataset.py +98 -0
  114. examples/qwen_coder/infer_ft_smoke.py +65 -0
  115. examples/qwen_coder/infer_prod_proxy.py +73 -0
  116. examples/qwen_coder/infer_via_synth.py +87 -0
  117. examples/qwen_coder/scripts/infer_coder.sh +19 -0
  118. examples/qwen_coder/scripts/train_coder_30b.sh +22 -0
  119. examples/qwen_coder/sft_full_17b.py +103 -0
  120. examples/qwen_coder/sft_lora_30b.py +110 -0
  121. examples/qwen_coder/subset_jsonl.py +39 -0
  122. examples/qwen_coder/todos.md +38 -0
  123. examples/qwen_coder/validate_jsonl.py +60 -0
  124. examples/qwen_vl/BUGS_AND_FIXES.md +232 -0
  125. examples/qwen_vl/IMAGE_VALIDATION_COMPLETE.md +271 -0
  126. examples/qwen_vl/IMAGE_VALIDATION_SUMMARY.md +260 -0
  127. examples/qwen_vl/INFERENCE_SFT_TESTS.md +412 -0
  128. examples/qwen_vl/NEXT_STEPS_2B.md +325 -0
  129. examples/qwen_vl/QUICKSTART.md +327 -0
  130. examples/qwen_vl/QUICKSTART_RL_VISION.md +110 -0
  131. examples/qwen_vl/README.md +152 -0
  132. examples/qwen_vl/RL_VISION_COMPLETE.md +475 -0
  133. examples/qwen_vl/RL_VISION_TESTING.md +333 -0
  134. examples/qwen_vl/SDK_VISION_INTEGRATION.md +328 -0
  135. examples/qwen_vl/SETUP_COMPLETE.md +274 -0
  136. examples/qwen_vl/VISION_TESTS_COMPLETE.md +489 -0
  137. examples/qwen_vl/VLM_PIPELINE_COMPLETE.md +242 -0
  138. examples/qwen_vl/__init__.py +2 -0
  139. examples/qwen_vl/collect_data_via_cli.md +415 -0
  140. examples/qwen_vl/collect_vision_traces.py +368 -0
  141. examples/qwen_vl/configs/crafter_rl_vision_qwen3vl4b.toml +110 -0
  142. examples/qwen_vl/configs/crafter_vlm_sft_example.toml +59 -0
  143. examples/qwen_vl/configs/eval_gpt4o_mini_vision.toml +26 -0
  144. examples/qwen_vl/configs/eval_gpt4o_vision_proper.toml +29 -0
  145. examples/qwen_vl/configs/eval_gpt5nano_vision.toml +26 -0
  146. examples/qwen_vl/configs/eval_qwen3vl_vision.toml +26 -0
  147. examples/qwen_vl/configs/filter_qwen3vl_sft.toml +49 -0
  148. examples/qwen_vl/configs/filter_vision_sft.toml +52 -0
  149. examples/qwen_vl/configs/filter_vision_test.toml +8 -0
  150. examples/qwen_vl/configs/sft_qwen3_vl_2b_test.toml +54 -0
  151. examples/qwen_vl/crafter_gpt5nano_agent.py +308 -0
  152. examples/qwen_vl/crafter_qwen_vl_agent.py +300 -0
  153. examples/qwen_vl/run_vision_comparison.sh +61 -0
  154. examples/qwen_vl/run_vision_sft_pipeline.sh +175 -0
  155. examples/qwen_vl/test_image_validation.py +201 -0
  156. examples/qwen_vl/test_sft_vision_data.py +110 -0
  157. examples/rl/README.md +169 -0
  158. examples/rl/configs/eval_base_qwen.toml +17 -0
  159. examples/rl/configs/eval_rl_qwen.toml +13 -0
  160. examples/rl/configs/rl_from_base_qwen.toml +62 -0
  161. examples/rl/configs/rl_from_base_qwen17.toml +80 -0
  162. examples/rl/configs/rl_from_ft_qwen.toml +37 -0
  163. examples/rl/download_dataset.py +80 -0
  164. examples/rl/run_eval.py +436 -0
  165. examples/rl/run_rl_and_save.py +111 -0
  166. examples/rl/task_app/README.md +21 -0
  167. examples/rl/task_app/math_single_step.py +990 -0
  168. examples/rl/task_app/math_task_app.py +111 -0
  169. examples/run_crafter_demo.sh +10 -0
  170. examples/sdk_prompt_learning_example.py +55 -0
  171. examples/sft/README.md +139 -0
  172. examples/sft/configs/crafter_fft_qwen0p6b.toml +49 -0
  173. examples/sft/configs/crafter_lora_qwen0p6b.toml +49 -0
  174. examples/sft/evaluate.py +117 -0
  175. examples/sft/export_dataset.py +120 -0
  176. examples/sft/generate_traces.py +164 -0
  177. examples/swe/__init__.py +12 -0
  178. examples/swe/task_app/README.md +135 -0
  179. examples/swe/task_app/__init__.py +2 -0
  180. examples/swe/task_app/grpo_swe_mini.py +604 -0
  181. examples/swe/task_app/grpo_swe_mini_task_app.py +124 -0
  182. examples/swe/task_app/hosted/README.md +173 -0
  183. examples/swe/task_app/hosted/__init__.py +5 -0
  184. examples/swe/task_app/hosted/branching.py +143 -0
  185. examples/swe/task_app/hosted/environment_routes.py +1289 -0
  186. examples/swe/task_app/hosted/envs/__init__.py +1 -0
  187. examples/swe/task_app/hosted/envs/crafter/__init__.py +6 -0
  188. examples/swe/task_app/hosted/envs/crafter/app.py +1 -0
  189. examples/swe/task_app/hosted/envs/crafter/environment.py +522 -0
  190. examples/swe/task_app/hosted/envs/crafter/policy.py +478 -0
  191. examples/swe/task_app/hosted/envs/crafter/react_agent.py +108 -0
  192. examples/swe/task_app/hosted/envs/crafter/shared.py +305 -0
  193. examples/swe/task_app/hosted/envs/crafter/tools.py +47 -0
  194. examples/swe/task_app/hosted/envs/mini_swe/__init__.py +8 -0
  195. examples/swe/task_app/hosted/envs/mini_swe/environment.py +1191 -0
  196. examples/swe/task_app/hosted/envs/mini_swe/policy.py +355 -0
  197. examples/swe/task_app/hosted/envs/mini_swe/shared.py +83 -0
  198. examples/swe/task_app/hosted/envs/mini_swe/tools.py +96 -0
  199. examples/swe/task_app/hosted/hosted_app.py +204 -0
  200. examples/swe/task_app/hosted/inference/__init__.py +5 -0
  201. examples/swe/task_app/hosted/inference/openai_client.py +584 -0
  202. examples/swe/task_app/hosted/main.py +100 -0
  203. examples/swe/task_app/hosted/policy_routes.py +1094 -0
  204. examples/swe/task_app/hosted/registry.py +195 -0
  205. examples/swe/task_app/hosted/rollout.py +1905 -0
  206. examples/swe/task_app/hosted/storage/__init__.py +5 -0
  207. examples/swe/task_app/hosted/storage/volume.py +211 -0
  208. examples/swe/task_app/hosted/test_agents.py +161 -0
  209. examples/swe/task_app/hosted/test_service.py +136 -0
  210. examples/swe/task_app/hosted/utils.py +62 -0
  211. examples/swe/task_app/morph_backend.py +178 -0
  212. examples/task_apps/IMAGE_ONLY_EVAL_QUICKSTART.md +258 -0
  213. examples/task_apps/TESTING.md +275 -0
  214. examples/task_apps/banking77/__init__.py +6 -0
  215. examples/task_apps/banking77/banking77_task_app.py +912 -0
  216. examples/task_apps/banking77/deploy_wrapper.py +46 -0
  217. examples/task_apps/banking77_pipeline/__init__.py +6 -0
  218. examples/task_apps/banking77_pipeline/banking77_pipeline_task_app.py +489 -0
  219. examples/task_apps/banking77_pipeline/deploy_wrapper.py +50 -0
  220. examples/task_apps/crafter/CREATE_SFT_DATASET.md +286 -0
  221. examples/task_apps/crafter/EVAL_IMAGE_ONLY_RESULTS.md +152 -0
  222. examples/task_apps/crafter/FILTER_COMMAND_STATUS.md +187 -0
  223. examples/task_apps/crafter/FILTER_COMMAND_SUCCESS.md +281 -0
  224. examples/task_apps/crafter/QUERY_EXAMPLES.md +203 -0
  225. examples/task_apps/crafter/README_IMAGE_ONLY_EVAL.md +316 -0
  226. examples/task_apps/crafter/eval_image_only_gpt4o.toml +28 -0
  227. examples/task_apps/crafter/eval_text_only_groq_llama.toml +36 -0
  228. examples/task_apps/crafter/filter_sft_dataset.toml +16 -0
  229. examples/task_apps/crafter/task_app/README.md +42 -0
  230. examples/task_apps/crafter/task_app/__init__.py +5 -0
  231. examples/task_apps/crafter/task_app/grpo_crafter.py +1055 -0
  232. examples/task_apps/crafter/task_app/grpo_crafter_task_app.py +146 -0
  233. examples/task_apps/crafter/task_app/synth_envs_hosted/README.md +173 -0
  234. examples/task_apps/crafter/task_app/synth_envs_hosted/__init__.py +5 -0
  235. examples/task_apps/crafter/task_app/synth_envs_hosted/branching.py +143 -0
  236. examples/task_apps/crafter/task_app/synth_envs_hosted/environment_routes.py +1226 -0
  237. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/__init__.py +1 -0
  238. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/__init__.py +6 -0
  239. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/app.py +1 -0
  240. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/environment.py +532 -0
  241. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/policy.py +583 -0
  242. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/react_agent.py +122 -0
  243. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/shared.py +305 -0
  244. examples/task_apps/crafter/task_app/synth_envs_hosted/envs/crafter/tools.py +47 -0
  245. examples/task_apps/crafter/task_app/synth_envs_hosted/hosted_app.py +253 -0
  246. examples/task_apps/crafter/task_app/synth_envs_hosted/inference/__init__.py +5 -0
  247. examples/task_apps/crafter/task_app/synth_envs_hosted/inference/openai_client.py +999 -0
  248. examples/task_apps/crafter/task_app/synth_envs_hosted/main.py +100 -0
  249. examples/task_apps/crafter/task_app/synth_envs_hosted/policy_routes.py +1252 -0
  250. examples/task_apps/crafter/task_app/synth_envs_hosted/registry.py +195 -0
  251. examples/task_apps/crafter/task_app/synth_envs_hosted/rollout.py +2233 -0
  252. examples/task_apps/crafter/task_app/synth_envs_hosted/storage/__init__.py +5 -0
  253. examples/task_apps/crafter/task_app/synth_envs_hosted/storage/volume.py +211 -0
  254. examples/task_apps/crafter/task_app/synth_envs_hosted/test_agents.py +161 -0
  255. examples/task_apps/crafter/task_app/synth_envs_hosted/test_service.py +136 -0
  256. examples/task_apps/crafter/task_app/synth_envs_hosted/utils.py +411 -0
  257. examples/task_apps/dev/pokemon_emerald/__init__.py +2 -0
  258. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/README.md +811 -0
  259. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/__init__.py +120 -0
  260. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/action.py +160 -0
  261. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/memory.py +155 -0
  262. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/perception.py +69 -0
  263. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/planning.py +96 -0
  264. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/simple.py +1502 -0
  265. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/agent/system_prompt.py +4 -0
  266. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/grab_map.py +68 -0
  267. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/manual.py +216 -0
  268. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/__init__.py +35 -0
  269. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emerald_utils.py +631 -0
  270. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/emulator.py +1544 -0
  271. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/enums.py +1428 -0
  272. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/memory_reader.py +4848 -0
  273. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/types.py +41 -0
  274. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pokemon_env/utils.py +298 -0
  275. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/pyproject.toml +95 -0
  276. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/run.py +204 -0
  277. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/app.py +2152 -0
  278. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/client.py +429 -0
  279. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server/frame_server.py +155 -0
  280. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/README.md +78 -0
  281. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/run_tests.py +122 -0
  282. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_direct.py +76 -0
  283. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_agent_prompts.py +413 -0
  284. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_battle_state_formatting.py +204 -0
  285. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection.py +133 -0
  286. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_dialogue_detection_comprehensive.py +229 -0
  287. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_direct_agent_emulator.py +300 -0
  288. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_fps_adjustment_pytest.py +205 -0
  289. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_direct.py +200 -0
  290. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_house_to_outside_transition.py +284 -0
  291. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_map_ground_truth_comparison.py +468 -0
  292. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_memory_map.py +575 -0
  293. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_server_map_validation.py +311 -0
  294. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests/test_torchic_state.py +259 -0
  295. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/anticheat.py +372 -0
  296. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/checkpoint.py +296 -0
  297. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/error_handler.py +275 -0
  298. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/get_local_ip.py +22 -0
  299. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/helpers.py +44 -0
  300. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/llm_logger.py +514 -0
  301. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_formatter.py +415 -0
  302. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher.py +1763 -0
  303. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_stitcher_singleton.py +33 -0
  304. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_trimmer.py +106 -0
  305. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/map_visualizer.py +334 -0
  306. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/ocr_dialogue.py +1020 -0
  307. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/recording.py +188 -0
  308. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/state_formatter.py +1481 -0
  309. examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils/vlm.py +862 -0
  310. examples/task_apps/dev/pokemon_emerald/modal_app.py +114 -0
  311. examples/task_apps/dev/pokemon_emerald/task_app/README.md +81 -0
  312. examples/task_apps/dev/pokemon_emerald/task_app/__init__.py +6 -0
  313. examples/task_apps/dev/pokemon_emerald/task_app/pokemon_emerald.py +685 -0
  314. examples/task_apps/enron/__init__.py +2 -0
  315. examples/task_apps/enron/eval_groq_qwen32.toml +16 -0
  316. examples/task_apps/enron/filter_sft.toml +5 -0
  317. examples/task_apps/enron/task_app/README.md +14 -0
  318. examples/task_apps/enron/task_app/__init__.py +1 -0
  319. examples/task_apps/enron/task_app/grpo_enron.py +906 -0
  320. examples/task_apps/enron/task_app/grpo_enron_task_app.py +146 -0
  321. examples/task_apps/enron/tests/__init__.py +4 -0
  322. examples/task_apps/enron/tests/conftest.py +115 -0
  323. examples/task_apps/enron/tests/integration/__init__.py +4 -0
  324. examples/task_apps/enron/tests/integration/test_enron_eval.py +179 -0
  325. examples/task_apps/enron/tests/integration/test_enron_rollout.py +135 -0
  326. examples/task_apps/enron/tests/unit/__init__.py +4 -0
  327. examples/task_apps/enron/tests/unit/test_enron_environment.py +126 -0
  328. examples/task_apps/gepa_benchmarks/__init__.py +7 -0
  329. examples/task_apps/gepa_benchmarks/common.py +260 -0
  330. examples/task_apps/gepa_benchmarks/hotpotqa_task_app.py +507 -0
  331. examples/task_apps/gepa_benchmarks/hover_task_app.py +436 -0
  332. examples/task_apps/gepa_benchmarks/ifbench_task_app.py +563 -0
  333. examples/task_apps/gepa_benchmarks/pupa_task_app.py +460 -0
  334. examples/task_apps/math/README.md +21 -0
  335. examples/task_apps/math/math_single_step.py +1000 -0
  336. examples/task_apps/math/math_task_app.py +115 -0
  337. examples/task_apps/pokemon_battle/__init__.py +2 -0
  338. examples/task_apps/pokemon_battle/modal_app.py +104 -0
  339. examples/task_apps/pokemon_battle/task_app/README.md +68 -0
  340. examples/task_apps/pokemon_battle/task_app/__init__.py +6 -0
  341. examples/task_apps/pokemon_battle/task_app/pokemon_showdown.py +932 -0
  342. examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_COMPLETE.md +283 -0
  343. examples/task_apps/pokemon_red/EVAL_IMAGE_ONLY_STATUS.md +155 -0
  344. examples/task_apps/pokemon_red/README.md +356 -0
  345. examples/task_apps/pokemon_red/README_IMAGE_ONLY_EVAL.md +428 -0
  346. examples/task_apps/pokemon_red/__init__.py +3 -0
  347. examples/task_apps/pokemon_red/eval_image_only_gpt4o.toml +30 -0
  348. examples/task_apps/pokemon_red/eval_pokemon_red_policy.py +224 -0
  349. examples/task_apps/pokemon_red/pallet_town_rl_config.toml +75 -0
  350. examples/task_apps/pokemon_red/task_app.py +1048 -0
  351. examples/task_apps/pokemon_red/test_pallet_town_rewards.py +193 -0
  352. examples/task_apps/sokoban/README.md +306 -0
  353. examples/task_apps/sokoban/__init__.py +3 -0
  354. examples/task_apps/sokoban/eval_groq_qwen32.toml +16 -0
  355. examples/task_apps/sokoban/eval_openai_gpt5.toml +16 -0
  356. examples/task_apps/sokoban/filter_sft.toml +5 -0
  357. examples/task_apps/sokoban/task_app.py +1058 -0
  358. examples/task_apps/sokoban/tests/__init__.py +4 -0
  359. examples/task_apps/sokoban/tests/conftest.py +113 -0
  360. examples/task_apps/sokoban/tests/integration/__init__.py +4 -0
  361. examples/task_apps/sokoban/tests/integration/test_sokoban_eval.py +57 -0
  362. examples/task_apps/sokoban/tests/integration/test_sokoban_rollout.py +198 -0
  363. examples/task_apps/sokoban/tests/unit/__init__.py +4 -0
  364. examples/task_apps/sokoban/tests/unit/test_sokoban_environment.py +114 -0
  365. examples/task_apps/verilog/__init__.py +1 -0
  366. examples/task_apps/verilog/eval_groq_qwen32b.toml +22 -0
  367. examples/task_apps/verilog/filter_sft.toml +5 -0
  368. examples/task_apps/verilog/task_app/README.md +12 -0
  369. examples/task_apps/verilog/task_app/__init__.py +1 -0
  370. examples/task_apps/verilog/task_app/grpo_verilog.py +1166 -0
  371. examples/task_apps/verilog/task_app/grpo_verilog_task_app.py +145 -0
  372. examples/task_apps/verilog/tests/__init__.py +4 -0
  373. examples/task_apps/verilog/tests/conftest.py +115 -0
  374. examples/task_apps/verilog/tests/integration/__init__.py +4 -0
  375. examples/task_apps/verilog/tests/integration/test_verilog_eval.py +181 -0
  376. examples/task_apps/verilog/tests/integration/test_verilog_rollout.py +55 -0
  377. examples/task_apps/verilog/tests/unit/__init__.py +4 -0
  378. examples/task_apps/verilog/tests/unit/test_verilog_scoring.py +118 -0
  379. examples/tunnel_gepa_banking77/README.md +106 -0
  380. examples/tunnel_gepa_banking77/banking77_gepa_tunnel.toml +95 -0
  381. examples/tunnel_gepa_banking77/keep_tunnel_running.py +60 -0
  382. examples/tunnel_gepa_banking77/run_gepa_with_tunnel.sh +226 -0
  383. examples/vlm/PROPOSAL.md +53 -0
  384. examples/vlm/README.md +68 -0
  385. examples/vlm/configs/crafter_vlm_gpt4o.toml +49 -0
  386. examples/vlm/crafter_image_only_agent.py +207 -0
  387. examples/vlm/crafter_openai_vlm_agent.py +275 -0
  388. examples/vlm/filter_image_rows.py +63 -0
  389. examples/vlm/run_crafter_vlm_benchmark.py +316 -0
  390. examples/warming_up_to_rl/_utils.py +92 -0
  391. examples/warming_up_to_rl/analyze_trace_db.py +422 -0
  392. examples/warming_up_to_rl/configs/crafter_fft.toml +53 -0
  393. examples/warming_up_to_rl/configs/crafter_fft_4b.toml +54 -0
  394. examples/warming_up_to_rl/configs/eval_fft_qwen4b.toml +22 -0
  395. examples/warming_up_to_rl/configs/eval_groq_qwen32b.toml +15 -0
  396. examples/warming_up_to_rl/configs/eval_modal_qwen4b.toml +24 -0
  397. examples/warming_up_to_rl/configs/eval_stepwise_complex.toml +35 -0
  398. examples/warming_up_to_rl/configs/eval_stepwise_consistent.toml +26 -0
  399. examples/warming_up_to_rl/configs/eval_stepwise_per_achievement.toml +36 -0
  400. examples/warming_up_to_rl/configs/eval_stepwise_simple.toml +32 -0
  401. examples/warming_up_to_rl/configs/rl_from_base_qwen4b.toml +85 -0
  402. examples/warming_up_to_rl/configs/rl_from_ft.toml +58 -0
  403. examples/warming_up_to_rl/export_trace_sft.py +837 -0
  404. examples/warming_up_to_rl/groq_test.py +97 -0
  405. examples/warming_up_to_rl/manage_secrets.py +131 -0
  406. examples/warming_up_to_rl/old/event_rewards.md +234 -0
  407. examples/warming_up_to_rl/old/notes.md +73 -0
  408. examples/warming_up_to_rl/readme.md +110 -0
  409. examples/warming_up_to_rl/run_eval.py +736 -0
  410. examples/warming_up_to_rl/run_fft_and_save.py +380 -0
  411. examples/warming_up_to_rl/run_local_rollout.py +239 -0
  412. examples/warming_up_to_rl/run_local_rollout_modal.py +248 -0
  413. examples/warming_up_to_rl/run_local_rollout_parallel.py +405 -0
  414. examples/warming_up_to_rl/run_local_rollout_traced.py +477 -0
  415. examples/warming_up_to_rl/run_rl_and_save.py +124 -0
  416. examples/warming_up_to_rl/run_rollout_remote.py +156 -0
  417. examples/warming_up_to_rl/task_app/README.md +42 -0
  418. examples/warming_up_to_rl/task_app/grpo_crafter.py +876 -0
  419. examples/warming_up_to_rl/task_app/grpo_crafter_task_app.py +135 -0
  420. examples/warming_up_to_rl/task_app/synth_envs_hosted/README.md +173 -0
  421. examples/warming_up_to_rl/task_app/synth_envs_hosted/__init__.py +5 -0
  422. examples/warming_up_to_rl/task_app/synth_envs_hosted/branching.py +143 -0
  423. examples/warming_up_to_rl/task_app/synth_envs_hosted/environment_routes.py +1226 -0
  424. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/__init__.py +1 -0
  425. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/__init__.py +6 -0
  426. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/app.py +1 -0
  427. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/environment.py +522 -0
  428. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/policy.py +454 -0
  429. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/react_agent.py +108 -0
  430. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/shared.py +305 -0
  431. examples/warming_up_to_rl/task_app/synth_envs_hosted/envs/crafter/tools.py +47 -0
  432. examples/warming_up_to_rl/task_app/synth_envs_hosted/hosted_app.py +253 -0
  433. examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/__init__.py +5 -0
  434. examples/warming_up_to_rl/task_app/synth_envs_hosted/inference/openai_client.py +729 -0
  435. examples/warming_up_to_rl/task_app/synth_envs_hosted/main.py +100 -0
  436. examples/warming_up_to_rl/task_app/synth_envs_hosted/policy_routes.py +1114 -0
  437. examples/warming_up_to_rl/task_app/synth_envs_hosted/registry.py +195 -0
  438. examples/warming_up_to_rl/task_app/synth_envs_hosted/rollout.py +1891 -0
  439. examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/__init__.py +5 -0
  440. examples/warming_up_to_rl/task_app/synth_envs_hosted/storage/volume.py +211 -0
  441. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_agents.py +161 -0
  442. examples/warming_up_to_rl/task_app/synth_envs_hosted/test_service.py +137 -0
  443. examples/warming_up_to_rl/task_app/synth_envs_hosted/utils.py +129 -0
  444. examples/workflows/math_rl/configs/eval_base_qwen.toml +15 -0
  445. examples/workflows/math_rl/configs/eval_rl_qwen.toml +11 -0
  446. examples/workflows/math_rl/configs/rl_from_base_qwen.toml +62 -0
  447. examples/workflows/math_rl/configs/rl_from_base_qwen17.toml +80 -0
  448. examples/workflows/math_rl/configs/rl_from_ft_qwen.toml +35 -0
  449. examples/workflows/math_rl/download_dataset.py +80 -0
  450. examples/workflows/math_rl/run_eval.py +436 -0
  451. examples/workflows/math_rl/run_rl_and_save.py +111 -0
  452. synth_ai/__init__.py +47 -23
  453. synth_ai/_utils/__init__.py +47 -0
  454. synth_ai/_utils/base_url.py +10 -0
  455. synth_ai/_utils/http.py +10 -0
  456. synth_ai/_utils/prompts.py +10 -0
  457. synth_ai/_utils/task_app_state.py +12 -0
  458. synth_ai/_utils/user_config.py +10 -0
  459. synth_ai/api/models/supported.py +514 -0
  460. synth_ai/api/train/__init__.py +63 -0
  461. synth_ai/api/train/builders.py +473 -0
  462. synth_ai/api/train/cli.py +1185 -0
  463. synth_ai/api/train/config_finder.py +246 -0
  464. synth_ai/api/train/configs/__init__.py +65 -0
  465. synth_ai/api/train/configs/prompt_learning.py +496 -0
  466. synth_ai/api/train/configs/rl.py +188 -0
  467. synth_ai/api/train/configs/sft.py +99 -0
  468. synth_ai/api/train/configs/shared.py +81 -0
  469. synth_ai/api/train/env_resolver.py +352 -0
  470. synth_ai/api/train/pollers.py +91 -0
  471. synth_ai/api/train/prompt_learning.py +425 -0
  472. synth_ai/api/train/sft.py +390 -0
  473. synth_ai/api/train/supported_algos.py +147 -0
  474. synth_ai/api/train/task_app.py +195 -0
  475. synth_ai/api/train/utils.py +244 -0
  476. synth_ai/api/train/validators.py +1117 -0
  477. synth_ai/api/tunnel.py +49 -0
  478. synth_ai/auth/credentials.py +94 -0
  479. synth_ai/baseline/__init__.py +25 -0
  480. synth_ai/baseline/config.py +209 -0
  481. synth_ai/baseline/discovery.py +214 -0
  482. synth_ai/baseline/execution.py +146 -0
  483. synth_ai/cfgs.py +227 -0
  484. synth_ai/cli/__init__.py +90 -45
  485. synth_ai/cli/_modal_wrapper.py +31 -0
  486. synth_ai/cli/_storage.py +20 -0
  487. synth_ai/cli/_typer_patch.py +47 -0
  488. synth_ai/cli/_validate_task_app.py +29 -0
  489. synth_ai/cli/balance.py +16 -4
  490. synth_ai/cli/calc.py +36 -21
  491. synth_ai/cli/claude.py +70 -0
  492. synth_ai/cli/codex.py +267 -0
  493. synth_ai/cli/commands/__init__.py +18 -0
  494. synth_ai/cli/commands/baseline/__init__.py +12 -0
  495. synth_ai/cli/commands/baseline/core.py +637 -0
  496. synth_ai/cli/commands/baseline/list.py +93 -0
  497. synth_ai/cli/commands/demo/__init__.py +6 -0
  498. synth_ai/cli/commands/demo/core.py +163 -0
  499. synth_ai/cli/commands/eval/__init__.py +19 -0
  500. synth_ai/cli/commands/eval/core.py +1112 -0
  501. synth_ai/cli/commands/eval/errors.py +81 -0
  502. synth_ai/cli/commands/eval/validation.py +133 -0
  503. synth_ai/cli/commands/filter/__init__.py +12 -0
  504. synth_ai/cli/commands/filter/core.py +424 -0
  505. synth_ai/cli/commands/filter/errors.py +55 -0
  506. synth_ai/cli/commands/filter/validation.py +77 -0
  507. synth_ai/cli/commands/help/__init__.py +185 -0
  508. synth_ai/cli/commands/help/core.py +72 -0
  509. synth_ai/cli/commands/smoke/__init__.py +7 -0
  510. synth_ai/cli/commands/smoke/core.py +1437 -0
  511. synth_ai/cli/commands/status/__init__.py +66 -0
  512. synth_ai/cli/commands/status/client.py +192 -0
  513. synth_ai/cli/commands/status/config.py +92 -0
  514. synth_ai/cli/commands/status/errors.py +20 -0
  515. synth_ai/cli/commands/status/formatters.py +164 -0
  516. synth_ai/cli/commands/status/subcommands/__init__.py +9 -0
  517. synth_ai/cli/commands/status/subcommands/files.py +79 -0
  518. synth_ai/cli/commands/status/subcommands/jobs.py +334 -0
  519. synth_ai/cli/commands/status/subcommands/models.py +79 -0
  520. synth_ai/cli/commands/status/subcommands/pricing.py +22 -0
  521. synth_ai/cli/commands/status/subcommands/runs.py +81 -0
  522. synth_ai/cli/commands/status/subcommands/session.py +183 -0
  523. synth_ai/cli/commands/status/subcommands/summary.py +47 -0
  524. synth_ai/cli/commands/status/subcommands/usage.py +203 -0
  525. synth_ai/cli/commands/status/utils.py +114 -0
  526. synth_ai/cli/commands/train/__init__.py +53 -0
  527. synth_ai/cli/commands/train/core.py +21 -0
  528. synth_ai/cli/commands/train/errors.py +117 -0
  529. synth_ai/cli/commands/train/judge_schemas.py +200 -0
  530. synth_ai/cli/commands/train/judge_validation.py +305 -0
  531. synth_ai/cli/commands/train/validation.py +386 -0
  532. synth_ai/cli/demo.py +32 -140
  533. synth_ai/cli/deploy.py +233 -0
  534. synth_ai/cli/eval/__init__.py +36 -0
  535. synth_ai/cli/eval/core.py +5 -0
  536. synth_ai/cli/eval/errors.py +31 -0
  537. synth_ai/cli/eval/validation.py +5 -0
  538. synth_ai/cli/filter/__init__.py +28 -0
  539. synth_ai/cli/filter/core.py +5 -0
  540. synth_ai/cli/filter/errors.py +23 -0
  541. synth_ai/cli/filter/validation.py +5 -0
  542. synth_ai/cli/legacy_root_backup.py +28 -22
  543. synth_ai/cli/lib/__init__.py +10 -0
  544. synth_ai/cli/lib/task_app_discovery.py +7 -0
  545. synth_ai/cli/lib/task_app_env.py +518 -0
  546. synth_ai/cli/mcp.py +34 -0
  547. synth_ai/cli/modal_serve/__init__.py +12 -0
  548. synth_ai/cli/modal_serve/core.py +14 -0
  549. synth_ai/cli/modal_serve/errors.py +8 -0
  550. synth_ai/cli/modal_serve/validation.py +11 -0
  551. synth_ai/cli/opencode.py +256 -0
  552. synth_ai/cli/recent.py +13 -7
  553. synth_ai/cli/rl_demo.py +166 -114
  554. synth_ai/cli/root.py +143 -112
  555. synth_ai/cli/serve/__init__.py +12 -0
  556. synth_ai/cli/serve/core.py +14 -0
  557. synth_ai/cli/serve/errors.py +8 -0
  558. synth_ai/cli/serve/validation.py +11 -0
  559. synth_ai/cli/setup.py +49 -0
  560. synth_ai/cli/status.py +7 -125
  561. synth_ai/cli/task_app_deploy.py +7 -0
  562. synth_ai/cli/task_app_list.py +25 -0
  563. synth_ai/cli/task_app_modal_serve.py +11 -0
  564. synth_ai/cli/task_app_serve.py +11 -0
  565. synth_ai/cli/task_apps.py +3134 -0
  566. synth_ai/cli/traces.py +9 -5
  567. synth_ai/cli/train/__init__.py +12 -0
  568. synth_ai/cli/train/core.py +21 -0
  569. synth_ai/cli/train/errors.py +8 -0
  570. synth_ai/cli/train/validation.py +24 -0
  571. synth_ai/cli/train.py +5 -0
  572. synth_ai/cli/turso.py +73 -0
  573. synth_ai/cli/watch.py +13 -18
  574. synth_ai/demos/__init__.py +10 -0
  575. synth_ai/demos/core/__init__.py +28 -1
  576. synth_ai/demos/core/cli.py +745 -416
  577. synth_ai/demos/crafter/__init__.py +1 -0
  578. synth_ai/demos/crafter/crafter_fft_4b.toml +55 -0
  579. synth_ai/demos/crafter/grpo_crafter_task_app.py +185 -0
  580. synth_ai/demos/crafter/rl_from_base_qwen4b.toml +74 -0
  581. synth_ai/demos/demo_registry.py +176 -0
  582. synth_ai/demos/demo_task_apps/__init__.py +7 -1
  583. synth_ai/demos/demo_task_apps/core.py +75 -37
  584. synth_ai/demos/demo_task_apps/crafter/__init__.py +1 -0
  585. synth_ai/demos/demo_task_apps/crafter/configs/crafter_fft_4b.toml +53 -0
  586. synth_ai/demos/demo_task_apps/crafter/configs/rl_from_base_qwen4b.toml +73 -0
  587. synth_ai/demos/demo_task_apps/crafter/grpo_crafter_task_app.py +184 -0
  588. synth_ai/demos/demo_task_apps/math/_common.py +1 -2
  589. synth_ai/demos/demo_task_apps/math/app.py +2 -1
  590. synth_ai/demos/demo_task_apps/math/config.toml +55 -110
  591. synth_ai/demos/demo_task_apps/math/deploy_modal.py +3 -6
  592. synth_ai/demos/demo_task_apps/math/modal_task_app.py +491 -166
  593. synth_ai/demos/demo_task_apps/math/task_app_entry.py +37 -0
  594. synth_ai/demos/math/__init__.py +1 -0
  595. synth_ai/demos/math/_common.py +16 -0
  596. synth_ai/demos/math/app.py +38 -0
  597. synth_ai/demos/math/config.toml +76 -0
  598. synth_ai/demos/math/deploy_modal.py +54 -0
  599. synth_ai/demos/math/modal_task_app.py +703 -0
  600. synth_ai/demos/math/task_app_entry.py +51 -0
  601. synth_ai/environments/environment/core.py +7 -1
  602. synth_ai/environments/examples/bandit/engine.py +12 -5
  603. synth_ai/environments/examples/bandit/environment.py +0 -1
  604. synth_ai/environments/examples/bandit/taskset.py +4 -4
  605. synth_ai/environments/examples/crafter_classic/engine_deterministic_patch.py +7 -4
  606. synth_ai/environments/examples/crafter_classic/engine_serialization_patch_v3.py +9 -5
  607. synth_ai/environments/examples/crafter_classic/environment.py +93 -2
  608. synth_ai/environments/examples/crafter_classic/world_config_patch_simple.py +4 -3
  609. synth_ai/environments/examples/enron/engine.py +7 -2
  610. synth_ai/environments/examples/enron/environment.py +68 -0
  611. synth_ai/environments/examples/red/engine.py +60 -12
  612. synth_ai/environments/examples/red/engine_helpers/memory_map.py +7 -0
  613. synth_ai/environments/examples/red/engine_helpers/reward_components.py +151 -179
  614. synth_ai/environments/examples/red/engine_helpers/reward_library/pallet_town_progression.py +477 -0
  615. synth_ai/environments/examples/red/engine_helpers/state_extraction.py +32 -0
  616. synth_ai/environments/examples/red/environment.py +86 -0
  617. synth_ai/environments/examples/red/trace_hooks_v3.py +168 -0
  618. synth_ai/environments/examples/sokoban/taskset.py +116 -0
  619. synth_ai/environments/examples/verilog/engine.py +104 -12
  620. synth_ai/environments/examples/wordle/environment.py +0 -1
  621. synth_ai/environments/reproducibility/tree.py +5 -6
  622. synth_ai/environments/service/app.py +11 -12
  623. synth_ai/environments/service/core_routes.py +10 -9
  624. synth_ai/environments/stateful/engine.py +1 -1
  625. synth_ai/environments/tasks/core.py +1 -0
  626. synth_ai/environments/tasks/filters.py +5 -6
  627. synth_ai/environments/tasks/utils.py +4 -5
  628. synth_ai/evals/__init__.py +15 -0
  629. synth_ai/evals/base.py +14 -5
  630. synth_ai/evals/client.py +82 -0
  631. synth_ai/evals/types.py +42 -0
  632. synth_ai/http.py +8 -22
  633. synth_ai/http_client.py +45 -12
  634. synth_ai/inference/__init__.py +0 -2
  635. synth_ai/inference/client.py +21 -7
  636. synth_ai/jobs/client.py +129 -80
  637. synth_ai/judge_schemas.py +127 -0
  638. synth_ai/learning/__init__.py +51 -6
  639. synth_ai/learning/algorithms.py +14 -0
  640. synth_ai/learning/client.py +122 -30
  641. synth_ai/learning/config.py +2 -40
  642. synth_ai/learning/constants.py +0 -2
  643. synth_ai/learning/ft_client.py +4 -56
  644. synth_ai/learning/health.py +14 -8
  645. synth_ai/learning/jobs.py +43 -47
  646. synth_ai/learning/prompt_learning_client.py +276 -0
  647. synth_ai/learning/prompt_learning_types.py +185 -0
  648. synth_ai/{rl → learning/rl}/__init__.py +14 -5
  649. synth_ai/learning/rl/client.py +269 -0
  650. synth_ai/learning/rl/config.py +31 -0
  651. synth_ai/{rl → learning/rl}/contracts.py +5 -10
  652. synth_ai/{rl → learning/rl}/env_keys.py +45 -16
  653. synth_ai/learning/rl/secrets.py +13 -0
  654. synth_ai/learning/rl_client.py +2 -253
  655. synth_ai/learning/sft/__init__.py +29 -0
  656. synth_ai/learning/sft/client.py +68 -0
  657. synth_ai/learning/sft/config.py +270 -0
  658. synth_ai/learning/sft/data.py +698 -0
  659. synth_ai/learning/sse.py +25 -26
  660. synth_ai/learning/validators.py +29 -25
  661. synth_ai/mcp/__init__.py +5 -0
  662. synth_ai/mcp/__main__.py +8 -0
  663. synth_ai/mcp/main.py +254 -0
  664. synth_ai/mcp/setup.py +100 -0
  665. synth_ai/modal.py +257 -0
  666. synth_ai/pricing/__init__.py +3 -0
  667. synth_ai/pricing/model_pricing.py +64 -0
  668. synth_ai/session/__init__.py +75 -0
  669. synth_ai/session/client.py +383 -0
  670. synth_ai/session/constants.py +63 -0
  671. synth_ai/session/exceptions.py +105 -0
  672. synth_ai/session/manager.py +139 -0
  673. synth_ai/session/models.py +89 -0
  674. synth_ai/session/query.py +110 -0
  675. synth_ai/spec/__init__.py +46 -0
  676. synth_ai/spec/dataclasses.py +149 -0
  677. synth_ai/spec/loader.py +144 -0
  678. synth_ai/spec/serializer.py +199 -0
  679. synth_ai/spec/validation.py +250 -0
  680. synth_ai/streaming/__init__.py +29 -0
  681. synth_ai/streaming/config.py +94 -0
  682. synth_ai/streaming/handlers.py +589 -0
  683. synth_ai/streaming/streamer.py +320 -0
  684. synth_ai/streaming/types.py +95 -0
  685. synth_ai/task/__init__.py +116 -3
  686. synth_ai/task/apps/__init__.py +132 -0
  687. synth_ai/task/auth.py +165 -0
  688. synth_ai/task/client.py +167 -0
  689. synth_ai/task/config.py +261 -0
  690. synth_ai/task/contracts.py +173 -57
  691. synth_ai/task/datasets.py +108 -0
  692. synth_ai/task/errors.py +50 -0
  693. synth_ai/task/health.py +17 -11
  694. synth_ai/task/inference_api.py +101 -0
  695. synth_ai/task/json.py +111 -0
  696. synth_ai/task/proxy.py +251 -0
  697. synth_ai/task/rubrics/__init__.py +55 -0
  698. synth_ai/task/rubrics/loaders.py +156 -0
  699. synth_ai/task/rubrics/models.py +57 -0
  700. synth_ai/task/rubrics/scoring.py +116 -0
  701. synth_ai/task/rubrics/strict.py +149 -0
  702. synth_ai/task/rubrics.py +219 -0
  703. synth_ai/task/server.py +432 -0
  704. synth_ai/task/trace_correlation_helpers.py +328 -0
  705. synth_ai/task/tracing_utils.py +95 -0
  706. synth_ai/task/validators.py +449 -6
  707. synth_ai/task/vendors.py +59 -0
  708. synth_ai/tracing_v3/__init__.py +4 -0
  709. synth_ai/tracing_v3/abstractions.py +21 -4
  710. synth_ai/tracing_v3/config.py +167 -22
  711. synth_ai/tracing_v3/constants.py +21 -0
  712. synth_ai/tracing_v3/db_config.py +42 -29
  713. synth_ai/tracing_v3/decorators.py +80 -45
  714. synth_ai/tracing_v3/examples/basic_usage.py +15 -9
  715. synth_ai/tracing_v3/hooks.py +6 -4
  716. synth_ai/tracing_v3/llm_call_record_helpers.py +161 -61
  717. synth_ai/tracing_v3/migration_helper.py +1 -2
  718. synth_ai/tracing_v3/replica_sync.py +12 -7
  719. synth_ai/tracing_v3/serialization.py +130 -0
  720. synth_ai/tracing_v3/session_tracer.py +86 -21
  721. synth_ai/tracing_v3/storage/base.py +98 -12
  722. synth_ai/tracing_v3/storage/config.py +63 -16
  723. synth_ai/tracing_v3/storage/factory.py +11 -9
  724. synth_ai/tracing_v3/storage/utils.py +15 -11
  725. synth_ai/tracing_v3/trace_utils.py +317 -0
  726. synth_ai/tracing_v3/turso/__init__.py +8 -21
  727. synth_ai/tracing_v3/turso/daemon.py +123 -15
  728. synth_ai/tracing_v3/turso/models.py +5 -2
  729. synth_ai/tracing_v3/turso/native_manager.py +1293 -0
  730. synth_ai/tracing_v3/utils.py +5 -4
  731. synth_ai/tunnel.py +143 -0
  732. synth_ai/tunnel_deploy.py +278 -0
  733. synth_ai/types.py +8 -0
  734. synth_ai/urls.py +11 -0
  735. synth_ai/utils/__init__.py +166 -0
  736. synth_ai/utils/agents.py +74 -0
  737. synth_ai/utils/apps.py +152 -0
  738. synth_ai/utils/base_url.py +94 -0
  739. synth_ai/utils/bin.py +39 -0
  740. synth_ai/utils/claude.py +36 -0
  741. synth_ai/utils/cli.py +284 -0
  742. synth_ai/utils/config.py +81 -0
  743. synth_ai/utils/env.py +346 -0
  744. synth_ai/utils/errors.py +85 -0
  745. synth_ai/utils/http.py +172 -0
  746. synth_ai/utils/json.py +72 -0
  747. synth_ai/utils/log_filter.py +99 -0
  748. synth_ai/utils/logging.py +198 -0
  749. synth_ai/utils/modal.py +299 -0
  750. synth_ai/utils/paths.py +95 -0
  751. synth_ai/utils/process.py +233 -0
  752. synth_ai/utils/prompts.py +39 -0
  753. synth_ai/utils/sqld.py +122 -0
  754. synth_ai/utils/ssl.py +25 -0
  755. synth_ai/utils/task_app_discovery.py +882 -0
  756. synth_ai/utils/task_app_env.py +186 -0
  757. synth_ai/utils/task_app_state.py +318 -0
  758. synth_ai/utils/tunnel/__init__.py +12 -0
  759. synth_ai/utils/tunnel/config.py +55 -0
  760. synth_ai/utils/user_config.py +137 -0
  761. synth_ai/uvicorn.py +77 -0
  762. synth_ai-0.2.23.dev3.dist-info/METADATA +357 -0
  763. synth_ai-0.2.23.dev3.dist-info/RECORD +983 -0
  764. {synth_ai-0.2.8.dev4.dist-info → synth_ai-0.2.23.dev3.dist-info}/entry_points.txt +0 -1
  765. {synth_ai-0.2.8.dev4.dist-info → synth_ai-0.2.23.dev3.dist-info}/top_level.txt +1 -0
  766. synth_ai/cli/man.py +0 -106
  767. synth_ai/core/experiment.py +0 -15
  768. synth_ai/core/system.py +0 -15
  769. synth_ai/environments/examples/sokoban/units/astar_common.py +0 -95
  770. synth_ai/experimental/synth_oss.py +0 -446
  771. synth_ai/handshake.py +0 -63
  772. synth_ai/install_sqld.sh +0 -40
  773. synth_ai/learning/offline/dpo.py +0 -0
  774. synth_ai/learning/offline/providers.py +0 -7
  775. synth_ai/learning/offline/sft.py +0 -0
  776. synth_ai/learning/offline/shared.py +0 -0
  777. synth_ai/learning/online/grpo.py +0 -0
  778. synth_ai/learning/online/irft.py +0 -0
  779. synth_ai/learning/prompts/banking77_injection_eval.py +0 -168
  780. synth_ai/learning/prompts/gepa.py +0 -0
  781. synth_ai/learning/prompts/hello_world_in_context_injection_ex.py +0 -213
  782. synth_ai/learning/prompts/mipro.py +0 -289
  783. synth_ai/learning/prompts/random_search.py +0 -246
  784. synth_ai/learning/prompts/run_mipro_banking77.py +0 -172
  785. synth_ai/learning/prompts/run_random_search_banking77.py +0 -324
  786. synth_ai/lm/__init__.py +0 -51
  787. synth_ai/lm/caching/constants.py +0 -6
  788. synth_ai/lm/caching/dbs.py +0 -0
  789. synth_ai/lm/caching/ephemeral.py +0 -102
  790. synth_ai/lm/caching/handler.py +0 -137
  791. synth_ai/lm/caching/initialize.py +0 -11
  792. synth_ai/lm/caching/persistent.py +0 -114
  793. synth_ai/lm/config.py +0 -110
  794. synth_ai/lm/constants.py +0 -32
  795. synth_ai/lm/core/__init__.py +0 -8
  796. synth_ai/lm/core/all.py +0 -73
  797. synth_ai/lm/core/exceptions.py +0 -7
  798. synth_ai/lm/core/main.py +0 -319
  799. synth_ai/lm/core/main_v3.py +0 -594
  800. synth_ai/lm/core/synth_models.py +0 -48
  801. synth_ai/lm/core/vendor_clients.py +0 -188
  802. synth_ai/lm/cost/monitor.py +0 -1
  803. synth_ai/lm/cost/statefulness.py +0 -1
  804. synth_ai/lm/injection.py +0 -80
  805. synth_ai/lm/overrides.py +0 -206
  806. synth_ai/lm/provider_support/__init__.py +0 -8
  807. synth_ai/lm/provider_support/anthropic.py +0 -972
  808. synth_ai/lm/provider_support/openai.py +0 -1139
  809. synth_ai/lm/provider_support/suppress_logging.py +0 -31
  810. synth_ai/lm/structured_outputs/handler.py +0 -440
  811. synth_ai/lm/structured_outputs/inject.py +0 -297
  812. synth_ai/lm/structured_outputs/rehabilitate.py +0 -185
  813. synth_ai/lm/tools/__init__.py +0 -3
  814. synth_ai/lm/tools/base.py +0 -172
  815. synth_ai/lm/unified_interface.py +0 -202
  816. synth_ai/lm/vendors/base.py +0 -81
  817. synth_ai/lm/vendors/core/anthropic_api.py +0 -387
  818. synth_ai/lm/vendors/core/gemini_api.py +0 -292
  819. synth_ai/lm/vendors/core/mistral_api.py +0 -322
  820. synth_ai/lm/vendors/core/openai_api.py +0 -225
  821. synth_ai/lm/vendors/core/synth_dev_api.py +0 -0
  822. synth_ai/lm/vendors/local/ollama.py +0 -0
  823. synth_ai/lm/vendors/openai_standard.py +0 -780
  824. synth_ai/lm/vendors/openai_standard_responses.py +0 -256
  825. synth_ai/lm/vendors/retries.py +0 -22
  826. synth_ai/lm/vendors/supported/custom_endpoint.py +0 -417
  827. synth_ai/lm/vendors/supported/deepseek.py +0 -69
  828. synth_ai/lm/vendors/supported/grok.py +0 -75
  829. synth_ai/lm/vendors/supported/groq.py +0 -16
  830. synth_ai/lm/vendors/supported/ollama.py +0 -15
  831. synth_ai/lm/vendors/supported/openrouter.py +0 -74
  832. synth_ai/lm/vendors/supported/together.py +0 -11
  833. synth_ai/lm/vendors/synth_client.py +0 -808
  834. synth_ai/lm/warmup.py +0 -186
  835. synth_ai/rl/secrets.py +0 -19
  836. synth_ai/scripts/verify_rewards.py +0 -100
  837. synth_ai/tracing/__init__.py +0 -30
  838. synth_ai/tracing_v1/__init__.py +0 -33
  839. synth_ai/tracing_v3/turso/manager.py +0 -760
  840. synth_ai/v0/tracing/abstractions.py +0 -224
  841. synth_ai/v0/tracing/base_client.py +0 -91
  842. synth_ai/v0/tracing/client_manager.py +0 -131
  843. synth_ai/v0/tracing/config.py +0 -142
  844. synth_ai/v0/tracing/context.py +0 -146
  845. synth_ai/v0/tracing/decorators.py +0 -682
  846. synth_ai/v0/tracing/events/__init__.py +0 -0
  847. synth_ai/v0/tracing/events/manage.py +0 -147
  848. synth_ai/v0/tracing/events/scope.py +0 -86
  849. synth_ai/v0/tracing/events/store.py +0 -228
  850. synth_ai/v0/tracing/immediate_client.py +0 -151
  851. synth_ai/v0/tracing/local.py +0 -18
  852. synth_ai/v0/tracing/log_client_base.py +0 -73
  853. synth_ai/v0/tracing/retry_queue.py +0 -186
  854. synth_ai/v0/tracing/trackers.py +0 -515
  855. synth_ai/v0/tracing/upload.py +0 -512
  856. synth_ai/v0/tracing/utils.py +0 -9
  857. synth_ai/v0/tracing_v1/__init__.py +0 -16
  858. synth_ai/v0/tracing_v1/abstractions.py +0 -224
  859. synth_ai/v0/tracing_v1/base_client.py +0 -91
  860. synth_ai/v0/tracing_v1/client_manager.py +0 -131
  861. synth_ai/v0/tracing_v1/config.py +0 -142
  862. synth_ai/v0/tracing_v1/context.py +0 -146
  863. synth_ai/v0/tracing_v1/decorators.py +0 -703
  864. synth_ai/v0/tracing_v1/events/__init__.py +0 -0
  865. synth_ai/v0/tracing_v1/events/manage.py +0 -147
  866. synth_ai/v0/tracing_v1/events/scope.py +0 -86
  867. synth_ai/v0/tracing_v1/events/store.py +0 -228
  868. synth_ai/v0/tracing_v1/immediate_client.py +0 -151
  869. synth_ai/v0/tracing_v1/local.py +0 -18
  870. synth_ai/v0/tracing_v1/log_client_base.py +0 -73
  871. synth_ai/v0/tracing_v1/retry_queue.py +0 -186
  872. synth_ai/v0/tracing_v1/trackers.py +0 -515
  873. synth_ai/v0/tracing_v1/upload.py +0 -527
  874. synth_ai/v0/tracing_v1/utils.py +0 -9
  875. synth_ai/zyk/__init__.py +0 -30
  876. synth_ai-0.2.8.dev4.dist-info/METADATA +0 -129
  877. synth_ai-0.2.8.dev4.dist-info/RECORD +0 -420
  878. {synth_ai/lm/caching → examples/task_apps}/__init__.py +0 -0
  879. {synth_ai/lm/cost → examples/task_apps/crafter}/__init__.py +0 -0
  880. {synth_ai/lm/structured_outputs → examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/server}/__init__.py +0 -0
  881. {synth_ai/lm/vendors → examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/tests}/__init__.py +0 -0
  882. {synth_ai/lm/vendors/core → examples/task_apps/dev/pokemon_emerald/external/pokeagent-speedrun/utils}/__init__.py +0 -0
  883. {synth_ai/lm/vendors/local → examples/task_apps/math}/__init__.py +0 -0
  884. {synth_ai/lm/vendors/supported → examples/workflows}/__init__.py +0 -0
  885. {synth_ai/v0/tracing → examples/workflows/math_rl}/__init__.py +0 -0
  886. /synth_ai/{compound/cais.py → cli/__main__.py} +0 -0
  887. /synth_ai/{learning/filtering.py → py.typed} +0 -0
  888. {synth_ai-0.2.8.dev4.dist-info → synth_ai-0.2.23.dev3.dist-info}/WHEEL +0 -0
  889. {synth_ai-0.2.8.dev4.dist-info → synth_ai-0.2.23.dev3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1428 @@
1
+ from enum import IntEnum, IntFlag
2
+
3
+ class MetatileBehavior(IntEnum):
4
+ """Complete metatile behaviors from Pokemon Emerald decompilation"""
5
+ NORMAL = 0
6
+ SECRET_BASE_WALL = 1
7
+ TALL_GRASS = 2
8
+ LONG_GRASS = 3
9
+ UNUSED_04 = 4
10
+ UNUSED_05 = 5
11
+ DEEP_SAND = 6
12
+ SHORT_GRASS = 7
13
+ CAVE = 8
14
+ LONG_GRASS_SOUTH_EDGE = 9
15
+ NO_RUNNING = 10
16
+ INDOOR_ENCOUNTER = 11
17
+ MOUNTAIN_TOP = 12
18
+ BATTLE_PYRAMID_WARP = 13
19
+ MOSSDEEP_GYM_WARP = 14
20
+ MT_PYRE_HOLE = 15
21
+ POND_WATER = 16
22
+ INTERIOR_DEEP_WATER = 17
23
+ DEEP_WATER = 18
24
+ WATERFALL = 19
25
+ SOOTOPOLIS_DEEP_WATER = 20
26
+ OCEAN_WATER = 21
27
+ PUDDLE = 22
28
+ SHALLOW_WATER = 23
29
+ UNUSED_SOOTOPOLIS_DEEP_WATER = 24
30
+ NO_SURFACING = 25
31
+ UNUSED_SOOTOPOLIS_DEEP_WATER_2 = 26
32
+ STAIRS_OUTSIDE_ABANDONED_SHIP = 27
33
+ SHOAL_CAVE_ENTRANCE = 28
34
+ UNUSED_1D = 29
35
+ UNUSED_1E = 30
36
+ UNUSED_1F = 31
37
+ ICE = 32
38
+ SAND = 33
39
+ SEAWEED = 34
40
+ UNUSED_23 = 35
41
+ ASHGRASS = 36
42
+ FOOTPRINTS = 37
43
+ THIN_ICE = 38
44
+ CRACKED_ICE = 39
45
+ HOT_SPRINGS = 40
46
+ LAVARIDGE_GYM_B1F_WARP = 41
47
+ SEAWEED_NO_SURFACING = 42
48
+ REFLECTION_UNDER_BRIDGE = 43
49
+ UNUSED_2C = 44
50
+ UNUSED_2D = 45
51
+ UNUSED_2E = 46
52
+ UNUSED_2F = 47
53
+ IMPASSABLE_EAST = 48
54
+ IMPASSABLE_WEST = 49
55
+ IMPASSABLE_NORTH = 50
56
+ IMPASSABLE_SOUTH = 51
57
+ IMPASSABLE_NORTHEAST = 52
58
+ IMPASSABLE_NORTHWEST = 53
59
+ IMPASSABLE_SOUTHEAST = 54
60
+ IMPASSABLE_SOUTHWEST = 55
61
+ JUMP_EAST = 56
62
+ JUMP_WEST = 57
63
+ JUMP_NORTH = 58
64
+ JUMP_SOUTH = 59
65
+ JUMP_NORTHEAST = 60
66
+ JUMP_NORTHWEST = 61
67
+ JUMP_SOUTHEAST = 62
68
+ JUMP_SOUTHWEST = 63
69
+ WALK_EAST = 64
70
+ WALK_WEST = 65
71
+ WALK_NORTH = 66
72
+ WALK_SOUTH = 67
73
+ SLIDE_EAST = 68
74
+ SLIDE_WEST = 69
75
+ SLIDE_NORTH = 70
76
+ SLIDE_SOUTH = 71
77
+ TRICK_HOUSE_PUZZLE_8_FLOOR = 72
78
+ UNUSED_49 = 73
79
+ UNUSED_4A = 74
80
+ UNUSED_4B = 75
81
+ UNUSED_4C = 76
82
+ UNUSED_4D = 77
83
+ UNUSED_4E = 78
84
+ UNUSED_4F = 79
85
+ EASTWARD_CURRENT = 80
86
+ WESTWARD_CURRENT = 81
87
+ NORTHWARD_CURRENT = 82
88
+ SOUTHWARD_CURRENT = 83
89
+ UNUSED_54 = 84
90
+ UNUSED_55 = 85
91
+ UNUSED_56 = 86
92
+ UNUSED_57 = 87
93
+ UNUSED_58 = 88
94
+ UNUSED_59 = 89
95
+ UNUSED_5A = 90
96
+ UNUSED_5B = 91
97
+ UNUSED_5C = 92
98
+ UNUSED_5D = 93
99
+ UNUSED_5E = 94
100
+ UNUSED_5F = 95
101
+ NON_ANIMATED_DOOR = 96
102
+ LADDER = 97
103
+ EAST_ARROW_WARP = 98
104
+ WEST_ARROW_WARP = 99
105
+ NORTH_ARROW_WARP = 100
106
+ SOUTH_ARROW_WARP = 101
107
+ CRACKED_FLOOR_HOLE = 102
108
+ AQUA_HIDEOUT_WARP = 103
109
+ LAVARIDGE_GYM_1F_WARP = 104
110
+ ANIMATED_DOOR = 105
111
+ UP_ESCALATOR = 106
112
+ DOWN_ESCALATOR = 107
113
+ WATER_DOOR = 108
114
+ WATER_SOUTH_ARROW_WARP = 109
115
+ DEEP_SOUTH_WARP = 110
116
+ UNUSED_6F = 111
117
+ BRIDGE_OVER_OCEAN = 112
118
+ BRIDGE_OVER_POND_LOW = 113
119
+ BRIDGE_OVER_POND_MED = 114
120
+ BRIDGE_OVER_POND_HIGH = 115
121
+ PACIFIDLOG_VERTICAL_LOG_TOP = 116
122
+ PACIFIDLOG_VERTICAL_LOG_BOTTOM = 117
123
+ PACIFIDLOG_HORIZONTAL_LOG_LEFT = 118
124
+ PACIFIDLOG_HORIZONTAL_LOG_RIGHT = 119
125
+ FORTREE_BRIDGE = 120
126
+ UNUSED_79 = 121
127
+ BRIDGE_OVER_POND_MED_EDGE_1 = 122
128
+ BRIDGE_OVER_POND_MED_EDGE_2 = 123
129
+ BRIDGE_OVER_POND_HIGH_EDGE_1 = 124
130
+ BRIDGE_OVER_POND_HIGH_EDGE_2 = 125
131
+ UNUSED_BRIDGE = 126
132
+ BIKE_BRIDGE_OVER_BARRIER = 127
133
+ COUNTER = 128
134
+ UNUSED_81 = 129
135
+ UNUSED_82 = 130
136
+ PC = 131
137
+ CABLE_BOX_RESULTS_1 = 132
138
+ REGION_MAP = 133
139
+ TELEVISION = 134
140
+ POKEBLOCK_FEEDER = 135
141
+ UNUSED_88 = 136
142
+ SLOT_MACHINE = 137
143
+ ROULETTE = 138
144
+ CLOSED_SOOTOPOLIS_DOOR = 139
145
+ TRICK_HOUSE_PUZZLE_DOOR = 140
146
+ PETALBURG_GYM_DOOR = 141
147
+ RUNNING_SHOES_INSTRUCTION = 142
148
+ QUESTIONNAIRE = 143
149
+ SECRET_BASE_SPOT_RED_CAVE = 144
150
+ SECRET_BASE_SPOT_RED_CAVE_OPEN = 145
151
+ SECRET_BASE_SPOT_BROWN_CAVE = 146
152
+ SECRET_BASE_SPOT_BROWN_CAVE_OPEN = 147
153
+ SECRET_BASE_SPOT_YELLOW_CAVE = 148
154
+ SECRET_BASE_SPOT_YELLOW_CAVE_OPEN = 149
155
+ SECRET_BASE_SPOT_TREE_LEFT = 150
156
+ SECRET_BASE_SPOT_TREE_LEFT_OPEN = 151
157
+ SECRET_BASE_SPOT_SHRUB = 152
158
+ SECRET_BASE_SPOT_SHRUB_OPEN = 153
159
+ SECRET_BASE_SPOT_BLUE_CAVE = 154
160
+ SECRET_BASE_SPOT_BLUE_CAVE_OPEN = 155
161
+ SECRET_BASE_SPOT_TREE_RIGHT = 156
162
+ SECRET_BASE_SPOT_TREE_RIGHT_OPEN = 157
163
+ UNUSED_9E = 158
164
+ UNUSED_9F = 159
165
+ BERRY_TREE_SOIL = 160
166
+ UNUSED_A1 = 161
167
+ UNUSED_A2 = 162
168
+ UNUSED_A3 = 163
169
+ UNUSED_A4 = 164
170
+ UNUSED_A5 = 165
171
+ UNUSED_A6 = 166
172
+ UNUSED_A7 = 167
173
+ UNUSED_A8 = 168
174
+ UNUSED_A9 = 169
175
+ UNUSED_AA = 170
176
+ UNUSED_AB = 171
177
+ UNUSED_AC = 172
178
+ UNUSED_AD = 173
179
+ UNUSED_AE = 174
180
+ UNUSED_AF = 175
181
+ SECRET_BASE_PC = 176
182
+ SECRET_BASE_REGISTER_PC = 177
183
+ SECRET_BASE_SCENERY = 178
184
+ SECRET_BASE_TRAINER_SPOT = 179
185
+ SECRET_BASE_DECORATION = 180
186
+ HOLDS_SMALL_DECORATION = 181
187
+ UNUSED_B6 = 182
188
+ SECRET_BASE_NORTH_WALL = 183
189
+ SECRET_BASE_BALLOON = 184
190
+ SECRET_BASE_IMPASSABLE = 185
191
+ SECRET_BASE_GLITTER_MAT = 186
192
+ SECRET_BASE_JUMP_MAT = 187
193
+ SECRET_BASE_SPIN_MAT = 188
194
+ SECRET_BASE_SOUND_MAT = 189
195
+ SECRET_BASE_BREAKABLE_DOOR = 190
196
+ SECRET_BASE_SAND_ORNAMENT = 191
197
+ IMPASSABLE_SOUTH_AND_NORTH = 192
198
+ IMPASSABLE_WEST_AND_EAST = 193
199
+ SECRET_BASE_HOLE = 194
200
+ HOLDS_LARGE_DECORATION = 195
201
+ SECRET_BASE_TV_SHIELD = 196
202
+ PLAYER_ROOM_PC_ON = 197
203
+ SECRET_BASE_DECORATION_BASE = 198
204
+ SECRET_BASE_POSTER = 199
205
+ UNUSED_C8 = 200
206
+ UNUSED_C9 = 201
207
+ UNUSED_CA = 202
208
+ UNUSED_CB = 203
209
+ UNUSED_CC = 204
210
+ UNUSED_CD = 205
211
+ UNUSED_CE = 206
212
+ UNUSED_CF = 207
213
+ MUDDY_SLOPE = 208
214
+ BUMPY_SLOPE = 209
215
+ CRACKED_FLOOR = 210
216
+ ISOLATED_VERTICAL_RAIL = 211
217
+ ISOLATED_HORIZONTAL_RAIL = 212
218
+ VERTICAL_RAIL = 213
219
+ HORIZONTAL_RAIL = 214
220
+ UNUSED_D7 = 215
221
+ UNUSED_D8 = 216
222
+ UNUSED_D9 = 217
223
+ UNUSED_DA = 218
224
+ UNUSED_DB = 219
225
+ UNUSED_DC = 220
226
+ UNUSED_DD = 221
227
+ UNUSED_DE = 222
228
+ UNUSED_DF = 223
229
+ PICTURE_BOOK_SHELF = 224
230
+ BOOKSHELF = 225
231
+ POKEMON_CENTER_BOOKSHELF = 226
232
+ VASE = 227
233
+ TRASH_CAN = 228
234
+ SHOP_SHELF = 229
235
+ BLUEPRINT = 230
236
+ CABLE_BOX_RESULTS_2 = 231
237
+ WIRELESS_BOX_RESULTS = 232
238
+ TRAINER_HILL_TIMER = 233
239
+ SKY_PILLAR_CLOSED_DOOR = 234
240
+ UNUSED_EB = 235
241
+ UNUSED_EC = 236
242
+ UNUSED_ED = 237
243
+ UNUSED_EE = 238
244
+ UNUSED_EF = 239
245
+
246
+
247
+ class PokemonType(IntEnum):
248
+ """Pokemon types in Emerald"""
249
+ NORMAL = 0
250
+ FIGHTING = 1
251
+ FLYING = 2
252
+ POISON = 3
253
+ GROUND = 4
254
+ ROCK = 5
255
+ BUG = 6
256
+ GHOST = 7
257
+ STEEL = 8
258
+ MYSTERY = 9 # Used for Curse
259
+ FIRE = 10
260
+ WATER = 11
261
+ GRASS = 12
262
+ ELECTRIC = 13
263
+ PSYCHIC = 14
264
+ ICE = 15
265
+ DRAGON = 16
266
+ DARK = 17
267
+
268
+
269
+ class PokemonSpecies(IntEnum):
270
+ """Pokemon species IDs in Emerald (Hoenn Dex order)"""
271
+ NONE = 0
272
+ TREECKO = 1
273
+ GROVYLE = 2
274
+ SCEPTILE = 3
275
+ TORCHIC = 4
276
+ COMBUSKEN = 5
277
+ BLAZIKEN = 6
278
+ MUDKIP = 7
279
+ MARSHTOMP = 8
280
+ SWAMPERT = 9
281
+ POOCHYENA = 10
282
+ MIGHTYENA = 11
283
+ ZIGZAGOON = 12
284
+ LINOONE = 13
285
+ WURMPLE = 14
286
+ SILCOON = 15
287
+ BEAUTIFLY = 16
288
+ CASCOON = 17
289
+ DUSTOX = 18
290
+ LOTAD = 19
291
+ LOMBRE = 20
292
+ LUDICOLO = 21
293
+ SEEDOT = 22
294
+ NUZLEAF = 23
295
+ SHIFTRY = 24
296
+ TAILLOW = 25
297
+ SWELLOW = 26
298
+ WINGULL = 27
299
+ PELIPPER = 28
300
+ RALTS = 29
301
+ KIRLIA = 30
302
+ GARDEVOIR = 31
303
+ SURSKIT = 32
304
+ MASQUERAIN = 33
305
+ SHROOMISH = 34
306
+ BRELOOM = 35
307
+ SLAKOTH = 36
308
+ VIGOROTH = 37
309
+ SLAKING = 38
310
+ ABRA = 39
311
+ KADABRA = 40
312
+ ALAKAZAM = 41
313
+ NINCADA = 42
314
+ NINJASK = 43
315
+ SHEDINJA = 44
316
+ WHISMUR = 45
317
+ LOUDRED = 46
318
+ EXPLOUD = 47
319
+ MAKUHITA = 48
320
+ HARIYAMA = 49
321
+ GOLDEEN = 50
322
+ SEAKING = 51
323
+ MAGIKARP = 52
324
+ GYARADOS = 53
325
+ AZURILL = 54
326
+ MARILL = 55
327
+ AZUMARILL = 56
328
+ GEODUDE = 57
329
+ GRAVELER = 58
330
+ GOLEM = 59
331
+ NOSEPASS = 60
332
+ SKITTY = 61
333
+ DELCATTY = 62
334
+ ZUBAT = 63
335
+ GOLBAT = 64
336
+ CROBAT = 65
337
+ TENTACOOL = 66
338
+ TENTACRUEL = 67
339
+ SABLEYE = 68
340
+ MAWILE = 69
341
+ ARON = 70
342
+ LAIRON = 71
343
+ AGGRON = 72
344
+ MACHOP = 73
345
+ MACHOKE = 74
346
+ MACHAMP = 75
347
+ MEDITITE = 76
348
+ MEDICHAM = 77
349
+ ELECTRIKE = 78
350
+ MANECTRIC = 79
351
+ PLUSLE = 80
352
+ MINUN = 81
353
+ MAGNEMITE = 82
354
+ MAGNETON = 83
355
+ VOLTORB = 84
356
+ ELECTRODE = 85
357
+ # Add more species as needed...
358
+
359
+
360
+ class Move(IntEnum):
361
+ """Move IDs in Emerald"""
362
+ NONE = 0
363
+ POUND = 1
364
+ KARATE_CHOP = 2
365
+ DOUBLE_SLAP = 3
366
+ COMET_PUNCH = 4
367
+ MEGA_PUNCH = 5
368
+ PAY_DAY = 6
369
+ FIRE_PUNCH = 7
370
+ ICE_PUNCH = 8
371
+ THUNDER_PUNCH = 9
372
+ SCRATCH = 10
373
+ VICE_GRIP = 11
374
+ GUILLOTINE = 12
375
+ RAZOR_WIND = 13
376
+ SWORDS_DANCE = 14
377
+ CUT = 15
378
+ GUST = 16
379
+ WING_ATTACK = 17
380
+ WHIRLWIND = 18
381
+ FLY = 19
382
+ BIND = 20
383
+ SLAM = 21
384
+ VINE_WHIP = 22
385
+ STOMP = 23
386
+ DOUBLE_KICK = 24
387
+ MEGA_KICK = 25
388
+ JUMP_KICK = 26
389
+ ROLLING_KICK = 27
390
+ SAND_ATTACK = 28
391
+ HEADBUTT = 29
392
+ HORN_ATTACK = 30
393
+ FURY_ATTACK = 31
394
+ HORN_DRILL = 32
395
+ TACKLE = 33
396
+ BODY_SLAM = 34
397
+ WRAP = 35
398
+ TAKE_DOWN = 36
399
+ THRASH = 37
400
+ DOUBLE_EDGE = 38
401
+ TAIL_WHIP = 39
402
+ POISON_STING = 40
403
+ TWINEEDLE = 41
404
+ PIN_MISSILE = 42
405
+ LEER = 43
406
+ BITE = 44
407
+ GROWL = 45
408
+ ROAR = 46
409
+ SING = 47
410
+ SUPERSONIC = 48
411
+ SONIC_BOOM = 49
412
+ DISABLE = 50
413
+ ACID = 51
414
+ EMBER = 52
415
+ FLAMETHROWER = 53
416
+ MIST = 54
417
+ WATER_GUN = 55
418
+ HYDRO_PUMP = 56
419
+ SURF = 57
420
+ ICE_BEAM = 58
421
+ BLIZZARD = 59
422
+ PSYBEAM = 60
423
+ BUBBLE_BEAM = 61
424
+ AURORA_BEAM = 62
425
+ HYPER_BEAM = 63
426
+ PECK = 64
427
+ DRILL_PECK = 65
428
+ SUBMISSION = 66
429
+ LOW_KICK = 67
430
+ COUNTER = 68
431
+ SEISMIC_TOSS = 69
432
+ STRENGTH = 70
433
+ ABSORB = 71
434
+ MEGA_DRAIN = 72
435
+ LEECH_SEED = 73
436
+ GROWTH = 74
437
+ RAZOR_LEAF = 75
438
+ SOLAR_BEAM = 76
439
+ POISON_POWDER = 77
440
+ STUN_SPORE = 78
441
+ SLEEP_POWDER = 79
442
+ PETAL_DANCE = 80
443
+ STRING_SHOT = 81
444
+ DRAGON_RAGE = 82
445
+ FIRE_SPIN = 83
446
+ THUNDER_SHOCK = 84
447
+ THUNDERBOLT = 85
448
+ THUNDER_WAVE = 86
449
+ THUNDER = 87
450
+ ROCK_THROW = 88
451
+ EARTHQUAKE = 89
452
+ FISSURE = 90
453
+ DIG = 91
454
+ TOXIC = 92
455
+ CONFUSION = 93
456
+ PSYCHIC = 94
457
+ HYPNOSIS = 95
458
+ MEDITATE = 96
459
+ AGILITY = 97
460
+ QUICK_ATTACK = 98
461
+ RAGE = 99
462
+ TELEPORT = 100
463
+ NIGHT_SHADE = 101
464
+ MIMIC = 102
465
+ SCREECH = 103
466
+ DOUBLE_TEAM = 104
467
+ RECOVER = 105
468
+ HARDEN = 106
469
+ MINIMIZE = 107
470
+ SMOKESCREEN = 108
471
+ CONFUSE_RAY = 109
472
+ WITHDRAW = 110
473
+ DEFENSE_CURL = 111
474
+ BARRIER = 112
475
+ LIGHT_SCREEN = 113
476
+ HAZE = 114
477
+ REFLECT = 115
478
+ FOCUS_ENERGY = 116
479
+ BIDE = 117
480
+ METRONOME = 118
481
+ MIRROR_MOVE = 119
482
+ SELFDESTRUCT = 120
483
+ EGG_BOMB = 121
484
+ LICK = 122
485
+ SMOG = 123
486
+ SLUDGE = 124
487
+ BONE_CLUB = 125
488
+ FIRE_BLAST = 126
489
+ WATERFALL = 127
490
+ CLAMP = 128
491
+ SWIFT = 129
492
+ SKULL_BASH = 130
493
+ SPIKE_CANNON = 131
494
+ CONSTRICT = 132
495
+ AMNESIA = 133
496
+ KINESIS = 134
497
+ SOFTBOILED = 135
498
+ HI_JUMP_KICK = 136
499
+ GLARE = 137
500
+ DREAM_EATER = 138
501
+ POISON_GAS = 139
502
+ BARRAGE = 140
503
+ LEECH_LIFE = 141
504
+ LOVELY_KISS = 142
505
+ SKY_ATTACK = 143
506
+ TRANSFORM = 144
507
+ BUBBLE = 145
508
+ DIZZY_PUNCH = 146
509
+ SPORE = 147
510
+ FLASH = 148
511
+ PSYWAVE = 149
512
+ SPLASH = 150
513
+ ACID_ARMOR = 151
514
+ CRABHAMMER = 152
515
+ EXPLOSION = 153
516
+ FURY_SWIPES = 154
517
+ BONEMERANG = 155
518
+ REST = 156
519
+ ROCK_SLIDE = 157
520
+ HYPER_FANG = 158
521
+ SHARPEN = 159
522
+ CONVERSION = 160
523
+ TRI_ATTACK = 161
524
+ SUPER_FANG = 162
525
+ SLASH = 163
526
+ SUBSTITUTE = 164
527
+ STRUGGLE = 165
528
+ # Add more moves as needed...
529
+
530
+
531
+ class Badge(IntFlag):
532
+ """Gym badges in Emerald"""
533
+ STONE = 1 << 0
534
+ KNUCKLE = 1 << 1
535
+ DYNAMO = 1 << 2
536
+ HEAT = 1 << 3
537
+ BALANCE = 1 << 4
538
+ FEATHER = 1 << 5
539
+ MIND = 1 << 6
540
+ RAIN = 1 << 7
541
+
542
+ class MapLocation(IntEnum):
543
+ """Maps location IDs to their names in Pokemon Emerald"""
544
+ # Towns and Cities (Group 0)
545
+ PETALBURG_CITY = 0x00
546
+ SLATEPORT_CITY = 0x01
547
+ MAUVILLE_CITY = 0x02
548
+ RUSTBORO_CITY = 0x03
549
+ FORTREE_CITY = 0x04
550
+ LILYCOVE_CITY = 0x05
551
+ MOSSDEEP_CITY = 0x06
552
+ SOOTOPOLIS_CITY = 0x07
553
+ EVER_GRANDE_CITY = 0x08
554
+ LITTLEROOT_TOWN = 0x09
555
+ OLDALE_TOWN = 0x0A
556
+ DEWFORD_TOWN = 0x0B
557
+ LAVARIDGE_TOWN = 0x0C
558
+ FALLARBOR_TOWN = 0x0D
559
+ VERDANTURF_TOWN = 0x0E
560
+ PACIFIDLOG_TOWN = 0x0F
561
+
562
+ # Routes (Group 0)
563
+ ROUTE_101 = 0x10
564
+ ROUTE_102 = 0x11
565
+ ROUTE_103 = 0x12
566
+ ROUTE_104 = 0x13
567
+ ROUTE_105 = 0x14
568
+ ROUTE_106 = 0x15
569
+ ROUTE_107 = 0x16
570
+ ROUTE_108 = 0x17
571
+ ROUTE_109 = 0x18
572
+ ROUTE_110 = 0x19
573
+ ROUTE_111 = 0x1A
574
+ ROUTE_112 = 0x1B
575
+ ROUTE_113 = 0x1C
576
+ ROUTE_114 = 0x1D
577
+ ROUTE_115 = 0x1E
578
+ ROUTE_116 = 0x1F
579
+ ROUTE_117 = 0x20
580
+ ROUTE_118 = 0x21
581
+ ROUTE_119 = 0x22
582
+ ROUTE_120 = 0x23
583
+ ROUTE_121 = 0x24
584
+ ROUTE_122 = 0x25
585
+ ROUTE_123 = 0x26
586
+ ROUTE_124 = 0x27
587
+ ROUTE_125 = 0x28
588
+ ROUTE_126 = 0x29
589
+ ROUTE_127 = 0x2A
590
+ ROUTE_128 = 0x2B
591
+ ROUTE_129 = 0x2C
592
+ ROUTE_130 = 0x2D
593
+ ROUTE_131 = 0x2E
594
+ ROUTE_132 = 0x2F
595
+ ROUTE_133 = 0x30
596
+ ROUTE_134 = 0x31
597
+
598
+ # Underwater Routes (Group 0)
599
+ UNDERWATER_ROUTE_124 = 0x32
600
+ UNDERWATER_ROUTE_126 = 0x33
601
+ UNDERWATER_ROUTE_127 = 0x34
602
+ UNDERWATER_ROUTE_128 = 0x35
603
+ UNDERWATER_ROUTE_129 = 0x36
604
+ UNDERWATER_ROUTE_105 = 0x37
605
+ UNDERWATER_ROUTE_125 = 0x38
606
+
607
+ # Indoor Littleroot (Group 1)
608
+ LITTLEROOT_TOWN_BRENDANS_HOUSE_1F = 0x100
609
+ LITTLEROOT_TOWN_BRENDANS_HOUSE_2F = 0x101
610
+ LITTLEROOT_TOWN_MAYS_HOUSE_1F = 0x102
611
+ LITTLEROOT_TOWN_MAYS_HOUSE_2F = 0x103
612
+ LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB = 0x104
613
+
614
+ # Indoor Oldale (Group 2)
615
+ OLDALE_TOWN_HOUSE1 = 0x200
616
+ OLDALE_TOWN_HOUSE2 = 0x201
617
+ OLDALE_TOWN_POKEMON_CENTER_1F = 0x202
618
+ OLDALE_TOWN_POKEMON_CENTER_2F = 0x203
619
+ OLDALE_TOWN_MART = 0x204
620
+
621
+ # Indoor Dewford (Group 3)
622
+ DEWFORD_TOWN_HOUSE1 = 0x300
623
+ DEWFORD_TOWN_POKEMON_CENTER_1F = 0x301
624
+ DEWFORD_TOWN_POKEMON_CENTER_2F = 0x302
625
+ DEWFORD_TOWN_GYM = 0x303
626
+ DEWFORD_TOWN_HALL = 0x304
627
+ DEWFORD_TOWN_HOUSE2 = 0x305
628
+
629
+ # Indoor Lavaridge (Group 4)
630
+ LAVARIDGE_TOWN_HERB_SHOP = 0x400
631
+ LAVARIDGE_TOWN_GYM_1F = 0x401
632
+ LAVARIDGE_TOWN_GYM_B1F = 0x402
633
+ LAVARIDGE_TOWN_HOUSE = 0x403
634
+ LAVARIDGE_TOWN_MART = 0x404
635
+ LAVARIDGE_TOWN_POKEMON_CENTER_1F = 0x405
636
+ LAVARIDGE_TOWN_POKEMON_CENTER_2F = 0x406
637
+
638
+ # Indoor Fallarbor (Group 5)
639
+ FALLARBOR_TOWN_MART = 0x500
640
+ FALLARBOR_TOWN_BATTLE_TENT_LOBBY = 0x501
641
+ FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR = 0x502
642
+ FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM = 0x503
643
+ FALLARBOR_TOWN_POKEMON_CENTER_1F = 0x504
644
+ FALLARBOR_TOWN_POKEMON_CENTER_2F = 0x505
645
+ FALLARBOR_TOWN_COZMOS_HOUSE = 0x506
646
+ FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE = 0x507
647
+
648
+ # Indoor Verdanturf (Group 6)
649
+ VERDANTURF_TOWN_BATTLE_TENT_LOBBY = 0x600
650
+ VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR = 0x601
651
+ VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM = 0x602
652
+ VERDANTURF_TOWN_MART = 0x603
653
+ VERDANTURF_TOWN_POKEMON_CENTER_1F = 0x604
654
+ VERDANTURF_TOWN_POKEMON_CENTER_2F = 0x605
655
+ VERDANTURF_TOWN_WANDAS_HOUSE = 0x606
656
+ VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE = 0x607
657
+ VERDANTURF_TOWN_HOUSE = 0x608
658
+
659
+ # Indoor Pacifidlog (Group 7)
660
+ PACIFIDLOG_TOWN_POKEMON_CENTER_1F = 0x700
661
+ PACIFIDLOG_TOWN_POKEMON_CENTER_2F = 0x701
662
+ PACIFIDLOG_TOWN_HOUSE1 = 0x702
663
+ PACIFIDLOG_TOWN_HOUSE2 = 0x703
664
+ PACIFIDLOG_TOWN_HOUSE3 = 0x704
665
+ PACIFIDLOG_TOWN_HOUSE4 = 0x705
666
+ PACIFIDLOG_TOWN_HOUSE5 = 0x706
667
+
668
+ # Indoor Petalburg (Group 8)
669
+ PETALBURG_CITY_WALLYS_HOUSE = 0x800
670
+ PETALBURG_CITY_GYM = 0x801
671
+ PETALBURG_CITY_HOUSE1 = 0x802
672
+ PETALBURG_CITY_HOUSE2 = 0x803
673
+ PETALBURG_CITY_POKEMON_CENTER_1F = 0x804
674
+ PETALBURG_CITY_POKEMON_CENTER_2F = 0x805
675
+ PETALBURG_CITY_MART = 0x806
676
+
677
+ # Indoor Slateport (Group 9)
678
+ SLATEPORT_CITY_STERNS_SHIPYARD_1F = 0x900
679
+ SLATEPORT_CITY_STERNS_SHIPYARD_2F = 0x901
680
+ SLATEPORT_CITY_BATTLE_TENT_LOBBY = 0x902
681
+ SLATEPORT_CITY_BATTLE_TENT_CORRIDOR = 0x903
682
+ SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM = 0x904
683
+ SLATEPORT_CITY_NAME_RATERS_HOUSE = 0x905
684
+ SLATEPORT_CITY_POKEMON_FAN_CLUB = 0x906
685
+ SLATEPORT_CITY_OCEANIC_MUSEUM_1F = 0x907
686
+ SLATEPORT_CITY_OCEANIC_MUSEUM_2F = 0x908
687
+ SLATEPORT_CITY_HARBOR = 0x909
688
+ SLATEPORT_CITY_HOUSE = 0x90A
689
+ SLATEPORT_CITY_POKEMON_CENTER_1F = 0x90B
690
+ SLATEPORT_CITY_POKEMON_CENTER_2F = 0x90C
691
+ SLATEPORT_CITY_MART = 0x90D
692
+
693
+ # Indoor Mauville (Group 10)
694
+ MAUVILLE_CITY_GYM = 0xA00
695
+ MAUVILLE_CITY_BIKE_SHOP = 0xA01
696
+ MAUVILLE_CITY_HOUSE1 = 0xA02
697
+ MAUVILLE_CITY_GAME_CORNER = 0xA03
698
+ MAUVILLE_CITY_HOUSE2 = 0xA04
699
+ MAUVILLE_CITY_POKEMON_CENTER_1F = 0xA05
700
+ MAUVILLE_CITY_POKEMON_CENTER_2F = 0xA06
701
+ MAUVILLE_CITY_MART = 0xA07
702
+
703
+ # Indoor Rustboro (Group 11)
704
+ RUSTBORO_CITY_DEVON_CORP_1F = 0xB00
705
+ RUSTBORO_CITY_DEVON_CORP_2F = 0xB01
706
+ RUSTBORO_CITY_DEVON_CORP_3F = 0xB02
707
+ RUSTBORO_CITY_GYM = 0xB03
708
+ RUSTBORO_CITY_POKEMON_SCHOOL = 0xB04
709
+ RUSTBORO_CITY_POKEMON_CENTER_1F = 0xB05
710
+ RUSTBORO_CITY_POKEMON_CENTER_2F = 0xB06
711
+ RUSTBORO_CITY_MART = 0xB07
712
+ RUSTBORO_CITY_FLAT1_1F = 0xB08
713
+ RUSTBORO_CITY_FLAT1_2F = 0xB09
714
+ RUSTBORO_CITY_HOUSE1 = 0xB0A
715
+ RUSTBORO_CITY_CUTTERS_HOUSE = 0xB0B
716
+ RUSTBORO_CITY_HOUSE2 = 0xB0C
717
+ RUSTBORO_CITY_FLAT2_1F = 0xB0D
718
+ RUSTBORO_CITY_FLAT2_2F = 0xB0E
719
+ RUSTBORO_CITY_FLAT2_3F = 0xB0F
720
+ RUSTBORO_CITY_HOUSE3 = 0xB10
721
+
722
+ # Indoor Route 104 (Group 18)
723
+ ROUTE_104_MR_BRINEYS_HOUSE = 0x1200
724
+ ROUTE_104_PRETTY_PETAL_FLOWER_SHOP = 0x1201
725
+
726
+ # Indoor Route 111 (Group 19)
727
+ ROUTE_111_WINSTRATE_FAMILYS_HOUSE = 0x1300
728
+ ROUTE_111_OLD_LADYS_REST_STOP = 0x1301
729
+
730
+ # Indoor Route 112 (Group 20)
731
+ ROUTE_112_CABLE_CAR_STATION = 0x1400
732
+ MT_CHIMNEY_CABLE_CAR_STATION = 0x1401
733
+
734
+ # Indoor Route 114 (Group 21)
735
+ ROUTE_114_FOSSIL_MANIACS_HOUSE = 0x1500
736
+ ROUTE_114_FOSSIL_MANIACS_TUNNEL = 0x1501
737
+ ROUTE_114_LANETTES_HOUSE = 0x1502
738
+
739
+ # Indoor Route 116 (Group 22)
740
+ ROUTE_116_TUNNELERS_REST_HOUSE = 0x1600
741
+
742
+ # Indoor Route 117 (Group 23)
743
+ ROUTE_117_POKEMON_DAY_CARE = 0x1700
744
+
745
+ # Indoor Route 121 (Group 24)
746
+ ROUTE_121_SAFARI_ZONE_ENTRANCE = 0x1800
747
+
748
+ # Indoor Fortree (Group 12)
749
+ FORTREE_CITY_HOUSE1 = 0xC00
750
+ FORTREE_CITY_GYM = 0xC01
751
+ FORTREE_CITY_POKEMON_CENTER_1F = 0xC02
752
+ FORTREE_CITY_POKEMON_CENTER_2F = 0xC03
753
+ FORTREE_CITY_MART = 0xC04
754
+ FORTREE_CITY_HOUSE2 = 0xC05
755
+ FORTREE_CITY_HOUSE3 = 0xC06
756
+ FORTREE_CITY_HOUSE4 = 0xC07
757
+ FORTREE_CITY_HOUSE5 = 0xC08
758
+ FORTREE_CITY_DECORATION_SHOP = 0xC09
759
+
760
+ # Indoor Lilycove (Group 13)
761
+ LILYCOVE_CITY_COVE_LILY_MOTEL_1F = 0xD00
762
+ LILYCOVE_CITY_COVE_LILY_MOTEL_2F = 0xD01
763
+ LILYCOVE_CITY_LILYCOVE_MUSEUM_1F = 0xD02
764
+ LILYCOVE_CITY_LILYCOVE_MUSEUM_2F = 0xD03
765
+ LILYCOVE_CITY_CONTEST_LOBBY = 0xD04
766
+ LILYCOVE_CITY_CONTEST_HALL = 0xD05
767
+ LILYCOVE_CITY_POKEMON_CENTER_1F = 0xD06
768
+ LILYCOVE_CITY_POKEMON_CENTER_2F = 0xD07
769
+ LILYCOVE_CITY_UNUSED_MART = 0xD08
770
+ LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB = 0xD09
771
+ LILYCOVE_CITY_HARBOR = 0xD0A
772
+ LILYCOVE_CITY_MOVE_DELETERS_HOUSE = 0xD0B
773
+ LILYCOVE_CITY_HOUSE1 = 0xD0C
774
+ LILYCOVE_CITY_HOUSE2 = 0xD0D
775
+ LILYCOVE_CITY_HOUSE3 = 0xD0E
776
+ LILYCOVE_CITY_HOUSE4 = 0xD0F
777
+ LILYCOVE_CITY_DEPARTMENT_STORE_1F = 0xD10
778
+ LILYCOVE_CITY_DEPARTMENT_STORE_2F = 0xD11
779
+ LILYCOVE_CITY_DEPARTMENT_STORE_3F = 0xD12
780
+ LILYCOVE_CITY_DEPARTMENT_STORE_4F = 0xD13
781
+ LILYCOVE_CITY_DEPARTMENT_STORE_5F = 0xD14
782
+ LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP = 0xD15
783
+ LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR = 0xD16
784
+
785
+ # Indoor Mossdeep (Group 14)
786
+ MOSSDEEP_CITY_GYM = 0xE00
787
+ MOSSDEEP_CITY_HOUSE1 = 0xE01
788
+ MOSSDEEP_CITY_HOUSE2 = 0xE02
789
+ MOSSDEEP_CITY_POKEMON_CENTER_1F = 0xE03
790
+ MOSSDEEP_CITY_POKEMON_CENTER_2F = 0xE04
791
+ MOSSDEEP_CITY_MART = 0xE05
792
+ MOSSDEEP_CITY_HOUSE3 = 0xE06
793
+ MOSSDEEP_CITY_STEVENS_HOUSE = 0xE07
794
+ MOSSDEEP_CITY_HOUSE4 = 0xE08
795
+ MOSSDEEP_CITY_SPACE_CENTER_1F = 0xE09
796
+ MOSSDEEP_CITY_SPACE_CENTER_2F = 0xE0A
797
+ MOSSDEEP_CITY_GAME_CORNER_1F = 0xE0B
798
+ MOSSDEEP_CITY_GAME_CORNER_B1F = 0xE0C
799
+
800
+ # Indoor Sootopolis (Group 15)
801
+ SOOTOPOLIS_CITY_GYM_1F = 0xF00
802
+ SOOTOPOLIS_CITY_GYM_B1F = 0xF01
803
+ SOOTOPOLIS_CITY_POKEMON_CENTER_1F = 0xF02
804
+ SOOTOPOLIS_CITY_POKEMON_CENTER_2F = 0xF03
805
+ SOOTOPOLIS_CITY_MART = 0xF04
806
+ SOOTOPOLIS_CITY_HOUSE1 = 0xF05
807
+ SOOTOPOLIS_CITY_HOUSE2 = 0xF06
808
+ SOOTOPOLIS_CITY_HOUSE3 = 0xF07
809
+ SOOTOPOLIS_CITY_HOUSE4 = 0xF08
810
+ SOOTOPOLIS_CITY_HOUSE5 = 0xF09
811
+ SOOTOPOLIS_CITY_HOUSE6 = 0xF0A
812
+ SOOTOPOLIS_CITY_HOUSE7 = 0xF0B
813
+ SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE = 0xF0C
814
+ SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F = 0xF0D
815
+ SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F = 0xF0E
816
+
817
+ # Indoor Ever Grande (Group 16)
818
+ EVER_GRANDE_CITY_SIDNEYS_ROOM = 0x1000
819
+ EVER_GRANDE_CITY_PHOEBES_ROOM = 0x1001
820
+ EVER_GRANDE_CITY_GLACIAS_ROOM = 0x1002
821
+ EVER_GRANDE_CITY_DRAKES_ROOM = 0x1003
822
+ EVER_GRANDE_CITY_CHAMPIONS_ROOM = 0x1004
823
+ EVER_GRANDE_CITY_HALL1 = 0x1005
824
+ EVER_GRANDE_CITY_HALL2 = 0x1006
825
+ EVER_GRANDE_CITY_HALL3 = 0x1007
826
+ EVER_GRANDE_CITY_HALL4 = 0x1008
827
+ EVER_GRANDE_CITY_HALL5 = 0x1009
828
+ EVER_GRANDE_CITY_POKEMON_LEAGUE_1F = 0x100A
829
+ EVER_GRANDE_CITY_HALL_OF_FAME = 0x100B
830
+ EVER_GRANDE_CITY_POKEMON_CENTER_1F = 0x100C
831
+ EVER_GRANDE_CITY_POKEMON_CENTER_2F = 0x100D
832
+ EVER_GRANDE_CITY_POKEMON_LEAGUE_2F = 0x100E
833
+
834
+ # Dungeons (Group 17)
835
+ METEOR_FALLS_1F_1R = 0x1100
836
+ METEOR_FALLS_1F_2R = 0x1101
837
+ METEOR_FALLS_B1F_1R = 0x1102
838
+ METEOR_FALLS_B1F_2R = 0x1103
839
+ RUSTURF_TUNNEL = 0x1104
840
+ UNDERWATER_SOOTOPOLIS_CITY = 0x1105
841
+ DESERT_RUINS = 0x1106
842
+ GRANITE_CAVE_1F = 0x1107
843
+ GRANITE_CAVE_B1F = 0x1108
844
+ GRANITE_CAVE_B2F = 0x1109
845
+ GRANITE_CAVE_STEVENS_ROOM = 0x110A
846
+ PETALBURG_WOODS = 0x110B
847
+ MT_CHIMNEY = 0x110C
848
+ JAGGED_PASS = 0x110D
849
+ FIERY_PATH = 0x110E
850
+ MT_PYRE_1F = 0x110F
851
+ MT_PYRE_2F = 0x1110
852
+ MT_PYRE_3F = 0x1111
853
+ MT_PYRE_4F = 0x1112
854
+ MT_PYRE_5F = 0x1113
855
+ MT_PYRE_6F = 0x1114
856
+ MT_PYRE_EXTERIOR = 0x1115
857
+ MT_PYRE_SUMMIT = 0x1116
858
+ AQUA_HIDEOUT_1F = 0x1117
859
+ AQUA_HIDEOUT_B1F = 0x1118
860
+ AQUA_HIDEOUT_B2F = 0x1119
861
+ UNDERWATER_SEAFLOOR_CAVERN = 0x111A
862
+ SEAFLOOR_CAVERN_ENTRANCE = 0x111B
863
+ SEAFLOOR_CAVERN_ROOM1 = 0x111C
864
+ SEAFLOOR_CAVERN_ROOM2 = 0x111D
865
+ SEAFLOOR_CAVERN_ROOM3 = 0x111E
866
+ SEAFLOOR_CAVERN_ROOM4 = 0x111F
867
+ SEAFLOOR_CAVERN_ROOM5 = 0x1120
868
+ SEAFLOOR_CAVERN_ROOM6 = 0x1121
869
+ SEAFLOOR_CAVERN_ROOM7 = 0x1122
870
+ SEAFLOOR_CAVERN_ROOM8 = 0x1123
871
+ SEAFLOOR_CAVERN_ROOM9 = 0x1124
872
+ CAVE_OF_ORIGIN_ENTRANCE = 0x1125
873
+ CAVE_OF_ORIGIN_1F = 0x1126
874
+ CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1 = 0x1127
875
+ CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2 = 0x1128
876
+ CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3 = 0x1129
877
+ CAVE_OF_ORIGIN_B1F = 0x112A
878
+ VICTORY_ROAD_1F = 0x112B
879
+ VICTORY_ROAD_B1F = 0x112C
880
+ VICTORY_ROAD_B2F = 0x112D
881
+ SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM = 0x112E
882
+ SHOAL_CAVE_LOW_TIDE_INNER_ROOM = 0x112F
883
+ SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM = 0x1130
884
+ SHOAL_CAVE_LOW_TIDE_LOWER_ROOM = 0x1131
885
+ SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM = 0x1132
886
+ SHOAL_CAVE_HIGH_TIDE_INNER_ROOM = 0x1133
887
+ NEW_MAUVILLE_ENTRANCE = 0x1134
888
+ NEW_MAUVILLE_INSIDE = 0x1135
889
+ ABANDONED_SHIP_DECK = 0x1136
890
+ ABANDONED_SHIP_CORRIDORS_1F = 0x1137
891
+ ABANDONED_SHIP_ROOMS_1F = 0x1138
892
+ ABANDONED_SHIP_CORRIDORS_B1F = 0x1139
893
+ ABANDONED_SHIP_ROOMS_B1F = 0x113A
894
+ ABANDONED_SHIP_ROOMS2_B1F = 0x113B
895
+ ABANDONED_SHIP_UNDERWATER1 = 0x113C
896
+ ABANDONED_SHIP_ROOM_B1F = 0x113D
897
+ ABANDONED_SHIP_ROOMS2_1F = 0x113E
898
+ ABANDONED_SHIP_CAPTAINS_OFFICE = 0x113F
899
+ ABANDONED_SHIP_UNDERWATER2 = 0x1140
900
+ ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS = 0x1141
901
+ ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS = 0x1142
902
+ ISLAND_CAVE = 0x1143
903
+ ANCIENT_TOMB = 0x1144
904
+ UNDERWATER_ROUTE134 = 0x1145
905
+ UNDERWATER_SEALED_CHAMBER = 0x1146
906
+ SEALED_CHAMBER_OUTER_ROOM = 0x1147
907
+ SEALED_CHAMBER_INNER_ROOM = 0x1148
908
+ SCORCHED_SLAB = 0x1149
909
+ AQUA_HIDEOUT_UNUSED_RUBY_MAP1 = 0x114A
910
+ AQUA_HIDEOUT_UNUSED_RUBY_MAP2 = 0x114B
911
+ AQUA_HIDEOUT_UNUSED_RUBY_MAP3 = 0x114C
912
+ SKY_PILLAR_ENTRANCE = 0x114D
913
+ SKY_PILLAR_OUTSIDE = 0x114E
914
+ SKY_PILLAR_1F = 0x114F
915
+ SKY_PILLAR_2F = 0x1150
916
+ SKY_PILLAR_3F = 0x1151
917
+ SKY_PILLAR_4F = 0x1152
918
+ SHOAL_CAVE_LOW_TIDE_ICE_ROOM = 0x1153
919
+ SKY_PILLAR_5F = 0x1154
920
+ SKY_PILLAR_TOP = 0x1155
921
+ MAGMA_HIDEOUT_1F = 0x1156
922
+ MAGMA_HIDEOUT_2F_1R = 0x1157
923
+ MAGMA_HIDEOUT_2F_2R = 0x1158
924
+ MAGMA_HIDEOUT_3F_1R = 0x1159
925
+ MAGMA_HIDEOUT_3F_2R = 0x115A
926
+ MAGMA_HIDEOUT_4F = 0x115B
927
+ MAGMA_HIDEOUT_3F_3R = 0x115C
928
+ MAGMA_HIDEOUT_2F_3R = 0x115D
929
+ MIRAGE_TOWER_1F = 0x115E
930
+ MIRAGE_TOWER_2F = 0x115F
931
+ MIRAGE_TOWER_3F = 0x1160
932
+ MIRAGE_TOWER_4F = 0x1161
933
+ DESERT_UNDERPASS = 0x1162
934
+ ARTISAN_CAVE_B1F = 0x1163
935
+ ARTISAN_CAVE_1F = 0x1164
936
+ UNDERWATER_MARINE_CAVE = 0x1165
937
+ MARINE_CAVE_ENTRANCE = 0x1166
938
+ MARINE_CAVE_END = 0x1167
939
+ TERRA_CAVE_ENTRANCE = 0x1168
940
+ TERRA_CAVE_END = 0x1169
941
+ ALTERING_CAVE = 0x116A
942
+ METEOR_FALLS_STEVENS_CAVE = 0x116B
943
+
944
+ # Indoor Route 109 (Group 26)
945
+ ROUTE_109_SEASHORE_HOUSE = 0x1A00
946
+
947
+ # Indoor Route 110 (Group 27)
948
+ ROUTE_110_TRICK_HOUSE_ENTRANCE = 0x1B00
949
+ ROUTE_110_TRICK_HOUSE_END = 0x1B01
950
+ ROUTE_110_TRICK_HOUSE_CORRIDOR = 0x1B02
951
+ ROUTE_110_TRICK_HOUSE_PUZZLE1 = 0x1B03
952
+ ROUTE_110_TRICK_HOUSE_PUZZLE2 = 0x1B04
953
+ ROUTE_110_TRICK_HOUSE_PUZZLE3 = 0x1B05
954
+ ROUTE_110_TRICK_HOUSE_PUZZLE4 = 0x1B06
955
+ ROUTE_110_TRICK_HOUSE_PUZZLE5 = 0x1B07
956
+ ROUTE_110_TRICK_HOUSE_PUZZLE6 = 0x1B08
957
+ ROUTE_110_TRICK_HOUSE_PUZZLE7 = 0x1B09
958
+ ROUTE_110_TRICK_HOUSE_PUZZLE8 = 0x1B0A
959
+ ROUTE_110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE = 0x1B0B
960
+ ROUTE_110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE = 0x1B0C
961
+
962
+ # Indoor Route 113 (Group 28)
963
+ ROUTE_113_GLASS_WORKSHOP = 0x1C00
964
+
965
+ # Indoor Route 123 (Group 29)
966
+ ROUTE_123_BERRY_MASTERS_HOUSE = 0x1D00
967
+
968
+ # Indoor Route 119 (Group 30)
969
+ ROUTE_119_WEATHER_INSTITUTE_1F = 0x1E00
970
+ ROUTE_119_WEATHER_INSTITUTE_2F = 0x1E01
971
+ ROUTE_119_HOUSE = 0x1E02
972
+
973
+ # Indoor Route 124 (Group 31)
974
+ ROUTE_124_DIVING_TREASURE_HUNTERS_HOUSE = 0x1F00
975
+
976
+ # Special Areas (Group 25)
977
+ SAFARI_ZONE_NORTHWEST = 0x1900
978
+ SAFARI_ZONE_NORTH = 0x1901
979
+ SAFARI_ZONE_SOUTHWEST = 0x1902
980
+ SAFARI_ZONE_SOUTH = 0x1903
981
+ BATTLE_FRONTIER_OUTSIDE_WEST = 0x1904
982
+ BATTLE_FRONTIER_BATTLE_TOWER_LOBBY = 0x1905
983
+ BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR = 0x1906
984
+ BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR = 0x1907
985
+ BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM = 0x1908
986
+ SOUTHERN_ISLAND_EXTERIOR = 0x1909
987
+ SOUTHERN_ISLAND_INTERIOR = 0x190A
988
+ SAFARI_ZONE_REST_HOUSE = 0x190B
989
+ SAFARI_ZONE_NORTHEAST = 0x190C
990
+ SAFARI_ZONE_SOUTHEAST = 0x190D
991
+ BATTLE_FRONTIER_OUTSIDE_EAST = 0x190E
992
+ BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM = 0x190F
993
+ BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR = 0x1910
994
+ BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM = 0x1911
995
+ BATTLE_FRONTIER_BATTLE_DOME_LOBBY = 0x1912
996
+ BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR = 0x1913
997
+ BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM = 0x1914
998
+ BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM = 0x1915
999
+ BATTLE_FRONTIER_BATTLE_PALACE_LOBBY = 0x1916
1000
+ BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR = 0x1917
1001
+ BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM = 0x1918
1002
+ BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY = 0x1919
1003
+ BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR = 0x191A
1004
+ BATTLE_FRONTIER_BATTLE_PYRAMID_TOP = 0x191B
1005
+ BATTLE_FRONTIER_BATTLE_ARENA_LOBBY = 0x191C
1006
+ BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR = 0x191D
1007
+ BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM = 0x191E
1008
+ BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY = 0x191F
1009
+ BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM = 0x1920
1010
+ BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM = 0x1921
1011
+ BATTLE_FRONTIER_BATTLE_PIKE_LOBBY = 0x1922
1012
+ BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR = 0x1923
1013
+ BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM = 0x1924
1014
+ BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL = 0x1925
1015
+ BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL = 0x1926
1016
+ BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS = 0x1927
1017
+ BATTLE_FRONTIER_RANKING_HALL = 0x1928
1018
+ BATTLE_FRONTIER_LOUNGE1 = 0x1929
1019
+ BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER = 0x192A
1020
+ BATTLE_FRONTIER_LOUNGE2 = 0x192B
1021
+ BATTLE_FRONTIER_LOUNGE3 = 0x192C
1022
+ BATTLE_FRONTIER_LOUNGE4 = 0x192D
1023
+ BATTLE_FRONTIER_SCOTTS_HOUSE = 0x192E
1024
+ BATTLE_FRONTIER_LOUNGE5 = 0x192F
1025
+ BATTLE_FRONTIER_LOUNGE6 = 0x1930
1026
+ BATTLE_FRONTIER_LOUNGE7 = 0x1931
1027
+ BATTLE_FRONTIER_RECEPTION_GATE = 0x1932
1028
+ BATTLE_FRONTIER_LOUNGE8 = 0x1933
1029
+ BATTLE_FRONTIER_LOUNGE9 = 0x1934
1030
+ BATTLE_FRONTIER_POKEMON_CENTER_1F = 0x1935
1031
+ BATTLE_FRONTIER_POKEMON_CENTER_2F = 0x1936
1032
+ BATTLE_FRONTIER_MART = 0x1937
1033
+ FARAWAY_ISLAND_ENTRANCE = 0x1938
1034
+ FARAWAY_ISLAND_INTERIOR = 0x1939
1035
+ BIRTH_ISLAND_EXTERIOR = 0x193A
1036
+ BIRTH_ISLAND_HARBOR = 0x193B
1037
+ TRAINER_HILL_ENTRANCE = 0x193C
1038
+ TRAINER_HILL_1F = 0x193D
1039
+ TRAINER_HILL_2F = 0x193E
1040
+ TRAINER_HILL_3F = 0x193F
1041
+ TRAINER_HILL_4F = 0x1940
1042
+ TRAINER_HILL_ROOF = 0x1941
1043
+ NAVEL_ROCK_EXTERIOR = 0x1942
1044
+ NAVEL_ROCK_HARBOR = 0x1943
1045
+ NAVEL_ROCK_ENTRANCE = 0x1944
1046
+ NAVEL_ROCK_B1F = 0x1945
1047
+ NAVEL_ROCK_FORK = 0x1946
1048
+ NAVEL_ROCK_UP1 = 0x1947
1049
+ NAVEL_ROCK_UP2 = 0x1948
1050
+ NAVEL_ROCK_UP3 = 0x1949
1051
+ NAVEL_ROCK_UP4 = 0x194A
1052
+ NAVEL_ROCK_TOP = 0x194B
1053
+ NAVEL_ROCK_DOWN01 = 0x194C
1054
+ NAVEL_ROCK_DOWN02 = 0x194D
1055
+ NAVEL_ROCK_DOWN03 = 0x194E
1056
+ NAVEL_ROCK_DOWN04 = 0x194F
1057
+ NAVEL_ROCK_DOWN05 = 0x1950
1058
+ NAVEL_ROCK_DOWN06 = 0x1951
1059
+ NAVEL_ROCK_DOWN07 = 0x1952
1060
+ NAVEL_ROCK_DOWN08 = 0x1953
1061
+ NAVEL_ROCK_DOWN09 = 0x1954
1062
+ NAVEL_ROCK_DOWN10 = 0x1955
1063
+ NAVEL_ROCK_DOWN11 = 0x1956
1064
+ NAVEL_ROCK_BOTTOM = 0x1957
1065
+ TRAINER_HILL_ELEVATOR = 0x1958
1066
+
1067
+ class Tileset(IntEnum):
1068
+ NONE = 0
1069
+ TOWN = 1
1070
+ CITY = 2
1071
+ ROUTE = 3
1072
+ UNDERGROUND = 4
1073
+ UNDERWATER = 5
1074
+ OCEAN_ROUTE = 6
1075
+ UNKNOWN = 7
1076
+ INDOOR = 8
1077
+ SECRET_BASE = 9
1078
+
1079
+ class StatusCondition(IntFlag):
1080
+ """Status conditions for Pokemon in Emerald"""
1081
+ NONE = 0
1082
+ SLEEP_MASK = 0b111 # Bits 0-2
1083
+ SLEEP = 0b001 # For name display purposes
1084
+ POISON = 0b1000 # Bit 3
1085
+ BURN = 0b10000 # Bit 4
1086
+ FREEZE = 0b100000 # Bit 5
1087
+ PARALYSIS = 0b1000000 # Bit 6
1088
+
1089
+ @property
1090
+ def is_asleep(self) -> bool:
1091
+ """Check if the Pokémon is asleep (any value in bits 0-2)"""
1092
+ return bool(int(self) & 0b111)
1093
+
1094
+ def get_status_name(self) -> str:
1095
+ """Get a human-readable status name"""
1096
+ if self.is_asleep:
1097
+ return "SLEEP"
1098
+ elif self & StatusCondition.PARALYSIS:
1099
+ return "PARALYSIS"
1100
+ elif self & StatusCondition.FREEZE:
1101
+ return "FREEZE"
1102
+ elif self & StatusCondition.BURN:
1103
+ return "BURN"
1104
+ elif self & StatusCondition.POISON:
1105
+ return "POISON"
1106
+ return "OK"
1107
+
1108
+ def _find_map_buffer_addresses(self):
1109
+ """Find the map buffer addresses by scanning for the BackupMapLayout structure"""
1110
+ # The BackupMapLayout structure is in COMMON_DATA (IWRAM) at gBackupMapLayout
1111
+ # We need to find where it's located in memory
1112
+
1113
+ # Try to find the BackupMapLayout by looking for reasonable width/height values
1114
+ # The structure is: s32 width, s32 height, u16 *map
1115
+ for offset in range(0, 0x8000 - 12, 4): # Search in IWRAM (0x03000000)
1116
+ try:
1117
+ # Read width and height (both should be reasonable values)
1118
+ width = (
1119
+ (self.memory[0x03000000 + offset] << 24) |
1120
+ (self.memory[0x03000000 + offset + 1] << 16) |
1121
+ (self.memory[0x03000000 + offset + 2] << 8) |
1122
+ self.memory[0x03000000 + offset + 3]
1123
+ )
1124
+ height = (
1125
+ (self.memory[0x03000000 + offset + 4] << 24) |
1126
+ (self.memory[0x03000000 + offset + 5] << 16) |
1127
+ (self.memory[0x03000000 + offset + 6] << 8) |
1128
+ self.memory[0x03000000 + offset + 7]
1129
+ )
1130
+
1131
+ # Width and height should be reasonable values (typically 15-100)
1132
+ if 10 <= width <= 200 and 10 <= height <= 200:
1133
+ # Read the map pointer (should point to EWRAM)
1134
+ map_ptr = (
1135
+ (self.memory[0x03000000 + offset + 8] << 24) |
1136
+ (self.memory[0x03000000 + offset + 9] << 16) |
1137
+ (self.memory[0x03000000 + offset + 10] << 8) |
1138
+ self.memory[0x03000000 + offset + 11]
1139
+ )
1140
+
1141
+ # Map pointer should be in EWRAM range (0x02000000-0x02040000)
1142
+ if 0x02000000 <= map_ptr <= 0x02040000:
1143
+ self.backup_map_layout_addr = 0x03000000 + offset
1144
+ self.map_buffer_addr = map_ptr
1145
+ self.map_width = width
1146
+ self.map_height = height
1147
+ return True
1148
+ except:
1149
+ continue
1150
+ return False
1151
+
1152
+ def read_current_tile_behavior(self) -> MetatileBehavior:
1153
+ """
1154
+ Reads the metatile behavior at the player's current position.
1155
+ Returns a MetatileBehavior enum value.
1156
+ """
1157
+ if not hasattr(self, 'map_buffer_addr'):
1158
+ if not self._find_map_buffer_addresses():
1159
+ return MetatileBehavior.NORMAL
1160
+
1161
+ # Get player coordinates
1162
+ x, y = self.read_coordinates()
1163
+
1164
+ # The map buffer uses MAP_OFFSET (7) for border tiles
1165
+ # So we need to add MAP_OFFSET to get the correct index
1166
+ map_x = x + 7 # MAP_OFFSET
1167
+ map_y = y + 7 # MAP_OFFSET
1168
+
1169
+ # Calculate index in the map buffer
1170
+ index = map_x + map_y * self.map_width
1171
+
1172
+ # Read the metatile value (16-bit)
1173
+ metatile_addr = self.map_buffer_addr + (index * 2)
1174
+ metatile_value = (
1175
+ (self.memory[metatile_addr + 1] << 8) |
1176
+ self.memory[metatile_addr]
1177
+ )
1178
+
1179
+ # Extract metatile ID (lower 10 bits)
1180
+ metatile_id = metatile_value & 0x03FF
1181
+
1182
+ # Get the behavior from the metatile attributes
1183
+ # This is a simplified approach - in the real game, it would look up
1184
+ # the behavior in the tileset's metatile attributes table
1185
+ # For now, we'll use the metatile ID as a proxy for behavior
1186
+ # (This is not 100% accurate but works for most cases)
1187
+ try:
1188
+ return MetatileBehavior(metatile_id & 0xFF)
1189
+ except ValueError:
1190
+ return MetatileBehavior.NORMAL
1191
+
1192
+ def read_map_metatiles(self, x_start: int = 0, y_start: int = 0, width: int = None, height: int = None) -> list[list[tuple[int, MetatileBehavior]]]:
1193
+ """
1194
+ Read a section of the current map's metatiles.
1195
+
1196
+ Args:
1197
+ x_start: Starting X coordinate (relative to map, not player)
1198
+ y_start: Starting Y coordinate (relative to map, not player)
1199
+ width: Width of area to read (None for full map width)
1200
+ height: Height of area to read (None for full map height)
1201
+
1202
+ Returns:
1203
+ 2D list of (metatile_id, behavior) tuples
1204
+ """
1205
+ if not hasattr(self, 'map_buffer_addr'):
1206
+ if not self._find_map_buffer_addresses():
1207
+ return []
1208
+
1209
+ if width is None:
1210
+ width = self.map_width
1211
+ if height is None:
1212
+ height = self.map_height
1213
+
1214
+ # Clamp to map bounds
1215
+ width = min(width, self.map_width - x_start)
1216
+ height = min(height, self.map_height - y_start)
1217
+
1218
+ metatiles = []
1219
+
1220
+ for y in range(y_start, y_start + height):
1221
+ row = []
1222
+ for x in range(x_start, x_start + width):
1223
+ # Calculate index in the map buffer
1224
+ index = x + y * self.map_width
1225
+
1226
+ # Read the metatile value (16-bit)
1227
+ metatile_addr = self.map_buffer_addr + (index * 2)
1228
+ metatile_value = (
1229
+ (self.memory[metatile_addr + 1] << 8) |
1230
+ self.memory[metatile_addr]
1231
+ )
1232
+
1233
+ # Extract metatile ID (lower 10 bits)
1234
+ metatile_id = metatile_value & 0x03FF
1235
+
1236
+ # Extract collision (bits 10-11)
1237
+ collision = (metatile_value & 0x0C00) >> 10
1238
+
1239
+ # Extract elevation (bits 12-15)
1240
+ elevation = (metatile_value & 0xF000) >> 12
1241
+
1242
+ # Get behavior (simplified - using metatile ID as proxy)
1243
+ try:
1244
+ behavior = MetatileBehavior(metatile_id & 0xFF)
1245
+ except ValueError:
1246
+ behavior = MetatileBehavior.NORMAL
1247
+
1248
+ row.append((metatile_id, behavior))
1249
+ metatiles.append(row)
1250
+
1251
+ return metatiles
1252
+
1253
+ def read_map_around_player(self, radius: int = 7) -> list[list[tuple[int, MetatileBehavior]]]:
1254
+ """
1255
+ Read the map area around the player.
1256
+
1257
+ Args:
1258
+ radius: How many tiles in each direction to read
1259
+
1260
+ Returns:
1261
+ 2D list of (metatile_id, behavior) tuples centered on player
1262
+ """
1263
+ if not hasattr(self, 'map_buffer_addr'):
1264
+ if not self._find_map_buffer_addresses():
1265
+ return []
1266
+
1267
+ # Get player coordinates
1268
+ player_x, player_y = self.read_coordinates()
1269
+
1270
+ # Calculate the area to read (with MAP_OFFSET adjustment)
1271
+ map_x = player_x + 7 # MAP_OFFSET
1272
+ map_y = player_y + 7 # MAP_OFFSET
1273
+
1274
+ x_start = max(0, map_x - radius)
1275
+ y_start = max(0, map_y - radius)
1276
+ x_end = min(self.map_width, map_x + radius + 1)
1277
+ y_end = min(self.map_height, map_y + radius + 1)
1278
+
1279
+ width = x_end - x_start
1280
+ height = y_end - y_start
1281
+
1282
+ return self.read_map_metatiles(x_start, y_start, width, height)
1283
+
1284
+ def get_metatile_info_at(self, x: int, y: int) -> dict:
1285
+ """
1286
+ Get detailed information about a metatile at the given coordinates.
1287
+
1288
+ Args:
1289
+ x: X coordinate (relative to player's position)
1290
+ y: Y coordinate (relative to player's position)
1291
+
1292
+ Returns:
1293
+ Dictionary with metatile information
1294
+ """
1295
+ if not hasattr(self, 'map_buffer_addr'):
1296
+ if not self._find_map_buffer_addresses():
1297
+ return {}
1298
+
1299
+ # Get player coordinates
1300
+ player_x, player_y = self.read_coordinates()
1301
+
1302
+ # Calculate absolute map coordinates
1303
+ map_x = player_x + 7 + x # MAP_OFFSET + relative position
1304
+ map_y = player_y + 7 + y # MAP_OFFSET + relative position
1305
+
1306
+ # Check bounds
1307
+ if not (0 <= map_x < self.map_width and 0 <= map_y < self.map_height):
1308
+ return {}
1309
+
1310
+ # Calculate index in the map buffer
1311
+ index = map_x + map_y * self.map_width
1312
+
1313
+ # Read the metatile value (16-bit)
1314
+ metatile_addr = self.map_buffer_addr + (index * 2)
1315
+ metatile_value = (
1316
+ (self.memory[metatile_addr + 1] << 8) |
1317
+ self.memory[metatile_addr]
1318
+ )
1319
+
1320
+ # Extract components
1321
+ metatile_id = metatile_value & 0x03FF
1322
+ collision = (metatile_value & 0x0C00) >> 10
1323
+ elevation = (metatile_value & 0xF000) >> 12
1324
+
1325
+ # Get behavior
1326
+ try:
1327
+ behavior = MetatileBehavior(metatile_id & 0xFF)
1328
+ except ValueError:
1329
+ behavior = MetatileBehavior.NORMAL
1330
+
1331
+ return {
1332
+ 'metatile_id': metatile_id,
1333
+ 'behavior': behavior,
1334
+ 'behavior_name': behavior.name,
1335
+ 'collision': collision,
1336
+ 'elevation': elevation,
1337
+ 'raw_value': metatile_value,
1338
+ 'map_x': map_x,
1339
+ 'map_y': map_y,
1340
+ 'relative_x': x,
1341
+ 'relative_y': y
1342
+ }
1343
+
1344
+ def is_tile_passable(self, x: int, y: int) -> bool:
1345
+ """
1346
+ Check if a tile at the given coordinates is passable.
1347
+
1348
+ Args:
1349
+ x: X coordinate (relative to player's position)
1350
+ y: Y coordinate (relative to player's position)
1351
+
1352
+ Returns:
1353
+ True if the tile is passable, False otherwise
1354
+ """
1355
+ info = self.get_metatile_info_at(x, y)
1356
+ if not info:
1357
+ return False
1358
+
1359
+ # Check collision value (0 = passable, 1-3 = impassable)
1360
+ return info['collision'] == 0
1361
+
1362
+ def is_tile_encounter_tile(self, x: int, y: int) -> bool:
1363
+ """
1364
+ Check if a tile can trigger wild encounters.
1365
+
1366
+ Args:
1367
+ x: X coordinate (relative to player's position)
1368
+ y: Y coordinate (relative to player's position)
1369
+
1370
+ Returns:
1371
+ True if the tile can trigger encounters, False otherwise
1372
+ """
1373
+ info = self.get_metatile_info_at(x, y)
1374
+ if not info:
1375
+ return False
1376
+
1377
+ behavior = info['behavior']
1378
+
1379
+ # Check for encounter tiles based on behavior
1380
+ encounter_behaviors = {
1381
+ MetatileBehavior.TALL_GRASS,
1382
+ MetatileBehavior.LONG_GRASS,
1383
+ MetatileBehavior.UNUSED_05,
1384
+ MetatileBehavior.DEEP_SAND,
1385
+ MetatileBehavior.CAVE,
1386
+ MetatileBehavior.INDOOR_ENCOUNTER,
1387
+ MetatileBehavior.POND_WATER,
1388
+ MetatileBehavior.INTERIOR_DEEP_WATER,
1389
+ MetatileBehavior.DEEP_WATER,
1390
+ MetatileBehavior.OCEAN_WATER,
1391
+ MetatileBehavior.SEAWEED,
1392
+ MetatileBehavior.ASHGRASS,
1393
+ MetatileBehavior.FOOTPRINTS,
1394
+ MetatileBehavior.SEAWEED_NO_SURFACING
1395
+ }
1396
+
1397
+ return behavior in encounter_behaviors
1398
+
1399
+ def is_tile_surfable(self, x: int, y: int) -> bool:
1400
+ """
1401
+ Check if a tile can be surfed on.
1402
+
1403
+ Args:
1404
+ x: X coordinate (relative to player's position)
1405
+ y: Y coordinate (relative to player's position)
1406
+
1407
+ Returns:
1408
+ True if the tile can be surfed, False otherwise
1409
+ """
1410
+ info = self.get_metatile_info_at(x, y)
1411
+ if not info:
1412
+ return False
1413
+
1414
+ behavior = info['behavior']
1415
+
1416
+ # Check for surfable tiles based on behavior
1417
+ surfable_behaviors = {
1418
+ MetatileBehavior.POND_WATER,
1419
+ MetatileBehavior.INTERIOR_DEEP_WATER,
1420
+ MetatileBehavior.DEEP_WATER,
1421
+ MetatileBehavior.SOOTOPOLIS_DEEP_WATER,
1422
+ MetatileBehavior.OCEAN_WATER,
1423
+ MetatileBehavior.NO_SURFACING,
1424
+ MetatileBehavior.SEAWEED,
1425
+ MetatileBehavior.SEAWEED_NO_SURFACING
1426
+ }
1427
+
1428
+ return behavior in surfable_behaviors