
    !&hW                       d dl m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
 d dlmZ d dl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 d d	lmZmZ d d
lmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, erd dl-m.Z.  edg d      Z/	 	 	 	 	 	 	 	 ddZ0	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ1ddZ2	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ3	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ4	 d	 	 	 	 	 	 	 	 	 d dZ5e6dk(  r e2        yy)!    )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                	   t        d |      D ci c]  }|j                  j                  | c}t        |       5 }t	        j
                  |t              }d d d        t        t              sJ g d}|j                  dd       J d       |j                  dd       }|j                  dd       J d       |j                  d	d
      }t        |t              s
J d|        |j                  dd
      }t        |t              s
J d|        |j                  dg       }	|	g }	t        |	t              sJ d|	 dt        |	       d       |j                  dg       }
|
g }
t        |
t              sJ d|	 dt        |	       d       t        |
      }|j                  dg       }t        |t              s
J d|        |j                  dg       }|	j                  |       |j                  di        |j                  di        t        |j!                               dk(  s;J |  ddj#                  |j!                                ddj#                  |              	 	 	 	 	 	 	 	 	 	 	 	 d%fd}d }t        |	      dkD  rDt%        fd      5  t'        j(                        }d d d         ||	||||      }||vsJ |||<   d }t        |      dkD  rGt%        fd       5  t'        j(                  d!       }d d d         ||||||      }||vsJ |||<   |D ]X  }t        |t*              rS|g n$||   j-                  |      fD cg c]  }|| c}}|g n$||   j-                  |      fD cg c]  }|| c}}n|g n?|j/                         D cg c]  }||   j-                  |       c}D cg c]  }|| c}}|g n?|j/                         D cg c]  }||   j-                  |       c}D cg c]  }|| c}}|D cg c]  }||	 }}|D cg c]  }||	 }}t        |      dk(  r#t        |      dk(  r3J d"|d   j0                   d#|d   j0                   d$        t3        ||||      S c c}w # 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   xY wc c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )&Nc                Z    t        | t              r| gS t        | j                               S N)
isinstancer   list	functionsfs    p/var/www/pru.catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/torchgen/gen_backend_stubs.py<lambda>z$parse_backend_yaml.<locals>.<lambda>3   s     Z>:qc Q[[]@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: r0   z,expected "supported" to be a list, but got: z
 (of type )r5   z)expected "symint" to be a list, but got: r1   z+expected "autograd" to be a list, but got: r2   r3   r4   r   z contains unexpected keys: z, z). Only the following keys are supported: c                   i }| D ]c  }t        j                  |      }|v s
J d|        t        j                  |   j                        }||v r|dz  }t        |d
      }	|	||<   e t        ||d||      S )Nz Found an invalid operator name: _symintF)kernel
structuredr    T)dispatch_keyr6   externalr7   index)r   parse
dispatchernamefuncr   r   )backend_ops
symint_opsr=   r6   use_device_guardmetadataopop_namekernel_namemr    native_functions_maps             r*   create_backend_indexz0parse_backend_yaml.<locals>.create_backend_index   s     9; 	"B"((,G22 27)<2 %//*>w*G*L*LMKZy("uMA !"HW	" %1)
 	
r,   c                     d  dS )NzFThe provided value for "backend" must be a valid DispatchKey, but got . r.   s   r*   r+   z$parse_backend_yaml.<locals>.<lambda>   s    \]d\eefg r,   )r6   rF   c                     d  dS )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.rP   rQ   s   r*   r+   z$parse_backend_yaml.<locals>.<lambda>   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".)rD   z	list[str]rE   zset[str]r=   r   r6   boolrF   rT   returnr   )r   rC   rB   openyamlloadr   r%   dictpoprT   r&   typesetextendlenkeysjoinr   r   r@   r   
get_kernelr'   r;   r   )backend_yaml_pathgrouped_native_functionsr!   r)   yaml_values
valid_keysr   r6   rF   r0   r5   
symint_setsupported_autogradr2   rM   r   backend_idxr   autograd_idxgrK   forward_kernelsbackward_kernelsr.   r    rL   s                          @@@r*   parse_backend_yamlrm   +   s     S$
@ 	
Q@ 
	  6Aii*56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
 	5 &++G4K	5
 +1-
 /111'2$'+L
"v
 	C ',,xy-ABL		C ,1-
 ?222(4%% 4
a( &  .k:EEaHI}    '  .l;FFqIJ}   &  "# (4??B }    '  "# (5@@C }   '6G1GG'7I!1=AII?#q(C0@,AQ,F 	
 =>Nq>Q>X>X=YYuw	
Fa4
l \:}o O@6 6P	5 	5"	C 	C* HIsd   RRR%-R2R? S%S	S)S	SS#S-S"5S"R"%R/2R<c                   	 t        |      5 }|j                         }d d d        |g }||   j                  g|g n||   j                  gz   }
t        t        t        d |
                  }| D cg c]B  }|j                  j                  |j                         v r|j                  j                  |vr|D }}t        t              }|D ]-  }|||j                  j                        j                  |       / d| d}t        t        j                  |      D cg c]  \  }}|j!                  d      s| c}}      }d}|j#                         D ]Y  \  }}t%        |      }||   }||k7  sdd}dj'                  |D cg c]
  } ||       c}      }|d| d	| d
| d| d| dz  }[ |dk(  sJ |       y # 1 sw Y   xY w# t        $ r}	t        d|       |	d }	~	ww xY wc c}w c c}}w c c}w )Nz2Unable to read from the specified impl_path file: c                l    | j                         D cg c]  \  }}||j                  f c}}S c c}}w r$   )itemsr;   )r?   rI   rG   s      r*   r+   z*error_on_missing_kernels.<locals>.<lambda>  s/    HM3D7HWhoo.  s   0z(.*)z::\s*([\w\d]*)\(: c                    t        |       5  t        j                  | j                        j	                         cd d d        S # 1 sw Y   y xY wr$   )r   r	   from_schemarC   declr(   s    r*   create_declz-error_on_missing_kernels.<locals>.create_declC  s>    ,Q/ J.::166BGGIJ J J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   rU   str)rV   readOSErrorAssertionErrorr?   rY   r&   r   rC   rB   r_   r   appendr   refindallendswithrp   r^   r`   )native_functionsr!   r   r   r   kernel_defn_file_pathr2   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_countrv   expected_schemas_strs                             r*   error_on_missing_kernelsr      sw   '( 	%AFFHM	% {+112")F)L)L(MG
 :> 		
	: ";66;;388::FFKK|+ 	
;! ; LWL' 2 +%hmm&8&89	

&
  
|+;<(/ **%6F	
A::c? 	

)% ! C I I K u"%e* A- P"&;;J $(99e-Lk!n-L#M # ,0{K`Ja b%& '  ( #  #b(A*AA(Q	% 	% @AV@WX
	.;.	
" .Ms@   G G G 2AG- G2
G8
 G
G 	G*G%%G*c                 x   t        j                  d      } | j                  dddd       | j                  dd	d
d       | j                  ddt        dd       | j                  ddt        d d       | j                         }t        |j                  |j                  |j                  |j                         y )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_argumentrT   rx   
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                   	
 J d
t        t        t        fd|                  	t        t        t        fd|                  t        |      | j	                   dd	
fd       y )NzAAutogenerated file by gen_backend_stubs.py. Do not edit directly!c                6    t        j                  |          S r$   dest#compute_native_function_declaration)r)   backend_dispatch_keyr!   s    r*   r+   z4gen_dispatchkey_nativefunc_headers.<locals>.<lambda>~  s    $BB';< r,   c                >    g S t        j                  |          S r$   r   )r)   autograd_dispatch_keyr!   s    r*   r+   z4gen_dispatchkey_nativefunc_headers.<locals>.<lambda>  s.    (0  =='<= r,   NativeFunctions.hzDispatchKeyNativeFunctions.hc                 F    j                   j                   z   dS )N)generated_commentnamespace_prologuer   namespace_epiloguedispatch_declarationsBackendNamer   )prologueepilogue)autograd_declarationsbackend_declarationsr   backend_namer   r   	ns_helpers   r*   r+   z4gen_dispatchkey_nativefunc_headers.<locals>.<lambda>  s1    !2"+"4"4$"+"4"4%9<Q%Q'/
 r,   )sortedr\   r   r   write_with_template)fmr   r    r!   rc   r   r   r   r   r   r   r   s    ` ` ```@@@@r*   "gen_dispatchkey_nativefunc_headersr   i  s     !!!K  " )		
	 #
 )		
  .I
  12&	
 	
r,   c                   	 | d| dg}|rdj                  d |D              ndj                  d |D              J |   t        t        t        j                  t
        j                  dd d                  }dt        d	
      dd|rt        d      }|j                  |      nt        d      }|j                  |
|       j                  d dd 	fd       y )N/r   rw   c              3  (   K   | ]
  }d | d  yw)z
#include <>NrP   .0hs     r*   	<genexpr>z/gen_dispatcher_registrations.<locals>.<genexpr>       0Tq:aS1B0T   c              3  (   K   | ]
  }d | d  yw)z
#include ""NrP   r   s     r*   r   z/gen_dispatcher_registrations.<locals>.<genexpr>  r   r   FTrocmr5   class_method_nameskip_dispatcher_op_registrationat)namespace_strrr   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                     d	sdndj                         t        j                   	d      t        j                         j	                  d 
fd      j                        dS )Nrr   z#include <ATen/Functions.h>F)per_operator_headersr   zRegisterDispatchDefinitions.inic                     j                   j                  j                         dt        t	        t        j                   t        j                  dd d                  dS )Nrr   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=   rc   r   selectorr   s   r*   r+   z@gen_dispatcher_registrations.<locals>.<lambda>.<locals>.<lambda>  sq    #,#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   rc   newliner   r   r   r   s   r*   r+   z.gen_dispatcher_registrations.<locals>.<lambda>  sw    "$(D' 9'"."4"4"6 $ = =4Hu! !% = =m L$&$?$?1 %0 eGnI%
 r,   )r`   r&   r   r   r   r   REGISTRATIONr   r
   
substituter   )r   r   r   r!   rc   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                   t        t              j                         j                  j                  }t        j
                  j                  |d      dfd} ||      }t        j
                  j                  |d      }t        j
                  j                  |d      }t        ||      }	|	j                  |	j                  }}
t        |
      }t        | ||      }|j                  }|j                  }|j                  }|j                  }|j                  }t!        j"                         }|y |||   j%                         }|J |t'        |
|||||       t)        |||||||       ||gn||gD ]  }t+        ||||||||        y )Nzaten/src/ATen/templatesc                     t        |       S )N)install_dirtemplate_dirr   )r   )r   r   r   s    r*   make_file_managerzrun.<locals>.make_file_manager  s    #,
 	
r,   z*aten/src/ATen/native/native_functions.yamlzaten/src/ATen/native/tags.yaml)r   rx   rU   r   )r   __file__absoluteparentospathr`   r   r   r!   r   rm   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!   rc   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#$4nEK$$## &  <<LM,- &11K&33L'55M$//J)99O002H
 %[1LLN
!!! 	
 '
  &-K3N
 	%$		

r,   __main__)rb   rx   rc   /Sequence[NativeFunction | NativeFunctionsGroup]r!   dict[DispatchKey, BackendIndex]rU   r   r$   )r   zSequence[NativeFunction]r!   r  r   r   r   DispatchKey | Noner   rx   r   rx   r2   zlist[OperatorName] | NonerU   None)rU   r	  )rr   )r   r   r   rx   r    rx   r!   r  rc   r  r   r   r   r  r   rx   rU   r	  )FFrr   T)r   r   r   rx   r   rx   r!   r  rc   r  r   r   r=   r   r   r   r   rT   r   rT   r   rx   r   rT   rU   r	  )
r   rx   r   rx   r   rT   r   z
str | NonerU   r	  )7
__future__r   r   r   r}   collectionsr   r   r   pathlibr   typingr   rW   torchgen.api.dispatcherapirA   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   rm   r   r   r   r   r   __name__rP   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,   