U
    •Ê¹jA?  ã                   @  sL  d dl m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mZmZmZ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gZejejdd�Zejddœdd„ƒZedƒe dd d!¡ejdNddœd"d„ƒƒƒZed#ƒe d d ¡ejddœd$d„ƒƒƒZejdd%d&d'd(d)œd*d+„ƒZed,ƒe d d-d.¡ejddœd/d„ƒƒƒZ ed0ƒe d d-d.¡ejddœd1d„ƒƒƒZ!ed2ƒejddœd3d„ƒƒZ"ed4ƒejddœd5d„ƒƒZ#ed6ƒejddœd7d„ƒƒZ$ed8ƒejddœd9d„ƒƒZ%ed:ƒe d d d d d;¡ejddœd<d	„ƒƒƒZ&ed=ƒejddœd>d
„ƒƒZ'ed?ƒe d d d.¡ejdd%d%d'd@œdAd„ƒƒƒZ(edBƒe d d d.¡ejdd%d%d'd@œdCd„ƒƒƒZ)edDƒejddœdEd„ƒƒZ*edFƒejddœdGd„ƒƒZ+edHƒejddœdId„ƒƒZ,edJƒe d d;d d ¡ejddœdKd„ƒƒƒZ-edLƒe d d d!d!d ¡ejdOddœdMd„ƒƒƒZ.dS )Pé    )ÚannotationsN)ÚOptionalÚTuple)Ú_onnx)Ú_type_utilsÚerrorsÚsymbolic_helperÚsymbolic_opset9Úutils)Ú	_beartypeÚ	jit_utilsÚregistrationÚargmaxÚargminÚ binary_cross_entropy_with_logitsÚceluÚcross_entropy_lossÚdropoutÚeinsumÚgeÚleÚnative_dropoutÚnll_lossÚ
nll_loss2dÚnll_loss_ndÚouterÚpowÚ	tensordotÚunfoldé   )Zopsetzjit_utils.GraphContext©Úgc                   sh   |st dƒ‚t |d ¡rP‡ fdd„|D ƒ}ˆ jdˆ jd	|žd|iŽtjjd�S ˆ jd
|žd|iŽS d S )NzEinsum inputs are empty.r   c                   s    g | ]}ˆ j d |tjjd�‘qS )ÚCast©Zto_i)ÚopÚ_C_onnxÚTensorProtoDataTypeZINT64)Ú.0Útensorr    © úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/onnx/symbolic_opset12.pyÚ
<listcomp>5   s   ÿz"_einsum_helper.<locals>.<listcomp>r"   ÚEinsumZ
equation_sr#   )r,   )r,   )ÚRuntimeErrorr   Z_is_boolr$   r%   r&   ÚBOOL)r!   ÚequationÚtensorsr)   r    r*   Ú_einsum_helper/   s    
þýr1   zaten::einsumÚsÚvÚisc                 C  s   t  |¡}t| ||ƒS ©N)r   Z_unpack_listr1   )r!   r/   Ztensor_listÚpathr0   r)   r)   r*   r   B   s    
zaten::outerc                 C  sJ   t j |t jj¡t j |¡kr:| jd|t j |¡ ¡ d�}t| d||gƒS )Nr"   r#   zi,j->ij)r   ÚJitScalarTypeÚ
from_valueÚ	UNDEFINEDr$   Z	onnx_typer1   ©r!   ÚinputÚotherr)   r)   r*   r   J   s     ÿ
þýztorch._C.ValueÚfloatÚboolz/Tuple[torch._C.Value, Optional[torch._C.Value]])r!   r;   ÚpÚtrainÚreturnc                 C  sf   t  |d¡ |s|d fS | jdt |¡d�}| jdtj|tjd�d�}| jd|||dd�\}}||fS )Nr   ÚConstant©Zvalue_t©ZdtypeZDropouté   )Úoutputs)r   Zcheck_training_moder$   Útorchr(   r>   )r!   r;   r?   r@   ÚtÚrÚmaskr)   r)   r*   Ú&_dropout_returns_masked_input_and_maskZ   s    rK   zaten::dropoutÚfÚbc                 C  s   t | |||ƒ\}}|S r5   ©rK   )r!   r;   r?   r@   ZmaskedÚ_r)   r)   r*   r   i   s    zaten::native_dropoutc                 C  s   t | |||ƒS r5   rN   )r!   r;   r?   r@   r)   r)   r*   r   q   s    zaten::nll_lossc                 C  sf   t  |d¡}dddg}|| }t  |d¡}| ¡  ¡ rL| jd||||d�}n| jd|||||d�}|S )NÚiÚnoneÚmeanÚsumZNegativeLogLikelihoodLoss©Zreduction_sZignore_index_i)r   Ú_maybe_get_constÚnodeÚ
mustBeNoner$   )r!   ÚselfÚtargetÚweightÚ	reductionÚignore_indexÚreduction_valsZnlllossr)   r)   r*   r   x   s*    
ûú	zaten::nll_loss2dc                 C  s   t | |||||ƒS r5   ©r   ©r!   rX   rY   rZ   r[   r\   r)   r)   r*   r   š   s    zaten::nll_loss_ndc                 C  s   t | |||||ƒS r5   r^   r_   r)   r)   r*   r   ¢   s    zaten::cross_entropy_lossc           	      C  sŽ   t  |d¡}dddg}|| }t  |d¡}|d k	rF|dkrFt d|¡‚t  |d¡}| ¡  ¡ rt| jd||||d	�}n| jd|||||d	�}|S )
NrP   rQ   rR   rS   rL   g        z2Unsupported: ONNX does not support label_smoothingZSoftmaxCrossEntropyLossrT   )r   rU   r   ÚSymbolicValueErrorrV   rW   r$   )	r!   rX   rY   rZ   r[   r\   Zlabel_smoothingr]   Zcelossr)   r)   r*   r   ª   s6    
 ÿûú	z&aten::binary_cross_entropy_with_logitsrP   c                 C  sF  | j dt dg¡d�}t | |¡}t | |¡}t | ||¡}	t | ||¡}
t | |	¡}|d ksht |¡r”t 	| t 
| t | ||¡t | |
|¡¡¡}n4t 	| t 
| t | t | ||¡|¡t | |
|¡¡¡}|d k	rèt |¡sèt | ||¡}t |d¡}|dk�r|S |dk�r| j d|dd�S |dk�r6| j d	|dd�S t d
|¡S d S )NrB   é   rC   rP   r   Z
ReduceMean)Z
keepdims_irE   Z	ReduceSumzMbinary_cross_entropy_with_logits with reduction other than none, mean, or sum)r$   rG   r(   Úopset9ZsigmoidÚlogÚsubr   Z_is_noneÚnegÚaddÚmulrU   Z_onnx_unsupported)r!   r;   rY   rZ   Z
pos_weightr[   r?   Zsig_xZ	log_sig_xZsub_1_xZsub_1_yZlog_1_xÚoutputr)   r)   r*   r   Ú   sH      ÿþýþ	


þz
aten::celuc                 C  sn   t  |d¡}tj |tjj¡tjjkr^| jd|tj	j
d�}| jd||d�}| jd|tj	jd�S | jd||d�S )NrL   r"   r#   ZCelu)Zalpha_f)r   rU   r   r7   r8   r9   ÚDOUBLEr$   r%   r&   ÚFLOAT)r!   rX   ÚalphaÚoutr)   r)   r*   r     s    ÿÿzaten::argmax©r!   r;   ÚdimZkeepdimc                 C  s   t  | |||d¡S )NZArgMax©r   Z_argmin_argmax_helperrm   r)   r)   r*   r     s    	zaten::argminc                 C  s   t  | |||d¡S )NZArgMinro   rm   r)   r)   r*   r   $  s    	z	aten::powc                 C  s   |   d||¡S )NÚPow©r$   )r!   rX   Úexponentr)   r)   r*   r   0  s    zaten::gec                 C  s   |   d||¡S )NZGreaterOrEqualrq   r:   r)   r)   r*   r   6  s    zaten::lec                 C  s   |   d||¡S )NZLessOrEqualrq   r:   r)   r)   r*   r   <  s    zaten::unfoldc           $   	   C  sæ  t  |d¡}t  |d¡}t  |¡s>t  |¡s>t | ||||¡S t  ¡ rZ| jd||||d�S t  ||¡}|d k	�rÚ| jdt	 
d¡d�}| jdt	 
|¡d�}	| jdt	 
|d ¡d�}
|  d||	|¡}|  d||
|¡}t  | || jdt	 
d¡d�¡}t  | || jdt	 
d¡d�¡}t  |¡}|d k	�s$t‚ttd|ƒƒ}| | |¡¡ g }| jdt	 
d¡d�}| jd	|tjjd
�}|  d||¡}tj| d||dd�\}\}}|j}t |¡}t |¡}| d||¡}| d||¡}|jdt	 
dg¡d�}t  ||dg¡}t  ||dg¡}| d||||¡}t  ||jd||d�|g¡}| |¡ |jd|žddiŽ}| d	|tjj¡} t || ¡ t ||¡ | ¡  ¡ }!dddddg}||d  |d  |d< ||d < | jd|!|d�}"t  | |"dg¡}#|#S t  dd¡S )NrP   r   )Zdimension_iZsize_iZstep_irB   r   rC   ra   ÚRanger"   r#   ZMinZLoop)Zn_blocksZGatherrE   ÚSliceZ	Transpose)Zperm_iÚConcatZaxis_ié   é   ZUnfoldzinput size not accessible)ru   ) r   rU   Z	_is_valuerb   r   Zis_caffe2_aten_fallbackÚatZ_get_tensor_dim_sizer$   rG   r(   Z_size_helperÚ_get_tensor_rankÚAssertionErrorÚlistÚrangeÚappendÚpopr%   r&   r.   r   Zadd_op_with_blocksÚblockr
   Z_add_input_to_blockZ_unsqueeze_helperZ_add_output_to_blockrV   rh   Z_squeeze_helperÚ_unimplemented)$r!   r;   Ú	dimensionÚsizeÚstepZ
const_sizeZ
const_stepZsizedimZ	low_startZlow_endZhi_endZlow_indicesZ
hi_indicesZlow_sizeZhi_sizeÚndimÚpermZunsqueeze_listZloop_conditionZloop_lenÚloopZloop_contextrO   Z
loop_blockZblock_input_iterZcondÚstartsÚendsÚaxesÚstackZ	unsqueezeÚconcatZcond_outZloop_outputZ	transposeZsqueezer)   r)   r*   r   B  s”    ÿ
  ÿ  ÿ
  ÿ    ÿ

  ÿ
  ÿ"zaten::tensordotc                   s„  |d k	rt  dd¡ t  |¡‰ ˆ d kr2t d|¡‚t  |¡‰ˆd krPt d|¡‚‡ ‡fdd„ttˆƒƒD ƒ‰‡‡fdd„ttˆƒƒD ƒ‰‡fdd„tˆ ƒD ƒ}‡fd	d„tˆƒD ƒ}t | ||ˆ ¡}t | |ˆ| ¡}	|  	d
|¡}
t j
| |
dgdgt|ƒgd�}|| j	dtjdgtjd�d�g}t | ||¡}|  	d
|¡}
t j
| |
dgdgtjgd�}| j	dtjdgtjd�d�|g}t | ||¡}|  	d
|	¡}
t j
| |
dgtˆƒgtjgd�}t j
| |
dgdgtˆƒgd�}|| j	dtjdgtjd�d�g}t | |	|¡}|  	d
|¡}
t j
| |
dgdgtjgd�}| j	dtjdgtjd�d�|g}t | |	|¡}t| d| j	d||gžŽ ƒ}||g}t | ||¡S )NZ	Tensordotz-Out parameter is not supported for tensordot.zJUnsupported: ONNX export of tensordot for tensor(input_a) of unknown rank.zJUnsupported: ONNX export of tensordot for tensor(input_b) of unknown rank.c                   s,   g | ]$}ˆ| d k r ˆ| ˆ  nˆ| ‘qS ©r   r)   ©r'   rP   )Údim_count_aÚdims_ar)   r*   r+   ¨  s   ÿztensordot.<locals>.<listcomp>c                   s,   g | ]$}ˆ| d k r ˆ| ˆ  nˆ| ‘qS rŒ   r)   r�   )Údim_count_bÚdims_br)   r*   r+   ¬  s   ÿc                   s   g | ]}|ˆ kr|‘qS r)   r)   r�   )r�   r)   r*   r+   ±  s      c                   s   g | ]}|ˆ kr|‘qS r)   r)   r�   )r‘   r)   r*   r+   ²  s      ZShaper   )r‰   r‡   rˆ   rB   éÿÿÿÿrD   rC   z	ij,jk->ikúprim::ListConstruct)r“   )r   r€   ry   r   r`   r|   Úlenrb   Zpermuter$   Z_slice_helperrG   r(   ÚlongZ_reshape_from_tensorÚsysÚmaxsizer   )r!   Zinput_aZinput_br�   r‘   rl   Zleft_dims_aZleft_dims_bZnew_input_aZnew_input_bZinput_shapeZleft_sizes_aZshape_sizesZoutput_aZslicesZleft_sizes_bZoutput_brh   r)   )rŽ   r�   r�   r‘   r*   r   ‘  sª     ÿ
þ
þ
þ
þ    ÿþ    ÿþ    ÿ    ÿþ    ÿþ)N)N)/Ú
__future__r   Ú	functoolsr–   Útypingr   r   rG   Ztorch._Cr   r%   Z
torch.onnxr   r   r   r	   rb   r
   Ztorch.onnx._internalr   r   r   Ú__all__ÚpartialZonnx_symbolicZ_onnx_symbolicZbeartyper1   Ú
parse_argsr   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   Ú<module>   s´   	ï
 .+		L