a
    d?                  	   @   sp  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ejd	d
dZededddejdIejd	ddZededdejejd	ddZejejejje e!eejjeejj f dddZ"ededddejejd	ddZ#ededddejejd	ddZ$ed ejejd	d!d"Z%ed#ejejd	d$d%Z&ed&ejejd	d'd(Z'ed)ejejd	d*d+Z(ed,eddddd-ejejd	d.d/Z)ed0ejejd	d1d2Z*ed3edddejejejjejje!d4d5d6Z+ed7edddejejejjejje!d4d8d9Z,ed:ejejd	d;d<Z-ed=ejejd	d>d?Z.ed@ejejd	dAdBZ/edCedd-ddejejd	dDdEZ0edFedddddejdJejd	dGdHZ1dS )K    N)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gc                    sp   |st dt|d rT fdd|D } jd jdg|R d|itjjdS  jdg|R 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    d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/onnx/symbolic_opset12.py
<listcomp>3   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    
r/   zaten::einsumsvisc                 C   s   t |}t| ||S N)r   Z_unpack_listr/   )r    r-   Ztensor_listpathr.   r(   r(   r)   r   @   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_typer/   r    inputotherr(   r(   r)   r   H   s    
r   )r    r9   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'   bool)r    r9   r;   r<   trmaskr(   r(   r)   &_dropout_returns_masked_input_and_maskX   s    rH   zaten::dropoutfbc                 C   s   t | |||\}}|S r3   rH   )r    r9   r;   r<   Zmasked_r(   r(   r)   r   g   s    r   zaten::native_dropoutc                 C   s   t | |||S r3   rK   )r    r9   r;   r<   r(   r(   r)   r   o   s    r   zaten::nll_lossc                 C   sd   t |d}g d}|| }t |d}|  rJ| 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   v   s*    	r   zaten::nll_loss2dc                 C   s   t | |||||S r3   r   r    rV   rW   rX   rY   rZ   r(   r(   r)   r      s    r   zaten::nll_loss_ndc                 C   s   t | |||||S r3   r\   r]   r(   r(   r)   r      s    r   zaten::cross_entropy_lossc           	      C   s   t |d}g d}|| }t |d}|d urD|dkrDtd|t |d}|  rr| jd||||d}n| jd|||||d}|S )NrM   rN   rI   g        z2Unsupported: ONNX does not support label_smoothingZSoftmaxCrossEntropyLossrR   )r   rS   r   SymbolicValueErrorrT   rU   r#   )	r    rV   rW   rX   rY   rZ   Zlabel_smoothingr[   Zcelossr(   r(   r)   r      s4    	r   z&aten::binary_cross_entropy_with_logitsrM   c                 C   sF  | j dtdgd}t| |}t| |}t| ||}	t| ||}
t| |	}|d u sht|rt	| t
| t| ||t| |
|}n4t	| t
| t| t| |||t| |
|}|d urt|st| ||}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 )Nr>      r?   rM   r   Z
ReduceMean)Z
keepdims_irA   Z	ReduceSumzMbinary_cross_entropy_with_logits with reduction other than none, mean, or sum)r#   rC   r'   opset9Zsigmoidlogsubr   Z_is_nonenegaddmulrS   Z_onnx_unsupported)r    r9   rW   rX   Z
pos_weightrY   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 )NrI   r!   r"   ZCelu)Zalpha_f)r   rS   r   r5   r6   r7   ZDOUBLEr#   r$   r%   FLOAT)r    rV   alphaoutr(   r(   r)   r     s    r   zaten::argmaxr    r9   ZdimZkeepdimc                 C   s   t | |||dS )NZArgMaxr   Z_argmin_argmax_helperrj   r(   r(   r)   r     s    	r   zaten::argminc                 C   s   t | |||dS )NZArgMinrk   rj   r(   r(   r)   r   "  s    	r   z	aten::powc                 C   s   |  d||S )NPowr#   )r    rV   exponentr(   r(   r)   r   .  s    r   zaten::gec                 C   s   |  d||S )NZGreaterOrEqualrm   r8   r(   r(   r)   r   4  s    r   zaten::lec                 C   s   |  d||S )NZLessOrEqualrm   r8   r(   r(   r)   r   :  s    r   zaten::unfoldc           $   	   C   s  t |d}t |d}t |s>t |s>t| ||||S t  rZ| jd||||d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s$J 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 )NrM   r   )Zdimension_iZsize_iZstep_ir>   r   r?   r_   Ranger!   r"   ZMinZLoop)Zn_blocksZGatherrA   SliceZ	Transpose)Zperm_iZConcatZaxis_i)r   r_   rA         ZUnfoldzinput size not accessible)r   rS   Z	_is_valuer`   r   Zis_caffe2_aten_fallbackatZ_get_tensor_dim_sizer#   rC   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_blockrT   rf   Z_squeeze_helper_unimplemented)$r    r9   Z	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_lenZloopZloop_contextrL   Z
loop_blockZblock_input_iterZcondstartsendsaxesstackZ	unsqueezeconcatZcond_outZloop_outputZ	transposeZsqueezer(   r(   r)   r   @  sx    







"r   zaten::tensordotc                    s  |d urt dd t |  d u r2td|t |d u 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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                    s,   g | ]$}| d k r |   n| qS r   r(   r&   rM   )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 | ]}| vr|qS r(   r(   r   )r   r(   r)   r*         c                    s   g | ]}| vr|qS r(   r(   r   )r   r(   r)   r*     r   ZShaper   )r   r   r   r>   r@   r?   z	ij,jk->ikzprim::ListConstruct)r   rz   rt   r   r^   rv   lenr`   Zpermuter#   Z_slice_helperrC   r'   longZ_reshape_from_tensorsysmaxsizer   )r    Zinput_aZinput_br   r   ri   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_brf   r(   )r   r   r   r   r)   r     s    



r   )N)N)2	functoolsr   typingr   r   rC   Ztorch._Cr   r$   Z
torch.onnxr   r   r   r   r`   r	   Ztorch.onnx._internalr
   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicZbeartypeZGraphContextr/   
parse_argsr   r   Z_CValuefloatrD   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   s   
 .+		L