o
    *j                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 e j
eZe	de j
ede j
edgd	ZG d
d deZG dd deZG dd dejZdddZdS )    N)nn)Function)
functional)loadfusedzfused_bias_act.cppzfused_bias_act_kernel.cu)sourcesc                   @   $   e Zd Zedd Zedd ZdS )FusedLeakyReLUFunctionBackwardc           
   	   C   s   |  | || _|| _|d}t|||dd||}dg}|jdkr-|ttd|j7 }|r:|	|
 }	||	fS |}	||	fS )Nr            )save_for_backwardnegative_slopescale	new_emptyr   fused_bias_actndimlistrangesumdetach)
ctxgrad_outputoutbiasr   r   empty
grad_inputdim	grad_bias r   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/ops/human_image_generation/fused_act.pyforward   s   


z&FusedLeakyReLUFunctionBackward.forwardc              	   C   s0   | j \}t|||dd| j| j}|d d d d fS )Nr
   r   )saved_tensorsr   r   r   r   )r   Zgradgrad_inputZgradgrad_biasr   Zgradgrad_outr   r   r    backward-   s   
z'FusedLeakyReLUFunctionBackward.backwardN__name__
__module____qualname__staticmethodr!   r#   r   r   r   r    r	      s
    
r	   c                   @   r   )FusedLeakyReLUFunctionc              	   C   sP   | d}|d u| _|d u r|}t|||dd||}| | || _|| _|S )Nr   r
   )r   r   r   r   r   r   r   )r   inputr   r   r   r   r   r   r   r    r!   9   s   


zFusedLeakyReLUFunction.forwardc                 C   s:   | j \}t||| j| j| j\}}| jsd }||d d fS N)r"   r	   applyr   r   r   )r   r   r   r   r   r   r   r    r#   J   s   zFusedLeakyReLUFunction.backwardNr$   r   r   r   r    r)   7   s
    
r)   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	FusedLeakyReLUT皙?;f?c                    s8   t    |rtt|| _nd | _|| _|| _d S r+   )	super__init__r   	ParametertorchZzerosr   r   r   )selfZchannelr   r   r   	__class__r   r    r1   Y   s   

zFusedLeakyReLU.__init__c                 C   s   t || j| j| jS r+   )fused_leaky_relur   r   r   )r4   r*   r   r   r    r!   e   s   zFusedLeakyReLU.forward)Tr.   r/   )r%   r&   r'   r1   r!   __classcell__r   r   r5   r    r-   W   s    r-   r.   r/   c                 C   sx   | j jdkr4|d ur+dg| j|j d  }tj| |jd|jd g|R   dd| S tj| dd| S t| |||S )Ncpur   r   r.   )r   )	Zdevicetyper   FZ
leaky_reluviewshaper)   r,   )r*   r   r   r   Zrest_dimr   r   r    r7   j   s   r7   )Nr.   r/   )osr3   r   Ztorch.autogradr   Ztorch.nnr   r;   Ztorch.utils.cpp_extensionr   pathdirname__file__module_pathjoinr   r	   r)   Moduler-   r7   r   r   r   r    <module>   s"    	$ 