kaggle-environments 1.16.4__py2.py3-none-any.whl → 1.16.6__py2.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.

@@ -20,7 +20,7 @@ from .core import *
20
20
  from .main import http_request
21
21
  from . import errors
22
22
 
23
- __version__ = "1.16.4"
23
+ __version__ = "1.16.6"
24
24
 
25
25
  __all__ = ["Agent", "environments", "errors", "evaluate", "http_request",
26
26
  "make", "register", "utils", "__version__",
@@ -20,6 +20,7 @@ import sys
20
20
  import traceback
21
21
  from contextlib import redirect_stderr, redirect_stdout
22
22
  from io import StringIO
23
+ from requests.exceptions import Timeout
23
24
  from time import perf_counter
24
25
  from urllib.parse import urlparse
25
26
  from .errors import DeadlineExceeded, InvalidArgument
@@ -78,16 +79,25 @@ class UrlAgent:
78
79
  "observation": observation,
79
80
  },
80
81
  }
81
- response = requests.post(url=self.raw, data=json.dumps(data))
82
- response_json = response.json()
83
- action = response_json["action"]
84
- if action == "DeadlineExceeded":
85
- action = DeadlineExceeded()
86
- elif isinstance(action, str) and action.startswith("BaseException::"):
87
- # Deserialize the exception message
88
- parts = action.split("::", 1)
89
- action = BaseException(parts[1])
90
- return action
82
+ timeout = float(observation.remainingOverageTime) + float(configuration.actTimeout) + 1
83
+ try:
84
+ response = requests.post(url=self.raw, data=json.dumps(data), timeout=timeout)
85
+ response.raise_for_status()
86
+ response_json = response.json()
87
+ action = response_json["action"]
88
+ if action == "DeadlineExceeded":
89
+ action = DeadlineExceeded()
90
+ elif isinstance(action, str) and action.startswith("BaseException::"):
91
+ # Deserialize the exception message
92
+ parts = action.split("::", 1)
93
+ action = BaseException(parts[1])
94
+ return action
95
+ except Timeout:
96
+ print(f"Request timed out after {timeout} seconds")
97
+ return DeadlineExceeded()
98
+ except requests.exceptions.RequestException as e:
99
+ print(f"Request error: {e}")
100
+ return None
91
101
 
92
102
 
93
103
  def build_agent(raw, builtin_agents, environment_name):
@@ -8,6 +8,11 @@
8
8
  "episodeSteps": 1000,
9
9
  "actTimeout": 0.1,
10
10
  "runTimeout": 300,
11
+ "seed": {
12
+ "description": "Integer random value to use to seed the match",
13
+ "type": "number",
14
+ "default": 0
15
+ },
11
16
  "agentTimeout": {
12
17
  "description": "Obsolete field kept for backwards compatibility, please use observation.remainingOverageTime.",
13
18
  "type": "number",
@@ -172,8 +172,8 @@ def interpreter(state, env):
172
172
  seen_positions = defaultdict(int)
173
173
  game_start_position = math.floor(random.random() * len(OPENINGS))
174
174
  if "seed" in env.configuration:
175
- seed = int(env.configuration["seed"]) % len(OPENINGS)
176
- game_start_position = seed & len(OPENINGS)
175
+ seed = int(env.configuration["seed"])
176
+ game_start_position = seed % len(OPENINGS)
177
177
  state[0].observation.board = OPENINGS[game_start_position]
178
178
  state[1].observation.board = OPENINGS[game_start_position]
179
179
  return state
@@ -12,8 +12,6 @@ from os import path as osp
12
12
  # next two lines enables importing local packages e.g. luxai_s3
13
13
  __dir__ = osp.dirname(__file__)
14
14
  syspath.append(__dir__)
15
-
16
- from luxai_s3.wrappers import LuxAIS3GymEnv, RecordEpisode
17
15
  import numpy as np
18
16
 
19
17
  import copy
@@ -33,7 +31,7 @@ def to_json(state):
33
31
  else:
34
32
  return state
35
33
  prev_step = 0
36
- luxenv: RecordEpisode = None
34
+ luxenv = None
37
35
  prev_obs = None
38
36
  state_obs = None
39
37
  default_env_cfg = None
@@ -43,82 +41,87 @@ def enqueue_output(out, queue):
43
41
  out.close()
44
42
 
45
43
  def interpreter(state, env):
46
- global luxenv, prev_obs, state_obs, default_env_cfg
47
- player_0 = state[0]
48
- player_1 = state[1]
49
- # filter out actions such as debug annotations so they aren't saved
50
- # filter_actions(state, env)
51
-
52
- if env.done:
53
- if "seed" in env.configuration:
54
- seed = int(env.configuration["seed"])
55
- else:
56
- seed = math.floor(random.random() * 1e9);
57
- env.configuration["seed"] = seed
58
-
59
- luxenv = LuxAIS3GymEnv(numpy_output=True)
60
- luxenv = RecordEpisode(luxenv, save_on_close=False, save_on_reset=False)
61
- obs, info = luxenv.reset(seed=seed)
62
-
63
- env_cfg_json = info["params"]
64
-
65
- env.configuration.env_cfg = env_cfg_json
44
+ try:
45
+ from luxai_s3.wrappers import LuxAIS3GymEnv, RecordEpisode
46
+ global luxenv, prev_obs, state_obs, default_env_cfg
47
+ player_0 = state[0]
48
+ player_1 = state[1]
49
+ # filter out actions such as debug annotations so they aren't saved
50
+ # filter_actions(state, env)
51
+
52
+ if env.done:
53
+ if "seed" in env.configuration:
54
+ seed = int(env.configuration["seed"])
55
+ else:
56
+ seed = math.floor(random.random() * 1e9);
57
+ env.configuration["seed"] = seed
58
+
59
+ luxenv = LuxAIS3GymEnv(numpy_output=True)
60
+ luxenv = RecordEpisode(luxenv, save_on_close=False, save_on_reset=False)
61
+ obs, info = luxenv.reset(seed=seed)
62
+
63
+ env_cfg_json = info["params"]
64
+
65
+ env.configuration.env_cfg = env_cfg_json
66
+
67
+ player_0.observation.player = "player_0"
68
+ player_1.observation.player = "player_1"
69
+ player_0.observation.obs = json.dumps(to_json(obs["player_0"]))
70
+ player_1.observation.obs = json.dumps(to_json(obs["player_1"]))
71
+
72
+ replay_frame = luxenv.serialize_episode_data(dict(
73
+ states=[luxenv.episode["states"][-1]],
74
+ metadata=luxenv.episode["metadata"],
75
+ params=luxenv.episode["params"]
76
+ ))
77
+ # don't need to keep metadata/params beyond first step
78
+ player_0.info = dict(replay=replay_frame)
79
+ return state
80
+
81
+ new_state_obs, rewards, terminations, truncations, infos = luxenv.step({
82
+ "player_0": np.array(player_0.action["action"]),
83
+ "player_1": np.array(player_1.action["action"])
84
+ })
66
85
 
86
+ # cannot store np arrays in replay jsons so must convert to list
87
+ player_0.action = player_0.action["action"]
88
+ player_1.action = player_1.action["action"]
89
+
90
+ dones = dict()
91
+ for k in terminations:
92
+ dones[k] = terminations[k] | truncations[k]
93
+
67
94
  player_0.observation.player = "player_0"
68
95
  player_1.observation.player = "player_1"
69
- player_0.observation.obs = json.dumps(to_json(obs["player_0"]))
70
- player_1.observation.obs = json.dumps(to_json(obs["player_1"]))
96
+
97
+ player_0.observation.obs = json.dumps(to_json(new_state_obs["player_0"]))
98
+ player_1.observation.obs = json.dumps(to_json(new_state_obs["player_1"]))
71
99
 
100
+
101
+ player_0.reward = int(rewards["player_0"])
102
+ player_1.reward = int(rewards["player_1"])
103
+
104
+ player_0.observation.reward = int(player_0.reward)
105
+ player_1.observation.reward = int(player_1.reward)
72
106
  replay_frame = luxenv.serialize_episode_data(dict(
73
107
  states=[luxenv.episode["states"][-1]],
108
+ actions=[luxenv.episode["actions"][-1]],
74
109
  metadata=luxenv.episode["metadata"],
75
110
  params=luxenv.episode["params"]
76
111
  ))
77
112
  # don't need to keep metadata/params beyond first step
113
+ del replay_frame["metadata"]
114
+ del replay_frame["params"]
78
115
  player_0.info = dict(replay=replay_frame)
79
- return state
80
-
81
- new_state_obs, rewards, terminations, truncations, infos = luxenv.step({
82
- "player_0": np.array(player_0.action["action"]),
83
- "player_1": np.array(player_1.action["action"])
84
- })
85
-
86
- # cannot store np arrays in replay jsons so must convert to list
87
- player_0.action = player_0.action["action"]
88
- player_1.action = player_1.action["action"]
89
-
90
- dones = dict()
91
- for k in terminations:
92
- dones[k] = terminations[k] | truncations[k]
93
-
94
- player_0.observation.player = "player_0"
95
- player_1.observation.player = "player_1"
96
116
 
97
- player_0.observation.obs = json.dumps(to_json(new_state_obs["player_0"]))
98
- player_1.observation.obs = json.dumps(to_json(new_state_obs["player_1"]))
99
-
100
-
101
- player_0.reward = int(rewards["player_0"])
102
- player_1.reward = int(rewards["player_1"])
103
-
104
- player_0.observation.reward = int(player_0.reward)
105
- player_1.observation.reward = int(player_1.reward)
106
- replay_frame = luxenv.serialize_episode_data(dict(
107
- states=[luxenv.episode["states"][-1]],
108
- actions=[luxenv.episode["actions"][-1]],
109
- metadata=luxenv.episode["metadata"],
110
- params=luxenv.episode["params"]
111
- ))
112
- # don't need to keep metadata/params beyond first step
113
- del replay_frame["metadata"]
114
- del replay_frame["params"]
115
- player_0.info = dict(replay=replay_frame)
116
-
117
- if np.all([dones[k] for k in dones]):
118
- if player_0.status == "ACTIVE":
119
- player_0.status = "DONE"
120
- if player_1.status == "ACTIVE":
121
- player_1.status = "DONE"
117
+ if np.all([dones[k] for k in dones]):
118
+ if player_0.status == "ACTIVE":
119
+ player_0.status = "DONE"
120
+ if player_1.status == "ACTIVE":
121
+ player_1.status = "DONE"
122
+ return state
123
+ except ModuleNotFoundError as e:
124
+ print("Lux AI S3 Dependencies are missing, interpreter will not work")
122
125
  return state
123
126
 
124
127
  def renderer(state, env):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaggle-environments
3
- Version: 1.16.4
3
+ Version: 1.16.6
4
4
  Summary: Kaggle Environments
5
5
  Home-page: https://github.com/Kaggle/kaggle-environments
6
6
  Author: Kaggle
@@ -1,5 +1,5 @@
1
- kaggle_environments/__init__.py,sha256=ddFc8d0FO0tsxk5jwdm2UKLHc2NeafGrlPEv4H373aw,1682
2
- kaggle_environments/agent.py,sha256=BpYrAC6EOhJF3Wzynq-CWg8l-z5uXW1Lq4qUsyOM0ik,6203
1
+ kaggle_environments/__init__.py,sha256=MqHqPLX3XxkeHK16tIDhQ7zDdUMEgZzveSlQ0yYUnNo,1682
2
+ kaggle_environments/agent.py,sha256=MGBOuCojql8vuODPdyPYJgKRnVAVI_D_YDl53J15aPM,6698
3
3
  kaggle_environments/api.py,sha256=eLBKqr11Ku4tdsMUdUqy74FIVEA_hdV3_QUpX84x3Z8,798
4
4
  kaggle_environments/core.py,sha256=IrEkN9cIA2djBAxI8Sz1GRpGNKjhqbnBdV6irAeTm8Q,27851
5
5
  kaggle_environments/errors.py,sha256=SzKjkZP7pJbf9g0GDjGq4XG194hCQXLMwrlMCcm7Ai8,3336
@@ -9,8 +9,8 @@ kaggle_environments/schemas.json,sha256=zGzLyhqPdH6QQ0d48SrP5LKbvupprrWvgfQBerLq
9
9
  kaggle_environments/status_codes.json,sha256=6a8HuS_Vth95W0f2fov21QLdRfA3KbizUvjKmJhYtBc,995
10
10
  kaggle_environments/utils.py,sha256=FcI17PA4QK2-hyNp0dryS0TQ2pFlH9K19zDUMmuF4-E,5713
11
11
  kaggle_environments/envs/chess/chess.js,sha256=RVwu2meNTKiXxd15WGZXr5NVwm_RgKMlqIFkzKJ7IaM,30743
12
- kaggle_environments/envs/chess/chess.json,sha256=sbTVp645zzEiDZL_lmAEM4023wukPseevBIJks9J6xw,1403
13
- kaggle_environments/envs/chess/chess.py,sha256=bBzFMw2njsYHN33-_sqJURtac36SiqgLbmBWdaPtMGQ,7667
12
+ kaggle_environments/envs/chess/chess.json,sha256=uo0J_Y2DDwv_T8Kyu1xfduUfzAi6T098LTqQm_EqcnU,1548
13
+ kaggle_environments/envs/chess/chess.py,sha256=fON4l77eR8twHJo1YDcOT2iMxrvHZcIICMB62iYHZUA,7651
14
14
  kaggle_environments/envs/chess/test_chess.py,sha256=ayZEIWRSD3D6BqhJv0q_M5a-j8-pMm8kb4ACAW-DhBE,1748
15
15
  kaggle_environments/envs/connectx/connectx.js,sha256=2j4PigyyZYNH5tzKflmj__8-kT9LMfPsRT_hOkbojUE,9236
16
16
  kaggle_environments/envs/connectx/connectx.json,sha256=Tt-vH-em-RKK5scAcjJ82zOvGov42OW6u9IJCPkS9Fo,1783
@@ -166,7 +166,7 @@ kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/utils.py,sha256=k3Cazt
166
166
  kaggle_environments/envs/lux_ai_s3/agents.py,sha256=43bT4pa6t1SsAS4akQ8y2L7wJrs0hZAH0v1M5Nt_vR0,112
167
167
  kaggle_environments/envs/lux_ai_s3/index.html,sha256=ku5-4zEckdKLEJOGrMcYmAUVmdvcn7WmAxGikHdHSeM,1558
168
168
  kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json,sha256=LrYYdwN2zDlCUg33VpGq8oPYLhDxmakPB4yTl6UurX4,1179
169
- kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py,sha256=Pmmw2MrmXZVLgGfnqP5XYRzj1sdnsyy9dTvmv-d291k,4363
169
+ kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py,sha256=edBgOiYvBtrPKzvxVfUJMzblChRn3tJbOs-N6q7Yzj4,4769
170
170
  kaggle_environments/envs/lux_ai_s3/test_lux.py,sha256=cfiEv4re7pvZ9TeG9HdvGOhHb0da272w8CDUSZn5bpU,273
171
171
  kaggle_environments/envs/lux_ai_s3/luxai_s3/__init__.py,sha256=2hwayynTiOtSr3V1-gjZfosn0Y3sOSKvNrYHhHeAyhY,28
172
172
  kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py,sha256=pMAof3kYlPQkilFiCTY-JGV7RYO-ODUNCTFvwc1oawg,39437
@@ -201,9 +201,9 @@ kaggle_environments/envs/tictactoe/tictactoe.js,sha256=NZDT-oSG0a6a-rso9Ldh9qkJw
201
201
  kaggle_environments/envs/tictactoe/tictactoe.json,sha256=zMXZ8-fpT7FBhzz2FFBvRLn4XwtngjEqOieMvI6cCj8,1121
202
202
  kaggle_environments/envs/tictactoe/tictactoe.py,sha256=iLNU5V-lz7Xab-d1vpPMfU5jDM3QtgBUH63Y_SU7I9Y,3639
203
203
  kaggle_environments/static/player.html,sha256=XyVoe0XxMa2MO1fTDY_rjyjzPN-JZgbVwJIDoLSnlw0,23016
204
- kaggle_environments-1.16.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
205
- kaggle_environments-1.16.4.dist-info/METADATA,sha256=OLglJwqIuQOokDoNanoqvaCO0vHSiXIOZvTgg3Re3Ok,10699
206
- kaggle_environments-1.16.4.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
207
- kaggle_environments-1.16.4.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
208
- kaggle_environments-1.16.4.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
209
- kaggle_environments-1.16.4.dist-info/RECORD,,
204
+ kaggle_environments-1.16.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
205
+ kaggle_environments-1.16.6.dist-info/METADATA,sha256=DRMJLyRpY876eLbYSd94SVW6ChanggYUjVo20mQjXLE,10699
206
+ kaggle_environments-1.16.6.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
207
+ kaggle_environments-1.16.6.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
208
+ kaggle_environments-1.16.6.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
209
+ kaggle_environments-1.16.6.dist-info/RECORD,,