-
Notifications
You must be signed in to change notification settings - Fork 0
/
wrapper.py
106 lines (86 loc) · 2.75 KB
/
wrapper.py
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/python -u
import sys
import player
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
sys.stderr.flush()
# gtp coords are letters *** except I ***, number (from lower left)
board_letters = "abcdefghjklmnopqrstuvwxyz"
# note that sgf uses two letters from upper left, and includes I
sgf_letters = "abcdefghijklmnopqrstuvwxyz"
class Wrapper(object):
def __init__(self, player):
self.size = 19
self.komi_val = 6.5
self.player = player
def boardsize(self, arg):
self.size = int(arg)
assert self.size == self.player.size()
print("=")
def clear_board(self):
self.player.clear()
print("=")
def set_free_handicap(self, *args):
for loc in args:
self.player.move("B", loc)
print("=")
def komi(self, arg):
self.komi_val = float(arg)
print("=")
def play(self, colorname, xy):
c = "B" if colorname.lower().startswith('b') else "W"
self.player.move(c, xy)
print("=")
def genmove(self, arg):
result = self.player.genmove("B" if arg.lower().startswith('b') else "W")
eprint("RECEIVED from genmove %s\n" % result)
if result.strip() == "pass":
print("= pass")
elif result.strip() == "resign":
print("= resign")
else:
x, y = result.strip().split(' ')
tosend = "= %s%d" % (board_letters[int(x) - 1], int(y))
eprint("SENDING " + tosend + "\n")
print(tosend)
sys.stdout.flush()
def showboard(self):
print("= ")
def name(self):
print("= Resnet32")
def protocol_version(self):
print("= 2")
def version(self):
print("= 0.1.12")
def command_list(self):
for s in ["boardsize",
"clear_board",
"genmove",
"list_commands",
"name",
"play",
"protocol_version",
"set_free_handicap",
"showboard",
"komi",
"version"]:
print(s)
def __call__(self, command_str):
parts = command_str.split(" ")
command = parts[0]
args = parts[1:]
eprint((command_str, command, args))
if hasattr(self, command):
getattr(self, command)(*args)
print("")
else:
print("? Unknown command: %s" % command)
sys.exit(0)
if __name__ == "__main__":
wrapper = Wrapper(player.Player(sys.argv[1]))
sys.stderr.write("STARTING WRAPPER\n")
while True:
l = sys.stdin.readline()
sys.stderr.write("received command " + l)
sys.stderr.flush()
wrapper(l.strip())