
    JThW                    <   S SK Jr  S SKrS SKrS SKrS SKJrJrJr  S SK	J
r
  S SKJr  S SKrS SKJs  Jr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJrJrJ r J!r!J"r"  S SK#J$r$  S SK%J&r&J'r'J(r(J)r)J*r*  S SK+J,r,  \(       a  S SK-J.r.  \" S/ SQ5      r/        SS jr0 S               SS jjr1SS jr2 S                 SS jjr3    S                         SS jjr4 S         S S jjr5\6S:X  a  \2" 5         gg)!    )annotationsN)Counterdefaultdict
namedtuple)Path)TYPE_CHECKING)DispatcherSignature)CodeTemplate)native_function_manager)get_grouped_native_functionsparse_native_yaml)BackendIndexBackendMetadataDispatchKeyNativeFunctionNativeFunctionsGroupOperatorName)SelectiveBuilder)	concatMapcontextFileManagerNamespaceHelperTarget)
YamlLoader)SequenceParsedExternalYaml)backend_keyautograd_key
class_namecpp_namespacebackend_indicesc                
  ^^^ [        S U5       Vs0 s H  nUR                  R                  U_M     snm[        U 5       n[        R
                  " U[        S9nS S S 5        [        W[        5      (       d   e/ SQnUR                  SS 5      mTc   S5       eUR                  SS 5      nUR                  SS 5      mTc   S5       eUR                  S	S
5      n[        U[        5      (       d
   SU 35       eUR                  SS
5      n[        U[        5      (       d
   SU 35       eUR                  S/ 5      n	U	c  / n	[        U	[        5      (       d   SU	 S[        U	5       S35       eUR                  S/ 5      n
U
c  / n
[        U
[        5      (       d   SU	 S[        U	5       S35       e[        U
5      nUR                  S/ 5      n[        U[        5      (       d
   SU 35       eUR                  S/ 5      nU	R                  U5        UR                  S0 5        UR                  S0 5        [        UR!                  5       5      S:X  d;   U  SSR#                  UR!                  5       5       SSR#                  U5       35       e            S%UU4S jjnS n[        U	5      S:  aC  [%        U4S j5         [&        R(                  " T5      nS S S 5        U" U	UUUUS9nX;  d   eUX/'   S n[        U5      S:  aH  [%        U4S  j5         [&        R(                  " S!T 35      nS S S 5        U" UUUUUS9nUU;  d   eUUU'   U GH  n[        U[*        5      (       a`  Uc  / O)X/   R-                  U5      4 Vs/ s H
  nUc  M  UPM     snnUc  / O*UU   R-                  U5      4 Vs/ s H
  nUc  M  UPM     snnOUc  / OGUR/                  5        Vs/ s H  nX/   R-                  U5      PM     sn Vs/ s H
  nUc  M  UPM     snnUc  / OHUR/                  5        Vs/ s H  nUU   R-                  U5      PM     sn Vs/ s H
  nUc  M  UPM     snnU Vs/ s H	  o3c  M  UPM     nnU Vs/ s H	  o3c  M  UPM     nn[        U5      S:X  a  GMR  [        U5      S:X  a  GMd   S"US   R0                   S#US   R0                   S$35       e   [3        UUUTU5      $ s  snf ! , (       d  f       GN= f! , (       d  f       GN3= f! , (       d  f       GN= fs  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )&Nc                d    [        U [        5      (       a  U /$ [        U R                  5       5      $ N)
isinstancer   list	functionsfs    R/var/www/auris/envauris/lib/python3.13/site-packages/torchgen/gen_backend_stubs.py<lambda>$parse_backend_yaml.<locals>.<lambda>3   s%    Z>::qcSQ[[]@SS    )Loader)
backendr   r    extra_headers	supportedautogradfull_codegen
non_nativeir_gensymintr/   z&You must provide a value for "backend"r   r    z,You must provide a value for "cpp_namespace"use_out_as_primaryFzHYou must provide either True or False for use_out_as_primary. Provided: device_guardzBYou must provide either True or False for device_guard. Provided: r1   z,expected "supported" to be a list, but got: z
 (of type )r6   z)expected "symint" to be a list, but got: r2   z+expected "autograd" to be a list, but got: r3   r4   r5   r   z contains unexpected keys: z, z). Only the following keys are supported: c                  > 0 nU  He  n[         R                  " U5      nUT;   d
   SU 35       e[        R                  " TU   R                  5      nXa;   a  US-  n[        UST
S9n	XU'   Mg     [        UUSUUS9$ )Nz Found an invalid operator name: _symintF)kernel
structuredr    T)dispatch_keyr7   externalr8   index)r   parse
dispatchernamefuncr   r   )backend_ops
symint_opsr>   r7   use_device_guardmetadataopop_namekernel_namemr    native_functions_maps             r*   create_backend_index0parse_backend_yaml.<locals>.create_backend_index   s     9;B"((,G22 27)<2 %//*>w*G*L*LMKy("uMA !"W  %1)
 	
r-   c                    > ST  S3$ )NzFThe provided value for "backend" must be a valid DispatchKey, but got . r/   s   r*   r+   r,      s    \]d\eefgr-   )r7   rG   c                    > ST  S3$ )NzThe "autograd" key was specified, which indicates that you would like to override the behavior of autograd for some operators on your backend. However "Autogradz" is not a valid DispatchKey.rR   rS   s   r*   r+   r,      s     OOViWtvr-   AutogradzCurrently, all variants of an op must either be registered to a backend key, or to a backend's autograd key. They cannot be mix and matched. If this is something you need, feel free to create an issue! z" is listed under "supported", but z is listed under "autograd".)rE   z	list[str]rF   zset[str]r>   r   r7   boolrG   rV   returnr   )r   rD   rC   openyamlloadr   r%   dictpoprV   r&   typesetextendlenkeysjoinr   r   rA   r   
get_kernelr'   r<   r   )backend_yaml_pathgrouped_native_functionsr!   r)   yaml_values
valid_keysr   r7   rG   r1   r6   
symint_setsupported_autogradr3   rN   r   backend_idxr   autograd_idxgrL   forward_kernelsbackward_kernelsr/   r    rM   s                          @@@r*   parse_backend_yamlro   +   s;    S$
@
A 	
Q
@ 
	 Aii*5 
!k4((((J ooi.GH HHt4JOOOT:M$T&TT$ %)=uE($// 
RSeRfg/ #~u=&-- 
LM]L^_- R0I	i&& 
6ykDQZOK\\]^& __Xr*F~fd## 
3I;jiHYYZ[# VJ$R8($// 
56H5IJ/
 ??>26L\" OOL"% OOHb!{!"a' 
8;CSCSCU9V8W X226))J2G1H	J'



 "

 !
 
 

 
> '+K
9~g
 &++G4K

 +1-
 111'2$'+L
"v
 ',,xy-ABL	
 ,1-
 ?222(4%%a(( &  .:EEaHII I   '  .l;FFqIJJ J  &  "#!.A (4??B!.     '  "#!.A (5@@C!.    '6Go1oG'7I'7!A'7I?#q(C0@,AQ,F 	
 =>Nq>Q>X>X=YYuw	
Fa &l \:}o O@ 
!	 P
 
"
 
* HIs}   !S-S2TTT(T(4T-?T- T2T7T7-T<UU(U2U>UU2
T
T
T%c                F    [        U5       nUR                  5       nS S S 5        Uc  / nX   R                  /Uc  / OX   R                  /-   n
[        [        [        S U
5      5      5      nU  Vs/ s HK  nUR                  R                  UR                  5       ;   d  M-  UR                  R                  U;  d  MI  UPMM     nn[        [        5      nU H-  nUXR                  R                        R                  U5        M/     SU S3n[        [        R                  " UW5       VVs/ s H   u  nnUR!                  S5      (       a  M  UPM"     snn5      nSnUR#                  5        H`  u  nn[%        U5      nUU   nUU:w  d  M  SS jnSR'                  U Vs/ s H  nU" U5      PM     sn5      nUSU S	U S
U SU SU S3-  nMb     US:X  d   U5       eg ! , (       d  f       GN= f! [         a  n	[        SU 35      U	eS n	A	ff = fs  snf s  snnf s  snf )Nz2Unable to read from the specified impl_path file: c                n    U R                  5        VVs/ s H  u  pXR                  4PM     snn$ s  snnf r$   )itemsr<   )r@   rJ   rH   s      r*   r+   *error_on_missing_kernels.<locals>.<lambda>  s.    HMHU3D7Woo. s   1z(.*)z::\s*([\w\d]*)\(: c                    [        U 5         [        R                  " U R                  5      R	                  5       sS S S 5        $ ! , (       d  f       g = fr$   )r   r	   from_schemarD   declr(   s    r*   create_decl-error_on_missing_kernels.<locals>.create_declC  s1    ,Q/.::166BGGI 0//s   .A
A
z$ is missing a kernel definition for z. We found z( kernel(s) with that name,
but expected zH kernel(s). The expected function schemas for the missing operator are:
z

)r)   r   rW   str)rX   readOSErrorAssertionErrorr@   r[   r&   r   rD   rC   ra   r   appendr   refindallendswithrr   r`   rb   )native_functionsr!   r   r   r   kernel_defn_file_pathr3   r)   backend_defnseindicesexpected_backend_op_namesexpected_backend_native_funcs#expected_backend_kernel_name_countsnative_fkernel_defn_regexxy!actual_backend_kernel_name_countsmissing_kernels_err_msgexpected_namefuncsexpected_overload_countactual_overload_country   expected_schemas_strs                             r*   error_on_missing_kernelsr      ss   '(AFFHM ) +112")F)L)L(MG
 :> 		
	: ";!A66;;388:: 	
 FFKK|+ 	
! " ; LWL' 2+%mm&8&89	

&
 2  
|+;<(/ **%6F	
FA::c? F	

)% ! C I I Ku"%e* A- P"&;;J $(99e-Lek!ne-L#M # ,0{K`Ja b%& '  ( # !L  #b(A*AA(Q )( @AV@WX
	.;.	
" .MsW   G2 G G2 2,H"H>H-H
H
 H
 
G/*G2 /G2 2
H<HHc                 \   [         R                  " SS9n U R                  SSSSS9  U R                  SS	S
SS9  U R                  SS[        SSS9  U R                  SS[        S SS9  U R                  5       n[        UR                  UR                  UR                  UR                  5        g )NzGenerate backend stub files)descriptionz-sz--source-yamlz--source_yamlzApath to source yaml file containing operator external definitions)helpz-oz--output-dirz--output_dirzoutput directoryz	--dry-runz	--dry_runF)r]   defaultr   z--impl-pathz--impl_pathz9path to the source C++ file containing kernel definitions)argparseArgumentParseradd_argumentrV   r|   
parse_argsrunsource_yaml
output_dirdry_run	impl_path)parseroptionss     r*   mainr   Q  s    $$1NOF
P	   nnCUV
[tUAS   H   !GW//'BSBSTr-   c                  ^^^^^^^	^
^ Tc   eSm
[        [        [        UU4S jU5      5      5      m	[        [        [        UU4S jU5      5      5      m[        U5      mU R	                  T S3SUU	UUUU
U4S j5        g )NzAAutogenerated file by gen_backend_stubs.py. Do not edit directly!c                8   > [         R                  " U TT   5      $ r$   dest#compute_native_function_declaration)r)   backend_dispatch_keyr!   s    r*   r+   4gen_dispatchkey_nativefunc_headers.<locals>.<lambda>~  s    $BB';<r-   c                B   > Tc  / $ [         R                  " U TT   5      $ r$   r   )r)   autograd_dispatch_keyr!   s    r*   r+   r     s1    (0  =='<=r-   NativeFunctions.hzDispatchKeyNativeFunctions.hc                 F   > TTR                   TTR                  TT -   TTS.$ )N)generated_commentnamespace_prologuer   namespace_epiloguedispatch_declarationsBackendNamer   )prologueepilogue)autograd_declarationsbackend_declarationsr   backend_namer   r   	ns_helpers   r*   r+   r     s/    !2"+"4"4$"+"4"4%9<Q%Q'/
r-   )sortedr^   r   r   write_with_template)fmr   r    r!   re   r   r   r   r   r   r   r   s    ` ` ```@@@@r*   "gen_dispatchkey_nativefunc_headersr   i  s     !!!K  " )		
	 #
 )		
  .I
  12&	
 	
r-   c                  ^ ^^^^^	^^^^^^ U SU S3/nU(       a  SR                  S U 5       5      mOSR                  S U 5       5      mTc   eUT   m[        [        [        R                  " T[
        R                  TSST SS9T5      5      nSm[        S	S
9mSmSmU(       a  [        S5      nUR                  TUS9mO[        S5      nUR                  U
TUS9mT R                  ST S3SUUUUUU UUUU	UU4S j5        g )N/r   r{   c              3  .   #    U  H  nS U S3v   M     g7f)z
#include <>NrR   .0hs     r*   	<genexpr>/gen_dispatcher_registrations.<locals>.<genexpr>       0TGq:aS1BG   c              3  .   #    U  H  nS U S3v   M     g7f)z
#include ""NrR   r   s     r*   r   r     r   r   FTrocmr6   class_method_nameskip_dispatcher_op_registrationat)namespace_strru   zOTORCH_LIBRARY_IMPL(aten, $dispatch_key, m) {
    $dispatch_registrations_body
})r>   dispatch_registrations_bodyzTORCH_API void Register${backend_name}${dispatch_key}NativeFunctions();
TORCH_API void Register${backend_name}${dispatch_key}NativeFunctions() {
    static auto m = MAKE_TORCH_LIBRARY_IMPL(aten, $dispatch_key);
    $dispatch_registrations_body
})r   r>   r   Registerz.cppzRegisterDispatchKey.cppc                    > STT	(       d  SOSTTR                  5       [        R                  " T T	SS9[        R                  " T 5      TR	                  SU UUUUUU
U4S j5      R                  T5      S.$ )Nru   z#include <ATen/Functions.h>F)per_operator_headersr   zRegisterDispatchDefinitions.inic                    > TR                   TR                  TTTR                  5       S[        [	        [
        R                  " T [        R                  TSST SS9T5      5      S.$ )Nru   FTr   )ns_prologuens_epilogue"static_init_dispatch_registrationsdeferred_dispatch_registrationsdispatch_namespacedispatch_namespaced_definitionsdispatch_anonymous_definitions)	r   r   lowerr&   r   r   RegisterDispatchKeyr   ANONYMOUS_DEFINITION)backend_indexr   r   r>   re   r   selectorr   s   r*   r+   @gen_dispatcher_registrations.<locals>.<lambda>.<locals>.<lambda>  so    #,#5#5#,#5#5:\7V*6*<*<*>796:! 44 - & ; ; (%*'+5?L@E 57r-   )extra_cuda_headersexternal_backend_headersops_headersr   r   dispatch_headersdispatch_helpersdispatch_definitions)r   r   gen_registration_headersgen_registration_helperssubstitute_with_templatesplit)r   r   r   r>   external_backend_headers_strr   re   newliner   r   r   r   s   r*   r+   .gen_dispatcher_registrations.<locals>.<lambda>  su    "$(D' 9'"."4"4"6 $ = =4Hu! !% = =m L$&$?$?1 %0 eGnI%
r-   )rb   r&   r   r   r   r   REGISTRATIONr   r
   
substituter   )r   r   r   r!   re   r   r>   r   build_in_treer   r   eager_registrationheadersr   static_templatedeferred_templater   r   r   r   r   r   s   ` ` ` `` `      @@@@@@r*   gen_dispatcher_registrationsr     sS     ,a,-->?G '+yy0TG0T'T$'+yy0TG0T'T$!!!#L1M"&$$##%/L05 %	
# Gd3I&(#)+&&
 .=-G-G%(C .H .
*
 )
 +<*F*F%%(C +G +
' 
<.%!%	
 %	
)r-   c                (  ^^ [        [        5      R                  5       R                  R                  n[        R
                  R                  US5      mSUU4S jjnU" U5      n[        R
                  R                  US5      n[        R
                  R                  US5      n[        Xx5      n	U	R                  U	R                  p[        U
5      n[        XU5      nUR                  nUR                  nUR                  nUR                  nUR                  n[         R"                  " 5       nUc  g Uc  X   R%                  5       nUc   eUb  ['        U
UUUUU5        [)        UUUUUUU5        Uc  U/OX/ H  n[+        UUUUUUUU5        M     g )Nzaten/src/ATen/templatesc                   > [        U TTS9$ )N)install_dirtemplate_dirr   )r   )r   r   r   s    r*   make_file_managerrun.<locals>.make_file_manager  s    #,
 	
r-   z*aten/src/ATen/native/native_functions.yamlzaten/src/ATen/native/tags.yaml)r   r|   rW   r   )r   __file__absoluteparentospathrb   r   r   r!   r   ro   r   r   r    r   r   get_nop_selectornative_function_class_namer   r   r   )r   r   r   r   pytorch_rootr   r   native_yaml_pathtags_yaml_pathparsed_yamlr   r!   re   parsed_backend_yamlr   r   r    r   r   r>   r   s     `                 @r*   r   r     s    >**,33::L77<<.GHL
 

 
:	&Bww||B WW\\,0PQN#$4EK$$## &  <<LM, &11K&33L'55M$//J)99O002H
 %1LLN
!!! 	
 '
  &-K3NN 	 	%$		
 	Or-   __main__)rd   r|   re   /Sequence[NativeFunction | NativeFunctionsGroup]r!   dict[DispatchKey, BackendIndex]rW   r   r$   )r   zSequence[NativeFunction]r!   r  r   r   r   DispatchKey | Noner   r|   r   r|   r3   zlist[OperatorName] | NonerW   None)rW   r  )ru   )r   r   r   r|   r    r|   r!   r  re   r  r   r   r   r  r   r|   rW   r  )FFru   T)r   r   r   r|   r   r|   r!   r  re   r  r   r   r>   r   r   r   r   rV   r   rV   r   r|   r   rV   rW   r  )
r   r|   r   r|   r   rV   r   z
str | NonerW   r  )7
__future__r   r   r  r   collectionsr   r   r   pathlibr   typingr   rY   torchgen.api.dispatcherapirB   torchgen.destr   torchgen.api.typesr	   torchgen.code_templater
   torchgen.contextr   torchgen.genr   r   torchgen.modelr   r   r   r   r   r   !torchgen.selective_build.selectorr   torchgen.utilsr   r   r   r   r   torchgen.yaml_utilsr   collections.abcr   r   ro   r   r   r   r   r   __name__rR   r-   r*   <module>r$     sY   "  	 	 8 8     , ,  2 / 4 H  ? S S * (
  U NNMN 5N 	Np /3RB.RB4RB RB %	RB
 RB RB ,RB 
RBjU@ 666 6 5	6
 N6 &6 .6 6 
6F  !&#ooo o 5	o
 No &o o o o o o o 
of OSO
O
"%O
04O
AKO
	O
d zF r-   