shogi/__init__.py
def pop(self):
        '''
        Restores the previous position and returns the last move from the stack.
        '''
        move = self.move_stack.pop()

        # Update transposition table.
        self.transpositions.subtract((self.zobrist_hash(), ))

        # Decrement move number.
        self.move_number -= 1

        # Restore state.
        captured_piece_type = self.captured_piece_stack.pop()
        captured_piece_color = self.turn

        # On a null move simply swap the turn.
        if not move:
            self.turn ^= 1
            return move

        # Restore the source square.
        piece_type = self.piece_type_at(move.to_square)
        if move.promotion:
            piece_type = PIECE_PROMOTED.index(piece_type)

        if move.from_square is None:
            self.add_piece_into_hand(piece_type, self.turn ^ 1)
        else:
            self.set_piece_at(move.from_square, Piece(piece_type, self.turn ^ 1))

        # Restore target square.
        if captured_piece_type:
            self.remove_piece_from_hand(captured_piece_type, captured_piece_color ^ 1)
            self.set_piece_at(move.to_square, Piece(captured_piece_type, captured_piece_color))
        else:
            self.remove_piece_at(move.to_square)

        # Swap turn.
        self.turn ^= 1

        return move
def pop(self):
        '''
        Restores the previous position and returns the last move from the stack.
        '''
        move = self.move_stack.pop()

        # Update transposition table.
        self.transpositions.subtract((self.zobrist_hash(), ))

        # Decrement move number.
        self.move_number -= 1

        # Restore state.
        captured_piece_type = self.captured_piece_stack.pop()
        captured_piece_color = self.turn

        # On a null move simply swap the turn.
        if not move:
            self.turn ^= 1
            return move

        # Restore the source square.
        piece_type = self.piece_type_at(move.to_square)
        if move.promotion:
            piece_type = PIECE_PROMOTED.index(piece_type)

        if move.from_square is None:
            self.add_piece_into_hand(piece_type, self.turn ^ 1)
        else:
            self.set_piece_at(move.from_square, Piece(piece_type, self.turn ^ 1))

        # Restore target square.
        if captured_piece_type:
            self.remove_piece_from_hand(captured_piece_type, captured_piece_color ^ 1)
            self.set_piece_at(move.to_square, Piece(captured_piece_type, captured_piece_color))
        else:
            self.remove_piece_at(move.to_square)

        # Swap turn.
        self.turn ^= 1

        return move
def pop ( self ) : move = self . move_stack . pop ( ) # Update transposition table. self . transpositions . subtract ( ( self . zobrist_hash ( ) , ) ) # Decrement move number. self . move_number -= 1 # Restore state. captured_piece_type = self . captured_piece_stack . pop ( ) captured_piece_color = self . turn # On a null move simply swap the turn. if not move : self . turn ^= 1 return move # Restore the source square. piece_type = self . piece_type_at ( move . to_square ) if move . promotion : piece_type = PIECE_PROMOTED . index ( piece_type ) if move . from_square is None : self . add_piece_into_hand ( piece_type , self . turn ^ 1 ) else : self . set_piece_at ( move . from_square , Piece ( piece_type , self . turn ^ 1 ) ) # Restore target square. if captured_piece_type : self . remove_piece_from_hand ( captured_piece_type , captured_piece_color ^ 1 ) self . set_piece_at ( move . to_square , Piece ( captured_piece_type , captured_piece_color ) ) else : self . remove_piece_at ( move . to_square ) # Swap turn. self . turn ^= 1 return move
Restores the previous position and returns the last move from the stack.
Restores the previous position and returns the last move from the stack .