
    ajo                       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& 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j/        dej0        dej1        dej2        diZ3ej'        d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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j/        dej0        d ej1        d!ej2        d"iZ5	 dldmd+Z6dnd/Z7dod5Z8dpd8Z9i a:d9e;d:<   dqd@Z<drdFZ=	 dsdtdIZ>dudRZ?dvdTZ@dwdUZAdxdWZB edXY           G dZ d[                      ZC	 dydzdaZDd{dkZEd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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"                    rWt          | j        |          \  }}}}t!          |          dk    rt%          dt          |                      d|d          d|d<   |                    d           |d         }|                    |dz              |d         }g }|dk    r8| j        t%          d           |                    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bool ListType must have a sizez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 )r1   r2    ).0ts     ]/home/longshao/multi-rider-rag/.venv/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   AssertionError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<   rG   rG   S   s}   
 #x   p
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	&	& P
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w<<1 !V4PS99!V!VWWW ,gaj+++
y!!!QxTG^$$$1F?? x$%EFFF!!"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 ) r9   )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'   rJ   rG   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           
        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$t          dt	          |j                              ||j        |
          }|r,|	                    d||          d||          d| d           |	                    d||          d| d           t          ||          |	fS )Nretr0   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   rA   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_backwardTr5   
tmp_resultz	std::get<z>(tmp_result)z"Expected BaseType for return, got zif (z) { *z = z; };)r&   r   rp   r(   r*   r(   )	enumeratereturnsrJ   r?   rg   r   r'   r@   rE   rF   unambiguous_namerK   rL   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-- 	X !Vd38nn!V!VWWW~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t          d| d| d          	 t          |dd                    }n)# t          $ r}	t          d| d| d          |	d }	~	ww xY w||v rt          | 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 )Nr5   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.   r4   r-   zauto tmp_result = r%   z		
c              3  "   K   | ]	}|z   V  
d S Nr9   )r:   rindents     r<   	<genexpr>z1gen_declaration_and_definition.<locals>.<genexpr>a  s'      ::Qfqj::::::r>   z	
        zL {
            AOTI_TORCH_CONVERT_EXCEPTION_TO_ERROR_CODE({
                z(
                    z
                );
        z#
            });
        }
        zAOTI_TORCH_EXPORT r   )r'   r   r   sorteditemsrI   rL   int
ValueErrorset	is_out_fnrl   	argumentsoutflat_non_outflat_allinplacer   rh   textwrapdedentjoinupdaterJ   )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!!#&& 	 UiUUWUUU  	%%FF 	 	 	 ]i]]W]]] 	 ))) G!V!V)!V!V!VWWW'/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        }|t          d|j        j
                   |S )NF)methodfallback_bindingzNo cpp signature found for )r   from_schemafuncr
   from_native_functionsymint
has_symintsymint_signature	signaturerL   r'   )r   r   cpp_sigscpp_sigs       r<   *gen_static_dispatch_backend_call_signaturer   |  s     
)!&
1
1C 5	%%  H z %af'')) %+$H16;HHIIINr>   backend_indexBackendIndex | Nonec                   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   DispatchKey | Nonebackend_indicesdict[DispatchKey, BackendIndex]extend_aoti_c_shimc                   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   rE   )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   r9   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[DispatchKey | None]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   r9   )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   r9   )
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   rJ   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_filesr8    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  )F
__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   rA   r#   r   rr   rs   floatr(   DeviceIndexLayoutMemoryFormat
ScalarType	Generatorr@   rC   rB   rG   r`   rl   r   r   r   r   r   r   r   r   r   r   r   r  r8  r9   r>   r<   <module>rI     sj   " " " " " " "  				  ! ! ! ! ! !             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
> ( vK vK vK vK vKrA A A A
? ? ? ?,4; 4; 4; 4;p MO  N N N NWK WK WK WKt   & *.M M M M M6' ' ' 'Tc c c c$   # # # #L $       D Z
 Z
 Z
 Z
 Z
z|
 |
 |
 |
 |
 |
r>   