o
    wZŽhä  ã                   @   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/auris/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	   M   s   zMkldnnConv1d.__init__c                 C   r   r    r#   r$   r   r   r   r&   R   r'   zMkldnnConv1d.__setstate__©	r0   r1   r2   r	   r   r3   r4   r&   r5   r   r   r   r   r@   L   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	   Z   ó   

û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&   d   ó   
ûzMkldnnConv2d.__setstate__rC   r   r   r   r   rD   Y   ó    
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	   p   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&   z   rI   zMkldnnConv3d.__setstate__rC   r   r   r   r   rK   o   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                    s<   |t jt jt jfv sJ 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   Ú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bfloat16Zhalf)Ú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