U
    •Ê¹j>1  ã                   @   s  d dl 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 d dlZd dlmZ d dlmZmZmZmZ edd	�G d
d„ dƒƒZeeee f eeee f eeee f dœdd„Zeeee f eeee f eeee f dœdd„Zeeedœdd„Zeedœdd„ZdS )é    )Údefaultdict)ÚIterable)Ú	dataclass)ÚDictÚListÚOptionalÚSetÚTupleN)ÚNativeFunction)Úmerge_debug_infoÚmerge_operator_dictsÚSelectiveBuildOperatorÚstrip_operator_overload_nameT)Úfrozenc                   @   s†  e Zd ZU eed< eeedf  ed< eee	f ed< eee
e f ed< eee
e f ed< ee ed< ee ed< eed	< ed d
œdd„ƒZeeeef d dœdd„ƒZeed dœdd„ƒZeed dœdd„ƒZeee eed dœdd„ƒZeedœdd„Zeedœdd„Zeedœdd „Zeedœd!d"„Zeedœd#d$„Zeeed%œd&d'„Zee
e e
e d(œd)d*„Zeeef d
œd+d,„Zd-S ).ÚSelectiveBuilderÚinclude_all_operators.Ú_debug_infoÚ	operatorsÚkernel_metadataÚet_kernel_metadataÚcustom_classesÚbuild_featuresÚinclude_all_non_op_selectives)Úreturnc                   C   s   t  ddi¡S )Nr   T©r   Úfrom_yaml_dict© r   r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchgen/selective_build/selector.pyÚget_nop_selectorA   s    z!SelectiveBuilder.get_nop_selector)Údatar   c              	   C   s²  ddddddddh}t |  ¡ ƒ}t|| ƒd	krHtd
 d || ¡¡ƒ‚|  dd¡}t|tƒsbt	‚d }d| kr–| d }t|t
ƒs„t	‚tdd„ |D ƒƒ}i }|  di ¡}t|tƒs´t	‚| ¡ D ]\}}	t ||	¡||< q¼i }
|  di ¡}t|tƒsôt	‚| ¡ D ]\}}	dd„ |	D ƒ|
t|ƒ< qü|  di ¡}t|tƒ�s8t	‚|  dg ¡}t|tƒ�sTt	‚t |ƒ}|  dg ¡}t|tƒ�sxt	‚t |ƒ}|  dd¡}t|tƒ�sœt	‚t||||
||||ƒS )Nr   r   Ú
debug_infor   r   r   r   r   r   z!Got unexpected top level keys: {}ú,Fc                 s   s   | ]}t |ƒV  qd S ©N©Ústr)Ú.0Úxr   r   r   Ú	<genexpr>`   s     z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>c                 S   s   g | ]}t |ƒ‘qS r   r#   )r%   Údtyper   r   r   Ú
<listcomp>n   s     z3SelectiveBuilder.from_yaml_dict.<locals>.<listcomp>)ÚsetÚkeysÚlenÚ	ExceptionÚformatÚjoinÚgetÚ
isinstanceÚboolÚAssertionErrorÚlistÚtupleÚdictÚitemsr   r   r$   r   r   )r   Zvalid_top_level_keysZtop_level_keysr   r    Zdi_listr   Zoperators_dictÚkÚvr   Zkernel_metadata_dictr   r   r   r   r   r   r   r   E   sj    ø
ÿÿøzSelectiveBuilder.from_yaml_dict)Úconfig_contentsr   c                 C   s   t  | ¡}t |¡S r"   )ÚyamlÚ	safe_loadr   r   )r:   Úcontentsr   r   r   Úfrom_yaml_str‰   s    
zSelectiveBuilder.from_yaml_str)Úconfig_pathr   c              
   C   s4   t | ƒ�"}t |¡}t |¡W  5 Q R £ S Q R X d S r"   )Úopenr;   r<   r   r   )r?   Úfr=   r   r   r   Úfrom_yaml_pathŽ   s    

zSelectiveBuilder.from_yaml_path)Ú
allow_listÚis_root_operatorÚis_used_for_trainingr   c                 C   s0   i }| D ]}|||ddœ||< qt  |ddœ¡S )NT)ÚnamerD   rE   Úinclude_all_overloads)r   r   r   )rC   rD   rE   r   Úopr   r   r   Ú&from_legacy_op_registration_allow_list”   s    üþÿz7SelectiveBuilder.from_legacy_op_registration_allow_list)rF   r   c                 C   s6   | j r
dS || jkrdS t|ƒ}|| jko4| j| jS ©NT)r   r   r   rG   )ÚselfrF   r   r   r   Úis_operator_selected§   s    
z%SelectiveBuilder.is_operator_selected)Úfuncr   c                 C   s   t |ƒ}|  |¡S r"   )Úop_name_from_native_functionrL   ©rK   rM   Úop_namer   r   r   Úis_native_function_selected°   s    z,SelectiveBuilder.is_native_function_selectedc                 C   st   |   |¡sdS | jrdS tddddd d�}|}|| jkrB| j| }t|ƒ}|}|| jkrb| j| }|jpr|jor|jS )NFTÚ )rF   rD   rE   rG   r   )rL   r   r   r   r   rE   rG   )rK   rF   Znot_training_oprH   Úbase_opr   r   r   Ú!is_operator_selected_for_training´   s*    
û




ÿz2SelectiveBuilder.is_operator_selected_for_trainingc                 C   s   t |ƒ}|  |¡S r"   )rN   rT   rO   r   r   r   Ú(is_native_function_selected_for_trainingÎ   s    z9SelectiveBuilder.is_native_function_selected_for_trainingc                 C   s^   |   |¡sdS | jrdS || jkr2| j| }|jS t|ƒ}|| jkrHdS | j| }|jo\|jS )NFT)rL   r   r   rD   r   rG   )rK   rF   rH   rS   r   r   r   rD   Ò   s    




z!SelectiveBuilder.is_root_operator)Ú
kernel_tagr(   r   c                 C   s(   | j s| jrdS || jko&|| j| kS rJ   )r   r   r   )rK   rV   r(   r   r   r   Úis_kernel_dtype_selectedá   s
    
þz)SelectiveBuilder.is_kernel_dtype_selected)rP   Ú
kernel_keyr   c                 C   sš   || j kr| jr|S g S tƒ }| j | D ]h}d}|D ]:}|dkr4| d¡d | d¡d kr4| |¡ d} qpq4|s(d|kr†tdƒ‚q(| d¡ q(t|ƒS )zF
        Return a list of kernel keys that cover the used ops
        FÚdefaultú/é   TzMissing kernel for the model)r   r   r*   ÚsplitÚaddr-   r4   )rK   rP   rX   Z
result_setZmodel_kernel_keysZ	key_foundÚkeyr   r   r   Úet_get_selected_kernelsê   s$    
ÿþ

z(SelectiveBuilder.et_get_selected_kernelsc                 C   s”   | j | jdœ}i }| j ¡ D ]\}}| ¡ ||< q||d< | jd k	rRt| jƒ|d< dd„ | j ¡ D ƒ|d< | j|d< t| j	ƒ|d< t| j
ƒ|d	< |S )
N)r   r   r   r    c                 S   s   i | ]\}}|t |ƒ“qS r   ©Úsorted)r%   r8   r9   r   r   r   Ú
<dictcomp>  s     z,SelectiveBuilder.to_dict.<locals>.<dictcomp>r   r   r   r   )r   r   r   r7   Úto_dictr   ra   r   r   r   r   )rK   Úretr   rP   rH   r   r   r   rc     s     þ
ÿ

zSelectiveBuilder.to_dictN)Ú__name__Ú
__module__Ú__qualname__r2   Ú__annotations__r   r	   r$   r   r   r   r   Ústaticmethodr   Úobjectr   r>   rB   rI   rL   r
   rQ   rT   rU   rD   rW   r_   rc   r   r   r   r   r      s<   
C  þ		r   )ÚlhsÚrhsr   c                 C   sV   i }t |  ¡ ƒt | ¡ ƒ D ]4\}}t|ƒ}||krD|t|| ƒO }t |ƒ||< q|S r"   )r4   r7   r*   )rk   rl   r   Ztag_nameZdtypesZdtypes_copyr   r   r   Úmerge_kernel_metadata"  s     rm   c                 C   sd   t tƒ}t|  ¡ ƒt| ¡ ƒ D ]0}||  |  |g ¡¡ ||  | |g ¡¡ q dd„ | ¡ D ƒS )Nc                 S   s   i | ]\}}|t |ƒ“qS r   r`   )r%   rH   Úvalr   r   r   rb   :  s      z,merge_et_kernel_metadata.<locals>.<dictcomp>)r   r*   r4   r+   Úupdater0   r7   )rk   rl   Úmerge_et_kernel_metadatarH   r   r   r   rp   1  s
    rp   c           
   	   C   s‚   | j p
|j }t| j|jƒ}t| j|jƒ}t| j|jƒ}t| j|jƒ}| j	pN|j	}| j
 |j
¡}| j |j¡}	t|||||||	|ƒS r"   )r   r   r   r   r   rm   r   rp   r   r   r   Úunionr   r   )
rk   rl   r   r    r   r   r   r   r   r   r   r   r   Úcombine_selective_builders=  s,     ÿ
ÿørr   )rA   r   c                 C   s   | j › d| jj› �S )Nz::)Ú	namespacerM   rF   )rA   r   r   r   rN   X  s    rN   )Úcollectionsr   Úcollections.abcr   Údataclassesr   Útypingr   r   r   r   r	   r;   Ztorchgen.modelr
   Z!torchgen.selective_build.operatorr   r   r   r   r   r$   rm   rp   rr   rN   r   r   r   r   Ú<module>   s.     ýý þ