Skip to content

Commit db28cd4

Browse files
committed
Do not fully initialize tables in constructor
1 parent 7c130a5 commit db28cd4

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

chess/syzygy.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ def __init__(self):
422422
class Table(object):
423423

424424
def __init__(self, directory, filename, suffix):
425+
self.directory = directory
426+
self.filename = filename
427+
self.suffix = suffix
428+
425429
self.fd = os.open(os.path.join(directory, filename) + suffix, os.O_RDONLY | os.O_BINARY if hasattr(os, "O_BINARY") else os.O_RDONLY)
426430
self.data = mmap.mmap(self.fd, 0, access=mmap.ACCESS_READ)
427431

@@ -865,7 +869,11 @@ def __exit__(self, type, value, traceback):
865869
class WdlTable(Table):
866870
def __init__(self, directory, filename):
867871
super(WdlTable, self).__init__(directory, filename, ".rtbw")
868-
self.init_table_wdl()
872+
873+
assert WDL_MAGIC[0] == self.read_ubyte(0)
874+
assert WDL_MAGIC[1] == self.read_ubyte(1)
875+
assert WDL_MAGIC[2] == self.read_ubyte(2)
876+
assert WDL_MAGIC[3] == self.read_ubyte(3)
869877

870878
def init_table_wdl(self):
871879
self.tb_size = [0 for _ in range(8)]
@@ -890,11 +898,6 @@ def init_table_wdl(self):
890898
self._flags = None
891899
self.flags = None
892900

893-
assert WDL_MAGIC[0] == self.read_ubyte(0)
894-
assert WDL_MAGIC[1] == self.read_ubyte(1)
895-
assert WDL_MAGIC[2] == self.read_ubyte(2)
896-
assert WDL_MAGIC[3] == self.read_ubyte(3)
897-
898901
split = self.read_ubyte(4) & 0x01
899902
files = 4 if self.read_ubyte(4) & 0x02 else 1
900903

@@ -1068,7 +1071,11 @@ class DtzTable(Table):
10681071

10691072
def __init__(self, directory, filename):
10701073
super(DtzTable, self).__init__(directory, filename, ".rtbz")
1071-
self.init_table_dtz()
1074+
1075+
assert DTZ_MAGIC[0] == self.read_ubyte(0)
1076+
assert DTZ_MAGIC[1] == self.read_ubyte(1)
1077+
assert DTZ_MAGIC[2] == self.read_ubyte(2)
1078+
assert DTZ_MAGIC[3] == self.read_ubyte(3)
10721079

10731080
def init_table_dtz(self):
10741081
self.factor = [0, 0, 0, 0, 0, 0]
@@ -1077,11 +1084,6 @@ def init_table_dtz(self):
10771084
self.size = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
10781085
self.files = [PawnFileDataDtz() for f in range(4)]
10791086

1080-
assert DTZ_MAGIC[0] == self.read_ubyte(0)
1081-
assert DTZ_MAGIC[1] == self.read_ubyte(1)
1082-
assert DTZ_MAGIC[2] == self.read_ubyte(2)
1083-
assert DTZ_MAGIC[3] == self.read_ubyte(3)
1084-
10851087
files = 4 if self.read_ubyte(4) & 0x02 else 1
10861088

10871089
p_data = 5
@@ -1281,6 +1283,9 @@ def open_directory(self, directory, load_wdl=True, load_dtz=True):
12811283
wdl_table = WdlTable(directory, filename)
12821284
if wdl_table.key in self.wdl:
12831285
self.wdl[wdl_table.key].close()
1286+
1287+
wdl_table.init_table_wdl()
1288+
12841289
self.wdl[wdl_table.key] = wdl_table
12851290
self.wdl[wdl_table.mirrored_key] = wdl_table
12861291

@@ -1290,6 +1295,9 @@ def open_directory(self, directory, load_wdl=True, load_dtz=True):
12901295
dtz_table = DtzTable(directory, filename)
12911296
if dtz_table.key in self.dtz:
12921297
self.dtz[dtz_table.key].close()
1298+
1299+
dtz_table.init_table_dtz()
1300+
12931301
self.dtz[dtz_table.key] = dtz_table
12941302
self.dtz[dtz_table.mirrored_key] = dtz_table
12951303

test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,6 +1409,7 @@ def test_filenames(self):
14091409

14101410
def test_probe_pawnless_wdl_table(self):
14111411
wdl = chess.syzygy.WdlTable("data/syzygy", "KBNvK")
1412+
wdl.init_table_wdl()
14121413

14131414
board = chess.Board("8/8/8/5N2/5K2/2kB4/8/8 b - - 0 1")
14141415
self.assertEqual(wdl.probe_wdl_table(board), -2)
@@ -1429,6 +1430,7 @@ def test_probe_pawnless_wdl_table(self):
14291430

14301431
def test_probe_wdl_table(self):
14311432
wdl = chess.syzygy.WdlTable("data/syzygy", "KRvKP")
1433+
wdl.init_table_wdl()
14321434

14331435
board = chess.Board("8/8/2K5/4P3/8/8/8/3r3k b - - 1 1")
14341436
self.assertEqual(wdl.probe_wdl_table(board), 0)
@@ -1440,6 +1442,7 @@ def test_probe_wdl_table(self):
14401442

14411443
def test_probe_dtz_table_piece(self):
14421444
dtz = chess.syzygy.DtzTable("data/syzygy", "KRvKN")
1445+
dtz.init_table_dtz()
14431446

14441447
# Pawnless position with white to move.
14451448
board = chess.Board("7n/6k1/4R3/4K3/8/8/8/8 w - - 0 1")
@@ -1453,6 +1456,7 @@ def test_probe_dtz_table_piece(self):
14531456

14541457
def test_probe_dtz_table_pawn(self):
14551458
dtz = chess.syzygy.DtzTable("data/syzygy", "KNvKP")
1459+
dtz.init_table_dtz()
14561460

14571461
board = chess.Board("8/1K6/1P6/8/8/8/6n1/7k w - - 0 1")
14581462
self.assertEqual(dtz.probe_dtz_table(board, 2), (2, 1))

0 commit comments

Comments
 (0)