§
    Ì²ÅjÇ  ã                  óÐ   — d dl mZ d dlmZmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlmZmZ d dlmZmZmZmZmZ d dlmZ  ed	d
dg¦  «        Zg d¢Zd$d„Zd%d„Zd&d„Z	 	 d'd(d!„Zd)d#„ZdS )*é    )Úannotations)ÚdefaultdictÚ
namedtuple)ÚAnyN)ÚETKernelIndexÚETKernelKey)Ú
LineLoaderÚparse_native_yaml)ÚBackendMetadataÚDispatchKeyÚFunctionSchemaÚNativeFunctionÚOperatorName)ÚNamespaceHelperÚETParsedYamlÚnative_functionsÚet_kernel_indices)ÚkernelsÚ
type_aliasÚdim_order_aliasÚeiúdict[str, object]Úreturnú"dict[ETKernelKey, BackendMetadata]c                óÌ  — |                       ¦   «         }|                     dd¦  «        x}€i S |                     di ¦  «        }|                     di ¦  «        }|                     dd¦  «         i }|D ]î}|                     d¦  «        }|�|                     d¦  «         |                     d¦  «        }t          j        |d¬	¦  «        }	|	                     d
¬¦  «        }
t          |	j        d|
dz   ¬¦  «        }|€t          dd¬¦  «        gnt          j	        |||¦  «        }|D ]8}||vs-J dt          |¦  «        z   dz   t          |¦  «        z   ¦   «         ‚|||<   Œ9Œï|S )a3  Given a loaded yaml representing kernel assignment information, extract the
    mapping from `kernel keys` to `BackendMetadata` (the latter representing the kernel instance)

    Args:
        ei: Dict keys {kernels, type_alias, dim_order_alias}
            See ETKernelKey for description of arguments
    r   Nr   r   Ú__line__Úarg_metaÚkernel_nameé   )Ú	max_levelÚat)ÚdefaultFz::native)ÚkernelÚ
structuredÚcpp_namespace© TzDuplicate kernel key: ú )ÚcopyÚpopÚgetr   Úfrom_namespaced_entityÚget_cpp_namespacer   Úentity_namer   Úgen_from_yamlÚstr)r   Úer   r   r   Úkernel_mappingÚentryr   r   Únamespace_helperÚkernel_namespaceÚbackend_metadataÚkernel_keysÚ
kernel_keys                 úJC:\Projects\Historical\venv\Lib\site-packages\torchgen/executorch/parse.pyÚparse_from_yamlr9      s±  € ð 	�Š‰	Œ	€AØ—5’5˜ DÑ)Ô)Ð)ˆÐ2Øˆ	à'(§u¢u¨\¸2Ñ'>Ô'>€JØ,-¯EªEÐ2CÀRÑ,HÔ,H€OØ×Ò˜
 DÑ)Ô)Ð)à9;€Nàð :ð :ˆØ—9’9˜ZÑ(Ô(ˆØÐØ�LŠL˜Ñ$Ô$Ð$à—i’i Ñ.Ô.ˆÝ*ÔAØ 1ð
ñ 
ô 
Ðð ,×=Ò=ÀdÐ=ÑKÔKÐÝ*Ø#Ô/ØØ+¨jÑ8ð
ñ 
ô 
Ðð Ðõ ˜ TÐ*Ñ*Ô*Ð+Ð+åÔ*¨8°ZÀÑQÔQð 	ð &ð 	:ð 	:ˆJØ ^Ð3Ð3Ð3Ø(­3¨z©?¬?Ñ:¸SÑ@Å3ÀqÁ6Ä6ÑIñ 4Ô3Ð3ð *:ˆN˜:Ñ&Ð&ð		:ð Ðó    ÚesÚobjectr   c                óž  — i }| D ]º}|                      ¦   «         }|                     d¦  «        }t          |t          ¦  «        sJ d|› �¦   «         ‚t	          j        |d¬¦  «        }t          j        |j        ¦  «        j	        }||vsJ d|› d�¦   «         ‚t          t          |¦  «        x}¦  «        dk    r|||<   Œ»t          |¦  «        S )zÝGiven a loaded yaml representing a list of operators, for each op extract the mapping
    of `kernel keys` to `BackendMetadata` (the latter representing the kernel instance
    that should be used by the kernel key).
    Úfuncúnot a str: é   ©Únamespaced_entityr    zDuplicate func found in yaml: z alreadyr   )r(   r)   Ú
isinstancer/   r   r+   r   Úparser-   ÚnameÚlenr9   r   )r;   Úindicesr   r0   Úfuncsr3   ÚopnameÚindexs           r8   Úparse_et_yaml_structrK   L   sð   € ð
 GI€GØð $ð $ˆØ�GŠG‰IŒIˆà—’�f‘”ˆÝ˜%¥Ñ%Ô%Ð<Ð<Ð'<°UÐ'<Ð'<Ñ<Ô<Ð%Ý*ÔAØ#¨qð
ñ 
ô 
Ðõ  Ô%Ð&6Ô&BÑCÔCÔHˆà˜WÐ$Ð$Ð$Ð&WÀvÐ&WÐ&WÐ&WÑ$Ô$Ð$å�¨Ñ*Ô*Ð*ˆuÑ+Ô+¨qÒ0Ð0Ø#ˆG�F‰Oøå˜Ñ!Ô!Ð!r:   ú"dict[OperatorName, dict[str, Any]]c                óf  — t          t          ¦  «        }| D ]™}|                     d¦  «        }t          |t          ¦  «        sJ d|› �¦   «         ‚t          j        |d¬¦  «        }t          j        |j	        ¦  «        j
        }t          D ]$}|                     |¦  «        x}�|||         |<   Œ%Œš|S )z‚Given a loaded yaml representing a list of operators, extract the
    kernel key related fields indexed by the operator name.
    r>   r?   r@   rA   )r   Údictr*   rC   r/   r   r+   r   rD   r-   rE   Ú	ET_FIELDS)r;   Úfieldsr   rH   r3   rI   ÚfieldÚvalues           r8   Úextract_kernel_fieldsrS   d   sË   € õ 2=½TÑ1BÔ1B€FØð 
.ð 
.ˆØ—’�v‘”ˆÝ˜%¥Ñ%Ô%Ð<Ð<Ð'<°UÐ'<Ð'<Ñ<Ô<Ð%Ý*ÔAØ#¨qð
ñ 
ô 
Ðõ  Ô%Ð&6Ô&BÑCÔCÔHˆåð 	.ð 	.ˆEØŸš ™œÐ&�Ð3Ø(-��v”˜uÑ%øð	.ð €Mr:   FÚpathr/   Útags_yaml_pathÚignore_keysúset[DispatchKey] | NoneÚskip_native_fns_genÚboolú?tuple[list[NativeFunction], dict[OperatorName, dict[str, Any]]]c                óü   — t          | ¦  «        5 }t          j        |t          ¬¦  «        }ddd¦  «         n# 1 swxY w Y   t	          |¦  «        }t          |¦  «         t          | ||||¬¦  «        }|j        |fS )z˜Parse native_functions.yaml into NativeFunctions and an Operator Indexed Dict
    of fields to persist from native_functions.yaml to functions.yaml
    )ÚLoaderN)rX   Úloaded_yaml)ÚopenÚyamlÚloadr	   rS   Ústrip_et_fieldsr
   r   )rT   rU   rV   rX   Úfr;   Ú	et_kernelÚnative_yamls           r8   Úparse_et_yamlre   x   sÈ   € õ 
ˆd‰Œð -�qÝŒY�q¥Ð,Ñ,Ô,ˆð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -õ & bÑ)Ô)€Iõ �BÑÔÐå#ØØØØ/Øðñ ô €Kð Ô'¨Ð2Ð2s   �8¸<¿<ÚNonec                óP   — | D ]"}t           D ]}|                     |d¦  «         ŒŒ#dS )z€Given a loaded yaml representing a list of operators,
    remove ET specific fields from every entries for BC compatibility
    N)rO   r)   )r;   r2   rQ   s      r8   ra   ra   “   sH   € ð ð #ð #ˆÝð 	#ð 	#ˆEØ�IŠI�e˜TÑ"Ô"Ð"Ð"ð	#ð#ð #r:   )r   r   r   r   )r;   r<   r   r   )r;   r<   r   rL   )NF)
rT   r/   rU   r/   rV   rW   rX   rY   r   rZ   )r;   r<   r   rf   )Ú
__future__r   Úcollectionsr   r   Útypingr   r_   Útorchgen.executorch.modelr   r   Útorchgen.genr	   r
   Útorchgen.modelr   r   r   r   r   Útorchgen.utilsr   r   rO   r9   rK   rS   re   ra   r&   r:   r8   ú<module>ro      sw  ðØ "Ð "Ð "Ð "Ð "Ð "à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð à €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *ð ˆz˜.Ð+=Ð?RÐ*SÑTÔT€ð 9Ð8Ð8€	ð.ð .ð .ð .ðb"ð "ð "ð "ð0ð ð ð ð. ,0Ø %ð	3ð 3ð 3ð 3ð 3ð6#ð #ð #ð #ð #ð #r:   