U
    d                     @   s   d dl mZmZmZ d dlmZ eddG dd dZeeedf  eeedf  eeedf  dd	d
ZddddddZ	eeef eeef eeef dddZ
eedddZdS )    )DictOptionalTuple)	dataclassT)frozenc                   @   s   e Zd ZU eed< eed< eed< eed< eeedf  ed< eee	ee
f d ddd	Zeed d
ddZe	ee
f dddZdS )SelectiveBuildOperatornameis_root_operatoris_used_for_traininginclude_all_overloads._debug_info)op_nameop_inforeturnc                 C   s   dddddh}t t| | dkrFtddt| | d|kr^| |d ks^t|dd	}t|t	sxt|dd	}t|t	st|dd	}t|t	std }d|kr|d }t|t
stttd
d |}t| ||||dS )Nr   r	   r
   r   
debug_infor   z!Got unexpected top level keys: {},Tc                 S   s   t | S N)str)x r   E/tmp/pip-unpacked-wheel-ua33x9lu/torchgen/selective_build/operator.py<lambda>U       z7SelectiveBuildOperator.from_yaml_dict.<locals>.<lambda>r   r	   r
   r   r   )lensetkeys	ExceptionformatjoinAssertionErrorget
isinstanceboollisttuplemapr   )r   r   Zallowed_keysr	   r
   r   r   Zdi_listr   r   r   from_yaml_dict2   s@    z%SelectiveBuildOperator.from_yaml_dict)r   r   c                 C   s   t | dddd dS )NTr   )r   )r   r   r   r   *from_legacy_operator_name_without_overload_   s    zASelectiveBuildOperator.from_legacy_operator_name_without_overload)r   c                 C   s*   | j | j| jd}| jd k	r&| j|d< |S )N)r	   r
   r   r   )r	   r
   r   r   )selfretr   r   r   to_dictk   s    

zSelectiveBuildOperator.to_dictN)__name__
__module____qualname__r   __annotations__r#   r   r   staticmethodr   objectr'   r(   r+   r   r   r   r   r   
   s   
 
,r   .)lhsrhsr   c                 C   s,   | d kr|d krd S t t| pd|p$d S )Nr   )r%   r   r2   r3   r   r   r   merge_debug_infow   s    r5   c                 C   sf   t | jt |jkr0tdt | jt |jt| j| jp@|j| jpJ|j| jpT|jt| j	|j	dS )NzLExpected both arguments to have the same name, but got '{}' and '{}' insteadr   )
r   r   r   r   r   r	   r
   r   r5   r   r4   r   r   r   combine_operators   s    


r6   c                 C   sL   i }t |  t |  D ]*\}}|}||kr>t|| |}|||< q|S r   )r$   itemsr6   )r2   r3   	operatorsr   opZnew_opr   r   r   merge_operator_dicts   s     
r:   )r   r   c                 C   s   |  dd S )N.r   )split)r   r   r   r   strip_operator_overload_name   s    r=   N)typingr   r   r   Zdataclassesr   r   r   r5   r6   r:   r=   r   r   r   r   <module>   s    m 


