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__© úT/sda-disk/www/egybert/egybert_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Ú_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