o
    iA?                     @  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   )Z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Zto_i)op_C_onnxTensorProtoDataTypeZINT64).0tensorr     j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/onnx/symbolic_opset12.py
<listcomp>5   s    z"_einsum_helper.<locals>.<listcomp>r"   ZEinsumZ
equation_sr#   )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   
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$   Z	onnx_typer1   r    inputotherr*   r*   r+   r   J   s   
r   r;   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Zvalue_tZdtypeZDropout   )Zoutputs)r   Zcheck_training_moder$   torchr(   rA   )r    r;   r>   r@   trmaskr*   r*   r+   &_dropout_returns_masked_input_and_maskZ   s   rL   zaten::dropoutfbc                 C  s   t | |||\}}|S r5   rL   )r    r;   r>   r@   Zmasked_r*   r*   r+   r   i   s   r   zaten::native_dropoutc                 C  s   t | |||S r5   rO   )r    r;   r>   r@   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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,   	r   zaten::nll_loss2dc                 C     t | |||||S r5   r   r    rZ   r[   r\   r]   r^   r*   r*   r+   r         r   zaten::nll_loss_ndc                 C  r`   r5   ra   rb   r*   r*   r+   r      rc   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 )NrQ   rR   rM   g        z2Unsupported: ONNX does not support label_smoothingZSoftmaxCrossEntropyLossrV   )r   rW   r   SymbolicValueErrorrX   rY   r$   )	r    rZ   r[   r\   r]   r^   Zlabel_smoothingr_   Zcelossr*   r*   r+   r      s6   	r   z&aten::binary_cross_entropy_with_logitsrQ   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 )NrD      rE   rQ   r   Z
ReduceMean)Z
keepdims_irG   Z	ReduceSumzMbinary_cross_entropy_with_logits with reduction other than none, mean, or sum)r$   rH   r(   opset9Zsigmoidlogsubr   Z_is_nonenegaddmulrW   Z_onnx_unsupported)r    r;   r[   r\   Z
pos_weightr]   r>   Zsig_xZ	log_sig_xZsub_1_xZsub_1_yZ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 )NrM   r"   r#   ZCelu)Zalpha_f)r   rW   r   r7   r8   r9   DOUBLEr$   r%   r&   FLOAT)r    rZ   alphaoutr*   r*   r+   r     s   r   zaten::argmaxdimkeepdimc                 C     t | |||dS )NZArgMaxr   Z_argmin_argmax_helperr    r;   rq   rr   r*   r*   r+   r        	r   zaten::argminc                 C  rs   )NZArgMinrt   ru   r*   r*   r+   r   $  rv   r   z	aten::powc                 C     |  d||S )NPowr$   )r    rZ   exponentr*   r*   r+   r   0     r   zaten::gec                 C  rw   )NZGreaterOrEqualry   r:   r*   r*   r+   r   6  r{   r   zaten::lec                 C  rw   )NZLessOrEqualry   r:   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 )NrQ   r   )Zdimension_iZsize_iZstep_irD   r   rE   re   Ranger"   r#   ZMinZLoop)Zn_blocksZGatherrG   SliceZ	Transpose)Zperm_iZConcatZaxis_i)r   re   rG         ZUnfoldzinput size not accessible)r   rW   Z	_is_valuerf   r   Zis_caffe2_aten_fallbackatZ_get_tensor_dim_sizer$   rH   r(   Z_size_helper_get_tensor_ranklistrangeappendpopr%   r&   r.   r   Zadd_op_with_blocksblockr
   Z_add_input_to_blockZ_unsqueeze_helperZ_add_output_to_blockrX   rl   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_contextrP   Z
loop_blockZblock_input_iterZcondstartsendsaxesstackZ	unsqueezeconcatZcond_outZloop_outputZ	transposeZ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 )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                   ,   g | ]}| d k r|   n| qS r   r*   r'   rQ   )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   ZShaper   )r   r   r   rD   rF   rE   z	ij,jk->ikzprim::ListConstruct)r   r   r   r   rd   r   lenrf   Zpermuter$   Z_slice_helperrH   r(   longZ_reshape_from_tensorsysmaxsizer   )r    Zinput_aZinput_br   r   rp   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_brl   r*   )r   r   r   r   r+   r     s   



r   )r    r!   r5   )
r    r!   r;   r=   r>   r?   r@   rA   rB   rC   )r    r!   r;   r=   rq   r=   rr   rA   )/
__future__r   	functoolsr   typingr   r   rH   Ztorch._Cr   r%   Z
torch.onnxr   r   r   r	   rf   r
   Ztorch.onnx._internalr   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicZbeartyper1   
parse_argsr   r   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s    
 .+		L