a
    ¢º”hÛ*  ã                   @   sb  d dl Z d dlZd dlmZmZ d dlmZmZ e	e
dœdd„Zejdœdd	„Zejdœd
d„Zejdœdd„Zejdœdd„Ze ddddd¡ejdœdd„ƒZejdœdd„Ze ddddddddd¡	ejdœdd„ƒZe ddddddddd¡	ejdœdd„ƒZe dddd¡ejdœdd„ƒZe d¡ejdœdd„ƒZe dddd ¡ejdœd!d"„ƒZe d¡ejdœd#d$„ƒZe dd d d d d d d ¡ejdœd%d&„ƒZd6ejdœd'd(„Ze dddddd¡ejdœd)d*„ƒZe ddddddd+¡d7ejdœd,d-„ƒZejdœd.d/„Ze ddddd¡ejdœd0d1„ƒZd8ejdœd2d3„Z e d¡ejdœd4d5„ƒZ!dS )9é    N)Úsymbolic_helperÚsymbolic_opset9)Ú	jit_utilsÚregistration)ÚdomainÚversionc                 C   s†   t  d¡}t |¡}h d£}|D ]`\}}| › d|› }t |¡r tj ||¡s ||v rptjjd|› ||dd tj |||¡ q d S )Nztorch.onnx.symbolic_caffe2>   Ú
avg_pool2dÚcatÚupsample_nearest2dÚreluÚquantize_per_tensorÚ
max_pool2dÚ_empty_affine_quantizedÚsigmoidÚ
dequantizeÚreshapeÚslicez::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   úH/var/www/auris/lib/python3.9/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   s   g d¢}t | ||ƒS )N)r   é   é   é   ©r-   ©r!   r*   r+   r   r   r   Ú	nchw2nhwc3   s    r3   c                 C   s   g d¢}t | ||ƒS )N)r   r/   r0   r.   r1   r2   r   r   r   Ú	nhwc2nchw8   s    r4   c                 C   s   |   d||¡}tj |¡ |S ©Nz_caffe2::WeightPrepack©r   r   r(   r)   )r!   ÚweightÚbiasr,   r   r   r   Úlinear_prepack=   s    r9   ÚvÚfÚic                 C   s2   ||dœ}| j d|||fi |¤Ž}tj |¡ |S )N©r$   r%   z_caffe2::Int8FCr6   )r!   r*   r7   r8   ÚscaleÚ
zero_pointÚkwargsr,   r   r   r   ÚlinearF   s    þrA   c           	      C   s    |   d|||¡}tj |¡ |S r5   r6   )	r!   r*   r7   r8   ÚstrideÚpaddingÚdilationÚgroupsr,   r   r   r   Úconv_prepackQ   s    rF   Úisc
              	   C   sV   |  ¡ d dd… }
||| |||
d||	dœ}| jd|||fi |¤Ž}tj |¡ |S )NÚshaper0   r/   ÚNHWC©Ú	strides_iÚpads_iZdilations_iZgroup_iZ	kernels_iÚorder_sr$   r%   z_caffe2::Int8Conv©r'   r   r   r(   r)   ©r!   r*   r7   r8   rB   rC   rD   rE   r>   r?   Úkernel_sizer@   r,   r   r   r   Úconv2d\   s    ø
rQ   c
              	   C   sV   |  ¡ d dd… }
||| |||
d||	dœ}| jd|||fi |¤Ž}tj |¡ |S )NrH   r0   r/   rI   rJ   z_caffe2::Int8ConvRelurN   rO   r   r   r   Úconv2d_reluy   s    ø
rR   c                 C   s0   ||dœ}| j d||fi |¤Ž}tj |¡ |S )Nr=   z_caffe2::Int8Addr6   )r!   Zinput_aZinput_br>   r?   r@   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*   r@   r,   r   r   r   r   ¡   s    
þr   Útc                 C   s.   ||dœ}| j d|fi |¤Ž}tj |¡ |S )Nr=   z_caffe2::Int8Quantizer6   )r!   r*   r>   r?   Údtyper@   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*   rH   r>   r?   rU   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 )NrG   r"   r#   )Zoutput_size_ir$   r%   z_caffe2::Int8ResizeNearest)r   r(   rS   r
   Ú
_parse_argr&   r'   r3   r   r4   r)   )r!   r*   Zoutput_sizeZalign_cornersZscales_hZscales_wr@   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   rI   r"   r#   ©rK   rL   Zkernel_irM   r$   r%   z_caffe2::Int8MaxPool)
r   r(   rS   r   r&   r'   r3   r   r4   r)   )	r!   r*   rP   rB   rC   rD   Ú	ceil_moder@   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   rI   r"   r#   rW   z_caffe2::Int8AveragePool)
r   r(   rS   r   r&   r'   r3   r   r4   r)   )
r!   r*   rP   rB   rC   rX   Zcount_include_padZdivisor_overrider@   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(   rS   r   r&   r'   r   r)   )r!   r*   rH   r@   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 )Nr0   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(   rS   r   ÚRuntimeErrorrV   r&   r'   r   r)   )r!   r*   ÚdimÚstartÚendÚstepr@   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(   rS   r	   rV   r'   r   r)   )	r!   Ztensor_listr[   r>   r?   Ztensorsr*   r@   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(   rS   r   r   r)   )r!   r*   Z	out_scaler?   r@   r,   r   r   r   r   [  s    
þr   )NNN)N)NN)"r   r   Z
torch.onnxr   r   rS   Ztorch.onnx._internalr   r   ÚstrÚintr    ZGraphContextr-   r3   r4   r9   Ú
parse_argsrA   rF   rQ   rR   r)   r   r   r   r   r
   r   r   r   r   r	   r   r   r   r   r   Ú<module>   sb   	ÿÿÿ

ÿ   úÿÿ	 øÿ$