
    Χg                    d   d dl mZ d dlZd dlmZ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 d dlmZ dZ G d	 d
e	          Z edddg          Z ed           G d d                      Z ed           G d d                      Z ed           G d d                      ZdS )    )annotationsN)defaultdict
namedtuple)	dataclass)IntEnum)BackendIndexBackendMetadataDispatchKeyNativeFunctionNativeFunctionsGroupOperatorName)assert_never   c                  .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )

ScalarTyper   r                     N)__name__
__module____qualname__ByteCharShortIntLongFloatDoubleBool     U/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/executorch/model.pyr   r      s6        DDE
CDEFDDDr$   r   ETParsedYamlnative_functionskernel_indexT)frozenc                  6    e Zd ZU ded<   ded<   ded<   d	dZdS )
ETKernelKeyOpArgMetastrarg_namedtypeztuple[int, ...]	dim_orderreturnc                    t           | j                 j        }t          | j                  dd                             dd          }| d| S )Nr     ;)r   r.   valuer,   r/   replace)self	dtype_strdim_strs      r%   to_native_stringz%ETKernelKeyOpArgMeta.to_native_string/   sM    tz*0	dn%%ad+33C<<''g'''r$   Nr0   r,   )r   r   r   __annotations__r;   r#   r$   r%   r+   r+   (   sH         MMMJJJ( ( ( ( ( (r$   r+   c                  Z    e Zd ZU dZded<   dZded<   eZded<   edd            Z	ddZ
dS )ETKernelKeyr#   z tuple[ETKernelKeyOpArgMeta, ...]arg_metaFbooldefaultintversionargsdict[str, tuple[str, str]]type_alias_mapdict[str, list[str]]dim_order_alias_mapdict[str, list[int]]r0   list[ETKernelKey]c                   d |                                 D             }g }t                      }|                                 D ]V\  }}|v sJ dt          |          z               ||v sJ dt          |          z               |                    |           Wfd|D             }d t          t          j        |           D             }i }	|D ]}
g }|                                  D ]^\  }}|
|d                  }||d                  }||t          |          fx}|	vrt          | |	|<   |
                    |	|                    _|
                    t          t          |                               |S )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
        c                .    i | ]\  }}|d  |D             S )c                ,    g | ]}t          |          S r#   )rC   ).0aliass     r%   
<listcomp>z8ETKernelKey.gen_from_yaml.<locals>.<dictcomp>.<listcomp>U   s    ***uE

***r$   r#   )rO   kvs      r%   
<dictcomp>z-ETKernelKey.gen_from_yaml.<locals>.<dictcomp>T   s:     
 
 
/3q!A*****
 
 
r$   zUndefined type alias: zUndefined dim_order alias: c                :    g | ]fd          D             S )c                    g | ]}|fS r#   r#   )rO   r.   rP   s     r%   rQ   z8ETKernelKey.gen_from_yaml.<locals>.<listcomp>.<listcomp>h   s    ???eU^???r$   r#   )rO   rP   rG   s    @r%   rQ   z-ETKernelKey.gen_from_yaml.<locals>.<listcomp>g   sD     
 
 
 @???)>???
 
 
r$   c                ,    g | ]}t          |          S r#   )dict)rO   permutations     r%   rQ   z-ETKernelKey.gen_from_yaml.<locals>.<listcomp>k   s-     
 
 
"-D
 
 
r$   r   r   )itemssetvaluesr,   addlist	itertoolsproducttupler+   appendr?   )rE   rG   rI   kernel_keysdtype_alias_used
type_aliasr/   alias_dtypesalias_permutationsop_arg_cacherY   arg_listr-   arg_specr.   	cache_keys    `              r%   gen_from_yamlzETKernelKey.gen_from_yaml?   s   *
 
7J7P7P7R7R
 
 
  55%)[[]] 		- 		-!J	 ///1ICM M 2/// 0000,s9~~= 100  ,,,,
 
 
 
)
 
 

 
15i6G6V1W1W
 
 

 - 	= 	=KH&*jjll 9 9"(#HQK0/<	"*E53C3C!DDI%& & /CI.NL+Y 78888{5??;;<<<<r$   r,   c                    | j         rdS dt          t                    z   dz   d                    d | j        D                       z   S )NrB   rS   /|c                6    g | ]}|                                 S r#   )r;   )rO   args     r%   rQ   z0ETKernelKey.to_native_string.<locals>.<listcomp>   s$    HHH3,,..HHHr$   )rB   r,   KERNEL_KEY_VERSIONjoinr@   )r8   s    r%   r;   zETKernelKey.to_native_string   sZ    < 	9$%%& hhHH$-HHHIIJ	
r$   N)rE   rF   rG   rH   rI   rJ   r0   rK   r<   )r   r   r   r@   r=   rB   rr   rD   staticmethodrl   r;   r#   r$   r%   r?   r?   5   s          24H3333 G%G%%%%> > > \>@
 
 
 
 
 
r$   r?   c                      e Zd ZU ded<   ddZdd	Zedd            Zedd            ZddZ	ddZ
edd            ZdS )ETKernelIndex6dict[OperatorName, dict[ETKernelKey, BackendMetadata]]indexg%NativeFunction | NativeFunctionsGroupr0   rA   c                4    |                      |          }|d uS N)get_kernels)r8   ry   ms      r%   has_kernelszETKernelIndex.has_kernels   s    Q}r$   "dict[ETKernelKey, BackendMetadata]c                    t          |t                    r|}n,t          |t                    r|j        }nt	          |           |j        j        | j        vri S | j        |j        j                 S r|   )
isinstancer   r   
functionalr   funcnamerx   )r8   ry   fs      r%   r}   zETKernelIndex.get_kernels   sk     a(( 	AA/00 	AAOOO6;dj((Iz!&+&&r$   r(   backend_indices6dict[DispatchKey, dict[OperatorName, BackendMetadata]]Nonec                    |D ]W}||         }|                                 D ]8\  }}|| v r|| |         t          d          <   #t          d          |i| |<   9Xd S )NTrB   )rZ   r?   )r(   r   dkrx   opbackend_metadatas         r%   grow_from_backend_indicesz'ETKernelIndex.grow_from_backend_indices   s    
 " 	U 	UB#B'E(- U U$$%%BRL$[%>%>%>??(3D(A(A(ACS'TL$$	U	U 	Ur$   c                ~    t          t                    }t                              ||            t          |          S r|   )r   rX   rv   r   )r   r(   s     r%   from_backend_indicesz"ETKernelIndex.from_backend_indices   s:      	 	//oNNN\***r$   c                F    t                               | j        |           | S r|   )rv   r   rx   )r8   r   s     r%   growzETKernelIndex.grow   s!     	//
OLLLr$   r   c           	     H   i }| j         D ]{}| j         |         }t          |                                          dk    sJ d| d|             |                    t	          d          t          ddd                    ||<   |t          t          j        ddd|	          S )
zp
        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   r4   F)kernel
structuredcpp_namespace)dispatch_keyuse_out_as_primarydevice_guardexternalrx   )	rx   lenr\   getr?   r	   r   r
   CPU)r8   rx   r   kernel_dicts       r%   _to_backend_indexzETKernelIndex._to_backend_index   s     68* 	 	B*R.KK&&(())Q...wbwwjuww /..#D)))re2NNN E"II $$
 
 
 	
r$   index_aindex_bc                    t          t          | j                                                  }|j                                        D ]*\  }}|                                D ]\  }}|||         |<   +t          |          S r|   )r   rX   rx   copyrZ   rv   )r   r   combinedr   entrykeymetadatas          r%   merge_indiceszETKernelIndex.merge_indices   s    tW]%7%7%9%9:: ,,.. 	- 	-IB!& - -X$,S!!- X&&&r$   N)ry   rz   r0   rA   )ry   rz   r0   r   )r(   rw   r   r   r0   r   )r   r   r0   rv   )r0   r   )r   rv   r   rv   r0   rv   )r   r   r   r=   r   r}   rt   r   r   r   r   r   r#   r$   r%   rv   rv      s         AAAA   ' ' ' ' 
U 
U 
U \
U + + + \+   
 
 
 
. ' ' ' \' ' 'r$   rv   )
__future__r   r_   collectionsr   r   dataclassesr   enumr   torchgen.modelr   r	   r
   r   r   r   torchgen.utilsr   rr   r   r&   r+   r?   rv   r#   r$   r%   <module>r      s   # " " " " "     / / / / / / / / ! ! ! ! ! !                      ( ' ' ' ' '          z.+=~*NOO $	( 	( 	( 	( 	( 	( 	( 	( $R
 R
 R
 R
 R
 R
 R
 R
j $P' P' P' P' P' P' P' P' P' P'r$   