U
    9%e                     @   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/Darija-Ai-API/env/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rt| |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