U
    Mhi                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZ eedddZ	eedddZ
eedd	d
Zee ee ee dddZeeeef edddZeeedddZedfeedddZedkre jddZejdedd ejdeeddd  e ZeejejZdS )!    N)Path)DictList)source_codereturnc                 C   s    t dd| }t dd|}|S )Nz(\n.+\s\'\'\'\n)
z(\'\'\'\,.+))resub)r   Zremove_headZremove_tail r
   O/var/www/html/venv/lib/python3.8/site-packages/torch/utils/_get_clean_triton.py"remove_triton_function_declaration	   s    r   c                 C   s.   t | dd}t |dd}t |dd}|S )Nzasync_compile = AsyncCompile() zasync_compile.wait(globals())zdel async_compile)strreplace)r   Zremove_top_levelZremove_compileZ
remove_delr
   r
   r   remove_async_compile   s    r   c                 C   sz   d}d}dd t || t jD }t|D ]J\}}| ||}|dkr*| d | d|  | |t| d   } q*q*q*| S )Nz/(\w+)\s*=\s*async_compile\.triton\('triton_',\szdef triton_c                 S   s   g | ]}|  |d fqS )   )endgroup).0matchr
   r
   r   
<listcomp>   s   z"rename_kernels.<locals>.<listcomp>zdef )r   finditerDOTALLreversedfindlen)r   patternZtriton_kernel_declmatchesZ	end_indexZcaptured_stringZ
index_of_Br
   r
   r   rename_kernels   s     
r   )original_params
new_paramsr   c                 C   sB   t |t | ksttt |D ]}|| dkr | | ||< q |S )NT)r   AssertionErrorrange)r    r!   idxr
   r
   r   merge_params0   s
    r&   )originalkernel_to_paramsr   c                    s<   d}t d fdd}t||| }tjdd|tjd}|S )Nz)(\w+)\.run\(([^)]*), grid=(.*\)), [^)]*\))r   c                    s\   |  d}|  d}|  d} | }t|d|d}| d| dd| d}|S )Nr         z, [z]())r   r&   splitjoin)r   	func_nameparamsgridr!   Z
new_stringr(   r
   r   r   <   s    


z"add_launch_params.<locals>.replacez"@triton_heuristics[^@]*@triton.jitz@triton.jit)flags)r   r   r	   r   )r'   r(   r   r   ZtransformedZremove_inductor_wrappersr
   r2   r   add_launch_params8   s    r4   )input_filenameoutput_filenamer   c              	   C   s   t | }| }W 5 Q R X |}d|kr0tdt|}t|}|  d}tj|sltd| d|  dt |}| }W 5 Q R X dd |D }d	d |D }	t	|	}
t
||
}t |d
}|| W 5 Q R X |S )Nzdef triton_(z]Need to run original Pytorch code generating kernels with TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1z.launch_paramszMissing z1. Run `TORCHINDUCTOR_DUMP_LAUNCH_PARAMS=1 python z first.c                 S   s   g | ]}| d qS )|)r-   )r   ir
   r
   r   r   j   s     z process_file.<locals>.<listcomp>c                 S   s    g | ]\}}|  |  gqS r
   )strip)r   abr
   r
   r   r   k   s     w)openreadRuntimeErrorr   r   ospathexists	readlinesdictr4   write)r5   r6   filer   Ztransformed_codeZlaunch_params_filenamefZlaunch_params_metaZsplit_paramsZstrip_paramsZkernel_to_argsr
   r
   r   process_fileT   s.    



rH   ztriton_only_repro.py
input_pathoutput_pathc                 C   s   t t| t|S )zRun experiments and output results to file

    Args:
        input_path (Optional[Path]): Path to inductor generated output codede
        output_path (Optional[Path]): Path to write out the new python file
    )rH   r   rI   r
   r
   r   get_clean_tritont   s    	rL   __main__z=Clean Inductor generated code to remove Inductor dependencies)descriptionrJ   z&Path to inductor generated output code)typehelpz--output_pathz)Path to write out the clean triton output)rO   defaultrP   )argparser@   r   pathlibr   typingr   r   r   r   r   r   r&   r4   rH   rL   __name__ArgumentParserparseradd_argument
parse_argsargsrJ   rK   resultr
   r
   r
   r   <module>   s@   ! 
  