
    Th;                   |   % 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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)J*r*J+r+J,r,J-r-J.r.J/r/  S SK0J1r1J2r2J3r3J4r4  S SK5J6r6J7r7  S SK8J9r9J:r:J;r;J<r<  S SK=J>r>  S SK?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrY  S SKZJ[r[J\r\J]r]J^r^  S SK_J`r`  S SKaJbrbJcrcJdrdJereJfrfJgrgJhrh  S SKiJjrjJkrk  \(       a  S SKlJmrm  \" S5      rn " S S\k5      ro\	" SSS/5      rp0 qqS\rS'   0 qsS\rS'           S^S jrt   S_           S`S! jjruSaSbS" jjrv\R                  ScS# j5       rx SdS SS$.           SeS% jjjrySfS& jrzSgS' jr{ShS( jr|      SiS) jr}      SjS* jr~SkS+ 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R4                  SN.       SSO jjr    SSP jr\#GR4                  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)assert_never)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_files*gen_static_dispatch_backend_call_signature) 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)	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noderS   mapping	__class__s       F/var/www/fran/franai/venv/lib/python3.13/site-packages/torchgen/gen.pyrW   LineLoader.construct_mapping   s3    '+D+<"oo22Q6
     )F)__name__
__module____qualname____firstlineno__rW   __static_attributes____classcell__)r]   s   @r^   rP   rP      s     r`   rP   
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Nra   ).0checkdevicedispatch_keys      r^   	<genexpr>1file_manager_from_dispatch_key.<locals>.<genexpr>   s$      %@ME& %@s   #	# )getnextr*   items)rs   
device_fms
default_fmfms   `   r^   file_manager_from_dispatch_keyr}      sB    
 
%8%>%>%@
 	
 	

B Ir`   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: rU   funczmissed 'func' in c                    > ST ST  3$ Nzin z:
  ra   )funcslocs   r^   <lambda>*parse_native_yaml_struct.<locals>.<lambda>   s    s3%uUG4r`   c                 8    [        [        R                  SSS0 S9$ )NTFrs   use_out_as_primaryexternaldevice_guardindex)r&   r+   	Undefinedra   r`   r^   r   r      s     $..# 
r`   TFr   )
isinstancelistr   dictrw   intr2   rE   r3   	from_yamlappendr&   
grow_indexerror_check_native_functionsr?   ry   r.   r1   rh   )es
valid_tagsignore_keyspathskip_native_fns_genrsbser   mindiceskvr   r   s                @@r^   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)NrU   tagc                    > ST  ST 3$ r   ra   )r   tagss   r^   r   (parse_tags_yaml_struct.<locals>.<lambda>   s    s3%uTF3r`   descrv   )
r   r   setrw   r   r2   rE   copypopadd)	r   r   r   r   e_inamer   r   r   s	          @@r^   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   )rl   openyamlloadrP   r   )r   fr   s      r^   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   )rk   r   r   r   r   rP   r   )r   tags_yaml_pathr   r   r   r   r   r   s           r^   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_delegaterw   
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
             r^   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 r`   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    r^   
cpp_stringr   P  s    			$A			#uA			$A			$A			$A			$A			$A			$Aqc8Or`   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   rs   r+   CompositeImplicitAutograd%CompositeImplicitAutogradNestedTensorCompositeExplicitAutograd&CompositeExplicitAutogradNonFunctional)backendsbackends     r^   static_dispatch_keysr   j  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 ro   )r   
has_kernelrs   &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     r^   get_static_dispatch_backendr   v  s     	(M,D,DQ,G,G
 )))	
	1	1444	
	@	@AAA	
	1	1444	
	?	?@@@r`   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   rs   s        r^   static_dispatch_ops_headerr     sq      < <F21<#MM%akk]!L4F4F4H3IV  99Vr`   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   rs   s     r^   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       r^   add_spl_memory_format_binding5translate_args.<locals>.add_spl_memory_format_binding  s    )+%G||.)0%&GG++ !#OO$--*&  &&'=>&&w/ & r`   , c              3  8   #    U  H  oR                   v   M     g 7fro   exprrp   as     r^   rt   !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          r^   translate_argsr"    s|    
$ (L**,-M ::??nMMM8FL  l2E99+U+++r`   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::nativerv   return ::();)	r   r   r"  
get_kernelcpp_namespacer)   r   rs   r   )	r  r   r   r  r   r!  backend_metadata	kernel_nsnss	            r^   %generate_static_dispatch_backend_callr.    s    
 9@G<<>D3(E$//2  0 > > 	&&% 
 
		:r	*BRD=55;;=>bawbQQr`   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$  rv   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   rs   )	r  r   rj   cpp_sigsr  r   r!  r-  r   s	            r^   &generate_static_dispatch_fallback_callr9    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 exist, 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   rv   rT   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   rs   r:   r.  r9  r   r   r
  r9   r%   r  is_tensor_liker   r   r   tensor_optionsr   )r  r   rj   bkeysr  native_tensor_argstensor_argstensor_optsstmtssubexprsdispatch_coder   fallback	connectors                  r^   static_dispatchrK    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	)RegisterSchemaiB  rC   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::Nra   )rp   r   s     r^   rt   *RegisterSchema.__call__.<locals>.<genexpr>K  s     KNS3%0Ns   }z{}zm.def(z, {});
rv   z const std::vector<at::Tag> tags_z = ;
z, tags_z);
)
rO  is_native_function_selectedr   sortedr   r   r   r   rQ  r   )rZ   r   r   
maybe_tagsidxs        r^   __call__RegisterSchema.__call__G  s    }}88;;TYYKF166NKKKcQ4<Js166{34J??
&doo&C$'OOD!;C5D6MJVJs166{$;#<GDOOTXDYCZZ^__r`   ra   Nr   r3   r  
str | None)rb   rc   rd   re   __annotations__r   r   rQ  r   r\  rf   ra   r`   r^   rN  rN  B  s+    !&t!<J< ` !`r`   rN  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   )rj   r    {
    z
}
)r   from_schemar   r   unambiguous_namerd  rJ   DECLARATIONr  overload_namer   r   defn
DEFINITIONr   r   r   rf  rK  r   )rZ   r   r  r   defnsri  r  dispatcher_exprs_strmethod_basedispatcher_callmethod_namefn_bodys               r^   r\  ComputeOperators.__call__`  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
ra   Nr   r3   r  r   rb   rc   rd   re   r`  r   r\  rf   ra   r`   r^   rb  rb  [  s"    ::%77 R& !R&r`   rb  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 )NFr0  rv   r  zc10::SymIntint64_trk  
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   r3  manual_cpp_bindingr   r5  
signaturesr   rn  r   r   r   r  r4  r=   functionvariantsdeclr   ro  )rZ   r   	sig_groupr5  resultr  
target_sigr!  r   	exprs_str	intlike_ts              r^   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
ra   Nr^  rb   rc   rd   re   r   r\  rf   ra   r`   r^   r~  r~    s     ( !(r`   r~  c                  >    \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
ComputeTensorMethodi  rc  rd  re  rf  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 )NTr0  rv   z const;
)r1  r  rk  r  zTensor::)prefixz const {
    return at::_ops::r  );
}
)r=   r1  r  r   	is_out_fnr   self_argr   r3  r  rd  rJ   rp  r  r  rs  r   r   rn  r   r   r  rr  r   ro  )	rZ   r   r  r  r  r  r!  r   r  s	            r^   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
ra   Nr^  r|  ra   r`   r^   r  r    s     ::%77 " !"r`   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 )NFr0  rv   r  rl  rk  r  T)ri  r  z::redispatch(r  )r   r3  r  r  r   rn  r   r   r   r   r  r  r   ro  )	rZ   r   r  r  r  r  r!  r  r  s	            r^   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>ra   Nr^  r  ra   r`   r^   r  r    s      !r`   r  c                    SU R                   R                  R                   SU R                   R                  R                   S3$ )Nz{"aten::z", "z"},)r   r   rq  r   s    r^   compute_aten_opr  5  s5    qvv{{''(QVV[[-F-F,GtLLr`   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ro   )r  r  s     r^   rt   4compute_meta_function_declaration.<locals>.<genexpr>A  s     4t!VVXXt   zat::impl::MetaBasevoidc              3  .   #    U  H  nS U S3v   M     g7f)zbool z = falseNra   )rp   params     r^   rt   r  S  s      85TE%wh'5Ts   z
template <>)bindsrW  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   )rp   elems     r^   rt   r  ^  s2      3?D ==4=01499+>?s   +-truerT   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;
            };rv   zstruct TORCH_API structured_z
 : public rm  r>  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_tyr7  
assert_msgassert_stmtconstruction_stmtsjconstruction_blocksetter_methods_declmeta_return_template_paramsmeta_return_typedefprecomputed_decls                                  r^   !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   r@  rX  )r   rO  r   s      r^   needs_backend_selectr    sd    qvv{{ D}}W!8!8vv&&.//22r`   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]rd  rC   rO  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r4  z.c10::computeDispatchKey(dtype, layout, device)r  c              3  8   #    U  H  oR                   v   M     g 7fro   r   r  s     r^   rt   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ro   r  r  s     r^   rt   r    s     7&6ff&6r  r  zm.impl("aten::z", TORCH_FN(z));)r  rO  nativer   r   r   r   r   r
  r%   r  r?  r   rn  r!  rd  rJ   rs  has_tensor_argr   rr  ro  REGISTRATIONr   )rZ   r   r   
native_sigr  rC  dispatcher_sigr  dispatcher_exprsrs   rD  
compute_dks               r^   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ra   Nr^  r|  ra   r`   r^   r  r    s"    ;;  2& !2&r`   r  c                    S [         l        SS jn[         R                  " [        U5        [        R
                  " U S[         SS9$ )Nc                    g)NTra   )rZ   datas     r^   r   format_yaml.<locals>.<lambda>
  s    4r`   c                @    U R                  UR                  5       5      $ ro   )represent_dictry   )dumperr  s     r^   dict_representer%format_yaml.<locals>.dict_representer  s    $$TZZ\22r`   Fg    eA)default_flow_styleDumperwidth)r  r
   r  r
   r  r
   )rK   ignore_aliasesadd_representerr   r   dump)r  r  s     r^   format_yamlr    s9     7J3 {,<= 99TeJcRRr`   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    r^   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  r4  )r   r7   dynamic_typer  r   r   argumenttype_typer  )ts    r^   r  r  3  sS    !\""AFF## 1v  	5 1%hjr`   c                    S/n[         R                  U ;   a  UR                  S5        [         R                  U ;   a  UR                  S5        U$ )Nr<   r  	namespace)r=   r1  r   r  )r  	method_ofs     r^   compute_method_of_yamlr  @  sG     I~~!"8#%r`   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           r^   compute_returns_yamlr  K  s    T *, QEG!#affnne"<=9A(0OOAe4==?	
 66 !Cvv!!CD66"66#3#3#7#7#:#?#?@s >  &&r`   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	  r9   r   r%   compute_argument_yaml)cpp_ar  r  r  r  r   s         r^   compute_cpp_argument_yamlr!    s     %.."899/ JJJJ"
 ==$"]]C	N
	ENNL	1	1	ENNH	-	-$NN%)#1
 	
 
.r`   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  r4  )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          r^   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Jr`   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 )!NFr0  r  T)r1  cpp_no_default_argsfaithfulr4  has_tensor_optionsr  z (r  r;  c              3  V   #    U  H  n[        UR                  [        5      v   M!     g 7fro   )r   r
  r;   r  s     r^   rt   +compute_declaration_yaml.<locals>.<genexpr>
  s     MHqJqzz#9::Hs   ')r   operator_namerq  r   category_overriderv   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   r3  r7  r!  r   r4  r  r   r
  r   r  returns_typer  r  r   anyr=   r1  r  r   r   rq  r   r0  r  r6  r   is_abstractr   r   )r   r  r  r  r  r  r  cpp_argsr   r   schema_order_jit_argumentsr4  r  cpp_schema_order_typescpp_returnsr3  r7  s                    r^   compute_declaration_yamlrD    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  $ ro   )r   r   r   kindr8   
functionalr   r  s    r^   "has_autogenerated_composite_kernelrH  ,  sU    LL=A11= 	...U!&&++-:CUCU2Ur`   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ro   )
no_defaultr  r  s     r^   rt   4compute_registration_declarations.<locals>.<genexpr>9  s      =1,,..   *,r2  )schemadispatchr	  r  r'  z); // r   )
dispatcherr   r   r=  r  r  r   r   r   ry   r   r+   r   r   has_composite_kernelrH  jsondumps)	r   rj   r   r=  r  r  r   r   comment_datas	            r^   !compute_registration_declarationsrU  2  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   rC   &from_legacy_op_registration_allow_listfrom_yaml_pathget_nop_selector)"provided_op_registration_allowlistop_selection_yaml_pathop_registration_allowlistrO  s       r^   get_custom_build_selectorr]  S  s    
 	+6".		  26)5$'(J$K! ,#JJ%
 O 
 	+#223IJ O $446Or`   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_inplacer8   rG  r   r5   extendr  )dr   r`  rb  ra  s        r^   maybe_create_view_groupEget_grouped_by_view_native_functions.<locals>.maybe_create_view_groupu  s     BD""a'55001D55!@!@$GLj33T:ILL('!- 	QXXZ r`   z already in )rf  z1dict[ViewSchemaKind | SchemaKind, NativeFunction]r  z/list[NativeFunction | NativeFunctionsViewGroup])r   r   r   view_signatureview_schema_kindr>   non_aliasingrF  rB  r   rD   r  )ri   rg  grouped_by_viewsr   rN  	view_kindrF  s          r^   $get_grouped_by_view_native_functionsrn  r  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Nr`   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   rp   r   s     r^   rt   Jget_grouped_native_functions.<locals>.flatten_pre_group.<locals>.<genexpr>  s     E*Q;!&&0*r  )r4   	from_dictr>  r  r   )rf  r  s     r^   flatten_pre_group7get_grouped_native_functions.<locals>.flatten_pre_group  sP     !**1-9 E!((*EEEEE
##3Jr`   )rf  z dict[SchemaKind, NativeFunction]r  /Sequence[NativeFunction | NativeFunctionsGroup])rB   r   rD   r  )ri   rv  pre_grouped_native_functionss      r^   get_grouped_native_functionsrz    sL    
+
	8
 $>>N#O #T*F*M*M*O%PQ r`   )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$ )NrT   z6Codegen only supports one namespace per operator, got z from )
r   r   r   ry   r)  r*  r   r)   r   re  )grouped_native_functionsrj   r{  ns_grouped_kernelsr   native_function_namespacesdispatch_keysrs   backend_idxr+  r	  s              r^   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 &" r`   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   rv      namespace_strentity_name	max_level	
        )
ry   rI   r   r   fromkeysre  prologuer   epiloguesplit)r~  declarationsnewliner	  kernels	ns_helperordered_kernelss          r^   8get_native_function_declarations_from_ns_grouped_kernelsr    s     !LG0668	##
	 {33G<=
  o   
  	 E'N	
 9  r`   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}  rj   r{  )r~  )r  r  )r}  rj   r{  r~  s       r^    get_native_function_declarationsr    s+      0!9'!9
 D- r`   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   r3   r   r   rG  rs   r)   )r   r  r+  s      r^   get_kernel_namespacer    s     #--a0:1A1O1O#O 
"*Q2O2O166;;UVUaUaUfUfUkUk"l m(556
,::;;`	bO +;&&@Xr`   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   rocmr4  class_method_nameskip_dispatcher_op_registrationr   r  r$  rv   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.$ )Nrv   )ns_prologuens_epiloguedispatch_anonymous_definitions"static_init_dispatch_registrationsdeferred_dispatch_registrationsdispatch_namespacedispatch_namespaced_definitions)r  r  r   )anonymous_definitionsrs   kernel_namespacens_definitionsr  registration_bodyr  s   r^   r   1get_native_function_definitions.<locals>.<lambda>g  sJ    #,#5#5#,#5#56K(7 7 ;=*79*6*<*<*>7EFV7Wr`   )r   r   r   destRegisterDispatchKeyrJ   NAMESPACED_DEFINITIONANONYMOUS_DEFINITIONr  r  r   re  r   r3   r	  rG  r   rI   r   substitute_with_templater  )r|   r}  rs   r  rO  r  r4  r  gen_dispatch_helpersdefinitionsregistrationsr  ns_genanonymous_genreg_genr   r	  r  r  r  r  r  s     `    `         @@@@@r^   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!	
 +> r`   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  r4  r  r  r   rv      r  r  )r   r   r  r  rJ   NAMESPACED_DECLARATIONr  r   r   re  ry   r   rI   r   r  r  r   r  r  )r}  rs   r  rO  r  r4  r  r~  r  r   r   r	  r  r  r  s                  r^   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 r`   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$ )
Nrv   atenr   TORCH_LIBRARY_FRAGMENTTORCH_LIBRARYr   r'  z	, m) {
  z
};)	r   r   r	  r   ry   rH   rN  r,   r   )ri   schema_selectorns_native_functionsnative_functionschema_registrationsaten_schema_registrationscustom_namespacer	  r   schema_registrations_bodytabtorch_library_macros               r^   (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, &<<r`   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   rH   r  )structured_native_functionss   r^   r   (gen_aggregated_headers.<locals>.<lambda>  s    ,.04:<WX1
r`   MethodOperators.hc            
     `   > / [        [        [        [        R                  TS9T 5      5      S.$ )Nrf  MethodOperators_includesMethodOperators_declarationsr   rH   rb  rJ   rp  )method_native_functionsstatic_dispatch_idxs   r^   r   r    s4    (*,0$**8K ,-
r`   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   r^   r   r     s7    #F"G&*$**8K 0'
r`   Functions.hc                 Z   > [        T5      S/[        [        [        5       T 5      5      S.$ )Nz#include <ATen/Operators.h>)r  Functions_includesFunctions_declarations)r  r   rH   r~  ri   r  s   r^   r   r    s5    -J#. $A"A&*#%$'
r`   )r}  rj   zNativeFunctions.hc                    > S/T S.$ )Nz%#include <ATen/NativeMetaFunctions.h>)NativeFunctions_includesNativeFunctions_declarationsra   )r  s   r^   r   r  "  s    )P(Q,8
r`   r  Functions_inl.h>DispatchKeyFunctions.hc                     > [        T 5      TS.$ N)rs   inline_headersr   rs   inl_headerss   r^   r   r  0  s    $'$5&1r`   Functions_inl.hDispatchKeyFunctions_inl.hc                 J   > / TR                  5       [        TTT T   TTSS9S.$ )NT)r}  rs   r  rO  r  r4  )!DispatchKeyFunctions_inl_includesr   dispatch_namespaced_declarations)r   r  )rj   rs   r}  r  rO  s   r^   r   r  8  s6    9;*6*<*<*>8R1I%1$3L$A!)!#9r`   )writer=   r1  r  r  r}   write_with_template)ri   r}  r  r  rO  rj   cpu_fmrz   functions_keysr  r  fnr|   r  rs   r  r  r  s   ``````    `  @@@@@r^   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   r^   r   *gen_per_operator_headers.<locals>.<lambda>h  s3    ("..<O "!
r`   z.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    r^   r   <gen_per_operator_headers.<locals>.<lambda>.<locals>.<lambda>{  s    #=.A$r`   r   _ops.h>)static_dispatch_ops_headersoperator_includesfunction_definitions)r   rH   r~  )r  r   r  s   r^   r   r  x  sI    /3 "	0 (;4&%H(,')!)r`   r   z_meta.hzNativeMetaFunction.hc                 :   > S[        [        [        T 5      5      0$ )Nmeta_function_declarationsr  )structured_functionss   r^   r   r    s     0$ =?S3r`   r  z	_native.hzNativeFunction.hc                 .   > T(       a	  ST S3T S.$ / T S.$ )Nr   z_meta.h>)extra_includesnative_function_declarationsra   )r  is_structuredr   s   r^   r   r    s%    <I)$x80<	OQ0<	r`   ))	Functionsrv   )	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)rY  rB  )r   categoryfunctions_by_root_namesuffixs    r^   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  ra   )r  r  s   r^   r   r    s    *<8Dr`   r  r  r  r  c                     > [        T 5      TS.$ r  r  r  s   r^   r   r    s     #L 1"-r`   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  )rY  )r   dispatch_namesr  s    r^   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ro   )r=   r1  r  )rp   r  s     r^   rt   Ggen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>.<genexpr>  s     Iyw~~4yrM  r   r  N)r>  )rp   r   r  s      r^   rt   =gen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>  s3      /'EODIyII 4%dV73'Es   00r  )rY  ry   )r  s   r^   r   r     s+    (. /'='C'C'E/ )
 -/
r`   )r   r   r   r   ry   r  rw   r   r4   r   r   r  r  #compute_native_function_declarationr  r   rD   r  rJ   r  r}   )ri   r}  r  rO  rj   r  rz   ops_fmr  r  r  r  grouped_functions_by_root_namegroupgrouped_functionsr|   r  r  rs   r  r  r  r  r  r  r   r  r  s     `             @@@@@@@@@@@@r^   gen_per_operator_headersr(  I  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)ri   r}  r  rO  rj   r  rz   r$  r  r  r  )ri   r}  r  r  rO  rj   r  rz   r  r  r  zTensorBody.hc            
        > [        [        [        [        R                  TS9T 5      5      [        [        [        [        R
                  TS9T 5      5      S.$ )N)rd  rf  )tensor_method_declarationstensor_method_definitions)r   rH   r  rJ   rp  rs  r  s   r^   r   gen_headers.<locals>.<lambda><  s\    *.'%118K %+ *.'%008K %*
r`   zRedispatchFunctions.hc                 B   > S[        [        [        5       T 5      5      0$ )Nfunction_redispatch_definitions)r   rH   r  ri   s   r^   r   r-  T  s!    -t246FG0
r`   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)rU  )r   rj   ri   s    r^   r   r-  ]  s2    ')*)A 2!_E)*
*s   !zVmapGeneratedPlumbing.hc                    > [        T 5      $ ro   r#   r0  s   r^   r   r-  f  s    +@AQ+Rr`   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ro   r  )rp   r   s     r^   rt   Agen_headers.<locals>.gen_aten_interned_strings.<locals>.<genexpr>r  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   updater4  r   rY  )attrsr  r   r   ri   s       r^   gen_aten_interned_strings.gen_headers.<locals>.gen_aten_interned_stringsi  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   rY  )r   s   r^   gen_tags_enum"gen_headers.<locals>.gen_tags_enum  s    $uzz&2D'EGGr`   z
enum_tag.h)r  dict[str, str])r(  r  r  )ri   r   r}  r  r  rO  rj   core_fmr  rz   r$  r  r  r  per_operator_headersrF  rJ  s   ``  ` `          r^   gen_headersrO    s    $  -%= 3+!')	
 	-%=(C 3+!')	
 MM	
0 LL	
 LL$	
 LL!#R"
H MM+-FGH MM,.r`   c                  ^ ^^^^^^^^^^"^#^$^%^&^'^(^)^*^+^,^- SnT(       a  SnU GHY  m%[        T%X5      m'U(       a  S:U#U%U&UU4S jjnO	S:U%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  m)[        T%5      (       a  UOSS[        R                  " T#UT5      U" 5       T)(       a  [        R                  " T#5      O/ S.n    S;U#U%U'U)UUU4S jjnT'R!                  ST% S	3S
TS UT%[        R"                  :X  a  SOSUS1S9  T H  m(T(R$                  R&                  (       a  [)        T%5      (       d  M0  T(R                  R*                  R,                  R,                  m*T%[        R"                  L aB  T'U
L d   eT'R/                  ST* S	3SUU%U(4S j5        U	R/                  ST* S	3SU(U*4S j5        M  T%[        R0                  L a,  Sm$T(       a  Sm$T'R/                  ST* S3SUU$U%U(U*4S j5        M  [3        ST% S35      e   @'GM\     [5        UUT TTUUUS9  S<U U4S jjnU
R7                  S U5        TnU(       a  [8        R:                  " 5       n[=        T US!9u  m"m+U
R7                  S"U"U+U4S# j5            S=S$ jnU
R?                  S%T UU4S& jS'[A        T5      0S(1 S)kS*9  U
R7                  S+[B        5        UR7                  S,[B        5        UR7                  S-U 4S. j5            S>UU4S/ jjn[        T5      [        T5      -   n [E        S0 T5       V!s0 s H  n!U!R*                  R,                  U!_M     sn!m,[E        S1 T5       V!s0 s H  n!U!R*                  R,                  U!_M     sn!m-U RG                  U,U-4S2 jT  5       5        U
R?                  S3U UUS1 S4kS59  U
R7                  S6UU4S7 j5        U
R7                  S8UUU4S9 j5        g s  sn!f s  sn!f )?Nz#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ro   )r   )rp   r  r   s     r^   rt   =gen_source_files.<locals>.operator_headers.<locals>.<genexpr>  s#      E?L0044}s   !r   
_native.h>r  r   r   )r   r   r4   r>  r  r   r+   Metar   r   r   rY  r   )headersr  is_registeredr   rs   r  r  r}  s      r^   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++r`   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   )rV  rs   r  s    r^   rX  rY    sI    >?;#U#UUNN#@A>1NN_\4DL#QRr`   rv   )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}  rs   r  rO  r  r4  r  r  )r  )gnfr   rs   r|   r  r  rO  r  s    r^   "register_dispatch_key_env_callable<gen_source_files.<locals>.register_dispatch_key_env_callable	  s7     '(G.1U!- -%4S)=
) r`   Registerz.cppzRegisterDispatchKey.cppc                    U R                   $ ro   r   )xs    r^   r   "gen_source_files.<locals>.<lambda>'	  s    Q[[r`   r  rT   ra  )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)rj   rs   r  s   r^   r   ri  7	  s8    ,Ma,P.2.V.V|</ /3.D.DQ.Gr`   UfuncCPUKernel_zUfuncCPUKernel.cppc                 6   > T[         R                  " T 5      S.$ )N)r   rs  )r  compute_ufunc_cpu_kernel)r  r   s   r^   r   ri  B	  s     $.2.K.KA.Nr`   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_headersrq  rr  rs  )r  r  r#  compute_ufunc_cuda)rj   rz  rs   r  r   s   r^   r   ri  N	  s>     $(4,Ma,P.2.V.V|</ /3.E.Ea.Hr`   zunrecognized z
 for ufunc)aoti_fmaoti_backendsri   rj   r  r[  update_aoti_c_shimextend_aoti_c_shimc            
     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  )r^  !backend_select_method_definitions%backend_select_function_registrations)r  r   r   rH   r  rJ   rs  r  )r  relevant_fnsri   rO  s     r^   gen_backend_select,gen_source_files.<locals>.gen_backend_selecti	  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)ri   r  zRegisterSchema.cppc                 6   > T(       a  / OT T(       a  / S.$ TS.$ )N)r  r  ra   )r  r  r  s   r^   r   ri  	  s%    . *,*. %'	
 &
r`   c                    U R                   $ ro   rg  )r  s    r^   key_func"gen_source_files.<locals>.key_func	  s     ||r`   zOperators.cppc                f   > SU R                    S3/[        [        R                  TS9" U 5      /S.$ )Nr   r  r  )rX  r  )r   rb  rJ   rs  r  s    r^   r   ri  	  s>    #6r||nC!H I %%4G !
r`   r     >   r  rX  r  )rj  rk  rm  rl  rn  zFunctions.cppzTensorMethods.cppzATenOpList.cppc                 :   > S[        [        [        T 5      5      0$ )Naten_ops)r   rH   r  r0  s   r^   r   ri  	  s    Xo7GHI
r`   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   rT  r  )
r   r5   r`  r   ra  r4   rG  r  r   r  )r  rV  s     r^   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> r`   )r^  func_definitionsfunc_registrations)r  @NativeFunction | NativeFunctionsGroup | NativeFunctionsViewGroupr  	list[str])r   r    r+   r   )r  r  rj   rO  s     r^   functionalization_env_callable8gen_source_files.<locals>.functionalization_env_callable	  sZ    %	O%	%	P *!, @! #E E EF#
 	
r`   c                4    [        U R                  5       5      $ ro   r   r  r  s    r^   r   ri  
  s    T!++-%8r`   c                4    [        U R                  5       5      $ ro   r  r  s    r^   r   ri  
  s    D4Gr`   c              3     >#    U  H?  nUR                   R                  T;  d  M  UR                   R                  T;  d  M;  Uv   MA     g 7fro   )r   r   )rp   r   structured_mapview_maps     r^   rt   #gen_source_files.<locals>.<genexpr>
  s?      !A66;;n, 	
12H1L 	
!s   A
A
	A
zRegisterFunctionalization.cpp>   r^  r  r  func_add_back_views_definitions!func_add_back_views_registrations)rj  rk  rl  rn  zFunctionalInverses.hc                 :   > S[        [        U 4S jT5      5      0$ )Nview_inverse_declarationsc                   > [        TU 5      $ ro   )r!   )r  rO  s    r^   r   4gen_source_files.<locals>.<lambda>.<locals>.<lambda>!
  s    L !r`   )r   rH   )rO  view_groupss   r^   r   ri  
  s$    '  	*	
r`   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/rT  Nrg  rs  s     r^   rt   5gen_source_files.<locals>.<lambda>.<locals>.<genexpr>>
  s@      	 S  *!++ 7* +,++j	B SrM  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)Nrr  r   r  rT  )r   r   rs  s     r^   rt   r  K
  sV       B	B *5AFF)B	B)!++ 7**+++jB Bs   AA$A)r^  #CompositeViewCopyKernel_Definitions(GeneratedCompositeFunctional_Definitions!GeneratedCompositeOut_Definitions)r   ra  r`  r   r  rG  r   rH   r"   r+   r   r@   rA   )r  rj   r  r  s    r^   r   ri  <
  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  )rb  %NativeFunction | NativeFunctionsGroupr  dict[str, list[str]])r  r  )r  r  r  r   )r  r  r  r  )$r}   r   r   r   r3   r	  rG  r   r   r   r+   r   r.   r  gen_registration_headersgen_registration_helperswrite_sharded_with_templateCPUr  ufunc_inner_loopr0   r   r   r  CUDAr   r   r  rC   rY  r  write_shardedr  r   rD   re  ).ri   r}  r  r  rO  r  rj   r|  rM  
cpu_vec_fmr  rz   r  r  r  force_schema_registrationrN  r  r~  r}  r  r[  rX  ns_grouped_native_functionsgrouped_native_functionr	  register_dispatch_key_base_envrc  r  r  r  r  
all_groupsr   r  r   rz  rs   r  r|   r  r  r   r  r  r  s.   ```````      ``  `                @@@@@@@@@@@@r^   gen_source_filesr    s   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 E &H #)'$?---	
 
( 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u:4s   !Q!Q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 ro   )r  rD  )r   ri   s    r^   r   'gen_declarations_yaml.<locals>.<lambda>s
  s%    BRSBRQ5a8BRSTSs   ')r  )r  ri   s    `r^   gen_declarations_yamlr  n
  s     LLTr`   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resolvera   r`   r^   get_torchgen_rootr  w
  s    
 >  ((**r`   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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%S0S'9  U R                  S1S2SS3S9  U R                  S4S5SS6S9  U R                  S7[        S%/ S8Q/ S8QS9S:9  U R                  S;S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SASBKJn  [        R                  [        R                   [        R"                  [        R$                  [        R&                  [        R(                  [        R*                  [        R,                  1n[        R                  [        R                   1n[/        5       nUR0                  (       d  UR2                  (       a?  UR5                  [        R6                  5        UR5                  [        R6                  5        ORUR5                  [        R6                  5        [        R6                  U;   a  XUR9                  [        R6                  5      	 UR:                  (       d  UR2                  (       a?  UR5                  [        R<                  5        UR5                  [        R<                  5        ORUR5                  [        R<                  5        [        R<                  U;   a  XUR9                  [        R<                  5      	 UR>                  (       dR  UR5                  [        R,                  5        [        R,                  U;   a  XUR9                  [        R,                  5      	 UR@                  (       a=  U V	s/ s H0  n	[C        U	5      (       d  [        U	5      UR@                  ;   d  M.  U	PM2     nn	[E        X4U5      n
[F        U   nU
RH                  U
RJ                  p[M        U5      nU Vs/ s H  n[O        U[P        5      (       d  M  UPM     nn[S        U5      nU Vs/ s H  n[O        U[T        5      (       d  M  UPM     nnURV                   SC3n[Y        U5      R[                  SDSDSE9  URV                   SF3n[Y        U5      R[                  SDSDSE9  UR\                   n[Y        U5      R[                  SDSDSE9  [_        UUSG9n[_        USH9n[_        USH9n[_        USH9n[_        UUSG9n[_        UUSG9nSIU0nUR:                  (       a  [_        USH9USJ'   / nUR`                  (       au  UR`                   Vs/ s H  nU[        Rb                  " U5         PM     nnUR`                   H2  n[        Rb                  " U5      nUU;  d  M!  UR5                  U5        M4     SKURd                  ;   a  [g        Sj0 SLU_SMU_SNU_SOU_SPU_SQU_SRU_SSU_STU_SUU_SVU_SWU_SXU_SYU_SZURh                  _S[URj                  _S\URl                  _S]URn                  _S^UR2                  _S_U_S`URp                  _6  SaURd                  ;   a+  [s        UUUUUUUUUUUUUURh                  URl                  Sb9  ScURd                  ;   a
  [u        UUSd9  URv                  (       a  [Y        URv                  5      Ry                  5       n U Rz                  n!U R|                  n"USe4USf4USg4USh4/UR                  5        V#V$s/ s H  u  n#n$U$U# Si3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 )kNz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--mtiaz(Generate MTIA 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)rV  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)optionsinstall_dir)r  cudaxpur  ri   r}  r  r  rO  r  rj   r|  rM  r  r  rz   r  r  r  r  rN  r  r~  r}  r  rV  )ri   r   r}  r  r  rO  rj   rM  r  rz   r$  r  r  r  rN  r  )ri   r  rv   cpu_vec_core_ops_r   ra   )BargparseArgumentParseradd_argumentr   
parse_argsr]  op_registration_whitelistr[  osr   r   source_pathtorchgen.modelr  r+   r  r  r   r   r   r   rU  MTIAr   mpsr~  r   MPSr   r  XPUmtiabackend_whitelistr/   r   rl   ri   rj   rz  r   r4   rn  r5   r  r	   mkdiraoti_install_dirrG   static_dispatch_backendparsegenerater  r  r  rN  r  r  rO  r  output_dependenciesr  r   stemry   r  write_outputs))parserr  rO  native_yaml_pathr   r  r  r}  r   r   parsed_yamlr   ri   rj   r}  r  r  !native_functions_with_view_groupsr  core_install_dirops_install_dirr  rM  r  r  cuda_fmr$  r|  rz   r  keydp_keydepfile_pathdepfile_namedepfile_stemrr   	device_fmr|   r  varnamer   s)                                            r^   mainr  
  s	   $$1MNF
0	   I  
 D  
  A  
 %   4:	   L  
 6  
 6  
 7   %%-	   ""M   *	   ##N	   ++?	   %%C	   ;;.   M   M  	 !G())&&H
 ww||G$7$79WXWW\\'"5"57IJN,
 	--99--::	N 	M %K{{g00;??++//*(??m+11+//BC{{g00;??++//*(??m+11+//BC<<(()},11+2B2BCD   #
"&q))SVw7P7P-P " 	 
 $$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.0&& 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
#H
D Ts0   8-a
)a
,a	a a=a6#a2a__main__)rs   r+   rz   dict[str, FileManager]r{   rF   r  rF   )N<stdin>F)r   objectr   set[str]r   set[DispatchKey] | Noner   r   r   r$  r  rh   )r  )r   r  r   r   r  r  )r   r   r  r  ro   )r   r   r   r   r   r  r   r$  r   zobject | Noner  rh   )r   Sequence[NativeFunction]r  None)r   r   r  r   )r   re  r  zlist[DispatchKey])r   r3   r   r&   r  zDispatchKey | None)r   r3   r   re  r  r_  )r   re  r  r  )r  "CppSignature | DispatcherSignaturer  r   r  r   )r  r  r   r3   r   r&   r  r   )r  r  r   r3   rj   re  r  r   r{  )r  r4   r  r_  )r   r3   rO  rC   r  r$  )r  r  r  r   )r   r   r  r  )r  r<   r  r   )r  zset[Variant]r  r  )r   r3   r  z+tuple[list[dict[str, str]], dict[str, str]])r   r   r  r$  r  r  r  r  r  rL  r  r  )r  r%   r  r$  r  r  r  r  r  rL  r  r  )r   r3   r  r  )r   r3   r  r$  )r   r3   rj   dict[DispatchKey, BackendIndex]r  r   )rZ  zlist[str] | Noner[  r_  r  rC   )ri   r  r  z3Sequence[NativeFunction | NativeFunctionsViewGroup])ri   r  r  rx  )r}  rx  rj   r	  r{  JCallable[[NativeFunctionsGroup | NativeFunction, BackendIndex], list[str]]r  r  )r~  r  r  r  )r}  rx  rj   r	  r{  r
  r  r  )r   r  r  r&   r  r   )r|   rF   r}  rx  rs   r+   r  r&   rO  rC   r  r$  r4  r$  r  r$  r  r$  r  r  )r}  rx  rs   r+   r  r&   rO  rC   r  r$  r4  r$  r  r  )ri   r  r  rC   r  ztuple[list[str], str])ri   r  r}  rx  r  Sequence[NativeFunctionsGroup]r  re  rO  rC   rj   r	  r  rF   rz   r  r  set[DispatchKey]r  Sequence[DispatchKey]r  r$  r  r  )ri   r  r}  rx  r  re  rO  rC   rj   r	  r  rF   rz   r  r$  rF   r  r  r  r  r  r$  r  r  ) ri   r  r   r  r}  rx  r  r  r  re  rO  rC   rj   r	  rM  rF   r  rF   rz   r  r$  rF   r  r  r  r  r  r$  rN  r$  r  r  ),ri   r  r}  rx  r  r  r  z"Sequence[NativeFunctionsViewGroup]rO  rC   r  re  rj   r	  r|  rF   rM  rF   r  rF   r  rF   rz   r  r  r  r  r  r  r$  r  r$  rN  r$  r  r$  r~  r$  r}  r  r  r$  r  r  )r  rF   ri   r  r  r  )r  r	   )r  r  )
__future__r   r  	functoolsrR  r   r  collectionsr   r   r   dataclassesr   r   pathlibr	   typingr
   r   r   r   r   typing_extensionsr   r   torchgen.api.dispatcherapirP  torchgen.api.metar  torchgen.api.nativer  torchgen.api.structuredr   torchgen.destr  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   #torchgen.gen_functionalization_typer   r    r!   r"   torchgen.gen_vmap_plumbingr$   r  r%   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>   #torchgen.native_function_generationr?   r@   rA   rB   !torchgen.selective_build.selectorrC   torchgen.utilsrD   rE   rF   rG   rH   rI   rJ   torchgen.yaml_utilsrK   rL   collections.abcrM   rN   rP   rh   rk   r`  rl   r}   r   r   cacher   r   r   r   r   r   r   r  r"  r.  r9  rK  rN  rb  r~  r  r  r  r  r  r  r  r   r  r  r  r!  r  rD  rH  rU  r]  rn  rz  r#  r  r  r  r  r  r  r  r  r(  rO  r  r  r  r  rb   ra   r`   r^   <module>r(     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V.V NV "@	V
 4V V ,V 5V V V V V 'V )V %V  !V"  $#V$ %V& &*'V( )V* $+V, -V. 
/Vr+C	+x1v	 zF r`   