engine.setoption('USI_Ponder', 'false')
engine.setoption('Resign_Threshold', '0')
engine.setoption('PV_Interval', '0')
engine.setoption('DNN_Model', args.model)
engine.setoption('Byoyomi_Margin', '0')
engine.setoption('UCT_NodeLimit', str(args.nodelimit))
engine.setoption('DNN_Batch_Size', str(args.batch))
engine.setoption('ReuseSubtree', 'false')
engine.setoption('UCT_Threads', str(args.threads))
for i in range(2, args.gpus + 1):
    engine.setoption('UCT_Threads' + str(i), str(args.threads))
if args.options:
    for option in args.options.split(','):
        name, value = option.split(':')
        engine.setoption(name, value)
engine.isready()

positions = [
    '',
    '7g7f 7a6b 2g2f 4a3b 2f2e 8c8d 6i7h 5a4a 2e2d 2c2d 2h2d P*2c 2d2h 8d8e 3i3h 3c3d 3h2g 8e8f 8g8f 8b8f 2g3f 8f8d 3f4e 4a5b P*8e 8d8e 4e3d 8e3e 8h2b+ 3a2b B*5f 2c2d P*8b B*5e 8b8a+ 5e9i+ 8i7g L*5d 3g3f 3e3f 3d4e 5d5f 4e3f 5f5g+ N*6i 5g5f 8a9a P*3e 3f3e P*8h 7i8h 9i8i 5i6h B*6d 2h2f',
    '2g2f 8c8d 2f2e 4a3b 7g7f 8d8e 2e2d 2c2d 2h2d P*2c 2d2f 3c3d 6i7h 7a7b P*2d 2c2d 2f2d 5a4b 2d3d 2b3c 3d3f 3a2b 5i5h 3c8h+ 7i8h B*2g 3f2f 2g5d+ 8h7g 6c6d 3i3h 8e8f 8g8f 7c7d 3g3f 7d7e 7f7e P*7f 7g8h 8b8f P*8g 8f8d P*2d P*2c 2d2c+ 2b2c 3f3e P*2d',
    '7g7f 8b4b 2g2f 3c3d 5i6h 2b8h+ 7i8h 3a2b 3i4h 5a6b 4g4f 6b7b 4h4g 7b8b 9g9f 9c9d 4i5h 2b3c 6h7h 4b2b 4g5f 7a7b 8g8f 3c4d B*7g 2b5b 2f2e 5c5d 2e2d 5d5e 5f4g 2c2d 2h2d P*2b 8h8g 8c8d 7g6f 7b8c 3g3f 4a3b 2i3g 2a3c 8i7g 6c6d 6i6h 6a7b 8f8e 8d8e P*8d 8c7d 4f4e 3c4e 3g4e 4d4e 2d2e 4c4d 5g5f 9d9e 9f9e P*9h 9i9h N*8f 7h6i 8f9h+ 8g9h 9a9e P*9g B*4c N*8g 3d3e 2e2g L*2e P*2f 4c7f 7g8e 7d8e N*7e 7c7d 8d8c+ 7b8c',
    '7g7f 3c3d 2g2f 4c4d 3i4h 3a4b 5i6h 4b4c 4i5h 8c8d 2f2e 4a3b 2e2d 2c2d 2h2d P*2c 2d2f 8d8e',
    '7g7f 3c3d 6g6f 8c8d 2h6h 7a6b 1g1f 5a4b 1f1e 4b3b 3i3h 5c5d 7i7h 2b3c 8h7g 6b5c 7h6g 6a5b 4g4f 4c4d 6i5h 5b4c 5i4h 3b2b 4h3i 1a1b 3i2h 2b1a 3g3f 3a2b 5h4g 4a3a 2i3g 7c7d 6f6e 8d8e 2g2f 3c5a 3h2g 9c9d 9g9f 5c4b 6g5f 5a7c 4i3h 4b3c 6h6i 8b5b 5f6g 5b6b 6g5f 6b5b 4g4h 7c4f 6e6d 4f6d 5f6e 5b6b 6e6d 6c6d 3g2e 3c4b 5g5f S*7h 6i5i 7h6g+ B*7a 6b5b 7g4d 4b5c 4d5c+ 4c5c S*6a B*4f 4h3g 4f3g+ 2h3g',
    '7g7f 3c3d 6g6f 6c6d 2h6h 7a7b 6f6e 6d6e 6h6e 6a5b P*6d P*6c 5i4h 6c6d 6e6d 7b6c 6d6h 8b6b 4h3h 5a4b 3i4h 4b3b 4i3i 1c1d 8h2b+ 3a2b 7i7h 1d1e 3h2h 2b3c 7h6g 6c5d B*7g 7c7d 6g5f P*6e 5f5e 5d5e 7g5e S*6d 5e8h 5c5d 9g9f 6d5e P*6g 3c4d 6i7h 2a3c 6h6i 2c2d 2h3h 2d2e 6i6h 4a4b S*2d 6b6a 8h5e 5d5e 4g4f 6a2a S*2c 3b4a 2c3d+ 2e2f 2g2f 5e5f 5g5f B*1b 3d4d 4c4d 2d3e 1b5f S*4g 5f2c 3e4d P*5f P*5c 5b6b 6h6i 4a3b 8i7g 6b5c 4d5c 4b5c 6i5i S*5e P*5g 5f5g+ 4h5g P*5h 5i4i 6e6f P*5f 6f6g+ 7h6g 5e4d 3g3f 2c3d 7g6e 5c4c G*3e 4d3e',
    '7g7f 3c3d 2h7h 1c1d 7i6h 7a6b 5i4h 1d1e 4h3h 5a4b 3h2h 2b8h+ 7h8h 6c6d 6g6f 6b6c 6h6g 4b3b 8h6h 6c5d 6g5f 8b6b 6i5h 6a5b 8g8f 7c7d 8f8e B*3c 3i3h 8a7c 9i9h 4a4b 4g4f 6d6e 6f6e 7c8e 6e6d 8e7g+ 8i7g 3c7g+ B*7c 6b6a N*6f N*4d 6f5d 5c5d 6h6e 4d5f S*7b N*6f 6e6f 6a7a 6d6c+ 7g6f',
    '2g2f 8c8d 7g7f 4a3b 6i7h 8d8e 8h7g 3c3d 7i8h 2b7g+ 8h7g 3a4b 3i3h 7a7b 4g4f 6c6d 3h4g 7b6c 5i6h 5a4a 1g1f 1c1d 4g5f 4a3a',
    '7g7f 8c8d 2g2f 3c3d 2f2e 4a3b 5i5h 5a4a 2e2d 2c2d 2h2d 5c5d 3g3f 7a6b 2i3g 5d5e 3i3h 6b5c 2d2e P*2c 2e5e 2b5e 8h5e 5c4d 5e7g 3a4b 4g4f 4b5c 7i7h R*2h P*2g 5c6d 4i3i 2h3h+ 3i3h S*6e 4f4e 4d5e',
    '7g7f 3c3d 2g2f 5c5d 2f2e 8b5b 4i5h 5a6b 8h6f 6b7b 5i6h 4c4d 2e2d 2c2d 2h2d 5b3b 2d2c+ 3a4b 2c2h 4b5c 6h7h 7a6b P*2d 4a5a 2d2c+ 5a4a 2c3b 4a3b 5g5f 5c6d 3i4h 9c9d 9g9f 6d6e 6f8h 6e7f 4h5g P*2c 5g6f 7c7d 7i6h 8a7c 6h7g 7f7g+ 8h7g 7c8e 7g6h S*7f 7h8h 4d4e',
    '7g7f 8c8d 7i6h 3c3d 6g6f',
    '7g7f 3c3d 6g6f 8c8d 1g1f 8d8e 8h7g 7a6b 1f1e 5a4b 2h6h 5c5d 3i3h 4b3b 7i7h 2b4d 7h6g 4d5c 6h8h 7c7d 5i4h 6a5b 4h3i 2a3c 4g4f',
Example #2
0
with open(args.hcp, 'rb') as f:
    f.seek(args.start * HuffmanCodedPos.itemsize)
    hcps = np.fromfile(f, HuffmanCodedPos, args.end - args.start)

print('read num', len(hcps))
delhcps = np.zeros(len(hcps), HuffmanCodedPos)

os.chdir(os.path.dirname(args.usi))
engine = Engine(args.usi)

for option in args.usi_options.split(','):
    k, v = option.split(':')
    engine.setoption(k, v)

engine.isready(print)

ptn = re.compile(r'score (cp|mate) ([+\-0-9]+)')

class Listener:
    def __init__(self):
        self.info1 = None
        self.info2 = None

    def __call__(self, line):
        self.info1 = self.info2
        self.info2 = line
listener = Listener()

board = Board()
p = 0