a
    FeQ                  
   @   s   d dl Z ddddd ddddd	dd
d dddd ddd ddd ddd ddZeedddZdeeedddZdddg feeeedddZdd Zdd ZdS )     NPython   )	full_nameindentcppz
int main())r   r   mainJavazpublic static void mainZcsharpzpublic static void MainZPHPZ
TypeScript
JavaScriptZBash)pythonr   javacsphptsjssh)questionlangc                    s   dd |   dD  | dkrr fddtt D d } | dd   }d d | }||fS  d d	d   }d d d }||fS )
Nc                 S   s   g | ]}|  r|qS  )strip).0xr   r   ^/weka-jd/prod/deepseek/permanent/yangdejian/DeepSeek-Coder/Evaluation/HumanEval/utils/utils.py
<listcomp>*       z%get_function_name.<locals>.<listcomp>
r
   c                    s   g | ]} |  d r|qS )zdef )
startswith)r   iZ
func_linesr   r   r   -   r   (r   {)r   splitlowerrangelenjoin)r   r   Zfunc_idx	func_namefunc_prefixr   r   r   get_function_name)   s    r(   F)example	lang_codeverbosec              
   C   s  | d }|  d|  d}| d  }t| }|d }|d }zztd|  d|tjtjB d	 }	|r|td
	||	 | dd r|d |	v r|	
|d }
|	d |
 }	t||\}}zt|	 
| }d	}|| d	kr|	|| d  dkr|d7 }qz|	dd|  d }W n   t|	}Y n0 W n@   d	}z|	dd|  d }W n   t|	}Y n0 Y n0 |	|| }| dv r|dd|  d 7 }|d | d }|| d< W nL ty } z2td	||| | d d | | d< W Y d }~n
d }~0 0 | S )Ntask_idoutputZgpt_completionpromptr   r   ```z	
(.*?)```r   z>>> Task: {}
{}r       r   })r   r   r   
generationzIFailed to extract code block with error `{}`:
>>> Task: {}
>>> Output:
{})getr   languge_settingsrefindallr"   DOTALL
IGNORECASEprintformatindexr(   rindexr$   	Exception)r)   r*   r+   r,   r-   r   Zsettingr   r   Z
code_blockZ
main_startr&   r'   startendbodyr3   exr   r   r   extract_generation_code6   sP    & 
*rC   )codelanguage_typedatasetissftc                 C   sZ   |  dkr,|rt| } g d}t| |} n*|  dkrLt| |g d } n
t| |} | S )z'
    Cleans up the generated code.
    r
   )z
defz
classz
ifz
#z
printr   )z
exportz
importz
export defaultz
import defaultz
console.log)r"   _clean_python_code_for_sft_truncate_code_at_stopwords)rD   rE   rF   rG   
stop_wordsr   r   r   cleanup_codek   s    
rK   c                 C   sd   |  dd} d| v r`| d}| |d   dd } d| v rH| dnt| }| d |  } | S )N z	```pythonr/   )replacer<   r   findr$   )rD   Zcode_start_idxend_idxr   r   r   rH      s    
rH   c                 C   sD   t | }|D ]*}| |}d|  kr.|k rn q|}q| d | S )Nr   )r$   rO   )rD   rJ   Zmin_stop_idxZ	stop_word
stop_indexr   r   r   rI      s    
rI   )F)	r6   r5   strr(   boolrC   rK   rH   rI   r   r   r   r   <module>   sT   &7
