o
    wZh                     @   s,  d dl Z d dlZd dlZd dlmZ dedefddZdedefddZdedefd	d
Zde	e de	e de	e fddZ
dedeeeeef f defddZdededefddZedfdedef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 dS )$    N)Path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   L/var/www/auris/lib/python3.10/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   sx   d}d}dd t || t jD }t|D ]$\}}| ||}|dkr9| d | d|  | |t| d   } 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_paramsc                 C   s.   t t|D ]}|| dkr| | ||< q|S )NT)ranger   )r   r   idxr   r   r	   merge_params/   s
   r#   originalkernel_to_paramsc                    s<   d}dt f fdd}t||| }tjdd|tjd}|S )Nz(\w+)\.run\((.*)\)r   c                    sV   |  d}|  d} | \}}t|d|d}| d| dd| d}|S )Nr      z, [z]())r   r#   splitjoin)r   	func_nameparamsr   gridZ
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   r.   r	   add_launch_params6   s   r0   input_filenameoutput_filenamec           
      C   s  t | }| }W d    n1 sw   Y  |}d|v r"tdt|}t|}|  d}tj|s@td| d|  dt |}| }W d    n1 sSw   Y  dd |D }d	d
 |D }	t	||	}t |d}|
| W d    |S 1 sw   Y  |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   i   s    z process_file.<locals>.<listcomp>c                 S   s(   i | ]\}}}|  |  |  fqS r   )strip)r   abcr   r   r	   
<dictcomp>j   s   ( z process_file.<locals>.<dictcomp>w)openreadRuntimeErrorr
   r   ospathexists	readlinesr0   write)
r1   r2   filer   Ztransformed_codeZlaunch_params_filenamefZlaunch_params_metaZsplit_paramsZkernel_args_gridr   r   r	   process_fileS   s6   






rE   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
    )rE   r   )rF   rG   r   r   r	   get_clean_tritonr   s   	rH   __main__z=Clean Inductor generated code to remove Inductor dependencies)descriptionz&Path to inductor generated output code)typehelpz--output_pathz)Path to write out the clean triton output)rK   defaultrL   )argparser>   r   pathlibr   r   r
   r   r   listr#   dicttupler0   rE   rH   __name__ArgumentParserparseradd_argument
parse_argsargsrF   rG   resultr   r   r   r	   <module>   sN   "
 
