def hotspots(
    config: HotspotsConfig, df: DataFrame
) -> tuple[DataFrame, float, list[tuple[Feature, FeatureStats, list[int]]]]:
    """
    Return a list of hotspots for a given data frame with evaluation scores.

    This is the main function of this library.

    Parameters:
    config (HotspotConfig): config specifying which column contains the evaluation score and other options
    df (DataFrame): Pandas data frame with per-item evaluation scores

    Returns:
    (DataFrame, float, list[tuple[Feature, FeatureStats]]): a triple with the following values:
      - modified data frame
      - average score
      - list of hotspot features and their statistics
    """
    original_num_total = df.shape[0]
    df = df[df[config.score_column].notna()]
    num_total = df.shape[0]
    if num_total < original_num_total:
        logging.warning(
            f"{original_num_total - num_total} samples without a score, skipping them"
        )
    avg_score = df[config.score_column].mean()

    logging.info("starting initial round...")
    df, index, fs = initial_round(config, df)
    logging.info(f"initial round finished with {len(fs)} features")

    original_fs = {f: copy.deepcopy(s) for f, s in fs}

    scores = df[config.score_column]

    outs = []

    fs_listed = set()

    for round_ix in range(config.num_rounds):
        if not fs:
            logging.info("not enough eligible features, stopping...")
            break

        top_feature_name = fs[0][0]

        logging.info(f"ROUND {round_ix} WITH TOP FEATURE {top_feature_name}")

        outs.append((
            top_feature_name,
            original_fs[top_feature_name],
            index[top_feature_name],
        ))
        fs_listed.add(top_feature_name)

        scores, fs = do_round(scores, index, fs, config.higher_is_better)

        while fs and is_feature_unwanted(index, fs_listed, fs[0][0]):
            fs = fs[1:]

        if not fs:
            break

    return (df, avg_score, outs)

    Return a list of hotspots for a given data frame with evaluation scores.

    This is the main function of this library.

    Parameters:
    config (HotspotConfig): config specifying which column contains the evaluation score and other options
    df (DataFrame): Pandas data frame with per-item evaluation scores

    Returns:
    (DataFrame, float, list[tuple[Feature, FeatureStats]]): a triple with the following values:
      - modified data frame
      - average score
      - list of hotspot features and their statistics
    
src/hotspots/trulens/hotspots/hotspots.py