o
    6ti                     @   s   d dl Z d dlZd dlZdefddZdee dee fddZd	d
 Zdee dee fddZ	dd Z
dee dee defddZdS )    Nanswerc                 C   sp   |    d}tdd|}| }tdd|}ddddd}| D ]\}}t|||}q$td	|}|S )
N.z[ ]+ z\+ '")u   ‘u   ’u   “u   ”NFKD)stripresubloweritemsud	normalize)r   clean
quotes_mapkv r   P/home/ubuntu/.local/lib/python3.10/site-packages/lm_eval/tasks/lingoly/script.pyclean_answer   s   r   
referencespredictionsc                 C   s@   t | d dkr
dS t |d dkrdS t| d |d k}|S )Nr         ?        )lenfloat)r   r   scorer   r   r   
safe_exact   s   r   c                 C   sH  t | } t|dkrdS t| dkrdS d|v r,d|v s d|v r,t|}t|tr,|}t|trtdd |D rfd}t|d	krMt| d
d |D v S |D ]}|t|gt| gd}||krc|}qO|S d}|D ]+}t|trd|}|t|gt| gd}n|t|gt| gd}||kr|}qj|S |t|gt| gdS )Nr   r   r   [r   r   c                 s   s    | ]}t |tV  qd S )N)
isinstancestr.0cr   r   r   	<genexpr>5   s    z'parse_str_list_score.<locals>.<genexpr>   c                 S      g | ]}t |qS r   )r   r"   r   r   r   
<listcomp>:       z(parse_str_list_score.<locals>.<listcomp>)r   r   z, )	r!   r   astliteral_evalr    listallr   join)modelcorrectscoring_funcreadstr	max_scorer$   r   r   r   r   parse_str_list_score*   sV   




r4   c              
      sL  t | d }z5d|d v sJ |d d dkr)t |d |d dd   nt |d |d dd  d  W nQ tttfy   i  | D ]>}tt	t
|d |d }tt	t
|d |d }|ry| d d  |< qL|r| d d  |< qLd |< qLY nw  fdd	| D fd
d| D }|S )Nr   {}z': ([^']+)'[,\}]z": ([^"]+)"[,\}]r   c                    s"   i | ]}|| v r | nd qS )r   r   )r#   r   )	pred_dictr   r   
<dictcomp>p   s    zexact_match.<locals>.<dictcomp>c                    s    g | ]\}}t  | |tqS r   )r4   r   )r#   r   r   )pred_dict_fullr   r   r(   t   s    zexact_match.<locals>.<listcomp>)r*   r+   indexSyntaxError
ValueErrorAssertionErrorkeysr
   searchescaper!   groupr   )r   r   ref_dictr   mnscoresr   )r8   r:   r   exact_match[   s8   "


rG   c                 C   s$   t dd | D t dd | D  S )Nc                 S   r'   r   sum)r#   ir   r   r   r(   }   r)   z$aggregate_scores.<locals>.<listcomp>c                 S   r'   r   )r   )r#   jr   r   r   r(   }   r)   rH   )inputr   r   r   aggregate_scores|   s   $rM   metrics_scoresdataset_sizeweight_by_sizec                 C   s   | d | d  S )Nr      r   )rN   rO   rP   r   r   r   aggregate_metrics   s   rR   )r*   r
   unicodedatar   r!   r   r,   r   r4   rG   rM   intboolrR   r   r   r   r   <module>   s    1!