a
    8Sic  ã                   @   s8   d dl Z d dlZddd„Zddd„Zdd„ Zd	d
„ ZdS )é    NFc              	   C   sN   | j s|j rJ dƒ‚t | ¡}t|j|j|j|j|j|j|j|ƒ\|_|_|S ©NzFusion only for eval!)	ÚtrainingÚcopyÚdeepcopyÚfuse_conv_bn_weightsÚweightÚbiasÚrunning_meanÚrunning_varÚeps)ÚconvÚbnÚ	transposeZ
fused_conv© r   úQ/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/nn/utils/fusion.pyÚfuse_conv_bn_eval   s    

ÿÿ
r   c           
      C   sÀ   |d u rt  |¡}|d u r$t  |¡}|d u r6t  |¡}t  || ¡}|rfddgdgt| jƒd   }	nddgdgt| jƒd   }	| ||  |	¡ } || | | | }t j | ¡t j |¡fS )Né   éÿÿÿÿé   )	ÚtorchÚ
zeros_likeÚ	ones_likeÚrsqrtÚlenÚshapeÚreshapeÚnnÚ	Parameter)
Zconv_wZconv_bÚbn_rmÚbn_rvÚbn_epsÚbn_wÚbn_br   Zbn_var_rsqrtr   r   r   r   r      s    


r   c                 C   sL   | j s|j rJ dƒ‚t | ¡}t|j|j|j|j|j|j|jƒ\|_|_|S r   )	r   r   r   Úfuse_linear_bn_weightsr   r   r	   r
   r   )Úlinearr   Zfused_linearr   r   r   Úfuse_linear_bn_eval#   s    
þr%   c           
      C   sZ   |d u rt  |¡}|t  || ¡ }| | d¡ }|| | | }	t j |¡t j |	¡fS )Nr   )r   r   r   Ú	unsqueezer   r   )
Zlinear_wZlinear_br   r   r    r!   r"   Zbn_scaleZfused_wZfused_br   r   r   r#   -   s    
r#   )F)F)r   r   r   r   r%   r#   r   r   r   r   Ú<module>   s
   



