a
    .=icF                     @   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                    sj   t t|   | d|j| |jd ur@| d|j  n&| dtj|j	dgtj
d  d S )Nweightbiasr   dtype)superr   __init__register_bufferr   	to_mkldnnr   torchzerossizefloatselfdense_moduler   	__class__ c/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/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                       sH   e Zd ZdZg d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                    sv   t t|   |j| _|j| _|j| _|j| _|jd urL| d|j	  n&| dt
j|jdgt
jd	  d S )Nr   r   r   )r   r1   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 t| | | d|j| d S Nr   )r   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              
      sB   t t| | | dtjj|j	|| j
| j| j| j d S r;   )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              
      sB   t t| | | dtjj|j	|| j
| j| j| j d S r;   )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%   r@   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 t|   |jrJ |js"J |js,J |jd u r>d| _n|j| _|j| _| 	d|j
  | 	d|j  | 	d|j  | 	d|j  d S )Ng        r   r   running_meanrunning_var)r   rA   r   r   Ztrack_running_statsZaffineZmomentumrB   rC   r	   r   r
   r   rD   rE   r6   r   r   r   r      s    



zMkldnnBatchNorm.__init__c                 C   s8   | j  }| j }| j }| j }||||| jfS r   )r   r   r   rD   rE   r   )r   r   r   rD   rE   r   r   r   r      s
    



zMkldnnBatchNorm.__getstate__c                 C   sF   |d   | _|d   | _|d   | _|d   | _|d | _d S )Nr   r   r         )r
   r   r   rD   rE   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   rD   rE   rB   rC   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   rA      s   

rA   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 t|   | d|j| d S r;   )r   rH   r   r	   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   rH      s   

rH   c                    s8   |t jt jfv sJ 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s|t | tjjrt| S t | tjjrt| |S | S d S r   )
isinstancer   nnZLinearr   ZConv1dr:   ZConv2dr=   ZConv3dr?   ZBatchNorm2dZBatchNorm3drA   ZPReLUrH   )mdr   r   r   m_fn   s    




zto_mkldnn.<locals>.m_fnc                    s2    | |}|   D ]\}}t|||| q|S r   )Znamed_childrensetattr)rK   rL   Znew_mnameZsub_mrM   m_fn_recr   r   rQ      s    
zto_mkldnn.<locals>.m_fn_rec)r   r   Zbfloat16)moduler   r   rP   r   r
      s    r
   )r   r.   ZScriptModuler   r1   r:   r=   r?   rA   rH   r   r
   r   r   r   r   <module>   s    &3