
    Th8              	           S SK r S SKrS SKrS SKrS SKJr  S\S\4S jrS\S\4S jrS\S\4S jr	S\
\   S	\
\   S\
\   4S
 jrS\S\\\\\4   4   S\4S jr S#S\S\S\S\4S jjr\" S5      S4S\S\S\4S jjr\S:X  a   \ R&                  " SS9r\R+                  S\SS9  \R+                  S\\" S5      SS9  \R+                  SS S!S"9  \R-                  5       r\" \R0                  \R2                  \R4                  (       + 5      rgg)$    N)Pathsource_codereturnc                 f    [         R                  " SSU 5      n[         R                  " SSU5      nU$ )Nz(\n.+\s\'\'\'\n)
z(\'\'\'\,.+))resub)r   remove_headremove_tails      W/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/utils/_get_clean_triton.py"remove_triton_function_declarationr   	   s-    &&,dK@K&&$<K    c                     [         R                  U SS5      n[         R                  USS5      n[         R                  USS5      nU$ )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                 R   SnSn[         R                  " X[         R                  5       Vs/ s H$  nUR                  5       UR	                  S5      4PM&     nn[        U5       H:  u  pVU R                  X%5      nUS:w  a  U S U SU 3-   X[        U5      -   S  -   n M:  M<     U $ s  snf )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AE 
ekk!n%A   '/w&7"	 %%&8D
 KZ()*+3/A+BBDEF   '8 )s   +B$original_params
new_paramsc                 \    [        [        U5      5       H  nX   S:X  d  M  X   X'   M     U$ )NT)ranger    )r)   r*   idxs      r   merge_paramsr/   0   s1    S_%?c!-2JO & r   originalkernel_to_paramsc                    ^ SnS[         4U4S jjn[        R                  " X#U 5      n[        R                  " SSU[        R                  S9nU$ )Nz(\w+)\.run\((.*)\)r   c                    > U R                  S5      nU R                  S5      nTU   u  p4[        UR                  S5      UR                  S5      5      nU SU SSR                  U5       S3nU$ )Nr      z, [z]())r   r/   splitjoin)r#   	func_nameparamsr*   grid
new_stringr1   s         r   r   "add_launch_params.<locals>.replace=   st    KKN	Q+I6
!&,,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_paramsrA   7   sO     $G	# 	 &&84K!vv-ii	  $#r   Tinput_filenameoutput_filenameauto_generate_paramsc           	         [        U 5       nUR                  5       nS S S 5        WnSU;   a  [        S5      e[        U5      n[	        U5      nU  S3n[
        R                  R                  U5      (       d  U(       a  [        SU S35         [
        R                  R                  5       nSUS'   [        R                  " SU /US	S	[
        R                  R                  U 5      =(       d    S
S9nUR                  S:w  aW  [        SU  S35        [        SUR                   35        [        SUR                    35        [        SUR                   35      e[        SU 35        [
        R                  R                  U5      (       d  [        SU SU  S35      e[        U5       n
U
R'                  5       nS S S 5        W Vs/ s H  oR)                  S5      PM     nnU VVVs0 s H5  u  pnUR+                  5       UR+                  5       UR+                  5       4_M7     nnnn[-        UU5      n[        US5       nUR/                  U5        S S S 5        [        SU 35        U$ ! , (       d  f       GNR= f! ["         a   n	[        SU  S[%        U	5       35      U	eS n	A	ff = f! , (       d  f       N= fs  snf s  snnnf ! , (       d  f       Nz= f)Nzdef triton_(z]Need to run original Pytorch code generating kernels with TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1z.launch_paramszLaunch params file z not found. Generating...1 TORCHINDUCTOR_DUMP_LAUNCH_PARAMSpythonT.)envcapture_outputtextcwdr   zError running :zstdout: zstderr: zBFailed to generate launch params. Command failed with return code zSuccessfully generated z,Failed to generate launch params by running z: zMissing z1. Run `TORCHINDUCTOR_DUMP_LAUNCH_PARAMS=1 python z` first.|w)openreadRuntimeErrorr   r   ospathexistsprintenvironcopy
subprocessrundirname
returncodestdoutstderr	Exceptionr   	readlinesr7   striprA   write)rB   rC   rD   filer   transformed_codelaunch_params_filenamerJ   resulteflaunch_params_metaisplit_paramsabckernel_args_grids                     r   process_filerq   T   s    
n	iik 
 #$k
 	
 ::JK+,<= ./~> 77>>0116J#$:#;;TUV	**//#C69C23^^>*#GGOON3:sF   A%~&6a890101"XY_YjYjXkl  +,B+CDE 77>>011-.._`n_oowx
 	
 
$	%[[] 
& +==*<QGGCL*<L=IUVgaA	AGGIqwwy#99V()9;KL	os	#t

#$ 
$	#O#4
56y 
	P  	>~>NbQTUVQWPXY	 
&	% >V 
$	#sH   I(CI: 'J'J8&<J=>K(
I7:
J$JJ$'
J5
Kztriton_only_repro.py
input_pathoutput_pathc                 @    [        [        U 5      [        U5      U5      $ )a   Run 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
    auto_generate_params (bool): Whether to automatically generate launch_params if missing
)rq   r   )rr   rs   rD   s      r   get_clean_tritonru      s     J[)9;OPPr   __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)rx   defaultry   z--no-auto-generate
store_truez2Disable automatic generation of launch_params file)actionry   )T)argparserT   r   rZ   pathlibr   r   r   r   r(   listr/   dicttuplerA   boolrq   ru   __name__ArgumentParserparseradd_argument
parse_argsargsrr   rs   no_auto_generaterg    r   r   <module>r      s    	 	  C C c c   4$s) c tCy $$%)#uS#X*>%?$$< MQ??*-?EI??H 34!%QQQ Q z $$SF
 4&N   +,8	   A   D ))t/D/D+DFA r   