def METHOD_NAME(
    metric_fn: Callable[[T, T], float], prediction: str, ground_truths: List[str]
) -> float:
    """Calculate the max metric for each ground truth.
    For each answer in ground_truths, evaluate the metric of prediction with
    this answer, and return the max metric.
    Args:
        metric_fn: the function to calculate the metric.
        prediction: the prediction result.
        ground_truths: the list of correct answers.
    Returns:
        The max metric. Float point number.
    """
    scores_for_ground_truths = []
    for ground_truth in ground_truths:
        prediction_tokens = normalize_answer(prediction).split()
        ground_truth_tokens = normalize_answer(ground_truth).split()
        score = metric_fn(prediction_tokens, ground_truth_tokens)
        scores_for_ground_truths.append(score)
    return max(scores_for_ground_truths)