o
    闦i                     @   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 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d/d0Z!ed1edd2dejfd3d4Z"ed5d`dejfd6d7Z#ed8ed"d"dejfd9d:Z$ed;d`dejfd<d=Z%ed>ed"d"dejfd?d@Z&edAed"eddd2dejfdBdCZ'edDed"eddd2dejfdEdFZ(edGed"eddd2dejfdHdIZ)edJdejfdKdLZ*edMeddd2dejfdNdOZ+edPeddddQddejdRejjdSejjdTee dUedVejjfdWdXZ,edYedddd2d2d2dd2d2	dejfdZd[Z-ed\edd)ddQddejdRejjdSe dTeee  dUedVejjfd]d^Z.dS )aa  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)	jit_utilsregistrationcol2im   )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   _get_tensor_rank).0argr   r   Y/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset18.py
<listcomp>/   s    z__and_.<locals>.<listcomp>r   And
BitwiseAnd)lenr   _type_promote_from_values_maybe_cast_to_typer   JitScalarTypeBOOLop)r   selfotherargs	prom_args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>H   s    zcol2im.<locals>.<genexpr>   r      Col2Im)dilations_ipads_i	strides_i)extendranger   _get_tensor_sizesr   )	r   r&   r'   r(   r)   r*   r+   adjusted_paddingnum_dimensional_axisr   r.   r   r   :   s&   

z
aten::mean
ReduceMeanmean)decoratez
aten::prod
ReduceProdprodF)allow_multi_dim_supportTonnx_opnamerA   c                 C   s   t | ||S r,   )r   _reduce_with_dtype_helper)rB   rC   rA   r   r   r   _reduce_with_dtype_   s   rE   zaten::native_layer_normfnormalized_shapeweightbiasepsreturnc                 C      t | |||||S r,   )opset9native_layer_norm)r   r&   rG   rH   rI   rJ   r   r   r   _native_layer_normp   s   rO   z	aten::gluic                 C   sR   t ||}|d ur|d dksJ | jd||ddd\}}| d|| d|S )Nr1   r   Split)axis_inum_outputs_ioutputsMulSigmoid)r   _get_tensor_dim_sizer   )r   r&   dimdim_sizefirstsecondr   r   r   _glu~   s
   r\   z	aten::maxc                 C      t | |||S r,   )r   _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   _min_helperr_   r   r   r   min   s   ri   zaten::minimumc                 C   rc   rd   )ri   re   r   r   r   minimum   rg   rj   z
aten::amaxc                 C   ,   | j dtj|tjdd}| j d|||dS )NConstantdtypevalue_t	ReduceMax
keepdims_ir   torchtensorlongr   r   rX   ra   axesr   r   r   amax      rz   z
aten::aminc                 C   rk   )Nrl   rm   ro   	ReduceMinrr   rt   rx   r   r   r   amin   r{   r}   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 )	NrP   rX   rl   rm   ro   r|   rr   rq   )r   _is_none
_get_constr   ru   rv   rw   rx   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 )Nr2   r   )r   r   _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 )NReduceLogSumExpr   rr   rl   rm   ro   rt   )r   r&   rX   ra   ry   r   r   r   
_logsumexp   s   r   zaten::linalg_matrix_normbr   ordrX   ra   rn   c                 C   rL   r,   )rM   linalg_matrix_normr   r   r   rX   ra   rn   r   r   r   _linalg_matrix_norm      
r   zaten::embedding_bagc
           
      C   s   t | |||||||||	
S r,   )r   _embedding_bag_helper)
r   embedding_matrixindicesoffsetsscale_grad_by_freqmodesparseper_sample_weightsinclude_last_offsetpadding_idxr   r   r   embedding_bag   s   r   zaten::linalg_vector_normc                 C   rL   r,   )r   _linalg_vector_norm_helperr   r   r   r   linalg_vector_norm   r   r   )T)NN)/__doc__	functoolstypingr   r   r   r   ru   r   
torch.onnxr   r   r	   rM   torch.onnx._internalr
   r   __all__partialonnx_symbolic_onnx_symbolicGraphContextr#   
parse_argsValueintr   _apply_paramsstrboolrE   quantized_argsfloatrO   r\   rb   rf   ri   rj   rz   r}   r   r   r   r   r   r   r   r   r   r   <module>   s   #
	


