
    ΅iI              	       (   S SK r 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\" \R2                  \R4                  \R6                  (       + 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/home/james-whalen/.local/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/   1   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   8   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                  " [        R                  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[1        UU5      n[        US5       nUR3                  U5        S S S 5        [        SU 35        U$ ! , (       d  f       GN`= 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_PARAMST.)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sys
executabledirname
returncodestdoutstderr	Exceptionr   	readlinesr7   striprA   write)rB   rC   rD   filer   transformed_codelaunch_params_filenamerI   resulteflaunch_params_metaisplit_paramsabckernel_args_grids                     r   process_filerr   U   s    
n	iik 
 #$k
 	
 ::JK+,<= ./~> 77>>0116J#$:#;;TUV	**//#C69C23^^0#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   I6C&J 5J5K4<KK6
J
J2J--J25
K
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
)rr   r   )rs   rt   rD   s      r   get_clean_tritonrv      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)ry   defaultrz   z--no-auto-generate
store_truez2Disable automatic generation of launch_params file)actionrz   )T)argparserS   r   rY   r[   pathlibr   r   r   r   r(   listr/   dicttuplerA   boolrr   rv   __name__ArgumentParserparseradd_argument
parse_argsargsrs   rt   no_auto_generaterh    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   