o
    i4                     @  s
  d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	Z	ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZmZmZ g d
ZejejddZ dd Z!e de"de#dddej$dddZ%e dej$dddZ&e de#ddej$dd d!Z'e d"e#ddej$dd#d$Z(e 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dd.d/Z+e d0e#dd)ej$dd1d2Z,e d3e!d4d5d6gd7e d8e!d9d:d6gd7e d;e!d<d=d6gd7e d>e!d?d5d@gd7e dAe!dBd:d@gd7e dCe!dDd=d@gd7e dEe!dFd:dGgd7ej$ddMdNZ-e dOe"dd-d-d-d-d-d-ej$ddPdQZ.e dRe#dd)ddej$dddSdTZ/e dUe#dd)ddej$ddVdWZ0e dXe#dd)dYej$dddZd[Z1e d\ej$dd]d^Z2e d_ej$dd`daZ3e dbej$ddcddZ4e deej$ddfdgZ5e dhej$ddidjZ6e dkej$ddldmZ7e dnej$dddodpZ8e dqej$ddrdsZ9e dtej$ddudvZ:e dwej$ddxdyZ;e dze"dej$dd{d|Z<e d}ej$dd~dZ=e de#dd)d)d)ej$dddZ>e de#dd)d)d)d)ej$dddZ?e de#ddd)d)d)dYej$ddddZ@e de#dd)d)dYej$ddddZAe de#dd)d)dYej$ddddZBe de#dd)ej$ddddZCe dej$dddZDe de#ddd)d)ej$ddddZEe de#ddd)d)ej$ddddZFe de#dd)d)ej$ddddZGej$dddZHe dej$ddddZIe de de dej$dddZJe de de dej$dddZKe dej$dddZLe dej$dddZMe dej$dddZNe dej$dddZOe de#dd)ej$dddZPe dej"dd-dej$ddddZQe dÃej$ddddńZRe dƃej$dddȄZSe dɃej$ddd˄ZTe d̃ej$ddd΄ZUe dσej$dddфZVe d҃ej$dddԄZWe dՃej$dddׄZXe d؃ej$dddڄZYej$ddd܄ZZej$dddބZ[ej$dddZ\e de#dddddej$dddZ]e dej$dddZ^e de"dd-d-e#dd)d)ej$dddZ_e de#dddddej$dddZ`e de#dddd)d)d)dd)d)	ej$dddZae de#ddddej$dddZbe dej$dddZce dej$						ddddZde dej$dd dZee dej$dddZfe dej$dddZge dej$dd	d
Zhe dej$dddZie dej$dddZjdS (  z(This file exports ONNX ops for opset 11.    )annotationsN)OptionalSequence)_C)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset10symbolic_opset9utils)GLOBALS)	_beartype	jit_utilsregistration)9addappendarangeargsort
atleast_1d
atleast_2d
atleast_3dcatchunk	clamp_max	clamp_minclampconstant_pad_ndcumsumDeleteembedding_bagembedding_renormflattengatherhardtanhhstackim2col
index_fillindex
index_copy	index_putinsert
linalg_detlinalg_vector_normlogdetmasked_scattermasked_selectmmnarrownormalpadpixel_shufflepopprim_constant_chunkreflection_padrelu6	remainderreplication_padroundscatterselectsizesortsplit_with_sizessplitsqueezestacktopkunbind
unique_dim	unsqueezevstack   )Zopsetc                    s    fdd}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                   s   |  i S N )fnargskwargsrL   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/onnx/symbolic_opset11.py_apply\   s   z_apply_params.<locals>._applyrL   )rO   rP   rR   rL   rN   rQ   _apply_paramsY   s   rS   zaten::hardtanhTvfgjit_utils.GraphContextself_C.Valuemin_valfloatmax_valc                 C  s`   t j|t jj}| jdtj|| dd}| jdtj|| dd}tj	| d|||ddS )NConstantdtypeZvalue_tClip   Zopset_before)
r   JitScalarType
from_valueFLOAToptorchtensorr_   opset9_op_with_optional_float_cast)rV   rX   rZ   r\   scalar_typerL   rL   rQ   r$   b   s   r$   zaten::clampc                   s   t j fdd}tj|tjj}|tjjkr"|||}|||}t|r-t ||S t|r8t	 ||S t
|dkrQt
|dkrQtj d|||ddS t t	 |||S )Nc                   s*   | d urt | s jd| | dS | S )NCastZto_i)r	   _is_nonerg   	onnx_type)ri   r_   rV   rL   rQ   _cast_if_not_nonez   s   z clamp.<locals>._cast_if_not_noner   ra   rb   rc   )r   beartyper   rd   re   	UNDEFINEDr	   ro   r   r   _get_tensor_rankrj   rk   )rV   rX   minmaxrr   rl   rL   rq   rQ   r   w   s$   




r   zaten::clamp_minc                 C  s^   | j d|tj| d}t|dkr%t| }tj	| d|||ddS tj	| d||ddS )Nrm   rn   r   ra   rb   rc   ZMax
rg   r   rd   re   rp   r	   ru   rj   Zunusedrk   )rV   rX   rv   rw   rL   rL   rQ   r         
r   zaten::clamp_maxc                 C  s^   | j d|tj| d}t|dkr%t| }tj	| d|||ddS tj	| d||ddS )Nrm   rn   r   ra   rb   rc   ZMinrx   )rV   rX   rw   rv   rL   rL   rQ   r      ry   r   zaten::relu6c                 C  sX   t j|t jj}| jdtjd| dd}| jdtjd| dd}t| |||S )Nr]   r   r^   r`      )	r   rd   re   rf   rg   rh   ri   r_   r   )rV   inputrl   rZ   r\   rL   rL   rQ   r9      s   r9   zaten::selectic                 C  s   | j d|||dS )NGatheraxis_irg   )rV   rX   dimr(   rL   rL   rQ   r>      s   r>   zaten::index_putFc                   s  t |rt |}n|g}t  r$|g| ||g }jdg|R  S t |d}t|dkr2|S t|dkrtt|D ]}t || rQ	d|| ||< q>|d }|dd  D ]	}	t
||	}q\	d|  fdd|D }j	d	g|R d
di}nW|d }|}
t |
rt |}|d ur|dkrt
||
|S t |
}t |}|d ur|d ur||krt |
tt||}
t||
|S 	d| t |dg}t j	d|dgt|gtjgd}j	d	 |dd}t |}|d ur|dkrt
||d }t ||}tj|tjj}|tjjkr>tj|tjj}||kr=j	d|| d}n	|rGtd||rnj	d	d|tjdg| dd}	d|||}t||}|S 	d|||}|S )Nr*   br      ZNonZeroShapec                   s(   g | ]}t t| d dgqS )N)r	   _unsqueeze_helperrj   expand).0indZbroadcast_index_shaperV   rL   rQ   
<listcomp>   s    zindex_put.<locals>.<listcomp>Concatr   r   axesstartsendsr~   rm   rn   z'self does not have a valid scalar type.ConstantOfShaper^   r`   	ScatterND) r	   _is_packed_list_unpack_listis_caffe2_aten_fallbackat
_parse_arglenrange_is_boolrg   rj   r   ru   Zmasked_fillr   listr/   _slice_helpersysmaxsizer   _reshape_helperr   rd   re   rt   rp   r   SymbolicValueErrorrh   ri   r_   )rV   rX   Zindices_list_valuevalues
accumulateZindices_listrO   Zidx_r(   r   Zbool_inprankZ	mask_rankZ	self_rankZsub_data_shapeZvalues_shapeZself_scalar_typeZvalues_scalar_typeZzerosresultrL   r   rQ   r*      s   
(






r*   zaten::pixel_shufflec                 C  s8   t |}|d ur|dkrt ddS | jd||ddS )N   r5   zonly support 4d inputZDepthToSpaceZCRD)Zblocksize_imode_s)r	   ru   _unimplementedrg   )rV   rX   Zupscale_factorr   rL   rL   rQ   r5   S  s   
r5   zaten::upsample_nearest1dZupsample_nearest1d   Znearest)Zdecoratezaten::upsample_nearest2dZupsample_nearest2dr   zaten::upsample_nearest3dZupsample_nearest3d   zaten::upsample_linear1dZupsample_linear1dZlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dzaten::upsample_bicubic2dZupsample_bicubic2dZcubicnamestrr   intinterpolate_modec                 C  s   t | ||S rK   )r	   Z_interpolate_helper)r   r   r   rL   rL   rQ   _interpolate]  s   r   zaten::__interpolatec              	   C  s   t | ||||||S rK   )r	   Z__interpolate_helper)rV   r{   r?   Zscale_factormodeZalign_cornersZrecompute_scale_factorZ	antialiasrL   rL   rQ   __interpolate~  s   r   zaten::gatherc                 C  sD   t |drt ddS t  r| d||||S | jd|||dS )Nr|   r#   zsparse_grad == TrueZGatherElementsr~   )r	   _maybe_get_constr   r   r   rg   )rV   rX   r   r(   Zsparse_gradrL   rL   rQ   r#     s
   r#   zaten::scatterc              	   C  s   t  r| jd||||ddS tj|}t |}t |r)| jd||||dS tj||kr?| jd|tj|	 d}| jd||t
| |||dS )Nr=   srcoverload_nameZScatterElementsr~   rm   rn   )r	   r   r   r   rd   re   _maybe_get_scalar	_is_valuerg   rp   rj   	expand_as)rV   rX   r   r(   r   Zsrc_typerL   rL   rQ   r=     s   

r=   zaten::cumsumnonec                 C  sn   | j dtj|tjdd}|r,|  dkr,t|dd}| j d|t	|
 d}n|}|  d	||}|S )
Nr]   r^   r`   zprim::Constantr|   r_   rm   rn   ZCumSum)rg   rh   ri   r   nodekindr	   
_get_constr   rd   rp   )rV   rX   r   r_   Z
dim_tensorZparsed_dtypecastZcsumrL   rL   rQ   r     s   r   zaten::masked_selectc                 C  s$   t | t | ||}| d||S )NGatherND)rj   nonzeror   rg   )rV   rX   maskr(   rL   rL   rQ   r0     s   r0   zaten::masked_scatterc                 C  sr   t | t | ||}t| |tdg}tj| |tdgtdgt | |tdgd}| 	d|||S )Nr   r   r   r   )
rj   r   r   r	   r   rh   
LongTensorr   r?   rg   )rV   rX   r   sourcer(   rL   rL   rQ   r/     s   

r/   z	aten::lenc                 C  sT   t |s|  dkr| d|S t| || jdtdgd}t | |dgS )Nzonnx::SplitToSequenceZSequenceLengthr]   r   r`   )	r	   _is_tensor_listr   r   rg   r?   rh   r   _squeeze_helper)rV   rX   Zsz_0rL   rL   rQ   _len  s   r   zaten::__getitem_c                 C  s0   t |r| d||S ddlm} || ||S )N
SequenceAtr   )
__getitem_)r	   r   rg   Ztorch.onnx.symbolic_opset9r   )rV   rX   r|   getitemrL   rL   rQ   r     s   
r   zaten::_set_itemc                 C  s   |  d||}|  d|||S )NSequenceEraseSequenceInsertr   )rV   tensor_listr|   rT   rL   rL   rQ   	_set_item  s   r   zaten::appendc                 C     |  d||S Nr   r   )rV   rX   ri   rL   rL   rQ   r        r   z	aten::addc                 C  sn   t |r/t |r/| }| dkrt ddS t |}|}|D ]	}| d||}q#|S t	| |||S )Nzprim::ListConstructr   z6does not support adding dynamic tensor list to anotherr   )
r	   r   r   r   r   r   r   rg   rj   r   )rV   rX   otheralphaZtensor_list_nodeZtensorsltrL   rL   rQ   r     s   
r   zaten::insertc                 C  s   |  d|||S r   r   )rV   rX   posri   rL   rL   rQ   r+     s   r+   z	aten::popc                 C  r   Nr   r   rV   r   r   rL   rL   rQ   r6     r   r6   zaten::Deletec                 C  r   r   r   r   rL   rL   rQ   r     r   r   z	aten::catc                 C  s6   t |rt| ||S t |dd}| jd||dS )Nr|   r   ConcatFromSequencer~   )r	   r   rj   r   r   rg   r   rL   rL   rQ   r   %  s   
r   zaten::stackc                 C  s8   t |rt| ||S t |dd}| jd||ddS )Nr|   r   r   r   r   Z
new_axis_i)r	   r   rj   rD   r   rg   r   rL   rL   rQ   rD   0  s   
rD   zaten::_unique2c           	      C  s$   | j d||dd\}}}}|||fS )NUniquer   )sorted_ioutputsr   )	rV   rX   sortedreturn_inversereturn_countsuindicesinverse_indicescountsrL   rL   rQ   _unique2:  s   
r   zaten::unique_dimc           
      C  s&   | j d|||dd\}}}}	|||	fS )Nr   r   )r   r   r   r   )
rV   rX   r   r   r   r   r   r   r   r   rL   rL   rQ   rG   D  s   

rG   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestr   out)r	   Z_topk_helper)rV   rX   kr   r   r   r   rL   rL   rQ   rE   P  s   rE   z
aten::sortc                 C  s   t j| ||||dS N)	decendingr   r	   Z_sort_helper)rV   rX   r   r   r   rL   rL   rQ   r@   Y  s   r@   zaten::argsortc                 C  s   t j| ||||d\}}|S r   r   )rV   rX   r   r   r   _r   rL   rL   rQ   r   `  s   

r   zaten::roundc                 C  sz   t |s|S |dkr| d|S | d|| jdttd|d}| d|}| d|| jdttdd| dS )Nr   ZRoundMulr]   
   r`   r   )r	   _is_fprg   rh   ri   pow)rV   rX   Zdecimalsmulr<   rL   rL   rQ   r<   j  s   
$ r<   zaten::remainderc                 C  s4   t |s
t |rt| ||S | jd||ddS )NModr   )Zfmod_i)r	   r   rj   r:   rg   )rV   r{   r   rL   rL   rQ   r:   y  s   r:   zaten::splitc              
     s  t ||sy jd|||d|d u rS t |rmtt ||krm fddt |D } jdtjdgtjdd} jdtj|gtjdd}g }t	|D ]}	 d	|||	 }
|
 d
|||
| |
}qQ|S  fddt	|D S t ||||S )NSplitToSequencer~   c                   s   g | ]
}t  |d gqS r   )r	   r   )r   rT   rq   rL   rQ   r     s    zsplit.<locals>.<listcomp>r]   r   r^   r`   AddSlicec                   s2   g | ]}  d  j dtj|gtjddqS )r   r]   r^   r`   )rg   rh   ri   long)r   r|   rV   Z	split_outrL   rQ   r     s    )r	   Z_is_split_staticrg   r   r   r   rh   ri   r   r   r   rj   rB   )rV   rX   Zsplit_size_or_sizesr   _outputssplit_sizesstartaxisresr|   endrL   r   rQ   rB     s0   

	rB   zaten::split_with_sizesc                 C  s   t | ||||S rK   )rB   )rV   rX   r   r   r   rL   rL   rQ   rA     s   rA   zaten::unbindc              	   C  sB   |d u r| j d|| j dtjdtjdd|ddS t| |||S )Nr   r]   r   r^   r`   r   )r   
keepdims_i)rg   rh   ri   r   rj   rF   )rV   rX   r   r   rL   rL   rQ   rF     s   rF   c                 C  sz  t |st |rt |r| jd|ddd}t| || jdtdgd}t 	|}|du r<| d| d	|}n| jdtj|tj
d
d}| d| d|| jdtjdtj
d
d|}| jd|tjjd}| jd|| jd|tjdgtj
d
ddd}t | || jdtddgd}| jdt| |dgddgd}t | || jdtdgd}| jd|tjjd}|S )a!  Generate paddings in ONNX order based on pad in pytorch.

    Args:
        input: the input tensor.
        pad: the paddings in pytorch.
            The order is dim_n_begin, dim_n_end, dim_n-1_begin, dim_n-1_end, ..., dim_m_begin, dim_m_end,
            where m is in range [0, n].
    r   r   r   r   r]   r`   NSizer   r^   Subr      rm   rn   r   r   r~   r   	TransposeZperm_i)r	   r   Z_is_listZ_is_scalar_listrg   rj   r?   rh   ri   ru   int64_C_onnxTensorProtoDataTypeZINT64r   opset10flip)rV   r{   r4   Zpad_lenr   	extensionpaddingsZ	padding_crL   rL   rQ   _prepare_onnx_paddings  sF    
" r	  zaten::constant_pad_ndc                 C  s:   d}t |}t ||}t| ||}| jd||||dS )NconstantPadr   )r	   r   _if_scalar_type_asr	  rg   )rV   r{   paddingvaluer   r4   rL   rL   rQ   r     s
   
r   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  "   d}t | ||}| jd|||dS )Nreflectr  r  r	  rg   rV   r{   r  r   r  rL   rL   rQ   r8        r8   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  r  )Nedger  r  r  r  rL   rL   rQ   r;     r  r;   z	aten::padr{   r4   r   r  c                 C  sr   t |d}|dkrt| ||S |dkrt| ||S |dkr%t| |||S |dkr0t| ||S td| |)NsZ	replicater  r
  ZcircularzUnrecognized padding mode )	r	   r   r;   r8   r   rj   Z_pad_circularr   r   )rV   r{   r4   r   r  rL   rL   rQ   r4     s   	zaten::linalg_detc                 C  s   |  d|S )NZDetr   )rV   rX   rL   rL   rQ   r,   -  s   r,   zaten::logdetc                 C  s   t | t| |S rK   )rj   logr,   )rV   r{   rL   rL   rQ   r.   3  s   r.   aten::arangec                 G  s  dd }t |dkrFtdd |D rFtj}| jdtj|d |dd	}| jdtj|d
 |dd	}| jdtjd
|dd	}| d|||S t |dksRt |dkrt |dkr[d }n||d
 }tj| |d |d\}}}}| jdtjd| dd	}	| jdtjd
| dd	}| d|	||S t |dkst |dkrt |dkrd }n||d }tj| |d |d
 |d |d\}
}}}| d|||S t |dkr||d }tj| |d |d
 |d\}}}}| jdtjd
| dd	}| d|||S t	ddt | dS )Nc                 S  s   t | d} | S )Nr|   )r	   r   r^   rL   rL   rQ   _get_arange_dtype<  s   z!arange.<locals>._get_arange_dtyper   c                 s  s    | ]}t |tV  qd S rK   )
isinstancer   )r   valrL   rL   rQ   	<genexpr>@  s    zarange.<locals>.<genexpr>r]   r   r^   r`   r   Ranger   )r   r_   r      r   )r   r   stepr_   rz   )r   r   r_   r  zwith z
 arguments)
r   allrh   r  rg   ri   r	   Z_arange_cast_helperr_   r   )rV   rO   r  r_   r   r   Zdelta_defaulttype_r  Zstart_defaultr   rL   rL   rQ   r   9  sj   
r   zaten::_dim_arangec                 C  sT   |  d|}| j d|| j dt|ddd}t r!|  d|S t| |dd d d S )	Nr   r}   r]   r`   r   r~   z_caffe2::Ranger   )rg   rh   ri   r	   r   r   )rV   liker   Z
like_shapestoprL   rL   rQ   _dim_arange  s   r$  z
aten::size)Zquantize_outputc                 C  s"   |d u r
|  d|S t| ||S )Nr   )rg   r	   _size_helperrV   rX   r   rL   rL   rQ   r?     s   r?   zaten::squeezec                 C  sx  |d u r
|  d|S t|st| ||gS t|dd}t|}|}|d ur1|dk r1||7 }t||}|dk r?|d u sC|d u r| j dt|gd}t	| ||}| j dtj
dtjdd}|  d	||}	tj| d
|	dd\}
\}}}t|||g}t|j| | d|}t|j| |
S |}|dkrtdt| d d t| d d d  |S t| ||gS )NZSqueezer|   r   r   r]   r`   r   r^   EqualIfr   n_blocksZIdentityz5This model contains a squeeze operation on dimension z. The size of z%this dimension in the given input is z. The model will zWbe exported without the squeeze node. If the model is intended to be used with dynamic z7input shapes, please export with dynamic_axes argument.)rg   r	   _is_constantr   r   ru   Z_get_tensor_dim_sizerh   ri   r%  Zonesr  r   add_op_with_blocksr   _add_output_to_blockblockwarningswarnr   )rV   rX   r   Z
input_rankZadjusted_dimdim_sizeZdim_constantr?   	const_onecondZif_opZ
if_contextZelse_contextr   Zsqueeze_Z	identity_rL   rL   rQ   rC     sX   


rC   zaten::unsqueezec                 C  s(   t |rt |dd}t | ||gS )Nr|   r   )r	   r+  r   r   r&  rL   rL   rQ   rH     s   
rH   zaten::mmc                 C  s   | j d||dddS )NZGemmg        g      ?)Zbeta_fZalpha_fr   )rV   rX   r   rL   rL   rQ   r1     s   r1   zaten::indexc                 C  s   t  r| jd||ddS t |rt |}n|g}t|dkrF|d }t |sFt |s9tj	
|tj	jkrFt| |}| d||S t| ||S )Nr(   ZTensorr   r   r   r   )r	   r   r   r   r   r   ro   r   r   rd   re   UINT8rj   r   rg   r(   )rV   rX   r(   r   rL   rL   rQ   r(     s    


r(   zaten::index_fillc           	      C  st   t |d}t  r| jd|||d|dS t | |||\}}t |}t ||}t| ||d }t	| ||||S )Nr|   r'   Z
int_Scalar)r   dim_i)
r	   r   r   r   _index_fill_reshape_helperr   r  rj   r   r=   )	rV   rX   r   r(   r  	dim_valueexpanded_index_shapeexpanded_indexZexpanded_valuerL   rL   rQ   r'     s"   	
r'   zaten::index_copyc                 C  sL   t |d}t  r| jd||||dS t | |||\}}t| ||||S )Nr|   r)   )r5  )r	   r   r   r   r6  r=   )rV   rX   r   r(   r   r7  r8  r9  rL   rL   rQ   r)   
  s   r)   zaten::__rshift_c                 C     t j|t jjt j|kr| jd|t j| d}t j|t jjt jjkr3| jd||ddS | jdtjdtj	dd	}t
|sO| jd|tjjd}| d
||}| jd|t j| d}| d||}|S )Nrm   rn   BitShiftRIGHTZdirection_sr]   r   r^   r`   PowDivr   rd   re   rt   rg   rp   r4  rh   ri   Zfloat32r	   r   r  r  rf   )rV   rX   r   twotwo_powrshiftrL   rL   rQ   	__rshift_  2   

rD  zaten::__lshift_c                 C  r:  )Nrm   rn   r;  LEFTr=  r]   r   r^   r`   r>  r   r@  )rV   rX   r   rA  rB  lshiftrL   rL   rQ   	__lshift_8  rE  rH  c                 C  s   |  d|| j dt|d d}|  d|| j dt||d  d}|  d| j dtdd|| j dt|d}td|| |}| j d|dd}t| |dg}t| || j dtd	dgd}	|  d||	}
|
S )
Nr   r]   r   r`   r   r   r  r   r   )rg   rh   ri   r   rH   r	   r   r   )rV   Zinput_dZkernel_size_dZ
dilation_dZ	padding_dZstride_dZblocks_dZblocks_d_indicesZkernel_gridZkernel_maskZ
block_maskrL   rL   rQ   _get_im2col_indices_along_dimZ  s0   
rI  c                 C  s.   | j dtdd||gd d}|  d||S )Nr]   r   r   r`   r  )rg   rh   r   )rV   r{   	padding_h	padding_wr4   rL   rL   rQ   _get_im2col_padded_input  s    rL  c              
   C  s   t | || jdtdd}t | || jdtdd}| d|| jdt|| d}| jdt| |dgt| |dg| jdtdgdddS )	Nr]   r   r`   r   r   r   r   r~   )r?   rg   rh   ri   r	   r   )rV   r{   kernel_hkernel_wZ	batch_dimZchannel_dimZchannel_unfoldedrL   rL   rQ   _get_im2col_output_shape  s   rO  zaten::im2colisc                 C  s  t | || jdtdd}t | || jdtdd}|d |d }}	|d |d }
}|d |d }}|d |d }}t| ||||
|}t| |||||	}t| |||}t| ||
|}| jd||dd}| jd||d	d}| jd
|g dd}t| ||S )Nr]   r   r`   r   r   r   r}   r~   r   r   )r   r   r   r   r   r   r  )	r?   rg   rh   ri   rI  rO  rL  r	   r   )rV   r{   Zkernel_sizeZdilationr  ZstrideZinput_hZinput_wZstride_hZstride_wrJ  rK  Z
dilation_hZ
dilation_wrM  rN  Zblocks_row_indicesZblocks_col_indicesZoutput_shapeZpadded_inputoutputrL   rL   rQ   r&     s$   r&   zaten::narrowc                 C  s"   |  d||}tj| ||||dS )Nr   r   )rg   r	   r   )rV   r{   r   r   lengthr   rL   rL   rQ   r2     s   r2   zaten::flattenc                 C  s   t |}|dkr|S |dkr&|dks|d ur%||d kr%| jd||dS n|dkrB|dks8|d urB||d krB| jd||d dS |d u rLt dd	S |dk rT|| }t | ||||S )
Nr   r   ZFlattenr~   r   r   r   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r	   ru   rg   r   Z_flatten_helper)rV   r{   Z	start_dimZend_dimr   rL   rL   rQ   r"     s$   
r"   zaten::linalg_vector_normr   Optional[Sequence[int]]keepdimboolc                 C  s   |dkrH|d u rt | || jdtjdgtjdd}d}| d| d|| jdtdgd}| jd	|tj	|
 d
}t j| |||dS t| |||||S )Nr   r]   r   r^   r`   FNotr'  rm   rn   axes_ir   )r	   r   rg   rh   ri   r  r   r   rd   re   rp   _reducesum_helperrj   r-   )rV   rX   ordr   rU  r_   Zcond_oprL   rL   rQ   r-     s$    r-   zaten::embedding_bagc
                 C  s  |r
t jr
tdS |	d ur|	dkrtd| jdtdd}
| jd|
tj	j
d}
| jdtdgd}t| t| || jdtdddg}|s\||g}| jd	g|R d
di}tj| |dgdgtjgdgd}tj| |dgdgtjgdgd}t| || jdtdd}tj| d||
dd\}\}}|j}t|}t|}|jd||dd}|jd||dd}t||dg}t||dg}|d||||}|jd||dd}t|s|d||||}t||dg}|d||}|dkrtj||dgdd}n|dkr|jd|dgdd}n
|jd|dgdd}|jd|
tj	j
d}t|| t|| |  d d d fS )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxr]   r   r`   rm   rn   r   r   )r   r   r   ZstepsZLoopr)  r}   r~   r   r   rX  Z
ReduceMeanZ	ReduceMax)r   Zexport_trainingr	   Z_onnx_unsupportedRuntimeErrorrg   rh   ri   r  r  ZBOOLr   r%  r   r   r   r   r,  r.  r   Z_add_input_to_blockro   rZ  r-  r   rQ  )rV   Zembedding_matrixr   offsetsZscale_grad_by_freqr   sparseZper_sample_weightsZinclude_last_offsetZpadding_idxZloop_conditionzeroZindices_lenZoffsets_startsZoffsets_endsZloop_lenloopZloop_contextr   Z
loop_blockZblock_input_iterr3  Zindices_startZindices_endZindices_rowZ
embeddingsZper_sample_weights_rowZcond_outrL   rL   rQ   r      s~   









r    zaten::embedding_renormc              	   C  s   |  d|}|  d||}t|}|dkrd}n|dkrd}n
td| d|| j ||dgdd	}|  d
|| j dtdd}	t|}|  d||	}
|  d||
}|  d|  d||||}|  d|t| |dg|S )Nr   r}   r   ZReduceL1r   ZReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.rX  r   r]   gHz>r`   r?  r   ZWhereZGreaterr   )rg   r   r   r   rh   ri   r	   r   )rV   weightr   Zmax_normZ	norm_typeZunique_indicesZpartial_weightZnorm_iZpartial_weight_normZpartial_weight_norm_scalesZpartial_weight_renormrL   rL   rQ   r!   {  s<   

r!   zaten::chunkc              
   C  s   | j d|  d||dd}|  d|| j dtjdgtjdd	}|  d
|  d|||}t| ||d |  d||  d||g}| j dg|R ddi}t| |||S )Nr}   r   r   r~   r   r]   r   r^   r`   r?  r   r   r   r   )rg   rh   ri   r   rj   r   rB   )rV   rX   chunksr   r1  Zchunk_size_s
chunk_sizeZ	chunk_vecrL   rL   rQ   r     s   r   zaten::normalc	           
      C  sD   |d urt |st| ||d }t| || d|}	t| |	|S )NZRandomNormalLike)r	   ro   rj   r   r   rg   r   )
rV   meanZstdsizes	generatorr_   ZlayoutZdeviceZ
pin_memoryr   rL   rL   rQ   r3     s   r3   zaten::atleast_1dtorch._C.Valuec              
   C  s   t |r?t |r?t |}g }|D ]"}|}t |}|dkr0t | || jdtdgd}|	| q| jdg|R  S t |}|dkrXt | || jdtdgd}|S )Nr   r]   r   r`   SequenceConstruct)
r	   r   r   r   ru   r   rg   rh   ri   r   rV   rX   r   Znew_tensor_listri   Z
new_tensorZtensor_rankrL   rL   rQ   r     s$   


r   zaten::atleast_2dc                 C  s   t |rNt |rNt |}g }|D ]1}|}t |}|dkr2t | || jdtddgd}n|dkr?t j	| |dgd}|
| q| jdg|R  S t |}|dkrjt | || jdtddgd}|S |dkrwt j	| |dgd}|S )Nr   r]   r   r`   rY  ri  r	   r   r   r   ru   r   rg   rh   ri   r   r   rj  rL   rL   rQ   r     s2   


r   zaten::atleast_3dc                 C  sP  t |ret |ret |}g }|D ]H}|}t |}|dkr2t | || jdtg dd}n$|dkrIt j	| |dgd}t j	| |dgd}n|dkrVt j	| |dgd}|
| q| jd	g|R  S t |}|dkrt | || jdtg dd}|S |dkrt j	| |dgd}t j	| |dgd}|S |dkrt j	| |dgd}|S )
Nr   r]   )r   r   r   r`   r   rk  r   r   ri  rl  rj  rL   rL   rQ   r   
  sH   


r   zprim::ConstantChunkc              
   C  s  |  d|}| j dtj|gtjdd}| j d||dd}| j dtjdgtjdd}| j dtj|gtjdd}| j dtj|d gtjdd}	|  d	||	}
|  d
|
|}g }t|D ]'}| j dtj|d gtjdd}|  d||}||  d|||| |}q]|S )Nr   r]   r^   r`   r}   r   r~   r   r   r?  r   r   )rg   rh   ri   r   r   r   )rV   rX   rc  r   Zinput_shaper   Zinput_shape_dimr   rd  Zchunk_size_minus_1Zinput_shape_dim_shiftZ	chunk_dimr   r|   r(   r   rL   rL   rQ   r7   7  s"    r7   zaten::hstackr   c              
   C  s   t | |}| d|| jdtjdtjdd}| d|}| d|}| jdtjdtjdd}| d	||}tj| d
|ddd\}\}}	}
|jd|ddd}t|j	| |	jd|ddd}t|	j	| |
  }|S )Nr   r]   r   r^   r`   r   r   r   r'  r(  r   )r*  r   r   r   )r   rg   rh   ri   r   r   r,  r   r-  r.  r   rQ  )rV   r   Zfirst_tensorZfirst_tensor_shapeZfirst_tensor_dimr2  Zequal_to_oneZif_op_greaterZif_context_equalZelse_context_equalr   Z	result_ifZresult_elser   rL   rL   rQ   r%   M  s2   
r%   zaten::vstackc                 C  s   t | |}| jd|dddS )Nr   r   r   )r   rg   )rV   r   rL   rL   rQ   rI   n  s   
rI   )rV   rW   rX   rY   rZ   r[   r\   r[   )rV   rW   )F)r   r   r   r   r   r   rK   r   )r   N)
rV   rW   r{   rY   r4   rY   r   rY   r  rY   )rV   rW   r   rT  rU  rV  )NNNNNN)rV   rW   rX   rh  )rV   rW   r   rY   )k__doc__
__future__r   	functoolsr   r/  typingr   r   rh   r   Ztorch._Cr   r  Z
torch.onnxr   r   r	   r
   r  r   rj   r   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicrS   Zquantized_args
parse_argsrs   r$   r   r   r   r9   r>   r*   r5   r   r   r#   r=   r   r0   r/   r   r   r   r   r   r+   r6   r   r   rD   r   rG   rE   r@   r   r<   r:   rB   rA   rF   r	  r   r8   r;   r4   r,   r.   r   r$  r?   rC   rH   r1   r(   r'   r)   rD  rH  rI  rL  rO  r&   r2   r"   r-   r    r!   r   r3   r   r   r   r7   r%   rI   rL   rL   rL   rQ   <module>   s@    <	#




	
$9G

2
  +3^% +