def weighted_choice(self, board: Union[chess.Board, int], *, exclude_moves: Container[chess.Move] = (), random=random) -> Entry:
        """
        Selects a random entry for the given position, distributed by the
        weights of the entries.

        :raises: :exc:`IndexError` if no entries are found.
        """
        total_weights = sum(entry.weight for entry in self.find_all(board, exclude_moves=exclude_moves))
        if not total_weights:
            raise IndexError()

        choice = random.randint(0, total_weights - 1)

        current_sum = 0
        for entry in self.find_all(board, exclude_moves=exclude_moves):
            current_sum += entry.weight
            if current_sum > choice:
                return entry

        assert False
def weighted_choice ( self , board : Union [ chess . Board , int ] , * , exclude_moves : Container [ chess . Move ] = ( ) , random = random ) -> Entry : total_weights = sum ( entry . weight for entry in self . find_all ( board , exclude_moves = exclude_moves ) ) if not total_weights : raise IndexError ( ) choice = random . randint ( 0 , total_weights - 1 ) current_sum = 0 for entry in self . find_all ( board , exclude_moves = exclude_moves ) : current_sum += entry . weight if current_sum > choice : return entry assert False
Selects a random entry for the given position, distributed by the
        weights of the entries.

        :raises: :exc:`IndexError` if no entries are found.