kaggle-environments 1.17.6__tar.gz → 1.17.8__tar.gz
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-1.17.6/kaggle_environments.egg-info → kaggle_environments-1.17.8}/PKG-INFO +1 -1
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/__init__.py +1 -1
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/chess/chess.js +27 -23
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/chess/chess.js +65 -28
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/open_spiel.py +86 -42
- kaggle_environments-1.17.8/kaggle_environments/envs/open_spiel/test_open_spiel.py +96 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/static/player.html +50 -13
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8/kaggle_environments.egg-info}/PKG-INFO +1 -1
- kaggle_environments-1.17.6/kaggle_environments/envs/open_spiel/test_open_spiel.py +0 -33
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/LICENSE +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/MANIFEST.in +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/README.md +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/agent.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/api.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/core.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/chess/chess.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/chess/chess.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/chess/test_chess.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/connectx/connectx.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/connectx/connectx.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/connectx/connectx.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/connectx/test_connectx.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/football/football.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/football/football.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/football/helpers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/football/test_football.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/halite.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/halite.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/halite.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/helpers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/halite/test_halite.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/hungry_geese/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/hungry_geese/hungry_geese.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/hungry_geese/hungry_geese.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/hungry_geese/hungry_geese.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/hungry_geese/test_hungry_geese.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/identity/identity.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/identity/identity.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/helpers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/kore_fleets.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/kore_fleets.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/kore_fleets.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/java/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/java/test/configuration.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/java/test/fullob.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/java/test/observation.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/python/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/python/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/Bot.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/DoNothingBot.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/MinerBot.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/interpreter.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Board.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Cell.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Configuration.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Direction.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Fleet.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/KoreIO.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Observation.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Pair.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Player.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Point.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Shipyard.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/ShipyardAction.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/miner.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/package.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/BoardTest.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ConfigurationTest.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ObservationTest.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/PointTest.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ShipyardTest.ts +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/configuration.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/fullob.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/starter_bots/ts/tsconfig.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/kore_fleets/test_kore_fleets.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/llm_20_questions/keywords.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/llm_20_questions/llm_20_questions.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/llm_20_questions/llm_20_questions.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/llm_20_questions/llm_20_questions.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/llm_20_questions/test_llm_20_questions.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/agents.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/dimensions/754.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/dimensions/main.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/index.html +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/lux_ai_2021.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/lux_ai_2021.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_objects.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/io.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/kit.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/map.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/parser.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/annotate.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/constants.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_map.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_objects.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/random_agent.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_agents/python/simple_agent.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_2021/test_lux.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/agents.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/index.html +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/lux_ai_s2.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/lux_ai_s2.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/actions.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/config.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/env.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/factory.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/globals.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map/bfs_deltas_gen.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map/board.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map/position.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/generator.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/symnoise.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/timing.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/visualize.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/map_generator/visualize_samples.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/pyvisual/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/pyvisual/visualizer.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/replay/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/replay/replay.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/spaces/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/spaces/act_space.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/spaces/obs_space.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/state/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/state/state.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/state/stats.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/state/typing.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/team.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/tools/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/tools/replay.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/unit.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/animate.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/heuristics/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/heuristics/bidding.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/heuristics/factory.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/heuristics/factory_placement.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/utils/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/version.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/wrappers/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/wrappers/controllers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/luxai_s2/wrappers/sb3.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/agent.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/cargo.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/config.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/factory.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/kit.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/team.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/unit.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/lux/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_agents/python/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s2/test_lux.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/agents.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/index.html +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/globals.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/profiler.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/spaces.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_agents/python/agent.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/kit.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_agents/python/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/lux_ai_s3/test_lux.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/mab/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/mab/agents.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/mab/mab.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/mab/mab.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/mab/mab.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/connect_four/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy_test.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/go/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/go/go.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/go/go_proxy.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/tic_tac_toe/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe_proxy.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/universal_poker/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker_proxy.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker_proxy_test.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/html_playthrough_generator.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/observation.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/proxy.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/open_spiel/proxy_test.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/__init__.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/agents.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/helpers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/rps.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/rps.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/rps.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/test_rps.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/rps/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/tictactoe/test_tictactoe.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/tictactoe/tictactoe.js +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/tictactoe/tictactoe.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/tictactoe/tictactoe.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/errors.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/helpers.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/main.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/schemas.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/status_codes.json +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/utils.py +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments.egg-info/SOURCES.txt +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments.egg-info/dependency_links.txt +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments.egg-info/entry_points.txt +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments.egg-info/requires.txt +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments.egg-info/top_level.txt +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/setup.cfg +0 -0
- {kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/setup.py +0 -0
{kaggle_environments-1.17.6 → kaggle_environments-1.17.8}/kaggle_environments/envs/chess/chess.js
RENAMED
|
@@ -4045,14 +4045,14 @@ async function renderer(context) {
|
|
|
4045
4045
|
|
|
4046
4046
|
// Create the Download PGN button
|
|
4047
4047
|
let downloadButton = parent.querySelector("#copy-pgn");
|
|
4048
|
-
if (!downloadButton) {
|
|
4048
|
+
if (!downloadButton && environment.steps.length) {
|
|
4049
4049
|
try {
|
|
4050
4050
|
const board = environment.steps[0][0].observation.board;
|
|
4051
4051
|
const info = environment.info;
|
|
4052
4052
|
const agent1 = info?.TeamNames?.[0] || "Agent 1";
|
|
4053
4053
|
const agent2 = info?.TeamNames?.[1] || "Agent 2";
|
|
4054
4054
|
const game = new Chess();
|
|
4055
|
-
let result = environment.rewards;
|
|
4055
|
+
let result = environment.rewards ?? [];
|
|
4056
4056
|
if (result.some((r) => r === undefined || r === null)) {
|
|
4057
4057
|
result = result.map((r) => (r === undefined || r === null ? 0 : 1));
|
|
4058
4058
|
}
|
|
@@ -4103,7 +4103,9 @@ async function renderer(context) {
|
|
|
4103
4103
|
downloadButton.style.top = "10px";
|
|
4104
4104
|
downloadButton.style.left = "10px";
|
|
4105
4105
|
downloadButton.style.zIndex = 1;
|
|
4106
|
-
|
|
4106
|
+
if(!environment.viewer) {
|
|
4107
|
+
parent.appendChild(downloadButton);
|
|
4108
|
+
}
|
|
4107
4109
|
|
|
4108
4110
|
downloadButton.addEventListener("click", async () => {
|
|
4109
4111
|
try {
|
|
@@ -4179,26 +4181,28 @@ async function renderer(context) {
|
|
|
4179
4181
|
}
|
|
4180
4182
|
}
|
|
4181
4183
|
// Draw the team names and game status
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4184
|
+
if (!environment.viewer) {
|
|
4185
|
+
const info = environment.info;
|
|
4186
|
+
const agent1 = info?.TeamNames?.[0] || "Agent 1";
|
|
4187
|
+
const agent2 = info?.TeamNames?.[1] || "Agent 2";
|
|
4188
|
+
const firstGame = environment.steps[step][0].observation.mark == "white";
|
|
4189
|
+
const fontSize = Math.round(0.33 * offset);
|
|
4190
|
+
c.font = `${fontSize}px sans-serif`;
|
|
4191
|
+
c.fillStyle = "#FFFFFF";
|
|
4192
|
+
const agent1Reward = environment.steps[step][0].reward;
|
|
4193
|
+
const agent2Reward = environment.steps[step][1].reward;
|
|
4194
|
+
const charCount = agent1.length + agent2.length + 12;
|
|
4195
|
+
const title = `${
|
|
4196
|
+
firstGame ? "\u25A0" : "\u25A1"
|
|
4197
|
+
}${agent1} (${agent1Reward}) vs ${
|
|
4198
|
+
firstGame ? "\u25A1" : "\u25A0"
|
|
4199
|
+
}${agent2} (${agent2Reward})`;
|
|
4200
|
+
c.fillText(
|
|
4201
|
+
title,
|
|
4202
|
+
offset + 4 * squareSize - Math.floor((charCount * fontSize) / 4),
|
|
4203
|
+
40
|
|
4204
|
+
);
|
|
4205
|
+
}
|
|
4202
4206
|
|
|
4203
4207
|
// Draw the Pieces
|
|
4204
4208
|
const board = environment.steps[step][0].observation.board;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function renderer(options) {
|
|
2
|
-
const { environment, step, parent,
|
|
2
|
+
const { environment, step, parent, width = 400, height = 400 } = options;
|
|
3
3
|
|
|
4
4
|
// Chess-specific constants
|
|
5
5
|
const DEFAULT_NUM_ROWS = 8;
|
|
@@ -28,6 +28,7 @@ function renderer(options) {
|
|
|
28
28
|
let currentMessageBoxElement = typeof document !== 'undefined' ? document.getElementById('messageBox') : null;
|
|
29
29
|
let currentRendererContainer = null;
|
|
30
30
|
let currentTitleElement = null;
|
|
31
|
+
let squareSize = 50;
|
|
31
32
|
|
|
32
33
|
function _showMessage(message, type = 'info', duration = 3000) {
|
|
33
34
|
if (typeof document === 'undefined' || !document.body) return;
|
|
@@ -74,25 +75,30 @@ function renderer(options) {
|
|
|
74
75
|
fontFamily: "'Inter', sans-serif"
|
|
75
76
|
});
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
if (!environment.viewer) {
|
|
79
|
+
currentTitleElement = document.createElement('h1');
|
|
80
|
+
currentTitleElement.textContent = 'Chess';
|
|
81
|
+
// Identical styling to the Connect Four renderer's title
|
|
82
|
+
Object.assign(currentTitleElement.style, {
|
|
81
83
|
fontSize: '1.875rem',
|
|
82
84
|
fontWeight: 'bold',
|
|
83
85
|
marginBottom: '1rem',
|
|
84
86
|
textAlign: 'center',
|
|
85
87
|
color: '#2563eb'
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
});
|
|
89
|
+
currentRendererContainer.appendChild(currentTitleElement);
|
|
90
|
+
}
|
|
91
|
+
parentElementToClear.appendChild(currentRendererContainer);
|
|
88
92
|
|
|
93
|
+
const smallestParentEdge = Math.min(width, height);
|
|
94
|
+
squareSize = Math.floor(smallestParentEdge / DEFAULT_NUM_COLS);
|
|
89
95
|
currentBoardElement = document.createElement('div');
|
|
90
96
|
Object.assign(currentBoardElement.style, {
|
|
91
97
|
display: 'grid',
|
|
92
|
-
gridTemplateColumns: `repeat(${cols},
|
|
93
|
-
gridTemplateRows: `repeat(${rows},
|
|
94
|
-
width: `${cols *
|
|
95
|
-
height: `${rows *
|
|
98
|
+
gridTemplateColumns: `repeat(${cols}, ${squareSize}px)`,
|
|
99
|
+
gridTemplateRows: `repeat(${rows}, ${squareSize}px)`,
|
|
100
|
+
width: `${cols * squareSize}px`,
|
|
101
|
+
height: `${rows * squareSize}px`,
|
|
96
102
|
border: '2px solid #333'
|
|
97
103
|
});
|
|
98
104
|
|
|
@@ -101,8 +107,8 @@ function renderer(options) {
|
|
|
101
107
|
const square = document.createElement('div');
|
|
102
108
|
square.id = `cell-${r}-${c}`;
|
|
103
109
|
Object.assign(square.style, {
|
|
104
|
-
width:
|
|
105
|
-
height:
|
|
110
|
+
width: `${squareSize}px`,
|
|
111
|
+
height: `${squareSize}px`,
|
|
106
112
|
backgroundColor: (r + c) % 2 === 0 ? LIGHT_SQUARE_COLOR : DARK_SQUARE_COLOR,
|
|
107
113
|
display: 'flex',
|
|
108
114
|
alignItems: 'center',
|
|
@@ -126,7 +132,9 @@ function renderer(options) {
|
|
|
126
132
|
maxWidth: '90vw',
|
|
127
133
|
marginTop: '20px'
|
|
128
134
|
});
|
|
129
|
-
|
|
135
|
+
if (!environment.viewer) {
|
|
136
|
+
currentRendererContainer.appendChild(statusContainer);
|
|
137
|
+
}
|
|
130
138
|
|
|
131
139
|
currentStatusTextElement = document.createElement('p');
|
|
132
140
|
Object.assign(currentStatusTextElement.style, {
|
|
@@ -144,14 +152,39 @@ function renderer(options) {
|
|
|
144
152
|
});
|
|
145
153
|
statusContainer.appendChild(currentWinnerTextElement);
|
|
146
154
|
|
|
147
|
-
parentElementToClear.appendChild(currentRendererContainer);
|
|
148
|
-
|
|
149
155
|
if (typeof document !== 'undefined' && !document.body.hasAttribute('data-renderer-initialized')) {
|
|
150
156
|
document.body.setAttribute('data-renderer-initialized', 'true');
|
|
151
157
|
}
|
|
152
158
|
return true;
|
|
153
159
|
}
|
|
154
160
|
|
|
161
|
+
// White is in position 1, Black is in position 0
|
|
162
|
+
function _getTeamNameForColor(color, teamNames) {
|
|
163
|
+
if (!teamNames || teamNames.length < 2) return null;
|
|
164
|
+
return color.toLowerCase() === 'white' ? teamNames[1] : teamNames[0];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function _deriveWinnerFromRewards(currentStepAgents, teamNames) {
|
|
168
|
+
if (!currentStepAgents || currentStepAgents.length < 2) return null;
|
|
169
|
+
|
|
170
|
+
const player0Reward = currentStepAgents[0].reward;
|
|
171
|
+
const player1Reward = currentStepAgents[1].reward;
|
|
172
|
+
|
|
173
|
+
if (player0Reward === player1Reward) {
|
|
174
|
+
return 'draw';
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const winnerPlayerIndex = player0Reward === 1 ? 0 : 1;
|
|
178
|
+
const color = winnerPlayerIndex === 0 ? 'Black' : 'White';
|
|
179
|
+
|
|
180
|
+
if (teamNames) {
|
|
181
|
+
const teamName = _getTeamNameForColor(color, teamNames);
|
|
182
|
+
return `${color} (${teamName})`;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return color.toLowerCase();
|
|
186
|
+
}
|
|
187
|
+
|
|
155
188
|
function _parseFen(fen) {
|
|
156
189
|
if (!fen || typeof fen !== 'string') return null;
|
|
157
190
|
|
|
@@ -204,8 +237,9 @@ function renderer(options) {
|
|
|
204
237
|
}
|
|
205
238
|
|
|
206
239
|
|
|
207
|
-
const { board, activeColor,
|
|
240
|
+
const { board, activeColor, isTerminal, winner } = gameStateToDisplay;
|
|
208
241
|
|
|
242
|
+
const pieceSize = Math.floor(squareSize * 0.9);
|
|
209
243
|
for (let r_data = 0; r_data < displayRows; r_data++) {
|
|
210
244
|
for (let c_data = 0; c_data < displayCols; c_data++) {
|
|
211
245
|
const piece = board[r_data][c_data];
|
|
@@ -213,8 +247,8 @@ function renderer(options) {
|
|
|
213
247
|
if (squareElement && piece) {
|
|
214
248
|
const pieceImg = document.createElement('img');
|
|
215
249
|
pieceImg.src = PIECE_SVG_URLS[piece];
|
|
216
|
-
pieceImg.style.width =
|
|
217
|
-
pieceImg.style.height =
|
|
250
|
+
pieceImg.style.width = `${pieceSize}px`;
|
|
251
|
+
pieceImg.style.height = `${pieceSize}px`;
|
|
218
252
|
squareElement.appendChild(pieceImg);
|
|
219
253
|
}
|
|
220
254
|
}
|
|
@@ -222,21 +256,23 @@ function renderer(options) {
|
|
|
222
256
|
|
|
223
257
|
currentStatusTextElement.innerHTML = '';
|
|
224
258
|
currentWinnerTextElement.innerHTML = '';
|
|
225
|
-
if (
|
|
259
|
+
if (isTerminal) {
|
|
226
260
|
currentStatusTextElement.textContent = "Game Over!";
|
|
227
261
|
if (winner) {
|
|
228
262
|
if (String(winner).toLowerCase() === 'draw') {
|
|
229
263
|
currentWinnerTextElement.textContent = "It's a Draw!";
|
|
230
264
|
} else {
|
|
231
|
-
|
|
232
|
-
currentWinnerTextElement.innerHTML = `Winner: <span style="font-weight: bold;">${winnerColor}</span>`;
|
|
265
|
+
currentWinnerTextElement.innerHTML = `Winner: <span style="font-weight: bold;">${winner}</span>`;
|
|
233
266
|
}
|
|
234
267
|
} else {
|
|
235
268
|
currentWinnerTextElement.textContent = "Game ended.";
|
|
236
269
|
}
|
|
237
270
|
} else {
|
|
238
|
-
|
|
239
|
-
|
|
271
|
+
const playerColor = String(activeColor).toLowerCase() === 'w' ? 'White' : 'Black';
|
|
272
|
+
const teamName = _getTeamNameForColor(playerColor, environment.info?.TeamNames);
|
|
273
|
+
const currentPlayerText = teamName ? `${playerColor} (${teamName})` : playerColor;
|
|
274
|
+
|
|
275
|
+
currentStatusTextElement.innerHTML = `Current Player: <span style="font-weight: bold;">${currentPlayerText}</span>`;
|
|
240
276
|
}
|
|
241
277
|
}
|
|
242
278
|
|
|
@@ -278,11 +314,12 @@ function renderer(options) {
|
|
|
278
314
|
const fen = observationForRenderer.observationString;
|
|
279
315
|
const parsedFen = _parseFen(fen);
|
|
280
316
|
if (parsedFen) {
|
|
281
|
-
|
|
317
|
+
const winner = observationForRenderer.isTerminal ?
|
|
318
|
+
_deriveWinnerFromRewards(currentStepAgents, environment.info?.TeamNames) : null;
|
|
282
319
|
gameSpecificState = {
|
|
283
320
|
...parsedFen,
|
|
284
|
-
|
|
285
|
-
winner:
|
|
321
|
+
isTerminal: observationForRenderer.isTerminal,
|
|
322
|
+
winner: winner
|
|
286
323
|
};
|
|
287
324
|
}
|
|
288
325
|
} catch (e) {
|
|
@@ -291,4 +328,4 @@ function renderer(options) {
|
|
|
291
328
|
}
|
|
292
329
|
|
|
293
330
|
_renderBoardDisplay(gameSpecificState, DEFAULT_NUM_ROWS, DEFAULT_NUM_COLS);
|
|
294
|
-
}
|
|
331
|
+
}
|
|
@@ -19,6 +19,7 @@ DONE = "DONE"
|
|
|
19
19
|
INACTIVE = "INACTIVE"
|
|
20
20
|
ACTIVE = "ACTIVE"
|
|
21
21
|
TIMEOUT = "TIMEOUT"
|
|
22
|
+
INVALID = "INVALID"
|
|
22
23
|
|
|
23
24
|
_log = logging.getLogger(__name__)
|
|
24
25
|
_log.setLevel(logging.INFO)
|
|
@@ -41,8 +42,16 @@ for proxy_file in GAMES_DIR.glob("**/*_proxy.py"):
|
|
|
41
42
|
|
|
42
43
|
|
|
43
44
|
# --- Constants ---
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
# TODO(jhtschultz): Make this configurable per-game. For instance, in poker, a
|
|
46
|
+
# invalid action would likely result in a fold, forfeiting the player's
|
|
47
|
+
# contribution to the pot.
|
|
48
|
+
DEFAULT_INVALID_ACTION_REWARD = -1
|
|
49
|
+
|
|
50
|
+
# Can be used by agents to signal an internal error to the environement.
|
|
51
|
+
AGENT_ERROR_ACTION = -2
|
|
52
|
+
|
|
53
|
+
DEFAULT_ACT_TIMEOUT = 60 * 60 # sixty minutes
|
|
54
|
+
DEFAULT_RUN_TIMEOUT = 60 * 60 * 30 # thirty hours
|
|
46
55
|
# Buffer in addition to max game length to account for timeouts, retrys, etc.
|
|
47
56
|
DEFAULT_STEP_BUFFER = 100
|
|
48
57
|
# TODO(jhtschultz): Add individual game descriptions.
|
|
@@ -71,6 +80,11 @@ CONFIGURATION_SPEC_TEMPLATE = {
|
|
|
71
80
|
"type": "object",
|
|
72
81
|
"default": {}
|
|
73
82
|
},
|
|
83
|
+
"metadata": {
|
|
84
|
+
"description": "Arbitrary metadata.",
|
|
85
|
+
"type": "object",
|
|
86
|
+
"default": {}
|
|
87
|
+
},
|
|
74
88
|
}
|
|
75
89
|
|
|
76
90
|
OBSERVATION_SPEC_TEMPLATE = {
|
|
@@ -113,6 +127,10 @@ OBSERVATION_SPEC_TEMPLATE = {
|
|
|
113
127
|
"description": "Boolean indicating game end.",
|
|
114
128
|
"type": "boolean"
|
|
115
129
|
},
|
|
130
|
+
"serializedGameAndState": {
|
|
131
|
+
"description": "Enables reconstructing the Game and State objects.",
|
|
132
|
+
"type": "string"
|
|
133
|
+
},
|
|
116
134
|
"remainingOverageTime": 60,
|
|
117
135
|
"step": 0
|
|
118
136
|
},
|
|
@@ -171,19 +189,6 @@ def interpreter(
|
|
|
171
189
|
os_game = env.os_game
|
|
172
190
|
os_state = env.os_state
|
|
173
191
|
num_players = os_game.num_players()
|
|
174
|
-
statuses = [
|
|
175
|
-
kaggle_state[player_id].status for player_id in range(num_players)
|
|
176
|
-
]
|
|
177
|
-
if not any(status == ACTIVE for status in statuses):
|
|
178
|
-
for player_id in range(num_players):
|
|
179
|
-
p = kaggle_state[player_id]
|
|
180
|
-
if p.status in [ERROR, TIMEOUT]:
|
|
181
|
-
# TODO: properly set the reward per game
|
|
182
|
-
p.reward = -1
|
|
183
|
-
elif p.status in [INACTIVE]:
|
|
184
|
-
p.reward = 1
|
|
185
|
-
p.status = DONE
|
|
186
|
-
return;
|
|
187
192
|
|
|
188
193
|
# TODO(jhtschultz): Test reset behavior.
|
|
189
194
|
is_initial_step = len(env.steps) == 1
|
|
@@ -193,31 +198,36 @@ def interpreter(
|
|
|
193
198
|
|
|
194
199
|
# --- Apply agent action ---
|
|
195
200
|
acting_agent = os_state.current_player()
|
|
196
|
-
action_submitted = None
|
|
197
|
-
|
|
201
|
+
action_submitted: int | None = None
|
|
202
|
+
action_submitted_to_string: str | None = None
|
|
203
|
+
action_applied: int | None = None
|
|
204
|
+
move_duration: float | None = None
|
|
198
205
|
if is_initial_step:
|
|
199
206
|
pass
|
|
200
207
|
elif 0 <= acting_agent < num_players:
|
|
201
|
-
if kaggle_state[acting_agent]
|
|
208
|
+
if kaggle_state[acting_agent]["status"] != "ACTIVE":
|
|
202
209
|
pass
|
|
203
210
|
else:
|
|
204
|
-
action_submitted = kaggle_state[acting_agent]
|
|
211
|
+
action_submitted = kaggle_state[acting_agent]["action"]["submission"]
|
|
205
212
|
if action_submitted in os_state.legal_actions():
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
kaggle_state[acting_agent].status = "ERROR"
|
|
214
|
-
else:
|
|
215
|
-
kaggle_state[acting_agent].status = "INVALID"
|
|
216
|
-
if "duration" in logs[acting_agent]:
|
|
217
|
-
move_duration = round(logs[acting_agent]["duration"], 3)
|
|
218
|
-
env.info["moveDurations"].append(move_duration)
|
|
213
|
+
action_submitted_to_string = os_state.action_to_string(action_submitted)
|
|
214
|
+
os_state.apply_action(action_submitted)
|
|
215
|
+
action_applied = action_submitted
|
|
216
|
+
env.info['actionHistory'].append(str(action_applied))
|
|
217
|
+
env.info['stateHistory'].append(str(os_state))
|
|
218
|
+
elif action_submitted == AGENT_ERROR_ACTION:
|
|
219
|
+
kaggle_state[acting_agent]["status"] = "ERROR"
|
|
219
220
|
else:
|
|
220
|
-
|
|
221
|
+
kaggle_state[acting_agent]["status"] = "INVALID"
|
|
222
|
+
try:
|
|
223
|
+
if "duration" in logs[acting_agent]:
|
|
224
|
+
move_duration = round(logs[acting_agent]["duration"], 3)
|
|
225
|
+
env.info["moveDurations"].append(move_duration)
|
|
226
|
+
else:
|
|
227
|
+
env.info["moveDurations"].append(None)
|
|
228
|
+
except Exception:
|
|
229
|
+
pass # No logs when stepping the env manually.
|
|
230
|
+
|
|
221
231
|
elif acting_agent == pyspiel.PlayerId.SIMULTANEOUS:
|
|
222
232
|
raise NotImplementedError
|
|
223
233
|
elif acting_agent == pyspiel.PlayerId.TERMINAL:
|
|
@@ -236,10 +246,36 @@ def interpreter(
|
|
|
236
246
|
env.info['stateHistory'].append(str(os_state))
|
|
237
247
|
|
|
238
248
|
# --- Update agent states ---
|
|
249
|
+
agent_error = any(
|
|
250
|
+
kaggle_state[player_id]["status"] in ["TIMEOUT", "ERROR"]
|
|
251
|
+
for player_id in range(num_players)
|
|
252
|
+
)
|
|
253
|
+
if agent_error:
|
|
254
|
+
_log.info("AGENT ERROR DETECTED")
|
|
255
|
+
|
|
256
|
+
invalid_action = any(
|
|
257
|
+
kaggle_state[player_id]["status"] == "INVALID"
|
|
258
|
+
for player_id in range(num_players)
|
|
259
|
+
)
|
|
260
|
+
if invalid_action:
|
|
261
|
+
_log.info("INVALID ACTION DETECTED")
|
|
262
|
+
|
|
263
|
+
status: str | None = None
|
|
239
264
|
for player_id, agent_state in enumerate(kaggle_state):
|
|
240
265
|
reward = None
|
|
241
|
-
if
|
|
242
|
-
|
|
266
|
+
if agent_error:
|
|
267
|
+
# Set all agent statuses to ERROR in order not to score episode. Preserve
|
|
268
|
+
# TIMEOUT which has the same effect.
|
|
269
|
+
if agent_state["status"] == "TIMEOUT":
|
|
270
|
+
status = "TIMEOUT"
|
|
271
|
+
else:
|
|
272
|
+
status = "ERROR"
|
|
273
|
+
elif invalid_action:
|
|
274
|
+
if agent_state["status"] == "INVALID":
|
|
275
|
+
reward = DEFAULT_INVALID_ACTION_REWARD
|
|
276
|
+
else:
|
|
277
|
+
reward = -DEFAULT_INVALID_ACTION_REWARD
|
|
278
|
+
status = "DONE"
|
|
243
279
|
elif os_state.is_terminal():
|
|
244
280
|
status = "DONE"
|
|
245
281
|
reward = os_state.returns()[player_id]
|
|
@@ -251,11 +287,17 @@ def interpreter(
|
|
|
251
287
|
)
|
|
252
288
|
else:
|
|
253
289
|
status = "INACTIVE"
|
|
290
|
+
assert status is not None
|
|
254
291
|
|
|
255
292
|
info_dict = {}
|
|
256
293
|
if acting_agent == player_id:
|
|
257
294
|
info_dict["actionSubmitted"] = action_submitted
|
|
295
|
+
info_dict["actionSubmittedToString"] = action_submitted_to_string
|
|
258
296
|
info_dict["actionApplied"] = action_applied
|
|
297
|
+
info_dict["timeTaken"] = move_duration
|
|
298
|
+
info_dict[
|
|
299
|
+
"agentSelfReportedStatus"
|
|
300
|
+
] = kaggle_state[acting_agent]["action"].get("status") if kaggle_state[acting_agent]["action"] else "unknown"
|
|
259
301
|
|
|
260
302
|
obs_update_dict = {
|
|
261
303
|
"observationString": os_state.observation_string(player_id),
|
|
@@ -267,14 +309,17 @@ def interpreter(
|
|
|
267
309
|
"currentPlayer": os_state.current_player(),
|
|
268
310
|
"playerId": player_id,
|
|
269
311
|
"isTerminal": os_state.is_terminal(),
|
|
312
|
+
"serializedGameAndState": pyspiel.serialize_game_and_state(
|
|
313
|
+
os_game, os_state
|
|
314
|
+
),
|
|
270
315
|
}
|
|
271
316
|
|
|
272
317
|
# Apply updates
|
|
273
318
|
for k, v in obs_update_dict.items():
|
|
274
319
|
setattr(agent_state.observation, k, v)
|
|
275
|
-
agent_state
|
|
276
|
-
agent_state
|
|
277
|
-
agent_state
|
|
320
|
+
agent_state["reward"] = reward
|
|
321
|
+
agent_state["info"] = info_dict
|
|
322
|
+
agent_state["status"] = status
|
|
278
323
|
|
|
279
324
|
return kaggle_state
|
|
280
325
|
|
|
@@ -400,14 +445,13 @@ def _build_env(game_string: str) -> dict[str, Any]:
|
|
|
400
445
|
env_spec["title"] = f"Open Spiel: {short_name}"
|
|
401
446
|
env_spec["agents"] = [game.num_players()]
|
|
402
447
|
|
|
403
|
-
env_config =
|
|
404
|
-
env_spec["configuration"] = env_config
|
|
448
|
+
env_config = env_spec["configuration"]
|
|
405
449
|
env_config["episodeSteps"] = game.max_history_length() + DEFAULT_STEP_BUFFER
|
|
406
450
|
env_config["openSpielGameString"]["default"] = str(game)
|
|
407
451
|
env_config["openSpielGameName"]["default"] = short_name
|
|
452
|
+
env_config["openSpielGameParameters"]["default"] = game.get_parameters()
|
|
408
453
|
|
|
409
|
-
env_obs =
|
|
410
|
-
env_spec["observation"] = env_obs
|
|
454
|
+
env_obs = env_spec["observation"]
|
|
411
455
|
env_obs["properties"]["openSpielGameString"]["default"] = str(game)
|
|
412
456
|
env_obs["properties"]["openSpielGameName"]["default"] = short_name
|
|
413
457
|
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
from absl.testing import absltest
|
|
2
|
+
import sys
|
|
3
|
+
from kaggle_environments import make
|
|
4
|
+
import pyspiel
|
|
5
|
+
from . import open_spiel as open_spiel_env
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Expected that not all pyspiel registered games can be registered as Kaggle
|
|
9
|
+
# envs (e.g. does not yet support simultaneous move games), but should register
|
|
10
|
+
# at least this many
|
|
11
|
+
_REGISTERED_GAMES_THRESHOLD = 50
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class OpenSpielEnvTest(absltest.TestCase):
|
|
15
|
+
|
|
16
|
+
def test_envs_load(self):
|
|
17
|
+
envs = open_spiel_env._register_game_envs(
|
|
18
|
+
[game_type.short_name for game_type in pyspiel.registered_games()]
|
|
19
|
+
)
|
|
20
|
+
self.assertTrue(len(envs) > _REGISTERED_GAMES_THRESHOLD)
|
|
21
|
+
|
|
22
|
+
def test_tic_tac_toe_agent_playthrough(self):
|
|
23
|
+
envs = open_spiel_env._register_game_envs(["tic_tac_toe"])
|
|
24
|
+
env = make("open_spiel_tic_tac_toe", debug=True)
|
|
25
|
+
env.run(["random", "random"])
|
|
26
|
+
json = env.toJSON()
|
|
27
|
+
self.assertEqual(json["name"], "open_spiel_tic_tac_toe")
|
|
28
|
+
self.assertTrue(all([status == "DONE" for status in json["statuses"]]))
|
|
29
|
+
|
|
30
|
+
def test_tic_tac_toe_manual_playthrough(self):
|
|
31
|
+
envs = open_spiel_env._register_game_envs(["tic_tac_toe"])
|
|
32
|
+
env = make("open_spiel_tic_tac_toe", debug=True)
|
|
33
|
+
env.reset()
|
|
34
|
+
env.step([{"submission": -1}, {"submission": -1}]) # Initial setup step.
|
|
35
|
+
env.step([{"submission": 0}, {"submission": -1}])
|
|
36
|
+
env.step([{"submission": -1}, {"submission": 1}])
|
|
37
|
+
env.step([{"submission": 3}, {"submission": -1}])
|
|
38
|
+
env.step([{"submission": -1}, {"submission": 4}])
|
|
39
|
+
env.step([{"submission": 6}, {"submission": -1}])
|
|
40
|
+
self.assertTrue(env.done)
|
|
41
|
+
self.assertEqual(env.toJSON()["rewards"], [1, -1])
|
|
42
|
+
|
|
43
|
+
def test_invalid_action(self):
|
|
44
|
+
envs = open_spiel_env._register_game_envs(["tic_tac_toe"])
|
|
45
|
+
env = make("open_spiel_tic_tac_toe", debug=True)
|
|
46
|
+
env.reset()
|
|
47
|
+
for i in range(5): # Try repeatedly applying an illegal action
|
|
48
|
+
env.step([
|
|
49
|
+
{"submission": pyspiel.INVALID_ACTION},
|
|
50
|
+
{"submission": pyspiel.INVALID_ACTION},
|
|
51
|
+
])
|
|
52
|
+
if env.done:
|
|
53
|
+
break
|
|
54
|
+
self.assertEqual(i, 1) # Zeroth step is setup step, should fail next step.
|
|
55
|
+
json = env.toJSON()
|
|
56
|
+
self.assertTrue(all([status == "DONE" for status in json["statuses"]]))
|
|
57
|
+
self.assertEqual(
|
|
58
|
+
json["rewards"],
|
|
59
|
+
[
|
|
60
|
+
open_spiel_env.DEFAULT_INVALID_ACTION_REWARD,
|
|
61
|
+
-open_spiel_env.DEFAULT_INVALID_ACTION_REWARD,
|
|
62
|
+
]
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
def test_serialized_game_and_state(self):
|
|
66
|
+
envs = open_spiel_env._register_game_envs(["tic_tac_toe"])
|
|
67
|
+
env = make("open_spiel_tic_tac_toe", debug=True)
|
|
68
|
+
env.reset()
|
|
69
|
+
env.step([{"submission": -1}, {"submission": -1}]) # Initial setup step.
|
|
70
|
+
kaggle_state = env.step([{"submission": 0}, {"submission": -1}])
|
|
71
|
+
serialize_game_and_state = kaggle_state[1]["observation"]["serializedGameAndState"]
|
|
72
|
+
game, state = pyspiel.deserialize_game_and_state(serialize_game_and_state)
|
|
73
|
+
self.assertEqual(game.get_type().short_name, "tic_tac_toe_proxy")
|
|
74
|
+
self.assertEqual(state.history(), [0])
|
|
75
|
+
|
|
76
|
+
def test_agent_error(self):
|
|
77
|
+
envs = open_spiel_env._register_game_envs(["tic_tac_toe"])
|
|
78
|
+
env = make("open_spiel_tic_tac_toe", debug=True)
|
|
79
|
+
env.reset()
|
|
80
|
+
# Setup step
|
|
81
|
+
env.step([
|
|
82
|
+
{"submission": pyspiel.INVALID_ACTION},
|
|
83
|
+
{"submission": pyspiel.INVALID_ACTION},
|
|
84
|
+
])
|
|
85
|
+
env.step([
|
|
86
|
+
{"submission": open_spiel_env.AGENT_ERROR_ACTION},
|
|
87
|
+
{"submission": pyspiel.INVALID_ACTION},
|
|
88
|
+
])
|
|
89
|
+
self.assertTrue(env.done)
|
|
90
|
+
json = env.toJSON()
|
|
91
|
+
self.assertEqual(json["rewards"], [None, None])
|
|
92
|
+
self.assertEqual(json["statuses"], ["ERROR", "ERROR"])
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if __name__ == '__main__':
|
|
96
|
+
absltest.main()
|