a
    dp                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlm  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 d dlmZmZmZ g dZe jejdd	Zd
d ZedejejdddZ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ddddejdejdddZ"ededdddddejdejdddZ#eded ej$j%j&j'd!d"d#gd$ed%ed&ej$j%j&j(d'd"d#gd$ed(ed)ej$j%j&j)d*d"d#gd$ed+ed,ej$j%j&j'd!d-d#gd$ed.ed/ej$j%j&j(d'd-d#gd$ed0ed1ej$j%j&j)d*d-d#gd$eje*ee+e,d2d3d4Z-ed5ed6ej$j%j&j'gd$ed7ed8ej$j%j&j(gd$ed9ed:ej$j%j&j)gd$ejd;d< Z.ed=ed>d*d?gd$ed@edAdBd?gd$edCedDdEd?gd$edFedGd*dHgd$edIedJdBdHgd$edKedLdEdHgd$ejdMdN Z/edOejejddPdQZ0ejdejddRdSZ1edTejejddUdVZ2edWeddXejejddYdZZ3ed[ejejdd\d]Z4ed^eddddddddd	ejejdd_d`Z5edaedddddejdejddddeZ6edfejejddgdhZ7ediejejddjdkZ8edlejejddmdnZ9edoejejddpdqZ:edreddsdsdsejejddtduZ;edvejejddwdxZ<edyejejddzd{Z=ed|ejejdd}d~Z>edejejdddZ?edejejdddZ@edejejdddZAedejejdddZBedejejdddZCedejejdddZDededdddsddejejdddZEedejejdddZFedejejdddZGedejejdddZHededdddejejejIe+ejIejIejIdddZJdS )    N)Callable)_C)
_constants_type_utilserrorssymbolic_helpersymbolic_opset9)GLOBALS)	_beartype	jit_utilsregistration)
dequantizedivembedding_bagfake_quantize_per_tensor_affineflipfmodisfiniteisinf
nan_to_numquantize_per_tensorquantized_add_reluquantized_addquantized_catquantized_conv1d_reluquantized_conv2d_reluquantized_conv2dquantized_group_normquantized_hardswishquantized_instance_normquantized_layer_normquantized_leaky_reluquantized_linearquantized_mulquantized_sigmoidslicesorttopk
   )Zopsetc                     s    fdd}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                    s   |  i S N )fnargskwargsr*   d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/onnx/symbolic_opset10.py_applyC   s    z_apply_params.<locals>._applyr*   )r-   r.   r0   r*   r,   r/   _apply_params@   s    r1   z	aten::divgc                 G   s2   t |dkrt| ||S t| ||g|R  S d S Nr   )lenopset9true_divide_div_rounding_mode)r3   selfotherr-   r*   r*   r/   r   I   s    r   vsc                 C   s(   |dkrt | ||S t| |||S d S )Nfloor)_floor_divider6   r8   )r3   r9   r:   Zrounding_moder*   r*   r/   r8   R   s    r8   zaten::_floor_dividec                 C   s   t |st |r.t| ||}| d|S | d||}| jdtjdtjdd}| d| d||| d||}| jd	||dd
}| d|| d| d||}| jdtjdtjdd}	| d||	}
| d||
|S d S )NZFloorDivConstantr   dtypeZvalue_tZXorZLessModZfmod_iAndNotZEqual   SubWhere)r   _is_fpr6   r7   optorchtensorint64)r3   r9   r:   outr   ZzeronegativemodZ
fixup_maskZonefixupr*   r*   r/   r>   [   s    " r>   z
aten::sortinonec                 C   s   t j| ||||dS )N)	decendingrP   )r   Z_sort_helper)r3   r9   dimrV   rP   r*   r*   r/   r&   q   s    r&   z
aten::topkc              	   C   s   t j| ||||||dS )N)largestsortedrP   )r   Z_topk_helper)r3   r9   krW   rX   rY   rP   r*   r*   r/   r'   x   s    r'   zaten::max_pool1dZ
max_pool1drH   F)return_indices)Zdecoratezaten::max_pool2dZ
max_pool2d   zaten::max_pool3dZ
max_pool3d   zaten::max_pool1d_with_indicesZmax_pool1d_with_indicesTzaten::max_pool2d_with_indicesZmax_pool2d_with_indiceszaten::max_pool3d_with_indicesZmax_pool3d_with_indices)nametuple_fnndimsr[   c              	      s<   t ddddddt dddddd fdd}|S )NTFr;   isrT   c                    s   |s|}||d ||d}t |dhkrD||d< r| jd|fddi|\}}	| jd|ddd t D d	d t D d
\}
}tj| |dd t D ddd}t| |	|}	||	fS | jd|fddi|}|S d S )Nr\   )kernel_shape_iZpads_i	strides_iZceil_mode_irH   Zdilations_iZMaxPooloutputsc                 S   s   g | ]}d qS rH   r*   .0_r*   r*   r/   
<listcomp>       z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>c                 S   s   g | ]}d qS re   r*   rf   r*   r*   r/   ri      rj   )rd   rb   rc   c                 S   s   g | ]}d | qS )r\   r*   )rg   rT   r*   r*   r/   ri      rj   r   )axesstartsends)setrL   ranger   _slice_helperr6   sub)r3   inputZkernel_sizestridepaddingdilationZ	ceil_moder.   rindicesrh   Zflattened_indicesr<   r`   r[   r_   r*   r/   symbolic_fn   s:    

z_max_pool.<locals>.symbolic_fn)r   quantized_args
parse_args)r^   r_   r`   r[   ry   r*   rx   r/   	_max_pool   s    ;/r|   zaten::avg_pool1dZ
avg_pool1dzaten::avg_pool2dZ
avg_pool2dzaten::avg_pool3dZ
avg_pool3dc                 C   s   t | |S r)   )r6   	_avg_pool)r^   r_   r*   r*   r/   r}      s    r}   zaten::upsample_nearest1dZupsample_nearest1dZnearestzaten::upsample_nearest2dZupsample_nearest2d   zaten::upsample_nearest3dZupsample_nearest3d   zaten::upsample_linear1dZupsample_linear1dlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dc                    s(   t dddtj fdd}|S )NTFc                    sb   t | |\}}t  t |}|r8t d|S |d u rPt | || }| jd||dS )Nzalign_corners == TrueResizeZmode_s)r   Z_get_interpolate_attributesZ_interpolate_warning_maybe_get_scalarZ_unimplementedZ_interpolate_size_to_scalesrL   )r3   rr   Zoutput_sizer-   scalesalign_cornersrW   interpolate_moder^   r*   r/   ry      s    

z!_interpolate.<locals>.symbolic_fn)r   rz   r
   beartype)r^   rW   r   ry   r*   r   r/   _interpolate  s    r   zaten::__interpolatec           	      C   s*   t | |||||\}}| jd|||dS )Nr   r   )r   Z _interpolate_get_scales_and_moderL   )	r3   rr   sizeZscale_factormoder   Zrecompute_scale_factorZ	antialiasr   r*   r*   r/   __interpolate3  s    r   c                 C   sz  |rTt | |dg}t | |dg}t|trB| jdt|d}t | |dg}nt|t|kshJ t|t|ks|J |d u st|t|ksJ t|dkr|d dkr|d tj	kr|d u st|dkr|d dkr|S |d tj	krtj	|d< | jdt|d}| jdt|d}| jdt|d}|d u rR| d||||S | jdt|d}| d|||||S )Nr   r@   rC   rH   Slice)
r   _unsqueeze_helper
isinstanceintrL   rM   rN   r5   r   	INT64_MAX)r3   rr   rk   rl   rm   stepsdynamic_slicer*   r*   r/   _sliceE  s>    







r   zaten::slicec              	   G   s  t |dkr|\}}}}n(t |dkr6|\}}}d}ntd||  dko`t| tj}|  dkot| tj}|  dk}	|  dk}
t	
|d}|s|	rt|ts|s|
rt|ts"|  dkr"d}|r| jd	tdd
}|rf| jd	ttjd
}nD|r,dn
t	
|dg}|rFtjn
t	
|dg}t	
|dg}d}t	j| |||||g|dS )Nr~   r]   r   zUnknown aten::slice signaturezprim::Constantzonnx::ConstantrT   Tr@   rC   F)rk   rl   rm   r   r   )r5   r   SymbolicValueErrornodekindr   typer   ZNoneTyper   Z
_parse_argr   rL   rM   rN   r   r   rp   )r3   r9   r-   rW   startendstepZis_start_noneZis_end_noneZis_start_onnx_constZis_end_onnx_constr   r*   r*   r/   r%   k  sd    




r%   z
aten::flipra   c              	   C   s8   t j| ||dgt| tj gt| dgt| dS )N)rk   rl   rm   r   )r   rp   r5   r   r   )r3   rr   dimsr*   r*   r/   r     s    r   z
aten::fmodc                 C   s   | j d||ddS )NrD   rH   rE   )rL   )r3   rr   r:   r*   r*   r/   r     s    r   zaten::embedding_bagc
                 C   s  |rt jrtdS |	d ur,|	dkr,tdtd t|d}
|
d ur|r^|
d }|}n8|
}|| jdt	
tjgdg}| jdg|R d	di}g }t|D ]8}t| t| |t	
dt	
|dg}t| t| |t	
dt	
|d dg}| jdt	
dgd}| d
||||}| d||}t|sn| d
||||}t| |dg}| d||}|dkrtj| |dgdd}n4|dkr| jd|dgdd}n| jd|dgdd}t| |dg}|| q| jdg|R d	di}|d d d fS tdS d S )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxzExport of embedding_bag with dynamic input/offsets shape is not supported in opset 10. Please use opset 11 or higher to export model for dynamic input shape.'rH   r@   rC   Concataxis_ir   ZGatherZMul)Zaxes_iZ
keepdims_iZ
ReduceMeanZ	ReduceMaxziembedding_bag with unknown shape of offsets for opset 10 is not supported. please use opset 11 or higher.)r	   Zexport_trainingr   Z_onnx_unsupportedRuntimeErrorwarningswarnZ_get_tensor_dim_sizerL   rM   rN   sysmaxsizero   r   r6   selectZ_is_noneZ_reducesum_helperappend)r3   Zembedding_matrixrw   offsetsZscale_grad_by_freqr   sparseZper_sample_weightsZinclude_last_offsetZpadding_idxZoffsets_dim_0Z
offset_lenZoffsets_extendedlist_rT   Zstart_end_Zaxes_Zindices_rowZ
embeddingsZper_sample_weights_rowoutputr*   r*   r/   r     st    





r   z%aten::fake_quantize_per_tensor_affine   c              	   C   s   ||fdkrt dddd| ||fdvrDtd| d| d	|t |}|d u rht dddd
| | j}|dkr| jd|tj	j
d}n| jd|tj	jd}| d| d|||||S )N)r   r   r   r(      z=Quantize range (0, 127) not supported, requires opset 13 Clip))r      )r   r   zLFor (quant_min, quant_max), ONNX allows only (0, 255) and (-128, 127). Got (z, )z Non-constant scale not supportedr   CastZto_iZDequantizeLinearZQuantizeLinear)r   Z _onnx_opset_unsupported_detailedr   r   r   floatdatarL   _C_onnxTensorProtoDataTypeZUINT8ZINT8)r3   inputsscale
zero_pointZ	quant_minZ	quant_maxr*   r*   r/   r   	  sH    

r   zaten::isinfc                 C   s   |  d| j d|tjjdS )NZIsInfr   r   )rL   r   r   ZDOUBLEr3   rr   r*   r*   r/   r   :  s    r   zaten::isfinitec                 C   s,   t | |}t| |}t| t| ||S r)   )r   r6   isnanZ__not_Z__or_)r3   rr   Zinf_nodeZnan_noder*   r*   r/   r   @  s    
r   zaten::quantize_per_tensorc                 C   sL   t |dd}| jd|t| d}| jd|tjjd}t 	| |||S )NrT   rB   r   r   )
r   Z
_get_constrL   r   JitScalarTypeZ	onnx_typer   r   FLOATquantize_helper)r3   rr   r   r   rB   r*   r*   r/   r   H  s    r   zaten::dequantizec                 C   s   t | |d S r4   r   dequantize_helperr   r*   r*   r/   r   T  s    r   zaten::nan_to_numfc                 C   s.  t |s|S tj| }|d u r*d}t| |}| d|| jdt	j
|g|dd|}t	|}|d u rt|j}t| t| |t| || jdt	dgd}	| d|	| jdt	j
|g|dd|}
|d u r|j}t| t| |
t| |
| jdt	dgd}| d|| jdt	j
|g|dd|
S )N        rJ   r@   rA   rC   r   )r   rK   r   r   
from_valuerB   r6   r   rL   rM   rN   finfomaxlogical_andr   gtZ
LongTensorminlt)r3   rr   nanZposinfZneginfZinput_dtypeZnan_condZ
nan_resultr   Zposinf_condZnan_posinf_resultZneginf_condr*   r*   r/   r   Z  sR    
	
r   zquantized::linearc                 C   sl   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t | |||S r)   )r   r   requantize_bias_helperr6   r   r   )r3   q_inputq_weightbiasop_scaleop_zero_pointrr   input_scalerh   weightweight_scaleq_biasr   r*   r*   r/   r"     s    r"   zquantized::addc                 C   sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r)   )r   r   r6   addr   r3   xyr   r   rh   r   r*   r*   r/   r     s    r   zquantized::add_reluc                 C   sR   t | |\}}}}t | |\}}}}t| ||}t| |}t | |||S r)   )r   r   r6   r   relur   r   r*   r*   r/   r     s
    r   zquantized::mulc                 C   sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r)   )r   r   r6   mulr   r   r*   r*   r/   r#     s    r#   zquantized::hardswishc                 C   s0   t | |\}}}}t| |}t | |||S r)   )r   r   r6   Z	hardswishr   r3   r   r   r   rh   r   r*   r*   r/   r     s    r   zquantized::sigmoidc                 C   s0   t | |\}}}}t| |}t | |||S r)   )r   r   r6   Zsigmoidr   r   r*   r*   r/   r$     s    r$   zquantized::leaky_reluc                 C   s4   t | |\}}}}t| |||}t | |||S r)   )r   r   r6   Z
leaky_relur   )r3   r   Znegative_slopeZinplacer   r   rh   r   r*   r*   r/   r!     s    r!   zquantized::layer_normc           
   	   C   s:   t | |\}}}}t| |||||d}	t | |	||S NF)r   r   r6   Z
layer_normr   )
r3   r   Znormalized_shaper   r   epsr   r   rh   r   r*   r*   r/   r      s    r    zquantized::group_normc           
   	   C   s:   t | |\}}}}t| |||||d}	t | |	||S r   )r   r   r6   Z
group_normr   )
r3   r   Z
num_groupsr   r   r   r   r   rh   r   r*   r*   r/   r     s    r   zquantized::instance_normc           
      C   s@   t | |\}}}}t| |||d d dd|d
}	t | |	||S )NFr   )r   r   r6   Zinstance_normr   )
r3   r   r   r   r   r   r   rr   rh   r   r*   r*   r/   r   
  s
    r   zquantized::conv1d_reluc
              
   C   s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r)   )r   r   r   r6   Zconv1dr   r   r3   r   r   r   rs   rt   ru   groupsr   r   rr   r   rh   r   r   r   r   r*   r*   r/   r     s    r   zquantized::conv2d_reluc
              
   C   s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r)   )r   r   r   r6   conv2dr   r   r   r*   r*   r/   r   8  s    r   zquantized::conv2dc
              
   C   st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r)   )r   r   r   r6   r   r   r   r*   r*   r/   r   Q  s    r   zquantized::cat)r3   q_inputsrW   r   r   returnc                    sD   t |} fdd|D } jdg|R d|i}t  |||S )Nc                    s   g | ]}t  |d  qS )r   r   )rg   rr   r2   r*   r/   ri   t  s   z!quantized_cat.<locals>.<listcomp>r   r   )r   Z_unpack_listrL   r   )r3   r   rW   r   r   Zunpacked_inputsZdequantizedZconcatenatedr*   r2   r/   r   i  s    


r   )N)N)NF)r   r   )K	functoolsr   r   typingr   rM   Ztorch._C._onnxr   Z_onnxr   Z
torch.onnxr   r   r   r   r   r6   Ztorch.onnx._globalsr	   Ztorch.onnx._internalr
   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicr1   r   ZGraphContextr   r{   r8   r>   r&   r'   nnmodulesutilsZ_singleZ_pairZ_triplestrr   boolr|   r}   r   r   r   r%   r   r   r   r   r   r   r   r   r   r"   r   r   r#   r   r$   r!   r    r   r   r   r   r   Valuer   r*   r*   r*   r/   <module>   s  
	


"5	  %1
T  .
6	
	
