File size: 2,756 Bytes
9d760aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from __future__ import annotations
import shutil
from pathlib import Path
import textarena
import textarena.envs.registration as _reg
from textarena.wrappers import LLMObservationWrapper, ActionFormattingWrapper, GameMessagesAndCurrentBoardObservationWrapper, GameMessagesObservationWrapper, GameBoardObservationWrapper, ClipCharactersActionWrapper, SettlersOfCatanObservationWrapper


def get_textarena_env_dir() -> Path:
    ta_root = Path(textarena.__file__).resolve().parent
    env_root = ta_root / "envs"
    if env_root.exists():
        return env_root
    
def install_strategos():
    stratego_directory = Path(__file__).resolve().parent
    src_dir = stratego_directory / "env" / "backup" / "edited_env"
    # reg = src_dir / "__init__.txt"
    
    for path in ["Stratego", "StrategoDuel", "StrategoCustom"]:
        env = src_dir / path / "env.py"
        init = src_dir / path / "__init__.py"
        if not env.exists():
            raise FileNotFoundError(f"{env} file not found!")
        if not init.exists():
            raise FileNotFoundError(f"{init} file not found!")
        ta_dir = get_textarena_env_dir()
        dst_dir = ta_dir / path
        dst_dir.mkdir(parents=True, exist_ok=True)
        dst_env = dst_dir / "env.py"
        shutil.copy2(env, dst_env)
        dst_init = dst_dir / "__init__.py"
        shutil.copy2(init, dst_init)
        print(f"{path} env installed!")
    
    ta_init = ta_dir / "__init__.py"
    if not ta_init.exists():
        raise FileNotFoundError("Init file of textarena env is not found!")
    
    # registration_code = reg.read_text(encoding="utf-8")
    
    # marker = "#--- Initializing StrategoDuel ---#"
    # if marker in ta_init.read_text(encoding="utf-8"):
    #     print("Stratego duel arleady exists in init file")
    #     return
    
    # with ta_init.open("a", encoding="utf-8") as f:
    #     f.write("\n\n" + marker + "\n")
    #     f.write(registration_code + "\n")
    DEFAULT_WRAPPERS = [LLMObservationWrapper, ActionFormattingWrapper]
    BOARDGAME_WRAPPERS = [GameMessagesAndCurrentBoardObservationWrapper, ActionFormattingWrapper]
    try:
        _reg.register_with_versions(id="Stratego-duel", entry_point="textarena.envs.StrategoDuel.env:StrategoDuelEnv", wrappers={"default": DEFAULT_WRAPPERS, "-train": BOARDGAME_WRAPPERS})
        _reg.register_with_versions(id="Stratego-custom", entry_point="textarena.envs.StrategoCustom.env:StrategoCustomEnv", wrappers={"default": DEFAULT_WRAPPERS, "-train": BOARDGAME_WRAPPERS})
        print("Stratego Games are newly registered!")
    except ValueError:
        print("Stratego Games are already registered!")
        pass
def main():
    install_strategos()