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()