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.
- kaggle_environments/__init__.py +1 -1
- kaggle_environments/agent.py +20 -10
- kaggle_environments/envs/chess/chess.json +5 -0
- kaggle_environments/envs/chess/chess.py +2 -2
- kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py +70 -67
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/METADATA +1 -1
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/RECORD +11 -11
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/LICENSE +0 -0
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/WHEEL +0 -0
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/entry_points.txt +0 -0
- {kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/top_level.txt +0 -0
kaggle_environments/__init__.py
CHANGED
kaggle_environments/agent.py
CHANGED
|
@@ -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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
action
|
|
90
|
-
|
|
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"])
|
|
176
|
-
game_start_position = seed
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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,5 +1,5 @@
|
|
|
1
|
-
kaggle_environments/__init__.py,sha256=
|
|
2
|
-
kaggle_environments/agent.py,sha256=
|
|
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=
|
|
13
|
-
kaggle_environments/envs/chess/chess.py,sha256=
|
|
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=
|
|
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.
|
|
205
|
-
kaggle_environments-1.16.
|
|
206
|
-
kaggle_environments-1.16.
|
|
207
|
-
kaggle_environments-1.16.
|
|
208
|
-
kaggle_environments-1.16.
|
|
209
|
-
kaggle_environments-1.16.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
{kaggle_environments-1.16.4.dist-info → kaggle_environments-1.16.6.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|