o
    wZh                     @   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dejfddZede
dddddddejdejdejdee dee dee fddZede
ddgdede
jdd d!d"gdd`d$ed%ed&efd'd(Zed)e
d#d!d!d!e
ddddd*dejdejd+ee d,ejd-ejd.ed/e ejejejf fd0d1Z!ed2e
dd3dejfd4d5Z"ed6dadejfd7d8Z#ed9e
d#d#dejfd:d;Z$ed<dadejfd=d>Z%ed?e
d#d#dejfd@dAZ&edBe
d#e
ddd3dejfdCdDZ'edEe
d#e
ddd3dejfdFdGZ(edHe
d#e
ddd3dejfdIdJZ)edKdejfdLdMZ*edNe
ddd3dejfdOdPZ+edQe
ddddRddejdSejjdTejjdUe,e dVedWejjfdXdYZ-edZe
dddd3d3d3dd3d3	dejfd[d\Z.ed]e
dd*ddRddejdSejjdTedUeee  dVedWejjfd^d_Z/dS )ba  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r3| d||S | d||S )Nc                 S   s   g | ]	}t |r|qS  )r   Z_get_tensor_rank).0argr   r   J/var/www/auris/lib/python3.10/site-packages/torch/onnx/symbolic_opset18.py
<listcomp>0   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           	   	      s|   g }|D ] |  fddtdD  qt|d }|s$ddg| }|s+dg| }|s2dg| }| jd||||||dS )Nc                 3   s    | ]} V  qd S Nr   )r   _padr   r   	<genexpr>I   s    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onnx_opnamer,   c                 C   s   t | ||S r!   )r   Z_reduce_with_dtype_helper)r-   r.   r,   r   r   r   _reduce_with_dtype`   s   r/   zaten::native_layer_normfnormalized_shapeweightbiasepsreturnc                 C      t | |||||S r!   )opset9Znative_layer_norm)r   r   r1   r2   r3   r4   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_iZ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      t | |||S r!   )r   Z_max_helperr   r   dim_or_ykeepdimr   r   r   max   s   rB   zaten::maximumc                 C      t | ||dS N)r@   )rB   r   r   r   r   r   r   maximum      rF   z	aten::minc                 C   r>   r!   )r   Z_min_helperr?   r   r   r   min   s   rH   zaten::minimumc                 C   rC   rD   )rH   rE   r   r   r   minimum   rG   rI   z
aten::amaxc                 C   ,   | 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      rW   z
aten::aminc                 C   rJ   )NrK   rL   rN   	ReduceMinrP   rQ   rU   r   r   r   amin   rX   rZ   zaten::aminmaxc                 C   sx   t |s,t |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 )	Nr9   r:   rK   rL   rN   rY   rP   rO   )r   Z_is_noneZ
_get_constr   rR   rS   rT   rU   r   r   r   aminmax   s   
r[   zaten::var_meanc                 G   s6   t |dkrt| |d |d d S tj| |g|R  S )Nr'   r   )r   r   Z_var_mean_helper)r   r   r   r   r   r   	_var_mean   s   r\   zaten::logsumexpc                 C   sD   |d u r| j d|ddS | j dtj|tjdd}| j d|||dS )NZReduceLogSumExpr   rP   rK   rL   rN   rQ   )r   r   r:   rA   rV   r   r   r   
_logsumexp   s   r]   zaten::linalg_matrix_normbr   ordr:   rA   rM   c                 C   r6   r!   )r7   Zlinalg_matrix_normr   r   r_   r:   rA   rM   r   r   r   _linalg_matrix_norm      
ra   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   rg   zaten::linalg_vector_normc                 C   r6   r!   )r   Z_linalg_vector_norm_helperr`   r   r   r   linalg_vector_norm   rb   rh   )T)NN)0__doc__	functoolscollections.abcr   typingr   rR   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boolr/   Zquantized_argsfloattupler8   r=   rB   rF   rH   rI   rW   rZ   r[   r\   r]   listra   rg   rh   r   r   r   r   <module>   s   #
	


