a
    h                     @   s  d Z ddlZddlmZ ddl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 dgZejejd	d
ZededejdddZede
dddddd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dQeeedd d!Zed"e
dddde
ddddd#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dd)d*Z"ed+dRejdd,d-Z#ed.e
ddejdd/d0Z$ed1dSejdd2d3Z%ed4e
ddejdd5d6Z&ed7e
de
ddd(ejdd8d9Z'ed:e
de
ddd(ejdd;d<Z(ed=e
de
ddd(ejdd>d?Z)ed@ejddAdBZ*edCe
ddd(ejddDdEZ+edFe
ddddGdejejjejje,e eejjdHdIdJZ-edKe
dddd(d(d(dd(d(	ejddLdMZ.edNe
dd#ddGdejejjeeee  eejjdHdOdPZ/dS )Ta  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)Sequence)Optional)_C)_type_utilssymbolic_helpersymbolic_opset9)	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   I/var/www/auris/lib/python3.9/site-packages/torch/onnx/symbolic_opset18.py
<listcomp>0       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           	   	      s|   g }|D ]  |  fddtdD  qt|d }|sHddg| }|sVdg| }|sddg| }| jd||||||dS )Nc                 3   s   | ]
} V  qd S Nr   )r   _padr   r   	<genexpr>I   r   zcol2im.<locals>.<genexpr>   r      ZCol2Im)Zdilations_iZpads_iZ	strides_i)extendranger   Z_get_tensor_sizesr   )	r   r   r   r   r   r    r!   Zadjusted_paddingZnum_dimensional_axisr   r$   r   r
   ;   s&    

z
aten::meanZ
ReduceMeanmean)Zdecoratez
aten::prodZ
ReduceProdprodF)allow_multi_dim_supportTZonnx_opnamer-   c                 C   s   t | ||S r"   )r   Z_reduce_with_dtype_helperr.   r   r   r   _reduce_with_dtype`   s    r0   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   r2   r3   r4   r5   r   r   r   _native_layer_normq   s    r8   z	aten::gluic                 C   sR   t ||}|d ur$|d dks$J | 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_sizer   )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 )	Nr9   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   s:   t |dkr"t| |d |d d S tj| |g|R  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 u 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"   )r7   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)0__doc__	functoolscollections.abcr   typingr   rO   r   Z
torch.onnxr   r   r   r7   Ztorch.onnx._internalr   r	   __all__partialZonnx_symbolicZ_onnx_symbolicZGraphContextr   
parse_argsValueintr
   Z_apply_paramsstrboolr0   Zquantized_argsfloattupler8   r>   rB   rE   rF   rG   rT   rV   rW   rX   rY   listr]   rb   rc   r   r   r   r   <module>   s   #
	


