def __init__(self):
        self.actual_game = game.Game()
        self.rollout_game = game.Game()

        exemplary_move = self.actual_game.get_moves_observation()[0]
        self.move_shape = tn.move_to_tensor(exemplary_move).shape

        exemplary_pos = self.actual_game.board.fen()
        self.position_shape = tn.fen_to_tensor(exemplary_pos).shape
 def idx_move(self, move_idx):
     '''
     make a move in index notation in rollout game
     :param tuple: tuple with three np.arrays of
     shape (1,) denoting the index of a move in
     move tensor notation
     '''
     move_fen = tn.tensor_indices_to_move(move_idx)
     try:
         self.rollout_game.make_move(move_fen)
     except:
         raise ValueError(f"rollout: move {move_fen} \
                 not possible in position \
                 {self.rollout_game.board.fen()}")
     return tn.fen_to_tensor(self.rollout_game.board.fen())
    def get_new_position(self, old_pos, move_idx):
        """
        get new position from an
        old position and a move
        selected in old position
        """
        old_fen = tn.tensor_to_fen(old_pos)
        self.rollout_game.board = chess.variant.RacingKingsBoard(old_fen)

        move_fen = tn.tensor_indices_to_move(move_idx)

        try:
            self.rollout_game.make_move(move_fen)
        except:
            raise ValueError(f"move {move_fen} \
                    not possible in position {old_fen}")

        new_fen = self.rollout_game.board.fen()
        return tn.fen_to_tensor(new_fen)
 def get_actual_position(self):
     '''
     :return np.array: position of actual game in tensor
     notation
     '''
     return tn.fen_to_tensor(self.actual_game.board.fen())
 def get_position(self):
     '''
     :return np.array: position of rollout game
     in tensor notation
     '''
     return tn.fen_to_tensor(self.rollout_game.board.fen())