o
    i                     @   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                       L   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                    sh   t    | d|j| |jd ur| d|j  d S | 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__ a/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/utils/mkldnn.pyr	      s   

zMkldnnLinear.__init__c                 C      | j  | j | jfS Nr   to_denser   trainingr   r   r   r   __getstate__      zMkldnnLinear.__getstate__c                 C   *   |d   | _|d   | _|d | _d S Nr         r   r   r   r   r   stater   r   r   __setstate__      zMkldnnLinear.__setstate__c                 C   sB   |j r|n| }tjj|| j| j}|j r|}|S | }|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                    st   t    |j| _|j| _|j| _|j| _|jd ur%| d|j  d S | dt	j
|jdgt	jd  d S )Nr   r   r   )r   r	   r7   r8   r9   r:   r   r
   r   r   r   r   r   r   r   r   r   r   r   r	   (   s   

z_MkldnnConvNd.__init__c                 C   r   r   r   r   r   r   r   r   :   r   z_MkldnnConvNd.__getstate__c              	   C   s"   t || j| j| j| j| j| jS r   )r   Zmkldnn_convolutionr   r   r8   r7   r9   r:   r   r,   r   r   r   r.   >   s   z_MkldnnConvNd.forward)r0   r1   r2   __doc____constants__r	   r   r3   r4   r   r.   r5   r   r   r   r   r6   $   s    
r6   c                       ,   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   r   r    r#   r$   r   r   r   r&   P   r'   zMkldnnConv1d.__setstate__	r0   r1   r2   r	   r   r3   r4   r&   r5   r   r   r   r   r@   J   s    r@   c                       r?   )MkldnnConv2dc              
      >   t  | | dtjj|j|| j	| j
| j| j d S rA   )r   r	   r
   r   r)   r*   mkldnn_reorder_conv2d_weightr   r   r8   r7   r9   r:   r   r   r   r   r	   X      

zMkldnnConv2d.__init__c                 C   D   t jj|d  | j| j| j| j| _	|d  | _
|d | _d S r    )r   r)   r*   rF   r   r8   r7   r9   r:   r   r   r   r$   r   r   r   r&   b      
zMkldnnConv2d.__setstate__rC   r   r   r   r   rD   W       
rD   c                       r?   )MkldnnConv3dc              
      rE   rA   )r   r	   r
   r   r)   r*   mkldnn_reorder_conv3d_weightr   r   r8   r7   r9   r:   r   r   r   r   r	   n   rG   zMkldnnConv3d.__init__c                 C   rH   r    )r   r)   r*   rL   r   r8   r7   r9   r:   r   r   r   r$   r   r   r   r&   x   rI   zMkldnnConv3d.__setstate__rC   r   r   r   r   rK   m   rJ   rK   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
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   r	   r   Ztrack_running_statsZaffineZmomentumrN   rO   r
   r   r   r   rP   rQ   r;   r   r   r   r	      s   




zMkldnnBatchNorm.__init__c                 C   s8   | j  }| j }| j }| j }||||| jfS r   )r   r   r   rP   rQ   r   )r   r   r   rP   rQ   r   r   r   r      s
   



zMkldnnBatchNorm.__getstate__c                 C   sF   |d   | _|d   | _|d   | _|d   | _|d | _d S )Nr   r!   r"         )r   r   r   rP   rQ   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   rP   rQ   rN   rO   r<   r   r   r   r.      s   zMkldnnBatchNorm.forward)r0   r1   r2   r>   r	   r   r3   r4   r   r&   r.   r5   r   r   r   r   rM      s    

rM   c                       r   )	MkldnnPreluc                    s"   t    | d|j| d S rA   rB   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   s:   |j r|n| }t|| j}|j r|}|S | }|S r   )r(   r   r   Zprelur   r   r+   r   r   r   r.      s   
zMkldnnPrelu.forwardr/   r   r   r   r   rT      s    

rT   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rt| |S t | tjjr$t| |S t | tjj	r0t
| |S t | tjjtjjfr?t| S t | tjjrKt| |S | S r   )
isinstancer   nnZLinearr   ZConv1dr@   ZConv2drD   ZConv3drK   ZBatchNorm2dZBatchNorm3drM   ZPReLUrT   )mdr   r   r   m_fn   s   




zto_mkldnn.<locals>.m_fnc                    s2    | |}|   D ]\}}t|||| q	|S r   )Znamed_childrensetattr)rW   rX   Znew_mnameZsub_mrY   m_fn_recr   r   r]      s   
zto_mkldnn.<locals>.m_fn_rec)r   r   Zbfloat16)moduler   r   r\   r   r      s   
r   )r   r3   ZScriptModuler   r6   r@   rD   rK   rM   rT   r   r   r   r   r   r   <module>   s     &3