a
    8Sic'  ã                   @   sÎ  d dl Z d dlmZmZ d dlmZ d dlmZ d dlmZ e	e
dœdd„Zd	d
„ Zdd„ Zdd„ Zdd„ Ze ddddd¡dd„ ƒZdd„ Ze ddddddddd¡	dd„ ƒZe ddddddddd¡	dd„ ƒZe dddd¡dd„ ƒZe d¡dd „ ƒZe dddd!¡d"d#„ ƒZe d¡d$d%„ ƒZe dd!d!d!d!d!d!d!¡d&d'„ ƒZd7d(d)„Ze dddddd¡d*d+„ ƒZe ddddddd,¡d8d-d.„ƒZd/d0„ Ze ddddd¡d1d2„ ƒZd9d3d4„Ze d¡d5d6„ ƒZ dS ):é    N)Ú
getmembersÚ
isfunction)Úsymbolic_helper)Úsymbolic_opset9)Úsymbolic_registry)ÚdomainÚversionc                 C   sž   t  d|¡ t d¡}|t jd< tt jd ƒ}|D ]f}t|d ƒr2t  |d | |¡s2g d¢}|d |v r€t  |d |d d|¡ t  |d |d | |¡ q2d S )NÚ ztorch.onnx.symbolic_caffe2Úcaffe2é   r   )ÚreluÚ_empty_affine_quantizedÚ
dequantizeÚquantize_per_tensorÚupsample_nearest2dÚ
avg_pool2dÚreshapeÚsliceÚcatÚ
max_pool2dÚsigmoid)	r   Úregister_versionÚ	importlibÚimport_moduleZ_symbolic_versionsr   r   Úis_registered_opÚregister_op)r   r   ÚmoduleZquant_version_opsÚopZ
aten_q_ops© r   úV/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/onnx/symbolic_caffe2.pyÚregister_quantized_ops	   s    


ÿr    c                 C   s@   ||  ¡ d |  ¡ 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©Únoder   r   Ú_quantized_opsÚadd)ÚgÚ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   r   Ú	nchw2nhwc1   s    r3   c                 C   s   g d¢}t | ||ƒS )N)r   r0   r   r/   r1   r2   r   r   r   Ú	nhwc2nchw6   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   ÚlinearD   s    þrA   c           	      C   s    |   d|||¡}tj |¡ |S r5   r6   )	r*   r+   r7   r8   ÚstrideÚpaddingÚdilationÚgroupsr-   r   r   r   Úconv_prepackO   s    rF   Úisc
              	   C   sV   |  ¡ d dd… }
||| |||
d||	dœ}| jd|||fi |¤Ž}tj |¡ |S )NÚshaper   r0   ÚNHWC©Ú	strides_iÚpads_iÚdilations_iÚgroup_iZ	kernels_iÚorder_sr$   r%   z_caffe2::Int8Convr&   ©r*   r+   r7   r8   rB   rC   rD   rE   r>   r?   Úkernel_sizer@   r-   r   r   r   Úconv2dX   s    ø
rR   c
              	   C   sV   |  ¡ d dd… }
||| |||
d||	dœ}| jd|||fi |¤Ž}tj |¡ |S )NrH   r   r0   rI   rJ   z_caffe2::Int8ConvRelur&   rP   r   r   r   Úconv2d_relul   s    ø
rS   c                 C   s0   ||dœ}| j d||fi |¤Ž}tj |¡ |S )Nr=   z_caffe2::Int8Addr6   )r*   Úinput_aÚinput_br>   r?   r@   r-   r   r   r   r)   €   s    þr)   c                 C   sT   |t jvrt | |¡S | ¡ d | ¡ 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   ‹   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?   rX   Ú
pin_memoryÚmemory_formatÚlayoutr   r   r   r   ¨   s    r   c                 C   sz   |t jvrt | |||¡S t  |d¡}|| ¡ d | ¡ d dœ}t| |ƒ}| jd|fi |¤Ž}t| |ƒ}t j 	|¡ |S )NrG   r!   r"   )Zoutput_size_ir$   r%   z_caffe2::Int8ResizeNearest)
r   r(   rV   r   Ú
_parse_argr'   r3   r   r4   r)   )r*   r+   Úoutput_sizeÚalign_cornersZscales_hZscales_wr@   r-   r   r   r   r   ¯   s    


ý

r   c           	   	   C   s‚   |t jvr t | ||||||¡S ||| |d d| ¡ d | ¡ d dœ}t| |ƒ}| jd|fi |¤Ž}t| |ƒ}t j |¡ |S )Nr   rI   r!   r"   ©rK   rL   Úkernel_irO   r$   r%   z_caffe2::Int8MaxPool)	r   r(   rV   r   r'   r3   r   r4   r)   )	r*   r+   rQ   rB   rC   rD   Ú	ceil_moder@   r-   r   r   r   r   Â   s     
ÿ

ú

r   Únonec           
   
   C   s„   |t jvr"t | |||||||¡S ||| |d d| ¡ d | ¡ d dœ}t| |ƒ}| jd|fi |¤Ž}	t| |	ƒ}	t j |	¡ |	S )Nr   rI   r!   r"   r_   z_caffe2::Int8AveragePool)	r   r(   rV   r   r'   r3   r   r4   r)   )
r*   r+   rQ   rB   rC   ra   Úcount_include_padÚdivisor_overrider@   r-   r   r   r   r   ×   s.    
ø

ú

r   c                 C   sX   |t jvrt | ||¡S | ¡ d | ¡ d dœ}| jd||fi |¤Ž}t j |¡ |S )Nr!   r"   r=   z_caffe2::Int8Reshape)r   r(   rV   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¡}|||| ¡ d | ¡ d dœ}| jd|fi |¤Ž}t j |¡ |S )Nr   z2ONNX quantized slice export only works for step 1.r<   r!   r"   )Zstart_idx_iZ	end_idx_iÚdim_ir$   r%   z_caffe2::Int8Slice)	r   r(   rV   r   ÚRuntimeErrorr\   r'   r   r)   )r*   r+   ÚdimÚstartÚendÚstepr@   r-   r   r   r   r   	  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::Int8ConcatÚaxis_i)	r   Ú_unpack_listr(   rV   r   r\   r'   r   r)   )	r*   Útensor_listrg   r>   r?   Útensorsr+   r@   r-   r   r   r   r      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(   rV   r   r   r)   )r*   r+   Ú	out_scaler?   r@   r-   r   r   r   r   0  s    
þr   )NNN)N)NN)!r   Úinspectr   r   Ú
torch.onnxr   r   rV   r   ÚstrÚintr    r.   r3   r4   r9   Ú
parse_argsrA   rF   rR   rS   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   sN   	

	








 ÿ

	 ø$

