U
    d                     @   sp  U d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZ ede	ejeej f f Zi aeeeef eeef f ed< i aee	eef ef ed< dd	 Zeed
ddZeeedddZeed
ddZedddZeed
ddZdd ZeeedddZeeedddZeeedddZeeeed d!d"ZG d#d$ d$e Z!dS )%    N)AnyCallableDictTupleUnion)_C)
_constants.	_registry_symbolic_versionsc                  C   s4   t tjtjgD ]} td| }|t| < qd S )Nztorch.onnx.symbolic_opset{})		itertoolschainr   Zonnx_stable_opsetsonnx_main_opset	importlibimport_moduleformatr
   )Zopset_versionmodule r   @/tmp/pip-unpacked-wheel-ua33x9lu/torch/onnx/symbolic_registry.py_import_symbolic_opsets   s     r   domainversionc                 C   s$   t | |si t| |f< t| | d S N)is_registered_versionr	   register_ops_in_versionr   r   r   r   register_version'   s    
r   r   r   iter_versionc                 C   s2   t |D ]$\} }}t|| |st||| | qd S r   )get_ops_in_versionis_registered_opregister_op)r   r   r   Zop_nameZop_funcr   r   r   register_ops_helper.   s    r!   c                 C   sD   |}|dkr4t | || |dkr*|d }q|d }qt | |d d S )N	      )r!   r   r   r   r   r   4   s    

r   )r   c                 C   s
  t s
t  tt |  }g }|D ]}t|d tr~t|d dr~tj|d tjd}|D ]"}||d j	|d |d f qXq t|d r |d dkrd|d f}|d dkrd|d f}|d d	krd
|d f}|d dkrd|d f}|d|d |d f q |S )Nr#   r   )	predicater   _lenlenZ_listlistZ_anyanyZ_allall )
r
   r   inspect
getmembers
isinstancetypehasattr
isfunctionappendr   )r   membersZdomain_opname_opsobjopsopr   r   r   r   Q   s(    "r   c                 C   s   | |ft kS r   )r	   r   r   r   r   r   i   s    r   c                 C   sD   |d ks|d krt d t||s0i t||f< |t||f | < d S )NzHONNX export failed. The ONNX domain and/or version to register are None.)warningswarnr   r	   )opnamer5   r   r   r   r   r   r    n   s    
r    r8   r   r   c                 C   s6   |d ks|d krt d ||ftko4| t||f kS Nz<ONNX export failed. The ONNX domain and/or version are None.)r6   r7   r	   r9   r   r   r   r   y   s    
r   c                 C   sH   t | ||r2t||f | = t||f sDt||f= ntd|  d  d S )NzThe opname z is not registered.)r   r	   r6   r7   r9   r   r   r   unregister_op   s
    r;   c                 C   s>   |}|t jkr:dd t|D }|| f|kr0|S |d7 }qd S )Nc                 S   s   g | ]}|d  |d fqS )r   r#   r   ).0r5   r   r   r   
<listcomp>   s     z,get_op_supported_version.<locals>.<listcomp>r#   )r   r   r   )r8   r   r   r   r4   r   r   r   get_op_supported_version   s    

r>   )r8   r   r   returnc                 C   sB   |d ks|d krt d t| ||s2t|| |t||f |  S r:   )r6   r7   r   UnsupportedOperatorErrorr	   r9   r   r   r   get_registered_op   s
    
rA   c                       s&   e Zd Zeeed fddZ  ZS )r@   )r   r8   r   c                    sr   t |||}|dkrPd| d| d| d}|d k	rF|d| d7 }qb|d7 }nd	| d| d
}t | d S )N>   r*   aten	quantizedprimzExporting the operator z::z to ONNX opset version z is not supported. z/Support for this operator was added in version z", try exporting with this version.zOPlease feel free to request support or submit a pull request on PyTorch GitHub.z>ONNX export failed on an operator with unrecognized namespace zo. If you are trying to export a custom operator, make sure you registered it with the right domain and version.)r>   super__init__)selfr   r8   r   Zsupported_versionmsg	__class__r   r   rF      s    

z!UnsupportedOperatorError.__init__)__name__
__module____qualname__strintrF   __classcell__r   r   rI   r   r@      s   r@   )"r   r+   r   r6   typingr   r   r   r   r   Ztorchr   Z
torch.onnxr   ValueZ_SymbolicFunctionr	   rN   rO   __annotations__r
   r   r   r!   r   r   r   r    r   r;   r>   rA   RuntimeErrorr@   r   r   r   r   <module>   s6    



	