def GE()

in src/smclarify/bias/metrics/common.py [0:0]


def GE(positive_label_index: pd.Series, positive_predicted_label_index: pd.Series, alpha: float) -> float:
    r"""
    Generalized Entropy Index (GE) with parameter alpha.

    :param positive_label_index: boolean column indicating positive labels
    :param positive_predicted_label_index: boolean column indicating positive predicted labels
    :param alpha: parameter of the GE index.
    :return: Recall Difference between advantaged and disadvantaged classes
    """

    if alpha == 0 or alpha == 1:
        raise NotImplementedError("Not implemented for alpha 0 or 1.")
    N = positive_label_index.shape[0]
    require(positive_label_index.dtype == bool, "positive_label_index must be of type bool")
    require(positive_predicted_label_index.dtype == bool, "positive_predicted_label_index must be of type bool")
    require(N > 0, "dataset must be non-empty")

    positive_predicted_label_index = positive_predicted_label_index.astype(int)
    positive_label_index = positive_label_index.astype(int)

    benefit = positive_predicted_label_index - positive_label_index + 1
    mean_benefit = benefit.mean()

    # Benefit is a positive quantity so the mean benefit is 0 only when all
    # the benefits are 0, that is, all the predictions are false negatives.
    require(
        mean_benefit != 0,
        "All predicted labels are false negatives. There should be at least one prediction that is not false negative.",
    )

    benefit_mean_ratio = benefit / mean_benefit
    return (benefit_mean_ratio**alpha - 1).sum() / (N * alpha * (alpha - 1))