def _random_mode()

in src/alpaca_eval/metrics.py [0:0]


def _random_mode(s, available_modes=None, favorite_mode=None, seed=123, is_dropna=True):
    """Take the mode of a series, but if there are multiple modes, randomly sample one
    (with potential restriction to `available_modes` or favoring a specific mode `favorite_mode`).

    Example
    -------
    >>> import pandas as pd
    >>> from alpaca_eval.metrics import _random_mode
    >>> _random_mode(pd.Series([1.0,2.0,1.0]))
    1.0
    >>> _random_mode(pd.Series([1.0,2.0])) in [1.0, 2.0]
    True
    >>> _random_mode(pd.Series([1.0,2.0,-1.0]), favorite_mode=-1.0)
    -1.0
    >>> _random_mode(pd.Series([1.0,2.0,2.0,-1.0]), favorite_mode=-1.0)
    2.0
    """
    out = pd.Series.mode(s)
    if is_dropna:
        out = out.dropna()

    if len(out) > 1:
        if favorite_mode is not None and favorite_mode in out.values:
            return favorite_mode
        if available_modes is not None:
            out = out[out.isin(available_modes)]
        out = out.sample(1, random_state=seed)

    if len(out) == 0:
        return np.nan

    return out.item()