U
    •Ê¹j4é  ã                9   @  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 d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBg9ZejejdCdD�Z dEdF„ Z!e dGƒe "dH¡e #dIdJdJ¡ej$dKdLdMdMdNœdOd„ƒƒƒƒZ%e dPƒej$dKdQœdRd„ƒƒZ&e dSƒe #dIdI¡ej$dKdQœdTd„ƒƒƒZ'e dUƒe #dIdI¡ej$dKdQœdVd„ƒƒƒZ(e dWƒej$dKdQœdXd2„ƒƒZ)e dYƒe "dH¡e #dIdZdI¡ej$dKdQœd[d7„ƒƒƒƒZ*e d\ƒej$�ddKdQœd^d#„ƒƒZ+e d_ƒe #dIdZ¡ej$dKdQœd`d.„ƒƒƒZ,e dae!dbdcddƒgde�e dfe!dgdhddƒgde�e die!djdkddƒgde�e dle!dmdcdnƒgde�e doe!dpdhdnƒgde�e dqe!drdkdnƒgde�e dse!dtdhduƒgde�ej$dvdwdvdxœdydz„ƒƒƒƒƒƒƒƒZ-e d{ƒe "dHd]d]d]d]d]d]¡ej$dKdQœd|d}„ƒƒƒZ.e d~ƒe #dIdZdIdI¡ej$�ddKdQœdd„ƒƒƒZ/e d€ƒe #dIdZdIdI¡ej$dKdQœd�d6„ƒƒƒZ0e d‚ƒe #dIdZdƒ¡ej$�ddKdQœd„d„ƒƒƒZ1e d…ƒej$dKdQœd†d)„ƒƒZ2e d‡ƒej$dKdQœdˆd(„ƒƒZ3e d‰ƒej$dKdQœdŠd‹„ƒƒZ4e dŒƒej$dKdQœd�dŽ„ƒƒZ5e d�ƒej$dKdQœd�d‘„ƒƒZ6e d’ƒej$dKdQœd“d„ƒƒZ7e d”ƒej$�ddKdQœd•d
„ƒƒZ8e d–ƒej$dKdQœd—d$„ƒƒZ9e d˜ƒej$dKdQœd™d/„ƒƒZ:e dšƒej$dKdQœd›d„ƒƒZ;e dœƒe "dH¡ej$dKdQœd�d„ƒƒƒZ<e džƒej$dKdQœdŸd=„ƒƒZ=e d ƒe #dIdZdZdZ¡ej$dKdQœd¡d¢„ƒƒƒZ>e d£ƒe #dIdZdZdZdZ¡ej$dKdQœd¤d@„ƒƒƒZ?e d¥ƒe #dIdIdZdZdZdƒ¡ej$�ddKdQœd¦d>„ƒƒƒZ@e d§ƒe #dIdZdZdƒ¡ej$�ddKdQœd¨d9„ƒƒƒZAe d©ƒe #dIdZdZdƒ¡ej$�ddKdQœdªd„ƒƒƒZBe d«ƒe #dIdZ¡ej$�ddKdQœd¬d5„ƒƒƒZCe d­ƒej$dKdQœd®d3„ƒƒZDe d¯ƒe #dIdIdZdZ¡ej$�ddKdQœd°d;„ƒƒƒZEe d±ƒe #dIdIdZdZ¡ej$�ddKdQœd²d:„ƒƒƒZFe d³ƒe #dIdZdZ¡ej$�ddKdQœd´d?„ƒƒƒZGej$dKdQœdµd¶„ƒZHe d·ƒej$�ddKdQœd¸d„ƒƒZIe d¹ƒe dºƒe d»ƒej$dKdQœd¼d1„ƒƒƒƒZJe d½ƒe d¾ƒe d¿ƒej$dKdQœdÀd4„ƒƒƒƒZKe dÁƒej$dKdLdLdLdLdÂœdÃd-„ƒƒZLe dÄƒej$dKdQœdÅd%„ƒƒZMe dÆƒej$dKdQœdÇd'„ƒƒZNe dÈƒej$dKdQœdÉd„ƒƒZOe dÊƒe #dIdZ¡ej$dKdQœdËdÌ„ƒƒƒZPe dÍƒej"dHd]dÎ�ej$�ddKdQœdÏd8„ƒƒƒZQe dÐƒej$�ddKdQœdÑd<„ƒƒZRe dÒƒej$dKdQœdÓdA„ƒƒZSe dÔƒej$dKdQœdÕd*„ƒƒZTe dÖƒej$dKdQœd×d!„ƒƒZUe dØƒej$dKdQœdÙd „ƒƒZVe dÚƒej$dKdQœdÛd"„ƒƒZWe dÜƒej$dKdQœdÝdÞ„ƒƒZXe dßƒej$dKdQœdàdá„ƒƒZYej$dKdQœdâdã„ƒZZej$dKdQœdädå„ƒZ[ej$dKdQœdædç„ƒZ\e dèƒe #dIdédédédé¡ej$dKdQœdêd„ƒƒƒZ]e dëƒej$dKdQœdìd+„ƒƒZ^e díƒe "dHd]d]¡e #dIdZdZ¡ej$dKdQœdîd„ƒƒƒƒZ_e dïƒe #dIdJdédðdI¡ej$dKdñdòdóœdôd&„ƒƒƒZ`e dõƒe #dIdIdIdZdZdZdIdZdZ¡	ej$dKdQœdöd„ƒƒƒZae d÷ƒe #dIdIdJdJ¡ej$dKdQœdød„ƒƒƒZbe dùƒej$dKdQœdúd„ƒƒZce dûƒej$�ddKdQœdüd,„ƒƒZde dýƒej$dKdþdÿœ�d d„ƒƒZee �dƒej$dKdþdÿœ�dd„ƒƒZfe �dƒej$dKdþdÿœ�dd„ƒƒZge �dƒej$dKdQœ�dd0„ƒƒZhe �dƒej$dKdL�dœ�d	d„ƒƒZie �d
ƒej$dKdL�dœ�ddB„ƒƒ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Ú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
   | ˆ ˆŽS ©N© )Úfn©ÚargsÚkwargsrL   úZ/var/www/html/bwave/python/venv/lib/python3.8/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Úfzjit_utils.GraphContextz_C.ValueÚfloat)ÚgÚselfÚmin_valÚ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)rW   rX   rY   rZ   Úscalar_typerL   rL   rQ   r$   b   s(     ÿþþ     ÿzaten::clamp©rW   c                   sº   t j‡ fdd„ƒ}tj |tjj¡}|tjjkrD|||ƒ}|||ƒ}t |¡rZtˆ ||ƒS t |¡rpt	ˆ ||ƒS t 
|¡dkr¢t 
|¡dkr¢tjˆ d|||dd�S tˆ t	ˆ ||ƒ|ƒS d S )Nc                   s.   | d k	r&t  | ¡s&ˆ jd| | ¡ d�S | S d S )NÚCast©Zto_i)r	   Ú_is_nonere   Ú	onnx_type)rg   r]   rk   rL   rQ   Ú_cast_if_not_nonez   s    ýz clamp.<locals>._cast_if_not_noner   r_   r`   ra   )r   Úbeartyper   rb   rc   Ú	UNDEFINEDr	   rn   r   r   Ú_get_tensor_rankrh   ri   )rW   rX   ÚminÚmaxrp   rj   rL   rk   rQ   r   w   s4    
 ÿ



ÿþ     ÿzaten::clamp_minc                 C  sb   | j d|tj |¡ ¡ d�}t |¡dkrJt | ¡}tj	| d|||dd�S tj	| d||dd�S d S )Nrl   rm   r   r_   r`   ra   ZMax©
re   r   rb   rc   ro   r	   rs   rh   Zunusedri   )rW   rX   rt   ru   rL   rL   rQ   r   œ   s    
     ÿzaten::clamp_maxc                 C  sb   | j d|tj |¡ ¡ d�}t |¡dkrJt | ¡}tj	| d|||dd�S tj	| d||dd�S d S )Nrl   rm   r   r_   r`   ra   ZMinrv   )rW   rX   ru   rt   rL   rL   rQ   r   ª   s    
     ÿ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   rb   rc   rd   re   rf   rg   r]   r   )rW   Úinputrj   rY   rZ   rL   rL   rQ   r9   ¸   s     ÿþþzaten::selectÚic                 C  s   | j d|||d�S )NÚGather©Úaxis_i©re   )rW   rX   Údimr(   rL   rL   rQ   r>   É   s    zaten::index_putFc                   sô  t  |¡rt  |¡}n|g}t  ¡ rD|g| ||g }ˆjd|žŽ S t  |d¡}t|ƒdkr`|S t|ƒdk�r tt|ƒƒD ]&}t  || ¡rzˆ 	d|| ¡||< qz|d }|dd … D ]}	t
 ˆ||	¡}q¶ˆ 	d|¡‰ ‡ ‡fdd„|D ƒ}ˆj	d|žd
diŽ}nº|d }|}
t  |
¡�ržt  |¡}|d k	�rF|dk�rFt
 ˆ||
|¡S t  |
¡}t  |¡}|d k	�r�|d k	�r�||k�r�t  ˆ|
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 k	�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|�r”t d|¡‚|�ràˆj	dˆ 	d|¡tjdg| ¡ d�d�}ˆ 	d|||¡}tˆ||ƒ}nˆ 	d|||¡}|S )Nr*   Úbr   é   ZNonZeroÚShapec                   s(   g | ] }t  ˆt ˆ|ˆ d ¡dg¡‘qS )Néÿÿÿÿ)r	   Ú_unsqueeze_helperrh   Úexpand)Ú.0Úind©Zbroadcast_index_shaperW   rL   rQ   Ú
<listcomp>í   s   ý  ÿzindex_put.<locals>.<listcomp>ÚConcatr|   r‚   ©ÚaxesÚstartsÚendsr{   rl   rm   z'self does not have a valid scalar type.ÚConstantOfShaper\   r^   Ú	ScatterND)r*   )r‰   ) r	   Ú_is_packed_listÚ_unpack_listÚis_caffe2_aten_fallbackÚatÚ
_parse_argÚlenÚrangeÚ_is_boolre   rh   r   rs   Zmasked_fillrƒ   Úlistr/   Ú_slice_helperÚsysÚmaxsizer„   Ú_reshape_helperr   rb   rc   rr   ro   r   ÚSymbolicValueErrorrf   rg   r]   )rW   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œ    
ü(


ÿþý  ÿ 
   ÿ
 ÿ ÿ

ýzaten::pixel_shufflec                 C  s8   t  |¡}|d k	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	   rs   Ú_unimplementedre   )rW   rX   Zupscale_factorr    rL   rL   rQ   r5   S  s    
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ÚstrÚint©Únamer~   Zinterpolate_modec                 C  s   t  | ||¡S rK   )r	   Z_interpolate_helperr©   rL   rL   rQ   Ú_interpolate]  s    r«   zaten::__interpolatec              	   C  s   t  | ||||||¡S rK   )r	   Z__interpolate_helper)rW   rx   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  ¡ r2|  d||||¡S | jd|||d�S )Nry   r#   zsparse_grad == TrueZGatherElementsr{   )r	   Ú_maybe_get_constr¤   r’   r“   re   )rW   rX   r~   r(   Zsparse_gradrL   rL   rQ   r#   �  s
    zaten::scatterc              	   C  s    t  ¡ r| jd||||dd�S tj |¡}t  |¡}t  |¡rR| jd||||d�S tj |¡|kr~| jd|tj |¡ 	¡ d�}| jd||t
 | ||¡|d�S d S )Nr=   Úsrc©Úoverload_nameZScatterElementsr{   rl   rm   )r	   r’   r“   r   rb   rc   Ú_maybe_get_scalarÚ	_is_valuere   ro   rh   Ú	expand_as)rW   rX   r~   r(   r¯   Zsrc_typerL   rL   rQ   r=   ›  s&    

ý    ÿzaten::cumsumÚnonec                 C  sn   | j dtj|tjd�d�}|rX| ¡  ¡ dkrXt |dd¡}| j d|t 	|¡ 
¡ d�}n|}|   d	||¡}|S )
Nr[   r\   r^   zprim::Constantry   r]   rl   rm   ZCumSum)re   rf   rg   r¨   ÚnodeÚkindr	   Ú
_get_constr   rb   ro   )rW   rX   r~   r]   Z
dim_tensorZparsed_dtypeÚcastZcsumrL   rL   rQ   r   ³  s      ÿzaten::masked_selectc                 C  s$   t  | t  | ||¡¡}|  d||¡S )NÚGatherND)rh   Únonzeror´   re   )rW   rX   Úmaskr(   rL   rL   rQ   r0   Ã  s    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�   )
rh   r»   r´   r	   rœ   rf   Ú
LongTensorr™   r?   re   )rW   rX   r¼   Úsourcer(   rL   rL   rQ   r/   Ê  s    

û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·   re   r?   rf   r½   Ú_squeeze_helper)rW   rX   Zsz_0rL   rL   rQ   Ú_lenÜ  s    ÿþrÁ   zaten::__getitem_c                 C  s4   t  |¡r|  d||¡S ddlm} || ||ƒS d S )NÚ
SequenceAtr   )Ú
__getitem_)r	   r¿   re   Ztorch.onnx.symbolic_opset9rÃ   )rW   rX   ry   ÚgetitemrL   rL   rQ   rÃ   è  s    
rÃ   zaten::_set_itemc                 C  s   |   d||¡}|   d|||¡S )NÚSequenceEraseÚSequenceInsertr}   )rW   Útensor_listry   rT   rL   rL   rQ   Ú	_set_itemô  s    rÈ   zaten::appendc                 C  s   |   d||¡S ©NrÆ   r}   )rW   rX   rg   rL   rL   rQ   r   û  s    z	aten::addc                 C  sn   t  |¡r^t  |¡r^| ¡ }| ¡ dkr4t  dd¡S t  |¡}|}|D ]}|  d||¡}qF|S t 	| |||¡S )Nzprim::ListConstructr   z6does not support adding dynamic tensor list to anotherrÆ   )
r	   r³   r¿   r¶   r·   r¤   r‘   re   rh   r   )rW   rX   ÚotherÚalphaZtensor_list_nodeZtensorsÚlÚtrL   rL   rQ   r     s     ÿ
zaten::insertc                 C  s   |   d|||¡S rÉ   r}   )rW   rX   Úposrg   rL   rL   rQ   r+     s    z	aten::popc                 C  s   |   d||¡S ©NrÅ   r}   ©rW   rÇ   r~   rL   rL   rQ   r6     s    zaten::Deletec                 C  s   |   d||¡S rÏ   r}   rÐ   rL   rL   rQ   r     s    z	aten::catc                 C  s:   t  |¡rt | ||¡S t  |dd¡}| jd||d�S d S )Nry   r~   ÚConcatFromSequencer{   )r	   r�   rh   r   r¸   re   rÐ   rL   rL   rQ   r   %  s    
zaten::stackc                 C  s<   t  |¡rt | ||¡S t  |dd¡}| jd||dd�S d S )Nry   r~   rÑ   r€   ©r|   Z
new_axis_i)r	   r�   rh   rD   r¸   re   rÐ   rL   rL   rQ   rD   0  s    
zaten::_unique2c           	      C  s$   | j d||dd�\}}}}|||fS )NÚUniquer¢   )Úsorted_iÚoutputsr}   )	rW   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}   )
rW   rX   r~   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rL   rL   rQ   rG   D  s        ÿz
aten::topkc              	   C  s   t j| ||||||d�S )N)ÚlargestrÖ   Úout)r	   Z_topk_helper)rW   rX   Úkr~   rÞ   rÖ   rß   rL   rL   rQ   rE   P  s          ÿz
aten::sortc                 C  s   t j| ||||d�S ©N)Ú	decendingrß   ©r	   Z_sort_helper)rW   rX   r~   râ   rß   rL   rL   rQ   r@   Y  s    zaten::argsortc                 C  s   t j| ||||d�\}}|S rá   rã   )rW   rX   r~   râ   rß   Ú_rÚ   rL   rL   rQ   r   `  s        ÿ
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_fpre   rf   rg   Úpow)rW   rX   ZdecimalsÚmulr<   rL   rL   rQ   r<   j  s    
$  ÿzaten::remainderc                 C  s4   t  |¡st  |¡r"t | ||¡S | jd||dd�S )NÚModr   )Zfmod_i)r	   rç   rh   r:   re   )rW   rx   rÊ   rL   rL   rQ   r:   y  s    zaten::splitc              
     s  t  ||¡sòˆ jd|||d�‰|d kr*ˆS t  |¡rÚtt  |¡ƒ|krÚ‡ 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 ]2}	ˆ  d	|||	 ¡}
| 
ˆ  d
|||
|¡¡ |
}q¢|S ‡ ‡fdd„t	|ƒD ƒS t ˆ ||||¡S d S )NÚSplitToSequencer{   c                   s   g | ]}t  ˆ |d g¡‘qS )r   )r	   rƒ   )r…   rT   rk   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^   )re   rf   rg   Úlong)r…   ry   ©rW   Z	split_outrL   rQ   rˆ   œ  s   ûý)r	   Z_is_split_staticre   r�   r•   r‘   rf   rg   rî   r–   r   rh   rB   )rW   rX   Zsplit_size_or_sizesr~   Ú_outputsÚsplit_sizesÚstartÚaxisÚresry   ÚendrL   rï   rQ   rB   �  s6    ÿþ
þ  ÿú	zaten::split_with_sizesc                 C  s   t | ||||ƒS rK   )rB   )rW   rX   rñ   r~   rð   rL   rL   rQ   rA   ¨  s    zaten::unbindc              	   C  sF   |d kr2| j d|| j dtjdtjd�d�|dd�S t | |||¡S d S )Nrë   r[   r€   r\   r^   r   )r|   Ú
keepdims_i)re   rf   rg   rî   rh   rF   )rW   rX   r~   rð   rL   rL   rQ   rF   ¯  s    ûc                 C  sz  t  |¡s0t  |¡r0t  |¡r0| jd|ddd�}t | || jdt dg¡d�¡}t  	|¡}|dkrx|  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å   é   rl   rm   r‰   rŽ   r{   r‚   Ú	Transpose©Zperm_i)r	   r�   Z_is_listZ_is_scalar_listre   rh   r?   rf   rg   rs   Úint64Ú_C_onnxÚTensorProtoDataTypeZINT64rœ   Úopset10Úflip)rW   rx   r4   Zpad_lenr    Ú	extensionÚpaddingsZ	padding_crL   rL   rQ   Ú_prepare_onnx_paddings¿  sR    ÿþý 
"ý  ÿú  ÿ   ÿ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  re   )rW   rx   ÚpaddingÚvaluer¬   r4   rL   rL   rQ   r   ù  s
    
zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  s"   d}t | ||ƒ}| jd|||d�S )NÚreflectr  r  ©r  re   ©rW   rx   r  r¬   r  rL   rL   rQ   r8     s    zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  s"   d}t | ||ƒ}| jd|||d�S )NÚedger  r  r  r  rL   rL   rQ   r;     s    z	aten::pad©rW   rx   r4   r¬   r	  c                 C  sv   t  |d¡}|dkr t| ||ƒS |dkr4t| ||ƒS |dkrJt| |||ƒS |dkr`t | ||¡S t d|› �|¡‚d S )NÚsZ	replicater
  r  ZcircularzUnrecognized padding mode )	r	   r”   r;   r8   r   rh   Z_pad_circularr   r�   r  rL   rL   rQ   r4     s    	zaten::linalg_detc                 C  s   |   d|¡S )NZDetr}   ©rW   rX   rL   rL   rQ   r,   -  s    zaten::logdetc                 C  s   t  | t| |ƒ¡S rK   )rh   Úlogr,   )rW   rx   rL   rL   rQ   r.   3  s    úaten::arangec                 G  s   dd„ }t |ƒdkrŒtdd„ |D ƒƒrŒt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s¦t |ƒdk�r(t |ƒ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�sDt |ƒdk�rœt |ƒdk�rXd }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 d S )Nc                 S  s   t  | d¡} | S )Nry   )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]   rw   )rò   rõ   r]   r  zwith z
 arguments)
r•   Úallrf   rü   re   rg   r	   Z_arange_cast_helperr]   r¤   )rW   rO   r  r]   rò   rõ   Zdelta_defaultÚtype_r  Zstart_defaulträ   rL   rL   rQ   r   9  s~    þþþ  ÿþþ    ÿ   ÿþ ÿzaten::_dim_arangec                 C  sT   |   d|¡}| j d|| j dt |¡d�dd�}t ¡ rB|   d|¡S t| |dd d d ƒS )	Nr�   rz   r[   r^   r   r{   z_caffe2::Ranger¢   )re   rf   rg   r	   r’   r   )rW   Úliker~   Z
like_shapeÚstoprL   rL   rQ   Ú_dim_arange‚  s       ÿr  z
aten::size)Zquantize_outputc                 C  s"   |d kr|   d|¡S t | ||¡S )Nr�   )re   r	   Ú_size_helper©rW   rX   r~   rL   rL   rQ   r?   �  s    zaten::squeezec                 C  s|  |d kr|   d|¡S t |¡s.t | ||g¡S t |dd¡}t |¡}|}|d k	rb|dk rb||7 }t ||¡}|dk r~|d ksˆ|d k�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�rlt dt|ƒ d d t|ƒ d d d ¡ |S t | ||g¡S )NZSqueezery   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.)re   r	   Ú_is_constantrÀ   r¸   rs   Z_get_tensor_dim_sizerf   rg   r  Zonesrü   r   Úadd_op_with_blocksr   Ú_add_output_to_blockÚblockÚwarningsÚwarnr§   )rW   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   ˜  s^    

   ÿ
ÿþýüûúùÿ
zaten::unsqueezec                 C  s(   t  |¡rt  |dd¡}t  | ||g¡S )Nry   r~   )r	   r%  r¸   rƒ   r   rL   rL   rQ   rH   Ì  s    
zaten::mmc                 C  s   | j d||ddd�S )NZGemmg        g      ð?)Zbeta_fZalpha_fr}   )rW   rX   rÊ   rL   rL   rQ   r1   Õ  s    zaten::indexc                 C  sš   t  ¡ r| jd||dd�S t  |¡r0t  |¡}n|g}t|ƒdkrŒ|d }t  |¡sŒt  |¡srtj	 
|¡tj	jkrŒt | |¡}|  d||¡S t | ||¡S )Nr(   ZTensorr°   r€   r   rº   )r	   r’   r“   r�   r‘   r•   rn   r—   r   rb   rc   ÚUINT8rh   r»   re   r(   )rW   rX   r(   rÚ   rL   rL   rQ   r(   Û  s"    

ÿ
ÿþzaten::index_fillc           	      C  st   t  |d¡}t  ¡ r*| jd|||d|d�S t  | |||¡\}}t  |¡}t  ||¡}t | ||d ¡}t	| ||||ƒS )Nry   r'   Z
int_Scalar)r±   Údim_i)
r	   r”   r’   r“   Ú_index_fill_reshape_helperr²   r  rh   r„   r=   )	rW   rX   r~   r(   r	  Ú	dim_valueÚexpanded_index_shapeÚexpanded_indexZexpanded_valuerL   rL   rQ   r'   ó  s(    ú	   ÿ
zaten::index_copyc                 C  sL   t  |d¡}t  ¡ r(| jd||||d�S t  | |||¡\}}t| ||||ƒS )Nry   r)   )r/  )r	   r”   r’   r“   r0  r=   )rW   rX   r~   r(   r¾   r1  r2  r3  rL   rL   rQ   r)   
  s       ÿzaten::__rshift_c                 C  sÚ   t j |t jj¡t j |¡kr:| jd|t j |¡ ¡ d�}t j |t jj¡t jjkrf| jd||dd�S | jdtjdtj	d�d	�}t
 |¡sž| jd|tjjd�}|  d
||¡}| jd|t j |¡ ¡ d�}|  d||¡}|S )Nrl   rm   ÚBitShiftZRIGHT©Zdirection_sr[   rù   r\   r^   ÚPowÚDiv©r   rb   rc   rr   re   ro   r.  rf   rg   Zfloat32r	   rç   rý   rþ   rd   )rW   rX   rÊ   ÚtwoÚtwo_powÚrshiftrL   rL   rQ   Ú	__rshift_  s6     ÿ
þýÿÿ
ýr<  zaten::__lshift_c                 C  sÚ   t j |t jj¡t j |¡kr:| jd|t j |¡ ¡ d�}t j |t jj¡t jjkrf| jd||dd�S | jdtjdtj	d�d	�}t
 |¡sž| jd|tjjd�}|  d
||¡}| jd|t j |¡ ¡ d�}|  d||¡}|S )Nrl   rm   r4  ZLEFTr5  r[   rù   r\   r^   r6  rå   r8  )rW   rX   rÊ   r9  r:  ÚlshiftrL   rL   rQ   Ú	__lshift_8  s6     ÿ
þýÿÿ
ýr>  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‚   )re   rf   rg   r   rH   r	   rƒ   rœ   )rW   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  s<    
  ÿýü  ÿ  ÿr?  c                 C  s.   | j dt dd||gd ¡d�}|   d||¡S )Nr[   r   rù   r^   r  )re   rf   r½   )rW   rx   Ú	padding_hÚ	padding_wr4   rL   rL   rQ   Ú_get_im2col_padded_input†  s     rB  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?   re   rf   rg   r	   rƒ   )rW   rx   Úkernel_hÚkernel_wZ	batch_dimZchannel_dimZchannel_unfoldedrL   rL   rQ   Ú_get_im2col_output_shape�  s      ÿûrE  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
|dddd	ddgd�}t | ||¡S )Nr[   rù   r^   r¥   r   r€   rz   r{   r¢   rú   r¦   rû   )	r?   re   rf   rg   r?  rE  rB  r	   rœ   )rW   rx   Zkernel_sizeZdilationr  ZstrideZinput_hZinput_wZstride_hZstride_wr@  rA  Z
dilation_hZ
dilation_wrC  rD  Zblocks_row_indicesZblocks_col_indicesZoutput_shapeZpadded_inputÚoutputrL   rL   rQ   r&      s8         ÿ     ÿzaten::narrowc                 C  s"   |   d||¡}tj| ||||d�S )Nrì   rŠ   )re   r	   r™   )rW   rx   r~   rò   Úlengthrõ   rL   rL   rQ   r2   Ö  s    zaten::flattenc                 C  sº   t  |¡}|dkr|S |dkrL|dks:|d k	r„||d kr„| jd||d�S n8|dkr„|dksp|d k	r„||d kr„| jd||d d�S |d kr˜t  dd	¡S |dk r¨|| }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	   rs   re   r¤   Z_flatten_helper)rW   rx   Z	start_dimZend_dimr~   rL   rL   rQ   r"   Ý  s"    
þzaten::linalg_vector_normr   zOptional[Sequence[int]]Úbool)rW   r~   Úkeepdimc                 C  s¨   |dkr�|d k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 d S )Nr   r[   r‚   r\   r^   FÚNotr!  rl   rm   ©Úaxes_irö   )r	   rœ   re   rf   rg   rü   r½   r   rb   rc   ro   Ú_reducesum_helperrh   r-   )rW   rX   Úordr~   rK  r]   Zcond_oprL   rL   rQ   r-   ù  s0      ÿ ÿý   ÿzaten::embedding_bagc
                 C  s€  |rt jrt d¡S |	d k	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|ž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�}n4|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^   rl   rm   r‰   r|   )r‹   rŒ   r�   ZstepsZLoopr#  rz   r{   rí   rå   rM  Z
ReduceMeanZ	ReduceMax)r‰   )r   Zexport_trainingr	   Z_onnx_unsupportedÚRuntimeErrorre   rf   rg   rý   rþ   ZBOOLrƒ   r  r™   rš   r›   r   r&  r(  r   Z_add_input_to_blockrn   rO  r'  r¶   rG  )rW   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_iterr-  Zindices_startZindices_endZindices_rowZ
embeddingsZper_sample_weights_rowZcond_outrL   rL   rQ   r      s¾    
ÿ  ÿû     ÿ     ÿ  ÿ    ÿ

   ÿ    ÿ  ÿ
   ÿ
  ÿzaten::embedding_renormc              	   C  sà   |   d|¡}|   d||¡}t|ƒ}|dkr0d}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Ó   rz   r€   ZReduceL1rù   ZReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.rM  rì   r[   gH¯¼šò×z>r^   r7  rå   ZWhereZGreaterr�   )re   r¨   r   r�   rf   rg   r	   rƒ   )rW   Ú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@    
ý  ÿ
üü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|žddiŽ}t| |||ƒS )Nrz   r�   r   r{   rø   r[   r€   r\   r^   r7  rì   rå   r‰   r|   )r‰   )re   rf   rg   rî   rh   r„   rB   )rW   rX   Úchunksr~   r+  Zchunk_size_sÚ
chunk_sizeZ	chunk_vecrL   rL   rQ   r   £  s      ÿþzaten::normalc	           
      C  sD   |d k	r"t  |¡s"t | ||d ¡}t | ||  d|¡¡}	t| |	|ƒS )NZRandomNormalLike)r	   rn   rh   r„   ré   re   r   )
rW   ZmeanZstdÚsizesÚ	generatorr]   ZlayoutZdeviceZ
pin_memoryr¡   rL   rL   rQ   r3   µ  s    zaten::atleast_1dztorch._C.Valuer  c              
   C  s°   t  |¡rzt  |¡rzt  |¡}g }|D ]D}|}t  |¡}|dkr`t  | || jdt dg¡d�¡}| 	|¡ q&| jd|žŽ S t  |¡}|dkr¬t  | || jdt dg¡d�¡}|S )Nr   r[   r€   r^   ÚSequenceConstruct)r\  )
r	   r³   r�   r‘   rs   rœ   re   rf   rg   r   ©rW   rX   rÇ   Znew_tensor_listrg   Z
new_tensorZtensor_rankrL   rL   rQ   r   Í  s,    

  ÿ
  ÿzaten::atleast_2dc                 C  sì   t  |¡r˜t  |¡r˜t  |¡}g }|D ]b}|}t  |¡}|dkrdt  | || jdt ddg¡d�¡}n|dkr~t j	| |dgd�}| 
|¡ q&| jd|žŽ S t  |¡}|dkrÎt  | || jdt ddg¡d�¡}n|dkrèt j	| |dgd�}|S )Nr   r[   r€   r^   ©rN  r\  )r\  ©r	   r³   r�   r‘   rs   rœ   re   rf   rg   rƒ   r   r]  rL   rL   rQ   r   è  s<    

  ÿ  ÿ
  ÿzaten::atleast_3dc                 C  sR  t  |¡rÈt  |¡rÈt  |¡}g }|D ]’}|}t  |¡}|dkrft  | || jdt dddg¡d�¡}nH|dkr”t j	| |dgd�}t j	| |dgd�}n|dkr®t j	| |dgd�}| 
|¡ q&| jd	|žŽ S t  |¡}|dk�rt  | || jdt dddg¡d�¡}nL|dk�r2t j	| |dgd�}t j	| |dgd�}n|dk�rNt j	| |dgd�}|S )
Nr   r[   r€   r^   r^  r‚   rù   r\  )r\  r_  r]  rL   rL   rQ   r   
  sX    

  ÿ  ÿ  ÿ  ÿ

  ÿ

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 ]N}| j dtj|d gtjd�d�}|   d||¡}| |   d||||¡¡ |}qº|S )Nr�   r[   r\   r^   rz   r   r{   r€   rì   r7  rå   rí   )re   rf   rg   rî   r–   r   )rW   rX   rX  r~   Zinput_shaperó   Zinput_shape_dimrò   rY  Zchunk_size_minus_1Zinput_shape_dim_shiftZ	chunk_dimrô   ry   r(   rõ   rL   rL   rQ   r7   7  s$     ÿ zaten::hstack©rW   rÇ   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   re   rf   rg   rî   r   r&  r   r'  r(  r¶   rG  )rW   rÇ   Zfirst_tensorZfirst_tensor_shapeZfirst_tensor_dimr,  Zequal_to_oneZif_op_greaterZif_context_equalZelse_context_equalrä   Z	result_ifZresult_elser¡   rL   rL   rQ   r%   M  s>    
ýü   ÿ   ÿzaten::vstackc                 C  s   t | |ƒ}| jd|ddd�S )NrÑ   r   rÒ   )r   re   r`  rL   rL   rQ   rI   n  s    
)F)F)N)N)N)N)N)r   )N)N)r   N)N)N)N)NNNNNN)kÚ__doc__Ú
__future__r   Ú	functoolsrš   r)  Útypingr   r   rf   r   Ztorch._Cr   rý   Z
torch.onnxr   r   r	   r
   rÿ   r   rh   r   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   Ú__all__ÚpartialZonnx_symbolicZ_onnx_symbolicrS   Zquantized_argsÚ
parse_argsrq   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)   r<  r>  r?  rB  rE  r&   r2   r"   r-   r    r!   r   r3   r   r   r   r7   r%   rI   rL   rL   rL   rQ   Ú<module>   s°   Ç<	#

ÿ
þþþþþþþ"

	
$9G

2
  +3^%     ÷ +