U
    (d
                     @   s   d dl mZmZmZmZ d dlZd dlmZ ejddddZeje	dddd	Z
ejeee	 eee	  f ee ed
ddZdS )    )AnyListOptionalUnionN)nn)modulereturnc                 C   sj   i }|   D ]<\}}t| t|tjks8t|tjkrtjdd||< q| D ]\}}|| j|< qRd S )NFZinplace)Znamed_children_replace_relutyper   ZReLUZReLU6itemsZ_modules)r   Zreassignnamemodkeyvalue r   I/tmp/pip-unpacked-wheel-vx7f76es/torchvision/models/quantization/utils.pyr
      s    r
   )modelbackendr   c                 C   s   t dddd}|t jjjkr&td|t jj_|   |dkrbt jj	j
t jj	jt jj	jd| _n(|dkrt jj	j
t jj	jt jj	jd| _|   t jj	j| dd	 | | t jj	j| dd	 d S )
N      i+  z Quantized backend not supported Zfbgemm)Z
activationZweightZqnnpackTr	   )torchZrandbackendsZ	quantizedZsupported_enginesRuntimeErrorZengineevalaoquantizationZQConfigZdefault_observerZ#default_per_channel_weight_observerZqconfigZdefault_weight_observerZ
fuse_modelprepareconvert)r   r   Z_dummy_input_datar   r   r   quantize_model   s&    

 r   )r   modules_to_fuseis_qatkwargsc                 K   s4   |d kr| j }|rtjjjntjjj}|| |f|S )N)Ztrainingr   r   r   Zfuse_modules_qatZfuse_modules)r   r    r!   r"   methodr   r   r   _fuse_modules-   s    r$   )typingr   r   r   r   r   r   Moduler
   strr   boolr$   r   r   r   r   <module>   s      