o
    ki5                     @  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	r6d dlmZ ed	d
G dd dZdddZdddZdddZ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                   @  s   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Zed;ddZed<ddZed=ddZed>dd Z	d?d"d#Z
d@d&d'Zd?d(d)Zd@d*d+Zd?d,d-ZdAd0d1ZdBd5d6ZdCd7d8Zd9S )DSelectiveBuilderboolinclude_all_operatorsztuple[str, ...] | None_debug_infoz!dict[str, SelectiveBuildOperator]	operatorsdict[str, list[str]]kernel_metadataet_kernel_metadata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   k/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torchgen/selective_build/selector.pyget_nop_selectorF   s   z!SelectiveBuilder.get_nop_selectordatadict[str, object]c              	   C  s  h d}t |  }t|| dkrtdd|| | dd}t|ts2t	dt
| d }d| v rS| d }t|tsJt	d	t
| td
d |D }i }| di }t|tsit	dt
| | D ]\}}	t||	||< qmi }
| di }t|tst	dt
| | D ]\}}	dd |	D |
t|< q| di }t|tst	dt
| | dg }t|tst	dt
| t |}| dg }t|tst	dt
| t |}| dd}t|tst	dt
| t||||
||||S )N>   r   
debug_infor   r   r   r   r   r   r   z!Got unexpected top level keys: {},r   Fz1Expected 'include_all_operators' to be bool, got r!   z&Expected 'debug_info' to be list, got c                 s  s    | ]}t |V  qd S Nstr).0xr   r   r   	<genexpr>k   s    z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>r   z%Expected 'operators' to be dict, got r   z+Expected 'kernel_metadata' to be dict, got c                 S  s   g | ]}t |qS r   r$   )r&   dtyper   r   r   
<listcomp>   s    z3SelectiveBuilder.from_yaml_dict.<locals>.<listcomp>r   z.Expected 'et_kernel_metadata' to be dict, got r   z.Expected 'custom_classes' to be Iterable, got r   z.Expected 'build_features' to be Iterable, got r   z9Expected 'include_all_non_op_selectives' to be bool, got )setkeyslen	Exceptionformatjoinget
isinstancer   AssertionErrortypelisttupledictitemsr	   r   r%   r   r   )r   valid_top_level_keystop_level_keysr   r!   di_listr   operators_dictkvr   kernel_metadata_dictr   r   r   r   r   r   r   r   J   s   








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_pathc                 C  s@   t | }t|}t|W  d    S 1 sw   Y  d S r#   )openrA   rB   r   r   )rE   frC   r   r   r   from_yaml_path   s   

$zSelectiveBuilder.from_yaml_path
allow_listis_root_operatoris_used_for_trainingc                 C  s0   i }| D ]}|||dd||< qt |ddS )NT)namerJ   rK   include_all_overloads)r   r   r   )rI   rJ   rK   r   opr   r   r   &from_legacy_op_registration_allow_list   s   z7SelectiveBuilder.from_legacy_op_registration_allow_listrL   c                 C  s6   | j rdS || jv rdS t|}|| jv o| j| jS NT)r   r   r
   rM   )selfrL   r   r   r   is_operator_selected   s   
z%SelectiveBuilder.is_operator_selectedfuncr   c                 C     t |}| |S r#   )op_name_from_native_functionrR   rQ   rS   op_namer   r   r   is_native_function_selected      
z,SelectiveBuilder.is_native_function_selectedc                 C  st   |  |sdS | jrdS tddddd d}|}|| jv r!| j| }t|}|}|| jv r1| j| }|jp9|jo9|jS )NFT )rL   rJ   rK   rM   r   )rR   r   r	   r   r
   rK   rM   )rQ   rL   not_training_oprN   base_opr   r   r   !is_operator_selected_for_training   s*   





z2SelectiveBuilder.is_operator_selected_for_trainingc                 C  rT   r#   )rU   r]   rV   r   r   r   (is_native_function_selected_for_training   rY   z9SelectiveBuilder.is_native_function_selected_for_trainingc                 C  s^   |  |sdS | jrdS || jv r| j| }|jS t|}|| jvr$dS | j| }|jo.|jS )NFT)rR   r   r   rJ   r
   rM   )rQ   rL   rN   r\   r   r   r   rJ      s   




z!SelectiveBuilder.is_root_operator
kernel_tagr)   c                 C  s(   | j s| jrdS || jv o|| j| v S rP   )r   r   r   )rQ   r_   r)   r   r   r   is_kernel_dtype_selected   s
   
z)SelectiveBuilder.is_kernel_dtype_selectedrW   
kernel_key	list[str]c                 C  s   || j vr| jr
|S g S t }| j | D ]3}d}|D ]}|dkr7|dd |dd kr7|| d} nq|sGd|vrBtd|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.   r5   )rQ   rW   ra   
result_setmodel_kernel_keys	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r)t| j|d< dd | j D |d< | j|d< t| j	|d< t| j
|d	< |S )
N)r   r   r   r!   c                 S     i | ]	\}}|t |qS r   sorted)r&   r=   r>   r   r   r   
<dictcomp>3  s    z,SelectiveBuilder.to_dict.<locals>.<dictcomp>r   r   r   r   )r   r   r   r8   to_dictr   ro   r   r   r   r   )rQ   retr   rW   rN   r   r   r   rq   &  s    


zSelectiveBuilder.to_dictN)r   r   )r   r    r   r   )r@   r%   r   r   )rE   r%   r   r   )rI   r   rJ   r   rK   r   r   r   )rL   r%   r   r   )rS   r   r   r   )r_   r%   r)   r%   r   r   )rW   r%   ra   rb   r   rb   )r   r    )__name__
__module____qualname____annotations__staticmethodr   r   rD   rH   rO   rR   rX   r]   r^   rJ   r`   rl   rq   r   r   r   r   r      s6   
 \

	




	r   lhsr   rhsr   c                 C  sV   i }t |  t |  D ]\}}t|}||v r"|t|| O }t |||< q|S r#   )r5   r8   r+   )rx   ry   r   tag_namedtypesdtypes_copyr   r   r   merge_kernel_metadata@  s    r}   c                 C  sd   t t}t|  t|  D ]}|| | |g  || ||g  qdd | D S )Nc                 S  rm   r   rn   )r&   rN   valr   r   r   rp   X  s    z,merge_et_kernel_metadata.<locals>.<dictcomp>)r   r+   r5   r,   updater1   r8   )rx   ry   merge_et_kernel_metadatarN   r   r   r   r   O  s
   r   c           
   	   C  s   | j p|j }t| j|j}t| j|j}t| j|j}t| j|j}| j	p'|j	}| j
|j
}| j|j}	t|||||||	|S r#   )r   r   r   r   r   r}   r   r   r   r   r   unionr   r   )
rx   ry   r   r!   r   r   r   r   r   r   r   r   r   combine_selective_builders[  s*   
r   rG   r   r%   c                 C  s   | j  d| jj S )Nz::)	namespacerS   rL   )rG   r   r   r   rU   v  s   rU   )rx   r   ry   r   r   r   )rx   r   ry   r   r   r   )rG   r   r   r%   )
__future__r   collectionsr   collections.abcr   dataclassesr   typingr   rA   !torchgen.selective_build.operatorr   r   r	   r
   torchgen.modelr   r   r}   r   r   rU   r   r   r   r   <module>   s"    
  
$

