
    j,                   B   U d dl mZ 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 d dlmZmZmZmZ d dl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l/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ d dl[m\Z\m]Z]m^Z^m_Z_ d dl`maZa d dlbmcZcmdZdmeZemfZfmgZgmhZhmiZi d dljmkZkmlZl erd dlmmnZnmoZo  ed          Zp G d del          Zq e	dddg          Zri asdetd<   i audetd<   dd&Zv	 	 	 ddd3Zwddd4Zxejy        dd5            Zz	 dd(dd6dd:Z{dd>Z|dd@Z}ddDZ~ddJZddLZddNZddSZddTZddUZddVZ edWX           G dY dZ                      Z edWX           G d[ d\                      Z edWX           G d] d^                      Z edWX           G d_ d`                      Z edWX           G da db                      Ze2ddc            ZddfZddiZ edWX           G dj dk                      ZddmZddnZddqZddtZddvZdd~ZddZe2dd            ZddZe3dd            ZddZddZddZe"j        dddZddZe"j        dddZddZddZddZddZddZddZddZddZddZddZddZedk    r e             dS dS )    )annotationsN)defaultdict
namedtupleOrderedDict)	dataclassfield)Path)AnyLiteralTYPE_CHECKINGTypeVar)assert_never)cpp)	translate)BindingCppSignatureCppSignatureGroupDispatcherSignature
NamedCTypeNativeSignatureSpecialArgName)method_with_native_functionnative_function_managerwith_native_function with_native_function_and_indices)gen_aoti_c_shim_files*gen_static_dispatch_backend_call_signature) gen_functionalization_definition"gen_functionalization_registration.gen_functionalization_view_inverse_declaration,gen_functionalization_view_meta_classes_decl,gen_functionalization_view_meta_classes_implGenCompositeViewCopyKernelgen_all_vmap_plumbing)ArgumentBackendIndexBackendMetadataBaseOperatorNameDEFAULT_KERNEL_NAMESPACEdispatch_device_mapDispatchKeyFRAGMENT_NAMESPACESFunctionSchemais_cuda_dispatch_keyis_generic_dispatch_keyis_ufunc_dispatch_keyis_xpu_dispatch_keyLocationNativeFunctionNativeFunctionsGroupNativeFunctionsViewGroupOperatorNameOptionalType
SchemaKindSelfArgumentSTRUCTURED_DISPATCH_KEYSTensorOptionsArgumentsTypeVariantViewSchemaKind)add_generated_native_functionsgen_composite_functional_kernelgen_composite_out_kernelpre_group_native_functions)SelectiveBuilder)	concatMapcontextFileManagermake_file_managermapMaybeNamespaceHelperTarget)
YamlDumper
YamlLoader)CallableSequenceTc                        e Zd Zd fd	Z xZS )
LineLoaderFc                r    t                                          ||          }|j        j        dz   |d<   |S )N)deep   __line__)superconstruct_mapping
start_markline)selfnoderT   mapping	__class__s       V/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/torchgen/gen.pyrX   zLineLoader.construct_mapping   s8    ''++Dt+<<"o2Q6
    )F)__name__
__module____qualname__rX   __classcell__)r^   s   @r_   rR   rR      s=                 r`   rR   
ParsedYamlnative_functionsbackend_indiceszdict[str, ParsedYaml]_GLOBAL_PARSE_NATIVE_YAML_CACHEzdict[str, set[str]]_GLOBAL_PARSE_TAGS_YAML_CACHEdispatch_keyr,   
device_fmsdict[str, FileManager]
default_fmrG   returnc                     |                     t           fdt          j                    D             d          |          }|S )Nc              3  8   K   | ]\  }} |          |V  d S N ).0checkdevicerj   s      r_   	<genexpr>z1file_manager_from_dispatch_key.<locals>.<genexpr>   sK        !E65&&     r`    )getnextr+   items)rj   rk   rm   fms   `   r_   file_manager_from_dispatch_keyr|      se    
 
   %8%>%@%@  
 	
 	
 	

 

B Ir`   <stdin>Fesobject
valid_tagsset[str]ignore_keysset[DispatchKey] | Nonepathstrskip_native_fns_genboolc           	        t          | t                    st          dt          |                      g }t	          t
                    }| D ]}t          |t
                    st          d|           t          |                    d          t                    st          d|           t          ||d                   |                    d          t          d|           t          fd          5  t          j        |||          \  }}	|                    |           t          j        ||	           d d d            n# 1 swxY w Y   t          |           t	          d           }
|st!          ||           |                                D ]8\  }}t          |d	d
t%          |          pt'          |          |          |
|<   9t)          ||
          S )N$Expected 'es' to be a list, but got zExpected to be dict: rV   Expected '__line__' to be int: funczMissed 'func' in c                     d d  S Nzin z:
  rr   )funcslocs   r_   <lambda>z*parse_native_yaml_struct.<locals>.<lambda>   s    4344U44 r`   c                 >    t          t          j        dddi           S )NTFrj   use_out_as_primaryexternaldevice_guardindex)r'   r,   	Undefinedrr   r`   r_   r   z*parse_native_yaml_struct.<locals>.<lambda>   s)    $.# 
 
 
 r`   TFr   )
isinstancelistAssertionErrortyper   dictrx   intr3   rF   r4   	from_yamlappendr'   
grow_indexerror_check_native_functionsr@   rz   r/   r2   re   )r~   r   r   r   r   rsbser   mindiceskvr   r   s                @@r_   parse_native_yaml_structr      sP    b$ PNDHHNNOOO!BALTARARB + +!T"" 	> !<!<!<===!%%
++S11 	H !F1!F!FGGGtQz]++f= !8Q!8!89994444455 	+ 	+$.q#z;OOGD!IIdOOO#B***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ !$$$/:	
 	

0 
0G  /&r2...

 	
 	
1!#-a00J4G4J4J
 
 


 b'"""s   AEE	E	c                   t          | t                    st          dt          |                      t	                      }| D ] }t          |                    d          t                    st          d|           t          ||d                   |                    d          t          fd          5  |	                                }|
                    d          }|
                    dd          }|dk    rt          d| d	          |                    |           d d d            n# 1 swxY w Y   |S )
Nr   rV   r   tagc                     d  d S r   rr   )r   tagss   r_   r   z(parse_tags_yaml_struct.<locals>.<lambda>   s    3333T33 r`   descrw   zTag 'z#' must have a non-empty description)r   r   r   r   setrx   r   r3   rF   copypopadd)	r~   r   r   r   e_inamer   r   r   s	          @@r_   parse_tags_yaml_structr      s}   b$ PNDHHNNOOO55B  !%%
++S11 	H !F1!F!FGGGtQz]++uuU||3333344 	 	&&((C775>>D7762&&Drzz$%VT%V%V%VWWWFF4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Is   A.D<<E 	E 	c                    | t           vr[t          |           5 }t          j        |t                    }t          ||           t           | <   d d d            n# 1 swxY w Y   t           |          S )NLoader)r   )ri   openyamlloadrR   r   )r   fr~   s      r_   parse_tags_yamlr      s     000$ZZ 	X11Z000B2HRV2W2W2W)$/	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X )..s   5AA!A)r   loaded_yamltags_yaml_pathr   object | Nonec                  | t           vrrt          |          }|Ct          |           5 }t          j        |t
                    }d d d            n# 1 swxY w Y   n|}t          |||| |          t           | <   t           |          S )Nr   )r   r   )rh   r   r   r   r   rR   r   )r   r   r   r   r   r   r   r~   s           r_   parse_native_yamlr      s     222$^44
 d 5qYq4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 B0H 31
 1
 1
'- +400s   AAAr   Sequence[NativeFunction]Nonec           	        i }t          t                    }| D ];}|||j        j        <   ||j        j        j                                     |           <| D ]}|j        {|                    |j                  }|,t          |j        j         d|j         d|j         d          |j        s,t          |j        j         d|j         d|j         d          t          t          j                  }h d}|j        j        j        D ]R}|j        |v rGt          |j        j                  |j        f|vr%t          d|j         d|j        j         d          Sd	|j        v rt          |j        j                  d
k    rt          |j        j                  dk    rt          |j        j        j                  dk    r|j        j        j        }|j        st          |j        j         d          t#          |j        d|j                  }	t)          ||	                   dk    rt          |j        j         d| d          d S )Nz0 is marked as a structured_delegate pointing to z, but z is missing.zY is not marked as structured. Consider adding 'structured=True' to the delegated operator>   zrandom_.fromfromuniform_r   !_has_compatible_shallow_copy_typer   zArgument name 'z' in function 'z' is a reserved Python keyword.inplace_viewresize_
resize_as_set_z is marked with tag: inplace_view, but it doesn't follow the naming convention for inplace ops - the codegen expects the base name to have a trailing underscore.Fr   zw is marked with tag: inplace_view. The codegen expects there to be a corresponding out-of-place view op with the name 'z.' and matching schema, but it didn't find one.)r   r   r   r   r   structured_delegaterx   r   
structuredr   keywordkwlist	argumentsflat_allr   r   inplacer)   basedunder_methodlen)
r   func_mapbase_func_mapr   delegate_funcPYTHON_RESERVED_KEYWORDSEXCLUSION_LISTarg	base_nameout_of_place_base_names
             r_   r   r     s   35HBMdBSBSM 2 2 !afk&'..q1111 7 7 ,$LL)>??M$$v{ X X,X X454IX X X   !+ $v{ S S,S S454IS S S   $'w~#6#6 
 
 
 6#, 	 	Cx333$$ch/~EE(o#(oo16;ooo   af$$AFK  I--AFK  L00AFK$%%//(I$ $v{ t t t   &6y'>& &" =!7899Q>>$v{ u u;Du u u  i7 7r`   sc                n   |                      dd          } |                      dd          } |                      dd          } |                      dd          } |                      d	d
          } |                      dd          } |                      dd          } |                      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q888Or`   backendslist[BackendIndex]list[DispatchKey]c                    t          |           dk    rg S d | D             t          j        t          j        t          j        t          j        gz   S )Nr   c                    g | ]	}|j         
S rr   )rj   )rs   backends     r_   
<listcomp>z(static_dispatch_keys.<locals>.<listcomp>{  s    ===$===r`   )r   r,   CompositeImplicitAutograd%CompositeImplicitAutogradNestedTensorCompositeExplicitAutograd&CompositeExplicitAutogradNonFunctionalr   s    r_   static_dispatch_keysr   w  sQ    
8}}	==H===1=1>	A
 
 	
r`   r   r4   backend_indexr'   DispatchKey | Nonec                    | j         |                    |           r|j        S | j        rt          j        S | j        rt          j        S | j        rt          j	        S | j
        rt          j        S d S rq   )r   
has_kernelrj   &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    s     	(M,D,DQ,G,G(
 ))	
	1 A44	
	@ AAA	
	1 A44	
	? A@@4r`   
str | Nonec                    || j         rd S g }|D ]G}t          | |          }|3|                    d| j         d|                                 d           Hd                    |          S )N#include <ATen/ops/__dispatch.h>r   )manual_kernel_registrationr  r   	root_namelowerjoin)r   r   outputr   rj   s        r_   static_dispatch_ops_headerr    s      <tF  21e<<#MMVakVVL4F4F4H4HVVV   99Vr`   	list[str]c                4    d t          |           D             S )Nc                    g | ]}d | d	S )#include <ATen/Functions.h>rr   )rs   rj   s     r_   r   z1static_dispatch_extra_headers.<locals>.<listcomp>  s3        	5,444  r`   )r   r   s    r_   static_dispatch_extra_headersr    s+     0::   r`   sig"CppSignature | DispatcherSignaturecpp_sigr   c                D   dd}t          |                                           }t          |                                          }|D ])}|j        j        t          j        k    r ||          } n*t          ||          }d                    d |D                       S )Ninput_bindingslist[Binding]rn   c                   g }| D ]|}|j         dk    rZt          t          t          j        |j        j                  |j         |j        |j                  }|	                    |           g|	                    |           }|S )Nmemory_format)nctyper   defaultargument)
r   r   r   r    possibly_redundant_memory_formatr  r   r  r   r   )r  output_bindingsbindingspl_mem_format_bindings       r_   add_spl_memory_format_bindingz5translate_args.<locals>.add_spl_memory_format_binding  s    )+% 	0 	0G|..)0%&G+  !#O$-* * *&  &&'=>>>>&&w////r`   , c              3  $   K   | ]}|j         V  d S rq   exprrs   as     r_   rv   z!translate_args.<locals>.<genexpr>  s$      ++QV++++++r`   )r  r  rn   r  )r   r   r  r   r   r!  r   r  )r  r  r%  src_bindingsgoal_bindingsr   exprss          r_   translate_argsr/    s    
   $ ((L**,,--M   :?nMMM88FFLE N lM22E99++U++++++r`   c           	     :   t          | |          }|                                }t          | |          }|                    |          }|r|j        r|j        nt
          }|                    dd          }d| d|j                                         d| d| d	S )N::nativerw   return ::();)	r   r   r/  
get_kernelcpp_namespacer*   r   rj   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2 	& 0 >	&&&% 
 
		:r	*	*BQRQQ=5;;==QQQQQQQQr`   c           	        t          j        |dd          }| j        r!|j                                        r|j        }n|j        }|t          d          |                                }t          | |          }t          j        dd          }|j        r+d| dt          j                                         d| d| d		S |j        r+d| dt          j                                         d| d| d		S |j        r+d| dt          j                                         d| d| d		S |j        r+d| dt          j                                         d| d| d		S d
| dd                    d |D                        dS )NFmethodfallback_bindingzExpected cpp_sig to be non-Noner1  rw   r2  r3  r4  r5  z5TORCH_CHECK(false, "Static dispatch does not support z forr&  c                6    g | ]}t          |j                  S rr   )r   rj   )rs   r   s     r_   r   z:generate_static_dispatch_fallback_call.<locals>.<listcomp>  s#    AAAC"##AAAr`   z ");)r   from_native_functionsymintr   
has_symintsymint_signature	signaturer   r   r/  r*   r   r   r,   r   r  r  r   r  r   r  r   r  )r  r   rg   cpp_sigsr  r   r.  r:  s           r_   &generate_static_dispatch_fallback_callrG    s   
 !5	%%  H z %af'')) %+$>???<<>>D3((E	!	)*b	9	9B/ 
K```{DJJLL``PT``W\````	
	@ Kmmm{QWWYYmm]ammdimmmm	
	1 K```{DJJLL``PT``W\````	
	? Klll{PVVXXll\`llchllllK K KAAAAABBK K K 	Kr`   c           	        t          |          dk    sj        rdS fd|D             }t          |          dk    rt          | |d                   S t          |          dk    rt          | |          S d |                                 D             }d                    |          }j        j        j        }g }g }||                    d           |dk    r|                    d	| d
           |                    dd                    |           d           |                    d           g }	|D ]H}
|	                    d|
j	         d           |	                    dt          | |
           d           It          | |          }d}d|                    |           d|                    |	           d| dS )a  
    For a given `NativeFunction`, find out the corresponding backend and dispatch to it. If more than one
    backends exist, fallback to static dispatch by determining dispatch key from inputs.
    Arguments:
        sig: A CppSignature or DispatcherSignature for this native function we want to use.
        f: NativeFunction to generate static dispatch.
        backend_indices: All available backends.
    Return:
        C++ code to call backend-specific functions, e.g., "return at::cpu::add(self, other, scale);"
    r   rw   c                h    g | ].}|                               sj        |j        t          v ,|/S rq   )r   r   rj   r;   )rs   br   s     r_   r   z#static_dispatch.<locals>.<listcomp>  sP       <<??
 !-"::: 	

 ;::r`   rU   c                    g | ][}t          |j        t                    s8t          |j        t                    6|j        j                                        T|j        \S rr   )r   r   r:   r&   r   is_tensor_liker   r*  s     r_   r   z#static_dispatch.<locals>.<listcomp>$  sl       aj,// aj(++	
 JO**,,	  r`   r&  Nz>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;  rG  r   r  r   tensor_optionsr   rj   )r  r   rg   keysnative_tensor_argstensor_argstensor_optsstmtssubexprsdispatch_coder   fallback	connectors    `           r_   static_dispatchr[    sG    ?q  A$@ r      D 4yyA~~4S!T!WEEE	Ta5c1oNNN    )).//K&"1KEHL	
 	
 	
 bM{MMMNNN	LLHuzz(/C/CHHHIII	LLPQQQM 
 
KE4FKKKLLLL8aGGLLL	
 	
 	
 	
 6c1oNNHI^^E  
	&	& 
    r`   T)frozenc                  T    e Zd ZU ded<    ee          Zded<   edd
            ZdS )RegisterSchemarD   selector)default_factoryzdict[str, int]
known_tagsr   r4   rn   r  c                   | j                             |          sd S dd                    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 | V  
dS )z	at::Tag::Nrr   )rs   r   s     r_   rv   z*RegisterSchema.__call__.<locals>.<genexpr>Y  s+      KKS0300KKKKKKr`   }z{}zm.def(z, {});
rw   z const std::vector<at::Tag> tags_z = ;
z, tags_z);
)
r_  is_native_function_selectedr  sortedr   r   r   r   ra  r   )r[   r   r   
maybe_tagsidxs        r_   __call__zRegisterSchema.__call__U  s    }88;; 	4TYYKKF16NNKKKKKKcQ4<<?Js16{{33????
t&&do&&C$'DOD!MCMMDMMMJ__Js16{{$;$;__DOTXDY____r`   Nr   r4   rn   r  )	ra   rb   rc   __annotations__r   r   ra  r   rk  rr   r`   r_   r^  r^  P  se         !&t!<!<!<J<<<< ` ` ` ! ` ` `r`   r^  c                  <    e Zd ZU ded<   ded<   edd	            Zd
S )ComputeOperators.Literal[Target.DECLARATION, Target.DEFINITION]targetr   static_dispatch_backend_indicesr   r4   rn   r   c                   t          j        |j                  }|j        j                                        }| j        t          j        u rd| d|                                 d|j        j        j         d|j        j        j	         dt          t          |j                             d|                    dd	           d|                    d
d	           dS | j        t          j        u rd|j         d| d| d| d| d| d}dD ]}|r8d                    dgd |                                D             z             }d
}n3d                    d |                                D                       }d}|}| d| }	d| d| d| d}
|s/t!          | j                  dk    rt%          ||| j                  }
|d|j         d |                    |	|	           d!|
 d"z  }|S t'          | j                   d S )#Nz
struct TORCH_API z {
  using schema = z;
  using ptr_schema = schema*;
  // See Note [static constexpr char* members for windows NVCC]
  static constexpr const char* name = "aten::z3";
  static constexpr const char* overload_name = "z/";
  static constexpr const char* schema_str = z;
  static callF)r   is_redispatching_fn
redispatchTz;
};

// aten::z.
static C10_NOINLINE c10::TypedOperatorHandle<z::schema> create_zQ_typed_handle() {
  return c10::Dispatcher::singleton()
      .findSchemaOrThrow(z::name, z::overload_name)
      .typed<z::schema>();
}
)FTr&  dispatchKeySetc                    g | ]	}|j         
S rr   r   r*  s     r_   r   z-ComputeOperators.__call__.<locals>.<listcomp>  s    -N-N-Naf-N-N-Nr`   c                    g | ]	}|j         
S rr   rz  r*  s     r_   r   z-ComputeOperators.__call__.<locals>.<listcomp>  s    5V5V5Vaf5V5V5Vr`   r3  z
    static auto op = create_z_typed_handle();
    return op.r4  r5  r   )rg   r    {
    z
}
)r   from_schemar   r   unambiguous_namerq  rK   DECLARATIONr   overload_namer   r   defn
DEFINITIONr  r   r   rr  r[  r   )r[   r   r  r   defnsru  dispatcher_exprs_strmethod_basedispatcher_callmethod_namefn_bodys              r_   rk  zComputeOperators.__call__n  s   !-af55v{++--;&,,,0

 
((**
 

 /0fk.>
 
 231J
 
 .8AF-D-D
 
 ((E(
:
:
 
 (($(
?
?
 
 
 
 [F---
& .2 EI  	  )-	 
   E (5  #& )+/99)*-N-Ncmmoo-N-N-NN, ,( #/KK+/995V5Vcmmoo5V5V5V+W+W("(K"-!%6666<!< << <!5< < <
 ,D@AAAEE .Q0T  G  
& {0CDD      L%%%%%r`   Nr   r4   rn   r   ra   rb   rc   rm  r   rk  rr   r`   r_   ro  ro  i  sS         ::::7777 R& R& R& ! R& R& R&r`   ro  c                  &    e Zd Zedd            ZdS )ComputeFunctionr   r4   rn   r  c                   t          j        |d|j                  }|j                                        }d}|                                D ]}t          j        |j                  }t          |	                                |	                                          }d
                    d |D                       }|j        rd}	nd}	t          j        |j        v rE|d|j         d	|                                 d
|j        j                                         d| d	z  }|rB|d|	 d|                    d           d
|j        j                                         d| d	z  }|S )NFr=  rw   r&  c                    g | ]	}|j         
S rr   r(  rs   r   s     r_   r   z,ComputeFunction.__call__.<locals>.<listcomp>      "9"9"9a16"9"9"9r`   zc10::SymIntint64_trw  
inline  {
    return at::_ops::::call(z);
}zZ
namespace symint {
  template <typename T, typename = std::enable_if_t<std::is_same_v<T, z>>>
  T)suppress_symint_suffixz	);
  }
}
)r   rA  manual_cpp_bindingr   rC  
signaturesr   r}  r   r   r  rB  r>   functionvariantsdeclr   r~  )
r[   r   	sig_grouprC  resultr  
target_sigr.  	exprs_str	intlike_ts
             r_   rk  zComputeFunction.__call__  s   %:ea.B
 
 
	 V&&((
''))  	  	C,8@@Jcmmooz/C/C/E/EFFE		"9"95"9"9"9::Iz &)		%	1:-- 
& 

  fk2244  >G      GP  8848((  fk2244	  >G	    r`   Nrl  ra   rb   rc   r   rk  rr   r`   r_   r  r    s3         ( ( ( ! ( ( (r`   r  c                  <    e Zd ZU ded<   ded<   edd	            Zd
S )ComputeTensorMethodrp  rq  r   rr  r   r4   rn   r  c                   t           j        |j        vrd S |j                                        rt          d|j                   |j        j        j        t          d|j                   t          j	        |d|j
                  }| j        t          j        u r5d}|                                D ]}||                                 dz  }|S | j        t          j        urt#          | j                   d}|                                D ]}t%          j        |j                  }t)          |                                |                                d          }d                    d	 |D                       }|d
|j         d|                    d           d|j        j                                         d| d	z  }|S )Nz*Method variant cannot be an out function: z#Method variant must have self_arg: Tr=  rw   z const;
)r>  r&  c                    g | ]	}|j         
S rr   r(  r  s     r_   r   z0ComputeTensorMethod.__call__.<locals>.<listcomp>  r  r`   rw  r  zTensor::)prefixz const {
    return at::_ops::r  );
}
)r>   r>  r  r   	is_out_fnr   r   self_argr   rA  r  rq  rK   r  r  r  r  r   r   r}  r   r  r  r   r~  r[   r   r  r  r  r  r.  r  s           r_   rk  zComputeTensorMethod.__call__  s   >++46 	X !Vaf!V!VWWW6$, !Oqv!O!OPPP%:dQ-A
 
 
	 ;&,,,F ++-- 3 3SXXZZ2222M;f///%%%'')) 
	 
	C,8@@Jcmmooz/C/C/E/EdSSSE		"9"95"9"9"9::I 
& 
##  fk2244  >G   FF r`   Nrl  r  rr   r`   r_   r  r    sM         ::::7777 $ $ $ ! $ $ $r`   r  c                  &    e Zd Zedd            ZdS )ComputeRedispatchFunctionr   r4   rn   r  c                   t          j        |d|j                  }d}|                                D ]}t	          j        |j                  }t          |                                |                                          }d	                    dgd |D             z             }|d|j         d|
                    d	
           d|j        j                                         d| d	z  }|S )NFr=  rw   r&  rx  c                    g | ]	}|j         
S rr   r(  r*  s     r_   r   z6ComputeRedispatchFunction.__call__.<locals>.<listcomp>4  s    7N7N7N17N7N7Nr`   rw  r  T)ru  r  z::redispatch(r  )r   rA  r  r  r   r}  r   r   r   r  r  r   r~  r  s           r_   rk  z"ComputeRedispatchFunction.__call__(  s    &:ea.B
 
 
	 '')) 
	 
	C,8@@Jcmmooz/C/C/E/EFFE		#3"47N7N7N7N7N"NOOI 
& T**  fk2244  DM   FF r`   Nrl  r  rr   r`   r_   r  r  &  s3            !   r`   r  c                P    d| j         j        j         d| j         j        j         dS )Nz{"aten::z", "z"},)r   r   r  r   s    r_   compute_aten_opr  E  s)    Lqv{'LLQV[-FLLLLr`   gr5   c                   | j         sd S t          | j                  5  t          j        |           }t          j        |           }d                    d |D                       }| j        j        }|d}d}| j         r| j        j        nd }|r1g |j	        
                                |j        }d |D             }d |D             }	d                    d |	D                       }
d|
 d	}d
 |D             }d                    d |D                       }g }t          |          D ]D\  }}d                    |	d |         dgz   |	|dz   d          z             }d| d	}||                             d          }| d|j         d| d}d|j         d}d|	|          d| d}g }|                    | d           t          |          D ]P\  }}||k    r|                    d|j         d           *|                    d|j         d|j         d           Q|                    d           d                     |          }|                    d!| d"| d#| d$           Fd                     |          }d                    dgt          |	          z            }d%| d&}d'}d(| d)| d!| d*}nd+}d+}d,| d-| d.| d/| d/| d0| d1cd d d            S # 1 swxY w Y   d S )2Nr&  c              3  >   K   | ]}|                                 V  d S rq   )r  r*  s     r_   rv   z4compute_meta_function_declaration.<locals>.<genexpr>Q  s*      44!QVVXX444444r`   zat::impl::MetaBasevoidc                    g | ]	}|D ]}|
S rr   rr   )rs   replace_listelems      r_   r   z5compute_meta_function_declaration.<locals>.<listcomp>]  s9     $ $ $%$ $@D$ $ $ $r`   c                @    g | ]}|j                                         S rr   )r   upperrs   r  s     r_   r   z5compute_meta_function_declaration.<locals>.<listcomp>`  s1     / / /&*	!!/ / /r`   c              3  "   K   | ]
}d | dV  dS )zbool z = falseNrr   )rs   params     r_   rv   z4compute_meta_function_declaration.<locals>.<genexpr>c  s?       8 8,1''''8 8 8 8 8 8r`   z
template <>c                D    g | ]}t          j        ||j                   S ))binds)r   argument_typer   r  s     r_   r   z5compute_meta_function_declaration.<locals>.<listcomp>i  s:     3 3 3 (TY???3 3 3r`   rf  c              3  V   K   | ]$}|                     d            d|j         V  %dS )T	strip_ref N)cpp_typer   r  s     r_   rv   z4compute_meta_function_declaration.<locals>.<genexpr>n  sT       3 3 ==4=00>>49>>3 3 3 3 3 3r`   truerU   zprecompute_out<Tr  z set_r4  z value)r   z already set"zstatic_assert(z == false, r5  z ret;zret.z	 = value;z	 = this->rN  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;
            };rw   zstruct TORCH_API structured_z
 : public r|  rP  z meta(z);
};
)r   r   outmetar   meta_argumentsr  structured_inheritsprecomputedr   valuesr   	enumerater  r   r   )r  r   argsargs_strparent_classmeta_returnr  precomputed_valuesprecomputed_elementsprecomputed_template_parametersprecomputed_template_params_strprecompute_template_decl#precomputed_elements_with_cpp_typesprecomputed_elements_declsetter_methodsir  return_ty_templates	return_tyelem_cpp_tyrE  
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  K  s   < t	 	'	' v vy||(++9944t44444u0/L+,<Aae''T d	" "R;#6#=#=#?#?!Q!Q$ $);$ $ $ / /.B/ / /+ /3ii 8 85T8 8 8 / /+ (W4S'V'V'V$3 303 3 3/
 ).

 3 3?3 3 3 ) )%  N$%9:: 2 24 '+ii3BQB7h5a!egg>?' '#
 E.ADDD	A!DMM" N    )OOtyOO;OOO	 :999
l/Nq/Qll^hlll &(""))Y*=*=*=>>>()=>>  GAtAvv*112M2M2M2MNNNN*11C49CCtyCCC    #))-888%)YY/A%B%B"%% $  ,      #'))N";"; +/))3>???+ +'
 #lLg"k"k"k*K )    )    /	      #%!! -9     	  !	  av v v v v v v v v v v v v v v v v vs   J;K&&K*-K*r_  rD   c                    t          | j        j        j                  }|                    d          s|                    d          rdS | j        j        j        dS |                    |           S )N_likenew_F)r   r   r   endswith
startswithr   rQ  rg  )r   r_  r   s      r_   needs_backend_selectr    si    qv{  D}}W !8!8 uv&.u//222r`   c                  <    e Zd ZU ded<   ded<   edd	            Zd
S )ComputeBackendSelectz/Literal[Target.DEFINITION, Target.REGISTRATION]rq  rD   r_  r   r4   rn   r  c                   t          || j                  sd S t          j        |j                  }t          |j        d          }d |                                D             }t          j        |j                  }|}|	                                }d}| j
        t          j        u r|r^|j        j                                        st          d|j                   d                    d |D                       }	d| d	|	 d
}
n;|j        j                                        rt          d|j                   d| d}
d|j         d|                    |           d|
 d|j        j                                         dd                    d |D                        dS | j
        t          j        u rd|j        j         d| dS t'          | j
                   d S )NTrB  c                    g | ]<}t          |j        t                    |j        j                                        :|=S rr   )r   r   r&   r   rL  r*  s     r_   r   z1ComputeBackendSelect.__call__.<locals>.<listcomp>  sT     
 
 
!*h//
 56JO4R4R4T4T

 
 
r`   z.c10::computeDispatchKey(dtype, layout, device)z'Expected function to have tensor args: r&  c              3  $   K   | ]}|j         V  d S rq   rz  r*  s     r_   rv   z0ComputeBackendSelect.__call__.<locals>.<genexpr>  s$      'K'K1'K'K'K'K'K'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+Expected function to not have tensor args: z)DispatchKeySet _dk = c10::DispatchKeySet(r5  z	// aten::z
C10_ALWAYS_INLINE
z {
  z
  return at::_ops::z::redispatch(
      _dk, c              3  $   K   | ]}|j         V  d S rq   r(  r*  s     r_   rv   z0ComputeBackendSelect.__call__.<locals>.<genexpr>  s$      77af777777r`   r  zm.impl("aten::z", TORCH_FN(z));)r  r_  nativer   r   r   r   r   r}  r.  rq  rK   r  has_tensor_argr   r  r  r~  REGISTRATIONr   )r[   r   r   
native_sigrS  dispatcher_sigr  dispatcher_exprsrj   rT  
compute_dks              r_   rk  zComputeBackendSelect.__call__  se   #At}55 	4{16""$QVD999

 
))++
 
 
 -8@@ )//11G;&+++
 " v'6688 (J!&JJ   #ii'K'K8J'K'K'KKKM.:M MdoM M M


 6#2244 (NafNN   QPPP 
&  $  	 
 FK0022  II77&677777    [F///JafkJJtJJJJ%%%%%r`   Nrl  r  rr   r`   r_   r  r    sO         ;;;;  8& 8& 8& ! 8& 8& 8&r`   r  datac                    d t           _        d
d}t          j        t          |           t	          j        | dt           d	          S )Nc                    dS )NTrr   )r[   r  s     r_   r   zformat_yaml.<locals>.<lambda>   s    4 r`   dumperr
   r  rn   c                P    |                      |                                          S rq   )represent_dictrz   )r   r  s     r_   dict_representerz%format_yaml.<locals>.dict_representer#  s    $$TZZ\\222r`   Fg    eA)default_flow_styleDumperwidth)r   r
   r  r
   rn   r
   )rL   ignore_aliasesadd_representerr   r   dump)r  r  s     r_   format_yamlr
    sR     7 7J3 3 3 3 {,<=== 9TeJcRRRRr`   c                    | dk    rdS | dk    rdS 	 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  1  s    F{{t	
gu1vv   	88OOO 	 	 	HHHHH	s)   ! 
A=AA	AAAtr=   c                    t          | t                    rt          | j                  S t	          |           dk    rdS t          j        | ddd                                          S )NTensorz
at::TensorF__placeholder__)mutabler  rB  )r   r8   dynamic_typer  r   r   argumenttype_typer  )r  s    r_   r  r  I  si    !\"" $AF### 1vv| 	5 1%  hjjr`   r  set[Variant]c                    dg}t           j        | v r|                    d           t           j        | v r|                    d           |S )Nr=   r  	namespace)r>   r>  r   r  )r  	method_ofs     r_   compute_method_of_yamlr  V  sT     I~!!"""8##%%%r`   +tuple[list[dict[str, str]], dict[str, str]]c                   i }t          j        |           }g }t          t          | j        j        |                    D ]\  }\  }}t          |j                  |t          j        |d          	                                d}|j
        rG|j
        |d<   | j                                        r$|j
        || j        j        j        |         j
        <   |                    |           ||fS )NFr  )r  r   r   
field_name)r   return_namesr  zipr   returnsr  r   return_typer  r   r  r   r  r   )r   name_to_field_namenamesr!  r  rr   rets           r_   compute_returns_yamlr'  a  s    T *, QEG!#afne"<"<==  9At(00OAe444==??	
 
 6 	J !Cv!! JCD6"16#3#7#:#?@s&&&r`   cpp_ar   schema_orderkwarg_only_setout_arg_setr#  dict[str, str]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 d S )Nzat::TensorOptionsFT)
annotationr  is_nullabler   r   
kwarg_onlyr  r)  r*  r+  r#  )
r   r   r<   r   r   r  r:   r   r&   compute_argument_yaml)r(  r)  r*  r+  r#  r   s         r_   compute_cpp_argument_yamlr3    s     %."899 
/ JJ"
 "
 =$"]C	N
	ENL	1	1 	
	ENH	-	- 
$N%)#1
 
 
 	

 
r`   r+  r&   c          	     b   | j         rt          | j                   nd t          | j                  | j                                        | j        t          j        | dd                                          d}| j	        1t          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        "t          |j                  dk    r
|j        |d<   |S )Nr  F)r  rB  )r.  r  r/  r   r   r  r  Tr0  r  allocater  r   size)r.  r   r  r   r/  r   r   r  r  r  r  default_expris_list_liker6  r  )r+  r)  r*  r+  r#  r   ls          r_   r2  r2    s>    ,-<Ac!,'''T$QV,,v))++!!+<UKKKTTVV C 	y*QYu===
 
I 	v LvHJ6''' 216 :C 	
A}+AFv0E0EfFJr`   c                r   t          |           \  }d | j        j        j        D             d | j        j        j        D             t          j        | dd          }|j                                        }fd|D             }t          | j        	                                          }fd|D             }d |D             }t          j        | j        j        d                                          }| d	d
                    |           d}	t          d |D                       ot           j        | j        v}
t'          dt          j        | j                  fdt+          | j        j        j                  fdt+          | j        j        j                  fd| j        fd| j        | j        ndfdd| j         fd|fd|	fd|fdt3          | j                  fdd| j        dn| j        fd|fd| j        j        j        j        fd|
fd| j        fd| j        fd d!d"| j        fg          S )#Nc                    h | ]	}|j         
S rr   rz  r*  s     r_   	<setcomp>z+compute_declaration_yaml.<locals>.<setcomp>  s    GGGafGGGr`   c                    h | ]	}|j         
S rr   rz  r*  s     r_   r<  z+compute_declaration_yaml.<locals>.<setcomp>  s    888a16888r`   Fr=  c           	     8    g | ]}t          |d           S )Fr1  )r3  )rs   r(  r*  r#  r+  s     r_   r   z,compute_declaration_yaml.<locals>.<listcomp>  sI     	 	 	  	")#1	
 	
 	
	 	 	r`   c           	     8    g | ]}t          |d           S )Tr1  )r2  )rs   r+  r*  r#  r+  s     r_   r   z,compute_declaration_yaml.<locals>.<listcomp>  sI     	 	 	  	)#1	
 	
 	
	 	 	r`   c           
     n    g | ]2}t          j        |d t                      d d d           D ]	}|j        
3S )F)r>  cpp_no_default_argsfaithfulrB  has_tensor_options)r   r   r   r   )rs   r+  r%  s      r_   r   z,compute_declaration_yaml.<locals>.<listcomp>  sj         #$
 
 
	   	
   r`   r  z (r&  rM  c              3  J   K   | ]}t          |j        t                    V  d S rq   )r   r   r<   r*  s     r_   rv   z+compute_declaration_yaml.<locals>.<genexpr>   s/      MMqJqz#9::MMMMMMr`   r   operator_namer  r
  category_overriderw   schema_stringaten::r   schema_order_cpp_signatureschema_order_argumentsr  )moder  python_moduler!  r   is_factory_methodabstractr   )with_gilF)
deprecatedFhas_math_kernel)r'  r   r   flat_kwarg_onlyr  r   rA  rE  r   rJ  r   returns_typer!  r  r  anyr>   r>  r  r   r   r   r  r
  rF  r  rL  r   is_abstractr   r  )r   r!  r  cpp_argsr   schema_order_jit_argumentsrJ  cpp_schema_order_typescpp_returnsrI  rM  r*  r#  r+  s              @@@r_   compute_declaration_yamlrZ    s   "6q"9"9G HGaf&6&FGGGN8816#3#7888K!6	%%  I ",,..H	 	 	 	 	 	 	 	 	I "&af&C&C&E&E!F!F	 	 	 	 	 	 ,	 	 	  ,   "16>%@@@IIKKK$/!W!W499=S3T3T!W!W!W 	MMHMMMMM 	-N!*, 
 SXaf%%&c!&+"2334c!&+";<<=)1+GH#'(':'F##B /qv//0)$)+EF%'=>0<<=AO$;bbQ (01 "34'Q^,! HI/	
  r`   c                    | j         s	| j        d uoM| j                                        t          j        k    p&| j                                        t          j        k    S rq   )r   r   r   kindr9   
functionalr   r  s    r_   "has_autogenerated_composite_kernelr^  B  sJ    L=A1= 	..U!&++--:CU2Ur`   dict[DispatchKey, BackendIndex]c           	         t          j         j                  }t          j         j        j                                                  }t          j         j                  }d                    d |D                       }d j         t           fd|	                                D             t          j        hk    o9 fd|	                                D             t          j        t          j        hk              t           j        pt                               d}| d| d| d	t          j        |           d
S )Nr&  c              3  b   K   | ]*}|                                                                 V  +d S rq   )
no_defaultr  r*  s     r_   rv   z4compute_registration_declarations.<locals>.<genexpr>O  s6      ==1,,..======r`   rH  c                D    h | ]\  }}|                               |S rr   r   rs   r   r   r   s      r_   r<  z4compute_registration_declarations.<locals>.<setcomp>T  s,    FFF41aall1ooFQFFFr`   c                D    h | ]\  }}|                               |S rr   rd  re  s      r_   r<  z4compute_registration_declarations.<locals>.<setcomp>V  s,    JJJtq!!,,q//JJJJr`   )schemadispatchr  r  r4  z); // r   )
dispatcherr   r   rS  r!  r  r   r  r   rz   r,   r   r   has_composite_kernelr^  jsondumps)r   rg   r   rS  r  r  comment_datas   `      r_   !compute_registration_declarationsrn  H  sc    ?16""D*16>::CCEEL''Dyy=======H#16##FFFF?0022FFF567 JJJJ4466JJJ5A
 
 q-V1STU1V1VWW$ $L   t  h  dj6N6N    r`   "provided_op_registration_allowlistlist[str] | Noneop_selection_yaml_pathc                    | |t          d          d }| t          |           }|t          j        |dd          }n*|t          j        |          }nt          j                    }|S )NzhBoth provided_op_registration_allowlist and op_selection_yaml_path can NOT be provided at the same time.TF)r   r   rD   &from_legacy_op_registration_allow_listfrom_yaml_pathget_nop_selector)ro  rq  op_registration_allowlistr_  s       r_   get_custom_build_selectorrw  i  s    
 	+6".4
 
 	

 26)5$'(J$K$K! ,#J%
 

 
 	+#23IJJ#466Or`   3Sequence[NativeFunction | NativeFunctionsViewGroup]c                4   d	d}t          t                    }| D ]}|j                                        }|j        }|t
          j        k    r\|j                                        }|||         v r-t          d| d||         	                                           |||         |<   |||         v r,t          | d||         	                                           |||         |<   t          t          ||                                                    S )
Nd1dict[ViewSchemaKind | SchemaKind, NativeFunction]rn   /list[NativeFunction | NativeFunctionsViewGroup]c                |   g }t           j        | v r|                     t           j                  }|                     t           j        d           }|                     t          j        d           }|                    t          |||                     |                    | 	                                           |S )N)view	view_copyview_inplace)
r?   aliasingr   aliasing_inplacer9   r]  r   r6   extendr  )rz  r   r~  r  r  s        r_   maybe_create_view_groupzEget_grouped_by_view_native_functions.<locals>.maybe_create_view_group  s     BD"a''55011D55!@$GGLj3T::ILL('!-     	QXXZZ   r`   zDuplicate schema kind z in z already in )rz  r{  rn   r|  )r   r   r   view_signatureview_schema_kindr?   non_aliasingr\  r   rR  r   rE   r  )rf   r  grouped_by_viewsr   rg  	view_kindr\  s          r_   $get_grouped_by_view_native_functionsr    sQ      . 	D   4 4&&(($%$6	
 3336;;==D'///$XTXX7G7O7T7T7V7VXX   ./V$T**,V444$ OO.>v.F.K.K.M.MOO   34V$Y//	13C3J3J3L3LMMNNNr`   /Sequence[NativeFunction | NativeFunctionsGroup]c           	         dd}t          |           }t          t          |t          |                                                              S )Nrz   dict[SchemaKind, NativeFunction]rn   r  c                .   t          j        |           }|}t          d |                                 D                       r1t	          dt          |                                                      t          |                                           S |gS )Nc              3  (   K   | ]}d |j         v V  dS )	generatedN)r   rs   r   s     r_   rv   zJget_grouped_native_functions.<locals>.flatten_pre_group.<locals>.<genexpr>  s)      ==Q;!&(======r`   zVGenerated NativeFunctions should have been grouped into NativeFunctionsGroup objects: )r5   	from_dictrT  r  r   r   )rz  r%  s     r_   flatten_pre_groupz7get_grouped_native_functions.<locals>.flatten_pre_group  s     !*1--9 ==!((**===== $H59!((**5E5EH H   

###3Jr`   )rz  r  rn   r  )rC   r   rE   r  )rf   r  pre_grouped_native_functionss      r_   get_grouped_native_functionsr    s\       " $>>N#O#O #T*F*M*M*O*O%P%PQQ  r`   )native_function_decl_gengrouped_native_functionsr  JCallable[[NativeFunctionsGroup | NativeFunction, BackendIndex], list[str]]dict[str, list[str]]c                   t          t                    }| D ]}t                      }t                      }|                                D ]\  }}|                    |          }	|	r2|	j        }
|                    |           |                    |
           nt          }
t          |          dk    rt          d| d|           ||
         
                     |||                     |S )NrU   z6Codegen only supports one namespace per operator, got z from )r   r   r   rz   r6  r7  r   r*   r   r   r  )r  rg   r  ns_grouped_kernelsr   native_function_namespacesdispatch_keysrj   backend_idxr8  r  s              r_   get_ns_grouped_kernelsr    s3    0;4/@/@%  %(UU")8)>)>)@)@ 	 	%L+*55a88 5,:	!!,///*..y99994	-..22$M5M M=JM M   y)00((K88   	  r`   r  c           
     F   g }d}|                                  D ]\  }}t          |dd          }t          t          j        |                    }|                    d|j         d|                    |           d|j         d	                    |                     |S )Nr   rw      namespace_strentity_name	max_level	
        )
rz   rJ   r   r   fromkeysr  prologuer  epiloguesplit)r  declarationsnewliner  kernels	ns_helperordered_kernelss          r_   8get_native_function_declarations_from_ns_grouped_kernelsr    s     !LG06688 
 
	7##
 
 
	 {3G<<==
 o     E'NN	
 	
 	
 	
 r`   c                F    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.
    r  rg   r  )r  )r  r  )r  rg   r  r  s       r_    get_native_function_declarationsr    s?      0!9'!9  
 D-   r`   %NativeFunction | NativeFunctionsGroupr  c           	        |                     |           }|r^d|j        vrUt          | t                    r| j        j        n| j        j        j        }t          d| d|j         d|j         d          |r|j        nt          S )Nr1  zThe kernel for function z with dispatch key z has a namespace z% and it's not ending with '::native'.)
r6  r7  r   r4   r   r   r]  r   rj   r*   )r   r  r8  	func_names       r_   get_kernel_namespacer  (  s     #--a00 
J.>.LLL%a88TAFKKal>O>T 	 ey e e!,!9e e/=e e e
 
 	
 +;X&&@Xr`   r{   rocmrB  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          ||          
                    dd                                        ||                                                   ||                     t          |t                    r|j        n|j        j        }||
         vrt          t                    |
<   |
         |                              ||                     D ]t!                             dk    rt#                    d|
         D ]?}|
         |         sd| d	 d
|                    |
         |                    dz  @|	                    |                     dfd                              |                     |	S )Nr   r  rB  class_method_namer  r   r  r1  rw   r   )r  z
TORCH_LIBRARY_IMPL(r&  z, m) {
    z
}zRegisterDispatchDefinitions.inic                 p    j         j                  rdnd                                         dS )Nrw   )ns_prologuens_epiloguedispatch_anonymous_definitions"static_init_dispatch_registrationsdeferred_dispatch_registrationsdispatch_namespacedispatch_namespaced_definitions)r  r  r  )anonymous_definitionsrj   kernel_namespacens_definitionsr  registration_bodyr  s   r_   r   z1get_native_function_definitions.<locals>.<lambda>  sR    #,#5#,#56K(7 7;+""*79*6*<*<*>*>7EFV7W  r`   )r   r   r   destRegisterDispatchKeyrK   NAMESPACED_DEFINITIONANONYMOUS_DEFINITIONr  r  r   r  r   r4   r  r]  r   rJ   r  substitute_with_templater  )r{   r  rj   r  r_  r  rB  r  r  definitionsregistrationsr  ns_genanonymous_genreg_genr   r  r  r  r  r  r  s     `    `         @@@@@r_   get_native_function_definitionsr  <  s     K+6t+<+<N2=d2C2C5@5F5FMG%$(G  F ,#(G  M &(G  G & 
 
/!MMMUU
 
 	'(//F1II	
 	
 	
 	./66M!	
 	
 	
 &a88TAKKal>T 	 M*:;;;.9$.?.?M*+&'	299GAJJ	
 	
 	
 	
 + 
 
~./00A55#2BCCC	&'78 	 	I !129=  "" "!-" "\\- 01)<==" " "  	''1           eGnn!	
 	
 	
 	
& r`   c           
        g }t          t                    }d}t          j        |t          j        ||d d|          }	| D ]]}
t          |
|                              d|                                          }||         	                     |	|
                     ^|
                                D ]\  }}t          |          dk    rt          |dd	          }t          t          j        |                    }|	                    d|j         d|                    |           d|j         d
                    |                     |S )Nr   F)r  r  r  rB  r  r  r   rw      r  r  )r   r   r  r  rK   NAMESPACED_DECLARATIONr  r   r  r  rz   r   rJ   r   r  r  r  r  r  )r  rj   r  r_  r  rB  r  r  r  r   r   r  r  r  r  s                  r_   get_namespaced_declarationr    s    !L/:4/@/@G#%(-  D & 
 
(1+FFFNNl((**
 
	 	9%,,DGG	
 	
 	
 	
 16688 
 
	7w<<1##q
 
 
	 {3G<<==
 o     E'NN	
 	
 	
 	
 r`   schema_selectortuple[list[str], str]c           
        t          t                    }| D ]"}||j                                     |           #d}g }d }|                                D ]k\  }}t          t          t          |          |                    }	|dk    r|	}8|}d}
|t          v rdnd}|d| d| d|
                    |	           d	z  }l||fS )
Nrw   atenr   TORCH_LIBRARY_FRAGMENTTORCH_LIBRARYr   r4  z	, m) {
  z
};)	r   r   r  r   rz   rI   r^  r-   r  )rf   r  ns_native_functionsnative_functionschema_registrationsaten_schema_registrationscustom_namespacer  r   schema_registrations_bodytabtorch_library_macros               r_   (get_native_function_schema_registrationsr    s5   
 <Gt;L;L+ O OO56==oNNNN "/5577  	5$(^O44e<<%
 %
!
 (A%%(C
  333 )($  
 ! %% %'% %88%&&% % %    &';<<r`   structured_native_functionsSequence[NativeFunctionsGroup]static_dispatch_idxcpu_fmfunctions_keysset[DispatchKey]r  Sequence[DispatchKey]c           
     4   
 |                     dfd           d  D             fd D             |                     dfd           |                     dfd           |                     d	 fd
           t                    |                     dfd           |	D ]]t          ||          }|v rEd d|                     d	dfd           |                     dd
fd           ~^d S )NzNativeMetaFunctions.hc                 N    g t          t          t                               dS )N)NativeMetaFunctions_includes NativeMetaFunctions_declarationsr   rI   r  )r  s   r_   r   z(gen_aggregated_headers.<locals>.<lambda>  s.    ,.04:<WXX1 1
 
 r`   c                8    g | ]}t           j        |j        v |S rr   r>   r>  r  rs   fns     r_   r   z*gen_aggregated_headers.<locals>.<listcomp>  s-       2;)F)F)F)F)Fr`   c                    g | ]}|v|	S rr   rr   )rs   r  method_native_functionss     r_   r   z*gen_aggregated_headers.<locals>.<listcomp>  s+     # # #3J)J)J)J)J)Jr`   MethodOperators.hc            	     v    g t          t          t          t          j                                       dS )Nrr  MethodOperators_includesMethodOperators_declarationsr   rI   ro  rK   r  )r  r  s   r_   r   z(gen_aggregated_headers.<locals>.<lambda>  sL    (*,0$*8K   , - -
 
 r`   zOperators.hc            	     x    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_   r   z(gen_aggregated_headers.<locals>.<lambda>$  sO    #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   rI   r  rf   r  s   r_   r   z(gen_aggregated_headers.<locals>.<lambda>3  sN    -J#. . $A"A&*#%%$ ' '
 
 r`   )r  rg   zNativeFunctions.hc                     dg dS )Nz%#include <ATen/NativeMetaFunctions.h>)NativeFunctions_includesNativeFunctions_declarationsrr   )r  s   r_   r   z(gen_aggregated_headers.<locals>.<lambda>F  s    )P(Q,8
 
 r`   r  Functions_inl.h>DispatchKeyFunctions.hc                 (    t                     dS N)rj   inline_headersr   rj   inl_headerss   r_   r   z(gen_aggregated_headers.<locals>.<lambda>T  s    $'$5$5&1  r`   Functions_inl.hDispatchKeyFunctions_inl.hc            
     f    g                                  t                    d          dS )NT)r  rj   r  r_  r  rB  )!DispatchKeyFunctions_inl_includesr   dispatch_namespaced_declarations)r  r  )rg   rj   r  r  r_  s   r_   r   z(gen_aggregated_headers.<locals>.<lambda>\  sJ    9;*6*<*<*>*>8R1I%1$3L$A!)!#9 9 9  r`   )writer  r|   write_with_template)rf   r  r  r  r_  rg   r  rk   r  r  r  r{   r  rj   r  r  r  s   ``````    ` @@@@@r_   gen_aggregated_headersr    sK     LL	
 	
 	
 	
   %  # # # #%# # # LL	
 	
 	
 	
 	
   LL	
 	
 	
 	
 	
   LL	
 	
 	
 	
 	
   4!9'  L LL	
 	
 	
 	
   &  +L*fMM>))JLJJJK"",,,(       ""000,         " B= r`   ops_fmc                   t          t                    | D ]"}|j                                     |           #t          t                    }|D ]$}|j        |                             |           %                                D ]\  |                     ddfd           |                     ddfd           |                    g           }d |D             t                    dk    r|                     d	d
fd           t          ||t          j
                  |                     ddfd           dD ]#\  |                     dfd           $|	D ]2|vr                                g                                 D ]\  |                    g           }t          t          t          j        |         t          j        ||
dd d          |                    t                    dk    ru                               |                     d ddfd           t#          ||          }d d|                     ddfd           |                     ddfd            ~4|                    d!fd"           d S )#Nz_ops.hz
Operator.hc            	     t    dt          t          t          t          j                                       iS )Nr  r  r  )	functionsr  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  sF    (".<O   " ! !
 r`   z.hz
Function.hc                     t          t          fd                     d dt          t          t                                           dS )Nc                &    t          |           S )N)r   )r  r  r  s    r_   r   z<gen_per_operator_headers.<locals>.<lambda>.<locals>.<lambda>  s    #=.A$ $ $ r`   r  _ops.h>)static_dispatch_ops_headersoperator_includesfunction_definitions)r   rI   r  )r!  r   r  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  sy    /3    "	 0 0 &I4%H%H%H(,'))! ) )  r`   c                J    g | ] }t          |t                    |j        |!S rr   )r   r5   r   r  s     r_   r   z,gen_per_operator_headers.<locals>.<listcomp>  sE      
  
  
"233 
 9; 
 
  
  
r`   r   z_meta.hzNativeMetaFunction.hc                 L    dt          t          t                               iS )Nmeta_function_declarationsr  )structured_functionss   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  s,    0$ =?S 3 3 r`   r  z	_native.hzNativeFunction.hc                     rd dng  dS )Nr  z_meta.h>)extra_includesnative_function_declarationsrr   )r  is_structuredr   s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  s+    <IQ8$8888r0<	  r`   ))	Functionsrw   )	Operators_ops)NativeMetaFunctions_meta)NativeFunctions_nativec                 r      dfdt                                                    D               dg iS )N	_includesc                     g | ]
}d |  dS )r  .h>rr   )rs   r   suffixs     r_   r   z>gen_per_operator_headers.<locals>.<lambda>.<locals>.<listcomp>  s9     ) ) ) <$;;;;) ) )r`   _declarations)rh  rR  )categoryfunctions_by_root_namer<  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  sa    &&& ) ) ) ) &'='B'B'D'D E E) ) ) ***B r`   TFr  r  z_dispatch.hzDispatchKeyFunction.hc                      dS )N)r  r  rr   )r  r  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  s    *<8D  r`   r  r  r  r  c                 (    t                     dS r  r  r  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  s     #L 1 1"-  r`   r  r  c                 B    fdt                     D             g dS )Nc                "    g | ]}d | d dS )r  r  r	  rr   )rs   r   r  s     r_   r   z>gen_per_operator_headers.<locals>.<lambda>.<locals>.<listcomp>  s>     6 6 6 R$QQ1CQQQ6 6 6r`   )r  r  r  )rh  )dispatch_namesr  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>  sE    &86 6 6 6 &~ 6 66 6 6 57  r`   r  c                 `    t          d                                  D                       g dS )Nc              3  Z   K   | ]&\  }}t          d  |D                       d| dV  'dS )c              3  <   K   | ]}t           j        |j        v V  d S rq   r  r  s     r_   rv   zGgen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>.<genexpr>(  s+      IIw~4IIIIIIr`   r  r%  N)rT  )rs   r   r!  s      r_   rv   z=gen_per_operator_headers.<locals>.<lambda>.<locals>.<genexpr>%  sb       / /#D)IIyIIIII/3d333/ / / / / /r`   r  )rh  rz   )r?  s   r_   r   z*gen_per_operator_headers.<locals>.<lambda>$  sI    (. / /'='C'C'E'E/ / / ) )
 -/
 
 r`   )r   r   r  r   rz   r  rx   r   r  r  #compute_native_function_declarationr  r  rE   r  rK   r  r|   )rf   r  r  r_  rg   r  rk   r  r  r  r  r  grouped_functions_by_root_namegroupgrouped_functionsr{   r>  r  rj   rD  r  r!  r?  r  r0  r   r,  r<  s     `             @@@@@@@@@@@@r_   gen_per_operator_headersrL  m  s     ?J$>O>O 8 8r|,33B7777 	D # * ; ;&t,33E::::17799 I
 I
i""OOO
 
 
 
 
	
 	
 	
  	""KKK     	
 	
 	
, ;>>tRHH 
  
' 
  
  

 011A5 	&&   &   
 
 
 8%6+%)%M
 
 

 	""     		
 		
 		
 		
 
 
& 	OOO     		
 		
 		
 		
 & < <~--)//115;;== 	 	OD) > B B4 L L,'55 !#*.8=   &  L <  A%%!!$'''&&99,999'        ,L*fMMFFFF
((($    	
 	
 	
 	,,,(    	
 	
 	
 B
LL	
 	
 	
 	

 
 
 
 
r`   core_fmper_operator_headersc                    |rt           ||||	|
|||           nt           |||||	|||           |                    d fd           |                    d fd           |                    d fd           |                    d	 fd
           d fd}|                    d|           dfd}|                    d|           d S )N)rf   r  r  r_  rg   r  rk   r  r  r  r  )rf   r  r  r  r_  rg   r  rk   r  r  r  zTensorBody.hc            	         t          t          t          t          j                                       t          t          t          t          j                                       dS )N)rq  rr  )tensor_method_declarationstensor_method_definitions)r   rI   r  rK   r  r  r
  s   r_   r   zgen_headers.<locals>.<lambda>`  s    *.'%18K   % + + *.'%08K   % * *
 
 r`   zRedispatchFunctions.hc                 Z    dt          t          t                                           iS )Nfunction_redispatch_definitions)r   rI   r  rf   s   r_   r   zgen_headers.<locals>.<lambda>x  s.    -t2446FGG0 0
 r`   zRegistrationDeclarations.hc                 $    d fdD             iS )Nregistration_declarationsc                0    g | ]}t          |          S rr   )rn  )rs   r   rg   s     r_   r   z1gen_headers.<locals>.<lambda>.<locals>.<listcomp>  s3     * * * 2!_EE* * *r`   rr   )rg   rf   s   r_   r   zgen_headers.<locals>.<lambda>  s3    ' * * * *)* * *
 r`   zVmapGeneratedPlumbing.hc                 "    t                     S rq   r$   rU  s   r_   r   zgen_headers.<locals>.<lambda>  s    +@AQ+R+R r`   rn   r,  c                 &   t                      } t                      }D ]}|                    t          |j        j        j                             |                    |j        j        j        j                   |                     d |j                                        D                        |h dz  }d                    d t          |          D                       d                    d t          |           D                       dS )Nc              3  $   K   | ]}|j         V  d S rq   rz  )rs   r   s     r_   rv   zAgen_headers.<locals>.gen_aten_interned_strings.<locals>.<genexpr>  s$      PPcPPPPPPr`   >   orandnotxorbitorcomplor_eqand_eqbitandnot_eqxor_eqz \
c                    g | ]}d | d	S )z_(aten, rM  rr   rs   r   s     r_   r   zBgen_headers.<locals>.gen_aten_interned_strings.<locals>.<listcomp>  $    >>>#D###>>>r`   c                    g | ]}d | d	S )z_(attr, rM  rr   rh  s     r_   r   zBgen_headers.<locals>.gen_aten_interned_strings.<locals>.<listcomp>  ri  r`   )aten_symbolsattr_symbols)
r   r   r   r   r   r   updaterJ  r  rh  )attrsr$  r   rf   s      r_   gen_aten_interned_stringsz.gen_headers.<locals>.gen_aten_interned_strings  s   %%$ 	Q 	QDIIc$).-../// IIdin).///LLPPTY-M-M-O-OPPPPPPP 	 
 
 
 	
 $LL>>u>>>  $LL>>u>>> 	
 
 	
r`   zaten_interned_strings.hc                 L    dd                     t                               iS )Nenum_of_valid_tagsz,
)r  rh  )r   s   r_   gen_tags_enumz"gen_headers.<locals>.gen_tags_enum  s"    $uzz&2D2D'E'EGGr`   z
enum_tag.h)rn   r,  )rL  r  r  )rf   r   r  r  r  r_  rg   rM  r  rk   r  r  r  r  rN  ro  rr  s   ``  ` `          r_   gen_headersrs  /  s   $  
 -%= 3+!')	
 	
 	
 	
 	
 	-%=(C 3+!')	
 	
 	
 	
 MM	
 	
 	
 	
 	
  0 LL	
 	
 	
 	
   LL$	
 	
 	
 	
 	
   LL!#R#R#R#R  "
 "
 "
 "
 "
 "
H MM+-FGGGH H H H H H MM,.....r`   view_groups"Sequence[NativeFunctionsViewGroup]aoti_fm
cpu_vec_fmforce_schema_registrationupdate_aoti_c_shimaoti_backendsset[DispatchKey | None]extend_aoti_c_shimc                   !"#$%&'()*+,- d}rd}|D ]+$t          $||
          &|rdK"$%fd}ndK$fd}$         "t          t                    }D ]E}t          |t                    r|j        n|j        j        }||                             |           Ft          $          	                                %$t          j        k    (t          $          r|nddt          j        "|           |            (rt          j        "          ng d}dL"$&(fd}&                    d$ ddd |$t          j        k    rdnd|dh           D ]ފ''j        j        rt)          $          s'j        j        j        j        *$t          j        u rS&|
urt/          d          &                    d* dd$'fd           |	                    d* dd'*fd           $t          j        u r)d#rd#&                    d* dd #$'*fd!           t/          d"$ d#          &-t5          || |||$           dM fd%}|
                    d&|           }|rt9          j                    }t=           |'          \  !+|
                    d(!+fd)           dNd-}|
                    d. |fd/d0tA                    id1h d23           |
                    d4tB                     |                    d5tB                     |                    d6 fd7           dOd9)dP)fd:}t                    t                    z   } d; tE          d<           D             ,d= tE          d>           D             -| #                    ,-fd? D                        |
                    d@| ||dh dAB           |
                    dCfdD           |
                    dEfdF           |
                    dG)fdH           |
                    dIfdJ           d S )QNz#include <c10/cuda/CUDAGuard.h>
#include <ATen/cuda/ATenCUDAGeneral.h>
#include <ATen/cuda/CUDADevice.h>
#include <ATen/cuda/CUDAContext.h>z#include <c10/hip/HIPGuard.h>
#include <ATen/hip/ATenHIPGeneral.h>
#include <ATen/hip/HIPDevice.h>
#include <ATen/hip/HIPContext.h>rn   r  c                 6   g } D ]}d}                     |          rd}nht          |t                    r0t          fd|                                D                       rd}n#|j        rt          j        t          j        fv rd}|s| 	                    d|j
         d           t          j        k    r| 	                    d|j
         d           v r!| 	                    d|j
         d d           t          t          |                     S )	NFTc              3  B   K   | ]}                     |          V  d S rq   rd  )rs   r  r   s     r_   rv   z=gen_source_files.<locals>.operator_headers.<locals>.<genexpr>  sJ       E E9;0044E E E E E Er`   r  
_native.h>r;  r  r	  )r   r   r5   rT  r!  r   r,   Metar   r   r  rh  r   )headersr  is_registeredr   rj   r  r  r  s      r_   operator_headersz*gen_source_files.<locals>.operator_headers  s   1 " "A$)M$//22 -(, $A';<< - E E E E?@{{}}E E E B B - )-  -,#(#J; + + )-( ! NN#P#P#P#PQQQ$&MN N  'MQ['M'M'MNNN#~55`!+``@R```   c'll+++r`   c                     dg} t           j        k    r|                     d           v r|                     dd           | S )Nz!#include <ATen/NativeFunctions.h>z#include <ATen/Functions.h>r  r  )r,   r   r   )r  rj   r  s    r_   r  z*gen_source_files.<locals>.operator_headers	  sZ    >?;#UUUNN#@AAA>11NN#Q\#Q#Q#QRRRr`   rw   )extra_cuda_headersexternal_backend_headersdispatch_headersops_headersdispatch_helpersgnfr  r  c                :    dt          | gd	  	        iS )Ndispatch_definitionsT)	r{   r  rj   r  r_  r  rB  r  r  )r  )r  r   rj   r{   r  r  r_  r  s    r_   "register_dispatch_key_env_callablez<gen_source_files.<locals>.register_dispatch_key_env_callable6	  sA     '(G.1U!- -%4S)=
) 
) 
) r`   Registerz.cppzRegisterDispatchKey.cppc                    | j         S rq   r  )xs    r_   r   z"gen_source_files.<locals>.<lambda>K	  s    Q[ r`   r  rU   r  )key_fnenv_callable
num_shardsbase_envsharded_keysz,Expected fm to be cpu_fm for DispatchKey.CPU	UfuncCPU_zUfuncCPU.cppc                     t                    t          j                            t          j                  dS )N)meta_declarationnative_declarationnative_definitions)r  r  rH  compute_ufunc_cpu)rg   rj   r  s   r_   r   z"gen_source_files.<locals>.<lambda>\	  sD    ,Ma,P,P.2.V|</ / /3.DQ.G.G  r`   UfuncCPUKernel_zUfuncCPUKernel.cppc                 2    t          j                   dS )N)r   r  )r  compute_ufunc_cpu_kernel)r  r   s   r_   r   z"gen_source_files.<locals>.<lambda>g	  s      $.2.KA.N.N  r`   z%#include <ATen/native/cuda/Loops.cuh>z$#include <ATen/native/hip/Loops.cuh>
UfuncCUDA_z.cuzUfuncCUDA.cuc                     t                    t          j                            t          j                  dS )N)r   cuda_headersr  r  r  )r  r  rH  compute_ufunc_cuda)rg   r  rj   r  r   s   r_   r   z"gen_source_files.<locals>.<lambda>s	  sJ     $(4,Ma,P,P.2.V|</ / /3.Ea.H.H  r`   zunrecognized z
 for ufunc)rv  rz  rf   rg   r  r  ry  r|  c            
        fdD             } d | D             t          t          t          t          j                  |                     t          t          t          t          j                  |                     dS )Nc                4    g | ]}t          |          |S rr   )r  )rs   r  r_  s     r_   r   z@gen_source_files.<locals>.gen_backend_select.<locals>.<listcomp>	  s9     
 
 
-A"h-O-O

 
 
r`   c                $    g | ]}d |j          dS )r  r%  r  r  s     r_   r   z@gen_source_files.<locals>.gen_backend_select.<locals>.<listcomp>	  s3       @B;bl;;;  r`   )r  !backend_select_method_definitions%backend_select_function_registrations)r   rI   r  rK   r  r  )relevant_fnsrf   r_  s    r_   gen_backend_selectz,gen_source_files.<locals>.gen_backend_select	  s    
 
 
 
)
 
 
 FR   26():HEE| 2 2
 6:()<hGG 6 6
 
 	
r`   zRegisterBackendSelect.cpp)rf   r  zRegisterSchema.cppc                     rg n rg ndS )N)r  r  rr   )r  r  r  s   r_   r   z"gen_source_files.<locals>.<lambda>	  s-    .*+*.%&BB%
 
 r`   r  @NativeFunction | NativeFunctionsGroup | NativeFunctionsViewGroupr   c                    | j         S rq   r  )r  s    r_   key_funcz"gen_source_files.<locals>.key_func	  s     |r`   zOperators.cppc                h    d| j          dg t          t          j                  |           gdS )Nr  r;  r  )r  r  )r  ro  rK   r  r$  s    r_   r   z"gen_source_files.<locals>.<lambda>	  sV    !Hr|!H!H!H I %4G    !
 !
 r`   r     >   r  r  r  )r  r  r  r  r  zFunctions.cppzTensorMethods.cppzATenOpList.cppc                 L    dt          t          t                               iS )Naten_ops)r   rI   r  rU  s   r_   r   z"gen_source_files.<locals>.<lambda>	  s"    Xo7GHHII
 r`   r  c                B   t          | t                    rLd| j        j         dd| j        j         dg}| j        #|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        #|d| j        j         dd| j        j         dgz  }| j	        #|d| j	        j         dd| j	        j         dgz  }|S d| j         dd| j         dgS )Nr  r  r%  )
r   r6   r~  r  r  r5   r]  r  r   r  )r  r  s     r_   gen_op_headersz(gen_source_files.<locals>.gen_op_headers	  s    a122 "	 Caf&6BBB?af&6???G {&K!+*?KKKH!+*?HHH  N/00 	Hal&<HHHEal&<EEEAaeoAAA>aeo>>>	G y$I!)*=IIIF!)*=FFF  y$I!)*=IIIF!)*=FFF  N >ak===:ak::: r`   c                |     |           t          |           t          | t          j                           dS )N)r  func_definitionsfunc_registrations)r   r   r,   r   )r  rg   r  r_  s    r_   functionalization_env_callablez8gen_source_files.<locals>.functionalization_env_callable
  sU     *>!,, @! ! #E EF# #
 
 	
r`   c                (    i | ]}|j         j        |S rr   r   r   r  s     r_   
<dictcomp>z$gen_source_files.<locals>.<dictcomp>%
  s.     : : : 	
Q: : :r`   c                D    t          |                                           S rq   r   r!  r  s    r_   r   z"gen_source_files.<locals>.<lambda>'
  s    T!++--%8%8 r`   c                (    i | ]}|j         j        |S rr   r  r  s     r_   r  z$gen_source_files.<locals>.<dictcomp>)
  s+     4 4 4Q4 4 4r`   c                D    t          |                                           S rq   r  r  s    r_   r   z"gen_source_files.<locals>.<lambda>*
  s    D4G4G r`   c              3  T   K   | ]"}|j         j        v|j         j        v|V  #d S rq   r  )rs   r   structured_mapview_maps     r_   rv   z#gen_source_files.<locals>.<genexpr>,
  sL        6;n,,H1L1L 	
1L1L1L1L r`   zRegisterFunctionalization.cpp>   r  r  r  func_add_back_views_definitions!func_add_back_views_registrations)r  r  r  r  zFunctionalInverses.hc                 H    dt          t           fd                    iS )Nview_inverse_declarationsc                $    t          |           S rq   )r    r  r_  s    r_   r   z4gen_source_files.<locals>.<lambda>.<locals>.<lambda>F
  s    L !  r`   )r   rI   r_  rt  s   r_   r   z"gen_source_files.<locals>.<lambda>C
  s?    '     	 * *	
 r`   zViewMetaClasses.hc                 H    dt          t           fd                    iS )Nview_meta_declarationsc                $    t          |           S rq   )r!   r  s    r_   r   z4gen_source_files.<locals>.<lambda>.<locals>.<lambda>T
      J8UVWW r`   r   rE   r  s   r_   r   z"gen_source_files.<locals>.<lambda>Q
  s5    $dWWWW ' '
 r`   zViewMetaClasses.cppc                     t          t          fd                    t          t                               dS )Nc                $    t          |           S rq   )r"   r  s    r_   r   z4gen_source_files.<locals>.<lambda>.<locals>.<lambda>`
  r  r`   )view_meta_implementations
op_headersr  )r  r_  rt  s   r_   r   z"gen_source_files.<locals>.<lambda>]
  sO    )-WWWW * * yEEFF
 
 r`   zCompositeViewCopyKernels.cppc            	     0   d D             d D             z   t          t          t           t          j                                               t          t          t
                              t          t          t                              dS )Nc                    g | ]<}d                      d |j        |j        gn|j        |j        gD                       =S )r   c              3  <   K   | ]}d |j          d|j          dV  dS )r  _ops.h>
#include <ATen/ops/r  Nr  r  s     r_   rv   z@gen_source_files.<locals>.<lambda>.<locals>.<listcomp>.<genexpr>|
  sb       	 	 B!+ B B +,+	B B B	 	 	 	 	 	r`   )r  r  r~  rs   r  s     r_   r   z6gen_source_files.<locals>.<lambda>.<locals>.<listcomp>{
  sn         		 	 	 %&K$7afak=R	 	 	 	 	  r`   c                p    g | ]3}d                      d |j        |j        |j        fD                       4S )r   c              3  R   K   | ]"}|d|j         vd|j         d|j         dV  #d S )Nr  r  r  r  )r   r  r  s     r_   rv   z@gen_source_files.<locals>.<lambda>.<locals>.<listcomp>.<genexpr>
  sl         }AF)B)B	B!+ B B*++B B B *C)B)B)B r`   )r  r   r  r]  r  s     r_   r   z6gen_source_files.<locals>.<lambda>.<locals>.<listcomp>
  sc     	 	 	  		    iALA	    	 	 	r`   )r  #CompositeViewCopyKernel_Definitions(GeneratedCompositeFunctional_Definitions!GeneratedCompositeOut_Definitions)r   rI   r#   r,   r   rA   rB   )rg   r  rt  s   r_   r   z"gen_source_files.<locals>.<lambda>z
  s      %  	 	 5	 	 	. 48.''N 
   	4 	4 9=3/ 9 9 26,/ 2 2Q.
 .
 r`   )rn   r  )r  r  rn   r  )rn   r  )r  r  rn   r   )r  r  rn   r  )r  r  rn   r  )$r|   r   r   r   r4   r  r]  r   r   r  r,   r   r/   r  gen_registration_headersgen_registration_helperswrite_sharded_with_templateCPUr  ufunc_inner_loopr1   r   r   r   r  CUDAr   r  rD   ru  r  write_shardedr  r   rE   r  ).rf   r  r  rt  r_  r  rg   rv  rM  rw  r  rk   r  r  r  rx  rN  r  ry  rz  r|  r  r  ns_grouped_native_functionsgrouped_native_functionr  register_dispatch_key_base_envr  r  r  r  r  
all_groupsr  r   r  rj   r  r{   r  r  r  r   r  r  r  s.   ```````      ``  `               @@@@@@@@@@@@@r_   gen_source_filesr    s   0&
  $$ & c c+L*fMM 2	&, &, &, &, &, &, &, &, &, &, &,T       (5&1$&7&7#'? 	S 	S# 5~FFB'11,7A 
 (	299:QRRRR ..4466
 KMM 	 $L11#"4"4(* $ =3T! ! ,+-- (-m<<<*
 *
&"	 	 	 	 	 	 	 	 	 	 	 	" 	&&)|)))%$((;(KO;;qq301 	' 		
 		
 		
 - ,	O ,	OA5) 1F|1T1T <$).D{..V##()WXXX&&****"     
 
 
 ..0d000(        !111F J#IL&&****"           %%M\%M%M%MNNNB#)'$?---	 	 	 	
 
 
 
 
 
 
( LL,.@AAAO  >*;==
 	1)?	 	 	! LL	
 	
 	
 	
 	
 	

 
 
   
 
 
 
 
 ,-J#. .

 
 
 
'    4 LL$'''MM%t,,,MM	
 	
 	
 	
  % % % %N
 
 
 
 
 
 
 
$ 	())D- - 	 : :88:UVV: : :N4 4 )*G*G U U4 4 4H      !      '3
 
 
     LL		
 		
 		
 		
 		
   LL	
 	
 	
 	
 	

 
 
 LL	
 	
 	
 	
 	
 	
  : LL&.	
 .	
 .	
 .	
 .	
 .	
1 1 1 1 1r`   c                :    |                      dfd           d S )NzDeclarations.yamlc                 6    t          d  D                       S )Nc                ,    g | ]}t          |          S rr   )rZ  r  s     r_   r   z;gen_declarations_yaml.<locals>.<lambda>.<locals>.<listcomp>
  s!    SSSQ5a88SSSr`   )r
  rU  s   r_   r   z'gen_declarations_yaml.<locals>.<lambda>
  s    SSBRSSSTT r`   )r  )r  rf   s    `r_   gen_declarations_yamlr  
  s4     LLTTTT    r`   r	   c                 X    t          t                    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
    )r	   __file__parentresolverr   r`   r_   get_torchgen_rootr  
  s    
 >> ((***r`   c                 N  #$% t          j        d          } |                     dddd           |                     dd	d
           |                     ddd           |                     ddd           |                     ddddd           |                     dddd           |                     ddd           |                     ddd           |                     ddd            |                     d!dd"           |                     d#d$d%d&'           |                     d(d)d*           |                     d+d,d%d-'           |                     d.d/d%d0'           |                     d1d2dd3           |                     d4d5dd6           |                     d7t          d%g d8g d8d9:           |                     d;dd<           |                     d=dd>           |                                 %t          %j        %j                  }t          j	        
                    %j        d?          }t          j	        
                    %j        d@          }dAdBlm} t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        h}t          j        t          j        d h}t/                      }t          j        t          j        t          j        h#%j        s%j        r5|                    #           |                    t          j                   n(|                    #           #fdC|D             |d d <   %j        s%j        r?|                    t          j                    |                    t          j                    nM|                    t          j                    t          j         |v r ||!                    t          j                   = %j"        sM|                    t          j                   t          j        |v r ||!                    t          j                  = %j#        r%fdD|D             }tI          |||          }tJ          |         }	|j&        |j'        c}
$tQ          |
          }dE |D             }tS          |
          }dF |D             }%j*         dG}tW          |          ,                    dHdHI           %j*         dJ}tW          |          ,                    dHdHI           %j-         }tW          |          ,                    dHdHI           t]          %|K          }t]          %L          }t]          %L          }t]          %L          }t]          %|K          }t]          %|K          }dM|i}%j        rt]          %L          |dN<   g }%j/        rJ$fdO%j/        D             }%j/        D ]/}t          j0        |          }||vr|                    |           0dP%j1        v rgte          doi dQ|
dR|dS|dT|dU|dV|dW$dX|dY|dZ|d[|d\|d]|d^|d_%j3        d`%j4        da%j5        db%j6        dc%j        dd|de%j7         df%j1        v r(tq          |
|	||||$||||||%j3        %j5        g           dh%j1        v rts          |
|i           %j:        rtW          %j:                  ;                                }|j<        }|j=        }|djf|dkf|dlf|dmfgdn |>                                D             z   D ]<\  }} | |z   }!|j?        | |z   z  }"|@                    |!t          |"                     ;d S d S )pNzGenerate ATen source files)descriptionz-sz--source-pathz!path to source directory for ATenzaten/src/ATen)helpr  z-oz--output-dependenciesz:output a list of dependencies into the given file and exit)r  z	--dry-run
store_truez5run without writing any files (still updates outputs))actionr  z--per-operator-headersz2generate separate headers per operator in ATen/opsz-dz--install-dirz--install_dirzoutput directoryzbuild/aten/src/ATenz--aoti-install-dirz--aoti_install_dirz%output directory for AOTInductor shimz(torch/csrc/inductor/aoti_torch/generatedz--rocmz=reinterpret CUDA as ROCm/HIP and adjust filepaths accordinglyz--mpsz'Generate MPS registration code when setz--xpuz'Generate XPU registration code when setz--mtiaz(Generate MTIA registration code when setz--op-registration-whitelistz--op_registration_whitelist*zfilter op registrations by the whitelist (if set); each item is `namespace`::`operator name` without overload name; e.g.: aten::empty aten::conv2d ...)nargsr  z--op-selection-yaml-pathz--op_selection_yaml_pathaD  Provide a path to the operator selection (for custom build) YAML that contains the information about the set of selected operators and their categories (training, ...). Each operator is either a full operator name with overload or just a bare operator name. The operator names also contain the namespace prefix (e.g. aten::)z--backend-whitelistz--backend_whitelistzRfilter dispatch backend by the whitelist (if set), e.g.: CPU CUDA QuantizedCPU ...z--static-dispatch-backendz--static_dispatch_backendz?generate static dispatch code for the specific backend (if set)z!--skip-dispatcher-op-registrationz!--skip_dispatcher_op_registrationz0Avoid registering operators into the dispatcher.z--force-schema-registrationz--force_schema_registrationz}force it to generate schema-only registrations for all ops, includingthose that are not listed on --op-registration-whitelistz
--generate)r  sourcesdeclarations_yamlzGenerate only a subset of files)r   r  choicesr  r  z--update-aoti-c-shimzUpdate AOTInductor C shim after adding an entry to inductor_fallback_ops in torchgen/aoti/fallback_ops.py. WARNING: Do not use this unless you are sure what you are doing!!!z--extend-aoti-c-shima  This Flag indicates the generation of c shims for out-of-tree ATen ops,which is an extension to the In-tree ATen op c shims. This flag needs to be combined with---source-path=<out-of-tree native_functions.yaml>--aoti-install-dir=<in-tree aoti_install_dir>/extend   default is torch/csrc/inductor/aoti_torch/generated/extendWARNING: Do not use this unless you are sure what you are doing!!!znative/native_functions.yamlznative/tags.yamlr   )r  c                    g | ]}|v|	S rr   rr   )rs   r   MPS_KEYSs     r_   r   zmain.<locals>.<listcomp>g  s#    JJJ!8I8IA8I8I8Ir`   c                ^    g | ])}t          |          st          |          j        v '|*S rr   )r0   r   backend_whitelist)rs   r   optionss     r_   r   zmain.<locals>.<listcomp>y  sI     
 
 
&q))
 .1VVw7P-P-P -P-P-Pr`   c                <    g | ]}t          |t                    |S rr   )r   r5   r  s     r_   r   zmain.<locals>.<listcomp>  s8     # # #z!=Q/R/R#	# # #r`   c                <    g | ]}t          |t                    |S rr   )r   r6   r  s     r_   r   zmain.<locals>.<listcomp>  s9       a122	  r`   z/coreT)parentsexist_okz/ops)r  install_dir)r  cudaxpuc                D    g | ]}t          j        |                   S rr   )r,   parse)rs   keyrg   s     r_   r   zmain.<locals>.<listcomp>  s9     
 
 
 K-c223
 
 
r`   r  rf   r  r  rt  r_  r  rg   rv  rM  rw  r  rk   r  r  r  rx  rN  r  ry  rz  r|  r  )rf   r   r  r  r  r_  rg   rM  r  rk   r  r  r  r  rN  r  )rf   r  rw   cpu_vec_core_ops_c                "    g | ]\  }}|| d fS )r  rr   )rs   ru   	device_fms      r_   r   zmain.<locals>.<listcomp>  s(    SSS+<69iF&SSSr`   rr   )AargparseArgumentParseradd_argumentr   
parse_argsrw  op_registration_whitelistrq  osr   r  source_pathtorchgen.modelr  r,   r  r  r   r   r   r   r  MTIAr   MPS	SparseMPSSparseCsrMPSmpsry  rm  r   r	  XPUr   mtiar  r   ri   rf   rg   r  r  r  r	   mkdiraoti_install_dirrH   static_dispatch_backendr  generater  r  rx  rN  r  r|  rs  r  output_dependenciesr  r   stemrz   r  write_outputs)&parserr_  native_yaml_pathr   r  r  rz  r   parsed_yamlr   rf   r  r  !native_functions_with_view_groupsrt  core_install_dirops_install_dirr"  rM  r  rw  cuda_fmr  rv  rk   r  r  dp_keydepfile_pathdepfile_namedepfile_stemr{   r  varnamer   r  rg   r  s&                                      @@@r_   mainr4  
  s~
   $1MNNNF
0	     I    
 D    
  A    
 %     4:	     L    
 6    
 6    
 7     %%-	     ""M     *	     ##N	     ++?	     %%C	     ;;;;;;.     M     M  	 	 	 !!G()& H
 w||G$79WXXW\\'"57IJJN,,,,,,
 	-9-:	N 	 	M %%K!68PQH{ Kg0 Kh'''+/****8$$$JJJJ}JJJaaa{ Dg0 D;?++++/****(((?m++m11+/BBC< E()))},,m11+2BCCD  

 
 
 
"
 
 
 $$4nkRRK.~>J$# &o
  <<LMM# #+# # # )M) )% 2  K  "-444	   === ,222Ot<<<!24	   ====MNNNGw///F"7333J000GwOLLLF=MNNNG'"J{ ?-g>>>
5.0& +
 
 
 
6
 
 
 2 	+ 	+C &s++F^++""6***G$$$ 	
 	
 	
--	
%=%=	
 )D(C	
 $		

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

 TS
@P@P@R@RSSST 	1 	1JB |+G&&<*?@DWc$ii00001 1
	1 	1r`   __main__)rj   r,   rk   rl   rm   rG   rn   rG   )Nr}   F)r~   r   r   r   r   r   r   r   r   r   rn   re   )r}   )r~   r   r   r   rn   r   )r   r   rn   r   rq   )r   r   r   r   r   r   r   r   r   r   rn   re   )r   r   rn   r   )r   r   rn   r   )r   r   rn   r   )r   r4   r   r'   rn   r   )r   r4   r   r   rn   r  )r   r   rn   r  )r  r  r  r   rn   r   )r  r  r   r4   r   r'   rn   r   )r  r  r   r4   rg   r   rn   r   r  )r  r5   rn   r  )r   r4   r_  rD   rn   r   )r  r   rn   r   )r   r   rn   r   )r  r=   rn   r   )r  r  rn   r  )r   r4   rn   r  )r(  r   r)  r   r*  r   r+  r   r#  r,  rn   r   )r+  r&   r)  r   r*  r   r+  r   r#  r,  rn   r   )r   r4   rn   r   )r   r4   rn   r   )r   r4   rg   r_  rn   r   )ro  rp  rq  r  rn   rD   )rf   r   rn   rx  )rf   r   rn   r  )r  r  rg   r_  r  r  rn   r  )r  r  rn   r  )r  r  rg   r_  r  r  rn   r  )r   r  r  r'   rn   r   )r{   rG   r  r  rj   r,   r  r'   r_  rD   r  r   rB  r   r  r   r  r   rn   r  )r  r  rj   r,   r  r'   r_  rD   r  r   rB  r   rn   r  )rf   r   r  rD   rn   r  )rf   r   r  r  r  r  r  r   r_  rD   rg   r_  r  rG   rk   rl   r  r  r  r  r  r   rn   r   )rf   r   r  r  r  r   r_  rD   rg   r_  r  rG   rk   rl   r  rG   r  r  r  r  r  r   rn   r   ) rf   r   r   r   r  r  r  r  r  r   r_  rD   rg   r_  rM  rG   r  rG   rk   rl   r  rG   r  r  r  r  r  r   rN  r   rn   r   ),rf   r   r  r  r  r  rt  ru  r_  rD   r  r   rg   r_  rv  rG   rM  rG   rw  rG   r  rG   rk   rl   r  r  r  r  r  r   rx  r   rN  r   r  r   ry  r   rz  r{  r|  r   rn   r   )r  rG   rf   r   rn   r   )rn   r	   )rn   r   )
__future__r   r  	functoolsrk  r   r  collectionsr   r   r   dataclassesr   r   pathlibr	   typingr
   r   r   r   typing_extensionsr   r   torchgen.api.dispatcherapiri  torchgen.api.metar  torchgen.api.nativer  torchgen.api.structuredr   torchgen.destr  torchgen.apir   torchgen.api.translater   torchgen.api.typesr   r   r   r   r   r   r   torchgen.contextr   r   r   r   torchgen.gen_aoti_c_shimr   r   #torchgen.gen_functionalization_typer   r   r    r!   r"   r#   torchgen.gen_vmap_plumbingr%   r  r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   #torchgen.native_function_generationr@   rA   rB   rC   !torchgen.selective_build.selectorrD   torchgen.utilsrE   rF   rG   rH   rI   rJ   rK   torchgen.yaml_utilsrL   rM   collections.abcrN   rO   rP   rR   re   rh   rm  ri   r|   r   r   cacher   r   r   r   r   r  r  r  r/  r;  rG  r[  r^  ro  r  r  r  r  r  r  r  r
  r  r  r  r'  r3  r2  rZ  r^  rn  rw  r  r  rH  r  r  r  r  r  r  r  r  rL  rs  r  r  r  r4  ra   rr   r`   r_   <module>rP     s5   " " " " " " "        				 < < < < < < < < < < ( ( ( ( ( ( ( (       7 7 7 7 7 7 7 7 7 7 7 7 * * * * * *  , , , , , , , , ,                   $ $ $ $ $ $ $ $ $ , , , , , , , , ,             , , , , , ,                                                   = < < < < <                                                       8            ? > > > > >                  7 6 6 6 6 6 6 6  322222222 GCLLB        Z'9;L&MNN
 :<  ; ; ; ;57  7 7 7 7   , ,0 %1# 1# 1# 1# 1#h    ( / / / / ,01
 !&!%1 1 1 1 1 1@= = = =@
 
 
 
4	
 	
 	
 	
   (        ,  ,  ,  ,FR R R R$K K K K<F F F FX $` ` ` ` ` ` ` `0 $W& W& W& W& W& W& W& W&x $* * * * * * * *^ $) ) ) ) ) ) ) )^ $       < M M M M
y y y yx3 3 3 3 $@& @& @& @& @& @& @& @&TS S S S&   0
 
 
 
   ?' ?' ?' ?'F
 
 
 
@! ! ! !H U U U Ur    "   "!@   >0O 0O 0O 0Of   @ 	0     >   @ 	0     4   (_ _ _ _H, , , ,`!= != != !=Hv v v vr   DG/ G/ G/ G/Tp p p pf   + + + +z1 z1 z1 z1z	 zDFFFFF r`   