
    JTh                       S SK Jr  S SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
JrJrJrJrJrJr  S SKJr  Sr " S	 S
\	5      r\" SSS/5      r\" SS9 " S S5      5       r\" SS9 " S S5      5       r\" SS9 " S S5      5       rg)    )annotationsN)defaultdict
namedtuple)	dataclass)IntEnum)BackendIndexBackendMetadataDispatchKeyNativeFunctionNativeFunctionsGroupOperatorName)assert_never   c                  4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)
ScalarType   r   r                      N)__name__
__module____qualname____firstlineno__ByteCharShortIntLongFloatDoubleBool__static_attributes__r       Q/var/www/auris/envauris/lib/python3.13/site-packages/torchgen/executorch/model.pyr   r      s*    DDE
CDEFDr'   r   ETParsedYamlnative_functionskernel_indexT)frozenc                  >    \ rS rSr% S\S'   S\S'   S\S'   S
S jrSrg	)ETKernelKeyOpArgMeta(   strarg_namedtypeztuple[int, ...]	dim_orderc                    [         U R                     R                  n[        U R                  5      SS R                  SS5      nU SU 3$ )Nr     ;)r   r2   valuer0   r3   replace)self	dtype_strdim_strs      r(   to_native_string%ETKernelKeyOpArgMeta.to_native_string/   sI    tzz*00	dnn%a+33C<AgY''r'   r   Nreturnr0   )r   r   r   r   __annotations__r>   r&   r   r'   r(   r.   r.   (   s    MJ(r'   r.   c                  n    \ rS rSr% SrS\S'   SrS\S'   \rS\S	'   \	        SS
 j5       r
SS jrSrg)ETKernelKey5   r   z tuple[ETKernelKeyOpArgMeta, ...]arg_metaFbooldefaultintversionc                L   UR                  5        VVVs0 s H!  u  p4X4 Vs/ s H  n[        U5      PM     sn_M#     nnnn/ n[        5       nU R                  5        H=  u  pX;   d   S[	        U5      -   5       eX;   d
   SU	 35       eUR                  U5        M?     U VV
s/ s H  nX    V
s/ s H  oU
4PM     sn
PM     nnn
[        [        R                  " U6 5       Vs/ s H  n[        U5      PM     nn0 nU H  n/ nU R                  5        HI  u  nnUUS      n
UUS      n	UU
[        U	5      4=nU;  a  [        U6 UU'   UR                  UU   5        MK     UR                  [        [        U5      5      5        M     U$ s  snf s  snnnf s  sn
f s  sn
nf s  snf )a  Generate ETKernelKeys from arg kernel specs
Multiple ETKernelKeys are returned due to dtype permutations from utilizing
type_alias_map (actualizing each potential type permutation as a KernelKey)

Args:
    args: Mapping from argument name to kernel specs
        Kernel specs are a tuple of (dtype, dim_order).
        Currently tuple entries must be aliased via the alias map arguments
    type_alias_map: Mapping from type alias to potential type enums
        i.e { T0 : [Double, Int] } means T0 can be either Double or Int
        Used for lookup by args
    dim_order_alias_map: Mapping from alias to a list of dimension orders
        Used for lookup by args
zUndefined type alias: zUndefined dim_order alias: r   r   )itemsrI   setvaluesr0   addlist	itertoolsproductdicttupler.   appendrD   )argstype_alias_mapdim_order_alias_mapkvaliaskernel_keysdtype_alias_used
type_aliasr3   r2   alias_dtypespermutationalias_permutationsop_arg_cachearg_listr1   arg_spec	cache_keys                      r(   gen_from_yamlETKernelKey.gen_from_yaml?   s   , 8K7P7P7R
7RtqA*uE
**7R 	 
  5%)[[]!J / 1ICM 2 / 3 -i[93   , &3 *
) *8)>?)>U^)>?) 	 

 26i6G6G6V1W
1W+D1W 	 

 -KH&*jjl"(#HQK0/<	"*E53C!DDI%& /CI.NL+Y 78 '3 {5?;< . S +
( @

s3   FF
F#F/F<F$F!
FFc                    U R                   (       a  gS[        [        5      -   S-   SR                  U R                   Vs/ s H  oR                  5       PM     sn5      -   $ s  snf )NrH   rZ   /|)rH   r0   KERNEL_KEY_VERSIONjoinrF   r>   )r;   args     r(   r>   ETKernelKey.to_native_string   s^    <<$%& hh$--H-3,,.-HIJ	
 Is    A"
N)rV   zdict[str, tuple[str, str]]rW   zdict[str, list[str]]rX   zdict[str, list[int]]rA   zlist[ETKernelKey]r@   )r   r   r   r   rF   rB   rH   rk   rJ   staticmethodrf   r>   r&   r   r'   r(   rD   rD   5   sa     24H.3 GT%GS%>(>,> 2> 
	> >@
r'   rD   c                      \ rS rSr% S\S'   SS jr    SS jr\      SS j5       r\    SS j5       r	    SS jr
SS	 jr\SS
 j5       rSrg)ETKernelIndex   6dict[OperatorName, dict[ETKernelKey, BackendMetadata]]indexc                ,    U R                  U5      nUS L$ N)get_kernels)r;   gms      r(   has_kernelsETKernelIndex.has_kernels   s    Q}r'   c                   [        U[        5      (       a  UnO-[        U[        5      (       a  UR                  nO[	        U5        WR
                  R                  U R                  ;  a  0 $ U R                  UR
                  R                     $ rv   )
isinstancer   r   
functionalr   funcnamert   )r;   rx   fs      r(   rw   ETKernelIndex.get_kernels   sd     a((A/00AO66;;djj(Izz!&&++&&r'   c                    U HB  nX   nUR                  5        H'  u  pEX@;   a  XPU   [        SS9'   M  [        SS9U0X'   M)     MD     g )NTrH   )rL   rD   )r+   backend_indicesdkrt   opbackend_metadatas         r(   grow_from_backend_indices'ETKernelIndex.grow_from_backend_indices   sT    
 "B#'E(-$%BR$[%>?(3D(ACS'TL$	 )6 "r'   c                `    [        [        5      n[        R                  X5        [        U5      $ rv   )r   rS   rq   r   )r   r+   s     r(   from_backend_indices"ETKernelIndex.from_backend_indices   s,    
  	 	//N\**r'   c                F    [         R                  U R                  U5        U $ rv   )rq   r   rt   )r;   r   s     r(   growETKernelIndex.grow   s     	//

OLr'   c           
        0 nU R                    H`  nU R                   U   n[        UR                  5       5      S:X  d   SU SU 35       eUR                  [	        SS9[        SSSS95      X'   Mb     [        [        R                  SSSUS	9$ )
z`
WARNING: this will be deprecated once all the codegen places know how to handle ETKernelIndex.
r   z4Can't convert ETKernelIndex to BackendIndex because z  has more than one kernels. Got Tr   r7   F)kernel
structuredcpp_namespace)dispatch_keyuse_out_as_primarydevice_guardexternalrt   )	rt   lenrN   getrD   r	   r   r
   CPU)r;   rt   r   kernel_dicts       r(   _to_backend_indexETKernelIndex._to_backend_index   s     68**B**R.K{))+,1 FrdJjkvjwx1 $D)re2NEI  $$
 	
r'   c                    [        [        U R                  R                  5       5      nUR                  R	                  5        H%  u  p4UR	                  5        H  u  pVXbU   U'   M     M'     [        U5      $ rv   )r   rS   rt   copyrL   rq   )index_aindex_bcombinedr   entrykeymetadatas          r(   merge_indicesETKernelIndex.merge_indices   s_    tW]]%7%7%9: ,,.IB!&$,S! "/ / X&&r'   r   N)rx   %NativeFunction | NativeFunctionsGrouprA   rG   )rx   r   rA   z"dict[ETKernelKey, BackendMetadata])r+   rs   r   6dict[DispatchKey, dict[OperatorName, BackendMetadata]]rA   None)r   r   rA   rq   )rA   r   )r   rq   r   rq   rA   rq   )r   r   r   r   rB   rz   rw   ro   r   r   r   r   r   r&   r   r'   r(   rq   rq      s    AA'6'	+' 
UL
UO
U 

U 
U +O+	+ +U	
. ' 'r'   rq   )
__future__r   rQ   collectionsr   r   dataclassesr   enumr   torchgen.modelr   r	   r
   r   r   r   torchgen.utilsr   rk   r   r)   r.   rD   rq   r   r'   r(   <module>r      s    #  / !   (    .+=~*NO $	( 	( 	( $R
 R
 R
j $P' P' P'r'   