U
    •Ê¹j¶  ã                   @   sš   d dl Z G dd„ de jjƒZG dd„ de jjƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ de jjƒZG dd„ de jjƒZ	e j
fdd„ZdS )é    Nc                       sL   e Zd Z‡ fdd„Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZ	‡  Z
S )	ÚMkldnnLinearc                    sf   t ƒ  ¡  |  d|j |¡¡ |jd k	r<|  d|j ¡ ¡ n&|  dtj|j d¡gtj	d� ¡ ¡ d S )NÚweightÚbiasr   ©Údtype)
ÚsuperÚ__init__Úregister_bufferr   Ú	to_mkldnnr   ÚtorchÚzerosÚsizeÚfloat©ÚselfÚdense_moduler   ©Ú	__class__© úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/utils/mkldnn.pyr      s    

þzMkldnnLinear.__init__c                 C   s   | j  ¡ | j ¡ | jfS ©N©r   Úto_denser   Útraining©r   r   r   r   Ú__getstate__   s    zMkldnnLinear.__getstate__c                 C   s*   |d   ¡ | _|d   ¡ | _|d | _d S ©Nr   é   é   ©r
   r   r   r   ©r   Ústater   r   r   Ú__setstate__   s    zMkldnnLinear.__setstate__c                 C   s>   |j r
|n| ¡ }tjj || j| j¡}|j r2|n| ¡ }|S r   )	Ú	is_mkldnnr
   r   Ú_CÚ_nnZmkldnn_linearr   r   r   ©r   ÚxZx_mkldnnZy_mkldnnÚyr   r   r   Úforward   s    zMkldnnLinear.forward©Ú__name__Ú
__module__Ú__qualname__r   r   ÚjitÚscript_methodr   r"   r)   Ú__classcell__r   r   r   r   r      s   

r   c                       sL   e Zd ZdZddddgZ‡ fdd„Zejjdd	„ ƒZ	ejjd
d„ ƒZ
‡  ZS )Ú_MkldnnConvNdz,Common base of MkldnnConv1d and MkldnnConv2dÚstrideÚpaddingÚdilationÚgroupsc                    sr   t ƒ  ¡  |j| _|j| _|j| _|j| _|jd k	rH|  d|j ¡ ¡ n&|  dt	j
|j d¡gt	jd� ¡ ¡ d S )Nr   r   r   )r   r   r2   r3   r4   r5   r   r	   r
   r   r   r   r   r   ©r   r   r   r   r   r   (   s    

þz_MkldnnConvNd.__init__c                 C   s   | j  ¡ | j ¡ | jfS r   r   r   r   r   r   r   :   s    z_MkldnnConvNd.__getstate__c              	   C   s"   t  || j| j| j| j| j| j¡S r   )r   Zmkldnn_convolutionr   r   r3   r2   r4   r5   ©r   r'   r   r   r   r)   >   s    ùz_MkldnnConvNd.forward)r+   r,   r-   Ú__doc__Ú__constants__r   r   r.   r/   r   r)   r0   r   r   r   r   r1   $   s   
r1   c                       s,   e Zd Z‡ fdd„Zejjdd„ ƒZ‡  ZS )ÚMkldnnConv1dc                    s$   t ƒ  |¡ |  d|j |¡¡ d S ©Nr   ©r   r   r	   r   r
   r   r   r   r   r   K   s    zMkldnnConv1d.__init__c                 C   s*   |d   ¡ | _|d   ¡ | _|d | _d S r   r   r    r   r   r   r"   P   s    zMkldnnConv1d.__setstate__©	r+   r,   r-   r   r   r.   r/   r"   r0   r   r   r   r   r:   J   s   r:   c                       s,   e Zd Z‡ fdd„Zejjdd„ ƒZ‡  ZS )ÚMkldnnConv2dc              
      s>   t ƒ  |¡ |  dtjj |j |¡| j	| j
| j| j¡¡ d S r;   )r   r   r	   r   r$   r%   Úmkldnn_reorder_conv2d_weightr   r
   r3   r2   r4   r5   r   r   r   r   r   X   s    
ûzMkldnnConv2d.__init__c                 C   sD   t jj |d  ¡ | j| j| j| j¡| _	|d  ¡ | _
|d | _d S r   )r   r$   r%   r?   r
   r3   r2   r4   r5   r   r   r   r    r   r   r   r"   b   s    
ûzMkldnnConv2d.__setstate__r=   r   r   r   r   r>   W   s   
r>   c                       s,   e Zd Z‡ fdd„Zejjdd„ ƒZ‡  ZS )ÚMkldnnConv3dc              
      s>   t ƒ  |¡ |  dtjj |j |¡| j	| j
| j| j¡¡ d S r;   )r   r   r	   r   r$   r%   Úmkldnn_reorder_conv3d_weightr   r
   r3   r2   r4   r5   r   r   r   r   r   n   s    
ûzMkldnnConv3d.__init__c                 C   sD   t jj |d  ¡ | j| j| j| j¡| _	|d  ¡ | _
|d | _d S r   )r   r$   r%   rA   r
   r3   r2   r4   r5   r   r   r   r    r   r   r   r"   x   s    
ûzMkldnnConv3d.__setstate__r=   r   r   r   r   r@   m   s   
r@   c                       sT   e Zd ZddgZ‡ fdd„Zejjdd„ ƒZejjdd„ ƒZ	ejjd	d
„ ƒZ
‡  ZS )ÚMkldnnBatchNormÚexponential_average_factorÚepsc                    s–   t ƒ  ¡  |jrt‚|jst‚|js(t‚|jd kr:d| _n|j| _|j| _|  	d|j
 ¡ ¡ |  	d|j ¡ ¡ |  	d|j ¡ ¡ |  	d|j ¡ ¡ d S )Ng        r   r   Úrunning_meanÚrunning_var)r   r   r   ÚAssertionErrorZtrack_running_statsZaffineZmomentumrC   rD   r	   r   r
   r   rE   rF   r6   r   r   r   r   ‡   s    




zMkldnnBatchNorm.__init__c                 C   s8   | j  ¡ }| j ¡ }| j ¡ }| j ¡ }||||| jfS r   )r   r   r   rE   rF   r   )r   r   r   rE   rF   r   r   r   r   ™   s
    



zMkldnnBatchNorm.__getstate__c                 C   sF   |d   ¡ | _|d   ¡ | _|d   ¡ | _|d   ¡ | _|d | _d S )Nr   r   r   é   é   )r
   r   r   rE   rF   r   r    r   r   r   r"   ¡   s
    zMkldnnBatchNorm.__setstate__c                 C   s&   t  || j| j| j| jd| j| jd¡	S )NF)r   Z
batch_normr   r   rE   rF   rC   rD   r7   r   r   r   r)   ©   s    ÷zMkldnnBatchNorm.forward)r+   r,   r-   r9   r   r   r.   r/   r   r"   r)   r0   r   r   r   r   rB   „   s   

rB   c                       sL   e Zd Z‡ fdd„Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZ	‡  Z
S )	ÚMkldnnPreluc                    s"   t ƒ  ¡  |  d|j |¡¡ d S r;   r<   r   r   r   r   r   ¸   s    
zMkldnnPrelu.__init__c                 C   s   | j  ¡ | jfS r   )r   r   r   r   r   r   r   r   ¼   s    zMkldnnPrelu.__getstate__c                 C   s   |d   ¡ | _|d | _d S )Nr   r   )r
   r   r   r    r   r   r   r"   À   s    zMkldnnPrelu.__setstate__c                 C   s6   |j r
|n| ¡ }t || j¡}|j r*|n| ¡ }|S r   )r#   r
   r   Zprelur   r   r&   r   r   r   r)   Å   s    zMkldnnPrelu.forwardr*   r   r   r   r   rJ   ·   s   

rJ   c                    s8   |t jt jfkstdƒ‚dd„ ‰ ‡ ‡fdd„‰ˆ| |ƒS )Nz.MKLDNN only support float or bfloat16 path nowc                 S   sž   t | tjjƒrt| |ƒS t | tjjƒr0t| |ƒS t | tjjƒrHt| |ƒS t | tjj	ƒr`t
| |ƒS t | tjjtjjfƒr~t| ƒS t | tjjƒr–t| |ƒS | S d S r   )Ú
isinstancer   ÚnnZLinearr   ZConv1dr:   ZConv2dr>   ZConv3dr@   ZBatchNorm2dZBatchNorm3drB   ZPReLUrJ   )ÚmÚdr   r   r   Úm_fnÐ   s    




zto_mkldnn.<locals>.m_fnc                    s2   ˆ | |ƒ}|   ¡ D ]\}}t||ˆ||ƒƒ q|S r   )Znamed_childrenÚsetattr)rM   rN   Znew_mÚnameZsub_m©rO   Úm_fn_recr   r   rS   â   s    
zto_mkldnn.<locals>.m_fn_rec)r   r   Zbfloat16rG   )Úmoduler   r   rR   r   r
   Ì   s    ÿr
   )r   r.   ZScriptModuler   r1   r:   r>   r@   rB   rJ   r   r
   r   r   r   r   Ú<module>   s    &3