U
    •Ê¹j/  ã                   @   s8  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
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dddgZeeef eeef dœdd„Zeedœdd„Zeeeeeef f dœdd„Zdeeeee  e e	ee eeeeef f f dœdd„Z!eddœdd„Z"dS )é    )ÚdefaultdictÚ
namedtuple)ÚAnyÚDictÚListÚOptionalÚSetÚTupleN)ÚETKernelIndexÚETKernelKey)Ú
LineLoaderÚparse_native_yaml)ÚBackendMetadataÚDispatchKeyÚFunctionSchemaÚNativeFunctionÚOperatorName)ÚNamespaceHelperÚETParsedYamlÚnative_functionsZet_kernel_indicesÚkernelsÚ
type_aliasÚdim_order_alias)ÚeiÚreturnc                 C   s  |   ¡ }| dd¡ }dkr i S | di ¡}| di ¡}| dd¡ i }|D ]²}| d¡}|dk	rl| d¡ | d¡}tj|dd	�}	|	jd
d�}
t|	jd|
d d�}|dkrºtddd�gnt 	|||¡}|D ]0}||ksôt
dt|ƒ d t|ƒ ƒ‚|||< qÌqL|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   Z__line__Úarg_metaÚkernel_nameé   )Ú	max_levelÚat)ÚdefaultFz::native)ZkernelZ
structuredZcpp_namespace© TzDuplicate kernel key: ú )ÚcopyÚpopÚgetr   Úfrom_namespaced_entityZget_cpp_namespacer   Úentity_namer   Zgen_from_yamlÚAssertionErrorÚstr)r   Úer   r   r   Zkernel_mappingÚentryr   r   Únamespace_helperZkernel_namespaceZbackend_metadataZkernel_keysZ
kernel_keyr!   r!   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/executorch/parse.pyÚparse_from_yaml   s@    


 ÿýÿý
ÿr.   )Úesr   c                 C   s�   i }| D ]~}|  ¡ }| d¡}t|tƒs6td|› �ƒ‚tj|dd�}t |j	¡j
}||ksjtd|› d�ƒ‚tt|ƒ }ƒdkr|||< q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: é   ©Znamespaced_entityr   zDuplicate func found in yaml: z alreadyr   )r#   r$   Ú
isinstancer)   r(   r   r&   r   Úparser'   ÚnameÚlenr.   r
   )r/   Úindicesr   r*   Úfuncsr,   ÚopnameÚindexr!   r!   r-   Úparse_et_yaml_structJ   s    
 ÿ
r<   c                 C   s|   t tƒ}| D ]j}| d¡}t|tƒs2td|› �ƒ‚tj|dd�}t 	|j
¡j}tD ]"}| |¡ }dk	rR||| |< qRq|S )z‚Given a loaded yaml representing a list of operators, extract the
    kernel key related fields indexed by the operator name.
    r0   r1   r2   r3   N)r   Údictr%   r4   r)   r(   r   r&   r   r5   r'   r6   Ú	ET_FIELDS)r/   Úfieldsr   r9   r,   r:   ÚfieldÚvaluer!   r!   r-   Úextract_kernel_fieldsb   s    
 ÿrB   F)ÚpathÚtags_yaml_pathÚignore_keysÚskip_native_fns_genr   c              	   C   sN   t | ƒ�}tj|td�}W 5 Q R X t|ƒ}t|ƒ t| ||||d�}|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
    )ÚLoader)rF   Zloaded_yaml)ÚopenÚyamlÚloadr   rB   Ústrip_et_fieldsr   r   )rC   rD   rE   rF   Úfr/   Z	et_kernelZnative_yamlr!   r!   r-   Úparse_et_yamlv   s    	
ûrM   c                 C   s$   | D ]}t D ]}| |d¡ qqdS )z€Given a loaded yaml representing a list of operators,
    remove ET specific fields from every entries for BC compatibility
    N)r>   r$   )r/   r+   r@   r!   r!   r-   rK   ‘   s    rK   )NF)#Úcollectionsr   r   Útypingr   r   r   r   r   r	   rI   Ztorchgen.executorch.modelr
   r   Ztorchgen.genr   r   Ztorchgen.modelr   r   r   r   r   Ztorchgen.utilsr   r   r>   r)   Úobjectr.   r<   rB   ÚboolrM   rK   r!   r!   r!   r-   Ú<module>   s*    
 1   ü
û