
    JTh                      % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	J
r
  S SKJrJr  S SKJr  S SKJrJrJrJrJr  S SKrS SKJs  Jr  S SKJs  Jr  S SKJs  Jr  S SKJs  Jr  S SK J!r!  S SK"J#r#  S SK$J%r%  S S	K&J'r'  S S
K(J)r)J*r*J+r+J,r,J-r-J.r.J/r/  S SK0J1r1J2r2J3r3J4r4  S SK5J6r6J7r7J8r8J9r9  S SK:J;r;J<r<J=r=J>r>  S SK?J@r@  S SKAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[  S SK\J]r]J^r^J_r_J`r`  S SKaJbrb  S SKcJdrdJereJfrfJgrgJhrhJiriJjrjJkrk  S SKlJmrmJnrn  \(       a  S SKoJprp  \" S5      rq " S S\n5      rr\	" SSS/5      rs0 qtS\uS'   0 qvS\uS'           S^S jrw   S_           S`S! jjrxSaSbS" jjry\R                  ScS# j5       r{ SdS SS$.           SeS% jjjr|SfS& jr}SgS' jr~ShS( jr      SiS) jr      SjS* jrSkS+ jr      SlS, jr        SmS- jr        SnS. jr        SnS/ jr\" S0S19 " S2 S35      5       r\" S0S19 " S4 S55      5       r\" S0S19 " S6 S75      5       r\" S0S19 " S8 S95      5       r\" S0S19 " S: S;5      5       r\3SoS< j5       rSpS= jrSqS> jr\" S0S19 " S? S@5      5       rSrSA jrSsSB jrStSC jrSuSD jr    SvSE jr            SwSF jr            SxSG jr\3SySH j5       rSzSI jr\4      S{SJ j5       r      S|SK jr    S}SL jr    S~SM jr\!GR:                  SN.       SSO jjr    SSP jr\!GR:                  SN.       SSQ jjr      SSR jr                    SSS jr              SST jr      SSU jr                        SSV jr                        SSW jr                                SSX jr                                            SSY jr      SSZ jrSS[ jrSS\ jr\S]:X  a  \" 5         gg)    )annotationsN)defaultdict
namedtupleOrderedDict)	dataclassfield)Path)AnyCallableLiteralTYPE_CHECKINGTypeVar)inductor_fallback_ops)cpp)	translate)BindingCppSignatureCppSignatureGroupDispatcherSignature
NamedCTypeNativeSignatureSpecialArgName)method_with_native_functionnative_function_managerwith_native_function with_native_function_and_indices)gen_aoti_c_shim*gen_static_dispatch_backend_call_signatureget_fallback_op_nameget_header_for_aoti) gen_functionalization_definition"gen_functionalization_registration.gen_functionalization_view_inverse_declarationGenCompositeViewCopyKernelgen_all_vmap_plumbing)ArgumentBackendIndexBackendMetadataBaseOperatorNameDEFAULT_KERNEL_NAMESPACEdispatch_device_mapDispatchKeyFRAGMENT_NAMESPACESFunctionSchemais_cuda_dispatch_keyis_generic_dispatch_keyis_ufunc_dispatch_keyis_xpu_dispatch_keyLocationNativeFunctionNativeFunctionsGroupNativeFunctionsViewGroupOperatorNameOptionalType
SchemaKindSelfArgumentSTRUCTURED_DISPATCH_KEYSTensorOptionsArgumentsTypeVariantViewSchemaKind)add_generated_native_functionsgen_composite_functional_kernelgen_composite_out_kernelpre_group_native_functions)SelectiveBuilder)assert_never	concatMapcontextFileManagermake_file_managermapMaybeNamespaceHelperTarget)
YamlDumper
YamlLoader)SequenceTc                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )
LineLoader   c                Z   > [         TU ]  XS9nUR                  R                  S-   US'   U$ )N)deep   __line__)superconstruct_mapping
start_markline)selfnoderV   mapping	__class__s       D/var/www/auris/envauris/lib/python3.13/site-packages/torchgen/gen.pyrZ   LineLoader.construct_mapping   s3    '+D+<"oo22Q6
     )F)__name__
__module____qualname____firstlineno__rZ   __static_attributes____classcell__)r`   s   @ra   rS   rS      s     rc   rS   
ParsedYamlnative_functionsbackend_indiceszdict[str, ParsedYaml]_GLOBAL_PARSE_NATIVE_YAML_CACHEzdict[str, set[str]]_GLOBAL_PARSE_TAGS_YAML_CACHEc                z   ^  UR                  [        U 4S j[        R                  " 5        5       S5      U5      nU$ )Nc              3  J   >#    U  H  u  pU" T5      (       d  M  Uv   M     g 7fNrd   ).0checkdevicedispatch_keys      ra   	<genexpr>1file_manager_from_dispatch_key.<locals>.<genexpr>   s$      %@ME& %@s   #	# )getnextr,   items)rv   
device_fms
default_fmfms   `   ra   file_manager_from_dispatch_keyr      sB    
 
%8%>%>%@
 	
 	

B Irc   Fc           	       ^^ [        U [        5      (       d   e/ n[        [        5      nU  H  n[        U[        5      (       d
   SU 35       e[        UR	                  S5      [
        5      (       d   U5       e[        X7S   5      mUR	                  S5      mTc
   SU 35       e[        UU4S j5         [        R                  " UTX5      u  pUR                  U5        [        R                  " Xi5        S S S 5        M     [        U5        [        S 5      n
U(       d  [        XV5        UR                  5        H/  u  p[        USS[!        U5      =(       d    [#        U5      US	9X'   M1     [%        XZ5      $ ! , (       d  f       GM^  = f)
Nzexpected to be dict: rX   funczmissed 'func' in c                    > ST ST  3$ Nzin z:
  rd   )funcslocs   ra   <lambda>*parse_native_yaml_struct.<locals>.<lambda>   s    s3%uUG4rc   c                 8    [        [        R                  SSS0 S9$ )NTFrv   use_out_as_primaryexternaldevice_guardindex)r(   r-   	Undefinedrd   rc   ra   r   r      s     $..# 
rc   TFr   )
isinstancelistr   dictrz   intr4   rH   r5   	from_yamlappendr(   
grow_indexerror_check_native_functionsrA   r|   r0   r3   rk   )es
valid_tagsignore_keyspathskip_native_fns_genrsbser   mindiceskvr   r   s                @@ra   parse_native_yaml_structr      s_    b$!BALTARB!T""?&;A3$??"!%%
+S114141tz]+f 9$5aS"99 45$..q#zOGDIIdO##B* 65  !$/:	

0G &r.
!#-a0J4G4J

  b""; 65s   6AE;;
F	c                  ^^ [        U [        5      (       d   e[        5       nU  H  n[        UR                  S5      [        5      (       d   U5       e[        XS   5      mUR                  S5      m[        UU4S j5         UR                  5       nUR                  S5      nUR                  SS5      nUS:w  d   eUR                  U5        S S S 5        M     U$ ! , (       d  f       M  = f)NrX   tagc                    > ST  ST 3$ r   rd   )r   tagss   ra   r   (parse_tags_yaml_struct.<locals>.<lambda>   s    s3%uTF3rc   descry   )
r   r   setrz   r   r4   rH   copypopadd)	r   r   r   r   e_inamer   r   r   s	          @@ra   parse_tags_yaml_structr      s    b$5B!%%
+S114141tz]+uuU|34&&(C775>D7762&D2::FF4L 54	  I 54s   AC
C-	c                    U [         ;  aF  [        U 5       n[        R                  " U[        S9n[        X S9[         U '   S S S 5        [         U    $ [         U    $ ! , (       d  f       [         U    $ = f)NLoader)r   )ro   openyamlloadrS   r   )r   fr   s      ra   parse_tags_yamlr      sh     00$Z11Z0B2H2W)$/  )..(..	 Z )..s   *A
A0)r   loaded_yamlc                   U [         ;  aR  [        U5      nUc.  [        U 5       n[        R                  " U[
        S9nS S S 5        OUn[        WUUU US9[         U '   [         U    $ ! , (       d  f       N+= f)Nr   )r   r   )rn   r   r   r   r   rS   r   )r   tags_yaml_pathr   r   r   r   r   r   s           ra   parse_native_yamlr      sz     22$^4
 dqYYq4  B0H 31
'- +400 s   A&&
A4c           	        0 n[        [        5      nU  HL  nX1UR                  R                  '   X#R                  R                  R                     R	                  U5        MN     U  GH  nUR
                  b  UR                  UR
                  5      nUc8   UR                  R                   SUR
                   SUR
                   S35       eUR                  (       d8   UR                  R                   SUR
                   SUR
                   S35       e[        [        R                  5      n1 SknUR                  R                  R                   Ht  nUR                  U;   d  M  [        UR                  R                  5      UR                  4U;  d  MF  [        SUR                   SUR                  R                   S35      e   S	UR                  ;   d  GMx  [        UR                  R                  5      S
:w  d  GM  [        UR                  R                  5      S:w  d  GM  [        UR                  R                  R                  5      S:w  d  GM  UR                  R                  R                  nUR                   (       d   UR                  R                   S35       e[#        UR$                  SUR&                  5      n	[)        X)   5      S:  a  GMx   UR                  R                   SU S35       e   g )Nz0 is marked as a structured_delegate pointing to z, but z is missing.zY is not marked as structured. Consider adding 'structured=True' to the delegated operator>   zrandom_.fromfromuniform_r   !_has_compatible_shallow_copy_typer   zArgument name 'z' in function 'z' is a reserved Python keyword.inplace_viewresize_
resize_as_set_z is marked with tag: inplace_view, but it doesn't follow the naming convention for inplace ops - the codegen expects the base name to have a trailing underscore. Fr   zw is marked with tag: inplace_view. The codegen expects there to be a corresponding out-of-place view op with the name 'z/' and matching schema, but it didn't find one. )r   r   r   r   r   structured_delegaterz   
structuredr   keywordkwlist	argumentsflat_allstrAssertionErrorr   inplacer*   basedunder_methodlen)
r   func_mapbase_func_mapr   delegate_funcPYTHON_RESERVED_KEYWORDSEXCLUSION_LISTarg	base_nameout_of_place_base_names
             ra   r   r     s   35HBMdBSM !ffkk&&'..q1    ,$LL)>)>?M , 66;;-O(()0E0E/FlT, !++ 66;;-O(()0E0E/F GNO+ $'w~~#6 
 66##,,Cxx33$chh/~E()#((?166;;-Ono  - aff$AFFKK I-AFFKK L0AFFKK$$%/((I$$ 66;;-  q q$ &6y'>'>&" }<=A 66;;-  77@kAprAa rc   c                .   U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  S	S
5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n SU  S3$ )z1Convert a python string into a c++ string literal\z\\"z\"z\az\bz\f
z\nz\v	z\t)replacess    ra   
cpp_stringr   S  s    			$A			#uA			$A			$A			$A			$A			$A			$Aqc8Orc   c                    [        U 5      S:X  a  / $ U  Vs/ s H  oR                  PM     sn[        R                  [        R                  [        R
                  [        R                  /-   $ s  snf )Nr   )r   rv   r-   CompositeImplicitAutograd%CompositeImplicitAutogradNestedTensorCompositeExplicitAutograd&CompositeExplicitAutogradNonFunctional)backendsbackends     ra   static_dispatch_keysr   m  s`    
8}	4<=H$$H=11==11>>	A
 
 	
=s   A-c                j   U R                   c  UR                  U 5      (       a  UR                  $ U R                  (       a  [        R
                  $ U R                  (       a  [        R                  $ U R                  (       a  [        R                  $ U R                  (       a  [        R                  $ g rr   )r   
has_kernelrv   &has_composite_explicit_autograd_kernelr-   r   5has_composite_explicit_autograd_non_functional_kernelr   &has_composite_implicit_autograd_kernelr   4has_composite_implicit_autograd_nested_tensor_kernelr   )r   backend_indexs     ra   get_static_dispatch_backendr   y  s     	(M,D,DQ,G,G
 )))	
	1	1444	
	@	@AAA	
	1	1444	
	?	?@@@rc   c                    Ub  U R                   (       a  g / nU HC  n[        X5      nUc  M  UR                  SU R                   SUR	                  5        S35        ME     SR                  U5      $ )N#include <ATen/ops/__dispatch.h>r   )manual_kernel_registrationr   r   	root_namelowerjoin)r   r   outputr   rv   s        ra   static_dispatch_ops_headerr    sq      < <F21<#MM%akk]!L4F4F4H3IV  99Vrc   c                L    [        U 5       Vs/ s H	  nSU S3PM     sn$ s  snf )N#include <ATen/Functions.h>)r   )r   rv   s     ra   static_dispatch_extra_headersr    s7     1::L ,|4:  s   !c                ,   SS jn[        U R                  5       5      n[        UR                  5       5      nU H5  nUR                  R                  [        R
                  :X  d  M-  U" U5      n  O   [        X45      nSR                  S U 5       5      $ )Nc                0   / nU  H  nUR                   S:X  ai  [        [        [        R                  UR
                  R                  5      UR                   UR                  UR                  S9nUR                  U5        M|  UR                  U5        M     U$ )Nmemory_format)nctyper   defaultargument)
r   r   r   r    possibly_redundant_memory_formatr  typer  r  r   )input_bindingsoutput_bindingsbindingspl_mem_format_bindings       ra   add_spl_memory_format_binding5translate_args.<locals>.add_spl_memory_format_binding  s    )+%G||.)0%&GG++ !#OO$--*&  &&'=>&&w/ & rc   , c              3  8   #    U  H  oR                   v   M     g 7frr   exprrs   as     ra   rw   !translate_args.<locals>.<genexpr>  s     +UVVU   )r  list[Binding]returnr  )r   r   r  r   r   r  r   r  )sigcpp_sigr  src_bindingsgoal_bindingsr   exprss          ra   translate_argsr%    s|    
$ (L**,-M ::??nMMM8FL  l2E99+U+++rc   c           	     6   [        X5      nUR                  5       n[        X5      nUR                  U5      nU(       a  UR                  (       a  UR                  O[
        nUR                  SS5      nSU SUR                  R                  5        SU SU S3	$ )N::nativery   return ::();)	r   r   r%  
get_kernelcpp_namespacer+   r   rv   r   )	r   r   r   r!  r   r$  backend_metadata	kernel_nsnss	            ra   %generate_static_dispatch_backend_callr1    s    
 9@G<<>D3(E$//2  0 > > 	&&% 
 
		:r	*BRD=55;;=>bawbQQrc   c                   [         R                  " USSS9nU R                  (       a,  UR                  R	                  5       (       a  UR
                  nOUR                  nUc   eUR                  5       n[        X5      n[        R                  " SS5      nUR                  (       a+  SU S[        R                  R                  5        SU SU S3	$ UR                  (       a+  SU S[        R                   R                  5        SU SU S3	$ UR"                  (       a+  SU S[        R$                  R                  5        SU SU S3	$ UR&                  (       a+  SU S[        R(                  R                  5        SU SU S3	$ S	U S
SR+                  U Vs/ s H  n[-        UR.                  5      PM     sn5       S3$ s  snf )NFmethodfallback_bindingr'  ry   r(  r)  r*  r+  z5TORCH_CHECK(false, "Static dispatch does not support z forr  z ");)r   from_native_functionsymintr   
has_symintsymint_signature	signaturer   r%  r+   r   r   r-   r   r   r   r   r   r   r   r   r  r   rv   )	r   r   rm   cpp_sigsr!  r   r$  r0  r   s	            ra   &generate_static_dispatch_fallback_callr<    s   
 !55	%%H zzaff''))++$$<<>D3(E	!	)	)*b	9B//B{DDJJLMRPTvUVW\V]]_``	
	@	@B{QQWWYZZ\]a\bbcdicjjlmm	
	1	1B{DDJJLMRPTvUVW\V]]_``	
	?	?B{PPVVXYY[\`[aabchbiikllH OAC""#AB C4K 	KAs   Gc           	        [        U5      S:X  d  UR                  (       a  gU Vs/ s H@  nUR                  U5      (       d%  UR                  c  M(  UR                  [
        ;   d  M>  UPMB     nn[        U5      S:X  a  [        XUS   5      $ [        U5      S:X  a  [        XU5      $ U R                  5        Vs/ s Hz  n[        UR                  [        5      (       dL  [        UR                  [        5      (       d  MC  UR                  R                  R                  5       (       d  Mn  UR                  PM|     nnSR!                  U5      nUR"                  R                  R$                  n/ n	/ n
Ub  U
R'                  S5        US:w  a  U
R'                  SU S35        U	R'                  SS	R!                  U
5       S
35        U	R'                  S5        / nU HA  nUR'                  SUR                   S35        UR'                  S[        XU5       S
35        MC     [        XU5      nSnSUR!                  U	5       SUR!                  U5       SU S3$ s  snf s  snf )a  
For a given `NativeFunction`, find out the corresponding backend and dispatch to it. If more than one
backends exsit, fallback to static dispatch by determining dispatch key from inputs.
Arguments:
    sig: A CppSignature or DispatcherSignature for this native function we want to use.
    f: NativeFunction to generate static dispatch.
    backend_indices: All available backends.
Return:
    C++ code to call backend-specific functions, e.g., "return at::cpu::add(self, other, scale);"
r   ry   rW   r  z>DispatchKeySet(c10::computeDispatchKey(dtype, layout, device))z$c10::detail::multi_dispatch_key_set()zDispatchKeySet _dk_set = z | ;z=DispatchKey _dk = c10::highestPriorityBackendTypeId(_dk_set);zcase DispatchKey:::r   z
		
    z
    switch (_dk) {
        z
        default:
            z
    }
    )r   r   r   r   rv   r<   r1  r<  r   r   r  r;   r'   r  is_tensor_liker   r  r   tensor_optionsr   )r   r   rm   bkeysr  native_tensor_argstensor_argstensor_optsstmtssubexprsdispatch_coder   fallback	connectors                  ra   static_dispatchrN    sH    ?q A$@$@ ! A<<??!!	 	

 ":: 	
  	  4yA~4ST!WEE	Ta5coNN  Aajj,//ajj(+ 	 JJOO**,	 	    ))./K&&""11KEHL	
 b>{m1MN	LL.uzz(/C.DAHI	LLPQM!3E4F4F3GqKL8GHL	
  6coNHI^^E 			&' (J  [s$   'II'I:AI 'I+IT)frozenc                  J    \ rS rSr% S\S'   \" \S9rS\S'   \S
S j5       r	Sr
g	)RegisterSchemaiE  rE   selector)default_factoryzdict[str, int]
known_tagsc                   U R                   R                  U5      (       d  g SSR                  S [        UR                  5       5       5      -   S-   nUS:X  a"  S[        [        UR                  5      5       S3$ SnX R                  ;  a,  [        U R                  5      nX@R                  U'   S	U S
U S3nU S[        [        UR                  5      5       SU R                  U    S3$ )N{r  c              3  ,   #    U  H
  nS U 3v   M     g7f)z	at::Tag::Nrd   )rs   r   s     ra   rw   *RegisterSchema.__call__.<locals>.<genexpr>N  s     KNS3%0Ns   }z{}zm.def(z, {});
ry   z const std::vector<at::Tag> tags_z = ;
z, tags_z);
)
rR  is_native_function_selectedr  sortedr   r   r   r   rT  r   )r]   r   r   
maybe_tagsidxs        ra   __call__RegisterSchema.__call__J  s    }}88;;TYYKF166NKKKcQ4<Js166{34J??
&doo&C$'OOD!;C5D6MJVJs166{$;#<GDOOTXDYCZZ^__rc   rd   Nr   r5   r  
str | None)re   rf   rg   rh   __annotations__r   r   rT  r   r_  ri   rd   rc   ra   rQ  rQ  E  s+    !&t!<J< ` !`rc   rQ  c                  >    \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
ComputeOperatorsi^  .Literal[Target.DECLARATION, Target.DEFINITION]targetlist[BackendIndex]static_dispatch_backend_indicesc                   [         R                  " UR                  5      nUR                  R                  R	                  5       nU R
                  [        R                  L a  SU SUR                  5        SUR                  R                  R                   SUR                  R                  R                   S[        [        UR                  5      5       SUR                  SSS	9 SUR                  S
SS	9 S3$ U R
                  [        R                  L Ga  SUR                   SU SU SU SU SU S3nS H  nU(       a@  SR                  S/UR                  5        Vs/ s H  ofR                  PM     sn-   5      nS
nO;SR                  UR                  5        Vs/ s H  ofR                  PM     sn5      nSnUn	U SU 3n
SU SU	 SU S3nU(       d-  [!        U R"                  5      S:  a  [%        X!U R"                  S9nUSUR                   SUR                  XS	9 SU S 3-  nM     U$ ['        U R
                  5        g s  snf s  snf )!Nz
struct TORCH_API z {
  using schema = z;
  using ptr_schema = schema*;
  // See Note [static constexpr char* members for windows NVCC]
  static constexpr const char* name = "aten::z3";
  static constexpr const char* overload_name = "z/";
  static constexpr const char* schema_str = z;
  static callF)r   is_redispatching_fn
redispatchTz;
};

// aten::z.
static C10_NOINLINE c10::TypedOperatorHandle<z::schema> create_zQ_typed_handle() {
  return c10::Dispatcher::singleton()
      .findSchemaOrThrow(z::name, z::overload_name)
      .typed<z::schema>();
}
)FTr  dispatchKeySetr)  z
    static auto op = create_z_typed_handle();
    return op.r*  r+  r   )rm   r    {
    z
}
)r   from_schemar   r   unambiguous_namerg  rM   DECLARATIONr  overload_namer   r   defn
DEFINITIONr  r   r   ri  rN  rF   )r]   r   r   r   defnsrl  r  dispatcher_exprs_strmethod_basedispatcher_callmethod_namefn_bodys               ra   r_  ComputeOperators.__call__c  s   !--aff5vv{{++-;;&,,,0 ((* . /0ffkk.>.>-? @1121J1J0K L--7AFF-D,E F

((E(
:	; <

(($(
?	@ A
 
 [[F---

&& ..2V3DTF Kxv .V E (5#&+/99)*cmmo-Noffo-NN,( #/K+/99cmmo5Voffo5V+W("(K"-!%b6!F #q!5 6b<
 ,D@@AAE .0T0TG  

&& {D E FI  3 (5> L%= .O 6Ws   $I"I
rd   Nr   r5   r  r   re   rf   rg   rh   rc  r   r_  ri   rd   rc   ra   re  re  ^  s"    ::%77 R& !R&rc   re  c                  (    \ rS rSr\SS j5       rSrg)ComputeFunctioni  c                6   [         R                  " USUR                  S9nUR                  R	                  5       nSnUR                  5        GHB  n[        R                  " UR                  5      n[        UR                  5       UR                  5       5      nSR                  U Vs/ s H  oR                  PM     sn5      n	UR                  (       a  Sn
OSn
[        R                  UR                  ;   aL  USUR                   SUR!                  5        S	UR                  R"                  R%                  5        S
U	 S3	-  nU(       d  GM  USU
 SUR!                  SS9 S	UR                  R"                  R%                  5        S
U	 S3	-  nGME     U$ s  snf )NFr3  ry   r  zc10::SymIntint64_trn  
inline  {
    return at::_ops::::call(z);
}zZ
namespace symint {
  template <typename T, typename = std::enable_if_t<std::is_same_v<T, z>>>
  T)suppress_symint_suffixz	);
  }
}
)r   r6  manual_cpp_bindingr   r8  
signaturesr   rq  r   r   r  r  r7  r?   functionvariantsdeclr   rr  )r]   r   	sig_groupr8  resultr   
target_sigr$  r   	exprs_str	intlike_ts              ra   r_  ComputeFunction.__call__  s~   %::ea.B.B
	 VV&&(
'')C,88@Jcmmoz/C/C/EFE		5"95a665"9:Izz)	%	1::- 

&& 
| ffkk2245WYK H  z GGPk R8848() *ffkk2245WYK H	 3 *B ; #:s   (F
rd   Nra  re   rf   rg   rh   r   r_  ri   rd   rc   ra   r  r    s     ( !(rc   r  c                  >    \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
ComputeTensorMethodi  rf  rg  rh  ri  c                   [         R                  UR                  ;  a  g UR                  R	                  5       (       a   eUR                  R
                  R                  c   e[        R                  " USUR                  S9nU R                  [        R                  L a0  SnUR                  5        H  nX4R                  5        S3-  nM     U$ U R                  [        R                  La  [!        U R                  5        SnUR                  5        H  n["        R$                  " UR                  5      n['        UR                  5       UR                  5       SS9nSR)                  U Vs/ s H  owR*                  PM     sn5      nUSUR                   SUR-                  S	S
9 SUR                  R.                  R1                  5        SU S3	-  nM     U$ s  snf )NTr3  ry   z const;
)r4  r  rn  r  zTensor::)prefixz const {
    return at::_ops::r  );
}
)r?   r4  r  r   	is_out_fnr   self_argr   r6  r  rg  rM   rs  r  r  rv  rF   r   rq  r   r  r  ru  r   rr  )	r]   r   r  r  r   r  r$  r   r  s	            ra   r_  ComputeTensorMethod.__call__  s   >>+66##%%%%vv((444%::dQ-A-A
	 ;;&,,,F ++-XXZL	22 .M;;f///%'')C,88@Jcmmoz/C/C/EdSE		5"95a665"9:I 

&& 
#$ %ffkk2245WYK H F *  #:s   .G
rd   Nra  r  rd   rc   ra   r  r    s     ::%77 " !"rc   r  c                  (    \ rS rSr\SS j5       rSrg)ComputeRedispatchFunctioni  c                   [         R                  " USUR                  S9nSnUR                  5        H  n[        R
                  " UR                  5      n[        UR                  5       UR                  5       5      nSR                  S/U Vs/ s H  owR                  PM     sn-   5      nUSUR                   SUR                  SS	9 S
UR                  R                  R                  5        SU S3	-  nM     U$ s  snf )NFr3  ry   r  ro  rn  r  T)rl  r  z::redispatch(r  )r   r6  r  r  r   rq  r   r   r   r  r  r  r   rr  )	r]   r   r  r  r   r  r$  r  r  s	            ra   r_  "ComputeRedispatchFunction.__call__  s     &::ea.B.B
	 '')C,88@Jcmmoz/C/C/EFE		#3"47N17N"NOI 

&& T*+ ,ffkk2245]9+ N F *  8Os   C>rd   Nra  r  rd   rc   ra   r  r    s      !rc   r  c                    SU R                   R                  R                   SU R                   R                  R                   S3$ )Nz{"aten::z", "z"},)r   r   rt  r   s    ra   compute_aten_opr  8  s5    qvv{{''(QVV[[-F-F,GtLLrc   c                   U R                   (       d  g [        U R                  5         [        R                  " U 5      n[         R
                  " U 5      nSR                  S U 5       5      nU R                  R                  nUc  SnSnU R                   (       a  U R                  R                  OS nU(       GaS  / UR                  R                  5       QUR                  PnU VV	s/ s H  o  H  oPM     M     n
nn	U
 V	s/ s H  oR                  R                  5       PM     nn	SR                  S U 5       5      nSU S3nU
 V	s/ s H!  n	[         R                  " XR                  S9PM#     nn	S	R                  S
 U 5       5      n/ n[        U
5       GH,  u  nn	SR                  US U S/-   UUS-   S  -   5      nSU S3nUU   R                  SS9nU SU	R                   SU S3nSU	R                   S3nSUU    SU S3n/ nUR!                  U S35        [        U
5       HY  u  nn	UU:X  a!  UR!                  SU	R                   S35        M-  UR!                  SU	R                   SU	R                   S35        M[     UR!                  S5        SR                  U5      nUR!                  SU S U S!U S"35        GM/     SR                  U5      nSR                  S/[#        U5      -  5      nS#U S$3nS%nS&U S'U SU S(3nOS)nS)nS*U S+U S,U S-U S-U S.U S/3sS S S 5        $ s  sn	nf s  sn	f s  sn	f ! , (       d  f       g = f)0Nr  c              3  @   #    U  H  oR                  5       v   M     g 7frr   )r  r  s     ra   rw   4compute_meta_function_declaration.<locals>.<genexpr>D  s     4t!VVXXt   zat::impl::MetaBasevoidc              3  .   #    U  H  nS U S3v   M     g7f)zbool z = falseNrd   )rs   params     ra   rw   r  V  s      85TE%wh'5Ts   z
template <>)bindsrZ  c              3  ^   #    U  H#  nUR                  S S9 SUR                   3v   M%     g7f)T	strip_ref N)cpp_typer   )rs   elems     ra   rw   r  a  s2      3?D ==4=01499+>?s   +-truerW   zprecompute_out<Tr  z set_r*  z value)r   z already set"zstatic_assert(z == false, r+  z ret;zret.z	 = value;z	 = this->r?  zreturn ret;r   z
                    z {
                        z
                        z'
                    }
                z'using meta_return_ty = precompute_out <z>;meta_return_tyz
                zG
                struct TORCH_API precompute_out {
                    z;
            };ry   zstruct TORCH_API structured_z
 : public rp  rA  z meta(z);
};
)r   r   outmetar   meta_argumentsr  structured_inheritsprecomputedr   valuesr   upperargument_type	enumerater  r   r   )gr   argsargs_strparent_classmeta_returnr  precomputed_valuesreplace_listr  precomputed_elementsprecomputed_template_parametersprecomputed_template_params_strprecompute_template_decl#precomputed_elements_with_cpp_typesprecomputed_elements_declsetter_methodsireturn_ty_templates	return_tyelem_cpp_tyr:  
assert_msgassert_stmtconstruction_stmtsjconstruction_blocksetter_methods_declmeta_return_template_paramsmeta_return_typedefprecomputed_decls                                  ra   !compute_meta_function_declarationr  >  s   <<	 	'yy|((+994t44uu00/L+,<<aee''T "R;#6#6#=#=#?!Q!Q);$);); ! $ /C/.Bd		!.B , / /3ii 85T8 /+ *44S3TTU'V$
 130D ((YY?0 0 3
 ).

 3?3 )%  N$%9:4 '+ii3BQ7h5a!eg>?'#
 ..A-B!D	A!DMM" N   )ktyyk;-wO	  !=9
 ./Nq/Q.RR]^h]iikl &(""))YKu*=>()=>GAtAv*11D92MN*11"499+YtyykC	  ? #))-8%)YY/A%B"%%K  $ &+, -W ;f #'))N"; +/))3>??+'
 %LLgKhhj"k*K$)* +() *./ 0	  #%!!F*\N ;  Mz "	a 
(	'$/37 
(	's7   C M (L0<M #L6&$M 
(L;2F4M 0M  
Mc                   [        U R                  R                  R                  5      nUR                  S5      (       d  UR	                  S5      (       a  gU R                  R
                  R                  c  gUR                  U 5      $ )N_likenew_F)r   r   r   endswith
startswithr   rC  r[  )r   rR  r   s      ra   needs_backend_selectr    sd    qvv{{ D}}W!8!8vv&&.//22rc   c                  >    \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
ComputeBackendSelecti  z/Literal[Target.DEFINITION, Target.REGISTRATION]rg  rE   rR  c                   [        XR                  5      (       d  g [        R                  " UR                  5      n[        UR                  SS9nUR                  5        Vs/ s HQ  n[        UR                  [        5      (       d  M$  UR                  R                  R                  5       (       d  MO  UPMS     nn[        R                  " UR                  5      nUnUR                  5       nSn	U R                  [         R"                  L a  U(       aM  UR                  R                  R%                  5       (       d   eSR'                  S U 5       5      n
SU	 SU
 S3nO1UR                  R                  R%                  5       (       a   eS	U	 S
3nSUR                   SUR)                  U5       SU SUR                  R                  R+                  5        SSR'                  S U 5       5       S3$ U R                  [         R,                  L a  SUR                  R                   SU S3$ [/        U R                  5        g s  snf )NTr7  z.c10::computeDispatchKey(dtype, layout, device)r  c              3  8   #    U  H  oR                   v   M     g 7frr   r   r  s     ra   rw   0ComputeBackendSelect.__call__.<locals>.<genexpr>  s     'K8J18Jr  z-DispatchKeySet _dk_set = c10::DispatchKeySet(z() | c10::detail::multi_dispatch_key_set(z);
DispatchKeySet _dk_mask = c10::DispatchKeySet(DispatchKeySet::FULL_AFTER, DispatchKey::BackendSelect);
DispatchKeySet _dk = c10::impl::computeDispatchKeySet(_dk_set, _dk_mask);z)DispatchKeySet _dk = c10::DispatchKeySet(r+  z	// aten::z
C10_ALWAYS_INLINE
z {
  z
  return at::_ops::z::redispatch(
      _dk, c              3  8   #    U  H  oR                   v   M     g 7frr   r  r  s     ra   rw   r    s     7&6ff&6r  r  zm.impl("aten::z", TORCH_FN(z));)r  rR  nativer   r   r   r   r   r  r'   r  rB  r   rq  r$  rg  rM   rv  has_tensor_argr  ru  rr  REGISTRATIONrF   )r]   r   r   
native_sigr  rF  dispatcher_sigr   dispatcher_exprsrv   rG  
compute_dks               ra   r_  ComputeBackendSelect.__call__  s   #A}}55{{166"$QVVD9
  ))+
+!**h/ 45JJOO4R4R4T + 	 
 -88@ )//1G;;&+++
 "vv''668888"ii'K8J'KK"..:^;cdocp qJM

 66++::<<<<?~RP 

&& $  , FFKK0023 4II7&6778 9  [[F///%affkk],tfCJJ%U
s   "#I	'I4Ird   Nra  r  rd   rc   ra   r  r    s"    ;;  2& !2&rc   r  c                    S [         l        SS jn[         R                  " [        U5        [        R
                  " U S[         SS9$ )Nc                    g)NTrd   )r]   datas     ra   r   format_yaml.<locals>.<lambda>  s    4rc   c                @    U R                  UR                  5       5      $ rr   )represent_dictr|   )dumperr  s     ra   dict_representer%format_yaml.<locals>.dict_representer  s    $$TZZ\22rc   Fg    eA)default_flow_styleDumperwidth)r  r
   r  r
   r  r
   )rN   ignore_aliasesadd_representerr   r   dump)r  r  s     ra   format_yamlr    s9     7J3 {,<= 99TeJcRRrc   c                    U S:X  a  gU S:X  a  g [        U 5      $ ! [         a#     [        U 5      s $ ! [         a    U s s $ f = ff = f)Nr  TfalseF)r   
ValueErrorfloatr   s    ra   pythonify_defaultr    sU    F{	
g1v 	8O 	H	s(   
 
A
3AAAAAc                    [        U [        5      (       a  [        U R                  5      $ [	        U 5      S:X  a  g[
        R                  " U SSSS9R                  5       $ )NTensorz
at::TensorF__placeholder__)mutabler  r7  )r   r9   dynamic_typer  r   r   argumenttype_typer  )ts    ra   r  r  6  sS    !\""AFF## 1v  	5 1%hjrc   c                    S/n[         R                  U ;   a  UR                  S5        [         R                  U ;   a  UR                  S5        U$ )Nr>   r  	namespace)r?   r4  r   r  )r  	method_ofs     ra   compute_method_of_yamlr  C  sG     I~~!"8#%rc   c                ,   0 n[         R                  " U 5      n/ n[        [        U R                  R
                  U5      5       H  u  nu  pV[        UR                  5      U[         R                  " USS9R                  5       S.nUR                  (       ag  UR                  US'   U R                  R                  5       (       a9  UR                  XR                  R                  R                  U   R                  '   UR                  U5        M     X14$ )NFr  )r  r   r  
field_name)r   return_namesr  zipr   returnsr  r  return_typer  r   r  r   r  r   )r   name_to_field_namenamesr  r  rr   rets           ra   compute_returns_yamlr  N  s    T *, QEG!#affnne"<=9A(0OOAe4==?	
 66 !Cvv!!CD66"66#3#3#7#7#:#?#?@s >  &&rc   c               n   [        U R                  [        5      (       a;  S SSU R                  U R                  SS.nU R
                  b  U R
                  US'   U$ [        U R                  [        5      (       a  [        e[        U R                  [        5      (       a  [        U R                  UUUUS9$ g )Nzat::TensorOptionsFT)
annotationr  is_nullabler   r  
kwarg_onlyr  schema_orderkwarg_only_setout_arg_setr  )
r   r  r=   r   r  r  r;   r   r'   compute_argument_yaml)cpp_ar  r   r!  r  r   s         ra   compute_cpp_argument_yamlr$    s     %.."899/ JJJJ"
 ==$"]]C	N
	ENNL	1	1	ENNH	-	-$NN%)#1
 	
 
.rc   c          
        U R                   (       a  [        U R                   5      OS [        U R                  5      U R                  R	                  5       U R
                  [        R                  " U SSS9R                  5       S.nU R                  b6  [        [        R                  " U R                  U R                  SS95      US'   U R
                  U;   a  SUS'   U R
                  U;   a+  SUS	'   SUS
'   U R
                  U;   a  X@R
                     US'   U R                  R                  5       nUb5  UR                  b(  [        UR                  5      S:w  a  UR                  US'   U$ )Nr  F)r  r7  )r  r  r  r   r  r  r  Tr  r  allocater  boolsize)r  r   r  r  r  r   r   r  r  r  r  default_expris_list_liker(  r  )r  r  r   r!  r  r   ls          ra   r"  r"    s)    ,-<<c!,,'T$QVV,vv))+!!!+<UKTTVC 	yy*QYYu=
I 	vv LvvHJ66'' 266 :C 	
A}+AFFv0EffFJrc   c                   [        U 5      u  pU R                  R                  R                   Vs1 s H  o3R                  iM     nnU R                  R                  R
                   Vs1 s H  o3R                  iM     nn[        R                  " U SSS9nUR                  R                  5       nU Vs/ s H  n[        USUUUS9PM     n	n[        U R                  R                  5       5      n
U
 Vs/ s H  n[        USUUUS9PM     nnU
 VVs/ s H8  n[        R                  " US[        5       SSSS9  H  nUR                   PM     M:     nnn[        R"                  " U R                  R$                  SS9R'                  5       nU SSR)                  U5       S	3n[+        S
 U 5       5      =(       a    [,        R.                  U R0                  ;  n[3        S[        R                  " U R                  5      4S[5        U R                  R                  R                  5      4S[5        U R                  R                  R6                  5      4SU R8                  4SU R:                  b  U R:                  OS4SSU R                   34SU	4SU4SU4S[=        U R0                  5      4SSU R>                  c  SOU R>                  4SU4SU R                  R                  R                  R@                  4SU4SU RB                  4SU RD                  4SSS U RF                  4/5      $ s  snf s  snf s  snf s  snf s  snnf )!NFr3  r  T)r4  cpp_no_default_argsfaithfulr7  has_tensor_optionsr  z (r  r>  c              3  V   #    U  H  n[        UR                  [        5      v   M!     g 7frr   )r   r  r=   r  s     ra   rw   +compute_declaration_yaml.<locals>.<genexpr>  s     MHqJqzz#9::Hs   ')r   operator_namert  r   category_overridery   schema_stringaten::r   schema_order_cpp_signatureschema_order_argumentsr  )moder  python_moduler  r   is_factory_methodabstractr   )with_gilF)
deprecatedFhas_math_kernel)$r  r   r   flat_kwarg_onlyr   r  r   r6  r:  r$  r   r7  r"  r   r  r   r  returns_typer  r  r  anyr?   r4  r  r   r   rt  r   r3  r  r9  r   is_abstractr   r   )r   r  r  r  r   r!  r  cpp_argsr#  r   schema_order_jit_argumentsr7  r  cpp_schema_order_typescpp_returnsr6  r:  s                    ra   compute_declaration_yamlrG    s6   "6q"9G '(ff&6&6&F&FG&Fff&FNG#$66#3#3#7#78#7a66#7K8!66	%%I "",,.H 	 E 	")#1	
   	 "&aff&C&C&E!F ,	 ,A 	)#1	
 ,  	 , ,A #$
A 	

 	+   ""166>>%@IIKK$/=499=S3T2UUV!W 	MHMM 	-NN!**, 
 SXXaff%&c!&&++"2"234c!&&++";";<=)1+G+GH#'(':':'F##B qvvh/0)$)+EF%'=>0<=AOO$;bQ ((001 "34'Q^^,! H HI/	
 m H8		s   L')L,4L14L6?L;c                   U R                   =(       d    U R                  S L=(       a]    U R                  R                  5       [        R
                  :H  =(       d+    U R                  R                  5       [        R                  :H  $ rr   )r   r   r   kindr:   
functionalr   r  s    ra   "has_autogenerated_composite_kernelrK  /  sU    LL=A11= 	...U!&&++-:CUCU2Urc   c           
     d   [         R                  " U R                  5      n[         R                  " U R                  R                  5      R                  5       n[         R                  " U R                  5      nSR                  S U 5       5      nSU R                   3[        UR                  5        VVs1 s H  u  pgUR                  U 5      (       d  M  UiM!     snn[        R                  1:g  =(       a^    UR                  5        VVs1 s H  u  pgUR                  U 5      (       d  M  UiM!     snn[        R                  [        R                  1:g  5      [        U R                  =(       d    [        U 5      5      S.nU SU SU S[         R"                  " U5       S3$ s  snnf s  snnf )	Nr  c              3  \   #    U  H"  oR                  5       R                  5       v   M$     g 7frr   )
no_defaultr  r  s     ra   rw   4compute_registration_declarations.<locals>.<genexpr><  s      =1,,..   *,r5  )schemadispatchr  r  r*  z); // r   )
dispatcherr   r   r@  r  r  r   r  r   r|   r   r-   r   r   has_composite_kernelrK  jsondumps)	r   rm   r   r@  r  r  r   r   comment_datas	            ra   !compute_registration_declarationsrX  5  sX    ??166"D**166>>:CCEL'Dyy===H166(#*002F241all1oQ2F5567 .446J6tq!,,q/6J55AA
 q--V1STU1VW$L ~QtfAhZvdjj6N5O P   GJs   7F&F&F,-F,c                    U b
  Ub   S5       eS nU b  [        U 5      nUb  [        R                  " USS5      nU$ Ub  [        R                  " U5      nU$ [        R                  " 5       nU$ )NzhBoth provided_op_registration_allowlist and op_selection_yaml_path can NOT be provided at the same time.TF)r   rE   &from_legacy_op_registration_allow_listfrom_yaml_pathget_nop_selector)"provided_op_registration_allowlistop_selection_yaml_pathop_registration_allowlistrR  s       ra   get_custom_build_selectorr`  V  s    
 	+6".		  26)5$'(J$K! ,#JJ%
 O 
 	+#223IJ O $446Orc   c                       SS jn[        [        5      nU  H  nUR                  R                  5       nUR                  nU[
        R                  :X  a-  UR                  R                  5       nXbU   ;  d   eX2U   U'   Mj  XRU   ;  d   U SX$   R                  5        35       eX2U   U'   M     [        [        XR                  5       5      5      $ )Nc                b   / n[         R                  U ;   ay  U R                  [         R                  5      nU R                  [         R                  S 5      nU R                  [        R
                  S 5      nUR                  [        UUUS95        UR                  U R                  5       5        U$ )N)view	view_copyview_inplace)
r@   aliasingr   aliasing_inplacer:   rJ  r   r7   extendr  )dr   rc  re  rd  s        ra   maybe_create_view_groupEget_grouped_by_view_native_functions.<locals>.maybe_create_view_groupx  s     BD""a'55001D55!@!@$GLj33T:ILL('!- 	QXXZ rc   z already in )ri  z1dict[ViewSchemaKind | SchemaKind, NativeFunction]r  z/list[NativeFunction | NativeFunctionsViewGroup])r   r   r   view_signatureview_schema_kindr@   non_aliasingrI  rE  r   rG   r  )rl   rj  grouped_by_viewsr   rQ  	view_kindrI  s          ra   $get_grouped_by_view_native_functionsrq  u  s    <	8. 	D  &&($%$6$6	
 33366;;=D7777-.V$T*V$<< +\*:*B*G*G*I)JK< 34V$Y/ " 	13J3J3LMNNrc   c           	             SS jn[        U 5      n[        [        U[        UR                  5       5      5      5      $ )Nc                    [         R                  " U 5      nUc@  [        S U R                  5        5       5      (       a   e[	        U R                  5       5      $ U/$ )Nc              3  @   #    U  H  nS UR                   ;   v   M     g7f)	generatedN)r   rs   r   s     ra   rw   Jget_grouped_native_functions.<locals>.flatten_pre_group.<locals>.<genexpr>  s     E*Q;!&&0*r  )r6   	from_dictrA  r  r   )ri  r  s     ra   flatten_pre_group7get_grouped_native_functions.<locals>.flatten_pre_group  sP     !**1-9 E!((*EEEEE
##3Jrc   )ri  z dict[SchemaKind, NativeFunction]r  /Sequence[NativeFunction | NativeFunctionsGroup])rD   r   rG   r  )rl   ry  pre_grouped_native_functionss      ra   get_grouped_native_functionsr}    sL    
+
	8
 $>>N#O #T*F*M*M*O%PQ rc   )native_function_decl_genc                   [        [        5      nU  H  n[        5       n[        5       nUR                  5        H  u  pxUR	                  U5      n	U	(       a/  U	R
                  n
UR                  U5        UR                  U
5        O[        n
[        U5      S::  d   SU SU 35       eX:   R                  U" XH5      5        M     M     U$ )NrW   z6Codegen only supports one namespace per operator, got z from )
r   r   r   r|   r,  r-  r   r+   r   rh  )grouped_native_functionsrm   r~  ns_grouped_kernelsr   native_function_namespacesdispatch_keysrv   backend_idxr.  r  s              ra   get_ns_grouped_kernelsr    s     0;4/@%%(U")8)>)>)@%L*55a8,::	!!,/*..y94	12a7 HIcHddjkxjyz7 )00(8 *A &" rc   c           
     .   / nSnU R                  5        H|  u  p4[        USSS9n[        [        R                  " U5      5      nUR                  SUR                   SUR                  U5       SUR                   S3R                  U5      5        M~     U$ )Nr   ry      namespace_strentity_name	max_level	
        )
r|   rL   r   r   fromkeysrh  prologuer  epiloguesplit)r  declarationsnewliner  kernels	ns_helperordered_kernelss          ra   8get_native_function_declarations_from_ns_grouped_kernelsr    s     !LG0668	##
	 {33G<=
  o   
  	 E'N	
 9  rc   c                *    [        U UUS9n[        US9$ )a  
Generate kernel declarations, in `NativeFunction(s).h`.
:param grouped_native_functions: a sequence of `NativeFunction` or `NativeFunctionGroup`.
:param backend_indices: kernel collections grouped by dispatch key.
:param native_function_decl_gen: callable to generate kernel declaration for each `NativeFunction`.
:return: a list of string, from the string with all declarations, grouped by namespaces, split by newline.
r  rm   r~  )r  )r  r  )r  rm   r~  r  s       ra    get_native_function_declarationsr    s+      0!9'!9
 D- rc   c                `   UR                  U 5      nU(       a~  SUR                  ;   dn   S[        U [        5      (       a  U R                  R
                  OU R                  R                  R
                   SUR                   SUR                   S35       eU(       a  UR                  $ [        $ )Nr'  zThe kernel for function z with dispatch key z has a namespace z% and it's not ending with '::native'.)	r,  r-  r   r5   r   r   rJ  rv   r+   )r   r  r.  s      ra   get_kernel_namespacer    s     #--a0:1A1O1O#O 
"*Q2O2O166;;UVUaUaUfUfUkUk"l m(556
,::;;`	bO +;&&@Xrc   c        	        2  ^^^^^^^ / n	[        [        5      m[        [        5      m[        [        5      n
Sn[        R                  " U[
        R                  UUUS TS9n[        R                  " U[
        R                  UUUS TS9n[        R                  " U[
        R                  UUUS TS9nU H  n[        XS9R                  SS5      mTT   R                  U" U5      5        TT   R                  U" U5      5        [        U[        5      (       a  UR                  OUR                  R                  nUU
T   ;  a  [        [        5      U
T'   U
T   U   R                  U" U5      5        M     T H  m[!        TT   5      S:X  a  M  [#        TS9mSmU
T    H6  nU
T   U   (       d  M  TSU S	T S
UR%                  U
T   U   5       S3-  mM8     U	R                  U R'                  SUUUUUUU4S j5      R)                  U5      5        M     U	$ )Nr   rocmr7  class_method_nameskip_dispatcher_op_registrationr   r  r'  ry   r   )r  z
TORCH_LIBRARY_IMPL(r  z, m) {
    z
}zRegisterDispatchDefinitions.inic                 z   > TR                   TR                  T T   T(       a  SOTSTR                  5       TT   S.$ )Nry   )ns_prologuens_epiloguedispatch_anonymous_definitions"static_init_dispatch_registrationsdeferred_dispatch_registrationsdispatch_namespacedispatch_namespaced_definitions)r  r  r   )anonymous_definitionsrv   kernel_namespacens_definitionsr  registration_bodyr  s   ra   r   1get_native_function_definitions.<locals>.<lambda>j  sJ    #,#5#5#,#5#56K(7 7 ;=*79*6*<*<*>7EFV7Wrc   )r   r   r   destRegisterDispatchKeyrM   NAMESPACED_DEFINITIONANONYMOUS_DEFINITIONr  r  r   rh  r   r5   r  rJ  r   rL   r  substitute_with_templater  )r   r  rv   r  rR  r  r7  r  gen_dispatch_helpersdefinitionsregistrationsr  ns_genanonymous_genreg_genr   r  r  r  r  r  r  s     `    `         @@@@@ra   get_native_function_definitionsr    sR     K+6t+<N2=d2C5@5FMG%%$$(GF ,,##(GM &&(GG &/!MUU
 	'(//1I	
 	./66!	
 &a88AKKall>T>T 	 M*:;;.9$.?M*+&'	299AJ	
! &( +~./0A5#2BC	&'78I !129= &;b /\\- 01)<=> ?"  9 	''1  eGn!	
 +> rc   c           
     P   / n[        [        5      nSn[        R                  " U[        R
                  UUS SUS9n	U  HC  n
[        XS9R                  SUR                  5       5      nX{   R                  U	" U
5      5        ME     UR                  5        H  u  p[        U5      S:X  a  M  [        USSS	9n[        [        R                  " U5      5      nUR                  SUR                   SUR!                  U5       SUR"                   S
3R%                  U5      5        M     U$ )Nr   F)r  r  r  r7  r  r  r   ry      r  r  )r   r   r  r  rM   NAMESPACED_DECLARATIONr  r   r   rh  r|   r   rL   r   r  r  r  r  r  )r  rv   r  rR  r  r7  r  r  r  r   r   r  r  r  r  s                  ra   get_namespaced_declarationr    s=    !L/:4/@G##%%(-D &(1FNNl((*
	 	%,,G	
 & 1668	w<1##q
	 {33G<=
  o   
  	 E'N	
 9 rc   c           
     `   [        [        5      nU  H   nX#R                     R                  U5        M"     Sn/ nS nUR	                  5        H]  u  px[        [        [        U5      U5      5      n	US:X  a  U	nM-  UnSn
U[        ;   a  SOSnUSU SU SU
R                  U	5       S	3-  nM_     XT4$ )
Nry   atenr   TORCH_LIBRARY_FRAGMENTTORCH_LIBRARYr   r*  z	, m) {
  z
};)	r   r   r  r   r|   rK   rQ  r.   r  )rl   schema_selectorns_native_functionsnative_functionschema_registrationsaten_schema_registrationscustom_namespacer  r   schema_registrations_bodytabtorch_library_macros               ra   (get_native_function_schema_registrationsr    s    
 <Gt;L+556==oN , "/557	$(^O4e<%
!
 (A%(C
  33 )$  
 ! ) Q'( )88%&' (%  % 8, &<<rc   c           
     v  ^ ^^^^^^
^^^^^ UR                  SU4S j5        T  Vs/ s H%  n[        R                  UR                  ;   d  M#  UPM'     snmT  Vs/ s H  oT;  d  M
  UPM     snmUR                  SUU4S j5        UR                  SUU4S j5        UR                  SU U4S j5        [	        TTS	9mUR                  S
U4S j5        U	 HU  m[        TXv5      nTU;   a?  ST S3mUR                  T S3SUU4S j5        UR                  T S3SUUUU
U4S j5        AMW     g s  snf s  snf )NzNativeMetaFunctions.hc                 <   > / [        [        [        T 5      5      S.$ )N)NativeMetaFunctions_includes NativeMetaFunctions_declarationsr   rK   r  )structured_native_functionss   ra   r   (gen_aggregated_headers.<locals>.<lambda>  s    ,.04:<WX1
rc   MethodOperators.hc            
     `   > / [        [        [        [        R                  TS9T 5      5      S.$ )Nri  MethodOperators_includesMethodOperators_declarationsr   rK   re  rM   rs  )method_native_functionsstatic_dispatch_idxs   ra   r   r    s4    (*,0$**8K ,-
rc   zOperators.hc            
     b   > S/[        [        [        [        R                  TS9T 5      5      S.$ )Nz!#include <ATen/MethodOperators.h>r  )Operators_includesOperators_declarationsr  )non_method_native_functionsr  s   ra   r   r    s7    #F"G&*$**8K 0'
rc   Functions.hc                 Z   > [        T5      S/[        [        [        5       T 5      5      S.$ )Nz#include <ATen/Operators.h>)r  Functions_includesFunctions_declarations)r  r   rK   r  rl   r  s   ra   r   r    s5    -J#. $A"A&*#%$'
rc   )r  rm   zNativeFunctions.hc                    > S/T S.$ )Nz%#include <ATen/NativeMetaFunctions.h>)NativeFunctions_includesNativeFunctions_declarationsrd   )r  s   ra   r   r  %  s    )P(Q,8
rc   r  Functions_inl.h>DispatchKeyFunctions.hc                     > [        T 5      TS.$ N)rv   inline_headersr   rv   inl_headerss   ra   r   r  3  s    $'$5&1rc   Functions_inl.hDispatchKeyFunctions_inl.hc                 J   > / TR                  5       [        TTT T   TTSS9S.$ )NT)r  rv   r  rR  r  r7  )!DispatchKeyFunctions_inl_includesr   dispatch_namespaced_declarations)r   r  )rm   rv   r  r  rR  s   ra   r   r  ;  s6    9;*6*<*<*>8R1I%1$3L$A!)!#9rc   )writer?   r4  r  r  r   write_with_template)rl   r  r  r  rR  rm   cpu_fmr}   functions_keysr  r  fnr   r  rv   r  r  r  s   ``````    `  @@@@@ra   gen_aggregated_headersr    sY     LL	
 &%r2;;)F% &#%r3J)J%# LL	
 LL	
 LL	
 4!9'L LL	
 &+L*M>)+L>9IJK"".,( "".0, " = &#s   "D1D1	D6'D6c                  ^^^^^^^^^^^^^ [        [        5      mU  H!  nTUR                     R                  U5        M#     [        [        5      nU H#  nUR                  mUT   R                  U5        M%     TR	                  5        H  u  mmUR                  T S3SUU4S j5        UR                  T S3SUUU4S j5        UR                  T/ 5      nU Vs/ s H/  n[        U[        5      (       d  M  UR                  (       d  M-  UPM1     snm[        T5      S:  mT(       a  UR                  T S3S	U4S
 j5        [        UU[        R                  S9mUR                  T S3SUUU4S j5        M     S H!  u  mmUR                  T S3UUU4S j5        M#     U	 GH  mTU;  a  M  TR                  5       m/ mTR	                  5        H  u  mmUR                  T/ 5      n[        [!        [        R"                  " UT   [$        R&                  UU
SS SS9U5      5      m[        T5      S:X  a  Mg  TR                  T5        UR                  T ST S3SUU4S j5        M     [)        TXe5      nST S3mUR                  T S3SUU4S j5        UR                  T S3SUU4S j5        AGM     UR                  S U4S! j5        g s  snf )"Nz_ops.hz
Operator.hc            
     ^   > S[        [        [        [        R                  TS9T 5      5      0$ )Nr  r  r  )	functionsr  s   ra   r   *gen_per_operator_headers.<locals>.<lambda>k  s3    ("..<O "!
rc   .hz
Function.hc                 |   > [        [        U4S jT 5      5      ST S3[        [        [        5       T 5      5      S.$ )Nc                   > [        U TS9$ )N)r   )r  r  r  s    ra   r   <gen_per_operator_headers.<locals>.<lambda>.<locals>.<lambda>~  s    #=.A$rc   r   _ops.h>)static_dispatch_ops_headersoperator_includesfunction_definitions)r   rK   r  )r  r   r  s   ra   r   r  {  sI    /3 "	0 (;4&%H(,')!)rc   r   z_meta.hzNativeMetaFunction.hc                 :   > S[        [        [        T 5      5      0$ )Nmeta_function_declarationsr  )structured_functionss   ra   r   r    s     0$ =?S3rc   r  z	_native.hzNativeFunction.hc                 .   > T(       a	  ST S3T S.$ / T S.$ )Nr   z_meta.h>)extra_includesnative_function_declarationsrd   )r  is_structuredr   s   ra   r   r    s%    <I)$x80<	OQ0<	rc   ))	Functionsry   )	Operators_ops)NativeMetaFunctions_meta)NativeFunctions_nativec                    > T S3[        TR                  5       5       V s/ s H  n SU  T S3PM     sn T S3/ 0$ s  sn f )N	_includesr   .h>_declarations)r\  rE  )r   categoryfunctions_by_root_namesuffixs    ra   r   r    s\    *I& &'='B'B'D E) E *$xs; E) *M*B)s   <TFr  r   z_dispatch.hzDispatchKeyFunction.hc                    > TT S.$ )N)r  r  rd   )r  r  s   ra   r   r    s    *<8Drc   r  r  r  r  c                     > [        T 5      TS.$ r  r  r  s   ra   r   r    s     #L 1"-rc   r  r  c            	     \   > T[        T5       V s/ s H  n SU  ST S3PM     sn / S.$ s  sn f )Nr   r   r   )r  r  r  )r\  )r   dispatch_namesr  s    ra   r   r    sH    &8 !'~ 66 6 *$q1C0DLQ 66 576s   )r  c                 J   > [        S T R                  5        5       5      / S.$ )Nc              3  d   #    U  H&  u  p[        S  U 5       5      (       d  M  SU S3v   M(     g7f)c              3  \   #    U  H"  n[         R                  UR                  ;   v   M$     g 7frr   )r?   r4  r  )rs   r  s     ra   rw   Ggen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>.<genexpr>  s     Iyw~~4yrP  r   r  N)rA  )rs   r   r  s      ra   rw   =gen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>  s3      /'EODIyII 4%dV73'Es   00r  )r\  r|   )r  s   ra   r   r    s+    (. /'='C'C'E/ )
 -/
rc   )r   r   r   r   r|   r  rz   r   r6   r   r   r  r  #compute_native_function_declarationr  r   rG   r  rM   r  r   )rl   r  r  rR  rm   r  r}   ops_fmr  r  r  r  grouped_functions_by_root_namegroupgrouped_functionsr   r  r  rv   r!  r  r  r  r  r  r   r  r  s     `             @@@@@@@@@@@@ra   gen_per_operator_headersr,  L  s     ?J$>Or||,33B7 
 	D # *&t,33E: * 2779i""fFO
	
  	""fBK	
, ;>>tRH ( 
'"23 8: ' 

 01A5&&& &
 8%6+%)%M%M

 	""fI		
A :V& 	jO		
" &~-)//15;;=OD) > B B4 L,,'555 !#*.8= &L < A%!!$'&&&,-[9'+  >< ,L*M'~5EF
nK($	
 	nO,(	
 y &| LL	

e 
s   K<KKc                  ^ ^^^ U(       a  [        T UTUTUU	U
UUUS9  O[        T UUTUTUU	UUUS9  UR                  SU U4S j5        UR                  SU 4S j5        UR                  SUU 4S j5        UR                  S	U 4S
 j5        SU 4S jjnUR                  SU5        SU4S jjnUR                  SU5        g )N)rl   r  r  rR  rm   r  r}   r(  r  r  r  )rl   r  r  r  rR  rm   r  r}   r  r  r  zTensorBody.hc            
        > [        [        [        [        R                  TS9T 5      5      [        [        [        [        R
                  TS9T 5      5      S.$ )N)rg  ri  )tensor_method_declarationstensor_method_definitions)r   rK   r  rM   rs  rv  r  s   ra   r   gen_headers.<locals>.<lambda>?  s\    *.'%118K %+ *.'%008K %*
rc   zRedispatchFunctions.hc                 B   > S[        [        [        5       T 5      5      0$ )Nfunction_redispatch_definitions)r   rK   r  rl   s   ra   r   r1  W  s!    -t246FG0
rc   zRegistrationDeclarations.hc                 L   > ST V s/ s H  n [        U T5      PM     sn 0$ s  sn f )Nregistration_declarations)rX  )r   rm   rl   s    ra   r   r1  `  s2    ')*)A 2!_E)*
*s   !zVmapGeneratedPlumbing.hc                    > [        T 5      $ rr   r%   r4  s   ra   r   r1  i  s    +@AQ+Rrc   c            	     `  > [        5       n [        5       nT H  nUR                  [        UR                  R                  R                  5      5        UR                  UR                  R                  R                  R
                  5        U R                  S UR                  R                  5        5       5        M     U1 Sk-  nSR                  [        U5       Vs/ s H	  nSU S3PM     sn5      SR                  [        U 5       Vs/ s H	  nSU S3PM     sn5      S.$ s  snf s  snf )Nc              3  8   #    U  H  oR                   v   M     g 7frr   r  )rs   r   s     ra   rw   Agen_headers.<locals>.gen_aten_interned_strings.<locals>.<genexpr>u  s     P-Oc-Or  >   orandnotxorbitorcomplor_eqand_eqbitandnot_eqxor_eqz \
z_(aten, r>  z_(attr, )aten_symbolsattr_symbols)
r   r   r   r   r   r   updater7  r  r\  )attrsr  r   r   rl   s       ra   gen_aten_interned_strings.gen_headers.<locals>.gen_aten_interned_stringsl  s    %$DIIc$))..--./ IIdiinn))../LLPTYY-M-M-OPP % 	 
 	
 $LL06u>8D6#> $LL06u>8D6#>	
 	
> ?s   D&D+
zaten_interned_strings.hc                 <   > SSR                  [        T 5      5      0$ )Nenum_of_valid_tagsz,
)r  r\  )r   s   ra   gen_tags_enum"gen_headers.<locals>.gen_tags_enum  s    $uzz&2D'EGGrc   z
enum_tag.h)r  dict[str, str])r,  r  r  )rl   r   r  r  r  rR  rm   core_fmr  r}   r(  r  r  r  per_operator_headersrJ  rN  s   ``  ` `          ra   gen_headersrS    s    $  -%= 3+!')	
 	-%=(C 3+!')	
 MM	
0 LL	
 LL$	
 LL!#R"
H MM+-FGH MM,.rc   c                P  ^ ^^^^^^^^^^^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9 SnT(       a  SnU GH  m,[        T,X5      m0U(       a  SCU*U,U-UU4S jjnO	SCU,U4S jjnTT,   m*[        [        5      nT HN  n[        U[        5      (       a  UR
                  OUR                  R
                  nUU   R                  U5        MP     [        T,5      R                  5       m-T,[        R                  :g  m2[        T,5      (       a  UOSS[        R                  " T*UT5      U" 5       T2(       a  [        R                  " T*5      O/ S.n    SDU*U,U0U2UUU4S jjnT0R!                  ST, S	3S
TS UT,[        R"                  :X  a  SOSUS1S9  T H  m1T1R$                  R&                  (       a  [)        T,5      (       d  M0  T1R                  R*                  R,                  R,                  m4T,[        R"                  L aB  T0U
L d   eT0R/                  ST4 S	3SUU,U14S j5        U	R/                  ST4 S	3SU1U44S j5        M  T,[        R0                  L a,  Sm+T(       a  Sm+T0R/                  ST4 S3SUU+U,U1U44S j5        M  [3        ST, S35      e   0 m7T H9  nUR5                  5        H"  nUR6                  c  M  UT7UR6                  '     M7     M;     T,U;   Ga:  0 nT  H  n[9        U5      nU[:        ;   d  M  UUU'   M!     [=        S [?        URA                  5       5       5       5      m/ST,R                  5        S 3n [C        T/T7T,TS!TSS"9m5U(       a  URE                  U U54S# j5        O[ [G        [H        RJ                  RM                  URN                  U 5      5       n!U!RQ                  5       n"U"T5:X  d   S$5       e S S S 5        SEUU,UU/U74S& jjm3[        T,5      (       a  UOSm.URE                  ST,R                  5        S	3UU,UU.U/U3U74S' j5        @0GM     SFU U4S( jjn#U
RE                  S)U#5        Tn$U(       a  [V        RX                  " 5       n$[[        T U$S*9u  m)m6U
RE                  S+U)U6U4S, j5            SGS- jn%U
R]                  S.T U%U4S/ jS0[_        T5      0S11 S2kS39  U
RE                  S4[`        5        URE                  S5[`        5        URE                  S6U 4S7 j5            SHUU4S8 jjn&[        T5      [        T5      -   n'[c        S9 T5       V(s0 s H  n(U(R*                  R,                  U(_M     sn(m8[c        S: T5       V(s0 s H  n(U(R*                  R,                  U(_M     sn(m9U'Re                  U8U94S; jT  5       5        U
R]                  S<U'U%U&S1 S=kS>9  U
RE                  S?UU4S@ j5        U
RE                  SAUUU4SB j5        g ! , (       d  f       GN= f! [R         a:    [U        [H        RJ                  RM                  URN                  U 5       S%35         GNdf = fs  sn(f s  sn(f )INz#include <c10/cuda/CUDAGuard.h>
#include <ATen/cuda/ATenCUDAGeneral.h>
#include <ATen/cuda/CUDADevice.h>
#include <ATen/cuda/CUDAContext.h>z#include <ATen/hip/impl/HIPGuardImplMasqueradingAsCUDA.h>
#include <ATen/hip/ATenHIPGeneral.h>
#include <ATen/hip/HIPDevice.h>
#include <ATen/hip/HIPContext.h>c                 t  > / n T GH  nSnTR                  U5      (       a  SnOw[        U[        5      (       a+  [        U4S jUR	                  5        5       5      (       a  SnO7UR
                  (       a&  T[        R                  [        R                  4;   a  SnU(       d  M  U R                  SUR                   S35        T[        R                  :X  a  U R                  SUR                   S35        TT;   d  M  U R                  SUR                   ST S35        GM     [        [        U 5      5      $ )	NFTc              3  F   >#    U  H  nTR                  U5      v   M     g 7frr   )r   )rs   r  r   s     ra   rw   =gen_source_files.<locals>.operator_headers.<locals>.<genexpr>  s#      E?L0044}s   !r   
_native.h>r  r   r   )r   r   r6   rA  r  r   r-   Metar   r   r   r\  r   )headersr  is_registeredr   rv   r  r  r  s      ra   operator_headers*gen_source_files.<locals>.operator_headers  s#   1A$)M$//22(, $A';<< E?@{{}E B B )- ,#((#JJ; + )-( NN%8Z#PQ$&MMN  )<Q[[M'MN#~51!++a@R?SS_`A 2H c'l++rc   c                    > S/n T[         R                  :X  a  U R                  S5        TT;   a  U R                  ST< S35        U $ )Nz!#include <ATen/NativeFunctions.h>z#include <ATen/Functions.h>r  r  )r-   r   r   )rZ  rv   r  s    ra   r\  r]    sI    >?;#U#UUNN#@A>1NN_\4DL#QRrc   ry   )extra_cuda_headersexternal_backend_headersdispatch_headersops_headersdispatch_helpersc                ,   > S[        TU /TTTTSTTS9	0$ )Ndispatch_definitionsT)	r   r  rv   r  rR  r  r7  r  r  )r  )gnfr   rv   r   r  r  rR  r  s    ra   "register_dispatch_key_env_callable<gen_source_files.<locals>.register_dispatch_key_env_callable	  s7     '(G.1U!- -%4S)=
) rc   Registerz.cppzRegisterDispatchKey.cppc                    U R                   $ rr   r   )xs    ra   r   "gen_source_files.<locals>.<lambda>*	  s    Q[[rc   r  rW   re  )key_fnenv_callable
num_shardsbase_envsharded_keys	UfuncCPU_zUfuncCPU.cppc                 z   > [        T5      [        R                  " TT T   5      [        R                  " T5      S.$ )N)meta_declarationnative_declarationnative_definitions)r  r  r'  compute_ufunc_cpu)rm   rv   r  s   ra   r   rm  :	  s8    ,Ma,P.2.V.V|</ /3.D.DQ.Grc   UfuncCPUKernel_zUfuncCPUKernel.cppc                 6   > T[         R                  " T 5      S.$ )N)r   rw  )r  compute_ufunc_cpu_kernel)r  r   s   ra   r   rm  E	  s     $.2.K.KA.Nrc   z%#include <ATen/native/cuda/Loops.cuh>z$#include <ATen/native/hip/Loops.cuh>
UfuncCUDA_z.cuzUfuncCUDA.cuc                 ~   > TT[        T5      [        R                  " TT T   5      [        R                  " T5      S.$ )N)r   cuda_headersru  rv  rw  )r  r  r'  compute_ufunc_cuda)rm   r~  rv   r  r   s   ra   r   rm  Q	  s>     $(4,Ma,P.2.V.V|</ /3.E.Ea.Hrc   zunrecognized z
 for ufuncc              3  *   #    U  H	  u  pUv   M     g 7frr   rd   )rs   r   values      ra   rw   #gen_source_files.<locals>.<genexpr>k	  s      .&?(!&?s   c_shim_r   Theaderextend_aoti_c_shimincludesc                    > T $ rr   rd   )
new_headers   ra   r   rm  }	  s    Jrc   a  

WARNING: 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 update the 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. In this case, you need to keep a manual copy of that existing
fallback op in a file, e.g. torch/csrc/inductor/aoti_torch/c/shim.h, bump up the version
number of that fallback op in the newly generated C shim files, and update the cpp wrapper
codegen to generate the correct cpp call for this op. Contact AOTInductor team for assistance.

                        z
 not foundc            	        > / n T H&  n[        UTTTTS9nUc  M  U R                  U5        M(     SR                  [        [	        U 5      5      5      $ )N)r  r   )r    r   r  r\  r   )rZ  r   r  rm   rv   r  fallback_native_functionsstructured_func_group_dicts      ra   headers_for_aoti*gen_source_files.<locals>.headers_for_aoti	  sY    5D02$'+=F )v. 6 yyG!566rc   c            
     8   > [        TTTT STT" 5       S-   T-   S9$ )NFr   r  )r   )rm   rv   r  extra_headersr  r  r  s   ra   r   rm  	  s,    -. # '9-/$6Frc   c            
     X  > T V s/ s H  n [        U T5      (       d  M  U PM     nn U V s/ s H  n SU R                   S3PM     sn [        [        [	        [
        R                  T5      U5      5      [        [        [	        [
        R                  T5      U5      5      S.$ s  sn f s  sn f )Nr   r  )rb  !backend_select_method_definitions%backend_select_function_registrations)r  r   r   rK   r  rM   rv  r  )r  relevant_fnsrl   rR  s     ra   gen_backend_select,gen_source_files.<locals>.gen_backend_select	  s    )
)2-A"h-OB) 	 

 GSFR%bll^7;l 26():):HE|2
 6:()<)<hG6
 	

s   B"B"B'zRegisterBackendSelect.cpp)rl   r  zRegisterSchema.cppc                 6   > T(       a  / OT T(       a  / S.$ TS.$ )N)r  r  rd   )r  r  r  s   ra   r   rm  	  s%    . *,*. %'	
 &
rc   c                    U R                   $ rr   rk  )r  s    ra   key_func"gen_source_files.<locals>.key_func	  s     ||rc   zOperators.cppc                f   > SU R                    S3/[        [        R                  TS9" U 5      /S.$ )Nr   r  r  )r\  r  )r   re  rM   rv  r  s    ra   r   rm  	  s>    #6r||nC!H I %%4G !
rc   r     >   r  r\  r  )rn  ro  rq  rp  rr  zFunctions.cppzTensorMethods.cppzATenOpList.cppc                 :   > S[        [        [        T 5      5      0$ )Naten_ops)r   rK   r  r4  s   ra   r   rm  
  s    Xo7GHI
rc   c                z   >     SS jnU" U 5      [        TU 5      [        TU T[        R                     5      S.$ )Nc                j   [        U [        5      (       az  SU R                  R                   S3SU R                  R                   S3/nU R                  b7  USU R                  R                   S3SU R                  R                   S3/-  nU$ [        U [
        5      (       a  SU R                  R                   S3SU R                  R                   S3SU R                  R                   S3SU R                  R                   S3/nU R                  b7  USU R                  R                   S3SU R                  R                   S3/-  nU R                  b7  USU R                  R                   S3SU R                  R                   S3/-  nU$ SU R                   S3SU R                   S3/$ )Nr   rX  r  )
r   r7   rc  r   rd  r6   rJ  r  r   r  )r  rZ  s     ra   gen_op_headersPgen_source_files.<locals>.functionalization_env_callable.<locals>.gen_op_headers
  s    !566 *!&&*:*:);:F)!&&*:*:);7C ;;*-akk.C.C-DJO-akk.C.C-DGL  G A344)!,,*@*@)AL)!,,*@*@)AI)!%%//):*E)!%%//):'B	 99(-aii.A.A-B*M-aii.A.A-B'J  G 99(-aii.A.A-B*M-aii.A.A-B'J  G  *!++jA)!++g> rc   )rb  func_definitionsfunc_registrations)r  @NativeFunction | NativeFunctionsGroup | NativeFunctionsViewGroupr  	list[str])r!   r"   r-   r   )r  r  rm   rR  s     ra   functionalization_env_callable8gen_source_files.<locals>.functionalization_env_callable
  sZ    %	O%	%	P *!, @! #E E EF#
 	
rc   c                4    [        U R                  5       5      $ rr   r   r  r  s    ra   r   rm  W
  s    T!++-%8rc   c                4    [        U R                  5       5      $ rr   r  r  s    ra   r   rm  Z
  s    D4Grc   c              3     >#    U  H?  nUR                   R                  T;  d  M  UR                   R                  T;  d  M;  Uv   MA     g 7frr   )r   r   )rs   r   structured_mapview_maps     ra   rw   r  \
  s?      !A66;;n, 	
12H1L 	
!s   A
A
	A
zRegisterFunctionalization.cpp>   rb  r  r  func_add_back_views_definitions!func_add_back_views_registrations)rn  ro  rp  rr  zFunctionalInverses.hc                 :   > S[        [        U 4S jT5      5      0$ )Nview_inverse_declarationsc                   > [        TU 5      $ rr   )r#   )r  rR  s    ra   r   4gen_source_files.<locals>.<lambda>.<locals>.<lambda>v
  s    L !rc   )r   rK   )rR  view_groupss   ra   r   rm  s
  s$    '  	*	
rc   zCompositeViewCopyKernels.cppc            
        > T V s/ s HK  n SR                  S U R                  c  U R                  /OU R                  U R                  / 5       5      PMM     sn T V s/ s H<  n SR                  S U R                  U R                  U R
                  4 5       5      PM>     sn -   [        [        [        T[        R                     5      T5      5      [        [        [        T5      5      [        [        [        T5      5      S.$ s  sn f s  sn f )Nr   c              3  \   #    U  H"  nS UR                    SUR                    S3v   M$     g7f)r   _ops.h>
#include <ATen/ops/rX  Nrk  rv  s     ra   rw   5gen_source_files.<locals>.<lambda>.<locals>.<genexpr>
  s@      	 S  *!++ 7* +,++j	B SrP  c              3     #    U  H9  nUc  M  SUR                   ;  d  M  SUR                   SUR                   S3v   M;     g 7f)Nru  r   r  rX  )r   r   rv  s     ra   rw   r  
  sV       B	B *5AFF)B	B)!++ 7**+++jB Bs   AA$A)rb  #CompositeViewCopyKernel_Definitions(GeneratedCompositeFunctional_Definitions!GeneratedCompositeOut_Definitions)r  rd  rc  r   r  rJ  r   rK   r$   r-   r   rB   rC   )r  rm   r  r  s    ra   r   rm  
  s    % %A 		 	 %&KK$7affakk=RR	 	 %* 5	 5A 		   iiALLA	  5	. 48.''NN
  	4 9=3/9 26,/2Q.
	s   ADAD)r  r  )rf  %NativeFunction | NativeFunctionsGroupr  dict[str, list[str]])r  r   )r  r  )r  r  r  r   )r  r  r  r  )3r   r   r   r   r5   r  rJ  r   r   r   r-   r   r0   r  gen_registration_headersgen_registration_helperswrite_sharded_with_templateCPUr  ufunc_inner_loopr2   r   r   r  CUDAr   r  r   r   r   tupler\  r|   r   r  r   osr   r  install_dirreadFileNotFoundErrorprintrE   r\  r  write_shardedr  r   rG   rh  ):rl   r  r  r  rR  r  rm   aoti_fmrQ  
cpu_vec_fmr  r}   r  r  r  force_schema_registrationrR  r  update_aoti_c_shimaoti_backendsr  r_  r\  ns_grouped_native_functionsgrouped_native_functionr  register_dispatch_key_base_envrg  
func_groupr   	fallbacksop_nameheader_file_nameold_file
old_headerr  r  r  r  
all_groupsr   r  r   r~  rv   r  r  r  r   r  r  r  r   r  r  r  r  r  s:   ```````      ``  `  `                    @@@@@@@@@@@@@@@@@ra   gen_source_filesr    sv   0&
 $ &+L*M&, &,T  (5&1$&7#'?# 5~FF (11,77AA 
 (	299:QR (@ !.446
 KMMM 	 $L11 #5(* $ = =3T! ,- ( --m<*
&"	6	!	 	" 	&&|nD)%$(;(KOO;q301 	' 		
 -A55))1F|1T1T<<$$))..D{.V|#|&&vT*"
 ..%dV40( !1!11F#IL&& c*"  %}\N*%MNNW -Z &("5J",,.++7KU.t/G/GH / 6 =(I(.t433)-Ig& ) ). .&,Y__->&?. )%
 ")););)=(>bA()*#5J "$&
W%8%8:JK!%-]]_
)Z7  : 7	67 7 ';<&H&H"b  MM,,,./t4   &D
 
( LL,.@AO *;;=
 	1)?	! LL	

L	
 
 ,-J#.

 
'  4 LL$'MM%t,MM	
5
K5
	5
 5
r 	()D- 	  8:UV:VA 	
QV:N
 !**G U4 U1Q U4H  !  '3
   LL		
< LL&.	
1] * ) 77<<(;(;=MNOzZ~:4s=   3WW.W!X?!X#
W	WWA XXc                2   ^ U R                  SU4S j5        g )NzDeclarations.yamlc                 X   > [        T V s/ s H  n [        U 5      PM     sn 5      $ s  sn f rr   )r  rG  )r   rl   s    ra   r   'gen_declarations_yaml.<locals>.<lambda>
  s%    BRSBRQ5a8BRSTSs   ')r  )r  rl   s    `ra   gen_declarations_yamlr  
  s     LLTrc   c                 P    [        [        5      R                  R                  5       $ )zs
If you're depending on torchgen out-of-tree, you can use the root to figure
out the path to native_functions.yaml
)r	   __file__parentresolverd   rc   ra   get_torchgen_rootr  
  s    
 >  ((**rc   c                    [         R                  " SS9n U R                  SSSSS9  U R                  SS	S
S9  U R                  SSSS9  U R                  SSSS9  U R                  SSSSSS9  U R                  SSSSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSS S9  U R                  S!S"S#S$S%9  U R                  S&S'S(S9  U R                  S)S*S#S+S%9  U R                  S,S-S#S.S%9  U R                  S/S0SS1S9  U R                  S2S3SS4S9  U R                  S5[        S#/ S6Q/ S6QS7S89  U R                  S9SS:S9  U R                  S;SS<S9  U R	                  5       n[        UR                  UR                  5      n[        R                  R                  UR                  S=5      n[        R                  R                  UR                  S>5      nS?S@KJn  [        5       nUR                  (       dR  UR!                  ["        R$                  5        ["        R$                  U;   a  XUR'                  ["        R$                  5      	 UR(                  (       dR  UR!                  ["        R*                  5        ["        R*                  U;   a  XUR'                  ["        R*                  5      	 [-        X4U5      n[.        U   nUR0                  UR2                  p[5        U	5      nU Vs/ s H  n[7        U[8        5      (       d  M  UPM     nn[;        U	5      nU Vs/ s H  n[7        U[<        5      (       d  M  UPM     nnUR>                   SA3n[A        U5      RC                  SBSBSC9  UR>                   SD3n[A        U5      RC                  SBSBSC9  URD                   n[A        U5      RC                  SBSBSC9  [G        UUSE9n[G        USF9n[G        USF9n[G        USF9n[G        UUSE9n[G        UUSE9nSGU0nUR(                  (       a  [G        USF9USH'   ["        RH                  ["        RJ                  ["        RL                  ["        RN                  ["        RP                  ["        RR                  ["        RT                  1n["        RH                  ["        RJ                  1nUR                  (       a  UR!                  ["        R$                  5        UR(                  (       a>  UR!                  ["        R*                  5        UR!                  ["        R*                  5        URV                  (       a=  U Vs/ s H0  n[Y        U5      (       d  [        U5      URV                  ;   d  M.  UPM2     nn/ nURZ                  (       au  URZ                   Vs/ s H  nU
["        R\                  " U5         PM     nnURZ                   H2  n["        R\                  " U5      nUU;  d  M!  UR!                  U5        M4     SIUR^                  ;   a  [a        Sh0 SJU	_SKU_SLU_SMU_SNU_SOU_SPU
_SQU_SRU_SSU_STU_SUU_SVU_SWU_SXURb                  _SYURd                  _SZURf                  _S[URh                  _S\URj                  _S]U_S^URl                  _6  S_UR^                  ;   a+  [o        U	UUUUUU
UUUUUUURb                  URf                  S`9  SaUR^                  ;   a
  [q        U	USb9  URr                  (       a  [A        URr                  5      Ru                  5       n U Rv                  n!U Rx                  n"USc4USd4USe4USf4/UR{                  5        V#V$s/ s H  u  n#n$U$U# Sg34PM     sn$n#-    H8  u  n%n&U&U"-   n'U R|                  U&U!-   -  n(U%R                  U'[        U(5      5        M:     g g s  snf s  snf s  snf s  snf s  sn$n#f )iNzGenerate ATen source files)descriptionz-sz--source-pathz!path to source directory for ATenzaten/src/ATen)helpr  z-oz--output-dependenciesz:output a list of dependencies into the given file and exit)r  z	--dry-run
store_truez5run without writing any files (still updates outputs))actionr  z--per-operator-headersz2generate separate headers per operator in ATen/opsz-dz--install-dirz--install_dirzoutput directoryzbuild/aten/src/ATenz--aoti-install-dirz--aoti_install_dirz%output directory for AOTInductor shimz(torch/csrc/inductor/aoti_torch/generatedz--rocmz=reinterpret CUDA as ROCm/HIP and adjust filepaths accordinglyz--mpsz'Generate MPS registration code when setz--xpuz'Generate XPU registration code when setz--op-registration-whitelistz--op_registration_whitelist*zfilter op registrations by the whitelist (if set); each item is `namespace`::`operator name` without overload name; e.g.: aten::empty aten::conv2d ...)nargsr  z--op-selection-yaml-pathz--op_selection_yaml_pathaD  Provide a path to the operator selection (for custom build) YAML that contains the information about the set of selected operators and their categories (training, ...). Each operator is either a full operator name with overload or just a bare operator name. The operator names also contain the namespace prefix (e.g. aten::)z--backend-whitelistz--backend_whitelistzRfilter dispatch backend by the whitelist (if set), e.g.: CPU CUDA QuantizedCPU ...z--static-dispatch-backendz--static_dispatch_backendz?generate static dispatch code for the specific backend (if set)z!--skip-dispatcher-op-registrationz!--skip_dispatcher_op_registrationz0Avoid registering operators into the dispatcher.z--force-schema-registrationz--force_schema_registrationz}force it to generate schema-only registrations for all ops, includingthose that are not listed on --op-registration-whitelistz
--generate)rZ  sourcesdeclarations_yamlzGenerate only a subset of files)r  r  choicesr  r  z--update-aoti-c-shimzUpdate AOTInductor C shim after adding an entry to inductor_fallback_ops in torchgen/aoti/fallback_ops.py. WARNING: Do not use this unless you are sure what you are doing!!!z--extend-aoti-c-shima  This Flag indicates the generation of c shims for out-of-tree ATen ops,which is an extension to the In-tree ATen op c shims. This flag needs to be combined with---source-path=<out-of-tree native_functions.yaml>--aoti-install-dir=<in-tree aoti_install_dir>/extend   default is torch/csrc/inductor/aoti_torch/generated/extendWARNING: Do not use this unless you are sure what you are doing!!!znative/native_functions.yamlznative/tags.yamlr   )r  z/coreT)parentsexist_okz/ops)optionsr  )r  cudaxpur  rl   r  r  r  rR  r  rm   r  rQ  r  r  r}   r  r  r  r  rR  r  r  r  r  rZ  )rl   r   r  r  r  rR  rm   rQ  r  r}   r(  r  r  r  rR  r  )rl   r  ry   cpu_vec_core_ops_r   rd   )@argparseArgumentParseradd_argumentr   
parse_argsr`  op_registration_whitelistr^  r  r   r  source_pathtorchgen.modelr  r   mpsr   r-   MPSr   r  XPUr   ro   rl   rm   r}  r   r6   rq  r7   r  r	   mkdiraoti_install_dirrJ   r  r  r   r   r   r   rY  backend_whitelistr1   static_dispatch_backendparsegenerater  r  r  rR  r  r  r  rS  r  output_dependenciesr  r   stemr|   r  write_outputs))parserr  rR  native_yaml_pathr   r  r   parsed_yamlr   rl   rm   r  r  r  !native_functions_with_view_groupsr  core_install_dirops_install_dirr  rQ  r  r  cuda_fmr(  r  r}   r  r  r   r  keydp_keydepfile_pathdepfile_namedepfile_stemru   	device_fmr   r  varnamer   s)                                            ra   mainr  
  s   $$1MNF
0	   I  
 D  
  A  
 %   4:	   L  
 6  
 6   %%-	   ""M   *	   ##N	   ++?	   %%C	   ;;.   M   M  	 !G())&&H
 ww||G$7$79WXWW\\'"5"57IJN, %K;;(??m+11+//BC;;(??m+11+//BC#$4kRK.~>J$$## &
  <<LM ,#+az!=Q/R+   # )M)%
 32Aa12 	
2    "--.e4	   = ,,-T2Ot<!223	   ==MNGw/F"73J0GwOLF=MNG'"J{{-g>
5
 	--99--::N 	M
 {{;??+{{;??++//*   #
"&q))SVw7P7P-P " 	 
 /1&& 66
6 K--c236 	 
 22C &&s+F^+""6* 3
 G$$$ 	
-	
%=	
 )D	
 $		

 	
 !4	
 ,	
 	
 	
 "	
 	
 "	
 (	
 *	
 	
  '.&G&G!	
" ")!=!=#	
$ -4,S,S%	
&  '99'	
( ()	
*  '99+	
0 G$$$-!%=(C 3+!')!(!=!=	
$ g.../?O""G778@@B#((#(( RL$gV	

 AK@P@P@RS@R+<69iF81&@RSTJB |+G&&&<*?@DWc$i0T #C#v

D Ts0   0^&^&$^+^+8-^0)^0#^5^:__main__)rv   r-   r}   dict[str, FileManager]r~   rI   r  rI   )N<stdin>F)r   objectr   set[str]r   set[DispatchKey] | Noner   r   r   r'  r  rk   )r  )r   r  r   r   r  r  )r   r   r  r  rr   )r   r   r   r   r   r   r   r'  r   zobject | Noner  rk   )r   Sequence[NativeFunction]r  None)r   r   r  r   )r   rh  r  zlist[DispatchKey])r   r5   r   r(   r  zDispatchKey | None)r   r5   r   rh  r  rb  )r   rh  r  r  )r   "CppSignature | DispatcherSignaturer!  r   r  r   )r   r#  r   r5   r   r(   r  r   )r   r#  r   r5   rm   rh  r  r   r~  )r  r6   r  rb  )r   r5   rR  rE   r  r'  )r  r  r  r   )r   r   r  r  )r
  r>   r  r   )r  zset[Variant]r  r  )r   r5   r  z+tuple[list[dict[str, str]], dict[str, str]])r#  r   r  r'  r   r  r!  r  r  rP  r  r  )r  r'   r  r'  r   r  r!  r  r  rP  r  r  )r   r5   r  r  )r   r5   r  r'  )r   r5   rm   dict[DispatchKey, BackendIndex]r  r   )r]  zlist[str] | Noner^  rb  r  rE   )rl   r!  r  z3Sequence[NativeFunction | NativeFunctionsViewGroup])rl   r!  r  r{  )r  r{  rm   r$  r~  JCallable[[NativeFunctionsGroup | NativeFunction, BackendIndex], list[str]]r  r  )r  r  r  r  )r  r{  rm   r$  r~  r%  r  r  )r   r  r  r(   r  r   )r   rI   r  r{  rv   r-   r  r(   rR  rE   r  r'  r7  r'  r  r'  r  r'  r  r  )r  r{  rv   r-   r  r(   rR  rE   r  r'  r7  r'  r  r  )rl   r!  r  rE   r  ztuple[list[str], str])rl   r!  r  r{  r  Sequence[NativeFunctionsGroup]r  rh  rR  rE   rm   r$  r  rI   r}   r  r  set[DispatchKey]r  Sequence[DispatchKey]r  r'  r  r"  )rl   r!  r  r{  r  rh  rR  rE   rm   r$  r  rI   r}   r  r(  rI   r  r'  r  r(  r  r'  r  r"  ) rl   r!  r   r  r  r{  r  r&  r  rh  rR  rE   rm   r$  rQ  rI   r  rI   r}   r  r(  rI   r  r(  r  r'  r  r'  rR  r'  r  r"  ),rl   r!  r  r{  r  r&  r  z"Sequence[NativeFunctionsViewGroup]rR  rE   r  rh  rm   r$  r  rI   rQ  rI   r  rI   r  rI   r}   r  r  r(  r  r'  r  r'  r  r'  rR  r'  r  r'  r  r'  r  r'  r  r'  r  r"  )r  rI   rl   r!  r  r"  )r  r	   )r  r"  )
__future__r   r  	functoolsrU  r   r  collectionsr   r   r   dataclassesr   r   pathlibr	   typingr
   r   r   r   r   r   torchgen.api.dispatcherapirS  torchgen.api.metar  torchgen.api.nativer  torchgen.api.structuredr   torchgen.destr  torchgen.aoti.fallback_opsr   torchgen.apir   torchgen.api.translater   torchgen.api.typesr   r   r   r   r   r   r   torchgen.contextr   r   r   r   torchgen.gen_aoti_c_shimr   r   r   r    #torchgen.gen_functionalization_typer!   r"   r#   r$   torchgen.gen_vmap_plumbingr&   r  r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   #torchgen.native_function_generationrA   rB   rC   rD   !torchgen.selective_build.selectorrE   torchgen.utilsrF   rG   rH   rI   rJ   rK   rL   rM   torchgen.yaml_utilsrN   rO   collections.abcrP   rQ   rS   rk   rn   rc  ro   r   r   r   cacher   r   r   r   r   r   r  r  r%  r1  r<  rN  rQ  re  r  r  r  r  r  r  r  r  r  r  r  r  r$  r"  rG  rK  rX  r`  rq  r}  r'  r  r  r  r  r  r  r  r  r,  rS  r  r  r  r  re   rd   rc   ra   <module>rC     s	   "     	 < < (  A A  , ,     $ $ , ,  <  ,      =      8  ?	 	 	 7 ( CLB  '9;L&MN
 :< !6 ;57 2 7&  	, ,0 %-#-#-# )-# 	-#
 -# -#`" / / ,01
 !&!%1
11 )1
 1 1 1@9x
4	
&2(&8  ,	+ , , 	 ,FR	+RR  R 		R$K	+KK (K 		K:F	+FF (F 		FX $` ` `0 $W& W& W&x $* * *^ $' ' 'Z $  < M M
yx3 $:& :& :&HS&0
?'?'0?'F

 
 	

 
 '
 
@!! ! 	!
 ! '! !H U Ur "(G "@(8& >,O.,O8,O^.48 	00M 5	 :, @ 	00M 5	 4
/>J __ N_ 	_
 _ _ _ _ &*_ _ _H,M, , 	,
 , , , ,`!=.!= &!= 	!=Hv.v Nv "@	v
 ,v v 5v v 'v %v )v v 
vr. N ,	
  5  '  % )  
DG/.G/ G/ N	G/
 "@G/ ,G/ G/ 5G/ G/ G/ 'G/ G/ )G/ %G/ G/  !G/" 
#G/Th.h Nh "@	h
 4h h ,h 5h h h h h 'h )h %h  !h"  $#h$ %h& &*'h( )h* $+h, -h. 
/hV+C	+l1^	 zF rc   