kaggle-environments 1.16.11__py2.py3-none-any.whl → 1.17.3__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.

Files changed (21) hide show
  1. kaggle_environments/__init__.py +18 -8
  2. kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +14 -7
  3. kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py +5 -4
  4. kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py +33 -17
  5. kaggle_environments/envs/open_spiel/__init__.py +0 -0
  6. kaggle_environments/envs/open_spiel/games/__init__.py +0 -0
  7. kaggle_environments/envs/open_spiel/games/connect_four/__init__.py +0 -0
  8. kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js +296 -0
  9. kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py +86 -0
  10. kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy_test.py +57 -0
  11. kaggle_environments/envs/open_spiel/observation.py +133 -0
  12. kaggle_environments/envs/open_spiel/open_spiel.py +416 -0
  13. kaggle_environments/envs/open_spiel/proxy.py +139 -0
  14. kaggle_environments/envs/open_spiel/proxy_test.py +64 -0
  15. kaggle_environments/envs/open_spiel/test_open_spiel.py +18 -0
  16. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info}/METADATA +25 -13
  17. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info}/RECORD +21 -10
  18. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info}/WHEEL +1 -1
  19. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info}/entry_points.txt +0 -0
  20. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info/licenses}/LICENSE +0 -0
  21. {kaggle_environments-1.16.11.dist-info → kaggle_environments-1.17.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,139 @@
1
+ """OpenSpiel Game and State proxies.
2
+
3
+ Proxies that act as a pyspiel.State/Game by wrapping the original object and
4
+ forwarding calls. Subclassing allows to override specific methods or add
5
+ additional functionality, or payload to the State/Game object.
6
+
7
+ WARNING: Serialization of proxy games and states is not supported.
8
+ """
9
+
10
+ from typing import Any
11
+
12
+ from . import observation
13
+ import pyspiel
14
+
15
+
16
+ class State(pyspiel.State):
17
+ """Base class for a pyspiel.State proxy."""
18
+
19
+ def __init__(self, wrapped: pyspiel.State, game: 'Game'):
20
+ super().__init__(game)
21
+ self.__wrapped__ = wrapped
22
+
23
+ def current_player(self) -> int:
24
+ return self.__wrapped__.current_player()
25
+
26
+ def _legal_actions(self, player: int) -> list[int]:
27
+ return self.__wrapped__.legal_actions(player)
28
+
29
+ def _apply_action(self, action: int) -> None:
30
+ return self.__wrapped__.apply_action(action)
31
+
32
+ def _action_to_string(self, player: int, action: int) -> str:
33
+ return self.__wrapped__.action_to_string(player, action)
34
+
35
+ def chance_outcomes(self) -> list[tuple[int, float]]:
36
+ return self.__wrapped__.chance_outcomes()
37
+
38
+ def is_terminal(self) -> bool:
39
+ return self.__wrapped__.is_terminal()
40
+
41
+ def returns(self) -> list[float]:
42
+ return self.__wrapped__.returns()
43
+
44
+ def rewards(self) -> list[float]:
45
+ return self.__wrapped__.rewards()
46
+
47
+ def __str__(self) -> str:
48
+ return self.__wrapped__.__str__()
49
+
50
+ def to_string(self) -> str:
51
+ return self.__wrapped__.to_string()
52
+
53
+ def __getattr__(self, name: str) -> Any:
54
+ # Escape hatch when proxying Python implementations that have attributes
55
+ # that need to be accessed, e.g. TicTacToeState.board from its observer.
56
+ return object.__getattribute__(self.__wrapped__, name)
57
+
58
+
59
+ class Game(pyspiel.Game):
60
+ """Base class for a pyspiel.Game proxy."""
61
+
62
+ def __init__(self, wrapped: pyspiel.Game, **kwargs):
63
+ # TODO(hennes): Add serialization.
64
+ game_info = pyspiel.GameInfo(
65
+ num_distinct_actions=wrapped.num_distinct_actions(),
66
+ max_chance_outcomes=wrapped.max_chance_outcomes(),
67
+ num_players=wrapped.num_players(),
68
+ min_utility=wrapped.min_utility(),
69
+ max_utility=wrapped.max_utility(),
70
+ utility_sum=wrapped.utility_sum(),
71
+ max_game_length=wrapped.max_game_length(),
72
+ )
73
+ super().__init__(
74
+ _game_type(wrapped.get_type(), **kwargs),
75
+ game_info,
76
+ wrapped.get_parameters(),
77
+ )
78
+ self.__wrapped__ = wrapped
79
+
80
+ def new_initial_state(self, from_string: str | None = None) -> State:
81
+ args = () if from_string is None else (from_string)
82
+ return State(wrapped=self.__wrapped__.new_initial_state(*args), game=self)
83
+
84
+ def max_chance_nodes_in_history(self) -> int:
85
+ return self.__wrapped__.max_chance_nodes_in_history()
86
+
87
+ def make_py_observer(
88
+ self,
89
+ iig_obs_type: pyspiel.IIGObservationType | None = None,
90
+ params: dict[str, Any] | None = None,
91
+ ) -> pyspiel.Observer:
92
+ return _Observation(
93
+ observation.make_observation(self.__wrapped__, iig_obs_type, params)
94
+ )
95
+
96
+
97
+ class _Observation(observation._Observation): # pylint: disable=protected-access
98
+ """_Observation proxy that passes the wrapped state to the observation."""
99
+
100
+ def __init__(self, wrapped: observation._Observation):
101
+ self.__wrapped__ = wrapped
102
+ self.dict = self.__wrapped__.dict
103
+ self.tensor = self.__wrapped__.tensor
104
+
105
+ def set_from(self, state: State, player: int):
106
+ self.__wrapped__.set_from(state.__wrapped__, player)
107
+
108
+ def string_from(self, state: State, player: int) -> str | None:
109
+ return self.__wrapped__.string_from(state.__wrapped__, player)
110
+
111
+ def compress(self) -> Any:
112
+ return self.__wrapped__.compress()
113
+
114
+ def decompress(self, compressed_observation: Any):
115
+ self.__wrapped__.decompress(compressed_observation)
116
+
117
+
118
+ def _game_type(game_type: pyspiel.GameType, **overrides) -> pyspiel.GameType:
119
+ """Returns a GameType with the given overrides."""
120
+ kwargs = dict(
121
+ short_name=game_type.short_name,
122
+ long_name=game_type.long_name,
123
+ dynamics=game_type.dynamics,
124
+ chance_mode=game_type.chance_mode,
125
+ information=game_type.information,
126
+ utility=game_type.utility,
127
+ reward_model=game_type.reward_model,
128
+ max_num_players=game_type.max_num_players,
129
+ min_num_players=game_type.min_num_players,
130
+ provides_information_state_string=game_type.provides_information_state_string,
131
+ provides_information_state_tensor=game_type.provides_information_state_tensor,
132
+ provides_observation_string=game_type.provides_observation_string,
133
+ provides_observation_tensor=game_type.provides_observation_tensor,
134
+ parameter_specification=game_type.parameter_specification,
135
+ default_loadable=game_type.default_loadable,
136
+ provides_factored_observation_string=game_type.provides_factored_observation_string,
137
+ )
138
+ kwargs.update(**overrides)
139
+ return pyspiel.GameType(**kwargs)
@@ -0,0 +1,64 @@
1
+ """Proxy tests."""
2
+
3
+ from . import proxy
4
+ from absl.testing import absltest
5
+ from absl.testing import parameterized
6
+ import pyspiel
7
+
8
+
9
+ def make_game() -> proxy.Game:
10
+ return proxy.Game(pyspiel.load_game('tic_tac_toe()'))
11
+
12
+
13
+ class TestState(proxy.State):
14
+
15
+ def __str__(self) -> str:
16
+ return 'TestState: ' + super().__str__()
17
+
18
+
19
+ class TestGame(proxy.Game):
20
+
21
+ def new_initial_state(self, *args, **kwargs) -> TestState:
22
+ return TestState(
23
+ self.__wrapped__.new_initial_state(*args, **kwargs), game=self
24
+ )
25
+
26
+
27
+ class ProxiesTest(parameterized.TestCase):
28
+
29
+ def test_types(self):
30
+ game = make_game()
31
+ self.assertIsInstance(game, pyspiel.Game)
32
+ state = game.new_initial_state()
33
+ self.assertIsInstance(state, pyspiel.State)
34
+
35
+ def test_get_game(self):
36
+ game = make_game()
37
+ state = game.new_initial_state()
38
+ self.assertIsInstance(state.get_game(), proxy.Game)
39
+ new_state = state.get_game().new_initial_state()
40
+ self.assertIsInstance(new_state, proxy.State)
41
+ self.assertIsNot(new_state, state)
42
+
43
+ def test_clone(self):
44
+ game = make_game()
45
+ state = game.new_initial_state()
46
+ state.apply_action(state.legal_actions()[0])
47
+ clone = state.clone()
48
+ self.assertIsInstance(clone, proxy.State)
49
+ self.assertEqual(state.history(), clone.history())
50
+ clone.apply_action(clone.legal_actions()[0])
51
+ self.assertEqual(state.history(), clone.history()[:-1])
52
+
53
+ def test_subclassing(self):
54
+ game = TestGame(pyspiel.load_game('tic_tac_toe()'))
55
+ state = game.new_initial_state()
56
+ self.assertIsInstance(state, TestState)
57
+ self.assertIsInstance(state.clone(), TestState)
58
+ self.assertIsInstance(state.get_game(), TestGame)
59
+ wrapped_state = state.__wrapped__ # type: ignore
60
+ self.assertEqual(str(state), 'TestState: ' + str(wrapped_state))
61
+
62
+
63
+ if __name__ == '__main__':
64
+ absltest.main()
@@ -0,0 +1,18 @@
1
+ import sys
2
+ from kaggle_environments import make
3
+ from . import open_spiel as open_spiel_env
4
+
5
+
6
+ def test_envs_load():
7
+ envs = open_spiel_env._register_open_spiel_envs()
8
+ print(len(envs))
9
+
10
+
11
+ def test_tic_tac_toe_playthrough():
12
+ envs = open_spiel_env._register_open_spiel_envs(["tic_tac_toe"])
13
+ print(envs)
14
+ env = make("open_spiel_tic_tac_toe", debug=True)
15
+ env.run(["random", "random"])
16
+ json = env.toJSON()
17
+ assert json["name"] == "open_spiel_tic_tac_toe"
18
+ assert all([status == "DONE" for status in json["statuses"]])
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: kaggle-environments
3
- Version: 1.16.11
3
+ Version: 1.17.3
4
4
  Summary: Kaggle Environments
5
5
  Home-page: https://github.com/Kaggle/kaggle-environments
6
6
  Author: Kaggle
@@ -10,17 +10,29 @@ Keywords: Kaggle
10
10
  Requires-Python: >=3.8
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
- Requires-Dist: Chessnut >=0.4.1
14
- Requires-Dist: Flask >=1.1.2
15
- Requires-Dist: gymnasium ==0.29.0
16
- Requires-Dist: jsonschema >=3.0.1
17
- Requires-Dist: numpy >=1.19.5
18
- Requires-Dist: pettingzoo ==1.24.0
19
- Requires-Dist: requests >=2.25.1
20
- Requires-Dist: scipy >=1.11.2
21
- Requires-Dist: shimmy >=1.2.1
22
- Requires-Dist: stable-baselines3 ==2.1.0
23
- Requires-Dist: transformers >=4.33.1
13
+ Requires-Dist: jsonschema>=3.0.1
14
+ Requires-Dist: Flask>=1.1.2
15
+ Requires-Dist: numpy>=1.19.5
16
+ Requires-Dist: requests>=2.25.1
17
+ Requires-Dist: pettingzoo==1.24.0
18
+ Requires-Dist: gymnasium==0.29.0
19
+ Requires-Dist: stable-baselines3==2.1.0
20
+ Requires-Dist: transformers>=4.33.1
21
+ Requires-Dist: scipy>=1.11.2
22
+ Requires-Dist: shimmy>=1.2.1
23
+ Requires-Dist: Chessnut>=0.4.1
24
+ Requires-Dist: open_spiel>=1.5.0
25
+ Dynamic: author
26
+ Dynamic: author-email
27
+ Dynamic: description
28
+ Dynamic: description-content-type
29
+ Dynamic: home-page
30
+ Dynamic: keywords
31
+ Dynamic: license
32
+ Dynamic: license-file
33
+ Dynamic: requires-dist
34
+ Dynamic: requires-python
35
+ Dynamic: summary
24
36
 
25
37
  # [<img src="https://kaggle.com/static/images/site-logo.png" height="50" style="margin-bottom:-15px" />](https://kaggle.com) Environments
26
38
 
@@ -1,4 +1,4 @@
1
- kaggle_environments/__init__.py,sha256=aTT8xgR7BnpIGdkhn5vptp6y0a5dPlMvW5NEtq_T0gA,1683
1
+ kaggle_environments/__init__.py,sha256=rkTFEuN8ZVrkb3vR3ravIenS9gIZBIjcnlUoA_zi7ic,2189
2
2
  kaggle_environments/agent.py,sha256=j9rLnCK_Gy0eRIuvlJ9vcMh3vxn-Wvu-pjCpannOolc,6703
3
3
  kaggle_environments/api.py,sha256=eLBKqr11Ku4tdsMUdUqy74FIVEA_hdV3_QUpX84x3Z8,798
4
4
  kaggle_environments/core.py,sha256=IrEkN9cIA2djBAxI8Sz1GRpGNKjhqbnBdV6irAeTm8Q,27851
@@ -169,13 +169,13 @@ kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json,sha256=wgEUeFM0-XsUZRGNLd2OMrb
169
169
  kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py,sha256=8JT30NPZN5R__azfk0PDXeXlKw6S0KqxIbllVw8RYvM,5815
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
- kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py,sha256=EHfijkn3mtBOUKTL6uw9Wa1YiMdmiC04ZLSI4j9YR0Y,39787
172
+ kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py,sha256=zBsmV-G1bfIeyJC8eOq3VTlXXhZSm4uOWh6NG0hlpGk,40286
173
173
  kaggle_environments/envs/lux_ai_s3/luxai_s3/globals.py,sha256=cDPe9qJirhADf9V5Geftir8ccdXWSmGsmUD8KskJ8JU,281
174
- kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py,sha256=7StYyQcbKqJc-VstOtBDkE4FrL6YBee071jQeQ6e7xE,3009
174
+ kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py,sha256=-lMOd8OeRD_6jAINOByezPGoCSZVZVEIRSxj2BMM3ns,3179
175
175
  kaggle_environments/envs/lux_ai_s3/luxai_s3/profiler.py,sha256=DLwP5zAAyP-eNp6gtr81ketNvHQIfWJr-KLfJUwMiPo,5136
176
176
  kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py,sha256=ZMnGPFtDA8ysjuyW24ySwlnoQQp7Q8bIimIIVXjWD9Y,10843
177
177
  kaggle_environments/envs/lux_ai_s3/luxai_s3/spaces.py,sha256=BpEUN5NlgfBRnFglWZGxOx-pMtn0oAhYL3v7tON6UA0,951
178
- kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py,sha256=ldzNOD3EHjgE7lJ5uHQO8ObaO8VlMlWBAL_6FSKtYZk,17061
178
+ kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py,sha256=i2WO12f_D9n5z77GgdVxV_JwKCaXnmEfujkvsYPVA9U,18169
179
179
  kaggle_environments/envs/lux_ai_s3/luxai_s3/utils.py,sha256=v_wveZrwyRjkhRHC6a8_dFx5RlTBLrpOOpTPq79LC0k,267
180
180
  kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py,sha256=ec6VtDyOeKHa2khSZtcdIQ3JBl6J5IgPGvlVBLdrzyY,6282
181
181
  kaggle_environments/envs/lux_ai_s3/test_agents/python/agent.py,sha256=bL6ma6dax2w7KIE1YOS4h27xG_plu1eeo876mssAX5Q,3985
@@ -188,6 +188,17 @@ kaggle_environments/envs/mab/agents.py,sha256=vPHNN5oRcbTG3FaW9iYmoeQjufXFJMjYOL
188
188
  kaggle_environments/envs/mab/mab.js,sha256=zsKGVRL9qFyUoukRj-ES5dOh8Wig7UzNf0z5Potw84E,3256
189
189
  kaggle_environments/envs/mab/mab.json,sha256=VAlpjJ7_ytYO648swQW_ICjC5JKTAdmnShuGggeSX4A,2077
190
190
  kaggle_environments/envs/mab/mab.py,sha256=bkSIxkstS98Vr3eOA9kxQkseDqa1MlG2Egfzeaf-8EA,5241
191
+ kaggle_environments/envs/open_spiel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
+ kaggle_environments/envs/open_spiel/observation.py,sha256=yrJ_iZ9sBUTB6YOyEpKNwYiQEWmsPPtaDYtL4zsw1Ko,4834
193
+ kaggle_environments/envs/open_spiel/open_spiel.py,sha256=UMH_flpyKIBAyC40iU8HUip-COq9AqulBLjTuZujrik,14038
194
+ kaggle_environments/envs/open_spiel/proxy.py,sha256=8Shane4KWYKvbP9nV3l8VQfAFOfFSUrS78h_4xQthVM,4881
195
+ kaggle_environments/envs/open_spiel/proxy_test.py,sha256=QkmRo_uS0DgDDm2pbU2vwal5KOMCWKw92rC2_g3MziM,1837
196
+ kaggle_environments/envs/open_spiel/test_open_spiel.py,sha256=55oTMpGiK401rtZTiqKj5QBW0_UNYDdJqPF5YJyewUc,541
197
+ kaggle_environments/envs/open_spiel/games/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
+ kaggle_environments/envs/open_spiel/games/connect_four/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
+ kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js,sha256=sT8rVfjkyY_DUQSHpZUP7I7QEoJwa7Oq9H82wD7vnbQ,15440
200
+ kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py,sha256=2otG99felDYhNhWpsadbM9YUaHtrXqhV1GFNEHhuPwA,2348
201
+ kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy_test.py,sha256=vYn-QDPyRRigL8XdaHMN4FTO9zc1T9YB096HDGQH_T4,1870
191
202
  kaggle_environments/envs/rps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
203
  kaggle_environments/envs/rps/agents.py,sha256=iBtBjPbutWickm-K1EzBEYvLWj5fvU3ks0AYQMYWgEI,2140
193
204
  kaggle_environments/envs/rps/helpers.py,sha256=NUqhJafNSzlC_ArwDIYzbLx15pkmBpzfVuG8Iv4wX9U,966
@@ -201,9 +212,9 @@ kaggle_environments/envs/tictactoe/tictactoe.js,sha256=NZDT-oSG0a6a-rso9Ldh9qkJw
201
212
  kaggle_environments/envs/tictactoe/tictactoe.json,sha256=zMXZ8-fpT7FBhzz2FFBvRLn4XwtngjEqOieMvI6cCj8,1121
202
213
  kaggle_environments/envs/tictactoe/tictactoe.py,sha256=uq3sTHWNMg0dxX2v9pTbJAKM7fwerxQt7OQjCX96m-Y,3657
203
214
  kaggle_environments/static/player.html,sha256=XyVoe0XxMa2MO1fTDY_rjyjzPN-JZgbVwJIDoLSnlw0,23016
204
- kaggle_environments-1.16.11.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
205
- kaggle_environments-1.16.11.dist-info/METADATA,sha256=lZY_4hgG1gBRPGKLxBIB-vgsaCrQd9ASdjGFUQEYFXM,10700
206
- kaggle_environments-1.16.11.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
207
- kaggle_environments-1.16.11.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
208
- kaggle_environments-1.16.11.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
209
- kaggle_environments-1.16.11.dist-info/RECORD,,
215
+ kaggle_environments-1.17.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
216
+ kaggle_environments-1.17.3.dist-info/METADATA,sha256=3yV9E05vePRsHqStWawS_yKoWzNG59fK5Ak4sbpPAYU,10955
217
+ kaggle_environments-1.17.3.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
218
+ kaggle_environments-1.17.3.dist-info/entry_points.txt,sha256=HbVC-LKGQFV6lEEYBYyDTtrkHgdHJUWQ8_qt9KHGqz4,70
219
+ kaggle_environments-1.17.3.dist-info/top_level.txt,sha256=v3MMWIPMQFcI-WuF_dJngHWe9Bb2yH_6p4wat1x4gAc,20
220
+ kaggle_environments-1.17.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any