o
    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__ f/var/www/html/construction_image-detection-poc/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__name__
__module____qualname__r	   r   jitscript_methodr   r&   r1   __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	   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   r1   @   s   z_MkldnnConvNd.forward)r3   r4   r5   __doc____constants__r	   r   r6   r7   r   r1   r8   r   r   r   r   r9   %   s    
r9   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__	r3   r4   r5   r	   r   r6   r7   r&   r8   r   r   r   r   rD   L   s    rD   c                       rC   )MkldnnConv2dc              
      >   t  | | dtjj|j|| j	| j
| j| j d S rE   )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*   rJ   r   r;   r:   r<   r=   r   r   r   r$   r   r   r   r&   d      
zMkldnnConv2d.__setstate__rG   r   r   r   r   rH   Y       
rH   c                       rC   )MkldnnConv3dc              
      rI   rE   )r   r	   r
   r   r)   r*   mkldnn_reorder_conv3d_weightr   r   r;   r:   r<   r=   r   r   r   r   r	   p   rK   zMkldnnConv3d.__init__c                 C   rL   r    )r   r)   r*   rP   r   r;   r:   r<   r=   r   r   r   r$   r   r   r   r&   z   rM   zMkldnnConv3d.__setstate__rG   r   r   r   r   rO   o   rN   rO   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   track_running_statsaffinemomentumrR   rS   r
   r   r   r   rT   rU   r>   r   r   r   r	      s   




zMkldnnBatchNorm.__init__c                 C   s8   | j  }| j }| j }| j }||||| jfS r   )r   r   r   rT   rU   r   )r   r   r   rT   rU   r   r   r   r      s
   



zMkldnnBatchNorm.__getstate__c                 C   sF   |d   | _|d   | _|d   | _|d   | _|d | _d S )Nr   r!   r"         )r   r   r   rT   rU   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   rT   rU   rR   rS   r@   r   r   r   r1      s   zMkldnnBatchNorm.forward)r3   r4   r5   rB   r	   r   r6   r7   r   r&   r1   r8   r   r   r   r   rQ      s    

rQ   c                       r   )	MkldnnPreluc                    s"   t    | d|j| d S rE   rF   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   r1      s   
zMkldnnPrelu.forwardr2   r   r   r   r   r\      s    

r\   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   nnLinearr   Conv1drD   Conv2drH   Conv3drO   BatchNorm2dBatchNorm3drQ   PReLUr\   )mdr   r   r   m_fn   s   




zto_mkldnn.<locals>.m_fnc                    s2    | |}|   D ]\}}t|||| q	|S r   )named_childrensetattr)rg   rh   new_mnamesub_mri   m_fn_recr   r   rp      s   
zto_mkldnn.<locals>.m_fn_rec)r   r   bfloat16half)moduler   r   ro   r   r      s   
r   )r   r6   ScriptModuler   r9   rD   rH   rO   rQ   r\   r   r   r   r   r   r   <module>   s    '3