o
    @Ti2	                     @   sH   d dl Z d dlmZ ddlmZ G dd dejZG dd dejZdS )    N   )ConvNextBackbonec                       s4   e Zd Zd	dededef fddZdd Z  ZS )
AttentiveStatsPool   input_channelsoutput_channelsattention_channelsc              	      sb   t    ttj||ddt tj||ddtjdd| _t|d || _	t
|| _d S )Nr   )kernel_size   dim)super__init__nn
SequentialConv1dTanhSoftmaxattnLinearproj	LayerNormnorm)selfr   r   r   	__class__ S/home/ubuntu/.local/lib/python3.10/site-packages/linacodec/module/global_encoder.pyr   
   s   

zAttentiveStatsPool.__init__c                 C   sp   |  |}tj|| dd}tj||d  dd|d  }t|jddd}tj||gdd}| | |S )Nr
   r   g-C6?g     @)minmaxr   )r   torchsumsqrtclampcatr   r   )r   xalphamean	residualsstdr   r   r   forward   s   
zAttentiveStatsPool.forward)r   )__name__
__module____qualname__intr   r*   __classcell__r   r   r   r   r   	   s    r   c                       sZ   e Zd Z			ddededededed	ed
edef fddZedd Zdd Z  Z	S )GlobalEncoderFr   Tr   r   r   intermediate_dim
num_layers
skip_embedr   use_attn_poolc	           	         sj   t    t|||||d| _|rt|||d| _nttdt	dt
||t|| _|| _d S )N)r   r   r1   r2   r3   )r   r   r   r   )r   r   r   backboner   poolingr   r   AdaptiveAvgPool1dFlattenr   r   r   )	r   r   r   r   r1   r2   r3   r   r4   r   r   r   r   "   s&   



zGlobalEncoder.__init__c                 C   s   | j S )N)r   )r   r   r   r   
output_dimC   s   zGlobalEncoder.output_dimc                 C   s    |  |}|dd}| |S )Nr   r
   )r5   	transposer6   )r   r%   featuresr   r   r   r*   G   s   

zGlobalEncoder.forward)Fr   T)
r+   r,   r-   r.   boolr   propertyr9   r*   r/   r   r   r   r   r0   !   s0    	!
r0   )r    torch.nnr   convnextr   Moduler   r0   r   r   r   r   <module>   s
   