o
    闦i*                     @   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>   catreluslicereshapesigmoid
avg_pool2d
dequantize
max_pool2dupsample_nearest2dquantize_per_tensor_empty_affine_quantizedz::zaten::T)custom)		importlibimport_moduleinspect
getmembers
isfunctionr   registryis_registered_opregister)r   r   modulequant_version_ops
aten_q_opsopfuncname r"   X/home/ubuntu/transcripts/venv/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)axes_i	Y_scale_fY_zero_point_iz_caffe2::Int8Transpose)r   	_node_getnoder   _quantized_opsadd)r%   inputaxes
quant_argsoutputr"   r"   r#   _permute_helper(   s   r3   c                 C      g d}t | ||S )N)r            r3   r%   r/   r0   r"   r"   r#   	nchw2nhwc3      r:   c                 C   r4   )N)r   r6   r7   r5   r8   r9   r"   r"   r#   	nhwc2nchw8   r;   r<   c                 C   s   |  d||}tj| |S Nz_caffe2::WeightPrepackr   r   r-   r.   )r%   weightbiasr2   r"   r"   r#   linear_prepack=   s   rA   vfic                 C   s2   ||d}| j d|||fi |}tj| |S )Nr)   r*   z_caffe2::Int8FCr>   )r%   r/   r?   r@   scale
zero_pointkwargsr2   r"   r"   r#   linearF   s   rI   c           	      C   s    |  d|||}tj| |S r=   r>   )	r%   r/   r?   r@   stridepaddingdilationgroupsr2   r"   r"   r#   conv_prepackQ   s   rN   isc
              	   C   V   |  d dd }
||| |||
d||	d}| jd|||fi |}tj| |S )Nshaper7   r6   NHWC	strides_ipads_idilations_igroup_i	kernels_iorder_sr)   r*   z_caffe2::Int8Convr,   r   r   r-   r.   r%   r/   r?   r@   rJ   rK   rL   rM   rF   rG   kernel_sizerH   r2   r"   r"   r#   conv2d\      
r]   c
              	   C   rP   )NrQ   r7   r6   rR   rS   z_caffe2::Int8ConvRelurZ   r[   r"   r"   r#   conv2d_reluy   r^   r_   c                 C   s0   ||d}| j d||fi |}tj| |S )NrE   z_caffe2::Int8Addr>   )r%   input_ainput_brF   rG   rH   r2   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'   rE   z_caffe2::Int8Relu)r   r-   opset9r	   r+   r,   r   r.   )r%   r/   rH   r2   r"   r"   r#   r	      s   
r	   tc                 C   s.   ||d}| j d|fi |}tj| |S )NrE   z_caffe2::Int8Quantizer>   )r%   r/   rF   rG   dtyperH   r2   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/   rQ   rF   rG   rd   
pin_memorymemory_format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 )NrO   r&   r'   )output_size_ir)   r*   z_caffe2::Int8ResizeNearest)r   r-   rb   r   
_parse_argr+   r,   r:   r   r<   r.   )r%   r/   output_sizealign_cornersscales_hscales_wrH   r2   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   rR   r&   r'   rT   rU   kernel_irY   r)   r*   z_caffe2::Int8MaxPool)
r   r-   rb   r   r+   r,   r:   r   r<   r.   )	r%   r/   r\   rJ   rK   rL   	ceil_moderH   r2   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   rR   r&   r'   ro   z_caffe2::Int8AveragePool)
r   r-   rb   r   r+   r,   r:   r   r<   r.   )
r%   r/   r\   rJ   rK   rq   count_include_paddivisor_overriderH   r2   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'   rE   z_caffe2::Int8Reshape)r   r-   rb   r   r+   r,   r   r.   )r%   r/   rQ   rH   r2   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 )Nr7   z2ONNX quantized slice export only works for step 1.rD   r&   r'   )start_idx_i	end_idx_idim_ir)   r*   z_caffe2::Int8Slice)
r   r-   rb   r
   RuntimeErrorrj   r+   r,   r   r.   )r%   r/   dimstartendsteprH   r2   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   rD   r&   r'   rE   z_caffe2::Int8Concataxis_i)	r   _unpack_listr-   rb   r   rj   r,   r   r.   )	r%   tensor_listry   rF   rG   tensorsr/   rH   r2   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   rE   z_caffe2::Int8Sigmoid)r   r-   rb   r   r   r.   )r%   r/   	out_scalerG   rH   r2   r"   r"   r#   r   [  s   
r   )NNNre   )NN)"r   r   
torch.onnxr   r   rb   torch.onnx._internalr   r   strintr$   GraphContextr3   r:   r<   rA   
parse_argsrI   rN   r]   r_   r.   r	   r   r   r   r   r   r   r   r
   r   r   r"   r"   r"   r#   <module>   sn   	




	$