Source code for chipiron.environments.chess_env.move_factory

from typing import Protocol

import chess
import shakmaty_python_binding

from chipiron.environments.chess_env.board.iboard import IBoard
from chipiron.environments.chess_env.move.imove import IMove

from .board import RustyBoardChi
from .move import moveUci


[docs]class MoveFactory(Protocol): def __call__(self, move_uci: moveUci, board: IBoard | None = None) -> IMove: ...
[docs]def create_move_factory( use_rust_boards: bool, ) -> MoveFactory: move_factory: MoveFactory if use_rust_boards: # todo can we go back to the not test version without the assert? generics or just typos? move_factory = create_rust_move_test_2 else: move_factory = create_move return move_factory
[docs]def create_rust_move( move_uci: moveUci, board: RustyBoardChi | None = None ) -> shakmaty_python_binding.MyMove: assert board is not None return shakmaty_python_binding.MyMove(move_uci, board.chess_)
[docs]def create_rust_move_test_2( move_uci: moveUci, board: IBoard | None = None ) -> shakmaty_python_binding.MyMove: assert isinstance(board, RustyBoardChi) binding_move = shakmaty_python_binding.MyMove(move_uci, board.chess_) # rust_move = RustMove(move=binding_move, uci=move_uci) # return rust_move return binding_move
[docs]def create_rust_move_test(move_uci: moveUci, board: IBoard | None = None) -> chess.Move: assert board is not None return chess.Move.from_uci(move_uci)
[docs]def create_move(move_uci: moveUci, board: IBoard | None = None) -> chess.Move: return chess.Move.from_uci(move_uci)