lczerolens-demo / app /board_interface.py
Xmaster6y's picture
removed chess.Board
5e4365f
"""
Gradio interface for plotting a board.
"""
import chess
import gradio as gr
from demo import constants
from lczerolens.board import LczeroBoard
def make_board_plot(board_fen, arrows, square):
try:
board = LczeroBoard(board_fen)
except ValueError:
board = LczeroBoard()
gr.Warning("Invalid FEN, using starting position.")
try:
if arrows:
arrows_list = arrows.split(" ")
chess_arrows = []
for arrow in arrows_list:
from_square, to_square = arrow[:2], arrow[2:]
chess_arrows.append(
(
chess.parse_square(from_square),
chess.parse_square(to_square),
)
)
else:
chess_arrows = []
except ValueError:
chess_arrows = []
gr.Warning("Invalid arrows, using none.")
color_dict = {chess.parse_square(square): "#FF0000"} if square else {}
svg_board = chess.svg.board(
board,
size=350,
arrows=chess_arrows,
fill=color_dict,
)
with open(f"{constants.FIGURE_DIRECTORY}/board.svg", "w") as f:
f.write(svg_board)
return f"{constants.FIGURE_DIRECTORY}/board.svg"
with gr.Blocks() as interface:
with gr.Row():
with gr.Column():
board_fen = gr.Textbox(
label="Board starting FEN",
lines=1,
max_lines=1,
value=chess.STARTING_FEN,
)
arrows = gr.Textbox(
label="Arrows",
lines=1,
max_lines=1,
value="",
placeholder="e2e4 e7e5",
)
square = gr.Textbox(
label="Square",
lines=1,
max_lines=1,
value="",
placeholder="e4",
)
with gr.Column():
image = gr.Image(label="Board", interactive=False)
inputs = [
board_fen,
arrows,
square,
]
board_fen.submit(make_board_plot, inputs=inputs, outputs=image)
arrows.submit(make_board_plot, inputs=inputs, outputs=image)
interface.load(make_board_plot, inputs=inputs, outputs=image)