
    VhY+                        d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl	m
Z ddlmZ ddlmZ d	d
lmZ  ej$                  e      Zd Z G d de      Z G d d      Zy)    )annotationsN)Enum)Optional)dtype   )config)V   )MultiKernelc                   d}t        |        |j                         j                         }||k  rt        |       t        d|       t        d|j                         j                                t        d|j                         j	                         j                                t        d|j                         j	                         j                                t        d|j                         j                         j                                t        d|j                         j                         j                                t        d|j                         j                         j                                y )	N@   zNumber of elements: zSize: zDtype: zMean: zMin: zMax: zStd: )	printfloatnumelsizemeanitemminmaxstd)msgargmax_numel_to_printr   s       S/home/dcms/DCMS/lib/python3.12/site-packages/torch/_inductor/codegen/debug_utils.py"_print_debugging_tensor_value_infor      s     	#JIIKE""c
	
 %(	(CIIK$$&'	)SYY[%%',,./	(CIIK$$&++-.	'399;??$))+,	'399;??$))+,	'399;??$))+,    c                      e Zd ZdZdZdZdZy)IntermediateValueDebuggingLevel0123N)__name__
__module____qualname__OFF	SAVE_ONLY
PRINT_ONLYPRINT_KERNEL_NAMES_ONLY r   r   r   r   (   s    
CIJ "r   r   c                      e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 ddZd Zd Z	 d	 ddZej                  dd       Z		 d	 	 	 	 	 ddZ
ddZ	 	 d	 	 	 dd	Z	 	 d	 	 	 dd
Zy)DebugPrinterManagerNc                    t        |      | _        || _        |g }|| _        || _        d | _        || _        | j                         | _        d | _	        y N)
r   debug_printer_leveluse_array_refargs_to_print_or_savekernel_namearg_signatureskernel _get_debug_filtered_kernel_namesfiltered_kernel_names_to_printkernel_type)selfr/   r0   r1   r2   r4   r3   r7   s           r   __init__zDebugPrinterManager.__init__5   s_     $CCV#W * ($&!%:"&48.2.S.S.U+r   c                j    | j                  | j                  | j                  d| j                         y )NTbefore_launchr3   )#_perform_debug_print_or_save_helperr1   r2   r3   )r8   s    r   	__enter__zDebugPrinterManager.__enter__J   s3    00&&..	 	1 	
r   c                .    | j                  ||d|       y )NFr;   )r=   )r8   r1   r2   r3   s       r   __exit__zDebugPrinterManager.__exit__R   s!    00!)	 	1 	
r   c                   | j                   t        j                  k(  ry | j                   t        j                  k(  r3| j	                  | j
                  | j                  || j                         | j                   t        j                  k(  r3| j                  | j
                  | j                  || j                         | j                   t        j                  k(  r| j                  g | j                  |       y y )N)r3   )r/   r   r&   r'   &codegen_intermediate_tensor_value_saver1   r2   r3   r(   'codegen_intermediate_tensor_value_printr)   )r8   r1   r2   r<   r3   s        r   r=   z7DebugPrinterManager._perform_debug_print_or_save_helperZ   s     ##'F'J'JJ##'F'P'PP77**  #22	 8  ##'F'Q'QQ88**  #22	 9  $$.FFG 88  	Gr   c                    t         j                  j                  g S t         j                  j                  j                         j	                  d      D cg c]  }|j                          c}S c c}w )N,)r   aot_inductorfiltered_kernel_nameslowersplitstrip)r8   xs     r   r5   z4DebugPrinterManager._get_debug_filtered_kernel_names~   sa    44<I ((>>DDFLLSQ
 GGI
 	
 
s   A0c                   t        |t              r*t        j                  d       t        j
                  | _        || _        |dk(  r)|D cg c]  }|j                  d      s| }}|| _	        nE|dk(  r9|D cg c]'  }|j                  d      r| j                  rd| dn|) c}| _	        n|| _	        || _        || _        || _        y c c}w c c}w )NzAMultiKernel type is not supported in AOTI debug printer tool yet.extern)bufr   cppzcopy_arrayref_tensor_to_tensor())
isinstancer   loginfor   r&   r/   r7   
startswithr1   r0   r2   r3   r4   )r8   r1   r2   r3   r4   r7   r   args_to_print_or_save_externs           r   set_printer_argsz$DebugPrinterManager.set_printer_args   s     fk*HHS (G'J'JD$& ("4,~8V,( , *FD&E! 1* >>.1	 )) 6cU!<*D& *?D&&,%,
*s   C"C9,Cc                    | j                   t        j                  k7  ry |D ]W  }t        j                  j
                  st        j                  j                  j                  j                  d| d| d       Y y )Naoti_torch_print_tensor_handle(z, "aoti_model_inputs - ");)	r/   r   r(   r	   graphcpp_wrapperwrapper_codeprefix	writeline)r8   input_args_to_printr   s      r    codegen_model_inputs_value_printz4DebugPrinterManager.codegen_model_inputs_value_print   sj    ##'F'Q'QQ& 	Cww""$$++555cU:QRUQVVYZ	r   c                |   t        |      D ]-  \  }}|t        ||   t              s|rdnd}t        j                  j
                  r7t        j                  j                  j                  d| d| d| d| d	       tt        j                         }|dz   }	t        j                  j                  |	      s*t        j                  d       t        j                  |	       |	| d	| d	| d
z   }
t        j                  d|||
       d| d|
 d}t        j                  j                  j                  |       0 y )Nr<   after_launchzaoti_torch_save_tensor_handle(, "z", "rY   z/tmp/jit_inductor/z?Creating directory to save inductor intermediate tensor values._z.ptz)Saved intermediate tensor %s for %s to %sztorch.save(z, 'z'))	enumeraterQ   torch_dtyper	   rZ   r[   r\   r^   osgetcwdpathexistsrR   rS   makedirs)r8   args_to_saver2   r<   r3   ir   launch_prefixcwd	saved_dir
saved_pathlines               r   rB   z:DebugPrinterManager.codegen_intermediate_tensor_value_save   s0     - 	5FAs)*q!;3 /<O.Mww""$$..4SESEm_TXYdXeehi iik"66	ww~~i0HHY KK	*&M?!K=#c)RR
?	 %SEZL;$$..t49	5r   c                   |rdnd}| j                   t        j                  k(  rKt        j                  j
                  r0t        j                  j                  j                  d| d| d       y | j                   t        j                  k7  ry t        |      D ]  \  }}t        | j                        dkD  r|j                         | j                  vr<t        j                  j
                  r?|Jt        ||   t              r7t        j                  j                  j                  d| d| d	| d	| d
	       |t        ||   t        t         j"                  j$                  j&                  j(                        t        t*              t        t,              t        t.              f      r8t        j                  j                  j                  d| d	| d	| d| d	       L|| j0                  dk(  s	 t        j                  j                  j                  d| d| d	| d	| d
	       t        j                  j                  j                  d| d	| d	| d| d	        y )Nr<   rb   z
printf("[ z: z ]\n");r   rX   rc   z - rY   zprintf("[  z: %ld  ]", z); printf("\\n");rO   z._print_debugging_tensor_value_info("inductor: z", rP   )r/   r   r)   r	   rZ   r[   r\   r^   r(   re   lenr6   rH   rQ   rf   typetorch	_inductorcodegenwrapperSymbolicCallArgintr   boolr7   )r8   args_to_printr2   r<   r3   rn   rm   r   s           r   rC   z;DebugPrinterManager.codegen_intermediate_tensor_value_print   sH    ,9n
 $$.FFG ww""$$.. r+hG ##'F'Q'QQ. $	FAs D7781<%%'t/R/RRww""!-*"1%{3 GG((229#c-PST_S``cdgchhkl $/J"1%U__44<<LLMS	UT
	5 GG((22%m_C}CuKX[W\\op &-$2B2Be2Kx,,66=cU#m_TWXcWddghkgllop $$..D]OSVWbVccfgjfkknornsstuE$	r   )N NNN)r0   r|   r1   zOptional[list[str]]r2   strr3   Optional[list[type]]r.   )r3   r   )return	list[str])r1   r   r2   r   r3   r   )r_   r   r   None)TN)r3   r   r   r   )r#   r$   r%   r9   r>   r@   r=   	functools	lru_cacher5   rV   r`   rB   rC   r*   r   r   r,   r,   4   s    
 6:/3     3	 
   - *

 04"
 -"H 
 
 &(& & -	&P /3#5
 -#5 
#5R /3;
 -; 
;r   r,   )
__future__r   r   loggingrg   enumr   typingr   rv   r   rf   r~   r   virtualizedr	   multi_kernelr   	getLoggerr#   rR   r   r   r,   r*   r   r   <module>r      sW    "   	    &   % g!-&	"d 	"d dr   