§
    Ì²ÅjË  ã                  ó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© ó    úJC:\Projects\Historical\venv\Lib\site-packages\torchgen/executorch/model.pyr   r      s6   € € € € € Ø€DØ€DØ€EØ
€CØ€DØ€EØ€FØ€D€D€Dr$   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   € Ý˜tœzÔ*Ô0ˆ	Ý�d”nÑ%Ô% a¨ dÔ+×3Ò3°C¸Ñ<Ô<ˆØÐ'Ð'˜gÐ'Ð'Ð'r$   N©r0   r,   )r   r   r   Ú__annotations__r;   r#   r$   r%   r+   r+   (   sH   € € € € € € à€M€M�MØ€J€J�JàÐÐÑð(ð (ð (ð (ð (ð (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 ]I\  }}|‰v sJ dt          |¦  «        z   ¦   «         ‚||v sJ d|› �¦   «         ‚|                     |¦  «         ŒJˆ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:   € ð 
ð 
ð 
Ù/3¨q°!ˆ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   ø€ Ð?Ð?Ð? ˆe�Uˆ^Ð?Ð?Ð?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ò  ø€ ð*
ð 
Ø7J×7PÒ7PÑ7RÔ7Rð
ñ 
ô 
Ðð ˆõ ™5œ5ÐØ%)§[¢[¡]¤]ð 		-ð 		-Ñ!ˆJ˜	ð  Ð/Ð/Ð/Ð1IÍCØñMô Mñ 2Ñ/Ô/Ð/ð Ð0Ð0Ð0Ð0Ø8¨YÐ8Ð8ñ 1Ô0Ð0à× Ò  Ñ,Ô,Ð,Ð,ð
ð 
ð 
ð 
à)ð
ñ 
ô 
ˆð
ð 
Ý15µiÔ6GÈÐ6VÑ1WÔ1Wð
ñ 
ô 
Ðð
 ˆØ-ð 	=ð 	=ˆKØˆHØ&*§j¢j¡l¤lð 9ð 9Ñ"�˜(Ø# H¨Q¤KÔ0�Ø/°¸´Ô<�	à"*¨Eµ5¸Ñ3CÔ3CÐ!DÐD�IØ%ð&ð &õ /CÀIÐ.N�L Ñ+à—’ ¨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ÐH°3˜×,Ò,Ñ.Ô.ÐHÐHÐHr$   )rB   r,   ÚKERNEL_KEY_VERSIONÚjoinr@   )r8   s    r%   r;   zETKernelKey.to_native_string€   sZ   € ØŒ<ð 	Ø�9àÝÕ$Ñ%Ô%ñ&àñð �hŠhÐ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€   € € € € € € ð 24€HÐ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 )ÚETKernelIndexú6dict[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�Ñ(Ô(ð 	ØˆAˆAÝ˜Õ/Ñ0Ô0ð 	Ø”ˆAˆAå˜‰OŒOˆOØŒ6Œ;˜dœjÐ(Ð(ØˆIØŒz˜!œ&œ+Ô&Ð&r$   r(   Úbackend_indicesú6dict[DispatchKey, dict[OperatorName, BackendMetadata]]ÚNonec                óº   — |D ]W}||         }|                      ¦   «         D ]8\  }}|| v r|| |         t          d¬¦  «        <   Œ#t          d¬¦  «        |i| |<   Œ9ŒXd 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Ñ$�Ð$Ø˜Ð%Ð%ØBR�L Ô$¥[¸Ð%>Ñ%>Ô%>Ñ?Ð?å(3¸DÐ(AÑ(AÔ(AÐCSÐ'T�L Ñ$Ð$ð	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Ò.Ð.Ð.ØwÀbÐwÐwÐjuÐwÐwñ /Ô.Ð.à#ŸšÝ DÐ)Ñ)Ô)Ý r°eÈ2ÐNÑNÔNñô ˆE�"‰IˆIõ Ý$œØ$ØØØð
ñ 
ô 
ð 	
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�   € å�t W¤]×%7Ò%7Ñ%9Ô%9Ñ:Ô:ˆà œ×,Ò,Ñ.Ô.ð 	-ð 	-‰IˆB�Ø!&§¢¡¤ð -ð -‘��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$   