
    `i!n                       U 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	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d d
l"m#Z#m$Z$ erd dl%m&Z& d dlm'Z' ej(        dej)        dej*        dej+        dej,        dej-        dej.        dej/        dej0        dej1        dej2        dej3        diZ4ej(        dej)        dej*        dej+        dej,        dej-        dej.        dej/        dej0        dej1        dej2        dej3        diZ5ej(        dej)        dej*        dej+        dej,        dej-        dej.        dej/        dej0        d ej1        d!ej2        d"ej3        d#iZ6	 dndod,Z7dpd0Z8dqd6Z9drd9Z:i a;d:e<d;<   dsdAZ=dtdGZ>	 dudvdJZ?dwdTZ@dxdVZAdydWZBdzdYZC edZ[           G d\ d]                      ZD	 d{d|dcZEd}dmZFdS )~    )annotationsN)	dataclass)TYPE_CHECKING)aten_shimified_opsinductor_fallback_ops)DispatcherSignature)CppSignatureCppSignatureGroup)method_with_native_function)ArgumentBackendIndexBaseTyBaseTypeDispatchKeyFunctionSchemais_cuda_dispatch_keyListTypeNativeFunctionNativeFunctionsGroupOperatorNameOptionalTypeTypeVariant)FileManagermapMaybe)Sequence)OptionalAtenTensorHandleint32_tint64_tdoublezconst char*AtenGeneratorHandle
at::Tensorboolzc10::SymIntzc10::Scalarz::std::string_viewzc10::DeviceIndexzc10::Layoutzc10::MemoryFormatzc10::ScalarTypezat::Generatorresolve_tensor_dispatch_flags zstatic_cast<c10::DeviceIndex>zstatic_cast<c10::Layout>zstatic_cast<c10::MemoryFormat>zstatic_cast<c10::ScalarType>z&*generator_handle_to_generator_pointerFtypr   namestris_writereturn1tuple[list[str], list[str], list[str], list[str]]c                   t          | t                    r| j        t          v ru| j        t          j        k    r
|rd| dg}n-t          | j                 rt          | j                  d| dn|g}t          | j                 g|gt          | j                 g|fS | j        t          j        k    rddg||dz   gdgd| d| d	gfS t          d
t          |                      t          | t                    rt          | j        |          \  }}}}d}g }	g }
|D ][}||         dz   ||<   |                    d          rd|	                    d| d           |t!          d          d         }|
                    d| d||          d||dz             d           |dz  }|dk    rF|	                    d           |
                    d||          d||dz             d           |dz  }|dk    r?|	                    d| d           |
                    d||          d           |dz  }|	                    d| d           |
                    d| d||          d           |dz  }]|||	|
fS t          | t"                    rEt          | j        |          \  }}}}t!          |          dk    sJ dt          |           z               d|d          d|d<   |                    d           |d         }|                    |dz              |d         }g }|dk    r+| j        J |                    d | j         d| d           nm|dk    r|s|                    d!| d| d"           nH|d#k    r#|                    d$| d%| d&| d| d'	           n|                    d | d| d| d"           d( |D             }||||fS t          d)t          |            d*          )+Nz!*tensor_handle_to_tensor_pointer()(r   _index_zc10::Devicez)c10::Device(static_cast<c10::DeviceType>(z!), static_cast<c10::DeviceIndex>(z	_index_))zTODO: add support for arg type r   *c10::ArrayRef<z::std::optional<>zpointer_to_optional_list<z>(,       z::std::optional<c10::Device>zpointer_to_optional_device(r#   zresolve_tensor_dispatch_flags(zpointer_to_optional<z'ListType with unsupported element type zconst r    _len_r$   zpointer_to_list<z#resolve_tensor_list_dispatch_flags(z_len_)z::std::optional<at::Tensor>z
c10::List<z>(c10::ArrayRef<z%>(resolve_tensor_list_dispatch_flags(z_len_)))c                    g | ]}d | d	S )r2   r3    ).0ts     l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchgen/gen_aoti_c_shim.py
<listcomp>z-convert_arg_type_and_name.<locals>.<listcomp>   s$    @@@+q+++@@@    zArgument type z not supported!)
isinstancer   r(   base_type_to_c_typer   Tensorbase_type_to_callsite_exprbase_type_to_aten_typeDeviceNotImplementedErrorreprr   convert_arg_type_and_nameelem
startswithappendlenr   size)r'   r(   r*   callsite_exprc_typesnames
aten_typescallsite_exprsjnew_aten_typesnew_callsite_exprs	aten_type	base_type_atypes                  r=   rH   rH   T   sq   
 #x   n
8***x6=((X( "MT!L!L!L M 2#(;1#(;EEdEEEE! %SX./'12	  X&&I&ti'(vvvgkvvv	  &&SS		&S&STTT	C	&	& N
5NHd6
 6
2
N # 	 	I c)GAJ##$455 %%&E&E&E&EFFF%c*:&;&;b&@A	"))X	XXU1XXXqSTuXXX   Qm++%%&DEEE"))M%(MMeAElMMM   Ql**%%&E&E&E&EFFF"))*V5QR8*V*V*VWWWQ%%&E&E&E&EFFF"))C9CCaCCC   Q 	
 	
 
C	"	" $
(A#(D(Q(Q%
A7||q   "KdSVii"W    ,gaj+++
y!!!QxTG^$$$1F?? 8'''!!"HSX"H"H"H"H"HIIIIl""8"!!JdJJdJJJ    333!!vUvvEvv`dvvhlvvv    !!"RU"R"Rd"R"Rd"R"R"RSSS@@Z@@@
	
 	
 ItCyyIII
J
JJr?   types	list[str]rP   c                6    d t          | |          D             S )Nc                $    g | ]\  }}|d z   |z   S ) r:   )r;   r'   r(   s      r=   r>   z%zip_type_and_name.<locals>.<listcomp>   s%    @@@dC#I@@@r?   )zip)rZ   rP   s     r=   zip_type_and_namer`      s     @@c%.?.?@@@@r?   flat_argumentsSequence[Argument]skipped_argsset[str]tuple[list[str], list[str]]c                B   g }g }g }| D ]}|j         |v r|                    d           !t          |j        |j         |j                  \  }}}}	|                    |           |                    |           |                    |	           t          ||          |fS )Nzstd::nullopt)r(   rK   rH   typer*   extendr`   )
ra   rc   rZ   	new_namesrR   arg	new_typesrP   rX   rU   s
             r=   gen_argumentsrl      s     EI "N 	2 	28|##!!.1112KHch3
 3
/	5!/ 	Y01111UI..>>r?   schemar   c           
     N   g }g }t          | j                  D ]\  }}|                    d|            t          |j        t
                    rA|j        j        t          v r.|                    t          |j        j                 dz              xt          dt          |j                             dd	}d
}| j        
                                }dD ]
}||v rd} ng }	t          | j                  D ]\  }}t          |          dk    rdnd| d}
t          |j        t
                    sJ  ||j        |
          }|r,|	                    d||          d||          d| d           {|	                    d||          d| d           t          ||          |	fS )Nretr1   z"TODO: add support for return type r'   r   valr)   r+   c                    | j         t          j        k    rd| dS | j         t          j        k    r| dS | j         t          j        k    r| dS |S )Nznew_tensor_handle(std::move(z))z.expect_int()z.toDouble())r(   r   rB   SymIntScalar)r'   rp   s     r=   convert_returnz#gen_returns.<locals>.convert_return   sc    8v}$$9#9999X&&((((X&&&&&&Jr?   F)_functional_sym_constrain_range#_scaled_dot_product_cudnn_attention0_scaled_dot_product_efficient_attention_backward'_scaled_dot_product_efficient_attention#_scaled_dot_product_flash_attention0_scaled_dot_product_fused_attention_overrideable#_thhn_fused_lstm_cell_backward_implconvolution_backwardgrid_sampler_2d_backwardgrid_sampler_3d_backwardlinear_backwardTr6   
tmp_resultz	std::get<z>(tmp_result)zif (z) { *z = z; };)r'   r   rp   r)   r+   r)   )	enumeratereturnsrK   r@   rg   r   r(   rA   rF   rG   unambiguous_namerL   r`   )rm   rZ   rP   idxro   rt   ret_pointer_can_be_nullr   r(   rR   tmprvals               r=   gen_returnsr      s   EEfn--  S[3[[!!!ch)) 	chm?R.R.RLL,SX];cABBBB%ET#(^^EE      ${3355   ###&*#E $ !#Nfn-- > >S!%jjAooll3Qs3Q3Q3Q#(H-----~ch,," 	>!!"Ts"T"T5:"T"T$"T"T"TUUUU!!"<eCj"<"<T"<"<"<====UE**N::r?   z+dict[tuple[str, str, str], tuple[str, str]]declaration_definition_cachedevicebackend_callversion_infodict[str, list[str]]tuple[str, str]c                   | j                                         }|||ft          v rt          |||f         S dg i}t          |                                          D ]\  }}|                    d          sJ d| d| d            	 t          |dd                    }n)# t          $ r}	t          d| d| d          |	d }	~	ww xY w||vsJ | d| d            |||<   g }
g }t                      }t          |                                d	
          D ]\  }}|dk    r|n| d| }| 
                                r.t          g | j        j        | j        j        |          \  }}g }nYt          | j        j        |          \  }}| j         j         j        rg g fnt#          |           \  }}|                    |           t'          j        d| d| dd                    |           d          }|rdnd}d|r!d                    fd|D                       nd}t'          j        d| d| | dd                    |           d          |z   t'          j        d          z   }|                    |           |
                    d| d           |                    |           d                    |
          d                    |          ft          |||f<   t          |||f         S )Nr6   vzVersion number for z is z, not starting with 'v'z, not a valid integer after 'v'z for z has already been definedT)reverse_vzAOTITorchError aoti_torch_rX   r/   r5   r.   zauto tmp_result = r&   z		
c              3  "   K   | ]	}|z   V  
d S Nr:   )r;   rindents     r=   	<genexpr>z1gen_declaration_and_definition.<locals>.<genexpr>_  s'      ::Qfqj::::::r?   z	
        zL {
            AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
                z(
                    z
                );
        z#
            });
        }
        zAOTI_TORCH_EXPORT r   )r(   r   r   sorteditemsrJ   int
ValueErrorAssertionErrorset	is_out_fnrl   	argumentsoutflat_non_outflat_allinplacer   rh   textwrapdedentjoinupdaterK   )rm   r   r   r   	base_nameindexed_version_infover_strnew_argsver_idedeclarationsdefinitionsrc   	func_nameargsrR   ret_assignmentsret_declarationsdeclarationr   ret_assignments_str
definitionr   s                         @r=   gen_declaration_and_definitionr      s    ,,..I 	6<(,HHH+Y,MNN 34R#L$6$6$8$899 0 0!!#&& 	
 	
Q)QQQQQ	
 	
&	%%FF 	 	 	 ]i]]W]]] 	 1111AAYAAA 211 (0V$$ LK UUL"#7#=#=#?#?NNN /' /' "(1IIY2J2J&2J2J	 	* $1G&"&G)9)FG$ $ D. *,OO#0 )<$ $ D.
 #K,4MR+f:M:M .o KK()))oPPP)PPdiiooPPP
 
 .=D))"
>MUDII::::/::::::SU 	 O 	   *  YY~..	     "" o    	 	H%%%????@@@:&&&& 			,		+G )V\!BC (FL(IJJs   B  
C*CCsig"CppSignature | DispatcherSignaturefr   r	   c                    t          j        |j                  } t          j        |dd          }| j        r!|j                                        r|j        }n|j        }|J |S )NF)methodfallback_binding)	r   from_schemafuncr
   from_native_functionsymint
has_symintsymint_signature	signature)r   r   cpp_sigscpp_sigs       r=   *gen_static_dispatch_backend_call_signaturer   z  sx     
)!&
1
1C 5	%%  H z %af'')) %+$Nr?   backend_indexOptional[BackendIndex]c                   t          j        | j                  }t          ||           }|{|j        r]| j                                        rDt          j        | j        v }|s/|	                                }|
                    d          }d| dS d|	                                 S d|j                                         d|	                                 S )N_symintzat::symint::z<c10::SymInt>zat::z::)r   r   r   r   r   r   r   functionvariantsr(   removesuffixdispatch_keylower)r   r   r   r   has_function_variantr   s         r=    gen_static_dispatch_backend_callr     s     
)!&
1
1C8a@@G: 	?!&++-- 	?#*#3qz#A ' ? $LLNN	%229==	>i>>>>&gllnn&&&Lm06688LLGLLNNLLLr?   r   func_group_mapping(dict[OperatorName, NativeFunctionsGroup]r   Optional[DispatchKey]backend_indicesdict[DispatchKey, BackendIndex]extend_aoti_c_shimBackendIndex | Nonec                   d }||S ||                              |           s6| j        8| j        |v r/||                              || j                           r	||         }n|r|S |t          j                                      |           r|t          j                 }no|t          j                                      |           r|t          j                 }n7|t          j                                      |           r|t          j                 }|S r   )
has_kernelstructured_delegater   CompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalCompositeImplicitAutogradr   r   r   r   r   r   s         r=   get_backend_index_for_aotir     s'    M|$//55 S ,$(:::L)44t78
 
 ;
 (5  	S  [BCNNtTT 	S+K,QRMM>

*T

	S ,BMM [BCNNtTT 	S+K,QRMr?   
str | Nonec                    t          | ||||          }||d| j         dS d S d| j         d|j                                         dS )Nz#include <ATen/ops/z.h>rX   z_dispatch.h>)r   	root_namer   r   r   s         r=   get_header_for_aotir     sp     / ,AS M <<<<<tbbb-2L2R2R2T2Tbbbbr?   c                    | j         j        j        r-| j         d| j         j        j         d| j         j        j         n| j         d| j         j        j         dS )N.z.default)r   r(   overload_name	namespace)r   s    r=   get_fallback_op_namer     s`     9>'	?4>PPDIN/PP$).2NPPP>>!4>>>r?   headerc                   t          | ||||          }||d S | j        }|dn|                                }	t          | |          }
	 |rt	          ||	|
|          \  }}|S t	          ||	|
|          \  }}|S # t
          $ r Y d S w xY w)Naten)r   r   r   r   r   rF   )r   r   r   r   r   r   r   r   rm   r   r   r   rX   r   s                 r=   
gen_c_shimr     s     / ,AS M !9tYF#+VV1C1C1E1EF3 L
 		;l NK :l MAz    tts   
A: #A: :
BBT)frozenc                  d    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   edd            ZdS )ShimGeneratordict[str, dict[str, list[str]]]r   r   r   r   r   r   r   r$   r   r   r   r   r+   r   c           	         | j         t          |                   }t          ||| j        | j        | j        | j        | j                  }|S r   )r   r   r   r   r   r   r   r   )selfr   r   results       r=   __call__zShimGenerator.__call__  sS    
 12Ft2L2LM# K#
 
 r?   N)r   r   r+   r   )__name__
__module____qualname____annotations__r   r   r:   r?   r=   r   r     sz         ::::@@@@''''4444LLL    !   r?   r   native_functionsSequence[NativeFunction]r   r   includesc                   d                     t          t          t          ||||||          |                               }|dn|                                }	|dndt          |           d}
|dnd}d}|r2||z   t          j        d	          z   |z   t          j        d
          z   S ||z   t          j        d|rdnd d|	 d|
 d          z   |z   t          j        d          z   |z   S )Nr   r   z#include <ATen/Functions.h>z#include <ATen/zFunctions.h>z[

// This file corresponds to the aten_shimified_ops list in torchgen/aoti/fallback_ops.py
r&   z

// WARNING: THIS FILE IS AUTOGENERATED BY torchgen. DO NOT MODIFY BY HAND.
// See https://github.com/pytorch/pytorch/blob/7e86a7c0155295539996e0cf422883571126073e/torchgen/gen.py#L2424-L2436 for detailsz

            #pragma once

            #include <torch/csrc/inductor/aoti_torch/c/shim.h>

            #ifdef __cplusplus
            extern "C" {
            #endif

            z\

            #ifdef __cplusplus
            } // extern "C"
            #endif
            zA

            #include <torch/csrc/inductor/aoti_torch/generated/zextend/c_shim_z{.h>
            #include <torch/csrc/inductor/aoti_torch/utils.h>

            #ifndef AT_PER_OPERATOR_HEADERS
            z
            #include <ATen/CompositeExplicitAutogradFunctions.h>
            #include <ATen/CompositeExplicitAutogradNonFunctionalFunctions.h>
            #include <ATen/CompositeImplicitAutogradFunctions.h>
            #else
            zn
            #endif // AT_PER_OPERATOR_HEADERS

            using namespace torch::aot_inductor;

            )r   listr   r   r   r)   r   r   )r   r   r   r   r   r   r   r   bodyr   include_device_functionsaten_warningwarnings                r=   gen_aoti_c_shimr  *  s    99)& #&  !
 
	
 	
 D $+VV1C1C1E1EF  	&%>s<00>>>   ml  CG
  /
o 
 
 
  o   	
0 o M_@g		eg pv  &      o   * +	
r?   aoti_fmr   aoti_backendsset[Optional[DispatchKey]]structured_native_functionsSequence[NativeFunctionsGroup]extra_cuda_headersupdate_aoti_c_shimNonec                   i |D ],}|                                 D ]}	|	j        ||	j        <    n-|D ]t          nt          i }
|D ]}	t	          |	          }|v r|	|
|<   t          d t          |
                                          D                       dn                                }d| d}t          dd          |r| 
                    |fd           n	 t          t          j                            | j        |                    5 }|                                }|k    rcd	                    t#          j        |                                                                d
dd                    }t)          d| d          	 d d d            n# 1 swxY w Y   nE# t*          $ r8 t-          t          j                            | j        |           d           Y nw xY wdfdt/                    r|nd| 
                    d| dfd           d S )Nc              3      K   | ]	\  }}|V  
d S r   r:   )r;   rX   values      r=   r   z(gen_aoti_c_shim_files.<locals>.<genexpr>  s7       *
 *
aE*
 *
 *
 *
 *
 *
r?   r   r  z.hTr&   r   r   r   c                      S r   r:   )
new_headers   r=   <lambda>z'gen_aoti_c_shim_files.<locals>.<lambda>  s    
 r?   r   expectedactual)fromfiletofilelinetermaV  
The generated AOTInductor C shim header files have unexpectedly changed. This
indicates an AOTInductor fallback operator ABI backward compatibility breakage!!!
Only in a limited number of situations, this is allowed:

1. You added a fallback op to the inductor_fallback_ops list in torchgen/aoti/fallback_ops.py.
If that's the case, run `python torchgen/gen.py --update-aoti-c-shim` to add a new entry to
existing C shim header files.

2. You added a new default argument to an existing fallback op. This is clearly a BC breaking
change in the AOTInductor land. You need to annotate the new default argument in
torchgen/aoti/fallback_ops.py, and then run `python torchgen/gen.py --update-aoti-c-shim` to
update the C shim header files by creating different versions of the fallback op. See
https://github.com/pytorch/pytorch/pull/154848 as an example.

z
                    z
 not foundr+   r)   c                     g } D ]-}t          |          }||                     |           .d                    t          t	          |                               S )N)r   r   )r   rK   r   r   r   )headersr   r   r   r   r   fallback_native_functionsstructured_func_group_dicts      r=   headers_for_aotiz/gen_aoti_c_shim_files.<locals>.headers_for_aoti  su    G1 	+ 	+,. #'9   %NN6***99VCLL11222r?   z.cppc                 N    t           d             dz   z             S )NFr   r  )r  )r   r   r   extra_headersr  fallback_ops_dictr   r  s   r=   r  z'gen_aoti_c_shim_files.<locals>.<lambda>  sA    O)!*#5))++d2]B	 	 	 r?   )r+   r)   )	functionsr   r   r   r   tupler   r   r   r  writeopenospathr   install_dirreaddifflibunified_diff
splitlinesRuntimeErrorFileNotFoundErrorprintr   )r  r	  r   r   r  r  r   r  
func_groupr   	fallbacksop_namedevice_nameheader_file_nameold_file
old_headerdiffr   r"  r  r#  r   r  r  s      `  `          @@@@@@@r=   gen_aoti_c_shim_filesr:    s    "$1  
((** 	 	D'3GQ*4+CD 4 & k
 k
 #/"6<Q 	 	$ 	* 	*D*400G+++%)	'"$) *
 *
"():):";";*
 *
 *
 %
 %
!
 !- 4ff,:L:L:N:N 5[444$%&1	
 	
 	

  +	MM """"   
%GLL!46FGG   !)J!Z//#yy#0 * 5 5 7 7 * 5 5 7 7)3'/)+      + , , , ,    0                             B %   w||G$79IJJVVV    	3 	3 	3 	3 	3 	3 	3 	3 	3 	3  ',@,N,N'  	 	'k'''	 	 	 	 	 	 	 	 	 	 		
 	
 	
 	
k
 k
s7   :2G,A>F7+G7F;	;G>F;	?G?HH)F)r'   r   r(   r)   r*   r$   r+   r,   )rZ   r[   rP   r[   r+   r[   )ra   rb   rc   rd   r+   re   )rm   r   r+   re   )
rm   r   r   r)   r   r)   r   r   r+   r   )r   r   r   r   r+   r	   r   )r   r   r   r   r+   r)   )r   r   r   r   r   r   r   r   r   r$   r+   r   )r   r   r   r   r   r   r   r   r   r$   r+   r   )r   r   r+   r)   )r   r   r   r   r   r   r   r   r   r   r   r$   r   r$   r+   r   )r&   )r   r   r   r   r   r   r   r   r   r   r   r$   r   r$   r   r)   r+   r)   )r  r   r	  r
  r   r   r   r   r  r  r  r)   r   r$   r  r$   r+   r  )G
__future__r   r,  r(  r   dataclassesr   typingr   torchgen.aoti.fallback_opsr   r   torchgen.api.typesr   torchgen.api.types.signaturesr	   r
   torchgen.contextr   torchgen.modelr   r   r   r   r   r   r   r   r   r   r   r   r   r   torchgen.utilsr   r   collections.abcr   r   rB   r$   r   rr   rs   floatr)   DeviceIndexLayoutMemoryFormat
ScalarType	GeneratorrA   rD   rC   rH   r`   rl   r   r   r   r   r   r   r   r   r   r   r   r  r:  r:   r?   r=   <module>rK     s|   " " " " " " "  				  ! ! ! ! ! !             P P P P P P P P 2 2 2 2 2 2 I I I I I I I I 8 8 8 8 8 8                                 1 0 0 0 0 0 0 0   (((((( M%
K
J	
M9
M8
L(
J
	
M9

y
+   M<
K
J	
M=
M=
L(
J$
*
M=
,
(
o   M2
K
J
M2
M2
L"
J
7
M-
9
5
> ( tK tK tK tK tKnA A A A
? ? ? ?,3; 3; 3; 3;n MO  N N N NWK WK WK WKt   $ -1M M M M M6' ' ' 'Tc c c c$   # # # #L $       D Z
 Z
 Z
 Z
 Z
z|
 |
 |
 |
 |
 |
r?   