U
    <ºcG  ã                   @   s<  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 eje
jddZedƒe d	¡eje	jd
œdd„ƒƒƒZedƒejde	jd
œdd„ƒƒZedƒejde	jd
œdd„ƒƒZedƒe d	d	¡eje	jd
œdd„ƒƒƒZedƒe d	d	d	d	d	dddd¡	eje	jd
œdd„ƒƒƒZedƒeje	jd
œdd„ƒƒZdS ) a&  This file exports ONNX ops for opset 14.

Note [ONNX operators that are added/updated in opset 14]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New operators:
    HardSwish, Trilu

Updated operators:
    Reshape
    Add, Sub, Mul, Div
    GRU, LSTM, RNN
    BatchNorm, Cumsum, Relu
é    N)Úsymbolic_helper)ÚGLOBALS)Ú	_beartypeÚ	jit_utilsÚregistrationé   )Zopsetzaten::hardswishÚv)Úgc                 C   s   |   d|¡S )NZ	HardSwish©Úop)r	   Úself© r   ú?/tmp/pip-unpacked-wheel-gikjz4vx/torch/onnx/symbolic_opset14.pyÚ	hardswish   s    r   z
aten::trilc                 C   s   | j d||ddS )NÚTrilur   ©Zupper_ir
   ©r	   r   ZdiagonalÚoutr   r   r   Útril#   s    r   z
aten::triuc                 C   s   | j d||ddS )Nr   é   r   r
   r   r   r   r   Útriu)   s    r   zaten::reshapec                 C   s   t j| ||ddS )Nr   )Z	allowzero)r   Z_reshape_helper)r	   r   Úshaper   r   r   Úreshape/   s    r   zaten::batch_normÚiÚfc
                 C   sÈ   t  ¡ r8t |||||g¡s8tjdk r8t dddd|¡S t |d¡ t | |||||¡\}}}}| j	d||||||d| |s€dnd|sŠdndd	
}
|sš|
S |
\}}}| 
| ¡ ¡ | 
| ¡ ¡ |S d S )
Né   ZBatchNormalizationr   zaAll input tensors must have the same `dtype`. Turn off Autocast or export using opset version 15.Ú
batch_normr   r   é   )Z	epsilon_fZ
momentum_fZtraining_mode_iÚoutputs)ÚtorchZis_autocast_enabledr   Zargs_have_same_dtyper   Zexport_onnx_opset_versionZ _onnx_opset_unsupported_detailedZcheck_training_modeZ_batchnorm_helperr   ZsetTypeÚtype)r	   ÚinputZweightZbiasZrunning_meanZrunning_varZtrainingZmomentumZepsZcudnn_enabledr   ÚresZnew_running_meanZnew_running_varr   r   r   r   8   sT    ÿÿþûú	     ÿ

ö
r   zquantized::hardswishc                 C   s.   t  | |¡\}}}}t| |ƒ}t  | |||¡S )N)r   Zdequantize_helperr   Zquantize_helper)r	   ÚxZop_scaleZop_zero_pointÚ_Úoutputr   r   r   Úquantized_hardswishq   s    
r&   )N)N)Ú__doc__Ú	functoolsr   Z
torch.onnxr   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   ÚpartialZonnx_symbolicZ_onnx_symbolicÚ
parse_argsZbeartypeZGraphContextr   r   r   r   r   r&   r   r   r   r   Ú<module>   s8   
ÿ6