
    rh8              	          d dl Z 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#dedededefdZ ed      dfdededefdZedk(  r	  e j&                  d      Zej+                  ded       ej+                  de ed      d       ej+                  dd d!"       ej-                         Z eej0                  ej2                  ej4                         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      p/var/www/html/ai-insurance-compliance-backend/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                 Z    t        t        |            D ]  }||   dk(  s| |   ||<    |S )NT)ranger    )r)   r*   idxs      r   merge_paramsr/   0   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@   7   sQ     $G	# 	 &&'84K!vv-ii	  $#r   Tinput_filenameoutput_filenameauto_generate_paramsc           	      X   t        |       5 }|j                         }d d d        }d|v rt        d      t        |      }t	        |      }|  d}t
        j                  j                  |      s|rt        d| d       	 t
        j                  j                         }d|d<   t        j                  d| g|d	d	t
        j                  j                  |       xs d
      }|j                  dk7  rWt        d|  d       t        d|j                          t        d|j                           t        d|j                         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        t        d|        |S # 1 sw Y   4xY w# t"        $ r }	t        d|  dt%        |	             |	d }	~	ww xY w# 1 sw Y   xY wc c}w c c}}}w # 1 sw Y   jxY w)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   stripr@   write)rA   rB   rC   filer   transformed_codelaunch_params_filenamerI   resulteflaunch_params_metaisplit_paramsabckernel_args_grids                     r   process_filerp   T   s    
n	 "iik" #$k
 	
 ::JK+,<= ./~> 77>>0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-.._`n_oowx
 	
 
$	% +[[]+ +==QAGGCL=L=IUVVgaA	AGGIqwwy#99VV()9;KL	os	# %t

#$%	#O#4
56y" "P  	>~>NbQTUVQWPXY	+ + >V% %sH   ICI J/J:J%J I	J%J  JJ J)ztriton_only_repro.py
input_pathoutput_pathc                 @    t        t        |       t        |      |      S )a4  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
    )rp   r   )rq   rr   rC   s      r   get_clean_tritonrt      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)rw   defaultrx   z--no-auto-generate
store_truez2Disable automatic generation of launch_params file)actionrx   )T)argparserS   r   rY   pathlibr   r   r   r   r(   listr/   dicttupler@   boolrp   rt   __name__ArgumentParserparseradd_argument
parse_argsargsrq   rr   no_auto_generaterf    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 %X$$SF
 4&N   +,8	   A   D ))t/D/D+DFA r   