Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def get(self, key):
try:
return self._features[key]
except KeyError:
LOGGER.exception("exception looking up feature")
elif current_parameter == "hashfull":
handle_integer_token(token, lambda handler, val: handler.hashfull(val))
elif current_parameter == "nps":
handle_integer_token(token, lambda handler, val: handler.nps(val))
elif current_parameter == "tbhits":
handle_integer_token(token, lambda handler, val: handler.tbhits(val))
elif current_parameter == "cpuload":
handle_integer_token(token, lambda handler, val: handler.cpuload(val))
elif current_parameter == "refutation":
try:
if refutation_move is None:
refutation_move = board.push_uci(token)
else:
refuted_by.append(board.push_uci(token))
except ValueError:
LOGGER.exception("exception parsing refutation from info: %r, position at root: %s", arg, self.board.fen())
elif current_parameter == "currline":
try:
if currline_cpunr is None:
currline_cpunr = int(token)
else:
currline_moves.append(board.push_uci(token))
except ValueError:
LOGGER.exception("exception parsing currline from info: %r, position at root: %s", arg, self.board.fen())
elif current_parameter == "ebf":
handle_float_token(token, lambda handler, val: handler.ebf(val))
end_of_parameter()
if string:
for info_handler in self.info_handlers:
info_handler.string(" ".join(string))
def handle_move_token(token, fn):
try:
move = chess.Move.from_uci(token)
except ValueError:
LOGGER.exception("exception parsing move token from info: %r", arg)
return
for info_handler in self.info_handlers:
fn(info_handler, move)
def handle_float_token(token, fn):
try:
floatval = float(token)
except ValueError:
LOGGER.exception("exception parsing float token from info: %r", arg)
for info_handler in self.info_handlers:
fn(info_handler, floatval)
if token in ["cp", "mate"]:
score_kind = token
elif token == "lowerbound":
score_lowerbound = True
elif token == "upperbound":
score_upperbound = True
elif score_kind == "cp":
try:
score_cp = int(token)
except ValueError:
LOGGER.exception("exception parsing score cp value from info: %r", arg)
elif score_kind == "mate":
try:
score_mate = int(token)
except ValueError:
LOGGER.exception("exception parsing score mate value from info: %r", arg)
elif current_parameter == "currmove":
handle_move_token(token, lambda handler, val: handler.currmove(val))
elif current_parameter == "currmovenumber":
handle_integer_token(token, lambda handler, val: handler.currmovenumber(val))
elif current_parameter == "hashfull":
handle_integer_token(token, lambda handler, val: handler.hashfull(val))
elif current_parameter == "nps":
handle_integer_token(token, lambda handler, val: handler.nps(val))
elif current_parameter == "tbhits":
handle_integer_token(token, lambda handler, val: handler.tbhits(val))
elif current_parameter == "cpuload":
handle_integer_token(token, lambda handler, val: handler.cpuload(val))
elif current_parameter == "refutation":
try:
if refutation_move is None:
refutation_move = board.push_uci(token)
def handle_integer_token(token, fn):
try:
intval = int(token)
except ValueError:
LOGGER.exception("exception parsing integer token")
return
for post_handler in self.post_handlers:
fn(post_handler, intval)
def set_option(self, key, value):
try:
self._features["option"][key] = value
except KeyError:
LOGGER.exception("exception looking up option")
def handle_integer_token(token, fn):
try:
intval = int(token)
except ValueError:
LOGGER.exception("exception parsing integer token from info: %r", arg)
return
for info_handler in self.info_handlers:
fn(info_handler, intval)
LOGGER.exception("exception parsing bestmove")
self.ponder = None
if self.bestmove is not None and len(tokens) >= 3 and tokens[1] == "ponder" and tokens[2] != "(none)":
# The ponder move must be legal after the bestmove. Generally, we
# trust the engine on this. But we still have to convert
# non-UCI_Chess960 castling moves.
try:
self.ponder = chess.Move.from_uci(tokens[2])
if self.ponder.from_square in [chess.E1, chess.E8] and self.ponder.to_square in [chess.C1, chess.C8, chess.G1, chess.G8]:
# Make a copy of the board to avoid race conditions.
board = self.board.copy(stack=False)
board.push(self.bestmove)
self.ponder = board.parse_uci(tokens[2])
except ValueError:
LOGGER.exception("exception parsing bestmove ponder")
self.ponder = None
self.bestmove_received.set()
for info_handler in self.info_handlers:
info_handler.on_bestmove(self.bestmove, self.ponder)