U
    Mh                      @   s  d Z ddlZddl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 ddlmZmZmZ dgZejejdd	Zed
edejejdddZededdddddejejejejee ee ee dddZededdgdedejddddgdejdPeeeddd Z ed!e!ddddeddddd"ejejejee ejeje"eejejejf d#d$d%Z#ed&edd'ejejdd(d)Z$ed*ejdQejdd+d,Z%ed-e!ddejejdd.d/Z&ed0ejdRejdd1d2Z'ed3e!ddejejdd4d5Z(ed6e!deddd'ejejdd7d8Z)ed9e!deddd'ejejdd:d;Z*ed<e!deddd'ejejdd=d>Z+ed?ejejdd@dAZ,edBeddd'ejejddCdDZ-edEeddddFdejejejjejjee eejjdGdHdIZ.edJedddd'd'd'dd'd'	ejejddKdLZ/edMedd"ddFdejejejje"eee  eejjdGdNdOZ0dS )Sa  This file exports ONNX ops for opset 18.

Note [ONNX Operators that are added/updated in opset 18]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://github.com/onnx/onnx/blob/main/docs/Changelog.md#version-18-of-the-default-onnx-operator-set
New operators:
    BitwiseAnd
    CenterCropPad
    Col2Im
    Mish
    OptionalGetElement
    OptionalHasElement
    Pad
    Resize
    ScatterElements
    ScatterND
    Split
    N)ListOptionalSequenceTuple)_C)_type_utilssymbolic_helpersymbolic_opset9)	_beartype	jit_utilsregistrationcol2im   )Zopsetzaten::__and_zaten::bitwise_and)gc                 C   st   ||g}dd |D }t |dkr&|}tj| }t| ||}t| ||}|tjjkrf| d||S | d||S )Nc                 S   s   g | ]}t |r|qS  )r   Z_get_tensor_rank).0argr   r   M/var/www/html/venv/lib/python3.8/site-packages/torch/onnx/symbolic_opset18.py
<listcomp>/   s     
 z__and_.<locals>.<listcomp>r   AndZ
BitwiseAnd)lenr   Z_type_promote_from_valuesZ_maybe_cast_to_typer   ZJitScalarTypeZBOOLop)r   selfotherargsZ	prom_argsZpromotion_jit_typer   r   r   __and_(   s    
r   zaten::col2imvis)inputoutput_sizekernel_sizedilationpaddingstridec              	   C   sx   g }|D ]}t dD ]}	|| qqt|d }
|sDddg|
 }|sRdg|
 }|s`dg|
 }| jd||||||dS )N   r      ZCol2Im)Zdilations_iZpads_iZ	strides_i)rangeappendr   Z_get_tensor_sizesr   )r   r   r   r    r!   r"   r#   Zadjusted_paddingpad_Znum_dimensional_axisr   r   r   r   :   s(    

z
aten::meanZ
ReduceMeanZmean)Zdecoratez
aten::prodZ
ReduceProdprodF)allow_multi_dim_supportTZonnx_opnamer+   c                 C   s   t | ||S N)r   Z_reduce_with_dtype_helperr,   r   r   r   _reduce_with_dtypea   s
      r/   zaten::native_layer_normf)r   r   normalized_shapeweightbiasepsreturnc                 C   s   t | |||||S r.   )opset9Znative_layer_norm)r   r   r1   r2   r3   r4   r   r   r   _native_layer_norms   s    r7   z	aten::gluic                 C   sR   t ||}|d k	r$|d dks$t| jd||ddd\}}| d|| d|S )Nr$   r   ZSplit)Zaxis_iZnum_outputs_ioutputsZMulZSigmoid)r   Z_get_tensor_dim_sizeAssertionErrorr   )r   r   dimZdim_sizefirstsecondr   r   r   _glu   s
    r>   z	aten::maxc                 C   s   t | |||S r.   )r   Z_max_helperr   r   dim_or_ykeepdimr   r   r   max   s    rB   zaten::maximumc                 C   s   t | ||dS N)r@   )rB   r   r   r   r   r   r   maximum   s    rE   z	aten::minc                 C   s   t | |||S r.   )r   Z_min_helperr?   r   r   r   min   s    rF   zaten::minimumc                 C   s   t | ||dS rC   )rF   rD   r   r   r   minimum   s    rG   z
aten::amaxc                 C   s,   | j dtj|tjdd}| j d|||dS )NConstantdtypeZvalue_t	ReduceMaxZ
keepdims_ir   torchtensorlongr   r   r;   rA   axesr   r   r   amax   s    rT   z
aten::aminc                 C   s,   | j dtj|tjdd}| j d|||dS )NrH   rI   rK   	ReduceMinrM   rN   rR   r   r   r   amin   s    rV   zaten::aminmaxc                 C   s|   t |sXt |dd}| jdtj|gtjdd}| jd|||d| jd|||dfS | jd||d| jd||dfS d S )	Nr8   r;   rH   rI   rK   rU   rM   rL   )r   Z_is_noneZ
_get_constr   rO   rP   rQ   rR   r   r   r   aminmax   s    
     rW   zaten::var_meanc                 G   s8   t |dkr"t| |d |d d S tj| |f| S d S )Nr%   r   )r   r   Z_var_mean_helper)r   r   r   r   r   r   	_var_mean   s    rX   zaten::logsumexpc                 C   sH   |d kr| j d|ddS | j dtj|tjdd}| j d|||dS d S )NZReduceLogSumExpr   rM   rH   rI   rK   rN   )r   r   r;   rA   rS   r   r   r   
_logsumexp   s    rY   zaten::linalg_matrix_normbr   r   ordr;   rA   rJ   c                 C   s   t | |||||S r.   )r6   Zlinalg_matrix_normr[   r   r   r   _linalg_matrix_norm   s    r]   zaten::embedding_bagc
           
      C   s   t | |||||||||	
S r.   )r   Z_embedding_bag_helper)
r   Zembedding_matrixindicesoffsetsZscale_grad_by_freqmodesparseZper_sample_weightsZinclude_last_offsetZpadding_idxr   r   r   embedding_bag   s    rb   zaten::linalg_vector_normc                 C   s   t | |||||S r.   )r   Z_linalg_vector_norm_helperr[   r   r   r   linalg_vector_norm  s    rc   )T)NN)NN)1__doc__	functoolstypingr   r   r   r   rO   r   Z
torch.onnxr   r   r	   r6   Ztorch.onnx._internalr
   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicZbeartypeZGraphContextr   
parse_argsValueintr   Z_apply_paramsstrboolr/   Zquantized_argsfloatr7   r>   rB   rE   rF   rG   rT   rV   rW   rX   rY   r]   rb   rc   r   r   r   r   <module>   s   $   
	


