o
    wZŽhÛ*  ã                   @   sl  d dl Z d dlZd dlmZmZ d dlmZmZ de	de
fdd„Zdejfd	d
„Zdejfdd„Zdejfdd„Zdejfdd„Ze ddddd¡dejfdd„ƒZdejfdd„Ze ddddddddd¡	dejfdd„ƒZe ddddddddd¡	dejfdd„ƒZe dddd¡dejfdd„ƒZe d¡dejfdd „ƒZe dddd!¡dejfd"d#„ƒZe d¡dejfd$d%„ƒZe dd!d!d!d!d!d!d!¡dejfd&d'„ƒZ			d7dejfd(d)„Ze dddddd¡dejfd*d+„ƒZe ddddddd,¡	d8dejfd-d.„ƒZdejfd/d0„Ze ddddd¡dejfd1d2„ƒZd9dejfd3d4„Z e d¡dejfd5d6„ƒZ!dS ):é    N)Úsymbolic_helperÚsymbolic_opset9)Ú	jit_utilsÚregistrationÚdomainÚversionc                 C   s†   t  d¡}t |¡}h d£}|D ]0\}}| › d|› }t |¡r@tj ||¡s@||v r8tjjd|› ||dd tj |||¡ qd S )Nztorch.onnx.symbolic_caffe2>   ÚsliceÚquantize_per_tensorÚ
dequantizeÚreluÚcatÚ
max_pool2dÚreshapeÚ_empty_affine_quantizedÚupsample_nearest2dÚ
avg_pool2dÚsigmoidz::zaten::T)Zcustom)	Ú	importlibÚimport_moduleÚinspectÚ
getmembersÚ
isfunctionr   ÚregistryZis_registered_opÚregister)r   r   ÚmoduleZquant_version_opsZ
aten_q_opsÚopÚfuncÚname© r   úI/var/www/auris/lib/python3.10/site-packages/torch/onnx/symbolic_caffe2.pyÚregister_quantized_ops
   s   

ÿÿ€ör    Úgc                 C   sH   |t  | ¡ d¡t  | ¡ d¡dœ}| jd|fi |¤Ž}t j |¡ |S )NÚY_scaleÚY_zero_point)Zaxes_iÚ	Y_scale_fÚY_zero_point_iz_caffe2::Int8Transpose)r   Ú	_node_getÚnoder   Ú_quantized_opsÚadd)r!   ÚinputÚaxesZ
quant_argsÚoutputr   r   r   Ú_permute_helper(   s   ýr-   c                 C   ó   g d¢}t | ||ƒS )N)r   é   é   é   ©r-   ©r!   r*   r+   r   r   r   Ú	nchw2nhwc3   ó   r4   c                 C   r.   )N)r   r0   r1   r/   r2   r3   r   r   r   Ú	nhwc2nchw8   r5   r6   c                 C   s   |   d||¡}tj |¡ |S ©Nz_caffe2::WeightPrepack©r   r   r(   r)   )r!   ÚweightÚbiasr,   r   r   r   Úlinear_prepack=   s   r;   ÚvÚfÚic                 C   s2   ||dœ}| j d|||fi |¤Ž}tj |¡ |S )N©r$   r%   z_caffe2::Int8FCr8   )r!   r*   r9   r:   ÚscaleÚ
zero_pointÚkwargsr,   r   r   r   ÚlinearF   s   þrC   c           	      C   s    |   d|||¡}tj |¡ |S r7   r8   )	r!   r*   r9   r:   ÚstrideÚpaddingÚdilationÚgroupsr,   r   r   r   Úconv_prepackQ   s   rH   Úisc
              	   C   óV   |  ¡ d dd… }
||| |||
d||	dœ}| jd|||fi |¤Ž}tj |¡ |S )NÚshaper1   r0   ÚNHWC©Ú	strides_iÚpads_iZdilations_iZgroup_iZ	kernels_iÚorder_sr$   r%   z_caffe2::Int8Conv©r'   r   r   r(   r)   ©r!   r*   r9   r:   rD   rE   rF   rG   r@   rA   Úkernel_sizerB   r,   r   r   r   Úconv2d\   ó   ø
rT   c
              	   C   rJ   )NrK   r1   r0   rL   rM   z_caffe2::Int8ConvRelurQ   rR   r   r   r   Úconv2d_reluy   rU   rV   c                 C   s0   ||dœ}| j d||fi |¤Ž}tj |¡ |S )Nr?   z_caffe2::Int8Addr8   )r!   Zinput_aZinput_br@   rA   rB   r,   r   r   r   r)   –   s   þr)   c                 C   s\   |t jvrt | |¡S t  | ¡ d¡t  | ¡ d¡dœ}| jd|fi |¤Ž}t j |¡ |S )Nr"   r#   r?   z_caffe2::Int8Relu)r   r(   Úopset9r   r&   r'   r   r)   )r!   r*   rB   r,   r   r   r   r   ¡   s   
þr   Útc                 C   s.   ||dœ}| j d|fi |¤Ž}tj |¡ |S )Nr?   z_caffe2::Int8Quantizer8   )r!   r*   r@   rA   ÚdtyperB   r,   r   r   r   r	   ®   s   þr	   c                 C   s   |   d|¡S )Nz_caffe2::Int8Dequantize)r   )r!   r*   r   r   r   r
   ¹   s   r
   c	           	      C   s   |S ©Nr   )	r!   r*   rK   r@   rA   rY   Z
pin_memoryZmemory_formatZlayoutr   r   r   r   ¾   s   r   c                 C   s‚   |t jvrt | |||¡S t  |d¡}|t  | ¡ d¡t  | ¡ d¡dœ}t| |ƒ}| jd|fi |¤Ž}t	| |ƒ}t j 
|¡ |S )NrI   r"   r#   )Zoutput_size_ir$   r%   z_caffe2::Int8ResizeNearest)r   r(   rW   r   Ú
_parse_argr&   r'   r4   r   r6   r)   )r!   r*   Zoutput_sizeZalign_cornersZscales_hZscales_wrB   r,   r   r   r   r   Í   s   
ý

r   c           	   	   C   sŠ   |t jvrt | ||||||¡S ||| |d dt  | ¡ d¡t  | ¡ d¡dœ}t| |ƒ}| jd|fi |¤Ž}t| |ƒ}t j 	|¡ |S )Nr   rL   r"   r#   ©rN   rO   Zkernel_irP   r$   r%   z_caffe2::Int8MaxPool)
r   r(   rW   r   r&   r'   r4   r   r6   r)   )	r!   r*   rS   rD   rE   rF   Ú	ceil_moderB   r,   r   r   r   r   å   s    

ÿú

r   Únonec           
   
   C   sŒ   |t jvrt | |||||||¡S ||| |d dt  | ¡ d¡t  | ¡ d¡dœ}t| |ƒ}| jd|fi |¤Ž}	t| |	ƒ}	t j 	|	¡ |	S )Nr   rL   r"   r#   r\   z_caffe2::Int8AveragePool)
r   r(   rW   r   r&   r'   r4   r   r6   r)   )
r!   r*   rS   rD   rE   r]   Zcount_include_padZdivisor_overriderB   r,   r   r   r   r     s.   
øú

r   c                 C   s`   |t jvrt | ||¡S t  | ¡ d¡t  | ¡ d¡dœ}| jd||fi |¤Ž}t j |¡ |S )Nr"   r#   r?   z_caffe2::Int8Reshape)r   r(   rW   r   r&   r'   r   r)   )r!   r*   rK   rB   r,   r   r   r   r   '  s   
þr   c                 C   sž   |t jvrt | |||||¡S |dkrtdƒ‚t  |d¡}t  |d¡}t  |d¡}|||t  | ¡ d¡t  | ¡ d¡dœ}| jd|fi |¤Ž}t j 	|¡ |S )Nr1   z2ONNX quantized slice export only works for step 1.r>   r"   r#   )Zstart_idx_iZ	end_idx_iZdim_ir$   r%   z_caffe2::Int8Slice)
r   r(   rW   r   ÚRuntimeErrorr[   r&   r'   r   r)   )r!   r*   ÚdimÚstartÚendÚsteprB   r,   r   r   r   r   4  s    
ûr   c           	      C   s„   t  |¡}|d }|t jvrt | ||¡S t  |d¡}|d  ¡ d |d  ¡ d dœ}| jdg|¢R d|i|¤Ž}t j |¡ |S )Nr   r>   r"   r#   r?   z_caffe2::Int8ConcatZaxis_i)	r   Z_unpack_listr(   rW   r   r[   r'   r   r)   )	r!   Ztensor_listr`   r@   rA   Ztensorsr*   rB   r,   r   r   r   r   K  s   

þr   c                 C   sL   |t jvrt | |¡S d}d}||dœ}| jd|fi |¤Ž}t j |¡ |S )Ng      p?r   r?   z_caffe2::Int8Sigmoid)r   r(   rW   r   r   r)   )r!   r*   Z	out_scalerA   rB   r,   r   r   r   r   [  s   
þr   )NNNrZ   )NN)"r   r   Z
torch.onnxr   r   rW   Ztorch.onnx._internalr   r   ÚstrÚintr    ZGraphContextr-   r4   r6   r;   Ú
parse_argsrC   rH   rT   rV   r)   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   sn   	

ÿÿÿ

ÿú
ÿÿ	øÿ$