a
    hz1                     @  s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlmZmZmZmZ e	rld dlmZ ed	d
G dd dZddddddZddddddZddddddZdddddZdS )    )annotations)defaultdict)Iterable)	dataclass)TYPE_CHECKINGN)merge_debug_infomerge_operator_dictsSelectiveBuildOperatorstrip_operator_overload_name)NativeFunctionT)frozenc                   @  s6  e Zd ZU ded< ded< ded< ded< ded	< d
ed< d
ed< ded< ed dddZedd dddZedd dddZedd dddZed
ddd dddZ	dddd d!Z
d"dd#d$d%Zdddd&d'Zd"dd#d(d)Zdddd*d+Zdddd,d-d.Zdd/d/d0d1d2Zddd3d4Zd5S )6SelectiveBuilderboolinclude_all_operatorsztuple[str, ...] | None_debug_infoz!dict[str, SelectiveBuildOperator]	operatorsdict[str, list[str]]kernel_metadataet_kernel_metadatazset[str]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   O/var/www/auris/lib/python3.9/site-packages/torchgen/selective_build/selector.pyget_nop_selectorF   s    z!SelectiveBuilder.get_nop_selectorzdict[str, object])datar   c              	   C  s  h d}t |  }t|| dkr<tdd|| | dd}t|tsVJ d }d| v r| d }t|t	sxJ t
dd	 |D }i }| d
i }t|tsJ | D ]\}}	t||	||< qi }
| di }t|tsJ | D ]\}}	dd |	D |
t|< q| di }t|ts,J | dg }t|tsHJ t |}| dg }t|tslJ t |}| dd}t|tsJ t||||
||||S )N>   r   r   r   r   
debug_infor   r   r   r   z!Got unexpected top level keys: {},r   Fr   c                 s  s   | ]}t |V  qd S Nstr).0xr   r   r   	<genexpr>e       z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>r   r   c                 S  s   g | ]}t |qS r   r"   )r$   dtyper   r   r   
<listcomp>s   r'   z3SelectiveBuilder.from_yaml_dict.<locals>.<listcomp>r   r   r   r   )setkeyslen	Exceptionformatjoinget
isinstancer   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   J   sZ    
zSelectiveBuilder.from_yaml_dictr#   )config_contentsr   c                 C  s   t | }t|S r!   )yaml	safe_loadr   r   )r8   contentsr   r   r   from_yaml_str   s    
zSelectiveBuilder.from_yaml_str)config_pathr   c                 C  s@   t | $}t|}t|W  d    S 1 s20    Y  d S r!   )openr9   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)namerB   rC   include_all_overloads)r   r   r   )rA   rB   rC   r   opr   r   r   &from_legacy_op_registration_allow_list   s    z7SelectiveBuilder.from_legacy_op_registration_allow_list)rD   r   c                 C  s6   | j r
dS || jv rdS t|}|| jv o4| j| jS NT)r   r   r
   rE   )selfrD   r   r   r   is_operator_selected   s    
z%SelectiveBuilder.is_operator_selectedr   )funcr   c                 C  s   t |}| |S r!   )op_name_from_native_functionrJ   rI   rK   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v rB| j| }t|}|}|| jv rb| j| }|jpr|jor|jS )NFT )rD   rB   rC   rE   r   )rJ   r   r	   r   r
   rC   rE   )rI   rD   Znot_training_oprF   base_opr   r   r   !is_operator_selected_for_training   s*    





z2SelectiveBuilder.is_operator_selected_for_trainingc                 C  s   t |}| |S r!   )rL   rR   rM   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v r2| j| }|jS t|}|| jvrHdS | j| }|jo\|jS )NFT)rJ   r   r   rB   r
   rE   )rI   rD   rF   rQ   r   r   r   rB      s    




z!SelectiveBuilder.is_root_operator)
kernel_tagr(   r   c                 C  s(   | j s| jrdS || jv o&|| j| v S rH   )r   r   r   )rI   rT   r(   r   r   r   is_kernel_dtype_selected   s
    
z)SelectiveBuilder.is_kernel_dtype_selectedz	list[str])rN   
kernel_keyr   c                 C  s   || j v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|vrt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-   r2   )rI   rN   rV   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 u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$   r6   r7   r   r   r   
<dictcomp>  s   z,SelectiveBuilder.to_dict.<locals>.<dictcomp>r   r   r   r   )r   r   r   r5   to_dictr   r_   r   r   r   r   )rI   retr   rN   rF   r   r   r   ra     s     


zSelectiveBuilder.to_dictN)__name__
__module____qualname____annotations__staticmethodr   r   r<   r@   rG   rJ   rO   rR   rS   rB   rU   r]   ra   r   r   r   r   r      s4   
C		r   r   )lhsrhsr   c                 C  sV   i }t |  t |  D ]4\}}t|}||v rD|t|| O }t |||< q|S r!   )r2   r5   r*   )rh   ri   r   Ztag_nameZdtypesZdtypes_copyr   r   r   merge_kernel_metadata'  s     rj   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$   rF   valr   r   r   r`   ?  r'   z,merge_et_kernel_metadata.<locals>.<dictcomp>)r   r*   r2   r+   updater0   r5   )rh   ri   merge_et_kernel_metadatarF   r   r   r   rm   6  s
    rm   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   rj   r   rm   r   r   r   unionr   r   )
rh   ri   r   r   r   r   r   r   r   r   r   r   r   combine_selective_buildersB  s*    
ro   r   r#   )r?   r   c                 C  s   | j  d| jj S )Nz::)	namespacerK   rD   )r?   r   r   r   rL   ]  s    rL   )
__future__r   collectionsr   collections.abcr   Zdataclassesr   typingr   r9   Z!torchgen.selective_build.operatorr   r   r	   r
   Ztorchgen.modelr   r   rj   rm   ro   rL   r   r   r   r   <module>   s    
  