o
    6ti                     @   s   d dl Z d dlmZmZ dd Zdd Zdd Zd	d
 Zdedee	 dee	e
f fddZdddZdd Zdd Zdd Zdd Zdd Zdd ZdS )     N)DictListc                 C      d| d    d}|S )Nu   주어진 문제를 풀어보세요.
문제를 푼 후, 최종 답변을 다음과 같은 형식으로 작성하세요: $\boxed{N}$.

문제: question   
답변:stripdoctext r   U/home/ubuntu/.local/lib/python3.10/site-packages/lm_eval/tasks/hrm8k/default/utils.pydoc_to_text   
   
r   c                 C   r   )Nu   주어진 문제를 풀어보세요.
문제를 푼 후, 주어진 선택지 (1, 2, 3, 4) 중 최종 선택지를 다음 형식으로 작성하세요: $\boxed{N}$.

문제: r   r   r   r	   r   r   r   doc_to_text_mmmlu   r   r   c                 C   s   t | d S )Nanswer)postprocess)r
   r   r   r   doc_to_target   s   r   c                 C   sL   t |  } zt| }| rt t|W S t |W S  ty%   |  Y S w )N)strr   float
is_integerint	Exception)sfloat_valuer   r   r   r      s    r   r
   resultsreturnc                 C   sD   |d }t | d }|st| || t||rd}nd}d|i}|S )Nr   r      exact_match)r   printis_equiv)r
   r   	candidategoldretvalr   r   r   process_results$   s   
r$   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|}t|}|r5t || ||kW S  tyF   | |k Y S w )NzWARNING: Both NoneTF)r   parse_math_answer_strip_stringr   r   )str1str2verbosess1ss2r   r   r   r    6   s    

r    c                 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lstripr   )r   leftr   r   r   r   remove_boxedK   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   r-   )rfindr0   )stringidxiright_brace_idxnum_left_braces_openr#   r   r   r   last_boxed_only_stringW   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findallr1   r2   )r   first_pattern
last_matchmatchesr   r   r   get_answer_with_dollar_signq   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]))r1   r2   rstripr>   r?   )r   rA   patternrB   r   r   r   get_answer_without_dollar_sign{   s   z9parse_math_answer.<locals>.get_answer_without_dollar_signr5   r   )
raw_stringr4   r=   rC   rG   r   r   r   r   r%   J   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   r6      }{r-   )r1   r0   r   )r8   substrsnew_strsubstrabpost_substrr   r   r   
_fix_fracs   s4   

rQ   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/rI   r   r   z{}/{}z\frac{rJ   r-   )r0   r1   r   formatr   r   )r8   rN   rO   
new_stringr   r   r   _fix_a_slash_b   s   rU   c                 C   s.   d| v r|  d}t|dksJ |d S | S )Nz\text{ rI   r   )r1   r0   )r8   splitsr   r   r   _remove_right_units   s
   
rW   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   r6   z\sqrt{r-   )r1   )r8   rV   rT   r1   rN   
new_substrr   r   r   	_fix_sqrt   s   

rY   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   rD   0r.   rI   r   r/   z0.5z\frac{1}{2})replacerW   r0   r1   rY   rQ   rU   )r8   r   r   r   r&      s:   r&   )F)r>   typingr   r   r   r   r   r   dictr   r   r$   r    r%   rQ   rU   rW   rY   r&   r   r   r   r   <module>   s    		"	
H 
