
    Vh                        d dl Z d dlZd dlZd dlmZ dedefdZdedefdZdedefdZde	e   d	e	e   de	e   fd
Z
dedeeeeef   f   defdZdededefdZ ed      fdedefdZedk(  rq	  e j"                  d      Zej'                  ded       ej'                  de ed      d       ej)                         Z eej,                  ej.                        Zyy)    N)Pathsource_codereturnc                 b    t        j                  dd|       }t        j                  dd|      }|S )Nz(\n.+\s\'\'\'\n)
z(\'\'\'\,.+))resub)r   remove_headremove_tails      M/home/dcms/DCMS/lib/python3.12/site-packages/torch/utils/_get_clean_triton.py"remove_triton_function_declarationr      s-    &&,dK@K&&$<K    c                     t         j                  | dd      }t         j                  |dd      }t         j                  |dd      }|S )Nzasync_compile = AsyncCompile() zasync_compile.wait(globals())zdel async_compile)strreplace)r   remove_top_levelremove_compile
remove_dels       r   remove_async_compiler      sE    {{;0PRTU[[!13RTVWN^-@"EJr   c                 J   d}d}t        j                  || t         j                        D cg c]#  }|j                         |j	                  d      f% }}t        |      D ]:  \  }}| j                  ||      }|dk7  r| d | d| z   | |t        |      z   d  z   } ;< | S c c}w )Nz/(\w+)\s*=\s*async_compile\.triton\('triton_',\szdef triton_   zdef )r   finditerDOTALLendgroupreversedfindlen)r   patterntriton_kernel_declmatchmatches	end_indexcaptured_string
index_of_Bs           r   rename_kernelsr(      s    @G& [[+ryyA 
ekk!n%G  '/w&7 "	? %%&8)D
 KZ()*+j3/A+BBDEF   )s   (B original_params
new_paramsc                 Z    t        t        |            D ]  }||   dk(  s| |   ||<    |S )NT)ranger    )r)   r*   idxs      r   merge_paramsr/   /   s<    S_% 3c?c!-c2JsO3 r   originalkernel_to_paramsc                     d}dt         ffd}t        j                  |||       }t        j                  dd|t        j                        }|S )Nz(\w+)\.run\((.*)\)r   c                     | j                  d      }| j                  d      }|   \  }}t        |j                  d      |j                  d            }| d| ddj                  |       d}|S )Nr      z, [z]())r   r/   splitjoin)r#   	func_nameparamsr*   grid
new_stringr1   s         r   r   z"add_launch_params.<locals>.replace<   sv    KKN	Q+I6
D!&,,t"4j6F6Ft6LM
 "{!D6DIIj,A+B!D
r   z"@triton_heuristics[^@]*@triton.jitz@triton.jit)flags)r   r   r	   r   )r0   r1   r!   r   transformedremove_inductor_wrapperss    `    r   add_launch_paramsr@   6   sQ     $G	# 	 &&'84K!vv-ii	  $#r   input_filenameoutput_filenamec           	         t        |       5 }|j                         }d d d        }d|v rt        d      t        |      }t	        |      }|  d}t
        j                  j                  |      st        d| d|  d      t        |      5 }|j                         }d d d        D cg c]  }|j                  d       }	}|	D 
ci c]5  \  }
}}|
j                         |j                         |j                         f7 }}}
}t        ||      }t        |d      5 }|j                  |       d d d        |S # 1 sw Y   !xY w# 1 sw Y   xY wc c}w c c}}}
w # 1 sw Y   |S xY w)	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.|w)openreadRuntimeErrorr   r   ospathexists	readlinesr7   stripr@   write)rA   rB   filer   transformed_codelaunch_params_filenameflaunch_params_metaisplit_paramsabckernel_args_grids                 r   process_filerZ   S   sy   	n	 "iik" #$k
 	
 ::JK+,<= ./~>77>>01-.._`n_oovw
 	
 
$	% +[[]+ +==QAGGCL=L=IUVVgaA	AGGIqwwy#99VV()9;KL	os	# %t

#$%7" "$+ + >V%s/   D<E	*E
:E E!<E	E!E+ztriton_only_repro.py
input_pathoutput_pathc                 >    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
    )rZ   r   )r[   r\   s     r   get_clean_tritonr^   r   s     J[)9::r   __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)ra   defaultrb   )argparserI   r   pathlibr   r   r   r   r(   listr/   dicttupler@   rZ   r^   __name__ArgumentParserparseradd_argument
parse_argsargsr[   r\   result r   r   <module>rq      sq    	 	 C C c c   4$s) c tCy $$%)#uS#X*>%?$$: s s @ +//E*F	;	;#'	; z %X$$SF
 4&N   +,8	   D doot/?/?@F1 r   