o
    hA?                     @  s  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 g dZejejdd	ZejdSddZededddejdTdSddZededdejdSddZejdUdd Zed!edd"d#ejdSd$d%Z ed&edd"d#ejdSd'd(Z!ed)ejdSd*d+Z"ed,ejdSd-d.Z#ed/ejdSd0d1Z$ed2ejdSd3d4Z%ed5eddddd6ejdSd7d8Z&ed9ejdSd:d;Z'ed<eddd#ejdVd?d@Z(edAeddd#ejdVdBdCZ)edDejdSdEdFZ*edGejdSdHdIZ+edJejdSdKdLZ,edMedd6ddejdSdNdOZ-edPedddddejdTdSdQdRZ.dS )W    )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   )opsetgjit_utils.GraphContextc                   sl   |st dt|d r* fdd|D } jd jdg|R d|itjjdS  jdg|R d|iS )	NzEinsum inputs are empty.r   c                   s    g | ]} j d |tjjdqS )Castto_i)op_C_onnxTensorProtoDataTypeINT64).0tensorr!    Q/var/www/html/ai/venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset12.py
<listcomp>5   s    z"_einsum_helper.<locals>.<listcomp>r#   Einsum
equation_sr$   )RuntimeErrorr   _is_boolr&   r'   r(   BOOL)r!   equationtensorsr-   r,   r.   _einsum_helper/   s   
r7   zaten::einsumsvisc                 C  s   t |}t| ||S N)r   _unpack_listr7   )r!   r5   tensor_listpathr6   r-   r-   r.   r   B   s   
r   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&   	onnx_typer7   r!   inputotherr-   r-   r.   r   J   s   
r   rD   torch._C.Valuepfloattrainboolreturn/Tuple[torch._C.Value, Optional[torch._C.Value]]c                 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value_tdtypeDropout   )outputs)r   check_training_moder&   torchr+   rJ   )r!   rD   rG   rI   trmaskr-   r-   r.   &_dropout_returns_masked_input_and_maskZ   s   rZ   zaten::dropoutfbc                 C  s   t | |||\}}|S r;   rZ   )r!   rD   rG   rI   masked_r-   r-   r.   r   i   s   r   zaten::native_dropoutc                 C  s   t | |||S r;   r]   )r!   rD   rG   rI   r-   r-   r.   r   q   s   r   zaten::nll_lossc                 C  sf   t |d}g d}|| }t |d}|  r&| jd||||d}|S | jd|||||d}|S )NinonemeansumNegativeLogLikelihoodLossreduction_signore_index_i)r   _maybe_get_constnode
mustBeNoner&   )r!   selftargetweight	reductionignore_indexreduction_valsnlllossr-   r-   r.   r   x   s,   	r   zaten::nll_loss2dc                 C     t | |||||S r;   r   r!   rl   rm   rn   ro   rp   r-   r-   r.   r         r   zaten::nll_loss_ndc                 C  rs   r;   rt   ru   r-   r-   r.   r      rv   r   zaten::cross_entropy_lossc           	      C  s   t |d}g d}|| }t |d}|d ur"|dkr"td|t |d}|  r:| jd||||d}|S | jd|||||d}|S )Nr`   ra   r[   g        z2Unsupported: ONNX does not support label_smoothingSoftmaxCrossEntropyLossrf   )r   ri   r   SymbolicValueErrorrj   rk   r&   )	r!   rl   rm   rn   ro   rp   label_smoothingrq   celossr-   r-   r.   r      s6   	r   z&aten::binary_cross_entropy_with_logitsr`   c                 C  s<  | j dtdgd}t| |}t| |}t| ||}	t| ||}
t| |	}|d u s4t|rJt	| t
| t| ||t| |
|}nt	| t
| t| t| |||t| |
|}|d urtt|stt| ||}t|d}|dkr|S |dkr| j d|ddS |dkr| j d	|ddS td
|S )NrM      rN   r`   r   
ReduceMean)
keepdims_irS   	ReduceSumzMbinary_cross_entropy_with_logits with reduction other than none, mean, or sum)r&   rV   r+   opset9sigmoidlogsubr   _is_nonenegaddmulri   _onnx_unsupported)r!   rD   rm   rn   
pos_weightro   rG   sig_x	log_sig_xsub_1_xsub_1_ylog_1_xoutputr-   r-   r.   r      sD   	r   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 )Nr[   r#   r$   Celu)alpha_f)r   ri   r   r?   r@   rA   DOUBLEr&   r'   r(   FLOAT)r!   rl   alphaoutr-   r-   r.   r     s   r   zaten::argmaxdimkeepdimc                 C     t | |||dS )NArgMaxr   _argmin_argmax_helperr!   rD   r   r   r-   r-   r.   r        	r   zaten::argminc                 C  r   )NArgMinr   r   r-   r-   r.   r   $  r   r   z	aten::powc                 C     |  d||S )NPowr&   )r!   rl   exponentr-   r-   r.   r   0     r   zaten::gec                 C  r   )NGreaterOrEqualr   rC   r-   r-   r.   r   6  r   r   zaten::lec                 C  r   )NLessOrEqualr   rC   r-   r-   r.   r   <  r   r   zaten::unfoldc           $   	   C  s  t |d}t |d}t |st |st| ||||S t  r-| jd||||dS t ||}|d urk| 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 usJ 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g|R ddi}|d	|tjj} t||  t|| |  }!g d}||d  |d |d< ||d < | jd|!|d}"t | |"dg}#|#S t ddS )Nr`   r   )dimension_isize_istep_irM   r   rN   r{   Ranger#   r$   MinLoop)n_blocksGatherrS   Slice	Transpose)perm_iConcataxis_i)r   r{   rS         Unfoldzinput size not accessible)r   ri   	_is_valuer   r   is_caffe2_aten_fallbackat_get_tensor_dim_sizer&   rV   r+   _size_helper_get_tensor_ranklistrangeappendpopr'   r(   r4   r   add_op_with_blocksblockr
   _add_input_to_block_unsqueeze_helper_add_output_to_blockrj   r   _squeeze_helper_unimplemented)$r!   rD   	dimensionsizestep
const_size
const_stepsizedim	low_startlow_endhi_endlow_indices
hi_indiceslow_sizehi_sizendimpermunsqueeze_listloop_conditionloop_lenlooploop_contextr_   
loop_blockblock_input_itercondstartsendsaxesstack	unsqueezeconcatcond_outloop_output	transposesqueezer-   r-   r.   r   B  sx   







"r   zaten::tensordotc                   s  |d ur
t dd t |  d u rtd|t |d u r(t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R  }||g}t| ||S )N	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                   ,   g | ]}| d k r|   n| qS r   r-   r*   r`   )dim_count_adims_ar-   r.   r/         ztensordot.<locals>.<listcomp>c                   r   r   r-   r   )dim_count_bdims_br-   r.   r/     r   c                      g | ]}| vr|qS r-   r-   r   )r   r-   r.   r/         c                   r   r-   r-   r   )r   r-   r.   r/     r   Shaper   )r   r   r   rM   rP   rN   z	ij,jk->ikzprim::ListConstruct)r   r   r   r   rx   r   lenr   permuter&   _slice_helperrV   r+   long_reshape_from_tensorsysmaxsizer   )r!   input_ainput_br   r   r   left_dims_aleft_dims_bnew_input_anew_input_binput_shapeleft_sizes_ashape_sizesoutput_aslicesleft_sizes_boutput_br   r-   )r   r   r   r   r.   r     s   



r   )r!   r"   r;   )
r!   r"   rD   rF   rG   rH   rI   rJ   rK   rL   )r!   r"   rD   rF   r   rF   r   rJ   )/
__future__r   	functoolsr   typingr   r   rV   torch._Cr   r'   
torch.onnxr   r   r   r	   r   r
   torch.onnx._internalr   r   r   __all__partialonnx_symbolic_onnx_symbolicbeartyper7   
parse_argsr   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   s    
 .+		L