
    ¯wgf                        d dl Z d dlZd dlZd dlmZ d dlmZ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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)DictList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      b/home/mcse/projects/flask/flask-venv/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                     t        |      t        |       k\  sJ t        t        |            D ]  }||   dk(  s| |   ||<    |S )NT)r"   range)r+   r,   idxs      r   merge_paramsr1   0   sS    z?c/2222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\((.*), grid=(.*\)), [^)]*\)r   c                     | j                  d      }| j                  d      }| j                  d      }|   }t        |j                  d      |j                  d            }| d| ddj                  |       d}|S )Nr         z, [z]())r   r1   splitjoin)r%   	func_nameparamsgridr,   
new_stringr3   s         r   r   z"add_launch_params.<locals>.replace<   s~    KKN	Q{{1~%i0
!&,,t"4j6F6Ft6LM
 "{!D6DIIj,A+B!D
r   z"@triton_heuristics[^@]*@triton.jitz@triton.jit)flags)r   r
   r   r   )r2   r3   r#   r   transformedremove_inductor_wrapperss    `    r   add_launch_paramsrC   8   sO    7G
# 
 &&'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g c]%  \  }
}|
j                         |j                         g' }}
}t        |      }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	readlinesr:   stripdictrC   write)rD   rE   filer   transformed_codelaunch_params_filenameflaunch_params_metaisplit_paramsabstrip_paramskernel_to_argss                 r   process_filer^   T   sq   	n	 "iik" #$k
 	
 ::JK+,<= ./~>77>>01-.._`n_oovw
 	
 
$	% +[[]+ +==QAGGCL=L=7CDtq!QWWY	*DLD%),%7N()9>J	os	# %t

#$%9" "$+ + >D%s/   D5E*E	*EE5D?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
    )r^   r   )r_   r`   s     r   get_clean_tritonrb   t   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)re   defaultrf   )argparserL   r
   pathlibr   typingr   r   r   r   r   r*   r1   rC   r^   rb   __name__ArgumentParserparseradd_argument
parse_argsargsr_   r`   result r   r   <module>rs      sg    	 	  C C c c   4$s) c tCy $ $tCH~ $# $8 s s B +//E*F	;	;#'	; z %X$$SF
 4&N   +,8	   D doot/?/?@F1 r   