#!/usr/bin/python3 #-*-coding:utf-8-*- #$File: tensor2fen.py import numpy as np import pickle def tensor2fen(tensor_frd, tensor_emy): ''' tensor_frd, tensor_emy: ndarray [9,10,16] return fen string ''' return state2fen(tensor2state(tensor_frd, tensor_emy)) def tensor2state(tensor_frd, tensor_emy): ''' transform tensor 2 state tensor_frd, tensor_emy ndarray [9,10,16] return state ndarray [10,9] ''' assert tensor_frd.shape == tensor_emy.shape state = np.zeros((10,9), dtype=np.str) chessfrdplayer = 'KAABBNNRRCCPPPPP' chessemyplayer = 'kaabbnnrrccppppp' for i in range(tensor_frd.shape[0]): for j in range(tensor_frd.shape[1]): if ~(tensor_frd[i][j] == 0).all(): layer = np.argmax(tensor_frd[i][j]) state[j][i] = chessfrdplayer[layer] elif ~(tensor_emy[i][j] == 0).all(): layer = np.argmax(tensor_emy[i][j]) state[j][i] = chessemyplayer[layer] else: state[j][i] = ' ' return state def state2fen(state): ''' transfer the chessboard to fen string state: state of the current chessboard turn: which player to play round: count of round return: fen string ''' fen = '' [m,n] = state.shape for i in range(m): zcnt = 0 for j in range(n): if state[i][j] != ' ': if zcnt != 0: fen += str(zcnt) zcnt = 0 fen += state[i][j] else: zcnt += 1 if zcnt != 0: fen += str(zcnt) zcnt = 0 fen += '/' fen = fen[:-1] fen += ' w' fen += ' - - 0 1' return fen def visualstate(state): ''' visual the chessborad ''' print(" -----------------------------------") r = 9 for row in state: print('%d | ' % r, end='') for i in range(len(row)): print("%s " % (row[i]), end='') print('\b\b|\n', end='') r -= 1 print(" -----------------------------------") print(" -A---B---C---D---E---F---G---H---I-") if __name__ == '__main__': file = '../pred.tensor' fh = open(file, 'rb') data, label, pred = pickle.load(fh) state = tensor2state(data[0][0],data[1][0]) fen = state2fen(state) #from IPython import embed;embed() print(state) visualstate(state) print(fen) frdpos = data[0] emypos = data[1] fenlist = [] for k in range(frdpos.shape[0]): fenlist.append(tensor2fen(frdpos[k],emypos[k])) #print(fenlist) label = tensor2fen(label[1],label[1]) #print(label)