o
    h+=                     @  sH  d dl mZ d dlZd dl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 g dZejejddZdRddZededdddSdRddZededddRddZdTddZed edd!d"dRd#d$Zed%edd!d"dRd&d'Zed(dRd)d*Zed+dRd,d-Zed.dRd/d0Zed1dRd2d3Z ed4eddddd5dRd6d7Z!ed8dRd9d:Z"ed;eddd"dUd>d?Z#ed@eddd"dUdAdBZ$edCdRdDdEZ%edFdRdGdHZ&edIdRdJdKZ'edLedd5dddRdMdNZ(edOeddddddSdRdPdQZ)dS )V    )annotationsN)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset9utils)	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    o/var/www/html/construction_image-detection-poc/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_helper0   s   
r4   zaten::einsumsvisc                 C  s   t |}t| ||S N)r   _unpack_listr4   )r   r2   tensor_listpathr3   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_typer4   r   inputotherr*   r*   r+   r   I   s   
r   rA   torch._C.Valuepfloattrainboolreturn,tuple[torch._C.Value, torch._C.Value | None]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(   rG   )r   rA   rD   rF   trmaskr*   r*   r+   &_dropout_returns_masked_input_and_maskX   s   rW   zaten::dropoutfbc                 C  s   t | |||\}}|S r8   rW   )r   rA   rD   rF   masked_r*   r*   r+   r   f   s   r   zaten::native_dropoutc                 C  s   t | |||S r8   rZ   )r   rA   rD   rF   r*   r*   r+   r   m   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   s   s,   	r   zaten::nll_loss2dc                 C     t | |||||S r8   r   r   ri   rj   rk   rl   rm   r*   r*   r+   r         r   zaten::nll_loss_ndc                 C  rp   r8   rq   rr   r*   r*   r+   r      rs   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]   r^   rX   g        z2Unsupported: ONNX does not support label_smoothingSoftmaxCrossEntropyLossrc   )r   rf   r   SymbolicValueErrorrg   rh   r#   )	r   ri   rj   rk   rl   rm   label_smoothingrn   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 )NrJ      rK   r]   r   
ReduceMean)
keepdims_irP   	ReduceSumzMbinary_cross_entropy_with_logits with reduction other than none, mean, or sum)r#   rS   r(   opset9sigmoidlogsubr   _is_nonenegaddmulrf   _onnx_unsupported)r   rA   rj   rk   
pos_weightrl   rD   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 )NrX   r    r!   Celu)alpha_f)r   rf   r   r<   r=   r>   DOUBLEr#   r$   r%   FLOAT)r   ri   alphaoutr*   r*   r+   r      s   r   zaten::argmaxdimkeepdimc                 C     t | |||dS )NArgMaxr   _argmin_argmax_helperr   rA   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   ri   exponentr*   r*   r+   r   #     r   zaten::gec                 C  r   )NGreaterOrEqualr   r@   r*   r*   r+   r   (  r   r   zaten::lec                 C  r   )NLessOrEqualr   r@   r*   r*   r+   r   -  r   r   zaten::unfoldc           $   	   C  s  t |d}t |d}t |st |st| ||||S t ||}|d u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 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]   rJ   r   rK   rx   Ranger    r!   MinLoop)n_blocksGatherrP   Slice	Transpose)perm_iConcataxis_i)r   rx   rP         Unfoldzinput size not accessible)r   rf   	_is_valuer|   r   _get_tensor_dim_sizer#   rS   r(   _size_helper_get_tensor_ranklistrangeappendpopr$   r%   r1   r	   add_op_with_blocksblockr   _add_input_to_block_unsqueeze_helper_add_output_to_blockrg   r   _squeeze_helper_unimplemented)$r   rA   	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   2  st   







"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   rJ   rM   rK   z	ij,jk->ikzprim::ListConstruct)r   r   r   r   ru   r   lenr|   permuter#   _slice_helperrS   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   r8   )
r   r   rA   rC   rD   rE   rF   rG   rH   rI   )r   r   rA   rC   r   rC   r   rG   )*
__future__r   	functoolsr   rS   torch._Cr   r$   
torch.onnxr   r   r   r   r|   r   torch.onnx._internalr	   r
   __all__partialonnx_symbolic_onnx_symbolicr4   
parse_argsr   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   sl   


 .+		I