a
    dI(                     @   s   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d
ddZe
edddZdS )    )	dataclass)DictListOptionalSetTupleN)NativeFunction)merge_debug_infomerge_operator_dictsSelectiveBuildOperatorstrip_operator_overload_nameT)frozenc                   @   sX  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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f d	d'd(Zd)S )*SelectiveBuilderinclude_all_operators._debug_info	operators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   j/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torchgen/selective_build/selector.pyget_nop_selector:   s    z!SelectiveBuilder.get_nop_selector)datar   c                 C   sl  h d}t |  }t|| dkr<tdd|| | dd}t|tsVJ d }d| v r| d }t|t	sxJ t
tdd	 |}i }| d
i }t|tsJ | D ]\}}	t||	||< qi }
| di }t|tsJ | D ]"\}}	t	tdd	 |	|
t|< q| dg }t |}| dg }t |}| dd}t|tsXJ t||||
|||S )N>   r   
debug_infor   r   r   r   r   r   z!Got unexpected top level keys: {},r   Fr   c                 S   s   t | S Nstr)xr   r   r   <lambda>X       z1SelectiveBuilder.from_yaml_dict.<locals>.<lambda>r   r   c                 S   s   t | S r   r    )dtyper   r   r   r#   f   r$   r   r   r   )setkeyslen	Exceptionformatjoinget
isinstanceboollisttuplemapdictitemsr   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   >   sP    	zSelectiveBuilder.from_yaml_dict)config_contentsr   c                 C   s   t | }t|S r   )yaml	safe_loadr   r   )r6   contentsr   r   r   from_yaml_str{   s    
zSelectiveBuilder.from_yaml_str)config_pathr   c                 C   sB   t | d$}t|}t|W  d    S 1 s40    Y  d S )Nr)openr7   r8   r   r   )r;   fr9   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)namerA   rB   include_all_overloads)r   r   r   )r@   rA   rB   r   opr   r   r   &from_legacy_op_registration_allow_list   s    z7SelectiveBuilder.from_legacy_op_registration_allow_list)rC   r   c                 C   s6   | j r
dS || jv rdS t|}|| jv o4| j| jS NT)r   r   r   rD   )selfrC   r   r   r   is_operator_selected   s    
z%SelectiveBuilder.is_operator_selected)funcr   c                 C   s   t |}| |S r   )op_name_from_native_functionrI   rH   rJ   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 )rC   rA   rB   rD   r   )rI   r   r   r   r   rB   rD   )rH   rC   Znot_training_oprE   base_opr   r   r   !is_operator_selected_for_training   s*    





z2SelectiveBuilder.is_operator_selected_for_trainingc                 C   s   t |}| |S r   )rK   rQ   rL   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)rI   r   r   rA   r   rD   )rH   rC   rE   rP   r   r   r   rA      s    




z!SelectiveBuilder.is_root_operator)
kernel_tagr%   r   c                 C   s(   | j s| jrdS || jv o&|| j| v S rG   )r   r   r   )rH   rS   r%   r   r   r   is_kernel_dtype_selected   s
    
z)SelectiveBuilder.is_kernel_dtype_selectedc                 C   s   | j | jd}i }| j D ]\}}| ||< q||d< | jd urRt| j|d< dd | j D |d< t| j|d< t| j	|d< |S )	N)r   r   r   r   c                 S   s   i | ]\}}|t |qS r   )sorted).0r4   r5   r   r   r   
<dictcomp>   s   z,SelectiveBuilder.to_dict.<locals>.<dictcomp>r   r   r   )
r   r   r   r3   to_dictr   rU   r   r   r   )rH   retr   rM   rE   r   r   r   rX      s    

zSelectiveBuilder.to_dictN)__name__
__module____qualname__r.   __annotations__r   r   r!   r   r   r   r   staticmethodr   objectr   r:   r?   rF   rI   r   rN   rQ   rR   rA   rT   rX   r   r   r   r   r      s4   
<
		r   )lhsrhsr   c                 C   sV   i }t |  t |  D ]4\}}t|}||v rD|t|| O }t |||< q|S r   )r/   r3   r&   )r`   ra   r   Ztag_nameZdtypesZdtypes_copyr   r   r   merge_kernel_metadata   s     rb   c           	      C   sr   | j p
|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   rb   r   r   r   unionr   r   )	r`   ra   r   r   r   r   r   r   r   r   r   r   combine_selective_builders  s"    
rd   )r>   r   c                 C   s   | j  d| jj S )Nz::)	namespacerJ   rC   )r>   r   r   r   rK     s    rK   )Zdataclassesr   typingr   r   r   r   r   r7   Ztorchgen.modelr   Z!torchgen.selective_build.operatorr	   r
   r   r   r   r!   rb   rd   rK   r   r   r   r   <module>   s    `