in src/sal/utils/math.py [0:0]
def find_answer_with_largest_sum(answers: List[str], scores: List[float]) -> str:
"""
Groups answers based on their canonical forms and finds the group with the largest sum of scores.
Args:
answers (list of str): A list of strings to be grouped.
scores (list of float): A list of scores corresponding to each string.
Returns:
str: The string representing the group with the largest sum of scores.
"""
if len(answers) == 0 or len(scores) == 0:
raise ValueError("answers and scores cannot be empty")
# Grouping using canonical forms
canonical_groups = defaultdict(
float
) # Stores cumulative scores for each canonical group
canonical_to_original = {} # Maps canonical form back to an original answer
for answer, score in zip(answers, scores):
# Compute the canonical form
canonical_form = memoized_canonical_form(answer)
# Aggregate scores and track the original answer
canonical_groups[canonical_form] += score
if canonical_form not in canonical_to_original:
canonical_to_original[canonical_form] = answer
# Find the canonical form with the largest cumulative score
max_canonical = max(canonical_groups, key=canonical_groups.get)
return canonical_to_original[max_canonical]