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mZ dgZejejdd	Zed
edejdejfddZededdddddej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ejd_d#ed$ed%efd&d'Z ed(e!d"d d d eddddd)ej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ejdejfd3d4Z$ed5ejd`dejfd6d7Z%ed8e!d"d"ejdejfd9d:Z&ed;ejd`dejfd<d=Z'ed>e!d"d"ejdejfd?d@Z(edAe!d"eddd2ejdejfdBdCZ)edDe!d"eddd2ejdejfdEdFZ*edGe!d"eddd2ejdejfdHdIZ+edJejdejfdKdLZ,edMeddd2ejdejfdNdOZ-edPeddddQdej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	ejdejfdZd[Z/ed\edd)ddQdejdejdRejjdSe"dTeee  dUedVejjfd]d^Z0d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)	_beartype	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/SoloSpeech/.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              	   C   sx   g }|D ]}t dD ]}	|| q
qt|d }
|s"ddg|
 }|s)dg|
 }|s0dg|
 }| jd||||||dS )N   r      Col2Im)dilations_ipads_i	strides_i)rangeappendr   _get_tensor_sizesr   )r   r'   r(   r)   r*   r+   r,   adjusted_paddingpad_num_dimensional_axisr   r   r   r   :   s*   

z
aten::mean
ReduceMeanmean)decoratez
aten::prod
ReduceProdprodF)allow_multi_dim_supportTonnx_opnamer?   c                 C   s   t | ||S N)r   _reduce_with_dtype_helper)r@   rA   r?   r   r   r   _reduce_with_dtypea   s   rD   zaten::native_layer_normfnormalized_shapeweightbiasepsreturnc                 C      t | |||||S rB   )opset9native_layer_norm)r   r'   rF   rG   rH   rI   r   r   r   _native_layer_norms   s   rN   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   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 rB   )r   _max_helperr   r   dim_or_ykeepdimr   r   r   max   s   ra   zaten::maximumc                 C      t | ||dS N)r_   )ra   r   r'   r    r   r   r   maximum      re   z	aten::minc                 C   r\   rB   )r   _min_helperr^   r   r   r   min   s   rh   zaten::minimumc                 C   rb   rc   )rh   rd   r   r   r   minimum   rf   ri   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   rW   r`   axesr   r   r   amax      ry   z
aten::aminc                 C   rj   )Nrk   rl   rn   	ReduceMinrq   rs   rw   r   r   r   amin   rz   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 )	NrO   rW   rk   rl   rn   r{   rq   rp   )r   _is_none
_get_constr   rt   ru   rv   rw   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   _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   rq   rk   rl   rn   rs   )r   r'   rW   r`   rx   r   r   r   
_logsumexp   s   r   zaten::linalg_matrix_normbr   ordrW   r`   rm   c                 C   rK   rB   )rL   linalg_matrix_normr   r   r   rW   r`   rm   r   r   r   _linalg_matrix_norm      r   zaten::embedding_bagc
           
      C   s   t | |||||||||	
S rB   )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   rK   rB   )r   _linalg_vector_norm_helperr   r   r   r   linalg_vector_norm  r   r   )T)NN)1__doc__	functoolstypingr   r   r   r   rt   r   
torch.onnxr   r   r	   rL   torch.onnx._internalr
   r   r   __all__partialonnx_symbolic_onnx_symbolicbeartypeGraphContextr$   
parse_argsValueintr   _apply_paramsstrboolrD   quantized_argsfloatrN   r[   ra   re   rh   ri   ry   r|   r   r   r   r   r   r   r   r   r   r   <module>   s  $
	


