o
    i4                      @   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                       N   e Zd Zd fddZejjdd Zejjdd Zejjd	d
 Z	  Z
S )MkldnnLinearreturnNc                    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__ Q/home/ubuntu/Irodori-TTS/.venv/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_nnmkldnn_linearr   r   r   r   xx_mkldnny_mkldnnyr   r   r   forward   s   
zMkldnnLinear.forwardr   N__name__
__module____qualname__r
   r   jitscript_methodr   r'   r2   __classcell__r   r   r   r   r      s    

r   c                       sJ   e Zd ZdZg dZd 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groupsr   Nc                    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
   r<   r=   r>   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   mkldnn_convolutionr   r   r=   r<   r>   r?   r   r.   r   r   r   r2   @   s   z_MkldnnConvNd.forwardr3   )r5   r6   r7   __doc____constants__r
   r   r8   r9   r   r2   r:   r   r   r   r   r;   %   s    
r;   c                       .   e Zd Zd fddZejjdd Z  ZS )MkldnnConv1dr   Nc                    s$   t  | | d|j| d S Nr   r	   r
   r   r   r   r   r   r   r   r
   M   s   zMkldnnConv1d.__init__c                 C   r    r!   r$   r%   r   r   r   r'   R   r(   zMkldnnConv1d.__setstate__r3   	r5   r6   r7   r
   r   r8   r9   r'   r:   r   r   r   r   rF   L   s    rF   c                       rE   )MkldnnConv2dr   Nc              
      >   t  | | dtjj|j|| j	| j
| j| j d S rG   )r	   r
   r   r   r*   r+   mkldnn_reorder_conv2d_weightr   r   r=   r<   r>   r?   r   r   r   r   r
   Z      

zMkldnnConv2d.__init__c                 C   D   t jj|d  | j| j| j| j| _	|d  | _
|d | _d S r!   )r   r*   r+   rL   r   r=   r<   r>   r?   r   r   r   r%   r   r   r   r'   d      
zMkldnnConv2d.__setstate__r3   rI   r   r   r   r   rJ   Y       
rJ   c                       rE   )MkldnnConv3dr   Nc              
      rK   rG   )r	   r
   r   r   r*   r+   mkldnn_reorder_conv3d_weightr   r   r=   r<   r>   r?   r   r   r   r   r
   p   rM   zMkldnnConv3d.__init__c                 C   rN   r!   )r   r*   r+   rR   r   r=   r<   r>   r?   r   r   r   r%   r   r   r   r'   z   rO   zMkldnnConv3d.__setstate__r3   rI   r   r   r   r   rQ   o   rP   rQ   c                       sV   e Zd ZddgZd 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epsr   Nc                    s   t    |jrtd|jstd|jstd|jd u r#d| _n|j| _|j| _| 	d|j
  | 	d|j  | 	d|j  | 	d|j  d S )	Nz4Only support eval mode batchnorm for mkldnn path nowz9Only support track_running_stats=True for mkldnn path nowz,Only support affine=True for mkldnn path nowg        r   r   running_meanrunning_var)r	   r
   r   AssertionErrortrack_running_statsaffinemomentumrT   rU   r   r   r   r   rV   rW   r@   r   r   r   r
      s   

zMkldnnBatchNorm.__init__c                 C   s8   | j  }| j }| j }| j }||||| jfS r   )r   r   r   rV   rW   r   )r   r   r   rV   rW   r   r   r   r      s
   



zMkldnnBatchNorm.__getstate__c                 C   sF   |d   | _|d   | _|d   | _|d   | _|d | _d S )Nr   r"   r#         )r   r   r   rV   rW   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   
batch_normr   r   rV   rW   rT   rU   rB   r   r   r   r2      s   zMkldnnBatchNorm.forwardr3   )r5   r6   r7   rD   r
   r   r8   r9   r   r'   r2   r:   r   r   r   r   rS      s    

rS   c                       r   )MkldnnPrelur   Nc                    s"   t    | d|j| d S rG   rH   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   prelur   r   r-   r   r   r   r2      s   
zMkldnnPrelu.forwardr3   r4   r   r   r   r   r_      s    

r_   c                    s<   |t jt jt jfvrtddd   fdd| |S )Nz6MKLDNN only support float, bfloat16, and half 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   nnLinearr   Conv1drF   Conv2drJ   Conv3drQ   BatchNorm2dBatchNorm3drS   PReLUr_   )mdr   r   r   m_fn   s   




zto_mkldnn.<locals>.m_fnc                    s2    | |}|   D ]\}}t|||| q	|S r   )named_childrensetattr)rj   rk   new_mnamesub_mrl   m_fn_recr   r   rs      s   
zto_mkldnn.<locals>.m_fn_rec)r   r   bfloat16halfrX   )moduler   r   rr   r   r      s
   
r   )r   r8   ScriptModuler   r;   rF   rJ   rQ   rS   r_   r   r   r   r   r   r   <module>   s    '6