U
    <c                     @   s   d dl Z d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 G dd dZdd	 Zeeef d
ddZeeef d
ddZdS )    N)DictListUnion)_C)
_constants)registrationc                   @   sf   e Zd Zeejef ddddZedddZdd	 Z	e
dd
dZe
dddZe
dddZdS )_TorchSchemaN)schemareturnc                 C   sv   t |tjrN|j| _|j| _dd |jD | _g | _dd |jD | _g | _n$|| _d| _g | _g | _g | _g | _d S )Nc                 S   s   g | ]
}|j qS  name).0argr   r   B/tmp/pip-unpacked-wheel-gikjz4vx/torch/onnx/_onnx_supported_ops.py
<listcomp>   s     z)_TorchSchema.__init__.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   r   )r   retr   r   r   r      s      )	
isinstancer   FunctionSchemar   overload_name	argumentsZoptional_argumentsreturnsopsets)selfr	   r   r   r   __init__
   s    z_TorchSchema.__init__r
   c                 C   sR   | j  d| j dd| j d d| j d d ddd | jD  }|S )	N.(z, z) -> ()z in opsets c                 s   s   | ]}t |V  qd S N)str)r   Zopsetr   r   r   	<genexpr>"   s     z'_TorchSchema.__str__.<locals>.<genexpr>)r   r   joinr   r   r   )r   sr   r   r   __str__   s    

	z_TorchSchema.__str__c                 C   s
   t | jS r    )hashr   r   r   r   r   __hash__&   s    z_TorchSchema.__hash__c                 C   s   t |tsdS | j|jkS )NF)r   r   r   )r   otherr   r   r   __eq__*   s    
z_TorchSchema.__eq__c                 C   s   | j dS )Nzaten::)r   
startswithr'   r   r   r   is_aten0   s    z_TorchSchema.is_atenc                 C   s
   d| j kS )NZbackwardr   r'   r   r   r   is_backward3   s    z_TorchSchema.is_backward)__name__
__module____qualname__r   r   r   r!   r   r%   r(   boolr*   r,   r-   r   r   r   r   r   	   s   r   c                 C   sZ   g }t | }g }|j D ]8\}}|dkr.q|j|jkrF|| q|t| q|S )N>   _outputsg)inspect	signature
parametersitemsdefaultemptyappendr!   )funcparamsr5   Zoptional_paramsr   Z	parameterr   r   r   _symbolic_argument_count7   s    
r=   r   c                  C   s    dd t  D } dd | D S )z0Returns schemas for all TorchScript forward ops.c                 S   s   g | ]}t |qS r   )r   )r   r$   r   r   r   r   G   s     z'all_forward_schemas.<locals>.<listcomp>c                 S   s   i | ]}|  s|j|qS r   )r-   r   )r   r	   r   r   r   
<dictcomp>H   s       z'all_forward_schemas.<locals>.<dictcomp>)r   Z_jit_get_all_schemas)Ztorch_schemasr   r   r   all_forward_schemasE   s    r?   c                  C   s   i } t j D ]}t j|}|dk	s*tt|}|tj}|dk	rlt	||_
tt| tjd |_n&|d}t	||_
ttdtj|_|| |< q| S )z+Returns schemas for all onnx supported ops.N      )r   registryZall_functionsZget_function_groupAssertionErrorr   getr   ZONNX_MAX_OPSETr=   r   listrangeZget_min_supportedr   ZONNX_BASE_OPSET)Zsymbolics_schemasr   Z
func_groupZsymbolics_schemar;   r   r   r   all_symbolics_schemasK   s     



rG   )r4   typingr   r   r   Ztorchr   Z
torch.onnxr   Ztorch.onnx._internalr   r   r=   r!   r?   rG   r   r   r   r   <module>   s   .