o
    6ti                     @   s   d dl Z d dlmZmZ d dlZdd Zdd Zdd Zd	d
 Z	dd Z
dd ZdddZdedee deeef fddZdd ZdS )    N)DictListc                 C   sP   dd }dd }dd }dd }d	| v r||| }|S || }|s&|| }|S )
Nc                 S   st   d}z-| d t | |ksJ | d dksJ | t |d }d|v r-|dd d}|W S  ty9   Y d S w )Nz\boxed{}= )lensplitlstrip	Exception)sleftanswer r   O/home/ubuntu/.local/lib/python3.10/site-packages/lm_eval/tasks/agieval/utils.pyremove_boxed   s   z'parse_math_answer.<locals>.remove_boxedc                 S   s   |  d}|dk r|  d}|dk rd S |}d }d}|t| k rE| | dkr*|d7 }| | dkr;|d8 }|dkr;|}n
|d7 }|t| k s |d u rMd }|S | ||d  }|S )N\boxedr   z\fbox{   r   )rfindr   )stringidxiright_brace_idxnum_left_braces_openretvalr   r   r   last_boxed_only_string   s.   


z1parse_math_answer.<locals>.last_boxed_only_stringc                 S   s@   d}d }t || }|r|d }d|v r|dd d}|S )Nz\$(.*)\$r   r   r   )refindallr	   r
   )r   first_pattern
last_matchmatchesr   r   r   get_answer_with_dollar_sign1   s   z6parse_math_answer.<locals>.get_answer_with_dollar_signc                 S   s`   d }d| v r |  dd dd}d|v r| dd }|S d}t|| }|r.|d }|S )Nr   r   r   .z\nr   z(?:\$)?\d+(?:\.\d+)?(?![\w\d]))r	   r
   rstripr   r   )r   r    patternr!   r   r   r   get_answer_without_dollar_sign;   s   z9parse_math_answer.<locals>.get_answer_without_dollar_signr   r   )
raw_stringr   r   r"   r&   r   r   r   r   parse_math_answer
   s   
r(   c              	   C   s8  |  d}|d }t|dkr|dd  }|D ]}|d7 }|d dkr(||7 }qz
t|dks1J W n ty?   |  Y   S w |d }|d }|dkrtt|dkrg|dd  }|d| d | d | 7 }q|d| d | d 7 }qt|dkr|dd  }|d| d | | 7 }q|d| d | 7 }q|} | S )Nz\fracr   r   r      }{r   )r	   r   r   )r   substrsnew_strsubstrabpost_substrr   r   r   
_fix_fracsR   s4   

r1   c                 C   s   t | ddkr| S | dd }| dd }z#t|}t|}| d||ks,J dt| d t| d }|W S  tyG   |  Y S w )	N/r)   r   r   z{}/{}z\frac{r*   r   )r   r	   intformatstrr   )r   r.   r/   
new_stringr   r   r   _fix_a_slash_br   s   r7   c                 C   s.   d| v r|  d}t|dksJ |d S | S )Nz\text{ r)   r   )r	   r   )r   splitsr   r   r   _remove_right_units   s
   
r9   c                 C   sr   d| vr| S |  d}|d }|dd  D ]!}|d dkr.|d }d| d |dd   }nd| }||7 }q|S )Nz\sqrtr   r   r   z\sqrt{r   )r	   )r   r8   r6   r	   r.   
new_substrr   r   r   	_fix_sqrt   s   

r;   c                 C   s>  |  dd} |  dd} |  dd} |  dd} |  dd} |  d	d} |  d
d} |  dd} |  dd} |  dd} t| } |  dd} |  dd} |  dd} |  dd} t| dkr`| S | d dkrjd|  } t| ddkrt| dd dkr| dd } t| } |  dd} t| } | dkrd} t| } | S )N
 z\!z\\\tfracfracdfracz\leftz\rightz^{\circ}z^\circz\$z\%z .z 0.z{.z{0.r   r#   0r   r)   r   r   z0.5z\frac{1}{2})replacer9   r   r	   r;   r1   r7   )r   r   r   r   _strip_string   s:   rD   Fc                 C   s   | d u r|d u rt d dS | d u s|d u rdS t| t|} }zt| }t|}|r1t || ||kW S  tyB   | |k Y S w )NzWARNING: Both NoneTF)printr(   rD   r   )str1str2verbosess1ss2r   r   r   is_equiv   s   

rK   docresultsreturnc                 C   s@   |d }| d }|st | || t||rd}nd}d|i}|S )Nr   r   r   acc)rE   rK   )rL   rM   	candidategoldr   r   r   r   process_results   s   
rR   c                 C   sp   dd |D }| d }t t||v rdnd}tdd | d D }t t|| |v r1dnd}||dS )	Nc                 S   s   g | ]}|d  qS )r   r   ).0resultr   r   r   
<listcomp>  s    z(process_results_mcqa.<locals>.<listcomp>rQ   g      ?g        c                 S   s   g | ]}t t|qS r   )floatr   )rS   r   r   r   r   rU     s    choices)rO   acc_norm)r3   npargmaxarray)rL   rM   rQ   rO   completion_lenrX   r   r   r   process_results_mcqa  s   r]   )F)r   typingr   r   numpyrY   r(   r1   r7   r9   r;   rD   rK   dictr5   r3   rR   r]   r   r   r   r   <module>   s   H 

F"