
    '}h=             &          U d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmc mZ d dlmc mZ d dlmc mZ d dl mc m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d d	l5m6Z6m7Z7m8Z8 d d
l9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZX d dlYmZZZm[Z[m\Z\m]Z] d dl^m_Z_ d dl`maZambZbmcZcmdZdmeZemfZfmgZgmhZh d dlimjZjmkZk  ed      Zl G d dek      Zm edddg      Zni aoeepenf   eqd<   i areepeep   f   eqd<   	 	 	 ddesdeep   deeeF      depdetdenfd Zuddesdepdeep   fd!Zv ej                  d"      depdeep   fd#       Zx	 dddd$depd%epdeeeF      detd&ees   denfd'Zyd(eeM   ddfd)Zzd*epdepfd+Z{d,eeB   deeF   fd-Z|d.eMd/eBdeeF   fd0Z}d.eMd/eeB   deep   fd1Z~d,eeB   deep   fd2Zd3ee*e,f   d4e*depfd5Zd3ee*e,f   d.eMd/eBdepfd6Zd3ee*e,f   d.eMdeeB   depfd7Zd3ee*e,f   d.eMdeeB   depfd8Z e
d9:       G d; d<             Z e
d9:       G d= d>             Z e
d9:       G d? d@             Z e
d9:       G dA dB             Z e
d9:       G dC dD             Ze3d.eMdepfdE       ZdFeNdeep   fdGZd.eMdHe_detfdIZ e
d9:       G dJ dK             ZdLesdepfdMZd*epdesfdNZdOeVdepfdPZdQeeW   deep   fdRZd.eMdeeeepepf      eepepf   f   fdSZdTe)dUetdVeep   dWeep   dXeepepf   desfdYZdZeAdUetdVeep   dWeep   dXeepepf   desfd[Ze3d.eMdesfd\       Zd.eMdetfd]Ze4d.eMdeeFeBf   depfd^       Zd_eeep      d`eep   de_fdaZdeeM   deeeMeOf      fdbZdeeM   deeeMeNf      fdcZe#j4                  dddeeeeMeNf      deeFeBf   dfeeeNeMf   eBgeep   f   deepeep   f   fdgZdheepeep   f   deep   fdiZe#j4                  dddeeeeMeNf      deeFeBf   dfeeeNeMf   eBgeep   f   deep   fdjZd.eeMeNf   dkeBdepfdlZdmeddeeeeMeNf      dneFdkeBdHe_doetdpetdqetdretdeep   fdsZdeeeeMeNf      dneFdkeBdHe_doetdpetdeep   fdtZdeeM   due_deeep   epf   fdvZdeeM   deeeeMeNf      dweeN   dxeeB   dHe_deeFeBf   dyeddzedd{eeF   d|eeF   doetddfd}ZdeeM   deeeeMeNf      dxeeB   dHe_deeFeBf   dyeddzedd~edd{eeF   d|eeF   doetddfdZdeeM   deep   deeeeMeNf      dweeN   dxeeB   dHe_deeFeBf   deddyeddzedd~edd|eeF   d{eeF   doetdetddf dZdeeM   deeeeMeNf      dweeN   deeO   dHe_dxeeB   deeFeBf   deddeddyeddeddzedd|eeF   d{eeF   doetdetdetdqetddf&dZdyeddeeM   ddfdZdejN                  fdZddZedk(  r e        yy)    N)defaultdict
namedtupleOrderedDict)	dataclassfield)AnyCallableDictListLiteralOptionalSequenceSetTupleTypeVarUnion)cpp)	translate)BindingCppSignatureCppSignatureGroupDispatcherSignature
NamedCTypeNativeSignatureSpecialArgName)method_with_native_functionnative_function_managerwith_native_function with_native_function_and_indices)gen_aoti_c_shim*gen_static_dispatch_backend_call_signatureget_backend_index_for_aoti) gen_functionalization_definition"gen_functionalization_registration.gen_functionalization_view_inverse_declarationGenCompositeViewCopyKernelgen_all_vmap_plumbing)ArgumentBackendIndexBackendMetadataBaseOperatorNameDEFAULT_KERNEL_NAMESPACEDispatchKeyFRAGMENT_NAMESPACESFunctionSchemais_cuda_dispatch_keyis_generic_dispatch_keyis_ufunc_dispatch_keyLocationNativeFunctionNativeFunctionsGroupNativeFunctionsViewGroupOperatorNameOptionalType
SchemaKindSelfArgumentSTRUCTURED_DISPATCH_KEYSTensorOptionsArgumentsTypeVariantViewSchemaKind)add_generated_native_functionsgen_composite_functional_kernelgen_composite_out_kernelpre_group_native_functions)SelectiveBuilder)assert_never	concatMapcontextFileManagermake_file_managermapMaybeNamespaceHelperTarget)
YamlDumper
YamlLoaderTc                         e Zd Zd fd	Z xZS )
LineLoaderc                 b    t         |   ||      }|j                  j                  dz   |d<   |S )N)deep   __line__)superconstruct_mapping
start_markline)selfnoderT   mapping	__class__s       K/var/www/html/test/engine/venv/lib/python3.12/site-packages/torchgen/gen.pyrX   zLineLoader.construct_mapping   s5    '+Dt+<"oo22Q6
    )F)__name__
__module____qualname__rX   __classcell__)r^   s   @r_   rR   rR      s     r`   rR   
ParsedYamlnative_functionsbackend_indices_GLOBAL_PARSE_NATIVE_YAML_CACHE_GLOBAL_PARSE_TAGS_YAML_CACHEFes
valid_tagsignore_keyspathskip_native_fns_genreturnc           	      ~   t        | t              sJ g }t        t              }| D ]  }t        |j	                  d      t
              sJ |       t        ||d         |j	                  d      t        fd      5  t        j                  |||      \  }}	|j                  |       t        j                  ||	       d d d         t        |       t        d       }
|st        ||       |j                         D ]!  \  }}t        |ddt!        |      |      |
|<   # t#        ||
      S # 1 sw Y   xY w)NrV   funcc                      d d  S Nzin z:
   )funcslocs   r_   <lambda>z*parse_native_yaml_struct.<locals>.<lambda>   s    s3%uUG4 r`   c                  >    t        t        j                  dddi       S )NTFdispatch_keyuse_out_as_primaryexternaldevice_guardindex)r*   r.   	Undefinedrt   r`   r_   rw   z*parse_native_yaml_struct.<locals>.<lambda>   s"    $..# 
 r`   TFry   )
isinstancelistr   dictgetintr4   rH   r5   	from_yamlappendr*   
grow_indexerror_check_native_functionsrA   itemsr1   re   )rj   rk   rl   rm   rn   rsbserq   mindiceskvru   rv   s                @@r_   parse_native_yaml_structr      s8    b$!BALTARB +!%%
+S14141tQz]+f45 	+$..q#z;OGD!IIdO##B*	+ 	+	+ !$/:	

0G &r2.
 	
1!#-a0

	
 b'"";	+ 	+s    AD22D<	c                    t        | t              sJ t               }| D ]  }t        |j                  d      t              sJ |       t        ||d         |j                  d      t        fd      5  |j                         }|j                  d      }|j                  dd      }|dk7  sJ |j                  |       d d d         |S # 1 sw Y   xY w)NrV   tagc                      d  d S rs   rt   )rv   tagss   r_   rw   z(parse_tags_yaml_struct.<locals>.<lambda>   s    s3%uTF3 r`   desc )
r   r   setr   r   r4   rH   copypopadd)	rj   rm   r   r   e_inamer   rv   r   s	          @@r_   parse_tags_yaml_structr      s    b$5B 
!%%
+S14141tQz]+uuU|34 	&&(C775>D7762&D2::FF4L	 		
 I	 	s   9ACC	)maxsizec                     | t         vrLt        |       5 }t        j                  |t              }t        ||       t         | <   d d d        t         |    S t         |    S # 1 sw Y   t         |    S xY w)NLoader)rm   )ri   openyamlloadrR   r   )rm   frj   s      r_   parse_tags_yamlr      sq     00$Z 	X11Z0B2HRV2W)$/	X )..(..		X )..s   0AA/)rn   loaded_yamltags_yaml_pathr   c                    | t         vrVt        |      }|0t        |       5 }t        j                  |t
              }d d d        n|}t        ||| |      t         | <   t         |    S # 1 sw Y   )xY w)Nr   )rm   rn   )rh   r   r   r   r   rR   r   )rm   r   rl   rn   r   rk   r   rj   s           r_   parse_native_yamlr      s     22$^4
 d 5qYYq45 5 B0H 31
'- +4005 5s   A((A1ru   c                    i }t        t              }| D ]M  }|||j                  j                  <   ||j                  j                  j                     j	                  |       O | D ]  }|j
                  S||j
                     }|j                  s8J |j                  j                   d|j
                   d|j
                   d       d|j                  v srt        |j                  j                        dk7  st        |j                  j                        dk7  st        |j                  j                  j                        dk7  s|j                  j                  j                  }|j                  j                  j                  }|j                  sJ |j                  j                   d       t        |j                  d	|j                        }t        ||         d
kD  rJ |j                  j                   d| d        y )Nz0 is marked as a structured_delegate pointing to z, but zY is not marked as structured. Consider adding 'structured=True' to the delegated operator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   rq   r   r   structured_delegate
structuredr   stroverload_nameinplacer,   basedunder_methodlen)ru   func_mapbase_func_mapr   delegate_func	base_namer   out_of_place_base_names           r_   r   r     s   35HBMdBSM 2 !affkk&&'..q12    ,$Q%:%:;M ++ 66;;-O(()0E0E/F GNO+ aff$AFFKK I-AFFKK L0AFFKK$$%/((IFFKK55M$$ 66;;-  q q$ &6y'>'>&" }%;<=A 66;;-  77@kAprA9r`   sc                 .   | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  d	d
      } | j                  dd      } | j                  dd      } | j                  dd      } d|  dS )z1Convert a python string into a c++ string literal\z\\"z\"z\az\bz\f
z\nz\v	z\t)replacer   s    r_   
cpp_stringr   ,  s    			$A			#uA			$A			$A			$A			$A			$A			$Aqc8Or`   backendsc                     t        |       dk(  rg S | D cg c]  }|j                   c}t        j                  t        j                  t        j
                  t        j                  gz   S c c}w )Nr   )r   rz   r.   CompositeImplicitAutograd%CompositeImplicitAutogradNestedTensorCompositeExplicitAutograd&CompositeExplicitAutogradNonFunctional)r   backends     r_   static_dispatch_keysr   F  s^    
8}	4<=$$=11==11>>	A
 
 	
=s   A*r   backend_indexc                 6   | j                   |j                  |       r|j                  S | j                  rt        j
                  S | j                  rt        j                  S | j                  rt        j                  S | j                  rt        j                  S y N)r   
has_kernelrz   &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   r   s     r_   get_static_dispatch_backendr   R  s     	(M,D,DQ,G
 )))	
	1	1444	
	@	@AAA	
	1	1444	
	?	?@@@r`   c                     || j                   ry g }|D ]A  }t        | |      }||j                  d| j                   d|j	                          d       C dj                  |      S )N#include <ATen/ops/__dispatch.h>r   )manual_kernel_registrationr   r   	root_namelowerjoin)r   r   outputr~   rz   s        r_   static_dispatch_ops_headerr   f  sx      < <F 21e<#MM%akk]!L4F4F4H3IV 99Vr`   c                 F    t        |       D cg c]  }d| d
 c}S c c}w )N#include <ATen/Functions.h>)r   )r   rz   s     r_   static_dispatch_extra_headersr   v  s2     1: ,|4  s   sigcpp_sigc                 Z   dt         t           dt         t           fd}t        | j                               }t        |j                               }|D ]3  }|j                  j
                  t        j                  k(  s+ ||      } n t        ||      }dj                  d |D              S )Ninput_bindingsro   c                 .   g }| D ]  }|j                   dk(  rkt        t        t        j                  |j
                  j                        |j                   |j                  |j                        }|j                  |       }|j                  |        |S )Nmemory_format)nctyper   defaultargument)
r   r   r   r    possibly_redundant_memory_formatr   typer   r   r   )r   output_bindingsbindingspl_mem_format_bindings       r_   add_spl_memory_format_bindingz5translate_args.<locals>.add_spl_memory_format_binding  s    )+% 	0G||.)0%&GG++ !#OO$--*&  &&'=>&&w/	0 r`   , c              3   4   K   | ]  }|j                     y wr   expr.0as     r_   	<genexpr>z!translate_args.<locals>.<genexpr>  s     +QVV+   )
r   r   r   	argumentsr   r   r   r   r   r   )r   r   r   src_bindingsgoal_bindingsargexprss          r_   translate_argsr    s    
d7m W $ (L**,-M  ::??nMMM8FL lM2E99+U+++r`   c           	      &   t        | |      }|j                         }t        | |      }|j                  |      }|r|j                  r|j                  nt
        }|j                  dd      }d| d|j                  j                          d| d| d	S )N::nativer   return ::();)	r!   r   r  
get_kernelcpp_namespacer-   r   rz   r   )	r   r   r   r   r   r  backend_metadata	kernel_nsnss	            r_   %generate_static_dispatch_backend_callr    s    
 9a@G<<>D3(E$//2  0 > > 	&&% 
 
		:r	*BRD=55;;=>bawbQQr`   c                 P   t        j                  |dd      }| j                  r'|j                  j	                         r|j
                  }n|j                  }|J |j                         }t        | |      }t        j                  dd      }|j                  r+d| dt        j                  j                          d| d| d	S |j                  r+d| dt        j                   j                          d| d| d	S |j"                  r+d| dt        j$                  j                          d| d| d	S |j&                  r+d| dt        j(                  j                          d| d| d	S d	| d
dj+                  |D cg c]  }t-        |j.                         c}       dS c c}w )NFmethodfallback_bindingr	  r   r
  r  r  r  z5TORCH_CHECK(false, "Static dispatch does not support z forr   z ");)r   from_native_functionsymintrq   
has_symintsymint_signature	signaturer   r  r-   r   r   r.   r   r   r   r   r   r   r   r   r   r   rz   )	r   r   rg   cpp_sigsr   r   r  r  r~   s	            r_   &generate_static_dispatch_fallback_callr    s   
 !55	%%H zzaff'')++$$<<>D3(E	!	)	)*b	9B//B{DDJJLMRPTvUVW\V]]_``	
	@	@B{QQWWYZZ\]a\bbcdicjjlmm	
	1	1B{DDJJLMRPTvUVW\V]]_``	
	?	?B{PPVVXYY[\`[aabchbiikllH O@uC""#@A B$J 	J@s   =F#c           	      h   t        |      dk(  s|j                  ry|D cg c]3  }|j                  |      s|j                  |j                  t
        v r|5 }}t        |      dk(  rt        | ||d         S t        |      dk(  rt        | ||      S | j                         D cg c]f  }t        |j                  t              s>t        |j                  t              r0|j                  j                  j                         r|j                  h }}dj!                  |      }|j"                  j                  j$                  }g }	g }
||
j'                  d       |dk7  r|
j'                  d| d       |	j'                  dd	j!                  |
       d
       |	j'                  d       g }|D ]A  }|j'                  d|j                   d       |j'                  dt        | ||       d
       C t        | ||      }d}d|j!                  |	       d|j!                  |       d| dS c c}w c c}w )a  
    For a given `NativeFunction`, find out the corresponding backend and dispatch to it. If more than one
    backends exsit, fallback to static dispatch by determining dispatch key from inputs.
    Arguments:
        sig: A CppSignature or DispatcherSignature for this native function we want to use.
        f: NativeFunction to generate static dispatch.
        backend_indices: All available backends.
    Return:
        C++ code to call backend-specific functions, e.g., "return at::cpu::add(self, other, scale);"
    r   r   rU   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   rz   r<   r  r  r  r   r   r;   r)   r   is_tensor_liker   r   rq   tensor_optionsr   )r   r   rg   bkeysr   native_tensor_argstensor_argstensor_optsstmtssubexprsdispatch_coder~   fallback	connectors                  r_   static_dispatchr0    s>    ?q A$@$@ !<<?!!-":: 	
D  4yA~4S!T!WEE	Ta5c1oNN 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aGHL	

 6c1oNHI^^E 			&' (J  [s   8H*%A+H/T)frozenc                   ^    e Zd ZU eed<    ee      Zee	e
f   ed<   ededee	   fd       Zy)RegisterSchemaselector)default_factory
known_tagsr   ro   c                    | j                   j                  |      sy ddj                  d t        |j                        D              z   dz   }|dk(  r"dt        t        |j                               dS d}|| j                  vr-t        | j                        }|| j                  |<   d	| d
| d}| dt        t        |j                               d| j                  |    dS )N{r   c              3   &   K   | ]	  }d |   yw)z	at::Tag::Nrt   )r   r   s     r_   r   z*RegisterSchema.__call__.<locals>.<genexpr>'  s     KS3%0Ks   }z{}zm.def(z, {});
r   z const std::vector<at::Tag> tags_z = ;
z, tags_z);
)
r4  is_native_function_selectedr   sortedr   r   r   rq   r6  r   )r[   r   r   
maybe_tagsidxs        r_   __call__zRegisterSchema.__call__#  s    }}88;TYYKF166NKKKcQ4<Js166{34J??
t&doo&C$'DOOD!;C5D6MJVJs166{$;#<GDOOTXDYCZZ^__r`   N)ra   rb   rc   rE   __annotations__r   r   r6  r
   r   r   r   r5   r   r@  rt   r`   r_   r3  r3    sG    !&t!<JS#X< `. `Xc] ` !`r`   r3  c                   t    e Zd ZU eej
                  ej                  f   ed<   ee	   ed<   e
dedefd       Zy)ComputeOperatorstargetstatic_dispatch_backend_indicesr   ro   c                 r   t        j                  |j                        }|j                  j                  j	                         }| j
                  t        j                  u rd| d|j                          d|j                  j                  j                   d|j                  j                  j                   dt        t        |j                               d|j                  dd	       d
|j                  dd	       dS | j
                  t        j                  u r|d| d|j                  j                  j                   d| d|j                  j                  j                   d| dt        t        |j                               d|j                   d| d| d| d| d| d}dD ]  }|r>dj                  dg|j                         D cg c]  }|j                   c}z         }d}n9dj                  |j                         D cg c]  }|j                   c}      }d}|}	| d| }
d| d|	 d | d!}|s0t!        | j"                        d"kD  rt%        ||| j"                  #      }|d$|j                   d%|j                  |
|	       d&| d'z  } |S t'        | j
                         y c c}w c c}w )(Nz
struct TORCH_API z {
  using schema = z;
  using ptr_schema = schema*;
  // See Note [static constexpr char* members for windows NVCC]
  STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA(name, "aten::z>")
  STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA(overload_name, "z:")
  STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA(schema_str, z)
  static callF)r   is_redispatching_fnz;
  static 
redispatchTz;
};z+
STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA(z, name, "aten::z-")
STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA(z, overload_name, "z, schema_str, z)

// 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   )rg   

// aten::r    {
    z
}
)r   from_schemarq   r   unambiguous_namerD  rM   DECLARATIONr   r   r   r   defn
DEFINITIONr   r  r   rE  r0  rF   )r[   r   r   r   defnsrH  r   dispatcher_exprs_strmethod_basedispatcher_callmethod_namefn_bodys               r_   r@  zComputeOperators.__call__<  s   !--aff5vv{{++-;;&,,,0 ((* 9 :;9I9I8J K<<=FFKK<U<U;V W88B3qvv;8O7P Q

((E(
:	; <

(($(
?	@ A
 
 [[F---++/&@P@P?Q R++/&0B166;;C\C\B] ^++/&z#aff+?V>W X

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

&& {0CD E FI  3> L%= .O 6Ws   J/J4
N)ra   rb   rc   r   rM   rO  rQ  rA  r   r*   r   r5   r   r@  rt   r`   r_   rC  rC  7  sM    F&&(9(99::%),%77 V&. V&S V& !V&r`   rC  c                   ,    e Zd Zededee   fd       Zy)ComputeFunctionr   ro   c                    t        j                  |d|j                        }|j                  j	                         }d}|j                         D ]3  }t        j                  |j                        }t        |j                         |j                               }dj                  |D cg c]  }|j                   c}      }	|j                  rd}
nd}
t        j                  |j                  v rL|d|j                   d|j!                          d	|j                  j"                  j%                          d
|	 d	z  }|s|d|
 d|j!                  d       d	|j                  j"                  j%                          d
|	 d	z  }6 |S c c}w )NFr  r   r   zc10::SymIntint64_trK  
inline  {
    return at::_ops::::call(z);
}zX
namespace symint {
  template <typename T, typename = std::enable_if_t<std::is_same<T, z>::value>>
  T)suppress_symint_suffixz	);
  }
}
)r   r  manual_cpp_bindingrq   r  
signaturesr   rM  r   r  r   r   r  r?   functionvariantsdeclr   rN  )r[   r   	sig_groupr  resultr   
target_sigr  r   	exprs_str	intlike_ts              r_   r@  zComputeFunction.__call__  s   %::ea.B.B
	 VV&&(
'')  	C,88@Jcmmoz/C/C/EFE		5"9a166"9:Izz)	%	1::- 

&& 
| ffkk2245WYK H   EENK P8848() *ffkk2245WYK H	 3 	B ; #:s   )F
Nra   rb   rc   r   r5   r   r   r@  rt   r`   r_   rY  rY    s&     (. (Xc] ( !(r`   rY  c                   z    e Zd ZU eej
                  ej                  f   ed<   ee	   ed<   e
dedee   fd       Zy)ComputeTensorMethodrD  rE  r   ro   c                    t         j                  |j                  vry |j                  j	                         rJ |j                  j
                  j                  J t        j                  |d|j                        }| j                  t        j                  u r/d}|j                         D ]  }||j                          dz  } |S | j                  t        j                  urt!        | j                         d}|j                         D ]  }t#        j$                  |j                        }t'        |j                         |j                         d      }dj)                  |D cg c]  }|j*                   c}      }|d|j                   d|j-                  d	
       d|j                  j.                  j1                          d| d	z  } |S c c}w )NTr  r   z const;
)r  r   rK  r\  zTensor::)prefixz const {
    return at::_ops::r^  );
}
)r?   r  rc  rq   	is_out_fnr  self_argr   r  r`  rD  rM   rO  ra  rd  rQ  rF   r   rM  r   r   r   rP  r   rN  )	r[   r   re  rf  r   rg  r  r   rh  s	            r_   r@  zComputeTensorMethod.__call__  s   >>+66##%%%vv((444%::dQ-A-A
	 ;;&,,,F ++- 3SXXZL	223M;;f///%'') 
	C,88@Jcmmoz/C/C/EdSE		5"9a166"9:I 

&& 
#$ %ffkk2245WYK H F
	  #:s   'G
N)ra   rb   rc   r   rM   rO  rQ  rA  r   r*   r   r5   r   r   r@  rt   r`   r_   rl  rl    sM    F&&(9(99::%),%77 ". "Xc] " !"r`   rl  c                   ,    e Zd Zededee   fd       Zy)ComputeRedispatchFunctionr   ro   c                    t        j                  |d|j                        }d}|j                         D ]  }t	        j
                  |j                        }t        |j                         |j                               }dj                  dg|D cg c]  }|j                   c}z         }|d|j                   d|j                  d	       d
|j                  j                  j                          d| d	z  } |S c c}w )NFr  r   r   rJ  rK  r\  T)rH  r]  z::redispatch(ro  )r   r  r`  ra  r   rM  rq   r   r  r   r   rd  r   rN  )	r[   r   re  rf  r   rg  r  r   rh  s	            r_   r@  z"ComputeRedispatchFunction.__call__  s     &::ea.B.B
	 '') 
	C,88@Jcmmoz/C/C/EFE		#3"47N17N"NOI 

&& T*+ ,ffkk2245]9+ N F
	  8Os   C>Nrj  rt   r`   r_   rs  rs    s&     . Xc]  !r`   rs  c                     d| j                   j                  j                   d| j                   j                  j                   dS )Nz{"aten::z", "z"},)rq   r   r   r   s    r_   compute_aten_oprw    s5    qvv{{''(QVV[[-F-F,GtLLr`   gc                 h   | j                   sy t        | j                        5  t        j                  |       }t        j
                  |       }dj                  d |D              }| j                  j                  }|d}d}| j                   r| j                  j                  nd }|rMg |j                  j                         |j                  }|D 	cg c]  }|D ]  }	|	  }
}}	|
D 	cg c]  }	|	j                  j                          }}	dj                  d |D              }d| d}|
D 	cg c]#  }	t        j                  |	|	j                        % }}	d	j                  d
 |D              }g }t        |
      D ]-  \  }}	dj                  |d | dgz   ||dz   d  z         }d| d}||   j                  d      }| d|	j                   d| d}d|
|   j                   d}d||    d| d}g }|j!                  | d       t        |
      D ]V  \  }}	||k(  r |j!                  d|	j                   d       +|j!                  d|	j                   d|	j                   d       X |j!                  d       dj                  |      }|j!                  d| d | d!| d"       0 dj                  |      }dj                  dgt#        |      z        }d#| d$}d%}d&| d'| d| d(}nd)}d)}d*| d+| d,| d-| d-| d.| d/cd d d        S c c}	}w c c}	w c c}	w # 1 sw Y   y xY w)0Nr   c              3   <   K   | ]  }|j                           y wr   )rd  r   s     r_   r   z4compute_meta_function_declaration.<locals>.<genexpr>!  s     4!QVVX4s   zat::impl::MetaBasevoidc              3   (   K   | ]
  }d | d  yw)zbool z = falseNrt   )r   params     r_   r   z4compute_meta_function_declaration.<locals>.<genexpr>3  s      8,1%wh'8s   z
template <>)bindsr;  c              3   ^   K   | ]%  }|j                  d        d|j                    ' yw)T	strip_ref N)cpp_typer   )r   elems     r_   r   z4compute_meta_function_declaration.<locals>.<genexpr>>  s3      3 ==4=01499+>3s   +-truerU   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;
            };r   zstruct TORCH_API structured_z
 : public rL  r#  z meta(z);
};
)r   r   outmetar   meta_argumentsr   structured_inheritsprecomputedr   valuesr   upperargument_type	enumerater  r   r   )rx  r   argsargs_strparent_classmeta_returnr  precomputed_valuesreplace_listr  precomputed_elementsprecomputed_template_parametersprecomputed_template_params_strprecompute_template_decl#precomputed_elements_with_cpp_typesprecomputed_elements_declsetter_methodsireturn_ty_templates	return_tyelem_cpp_tyr  
assert_msgassert_stmtconstruction_stmtsjconstruction_blocksetter_methods_declmeta_return_template_paramsmeta_return_typedefprecomputed_decls                                  r_   !compute_meta_function_declarationr    s1   <<	 	' vyy|((+994t44uu00/L+,<<aee''T "R;#6#6#=#=#?!Q!Q);$%$@D$$  $ /C/&*		!/+ / /3ii 85T8 /+ *44S3TTU'V$
 13 ((TYY?3/ 3
 ).

 3?3 )%  N$%9: 24 '+ii3BQ7h5a!eg>?'#
 ..A-B!D	A!DMM" N   )ktyyk;-wO	  !!5a!8!=!= >mL
 ./Nq/Q.RR]^h]iikl &(""))YKu*=>()=> GAtAv*11D92MN*11"499+YtyykC	 #))-8%)YY/A%B"%%K  $ &+, -W2f #'))N"; +/))3>??+'
 %LLgKhhj"k*K$)* +() *./ 0	  #%!!F*\N ;  Mz "	av v$/37v vs7   B3L(L&L(-!L$L(2(L#F4L(L((L1r4  c                     t        | j                  j                  j                        }|j                  d      s|j	                  d      ry| j                  j
                  j                  y|j                  |       S )N_likenew_F)r   rq   r   endswith
startswithr  r%  r<  )r   r4  r   s      r_   needs_backend_selectr    s^    qvv{{ D}}W!8vv&&.//22r`   c                   t    e Zd ZU eej
                  ej                  f   ed<   eed<   e	de
dee   fd       Zy)ComputeBackendSelectrD  r4  r   ro   c                 J   t        || j                        sy t        j                  |j                        }t        |j                  d      }|j                         D cg c]B  }t        |j                  t              r&|j                  j                  j                         r|D }}t        j                  |j                        }|}|j                         }d}	| j                  t         j"                  u r|rH|j                  j                  j%                         sJ dj'                  d |D              }
d|	 d|
 d}n,|j                  j                  j%                         rJ d	|	 d
}d|j                   d|j)                  |       d| d|j                  j                  j+                          ddj'                  d |D               dS | j                  t         j,                  u rd|j                  j                   d| dS t/        | j                         y c c}w )NTr  z.c10::computeDispatchKey(dtype, layout, device)r   c              3   4   K   | ]  }|j                     y wr   )r   r   s     r_   r   z0ComputeBackendSelect.__call__.<locals>.<genexpr>  s     'K1'Kr  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   4   K   | ]  }|j                     y wr   r   r   s     r_   r   z0ComputeBackendSelect.__call__.<locals>.<genexpr>  s     7aff7r  ro  zm.impl("aten::z", TORCH_FN(z));)r  r4  nativer   rq   r   r  r   r   r)   r   r$  r   rM  r  rD  rM   rQ  has_tensor_argr   rP  rN  REGISTRATIONrF   )r[   r   r   
native_sigr   r(  dispatcher_sigr   dispatcher_exprsrz   r)  
compute_dks               r_   r@  zComputeBackendSelect.__call__  s   #At}}5{{166"$QVVD9
  ))+
!**h/AJJOO4R4R4T 
 
 -88@ )//1G;;&+++
 "vv''66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    AH N)ra   rb   rc   r   rM   rQ  r  rA  rE   r   r5   r   r   r@  rt   r`   r_   r  r    sJ    F%%v':'::;;  2&. 2&Xc] 2& !2&r`   r  datac                     d t         _        dt        dt        dt        fd}t        j                  t        |       t        j                  | dt         d      S )	Nc                      y)NTrt   )r[   r  s     r_   rw   zformat_yaml.<locals>.<lambda>  s    r`   dumperr  ro   c                 @    | j                  |j                               S r   )represent_dictr   )r  r  s     r_   dict_representerz%format_yaml.<locals>.dict_representer  s    $$TZZ\22r`   Fg    eA)default_flow_styleDumperwidth)rN   ignore_aliasesr   add_representerr   r   dump)r  r  s     r_   format_yamlr    sN     7J3 3C 3C 3 {,<= 99TeJcRRr`   c                     | dk(  ry| dk(  ry	 t        |       S # t        $ r" 	 t        |       cY S # t        $ r | cY cY S w xY ww xY w)Nr  TfalseF)r   
ValueErrorfloatr   s    r_   pythonify_defaultr    sU    F{	
g1v 	8O 	H	s'   
 	A
0AA AA  Atc                     t        | t              rt        | j                        S t	        |       dk(  ryt        j                  | ddd      j                         S )NTensorz
at::TensorF__placeholder__)mutabler  r  )r   r9   dynamic_typer  r   r   argumenttype_typer  )r  s    r_   r  r    sP    !\"AFF## 1v  	5 1%hjr`   rc  c                     dg}t         j                  | v r|j                  d       t         j                  | v r|j                  d       |S )Nr>   r  	namespace)r?   r  r   rb  )rc  	method_ofs     r_   compute_method_of_yamlr     sG     I~~!"8#%r`   c                    i }t        j                  |       }g }t        t        | j                  j
                  |            D ]  \  }\  }}t        |j                        |t        j                  |d      j                         d}|j                  rc|j                  |d<   | j                  j                         r:|j                  || j                  j                  j                  |   j                  <   |j                  |        ||fS )NFr  )r  r   r   
field_name)r   return_namesr  ziprq   returnsr  r   return_typer  r   rp  r  r  r   )r   name_to_field_namenamesr  r  rr   rets           r_   compute_returns_yamlr  +  s    T *, QEG!#affnne"<= 9At(0OOAe4==?	
 66 !Cvv!CD66"166#3#3#7#7#:#?#?@s  &&&r`   cpp_aschema_orderkwarg_only_setout_arg_setr  c                \   t        | j                  t              r:d dd| j                  | j                  dd}| j
                  | j
                  |d<   |S t        | j                  t              r
t               t        | j                  t              rt        | j                  ||||      S y )Nzat::TensorOptionsFT)
annotationr  is_nullabler   r   
kwarg_onlyr   r  r  r  r  )
r   r   r=   r   r   r   r;   AssertionErrorr)   compute_argument_yaml)r  r  r  r  r  r  s         r_   compute_cpp_argument_yamlr  n  s     %.."89/ JJJJ"
 ==$"]]C	N
	ENNL	1	ENNH	-$NN%)#1
 	
 
.r`   r   c          	         | j                   rt        | j                         nd t        | j                        | j                  j	                         | j
                  t        j                  | dd      j                         d}| j                  8t        t        j                  | j                  | j                  d            |d<   | j
                  |v rd|d<   | j
                  |v r*d|d	<   d|d
<   | j
                  |v r|| j
                     |d<   | j                  j                         }|3|j                  't        |j                        dk7  r|j                  |d<   |S )Nr  F)r  r  )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'' 2166 :C 	
A}+AFFv0EffFJr`   c                 j   t        |       \  }}| j                  j                  j                  D ch c]  }|j                   }}| j                  j                  j
                  D ch c]  }|j                   }}t        j                  | dd      }|j                  j                         }|D cg c]  }t        |d|||       }	}t        | j                  j                               }
|
D cg c]  }t        |d|||       }}|
D cg c]6  }t        j                  |dt               ddd      D ]  }|j                    8 }}}t        j"                  | j                  j$                  d      j'                         }| ddj)                  |       d	}t+        d
 |D              xr t,        j.                  | j0                  v}t3        dt        j                  | j                        fdt5        | j                  j                  j                        fdt5        | j                  j                  j6                        fd| j8                  fd| j:                  | j:                  ndfdd| j                   fd|	fd|fd|fdt=        | j0                        fdd| j>                  dn| j>                  fd|fd| j                  j                  j                  j@                  fd|fd| jB                  fd| jD                  fddd | jF                  fg      S c c}w c c}w c c}w c c}w c c}}w )!NFr  r  T)r  cpp_no_default_argsfaithfulr  has_tensor_optionsr  z (r   r   c              3   P   K   | ]  }t        |j                  t                 y wr   )r   r   r=   r   s     r_   r   z+compute_declaration_yaml.<locals>.<genexpr>  s     MqJqzz#9:Ms   $&r   operator_namer   r   category_overrider   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  rq   r  flat_kwarg_onlyr   r  r   r  r  r  r   r  r  r   r   r   r   returns_typer  r  r   anyr?   r  rc  r   r   r   r   r  r  r  r   is_abstractr}   r   )r   r  r  r   r  r  re  cpp_argsr  r  schema_order_jit_argumentsr  r  cpp_schema_order_typescpp_returnsr  r  s                    r_   compute_declaration_yamlr    s2   "6q"9G '(ff&6&6&F&FGaffGNG#$66#3#3#7#78a1668K8!66	%%I "",,.H 	  	")#1	
	I 	 "&aff&C&C&E!F ,	  	)#1	
	 	 ,  #$
	  	
  ""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 3L%3L*;L/c                     | j                   xs | j                  d uxrX | j                  j                         t        j
                  k(  xs+ | j                  j                         t        j                  k(  S r   )r   r   rq   kindr:   
functionalr   rv  s    r_   "has_autogenerated_composite_kernelr    sU    LL=A11= 	...U!&&++-:CUCU2Ur`   c           
      (   t        j                  | j                        }t        j                  | j                  j                        j                         }t        j                  | j                        }dj                  d |D              }d| j                   t        |j                         D ch c]  \  }}|j                  |       s| c}}t        j                  hk7  xrV |j                         D ch c]  \  }}|j                  |       s| c}}t        j                  t        j                  hk7        t        | j                  xs t        |             d}| d| d| dt!        j"                  |       dS c c}}w c c}}w )	Nr   c              3   X   K   | ]"  }|j                         j                          $ y wr   )
no_defaultdecl_registration_declarationsr   s     r_   r   z4compute_registration_declarations.<locals>.<genexpr>  s     WQFFHWs   (*r  )schemadispatchr   r  r  z); // r   )
dispatcherr   rq   r  r  "cpp_type_registration_declarationsr  r   r   r   r   r.   r   r   has_composite_kernelr  jsondumps)	r   rg   r   r  r  r  r   r   comment_datas	            r_   !compute_registration_declarationsr&    sY    ??166"D**	((*  'DyyWRVWWH166(#*002F41aall1oQF5567 .446Jtq!!,,q/J55AA
 q--V1STU1VW$L ~QtfAhZvdjj6N5O P   GJs   4FF=FF"provided_op_registration_allowlistop_selection_yaml_pathc                     | 	|J d       d }| t        |       }|t        j                  |dd      }|S |t        j                  |      }|S t        j                         }|S )NzhBoth provided_op_registration_allowlist and op_selection_yaml_path can NOT be provided at the same time.TF)r   rE   &from_legacy_op_registration_allow_listfrom_yaml_pathget_nop_selector)r'  r(  op_registration_allowlistr4  s       r_   get_custom_build_selectorr.  5  s    
 	+6".		  59)5$'(J$K! ,#JJ%
 O 
 	+#223IJ O $446Or`   c                    dt         t        t        t        f   t        f   dt
        t        t        t        f      fd}t        t              }| D ]x  }|j                  j                         }|j                  }|t        j                  k(  r,|j                  j                         }|||   vsJ |||   |<   h|||   vsJ |||   |<   z t        t        ||j!                                     S )Ndro   c                 d   g }t         j                  | v r|| j                  t         j                        }| j                  t         j                  d       }| j                  t        j
                  d       }|j                  t        |||             |j                  | j                                |S )N)view	view_copyview_inplace)
r@   aliasingr   aliasing_inplacer:   r  r   r7   extendr  )r0  ru   r2  r4  r3  s        r_   maybe_create_view_groupzEget_grouped_by_view_native_functions.<locals>.maybe_create_view_groupW  s     HJ""a'55001D55!@!@$GLj33T:ILL('!- 	QXXZ r`   )r
   r   r@   r:   r5   r   r7   r   r   rq   view_signatureview_schema_kindnon_aliasingr  r   rG   r  )rf   r8  grouped_by_viewsr   r  	view_kindr  s          r_   $get_grouped_by_view_native_functionsr>  T  s    nj01>AB	eN$<<=	>. 	D   4&&($%$6$6	
 33366;;=D/7777-.V$T*$4V$<<<<23V$Y/4 	13C3J3J3LMNNr`   c           	          dt         t        t        f   dt        t        t        t
        f      fd}t        |       }t        t        |t        |j                                           S )Nr0  ro   c                     t        j                  |       }|;t        d | j                         D              rJ t	        | j                               S |gS )Nc              3   8   K   | ]  }d |j                   v   yw)	generatedN)r   r   r   s     r_   r   zJget_grouped_native_functions.<locals>.flatten_pre_group.<locals>.<genexpr>  s     EQ;!&&0Es   )r6   	from_dictr  r  r   )r0  r  s     r_   flatten_pre_groupz7get_grouped_native_functions.<locals>.flatten_pre_group  sM     !**1-9 E!((*EEEE
##3Jr`   )
r
   r:   r5   r   r   r6   rD   r   rG   r  )rf   rE  pre_grouped_native_functionss      r_   get_grouped_native_functionsrG    sf    

N*+
	%(<<=	>
 $>>N#O #T*F*M*M*O%PQ r`   )native_function_decl_gengrouped_native_functionsrH  c                    t        t              }| D ]  }t               }t               }|j                         D ]  \  }}|j	                  |      }	|	r/|	j
                  }
|j                  |       |j                  |
       nt        }
t        |      dk  sJ d| d|        ||
   j                   |||               |S )NrU   z6Codegen only supports one namespace per operator, got z from )
r   r   r   r   r  r  r   r-   r   r7  )rI  rg   rH  ns_grouped_kernelsr   native_function_namespacesdispatch_keysrz   backend_idxr  r  s              r_   get_ns_grouped_kernelsrO    s     0;4/@% %(U")8)>)>)@ 	%L+*55a8,::	!!,/*..y94	./14zGHbGccijwixyz4y)00(K8	" r`   rK  c           
      0   g }d}| j                         D ]~  \  }}t        |dd      }t        t        j                  |            }|j                  d|j                   d|j                  |       d|j                   dj                  |              |S )Nr   r      namespace_strentity_name	max_level	
        )
r   rL   r   r   fromkeysr7  prologuer   epiloguesplit)rK  declarationsnewliner  kernels	ns_helperordered_kernelss          r_   8get_native_function_declarations_from_ns_grouped_kernelsr`    s     !LG0668 
	7##
	 {33G<=
  o   
  	 E	

$ r`   c                 6    t        | ||      }t        |      S )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.
    rI  rg   rH  )rK  )rO  r`  )rI  rg   rH  rK  s       r_    get_native_function_declarationsrc    s+      0!9'!9
 D- r`   rN  c                 >   |j                  |       }|rwd|j                  v siJ dt        | t              r| j                  j
                  n| j                  j                  j
                   d|j                   d|j                   d       |r|j                  S t        S )Nr	  zThe kernel for function z with dispatch key z has a namespace z% and it's not ending with '::native'.)	r  r  r   r5   rq   r   r  rz   r-   )r   rN  r  s      r_   get_kernel_namespacere    s     #--a0:1A1O1O#O 
"*Q2O166;;UVUaUaUfUfUkUk"l m(556
,::;;`	bO +;&&@Xr`   fmrz   rocmr  skip_dispatcher_op_registrationgen_dispatch_helpersc        	         (   g }	t        t              t        t              t        t              }
d}t        j                  t
        j                  |||d       }t        j                  t
        j                  |||d       }t        j                  t
        j                  |||d       }|D ]  }t        |      j                  dd         j                   ||                j                   ||             t        |t              r|j                  n|j                  j                  }||
   vrt        t              |
<   |
   |   j                   ||              D ]  t!                 dk(  rt#              d|
   D ]/  }|
   |   sd| d	 d
|j%                  |
   |          dz  1 |	j                  | j'                  df	d      j)                  |              |	S )Nr   rg  r  class_method_namerh  r   rN  r	  r   r   )rS  z
TORCH_LIBRARY_IMPL(r   z, m) {
    
};zRegisterDispatchDefinitions.inic            	         	 j                   j                  rt        j                        ng     rdndj	                            dS )Nr   )ns_prologuens_epiloguedispatch_helpersdispatch_anonymous_definitions"static_init_dispatch_registrationsdeferred_dispatch_registrationsdispatch_namespacedispatch_namespaced_definitions)rX  rY  destgen_registration_helpersr   )	anonymous_definitionsrN  rz   ri  kernel_namespacens_definitionsr^  registration_bodyrh  s	   r_   rw   z1get_native_function_definitions.<locals>.<lambda>I  sb    #,#5#5#,#5#5+ )-(E(Ek(R6K(7 7 ;=*79*6*<*<*>7EFV7W r`   )r   r   r   rx  RegisterDispatchKeyrM   NAMESPACED_DEFINITIONANONYMOUS_DEFINITIONr  re  r   r7  r   r5   r  r  r   rL   r   substitute_with_templaterZ  )rf  rI  rz   rN  r4  rg  r  rh  ri  definitionsregistrationsr\  ns_genanonymous_genreg_genr   r  rz  r{  r|  r^  r}  s     ``   ``        @@@@@r_   get_native_function_definitionsr    sb     K+6t+<N2=d2C5@5FMG%%$$(GF ,,##(GM &&(GG & 
/!MUU
 	'(//1I	
 	./66!	
 &a8AKKall>T>T 	 M*:;;.9$.?M*+&'	299AJ	
!
( +  
~./0A5#2BC	&'78 	I !129= &;b /\\- 01)<=> ?" 	 	''1 $ eGn'	
 
D r`   c           
      X   g }t        t              }d}t        j                  |t        j
                  ||d d|      }	| D ]G  }
t        |
|      j                  d|j                               }||   j                   |	|
             I |j                         D ]  \  }}t        |      dk(  rt        |dd	      }t        t        j                  |            }|j                  d|j                   d|j!                  |       d|j"                   d
j%                  |              |S )Nr   F)rg  rl  rh  r  rm  r  r   r      rR  rV  )r   r   rx  r~  rM   NAMESPACED_DECLARATIONre  r   r   r7  r   r   rL   r   rW  rX  r   rY  rZ  )rI  rz   rN  r4  rg  r  r[  rK  r\  rq   r   r  r]  r^  r_  s                  r_   get_namespaced_declarationr  a  sQ    !L/:4/@G##%%(-D & 
(1+FNNl((*
	 	9%,,G	

 1668 
	7w<1##q
	 {33G<=
  o   
  	 E	

  r`   schema_selectorc           
      V   t        t              }| D ]   }||j                     j                  |       " d}g }d }|j	                         D ]Y  \  }}t        t        t        |      |            }	|dk(  r|	},|}d}
|t        v rdnd}|d| d| d|
j                  |	       d	z  }[ ||fS )
Nr   atenr   TORCH_LIBRARY_FRAGMENTTORCH_LIBRARYr   r  z	, m) {
  rn  )	r   r   r  r   r   rK   r3  r/   r   )rf   r  ns_native_functionsnative_functionschema_registrationsaten_schema_registrationscustom_namespacer  ru   schema_registrations_bodytabtorch_library_macros               r_   (get_native_function_schema_registrationsr    s   
 <Gt;L+ OO556==oNO "/557 	5$(^O4e<%
!
 (A%(C
  33 )$  
 ! ) Q'( )88%&' (%  %, &';<<r`   structured_native_functionsstatic_dispatch_idxcpu_fmcuda_fmfunctions_keysrM  c           
      V   
 |j                  dfd        D cg c]!  }t        j                  |j                  v s |# c} D cg c]	  }|vs| c}|j                  dfd       |j                  dfd       |j                  d fd       t	        	      |j                  d
fd       |	D ]S  t              r|n|}|v r=d d|j                   ddfd       |j                   dd
fd       ~U y c c}w c c}w )NzNativeMetaFunctions.hc                  <    g t        t        t                     dS )N)NativeMetaFunctions_includes NativeMetaFunctions_declarationsr   rK   r  )r  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s!    ,.04:<WX1
 r`   MethodOperators.hc            	      f    g t        t        t        t        j                                     dS )NrE  MethodOperators_includesMethodOperators_declarationsr   rK   rC  rM   rO  )method_native_functionsr  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s6    (*,0$**8K ,-
 r`   zOperators.hc            	      h    dgt        t        t        t        j                                     dS )Nz!#include <ATen/MethodOperators.h>r  )Operators_includesOperators_declarationsr  )non_method_native_functionsr  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s9    #F"G&*$**8K 0'
 r`   Functions.hc                  Z    t              dgt        t        t                            dS )Nz#include <ATen/Operators.h>)r   Functions_includesFunctions_declarations)r   r   rK   rY  rf   r  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s7    -J#. $A"A&*#%$'
 r`   )rI  rg   zNativeFunctions.hc                      dg dS )Nz%#include <ATen/NativeMetaFunctions.h>)NativeFunctions_includesNativeFunctions_declarationsrt   )r[  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>	  s    )P(Q,8
 r`   r   Functions_inl.h>DispatchKeyFunctions.hc                       t               dS N)rz   inline_headersr   rz   inl_headerss   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s    $'$5&1 r`   Functions_inl.hDispatchKeyFunctions_inl.hc            
      P    g j                         t            d      dS )NT)rI  rz   rN  r4  rg  r  )!DispatchKeyFunctions_inl_includesrv   dispatch_namespaced_declarations)r   r  )rg   rz   rI  rg  r4  s   r_   rw   z(gen_aggregated_headers.<locals>.<lambda>  s8    9;*6*<*<*>8R1I%1$3L$A!)!#9 r`   )writer?   r  rc  rc  r1   write_with_template)rf   rI  r  r  r4  rg   r  r  r  rM  rg  fnrf  r[  rz   r  r  r  s   ``````    `  @@@@@r_   gen_aggregated_headersr    sS     LL	
 &2;;)F &#3J)J# LL	
 LL	
 LL	
 4!9'L LL	
 & ,\:W>)+L>9IJK"".,( "".0," =#s   !D!D!	D&D&ops_fmc                 f   t        t              | D ]   }|j                     j                  |       " t        t              }|D ]"  }|j                  |   j                  |       $ j	                         D ]  \  |j                   ddfd       |j                   ddfd       |j                  g       }|D cg c]   }t        |t              r|j                  r|" c}t              dkD  r|j                   dd	fd
       t        ||t        j                        |j                   ddfd        dD ]  \  |j                   dfd       ! |	D ]  |vr	j                         g j	                         D ]  \  |j                  g       }t        t!        t        j"                  |   t$        j&                  ||
dd d      |            t              dk(  rgj                         |j                   d ddfd        t)              r|n|}d d|j                   ddfd       |j                   ddfd       ~ |j                  d fd!       y c c}w )"Nz_ops.hz
Operator.hc            	      d    dt        t        t        t        j                                     iS )Nr[  r  r  )	functionsr  s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>O  s5    ("..<O "!
 r`   .hz
Function.hc                  z    t        t        fd             d dt        t        t                            dS )Nc                     t        |       S )N)r   )r   r  r  s    r_   rw   z<gen_per_operator_headers.<locals>.<lambda>.<locals>.<lambda>b  s    #=.A$ r`   r   _ops.h>)static_dispatch_ops_headersoperator_includesfunction_definitions)r   rK   rY  )r  r   r  s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>_  sK    /3 "	0 (;4&%H(,')!) r`   r   z_meta.hzNativeMetaFunction.hc                  :    dt        t        t                     iS )Nmeta_function_declarationsr  )structured_functionss   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>~  s"    0$ =?S3 r`   rb  z	_native.hzNativeFunction.hc                  $    r	d d dS g  dS )Nr   z_meta.h>)extra_includesnative_function_declarationsrt   )r[  is_structuredr   s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  s)    <I)$x80<	 OQ0<	 r`   ))	Functionsr   )	Operators_ops)NativeMetaFunctions_meta)NativeFunctions_nativec                  |     dt        j                               D  cg c]
  } d|   d c}  dg iS c c} w )N	_includesr   .h>_declarations)r=  r'  )r   categoryfunctions_by_root_namesuffixs    r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  sY    *I& &'='B'B'D E) *$xs;) *M*B )s   9TFrk  r   z_dispatch.hzDispatchKeyFunction.hc                       dS )N)rv  r  rt   )r[  rv  s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  s    *<8D r`   r   r  r  r  c                       t               dS r  r  r  s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  s     #L 1"- r`   r  r  c            	      V    t              D  cg c]  } d|  d d c} g dS c c} w )Nr   r   r   )rv  r  r  )r=  )r   dispatch_namesrv  s    r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  sE    &8 !'~ 66 *$q1C0DLQ6 57 6s   &r  c                  J    t        d  j                         D              g dS )Nc              3   R   K   | ]  \  }}t        d  |D              rd| d ! yw)c              3   T   K   | ]   }t         j                  |j                  v  " y wr   )r?   r  rc  )r   r  s     r_   r   zGgen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>.<genexpr>  s     Iw~~4Is   &(r   r  N)r  )r   r   r  s      r_   r   z=gen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>  s3      /#D)IyII &dV73/s   %'r  )r=  r   )r  s   r_   rw   z*gen_per_operator_headers.<locals>.<lambda>  s-    (. /'='C'C'E/ )
 -/
 r`   )r   r   r   r   r   r  r   r   r6   r   r   rc  rx  #compute_native_function_declarationr  r   rG   r~  rM   r  r1   )rf   rI  r  r4  rg   r  r  r  r  rM  rg  r  grouped_functions_by_root_namegroupgrouped_functionsrf  r  r[  rz   r  rv  r  r  r  r  r   r  r  s     `             @@@@@@@@@@@@r_   gen_per_operator_headersr  0  s+     ?J$>O 8r||,33B78
 	D # * ;&t,33E:; 2779 I
i""fFO
	
  	""fBK	
, ;>>tRH ( 
"23  

 01A5&&& &
 8%6+%)%M%M

 	""fI		
AI
V 
& 	jO		

" & <~-)//15;;= 	OD) > B B4 L,,'555 !#*.8= &L < A%!!$'&&&,-[9'+	< -\:W'~5EF
nK($	
 	nO,(	
 y<| LL	

e 
s   %J.core_fmper_operator_headersc                     |rt         ||||	|
|||       nt         |||||	|||       |j                  d fd       |j                  d fd       |j                  d fd       |j                  d	 fd
       dt        t        t        f   f fd}|j                  d|       dt        t        t        f   ffd}|j                  d|       y )N)rf   rI  r  r4  rg   r  r  r  rM  r  rg  )rf   rI  r  r  r4  rg   r  r  rM  r  rg  zTensorBody.hc            	          t        t        t        t        j                                     t        t        t        t        j
                                     dS )N)rD  rE  )tensor_method_declarationstensor_method_definitions)r   rK   rl  rM   rO  rQ  r  s   r_   rw   zgen_headers.<locals>.<lambda>#  s^    *.'%118K %+ *.'%008K %*
 r`   zRedispatchFunctions.hc                  B    dt        t        t                            iS )Nfunction_redispatch_definitions)r   rK   rs  rf   s   r_   rw   zgen_headers.<locals>.<lambda>;  s#    -t246FG0
 r`   zRegistrationDeclarations.hc                  F    dD  cg c]  } t        |        c} iS c c} w )Nregistration_declarations)r&  )r   rg   rf   s    r_   rw   zgen_headers.<locals>.<lambda>D  s/    ')* 2!_E*
 *s   zVmapGeneratedPlumbing.hc                      t               S r   r'   r  s   r_   rw   zgen_headers.<locals>.<lambda>M  s    +@AQ+R r`   ro   c            	      d   t               } t               }D ]  }|j                  t        |j                  j                  j                               |j                  |j                  j                  j                  j
                         |j                  j                         D ]  }| j                  |j                           |h dz  }dj                  t        |      D cg c]  }d| d
 c}      dj                  t        |       D cg c]  }d| d
 c}      dS c c}w c c}w )N>   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   rq   r   r   r  r   r=  )attrsr  rq   r  r   rf   s        r_   gen_aten_interned_stringsz.gen_headers.<locals>.gen_aten_interned_stringsP  s   $ 	$DIIc$))..--./ IIdiinn))../yy779 $		#((#$	$ 	 
 	
 $LL06u>8D6#> $LL06u>8D6#>	
 	
> ?s   'D(D-
zaten_interned_strings.hc                  <    ddj                  t                     iS )Nenum_of_valid_tagsz,
)r   r=  )rk   s   r_   gen_tags_enumz"gen_headers.<locals>.gen_tags_enumw  s    $uzz&2D'EGGr`   z
enum_tag.h)r  r  r  r
   r   )rf   rk   rI  r  r  r4  rg   r  r  r  r  rM  r  rg  r  r  r  s   ``  ` `          r_   gen_headersr    s    $  -%= 3+')	
 	-%=(C 3+')	
 MM	
0 LL	
 LL$	
 LL!#R#
tCH~ #
J MM+-FGH4S> H MM,.r`   view_groupsaoti_fm
cpu_vec_fmforce_schema_registrationc                 
    !"#$%&'()*+, d%rd%|D ]  #t        #      r|n|	}rdt        t           f #$fd+ndt        t           f#fd+#    t        t              }D ]H  }t        |t              r|j                  n|j                  j                  }||   j                  |       J t        #      j                         $#t        j                  k7  }t        |# d|	      "|j                  d# d	d
 "#%+fd       D ]  ''j                  j                   rt#        #      s%'j                  j$                  j&                  j&                  *#t        j(                  u r>||	u sJ |j                  d* d	d#'fd       |
j                  d* d	d'*fd       #t        j*                  u r%d!rd!|j                  d* dd!#'*fd       t-        d# d       #t        j(                  t        j*                  fv rdt        dt.        t           f#fd(dt        f(fd)t        #      r%nd&|j1                  d#j                          d# fd        |j1                  d#j                          d	#&) fd!       ~ dt2        t        t        t           f   f fd"}|	j1                  d#|       }|rt5        j6                         }t9         |$      \  ,|	j1                  d%,fd&       d't:        t        t<        t>        f   dt        fd(}|	jA                  d) |fd*d+tC              id,h d-.       |	j1                  d/tD               |j1                  d0tD               |j1                  d1 fd2       d3t:        t        t<        t>        f   dt2        t        t        t           f   ffd4}t	              t	              z   }tG        d5       D ci c]  }|j$                  j&                  | }}tG        d6       D ci c]  }|j$                  j&                  | }} D ]E  }|j$                  j&                  |vs|j$                  j&                  |vs5|j                  |       G |	jA                  d7|||d8h d9:       |	j1                  d;fd<       |	j1                  d=fd>       y c c}w c c}w )?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>ro   c                  *   g } D ]  }d}j                  |      rd}net        |t              r%t        fd|j	                         D              rd}n0|j
                  r$t        j                  t        j                  fv rd}|s| j                  d|j                   d       t        j                  k(  r| j                  d|j                   d       v s| j                  d|j                   d d        t        t        |             S )	NFTc              3   @   K   | ]  }j                  |        y wr   )r   )r   r  r   s     r_   r   z=gen_source_files.<locals>.operator_headers.<locals>.<genexpr>  s#      E9;004Es   r   
_native.h>r  r   r   )r   r   r6   r  r  r   r.   Metar   r   r   r=  r   )headersrx  is_registeredr   rz   rv  r  rI  s      r_   operator_headersz*gen_source_files.<locals>.operator_headers  s   1 "A$)M$//2(, $A';< E?@{{}E B )- ,#((#JJ; + )-( NN%8Z#PQ$&MMN  )<Q[[M'MN#~51!++a@R?SS_`A"H c'l++r`   c                      dg} t         j                  k(  r| j                  d       v r| j                  dd       | S )Nz!#include <ATen/NativeFunctions.h>z#include <ATen/Functions.h>r   r   )r.   r   r   )r  rz   r  s    r_   r!  z*gen_source_files.<locals>.operator_headers  sI    >?;#U#UUNN#@A>1NN_\4DL#QRr`   T)	rf  rI  rz   rN  r4  rg  r  rh  ri  Registerz.cppzRegisterDispatchKey.cppc                  d    t              rnddt        j                                 ddS )Nr   )extra_cuda_headersexternal_backend_headersdispatch_headersops_headersrr  dispatch_definitions)r1   rx  gen_registration_headers)r   r)  rz   r%  r!  r  rg  s   r_   rw   z"gen_source_files.<locals>.<lambda>  sA    '5 '9,.$($A$A!#7%  01$&(< r`   	UfuncCPU_zUfuncCPU.cppc                  v    t              t        j                            t        j                        dS )N)meta_declarationnative_declarationnative_definitions)r  rx  r  compute_ufunc_cpu)rg   rz   rx  s   r_   rw   z"gen_source_files.<locals>.<lambda>	  s:    ,Ma,P.2.V.V|</ /3.D.DQ.G r`   UfuncCPUKernel_zUfuncCPUKernel.cppc                  4    t        j                         dS )N)r   r/  )rx  compute_ufunc_cpu_kernel)rx  r   s   r_   rw   z"gen_source_files.<locals>.<lambda>	  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                  z    t              t        j                            t        j                        dS )N)r   cuda_headersr-  r.  r/  )r  rx  r  compute_ufunc_cuda)rg   r6  rz   rx  r   s   r_   rw   z"gen_source_files.<locals>.<lambda>#	  s@     $(4,Ma,P.2.V.V|</ /3.E.Ea.H r`   zunrecognized z
 for ufuncr   c                 |    t        |       }|d S d| j                   d|j                  j                          dS )Nr   r   r   )r"   r   rz   r   )r   r   rg   rz   s     r_   
get_headerz$gen_source_files.<locals>.get_header2	  sV     !;|_!
 %,  /q{{m1]=W=W=]=]=_<``lmr`   c                     g } D ]`  }t        |t              r2|j                         D ]  } |      }|| j                  |         E |      }|P| j                  |       b dj	                  t        t        |                   S )Nr   )r   r6   r  r   r   r=  r   )r  rx  r   headerr9  rI  s       r_   headers_for_aotiz*gen_source_files.<locals>.headers_for_aoti>	  s    1 
3A!!%9:!" 7A%/]F%1 'v 6	7 ",A!-#NN62
3 yyG!566r`   r   c_shim_r  c                  $    t         dd      S )NTr   r;  includesr    )rg   rz   rf   s   r_   rw   z"gen_source_files.<locals>.<lambda>S	  s    $ # r`   c                  :    t         d        dz   z         S )NFr   r?  rA  )rg   rz   extra_headersr<  rf   s   r_   rw   z"gen_source_files.<locals>.<lambda>]	  s(    $ # -/$6F r`   c            
      @   D  cg c]  } t        |       s|  }} |D  cg c]  } d| j                   d c} t        t        t	        t
        j                        |            t        t        t	        t
        j                        |            dS c c} w c c} w )Nr   r  )r(  !backend_select_method_definitions%backend_select_function_registrations)r  r   r   rK   r  rM   rQ  r  )r  relevant_fnsrf   r4  s     r_   gen_backend_selectz,gen_source_files.<locals>.gen_backend_selecti	  s    )
-A"h-OB
 

 GS@B%bll^7; 26():):HE|2
 6:()<)<hG6
 	

s   BBBzRegisterBackendSelect.cpp)rf   r  zRegisterSchema.cppc                  "    rg n rg dS dS )N)r  r  rt   )r  r  rh  s   r_   rw   z"gen_source_files.<locals>.<lambda>	  s)    . *,*. %'	
  &
 r`   r  c                     | j                   S r   r   )r  s    r_   key_funcz"gen_source_files.<locals>.key_func	  s     ||r`   zOperators.cppc                 l    d| j                    dg t        t        j                        |       gdS )Nr   r  r  )r!  r  )r   rC  rM   rQ  r  s    r_   rw   z"gen_source_files.<locals>.<lambda>	  sE    #6r||nC!H I %%4G !
 r`   r      >   r  r!  r   )key_fnenv_callablebase_env
num_shardssharded_keyszFunctions.cppzTensorMethods.cppzATenOpList.cppc                  :    dt        t        t                     iS )Naten_ops)r   rK   rw  r  s   r_   rw   z"gen_source_files.<locals>.<lambda>	  s    Xo7GHI
 r`   rx  c                     dt         t        t        t        f   dt        t
           fd} ||       t        |       t        | t        j                           dS )Nrx  ro   c                 P   t        | t              ryd| j                  j                   dd| j                  j                   dg}| j                  7|d| j                  j                   dd| j                  j                   dgz  }|S t        | t
              rd| j                  j                   dd| j                  j                   dd| j                  j                   dd| j                  j                   dg}| j                  7|d| j                  j                   dd| j                  j                   dgz  }| j                  7|d| j                  j                   dd| j                  j                   dgz  }|S d| j                   dd| j                   dgS )Nr   r  r  )
r   r7   r2  r   r3  r6   r  r  r   r  )rx  r  s     r_   gen_op_headerszPgen_source_files.<locals>.functionalization_env_callable.<locals>.gen_op_headers	  s    !56 *!&&*:*:);:F)!&&*:*:);7C ;;*-akk.C.C-DJO-akk.C.C-DGL  G A3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   r5   r6   r7   r   r   r#   r$   r.   r   )rx  rX  rg   r4  s     r_   functionalization_env_callablez8gen_source_files.<locals>.functionalization_env_callable	  sl    %	^%9;SST%	#Y%	P *!, @! #E E EF#
 	
r`   c                 4    t        | j                               S r   r   r  rx  s    r_   rw   z"gen_source_files.<locals>.<lambda>
  s    T!++-%8 r`   c                 4    t        | j                               S r   r]  r^  s    r_   rw   z"gen_source_files.<locals>.<lambda>
  s    D4G r`   zRegisterFunctionalization.cpprQ  >   r(  rY  rZ  func_add_back_views_definitions!func_add_back_views_registrations)rO  rP  rR  rS  zFunctionalInverses.hc                  8    dt        t         fd            iS )Nview_inverse_declarationsc                     t        |       S r   )r%   )rx  r4  s    r_   rw   z4gen_source_files.<locals>.<lambda>.<locals>.<lambda>
  s    L ! r`   )r   rK   )r4  r  s   r_   rw   z"gen_source_files.<locals>.<lambda>
  s&    '  	*	
 r`   zCompositeViewCopyKernels.cppc            
         D  cg c]I  } dj                  d | j                  | j                  gn| j                  | j                  gD              K c} D  cg c];  } dj                  d | j                  | j                  | j
                  fD              = c} z   t        t        t        t        j                                       t        t        t                    t        t        t                    dS c c} w c c} w )Nr   c              3   V   K   | ]!  }d |j                    d|j                    d # yw)r   z_ops.h>
#include <ATen/ops/r  NrK  rC  s     r_   r   z5gen_source_files.<locals>.<lambda>.<locals>.<genexpr><
  s:      	  *!++ 7* +,++j	B	s   ')c              3   \   K   | ]$  }| d|j                   vrd|j                   d & y w)NrB  r   r  )r   r   rC  s     r_   r   z5gen_source_files.<locals>.<lambda>.<locals>.<genexpr>I
  s5      }AFF)B *!++g>s   *,)r(  #CompositeViewCopyKernel_Definitions(GeneratedCompositeFunctional_Definitions!GeneratedCompositeOut_Definitions)r   r3  r2  r   r  r  r   rK   r&   r.   r   rB   rC   )rx  rg   r  r  s    r_   rw   z"gen_source_files.<locals>.<lambda>:
  s    %  		 	 %&KK$7affakk=R	 	& 5  		 iiALLA * 48.''NN
  	4 9=3/9 26,/2M,
 s   AC?A D)$r1   r   r   r   r   r   r5   r  r  r   r   r.   r   r  r  r  ufunc_inner_loopr3   rq   r   CPUCUDAr  r   r  r
   rE   r,  r  r   r6   r7   write_shardedr   r   rG   )-rf   rI  r  r  r4  r  rg   r  r  r  r  r  rM  r  rg  r  r  rh  rf  ns_grouped_native_functionsgrouped_native_functionr  ri  rH  r  rL  r[  
all_groupsr   structured_mapview_mapr  r   r6  r)  rz   rv  r%  rC  rx  r9  r<  r   r!  r  s-   ```````      `` ``             @@@@@@@@@@@@@@r_   gen_source_filesrt  }  sM   *&
 $ & H,\:W&,d3i &, &,Td3i  (5&1$&7#'? 	S# 5~F (11,77AA 
 (	299:QR	S !.446
 KMMM 	  ?%=%%,K!5
 
 	|nD)% 	
" - +	OA55))1F|1T<<$$))..D{.V|#|&&vT*"
 ..%dV40( !1!11F#IL&& c*" %}\N*%MNNW+	OZ KOO[-=-=>>
!
#
7c 7  ';<&H"b  MM,,,./r2	 MM,,,./t4	 QHV
S$s)^ 4 
( LL,.@AO *;;=
 	1)?	! LL	

."68PPQ	
 
 ,-J#.

 
'  4 LL$'MM%t,MM	
5
!57OOP5
	c49n	5
r 	()D- 	  8:UV: 	
Q:N :
 !**G U4Q4H 4  !66;;n,H1La ! '3
   LL		
< LL&,	
/q:4s   S8S=c                 0    | j                  dfd       y )NzDeclarations.yamlc                  R    t        D  cg c]  } t        |        c}       S c c} w r   )r  r  )r   rf   s    r_   rw   z'gen_declarations_yaml.<locals>.<lambda>o
  s!    BRSQ5a8ST Ss   $)r  )r  rf   s    `r_   gen_declarations_yamlrw  j
  s     LLTr`   c                  d    t        j                  t              j                  j	                         S )z
    If you're depending on torchgen out-of-tree, you can use the root to figure
    out the path to native_functions.yaml
    )pathlibPath__file__parentresolvert   r`   r_   get_torchgen_rootr~  s
  s"    
 <<!((0022r`   c                  j   t        j                  d      } | j                  dddd       | j                  dd	d
       | j                  ddd       | j                  ddd       | j                  ddddd       | j                  ddd       | j                  ddd       | j                  dddd       | j                  d d!d"       | j                  d#d$dd%       | j                  d&d'dd(       | j                  d)d*dd+       | j                  d,d-dd.       | j                  d/t        dg d0g d0d12       | j	                         }t        |j                  |j                        }t        j                  j                  |j                  d3      }t        j                  j                  |j                  d4      }d5d6lm} t               }|j                  sQ|j!                  t"        j$                         t"        j$                  |v r ||j'                  t"        j$                        = t)        |||      }t*        |   }|j,                  |j.                  }
}	t1        |	      }|D cg c]  }t3        |t4              s| }}t7        |	      }|D cg c]  }t3        |t8              r| }}|j:                   d7}t=        j>                  |      jA                  d8d89       |j:                   d:}t=        j>                  |      jA                  d8d89       tC        ||;      }tC        |<      }tC        |<      }tC        |<      }tC        ||;      }tC        |d=;      }t"        jD                  t"        jF                  t"        jH                  t"        jJ                  t"        jL                  t"        jN                  t"        jP                  h}|j                  r|j!                  t"        j$                         |jR                  r1|D cg c]&  }tU        |      st        |      |jR                  v r|( }}g }|jV                  rk|jV                  D cg c]  }|
t#        jX                  |          }}|jV                  D ]-  }t#        jX                  |      }||vs|j!                  |       / d>|jZ                  v rgt]        dZi d?|	d@|dA|dB|dC|dD|dE|
dF|dG|dH|dI|dJ|dK|dL|dM|j^                  dN|j`                  dO|jb                  dP|jd                   dQ|jZ                  v r.tg        |	||||||
|||||||j^                  |jb                  R       dS|jZ                  v rti        |	|T       |jj                  rt=        j>                  |jj                        jm                         }|jn                  }|jp                  }|dUf|dVf|dWf|dXf|dYffD ]7  \  } }!|!|z   }"|jr                  |!|z   z  }#| ju                  |"t        |#             9 y y c c}w c c}w c c}w c c}w )[Nz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--rocmz=reinterpret CUDA as ROCm/HIP and adjust filepaths accordinglyz--mpsz'Generate MPS 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)r  sourcesdeclarations_yamlzGenerate only a subset of files)r   r  choicesr   r  znative/native_functions.yamlznative/tags.yamlr   )rM  z/coreT)parentsexist_okz/ops)optionsinstall_dir)r  z(torch/csrc/inductor/aoti_torch/generatedr  rf   rI  r  r  r4  r  rg   r  r  r  r  r  rM  r  rg  r  r  rh  r  )rf   rk   rI  r  r  r4  rg   r  r  r  r  rM  r  rg  r  r  )rf   r  r   cpu_vec_core_cuda_ops_rt   );argparseArgumentParseradd_argumentr   
parse_argsr.  op_registration_whitelistr(  osrm   r   source_pathtorchgen.modelrM  r   mpsr   r.   MPSr~   r   ri   rf   rg   rG  r   r6   r>  r7   r  ry  rz  mkdirrJ   rl  rm  r   r   r   r   r  backend_whitelistr2   static_dispatch_backendparsegeneratert  rg  r  r  rh  r  rw  output_dependenciesr}  r   stemr|  write_outputs)$parserr  r4  native_yaml_pathr   rM  rl   parsed_yamlrk   rf   rg   rI  rx  r  !native_functions_with_view_groupsr  core_install_dirops_install_dirr  r  r  r  r  r  r  r   r  keydp_keydepfile_pathdepfile_namedepfile_stemrf  rn  varnamerm   s$                                       r_   mainr  {
  s   $$1MNF
0	   I  
 D  
  A  
 %   L  
 6   %%-	   ""M   *	   ##N	   ++?	   %%C	   ;;.   !G())&&H
 ww||G$7$79WXWW\\'"5"57IJN, %K;;(??m+m11+//BC#$4nkRK.~>J$$## &
  <<LM ,#z!=Q/R# # )M)%
 3a12 	
K   "--.e4LL!"(((E ,,-T2OLL!''t'D=MNGw/F"73J0GwOLF%OG 	--99--::N {{;??+   #
&q)SVw7P7P-P 
 
 /1&& 66
 K--c23
 
 22 	+C &&s+F^+""6*	+
 G$$$ 	
-	
%=	
 )D	
 $		

 	
 !4	
 ,	
 	
 	
 	
 "	
 	
 (	
 *	
 	
  '.&G&G!	
" ")!=!=#	
$ -4,S,S%	
* G$$$-!%=(C 3+')!(!=!=	
$ g.../?O""||G$?$?@HHJ#((#(( RL$ggV
 		1JB |+G&&&<*?@DWc$i0		1 #a#Z

s   0X!X!X&+X+X0__main__)N<stdin>F)r  r   )ro   N)r  	functoolsr#  r  ry  collectionsr   r   r   dataclassesr   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   torchgen.api.dispatcherapir   torchgen.api.metar  torchgen.api.nativer  torchgen.api.structuredr   torchgen.destrx  torchgen.apir   torchgen.api.translater   torchgen.api.typesr   r   r   r   r   r   r   torchgen.contextr   r   r   r   torchgen.gen_aoti_c_shimr    r!   r"   #torchgen.gen_functionalization_typer#   r$   r%   r&   torchgen.gen_vmap_plumbingr(   r  r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   #torchgen.native_function_generationrA   rB   rC   rD   !torchgen.selective_build.selectorrE   torchgen.utilsrF   rG   rH   rI   rJ   rK   rL   rM   torchgen.yaml_utilsrN   rO   rP   rR   re   rh   r   rA  ri   objectr  r   r   	lru_cacher   r   r   r   r   r   r   r   r  r  r  r0  r3  rC  rY  rl  rs  rw  r  r  r  r  r  r  r  r  r  r  r  r  r&  r.  r>  rG  r  rO  r`  rc  re  r  r  r  r  r  r  rt  rw  rz  r~  r  ra   rt   r`   r_   <module>r     s      	  < < (     , ,     $ $ , ,   ,    
  =      4  ?	 	 	 7CLB  '9;L&MN
 :< c:o!6 ;57 tCSM2 7 /3 %+#+#C+# #k*++# 	+#
 +# +#\v S S " T"/# /#c( / #/ /31
 !&$(1
11 #k*+1
 1 &!1 1@%(@ %T %P
# 
# 
4	
4#5 	
${:K 	
&2k(&*<&8c] D,> 49  ,	|00	1 , , 	 ,FR	|00	1RR  R 		R$J	|00	1JJ ,'J 		J:F	|00	1FF ,'F 		FX $` ` `0 $[& [& [&@ $* * *^ $' ' 'Z $  < M~ M# M M
y)= y(3- yx3N 36F 34 3 $:& :& :&HSf S S&  0
D 
S 
S\ d3i ?'?'
4S#Xc3h/0?'F

 
 H	

 S
 S#X
 
@!! ! H	!
 S! S#X! !H U U6 U Ur. T  "(,[,-F(G "D(0c(;$SM >*O~.*OeN$<<=>*OZ~.eN$889:8 	00&u^=Q-Q'RS +|34 '	#^3	4lCT#YN	 
#tCy.:S$s)^, 
#YD 	00&u^=Q-Q'RS +|34 '	#^3	4lCT#YN	 
#Y4
 44
5DP bb 'u^=Q-Q'RSb 	b
 b b b b &*b b 
#YbN.&u^=Q-Q'RS. . 	.
 . . . 
#Y.d!=~.!= &!= 49c>	!=Hv~.v 'u^=Q-Q'RSv "**>!?	v
 l+v v +|34v v v $v K(v v 
vr~. 'u^=Q-Q'RS l+	
  +|34    $ K(  
DH/~.H/ CH/ 'u^=Q-Q'RS	H/
 "**>!?H/ l+H/ H/ +|34H/ H/ H/ H/ H/ K(H/ $H/ H/  !H/" 
#H/Vj~.j 'u^=Q-Q'RSj "**>!?	j
 23j j l+j +|34j j j j j j K(j $j  !j"  $#j$ %j& &*'j( 
)jZ+3N+C	37<< 3z1z zF r`   