o
    åÊi™  ã                   @   sX   d dl Z d dl mZ d dlmZ d dlmZmZmZ G dd„ deƒZG dd„ deƒZ	dS )	é    N)Únn)ÚModule)Ú	rearrangeÚpackÚunpackc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚGRUGatedResidualc                    s   t ƒ  ¡  t ||¡| _d S )N)ÚsuperÚ__init__r   ÚGRUCellÚgru)ÚselfÚdim©Ú	__class__© úO/home/ubuntu/.local/lib/python3.10/site-packages/hyper_connections/residuals.pyr	      s   
zGRUGatedResidual.__init__c                 C   s>   t |gdƒ\}}t |gdƒ\}}|  ||¡}t||dƒ\}|S )Nz* d)r   r   r   )r   ÚxÚresidualÚpacked_shapeÚ_Úoutputr   r   r   Úforward   s
   zGRUGatedResidual.forward©Ú__name__Ú
__module__Ú__qualname__r	   r   Ú__classcell__r   r   r   r   r      s    r   c                       s(   e Zd Z	d‡ fdd„	Zdd„ Z‡  ZS )ÚGatedResidualFc                    s(   t ƒ  ¡  t |d |r|nd¡| _d S )Né   é   )r   r	   r   ÚLinearÚto_learned_mix)r   r   Ú	fine_gater   r   r   r	      s   
zGatedResidual.__init__c                 C   s0   t ||gdƒ\}}|  |¡}| || ¡ ¡}|S )Nzb n *)r   r!   ÚlerpÚsigmoid)r   r   r   Úx_and_residualr   ÚmixÚoutr   r   r   r   "   s   
zGatedResidual.forward)Fr   r   r   r   r   r      s    ý	r   )
Útorchr   Útorch.nnr   Úeinopsr   r   r   r   r   r   r   r   r   Ú<module>   s    