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>   relu
max_pool2dcatquantize_per_tensor_empty_affine_quantizedreshape
dequantizesigmoidupsample_nearest2dslice
avg_pool2dz::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   V/var/www/html/assistant/venv/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   	

   	 $