kaggle-environments 0.2.1__py3-none-any.whl → 1.20.1__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 (214) 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 +295 -170
  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} +21 -14
  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 +340 -0
  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-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info}/METADATA +36 -114
  206. kaggle_environments-1.20.1.dist-info/RECORD +211 -0
  207. {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info}/WHEEL +1 -2
  208. kaggle_environments-1.20.1.dist-info/entry_points.txt +3 -0
  209. kaggle_environments/envs/battlegeese/battlegeese.py +0 -223
  210. kaggle_environments/temp.py +0 -14
  211. kaggle_environments-0.2.1.dist-info/RECORD +0 -32
  212. kaggle_environments-0.2.1.dist-info/entry_points.txt +0 -3
  213. kaggle_environments-0.2.1.dist-info/top_level.txt +0 -1
  214. {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info/licenses}/LICENSE +0 -0
@@ -13,23 +13,23 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import json
16
- import jsonschema
17
- import sys
18
16
  from copy import deepcopy
19
- from io import StringIO
20
17
  from pathlib import Path
21
- from urllib.parse import urlparse
22
- from .errors import InvalidArgument, NotFound
23
18
 
19
+ import jsonschema
20
+
21
+ from .errors import InvalidArgument, NotFound
24
22
 
25
23
  # Path Utilities.
26
24
  root_path = Path(__file__).parent.resolve()
27
25
  envs_path = Path.joinpath(root_path, "envs")
28
26
 
29
27
 
30
- # Primative Utilities.
31
- def get(o, classinfo=None, default=None, path=[], is_callable=None, fallback=None):
32
- if o == None and default != None:
28
+ # Primitive Utilities.
29
+ def get(o, classinfo=None, default=None, path=None, is_callable=None, fallback=None):
30
+ if path is None:
31
+ path = []
32
+ if o is None and default is not None:
33
33
  o = default
34
34
  if has(o, classinfo, default, path, is_callable):
35
35
  cur = o
@@ -37,25 +37,27 @@ def get(o, classinfo=None, default=None, path=[], is_callable=None, fallback=Non
37
37
  cur = cur[p]
38
38
  return cur
39
39
  else:
40
- if default != None:
40
+ if default is not None:
41
41
  return default
42
42
  return fallback
43
43
 
44
44
 
45
- def has(o, classinfo=None, default=None, path=[], is_callable=None):
45
+ def has(o, classinfo=None, default=None, path=None, is_callable=None):
46
+ if path is None:
47
+ path = []
46
48
  try:
47
49
  cur = o
48
50
  for p in path:
49
51
  cur = cur[p]
50
- if classinfo != None and not isinstance(cur, classinfo):
51
- raise "Not a match"
52
- if is_callable == True and not callable(cur):
53
- raise "Not callable"
54
- if is_callable == False and callable(cur):
55
- raise "Is callable"
52
+ if classinfo is not None and not isinstance(cur, classinfo):
53
+ raise ValueError("Not a match")
54
+ if is_callable and not callable(cur):
55
+ raise ValueError("Not callable")
56
+ if not is_callable and callable(cur):
57
+ raise ValueError("Is callable")
56
58
  return True
57
59
  except:
58
- if default != None and o != None and len(path) > 0:
60
+ if default is not None and o is not None and len(path) > 0:
59
61
  cur = o
60
62
  for p in path[:-1]:
61
63
  if not has(cur, dict, path=[p]):
@@ -65,9 +67,15 @@ def has(o, classinfo=None, default=None, path=[], is_callable=None):
65
67
  return False
66
68
 
67
69
 
68
- def call(o, default=None, path=[], args=[], kwargs={}):
70
+ def call(o, default=None, path=None, args=None, kwargs=None):
71
+ if path is None:
72
+ path = []
73
+ if args is None:
74
+ args = []
75
+ if kwargs is None:
76
+ kwargs = {}
69
77
  o = get(o, default=False, path=path, is_callable=True)
70
- if o != False:
78
+ if o is not False:
71
79
  return o(*args, **kwargs)
72
80
  else:
73
81
  return default
@@ -84,7 +92,7 @@ class Struct(dict):
84
92
  self[attr] = value
85
93
 
86
94
 
87
- # Added benifit of cloning lists and dicts.
95
+ # Added benefit of cloning lists and dicts.
88
96
  def structify(o):
89
97
  if isinstance(o, list):
90
98
  return [structify(o[i]) for i in range(len(o))]
@@ -99,49 +107,17 @@ def read_file(path, fallback=None):
99
107
  with open(path, "r", encoding="utf-8") as file:
100
108
  return file.read()
101
109
  except:
102
- if fallback != None:
110
+ if fallback is not None:
103
111
  return fallback
104
112
  raise NotFound(f"{path} not found")
105
113
 
106
114
 
107
- def get_exec(raw, fallback=None):
108
- orig_out = sys.stdout
109
- buffer = StringIO()
110
- sys.stdout = buffer
111
- try:
112
- code_object = compile(raw, "<string>", "exec")
113
- env = {}
114
- exec(code_object, env)
115
- sys.stdout = orig_out
116
- print(buffer.getvalue())
117
- return env
118
- except Exception as e:
119
- sys.stdout = orig_out
120
- print(buffer.getvalue())
121
- if fallback != None:
122
- return fallback
123
- raise InvalidArgument("Invalid raw Python: " + str(e))
124
-
125
-
126
- def get_last_callable(raw, fallback=None):
127
- try:
128
- local = get_exec(raw)
129
- callables = [v for v in local.values() if callable(v)]
130
- if len(callables) > 0:
131
- return callables[-1]
132
- raise "Nope"
133
- except:
134
- if fallback != None:
135
- return fallback
136
- raise InvalidArgument("No callable found")
137
-
138
-
139
115
  def get_file_json(path, fallback=None):
140
116
  try:
141
117
  with open(path, "r") as json_file:
142
118
  return json.load(json_file)
143
119
  except:
144
- if fallback != None:
120
+ if fallback is not None:
145
121
  return fallback
146
122
  raise InvalidArgument(f"{path} does not contain valid JSON")
147
123
 
@@ -152,22 +128,22 @@ schemas = structify(get_file_json(Path.joinpath(root_path, "schemas.json")))
152
128
 
153
129
  def default_schema(schema, data):
154
130
  default = get(schema, path=["default"])
155
- if default == None and data == None:
131
+ if default is None and data is None:
156
132
  return
157
133
 
158
134
  if get(schema, path=["type"]) == "object":
159
135
  default = deepcopy(get(default, dict, {}))
160
- if data == None or not has(data, dict):
136
+ if data is None or not has(data, dict):
161
137
  obj = default
162
138
  else:
163
139
  obj = data
164
140
  for k, v in default.items():
165
- if not k in obj:
141
+ if k not in obj:
166
142
  obj[k] = v
167
143
  properties = get(schema, dict, {}, ["properties"])
168
144
  for key, prop_schema in properties.items():
169
145
  new_value = default_schema(prop_schema, get(obj, path=[key]))
170
- if new_value != None:
146
+ if new_value is not None:
171
147
  obj[key] = new_value
172
148
  return obj
173
149
 
@@ -176,20 +152,20 @@ def default_schema(schema, data):
176
152
  arr = get(data, list, default)
177
153
  item_schema = get(schema, dict, {}, ["items"])
178
154
  for index, value in enumerate(arr):
179
- if value == None and len(default) > index:
155
+ if value is None and len(default) > index:
180
156
  new_value = default[index]
181
157
  else:
182
158
  new_value = default_schema(item_schema, value)
183
- if new_value != None:
159
+ if new_value is not None:
184
160
  arr[index] = new_value
185
161
  return arr
186
162
 
187
- return data if data != None else default
163
+ return data if data is not None else default
188
164
 
189
165
 
190
166
  def process_schema(schema, data, use_default=True):
191
167
  error = None
192
- if use_default == True:
168
+ if use_default is True:
193
169
  data = default_schema(schema, deepcopy(data))
194
170
  try:
195
171
  jsonschema.validate(data, schema)
@@ -198,21 +174,18 @@ def process_schema(schema, data, use_default=True):
198
174
  return error, data
199
175
 
200
176
 
201
- def is_url(url):
202
- try:
203
- result = urlparse(url)
204
- return all([result.scheme, result.netloc])
205
- except ValueError:
206
- return False
207
-
208
-
209
177
  # Player utilities
210
178
  def get_player(window_kaggle, renderer):
179
+ if renderer[0] == "html_path":
180
+ key = "/*window.kaggle*/"
181
+ value = f"""
182
+ window.kaggle = {json.dumps(window_kaggle, indent=2)};\n\n
183
+ """
184
+ return read_file(renderer[1]).replace(key, value)
185
+
211
186
  key = "/*window.kaggle*/"
212
187
  value = f"""
213
188
  window.kaggle = {json.dumps(window_kaggle, indent=2)};\n\n
214
189
  window.kaggle.renderer = {renderer.strip()};\n\n
215
190
  """
216
- return read_file(Path.joinpath(root_path, "static", "player.html")).replace(
217
- key, value
218
- )
191
+ return read_file(Path.joinpath(root_path, "static", "player.html")).replace(key, value)
@@ -1,21 +1,35 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: kaggle-environments
3
- Version: 0.2.1
3
+ Version: 1.20.1
4
4
  Summary: Kaggle Environments
5
- Home-page: https://github.com/Kaggle/kaggle-environments
6
- Author: Kaggle
7
- Author-email: support@kaggle.com
8
- License: Apache 2.0
9
5
  Keywords: Kaggle
10
- Platform: UNKNOWN
11
- Requires-Python: >=3.6
6
+ Author-email: Kaggle <support@kaggle.com>
7
+ Requires-Python: >=3.10
12
8
  Description-Content-Type: text/markdown
13
- Requires-Dist: jsonschema (>=3.0.1)
9
+ License-File: LICENSE
10
+ Requires-Dist: accelerate
11
+ Requires-Dist: bitsandbytes
12
+ Requires-Dist: Chessnut >= 0.4.1
13
+ Requires-Dist: Flask >= 1.1.2
14
+ Requires-Dist: gymnasium == 1.2.0
15
+ Requires-Dist: gymnax==0.0.8
16
+ Requires-Dist: jax
17
+ Requires-Dist: jsonschema >= 3.0.1
18
+ Requires-Dist: litellm
19
+ Requires-Dist: numpy >= 2.2.6
20
+ Requires-Dist: open_spiel >= 1.6.2
21
+ Requires-Dist: pettingzoo == 1.24.0
22
+ Requires-Dist: requests >= 2.25.1
23
+ Requires-Dist: scipy >= 1.15.3
24
+ Requires-Dist: shimmy >= 1.2.1
25
+ Requires-Dist: stable-baselines3 == 2.7.0
26
+ Requires-Dist: transformers >= 4.33.1
27
+ Project-URL: Homepage, https://github.com/Kaggle/kaggle-environments
14
28
 
15
29
  # [<img src="https://kaggle.com/static/images/site-logo.png" height="50" style="margin-bottom:-15px" />](https://kaggle.com) Environments
16
30
 
17
31
  ```bash
18
- pip install kaggle-environments
32
+ uv pip install kaggle-environments
19
33
  ```
20
34
 
21
35
  # TLDR;
@@ -66,10 +80,10 @@ help(env.reset)
66
80
  Agent functions can have observation and configuration parameters and must return a valid action. Details about the observation, configuration, and actions can seen by viewing the specification.
67
81
 
68
82
  ```python
69
- from kaggle_simulations import make
70
- env = make("connectx", {rows: 10, columns: 8, inarow: 5})
83
+ from kaggle_environments import make
84
+ env = make("connectx", {"rows": 10, "columns": 8, "inarow": 5})
71
85
 
72
- def agent(observation, configration):
86
+ def agent(observation, configuration):
73
87
  print(observation) # {board: [...], mark: 1}
74
88
  print(configuration) # {rows: 10, columns: 8, inarow: 5}
75
89
  return 3 # Action: always place a mark in the 3rd column.
@@ -116,7 +130,7 @@ agent6 = "http://localhost:8000/run/agent"
116
130
  Most environments contain default agents to play against. To see the list of available agents for a specific environment run:
117
131
 
118
132
  ```python
119
- from kaggle_simulations import make
133
+ from kaggle_environments import make
120
134
  env = make("tictactoe")
121
135
 
122
136
  # The list of available default agents.
@@ -160,7 +174,7 @@ There are 3 types of errors which can occur from agent execution:
160
174
  To help debug your agent and why it threw the errors above, add the `debug` flag when setting up the environment.
161
175
 
162
176
  ```python
163
- from kaggle_simulations import make
177
+ from kaggle_environments import make
164
178
 
165
179
  def agent():
166
180
  return "Something Bad"
@@ -211,16 +225,15 @@ There are two types of configuration: Defaults applying to every environment and
211
225
  | Name | Description |
212
226
  | ------------ | --------------------------------------------------------------- |
213
227
  | episodeSteps | Maximum number of steps in the episode. |
214
- | agentExec | How the agent is executed alongside the envionment. |
215
228
  | agentTimeout | Maximum runtime (seconds) to initialize an agent. |
216
229
  | actTimeout | Maximum runtime (seconds) to obtain an action from an agent. |
217
230
  | runTimeout | Maximum runtime (seconds) of an episode (not necessarily DONE). |
231
+ | maxLogLength | Maximum log length (number of characters, `None` -> no limit) |
218
232
 
219
233
  ```python
220
234
  env = make("connectx", configuration={
221
235
  "columns": 19, # Specific to ConnectX.
222
236
  "actTimeout": 10,
223
- "agentExec": "LOCAL"
224
237
  })
225
238
  ```
226
239
 
@@ -247,13 +260,12 @@ print(steps)
247
260
  Evaluation is used to run an episode (environment + agents) multiple times and just return the rewards.
248
261
 
249
262
  ```python
250
- from kaggle_simulations import evaluate
263
+ from kaggle_environments import evaluate
251
264
 
252
265
  # Same definitions as "make" above.
253
- envrionment = "connectx"
254
- configuration = {rows: 10, columns: 8, inarow: 5}
266
+ environment = "connectx"
267
+ configuration = {"rows": 10, "columns": 8, "inarow": 5}
255
268
  steps = []
256
- debug = False
257
269
 
258
270
  # Which agents to run repeatedly. Same as env.run(agents)
259
271
  agents = ["random", agent1]
@@ -261,7 +273,7 @@ agents = ["random", agent1]
261
273
  # How many times to run them.
262
274
  num_episodes = 10
263
275
 
264
- rewards = evaluate(environment, agents, configuration, steps, num_episodes, debug)
276
+ rewards = evaluate(environment, agents, configuration, steps, num_episodes)
265
277
  ```
266
278
 
267
279
  ## Stepping
@@ -271,7 +283,7 @@ Running above essentially just steps until no agent is still active. To execute
271
283
  ```python
272
284
  agent1_action = agent1(env.state[0].observation)
273
285
  agent2_action = agent2(env.state[1].observation)
274
- state = env.step(agent1_action, agent2_action)
286
+ state = env.step([agent1_action, agent2_action])
275
287
  ```
276
288
 
277
289
  ## Playing
@@ -279,7 +291,7 @@ state = env.step(agent1_action, agent2_action)
279
291
  A few environments offer an interactive play against agents within jupyter notebooks. An example of this is using connectx:
280
292
 
281
293
  ```python
282
- from kaggle_simulations import make
294
+ from kaggle_environments import make
283
295
 
284
296
  env = make("connectx")
285
297
  # None indicates which agent will be manually played.
@@ -301,93 +313,3 @@ out = env.render(mode="ansi")
301
313
  print(out)
302
314
  ```
303
315
 
304
- # Command Line
305
-
306
- ```sh
307
- > python main.py -h
308
- ```
309
-
310
- ## List Registered Environments
311
-
312
- ```sh
313
- > python main.py list
314
- ```
315
-
316
- ## Evaluate Episode Rewards
317
-
318
- ```sh
319
- python main.py evaluate --environment tictactoe --agents random random --episodes 10
320
- ```
321
-
322
- ## Run an Episode
323
-
324
- ```sh
325
- > python main.py run --environment tictactoe --agents random /pathtomy/agent.py --debug True
326
- ```
327
-
328
- ## Load an Episode
329
-
330
- This is useful when converting an episode json output into html.
331
-
332
- ```sh
333
- python main.py load --environment tictactoe --steps [...] --render '{"mode": "html"}'
334
- ```
335
-
336
- # HTTP Server
337
-
338
- The HTTP server contains the same interface/actions as the CLI above merging both POST body and GET params.
339
-
340
- ## Setup
341
-
342
- ```bash
343
- python main.py http-server --port=8012 --host=0.0.0.0
344
- ```
345
-
346
- ## Adding Middleware
347
-
348
- ```python
349
- # middleware.py
350
- import time
351
-
352
- def request(req):
353
- time.sleep(30)
354
- req.agents = ["random", "random"]
355
- return req
356
-
357
- def response(req, resp):
358
- time.sleep(10)
359
- return resp
360
- ```
361
-
362
- ```bash
363
- python3 main.py http-server --middleware=/path/to/middleware.py
364
- ```
365
-
366
- ### Running Agents on Separate Servers
367
-
368
- ```python
369
- # How to run agent on a separate server.
370
- import requests
371
- import json
372
-
373
- path_to_agent1 = "/home/ajeffries/git/playground/agent1.py"
374
- path_to_agent2 = "/home/ajeffries/git/playground/agent2.py"
375
-
376
- agent1_url = f"http://localhost:5001?agents[]={path_to_agent1}"
377
- agent2_url = f"http://localhost:5002?agents[]={path_to_agent2}"
378
-
379
- body = {
380
- "action": "run",
381
- "environment": "tictactoe",
382
- "agents": [agent1_url, agent2_url]
383
- }
384
- resp = requests.post(url="http://localhost:5000", data=json.dumps(body)).json()
385
-
386
- # Inflate the response replay to visualize.
387
- from kaggle_environments import make
388
- env = make("tictactoe", steps=resp["steps"], debug=True)
389
- env.render(mode="ipython")
390
- print(resp)
391
- ```
392
-
393
-