kaggle-environments 0.2.0__py3-none-any.whl → 1.20.0__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.

Potentially problematic release.


This version of kaggle-environments might be problematic. Click here for more details.

Files changed (215) hide show
  1. kaggle_environments/__init__.py +49 -13
  2. kaggle_environments/agent.py +177 -124
  3. kaggle_environments/api.py +31 -0
  4. kaggle_environments/core.py +298 -173
  5. kaggle_environments/envs/cabt/cabt.js +164 -0
  6. kaggle_environments/envs/cabt/cabt.json +28 -0
  7. kaggle_environments/envs/cabt/cabt.py +186 -0
  8. kaggle_environments/envs/cabt/cg/__init__.py +0 -0
  9. kaggle_environments/envs/cabt/cg/cg.dll +0 -0
  10. kaggle_environments/envs/cabt/cg/game.py +75 -0
  11. kaggle_environments/envs/cabt/cg/libcg.so +0 -0
  12. kaggle_environments/envs/cabt/cg/sim.py +48 -0
  13. kaggle_environments/envs/cabt/test_cabt.py +120 -0
  14. kaggle_environments/envs/chess/chess.js +4289 -0
  15. kaggle_environments/envs/chess/chess.json +60 -0
  16. kaggle_environments/envs/chess/chess.py +4241 -0
  17. kaggle_environments/envs/chess/test_chess.py +60 -0
  18. kaggle_environments/envs/connectx/connectx.ipynb +3186 -0
  19. kaggle_environments/envs/connectx/connectx.js +1 -1
  20. kaggle_environments/envs/connectx/connectx.json +15 -1
  21. kaggle_environments/envs/connectx/connectx.py +6 -23
  22. kaggle_environments/envs/connectx/test_connectx.py +70 -24
  23. kaggle_environments/envs/football/football.ipynb +75 -0
  24. kaggle_environments/envs/football/football.json +91 -0
  25. kaggle_environments/envs/football/football.py +277 -0
  26. kaggle_environments/envs/football/helpers.py +95 -0
  27. kaggle_environments/envs/football/test_football.py +360 -0
  28. kaggle_environments/envs/halite/__init__.py +0 -0
  29. kaggle_environments/envs/halite/halite.ipynb +44741 -0
  30. kaggle_environments/envs/halite/halite.js +199 -83
  31. kaggle_environments/envs/halite/halite.json +31 -18
  32. kaggle_environments/envs/halite/halite.py +164 -303
  33. kaggle_environments/envs/halite/helpers.py +720 -0
  34. kaggle_environments/envs/halite/test_halite.py +190 -0
  35. kaggle_environments/envs/hungry_geese/__init__.py +0 -0
  36. kaggle_environments/envs/{battlegeese/battlegeese.js → hungry_geese/hungry_geese.js} +38 -22
  37. kaggle_environments/envs/{battlegeese/battlegeese.json → hungry_geese/hungry_geese.json} +22 -15
  38. kaggle_environments/envs/hungry_geese/hungry_geese.py +316 -0
  39. kaggle_environments/envs/hungry_geese/test_hungry_geese.py +0 -0
  40. kaggle_environments/envs/identity/identity.json +6 -5
  41. kaggle_environments/envs/identity/identity.py +15 -2
  42. kaggle_environments/envs/kore_fleets/__init__.py +0 -0
  43. kaggle_environments/envs/kore_fleets/helpers.py +1005 -0
  44. kaggle_environments/envs/kore_fleets/kore_fleets.ipynb +114 -0
  45. kaggle_environments/envs/kore_fleets/kore_fleets.js +658 -0
  46. kaggle_environments/envs/kore_fleets/kore_fleets.json +164 -0
  47. kaggle_environments/envs/kore_fleets/kore_fleets.py +555 -0
  48. kaggle_environments/envs/kore_fleets/starter_bots/java/Bot.java +54 -0
  49. kaggle_environments/envs/kore_fleets/starter_bots/java/README.md +26 -0
  50. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/hamcrest-core-1.3.jar +0 -0
  51. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/junit-4.13.2.jar +0 -0
  52. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Board.java +518 -0
  53. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Cell.java +61 -0
  54. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Configuration.java +24 -0
  55. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Direction.java +166 -0
  56. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Fleet.java +72 -0
  57. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/KoreJson.java +97 -0
  58. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Observation.java +72 -0
  59. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Pair.java +13 -0
  60. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Player.java +68 -0
  61. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Point.java +65 -0
  62. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Shipyard.java +70 -0
  63. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/ShipyardAction.java +59 -0
  64. kaggle_environments/envs/kore_fleets/starter_bots/java/main.py +73 -0
  65. kaggle_environments/envs/kore_fleets/starter_bots/java/test/BoardTest.java +567 -0
  66. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ConfigurationTest.java +25 -0
  67. kaggle_environments/envs/kore_fleets/starter_bots/java/test/KoreJsonTest.java +62 -0
  68. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ObservationTest.java +46 -0
  69. kaggle_environments/envs/kore_fleets/starter_bots/java/test/PointTest.java +21 -0
  70. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ShipyardTest.java +22 -0
  71. kaggle_environments/envs/kore_fleets/starter_bots/java/test/configuration.json +1 -0
  72. kaggle_environments/envs/kore_fleets/starter_bots/java/test/fullob.json +1 -0
  73. kaggle_environments/envs/kore_fleets/starter_bots/java/test/observation.json +1 -0
  74. kaggle_environments/envs/kore_fleets/starter_bots/python/__init__.py +0 -0
  75. kaggle_environments/envs/kore_fleets/starter_bots/python/main.py +27 -0
  76. kaggle_environments/envs/kore_fleets/starter_bots/ts/Bot.ts +34 -0
  77. kaggle_environments/envs/kore_fleets/starter_bots/ts/DoNothingBot.ts +12 -0
  78. kaggle_environments/envs/kore_fleets/starter_bots/ts/MinerBot.ts +62 -0
  79. kaggle_environments/envs/kore_fleets/starter_bots/ts/README.md +55 -0
  80. kaggle_environments/envs/kore_fleets/starter_bots/ts/interpreter.ts +402 -0
  81. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Board.ts +514 -0
  82. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Cell.ts +63 -0
  83. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Configuration.ts +25 -0
  84. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Direction.ts +169 -0
  85. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Fleet.ts +76 -0
  86. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/KoreIO.ts +70 -0
  87. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Observation.ts +45 -0
  88. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Pair.ts +11 -0
  89. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Player.ts +68 -0
  90. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Point.ts +65 -0
  91. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Shipyard.ts +72 -0
  92. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/ShipyardAction.ts +58 -0
  93. kaggle_environments/envs/kore_fleets/starter_bots/ts/main.py +73 -0
  94. kaggle_environments/envs/kore_fleets/starter_bots/ts/miner.py +73 -0
  95. kaggle_environments/envs/kore_fleets/starter_bots/ts/package.json +23 -0
  96. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/BoardTest.ts +551 -0
  97. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ConfigurationTest.ts +16 -0
  98. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ObservationTest.ts +33 -0
  99. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/PointTest.ts +17 -0
  100. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ShipyardTest.ts +18 -0
  101. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/configuration.json +1 -0
  102. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/fullob.json +1 -0
  103. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json +1 -0
  104. kaggle_environments/envs/kore_fleets/starter_bots/ts/tsconfig.json +22 -0
  105. kaggle_environments/envs/kore_fleets/test_kore_fleets.py +331 -0
  106. kaggle_environments/envs/lux_ai_2021/README.md +3 -0
  107. kaggle_environments/envs/lux_ai_2021/__init__.py +0 -0
  108. kaggle_environments/envs/lux_ai_2021/agents.py +11 -0
  109. kaggle_environments/envs/lux_ai_2021/dimensions/754.js +2 -0
  110. kaggle_environments/envs/lux_ai_2021/dimensions/754.js.LICENSE.txt +296 -0
  111. kaggle_environments/envs/lux_ai_2021/dimensions/main.js +1 -0
  112. kaggle_environments/envs/lux_ai_2021/index.html +43 -0
  113. kaggle_environments/envs/lux_ai_2021/lux_ai_2021.json +100 -0
  114. kaggle_environments/envs/lux_ai_2021/lux_ai_2021.py +231 -0
  115. kaggle_environments/envs/lux_ai_2021/test_agents/__init__.py +0 -0
  116. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.js +6 -0
  117. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.json +59 -0
  118. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_objects.js +145 -0
  119. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/io.js +14 -0
  120. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/kit.js +209 -0
  121. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/map.js +107 -0
  122. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/parser.js +79 -0
  123. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.js +88 -0
  124. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.py +75 -0
  125. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/simple.tar.gz +0 -0
  126. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/__init__.py +0 -0
  127. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/annotate.py +20 -0
  128. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/constants.py +25 -0
  129. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game.py +86 -0
  130. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.json +59 -0
  131. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.py +7 -0
  132. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_map.py +106 -0
  133. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_objects.py +154 -0
  134. kaggle_environments/envs/lux_ai_2021/test_agents/python/random_agent.py +38 -0
  135. kaggle_environments/envs/lux_ai_2021/test_agents/python/simple_agent.py +82 -0
  136. kaggle_environments/envs/lux_ai_2021/test_lux.py +19 -0
  137. kaggle_environments/envs/lux_ai_2021/testing.md +23 -0
  138. kaggle_environments/envs/lux_ai_2021/todo.md.og +18 -0
  139. kaggle_environments/envs/lux_ai_s3/README.md +21 -0
  140. kaggle_environments/envs/lux_ai_s3/agents.py +5 -0
  141. kaggle_environments/envs/lux_ai_s3/index.html +42 -0
  142. kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json +47 -0
  143. kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py +178 -0
  144. kaggle_environments/envs/lux_ai_s3/luxai_s3/__init__.py +1 -0
  145. kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +819 -0
  146. kaggle_environments/envs/lux_ai_s3/luxai_s3/globals.py +9 -0
  147. kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py +101 -0
  148. kaggle_environments/envs/lux_ai_s3/luxai_s3/profiler.py +141 -0
  149. kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py +222 -0
  150. kaggle_environments/envs/lux_ai_s3/luxai_s3/spaces.py +27 -0
  151. kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py +464 -0
  152. kaggle_environments/envs/lux_ai_s3/luxai_s3/utils.py +12 -0
  153. kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py +156 -0
  154. kaggle_environments/envs/lux_ai_s3/test_agents/python/agent.py +78 -0
  155. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/__init__.py +0 -0
  156. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/kit.py +31 -0
  157. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/utils.py +17 -0
  158. kaggle_environments/envs/lux_ai_s3/test_agents/python/main.py +66 -0
  159. kaggle_environments/envs/lux_ai_s3/test_lux.py +9 -0
  160. kaggle_environments/envs/mab/__init__.py +0 -0
  161. kaggle_environments/envs/mab/agents.py +12 -0
  162. kaggle_environments/envs/mab/mab.js +100 -0
  163. kaggle_environments/envs/mab/mab.json +74 -0
  164. kaggle_environments/envs/mab/mab.py +146 -0
  165. kaggle_environments/envs/open_spiel/__init__.py +0 -0
  166. kaggle_environments/envs/open_spiel/games/__init__.py +0 -0
  167. kaggle_environments/envs/open_spiel/games/chess/chess.js +441 -0
  168. kaggle_environments/envs/open_spiel/games/chess/image_config.jsonl +20 -0
  169. kaggle_environments/envs/open_spiel/games/chess/openings.jsonl +20 -0
  170. kaggle_environments/envs/open_spiel/games/connect_four/__init__.py +0 -0
  171. kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js +284 -0
  172. kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py +86 -0
  173. kaggle_environments/envs/open_spiel/games/go/__init__.py +0 -0
  174. kaggle_environments/envs/open_spiel/games/go/go.js +481 -0
  175. kaggle_environments/envs/open_spiel/games/go/go_proxy.py +99 -0
  176. kaggle_environments/envs/open_spiel/games/tic_tac_toe/__init__.py +0 -0
  177. kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe.js +345 -0
  178. kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe_proxy.py +98 -0
  179. kaggle_environments/envs/open_spiel/games/universal_poker/__init__.py +0 -0
  180. kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker.js +431 -0
  181. kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker_proxy.py +159 -0
  182. kaggle_environments/envs/open_spiel/html_playthrough_generator.py +31 -0
  183. kaggle_environments/envs/open_spiel/observation.py +128 -0
  184. kaggle_environments/envs/open_spiel/open_spiel.py +565 -0
  185. kaggle_environments/envs/open_spiel/proxy.py +138 -0
  186. kaggle_environments/envs/open_spiel/test_open_spiel.py +191 -0
  187. kaggle_environments/envs/rps/__init__.py +0 -0
  188. kaggle_environments/envs/rps/agents.py +84 -0
  189. kaggle_environments/envs/rps/helpers.py +25 -0
  190. kaggle_environments/envs/rps/rps.js +117 -0
  191. kaggle_environments/envs/rps/rps.json +63 -0
  192. kaggle_environments/envs/rps/rps.py +90 -0
  193. kaggle_environments/envs/rps/test_rps.py +110 -0
  194. kaggle_environments/envs/rps/utils.py +7 -0
  195. kaggle_environments/envs/tictactoe/test_tictactoe.py +43 -77
  196. kaggle_environments/envs/tictactoe/tictactoe.ipynb +1397 -0
  197. kaggle_environments/envs/tictactoe/tictactoe.json +10 -2
  198. kaggle_environments/envs/tictactoe/tictactoe.py +1 -1
  199. kaggle_environments/errors.py +2 -4
  200. kaggle_environments/helpers.py +377 -0
  201. kaggle_environments/main.py +214 -50
  202. kaggle_environments/schemas.json +23 -18
  203. kaggle_environments/static/player.html +206 -74
  204. kaggle_environments/utils.py +46 -73
  205. kaggle_environments-1.20.0.dist-info/METADATA +25 -0
  206. kaggle_environments-1.20.0.dist-info/RECORD +211 -0
  207. {kaggle_environments-0.2.0.dist-info → kaggle_environments-1.20.0.dist-info}/WHEEL +1 -2
  208. kaggle_environments-1.20.0.dist-info/entry_points.txt +3 -0
  209. kaggle_environments/envs/battlegeese/battlegeese.py +0 -219
  210. kaggle_environments/temp.py +0 -14
  211. kaggle_environments-0.2.0.dist-info/METADATA +0 -393
  212. kaggle_environments-0.2.0.dist-info/RECORD +0 -33
  213. kaggle_environments-0.2.0.dist-info/entry_points.txt +0 -3
  214. kaggle_environments-0.2.0.dist-info/top_level.txt +0 -1
  215. {kaggle_environments-0.2.0.dist-info → kaggle_environments-1.20.0.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "CommonJS",
4
+ "lib": ["esnext"],
5
+ "target": "es5",
6
+ "moduleResolution": "node",
7
+ "experimentalDecorators": true,
8
+ "emitDecoratorMetadata": true,
9
+ "esModuleInterop": true,
10
+ "sourceMap": true,
11
+ "declaration": true,
12
+ "resolveJsonModule": true,
13
+ "outDir": "dist"
14
+ },
15
+ "include": [
16
+ "**/*.ts"
17
+ ],
18
+ "exclude": [
19
+ "node_modules",
20
+ "dist"
21
+ ]
22
+ }
@@ -0,0 +1,331 @@
1
+ from kaggle_environments import make
2
+
3
+ from .helpers import *
4
+
5
+
6
+ def test_shipyard_action_class_serialization():
7
+ launch = ShipyardAction.launch_fleet_in_direction(10, Direction.NORTH)
8
+ assert str(launch) == "LAUNCH_10_N", "Launch: " + str(launch)
9
+
10
+ parsed = ShipyardAction.from_str(str(launch))
11
+ assert launch.action_type == parsed.action_type, "type"
12
+ assert launch.num_ships == parsed.num_ships, "num_ships"
13
+ assert launch.flight_plan == parsed.flight_plan, "flight_plan"
14
+
15
+ spawn = ShipyardAction.spawn_ships(1)
16
+ assert str(spawn) == "SPAWN_1", "Spawn: " + str(launch)
17
+
18
+ parsed = ShipyardAction.from_str(str(spawn))
19
+ assert spawn.action_type == parsed.action_type, "type"
20
+ assert spawn.num_ships == parsed.num_ships, "num_ships"
21
+
22
+
23
+ def test_kore_no_repeated_steps():
24
+ step_count = 10
25
+ actual_steps = []
26
+
27
+ def step_appender_agent(obs, config):
28
+ actual_steps.append(obs.step)
29
+ return {}
30
+
31
+ env = make("kore_fleets", configuration={"episodeSteps": step_count}, debug=True)
32
+ env.run([step_appender_agent])
33
+ assert actual_steps == list(range(step_count - 1))
34
+
35
+
36
+ def test_kore_helpers():
37
+ env = make("kore_fleets", configuration={"size": 5, "episodeSteps": 100}, debug=True)
38
+
39
+ @board_agent
40
+ def helper_agent(board):
41
+ for shipyard in board.current_player.shipyards:
42
+ if shipyard.ship_count >= 10:
43
+ shipyard.next_action = ShipyardAction.launch_fleet_in_direction(10, Direction.NORTH)
44
+ else:
45
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
46
+
47
+ env.run([helper_agent, helper_agent])
48
+
49
+ json = env.toJSON()
50
+ assert json["name"] == "kore_fleets"
51
+ assert json["statuses"] == ["DONE", "DONE"]
52
+
53
+
54
+ def test_start_with_one_shipyard_and_no_fleets():
55
+ env = make("kore_fleets", configuration={"size": 3, "startingKore": 100, "randomSeed": 0})
56
+ obs = env.reset(2)[0].observation
57
+ players = obs.get("players")
58
+ assert len(players) == 2
59
+ assert len(players[0][1].items()) == 1
60
+ assert len(players[0][2].items()) == 0
61
+
62
+
63
+ def test_shipyards_make_ships():
64
+ board = create_board()
65
+ for shipyard in board.shipyards.values():
66
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
67
+
68
+ board = board.next()
69
+
70
+ for shipyard in board.shipyards.values():
71
+ assert shipyard.ship_count == 1, "Should have spawned a ship"
72
+
73
+
74
+ def test_shipyards_launch_fleet():
75
+ board = create_board()
76
+ for shipyard in board.shipyards.values():
77
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
78
+
79
+ board = board.next()
80
+
81
+ for shipyard in board.shipyards.values():
82
+ shipyard.next_action = ShipyardAction.launch_fleet_in_direction(1, Direction.NORTH)
83
+
84
+ board = board.next()
85
+
86
+ assert len(board.current_player.fleets) == 1, "should have one fleet"
87
+
88
+
89
+ def test_flight_plan_truncated():
90
+ board = create_board()
91
+ for shipyard in board.shipyards.values():
92
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
93
+
94
+ board = board.next()
95
+
96
+ for shipyard in board.shipyards.values():
97
+ shipyard.next_action = ShipyardAction.launch_fleet_with_flight_plan(1, "NESW")
98
+
99
+ board = board.next()
100
+
101
+ assert len(board.current_player.fleets) == 1, "should have one fleet"
102
+ print(board.current_player.fleets[0].flight_plan)
103
+ assert board.current_player.fleets[0].flight_plan == "", "should have an empty flight plan"
104
+
105
+
106
+ def test_fleets_launched_with_direction():
107
+ board = create_board()
108
+ for shipyard in board.shipyards.values():
109
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
110
+
111
+ board = board.next()
112
+
113
+ for shipyard in board.shipyards.values():
114
+ shipyard.next_action = ShipyardAction.launch_fleet_in_direction(1, Direction.NORTH)
115
+
116
+ board = board.next()
117
+
118
+ assert len(board.current_player.fleets) == 1, "should have one fleet"
119
+ assert board.current_player.fleets[0].direction == Direction.NORTH, "should go NORTH"
120
+
121
+
122
+ def test_fleets_move_in_direction():
123
+ board = create_board(size=10)
124
+ for shipyard in board.shipyards.values():
125
+ shipyard.next_action = ShipyardAction.spawn_ships(1)
126
+
127
+ print("board.next()")
128
+ board = board.next()
129
+
130
+ for shipyard in board.shipyards.values():
131
+ shipyard.next_action = ShipyardAction.launch_fleet_in_direction(1, Direction.NORTH)
132
+
133
+ for fleet in board.fleets.values():
134
+ print(fleet.id, fleet.direction, fleet.position)
135
+
136
+ board = board.next()
137
+
138
+ for fleet in board.fleets.values():
139
+ print(fleet.id, fleet.direction, fleet.position)
140
+
141
+ positions = {fleet.id: fleet.position for fleet in board.fleets.values()}
142
+
143
+ board = board.next()
144
+
145
+ new_positions = {fleet.id: fleet.position for fleet in board.fleets.values()}
146
+
147
+ assert len(positions) == 2 and len(positions) == len(new_positions), "there should be two fleets"
148
+
149
+ for key in positions.keys():
150
+ assert positions.get(key) + Direction.NORTH.to_point() == new_positions.get(key)
151
+
152
+
153
+ def test_kore_regenerates():
154
+ board = create_board(size=31)
155
+
156
+ p = Point(10, 10)
157
+
158
+ board.get_cell_at_point(p)._kore = 100
159
+
160
+ next_board = board.next()
161
+
162
+ assert board.get_cell_at_point(p).kore < next_board.get_cell_at_point(p).kore, "should have regenerated kore"
163
+
164
+
165
+ def test_spawn_zero_has_no_effect():
166
+ board = create_board(size=31)
167
+
168
+ shipyard_id = board.players[0].shipyard_ids[0]
169
+ shipyard = board.shipyards.get(shipyard_id)
170
+
171
+ shipyard.next_action = ShipyardAction.spawn_ships(0)
172
+
173
+ next_board = board.next()
174
+ next_shipyard = next_board.shipyards.get(shipyard_id)
175
+
176
+ assert shipyard.ship_count == 0, "should have 0 ships"
177
+ assert next_shipyard.ship_count == 0, "should not have spawned a ship"
178
+ assert board.players[0].kore == next_board.players[0].kore, "kore should be the same"
179
+
180
+
181
+ def test_fleet_coalescence_works():
182
+ board = create_board(size=31)
183
+
184
+ p = Point(10, 10)
185
+
186
+ f1 = Fleet("f1", 100, Direction.SOUTH, p + Direction.NORTH.to_point(), 100, "", 0, board)
187
+ board._add_fleet(f1)
188
+ f2 = Fleet("f2", 60, Direction.NORTH, p + Direction.SOUTH.to_point(), 100, "", 0, board)
189
+ board._add_fleet(f2)
190
+ f3 = Fleet("f3", 60, Direction.WEST, p + Direction.EAST.to_point(), 100, "", 0, board)
191
+ board._add_fleet(f3)
192
+
193
+ next_board = board.next()
194
+
195
+ next_fleet = next_board.get_fleet_at_point(p)
196
+ assert next_fleet.id == "f1", "biggest fleet should absord others"
197
+
198
+
199
+ def test_fleets_pick_up_kore():
200
+ board = create_board(size=31)
201
+
202
+ p = Point(10, 10)
203
+ board.get_cell_at_point(p)._kore = 100
204
+ board.get_cell_at_point(p + Direction.SOUTH.to_point())._kore = 100
205
+
206
+ fleet = Fleet("test", 100, Direction.SOUTH, p, 100, "8N", 0, board)
207
+
208
+ board._add_fleet(fleet)
209
+
210
+ next_board = board.next()
211
+
212
+ next_fleet = next_board.get_fleet_at_point(p + Direction.SOUTH.to_point())
213
+ assert next_fleet.kore > fleet.kore, "ships should pick up kore"
214
+
215
+
216
+ def test_updates_flight_plan_decrements():
217
+ board = create_board(size=31)
218
+
219
+ p = Point(10, 11)
220
+ f = Fleet("test", 10, Direction.SOUTH, p, 100, "8N", 0, board)
221
+
222
+ board._add_fleet(f)
223
+
224
+ next_board = board.next()
225
+ next_fleet = next_board.get_fleet_at_point(p + Direction.SOUTH.to_point())
226
+ assert Direction.SOUTH.to_char() == next_fleet.direction.to_char(), "should not change direction"
227
+ assert "7N" == next_fleet.flight_plan, "should update flight plan"
228
+
229
+
230
+ def test_updates_flight_plan_changes_direction():
231
+ board = create_board(size=31)
232
+
233
+ p = Point(10, 11)
234
+ f = Fleet("test", 10, Direction.NORTH, p, 100, "S", 0, board)
235
+
236
+ board._add_fleet(f)
237
+
238
+ next_board = board.next()
239
+ next_fleet = next_board.get_fleet_at_point(p + Direction.SOUTH.to_point())
240
+ assert Direction.SOUTH.to_char() == next_fleet.direction.to_char(), "should change direction"
241
+ assert "" == next_fleet.flight_plan, "should update flight plan"
242
+
243
+
244
+ def test_updates_flight_plan_converts_to_shipyard():
245
+ board = create_board(size=31)
246
+
247
+ p = Point(10, 11)
248
+ f = Fleet("test", 100, Direction.NORTH, p, 100, "C", 0, board)
249
+
250
+ board._add_fleet(f)
251
+
252
+ next_board = board.next()
253
+ shipyard = next_board.get_shipyard_at_point(p)
254
+ assert shipyard is not None, "should have built a shipyard"
255
+ assert shipyard.player_id == f.player_id, "should belong to the player"
256
+ assert shipyard.ship_count == 50, "should have the right number of ships"
257
+
258
+
259
+ def test_adjacent_combat_dumps_all_kore_when_both_die():
260
+ board = create_board(size=31)
261
+
262
+ p1 = Point(10, 11)
263
+ f1 = Fleet("f1", 100, Direction.NORTH, p1, 100, "", 0, board)
264
+ p1_kore = board.cells.get(p1 + Direction.NORTH.to_point()).kore
265
+ board._add_fleet(f1)
266
+
267
+ p2 = p1 + Direction.NORTH.to_point() + Direction.NORTH.to_point() + Direction.EAST.to_point()
268
+ f2 = Fleet("f2", 100, Direction.SOUTH, p2, 100, "", 1, board)
269
+ board._add_fleet(f2)
270
+
271
+ next_board = board.next()
272
+ f1_next = next_board.fleets.get("f1")
273
+ p1_kore_next = next_board.cells.get(p1 + Direction.NORTH.to_point()).kore
274
+ assert f1_next is None, "should have been destroyed"
275
+ assert p1_kore + 100 < p1_kore_next, "should dump all kore"
276
+
277
+
278
+ def test_adjacent_combat_dumps_half_kore_when_one_dies():
279
+ board = create_board(size=31)
280
+
281
+ p1 = Point(10, 11)
282
+ f1 = Fleet("f1", 50, Direction.NORTH, p1, 100, "", 0, board)
283
+ p1_kore = board.cells.get(p1 + Direction.NORTH.to_point()).kore
284
+ board._add_fleet(f1)
285
+
286
+ p2 = p1 + Direction.NORTH.to_point() + Direction.NORTH.to_point() + Direction.EAST.to_point()
287
+ f2 = Fleet("f2", 100, Direction.SOUTH, p2, 100, "", 1, board)
288
+ board._add_fleet(f2)
289
+
290
+ next_board = board.next()
291
+ f1_next = next_board.fleets.get("f1")
292
+ p1_kore_next = next_board.cells.get(p1 + Direction.NORTH.to_point()).kore
293
+ assert f1_next is None, "should have been destroyed"
294
+ assert p1_kore + 50 < p1_kore_next and p1_kore + 55 > p1_kore_next, "should dump half kore"
295
+
296
+ f2_next = next_board.fleets.get("f2")
297
+ assert f2.kore + 50 <= f2_next.kore and f2.kore + 55 > f2_next.kore, "Should have picked up half"
298
+
299
+
300
+ def test_updates_flight_plan_does_not_convert_if_not_enough_ships():
301
+ board = create_board(size=31)
302
+
303
+ p = Point(10, 11)
304
+ f = Fleet("test", 10, Direction.NORTH, p, 100, "C", 0, board)
305
+
306
+ board._add_fleet(f)
307
+
308
+ next_board = board.next()
309
+ assert board.get_shipyard_at_point(p) is None, "Should not have made a shipyard"
310
+ next_fleet = next_board.get_fleet_at_point(p + Direction.NORTH.to_point())
311
+ assert next_fleet is not None, "should have kept going"
312
+ assert f.id == next_fleet.id, "should have the same id"
313
+ assert "" == next_fleet.flight_plan, "should update flight plan"
314
+
315
+
316
+ def test_updates_flight_plan_works_with_two_converts():
317
+ board = create_board(size=31)
318
+
319
+ p = Point(10, 11)
320
+ f = Fleet("test", 10, Direction.NORTH, p, 100, "SCCN", 0, board)
321
+
322
+ board._add_fleet(f)
323
+
324
+ board = board.next()
325
+ board = board.next()
326
+ board = board.next()
327
+
328
+
329
+ def create_board(size=21, starting_kore=100, agent_count=2, random_seed=0):
330
+ env = make("kore_fleets", configuration={"size": size, "startingKore": starting_kore, "randomSeed": random_seed})
331
+ return Board(env.reset(agent_count)[0].observation, env.configuration)
@@ -0,0 +1,3 @@
1
+ # Lux AI Challenge Season 1
2
+
3
+ Welcome to the Kaggle Environments wrapped around the Lux AI Challenge Season 1! For more information or if you have an issues or want to make contributes, check out the main repository at https://github.com/Lux-AI-Challenge/Lux-Design-2021
File without changes
@@ -0,0 +1,11 @@
1
+ from kaggle_environments.envs.lux_ai_2021.test_agents.python.random_agent import random_agent
2
+
3
+ from .test_agents.js_simple.main import js_agent as js_simple_agent
4
+ from .test_agents.python.random_agent import random_agent
5
+ from .test_agents.python.simple_agent import agent as simple_agent
6
+
7
+ agents = {
8
+ "random_agent": random_agent,
9
+ "simple_agent": simple_agent,
10
+ "js_simple_agent": js_simple_agent,
11
+ }