o
    ´©iQ  ã                   @   s(   d dl Z d dlmZ G dd„ deƒZdS )é    N)ÚMultiHeadedAttentionSANMc                       s&   e Zd Z‡ fdd„Zddd„Z‡  ZS )Ú MultiHeadedAttentionSANMwithMaskc                    s   t ƒ j|i |¤Ž d S )N)ÚsuperÚ__init__)ÚselfÚargsÚkwargs©Ú	__class__© úd/home/ubuntu/.local/lib/python3.10/site-packages/funasr/models/ct_transformer_streaming/attention.pyr      s   z)MultiHeadedAttentionSANMwithMask.__init__Nc                 C   sb   |   |¡\}}}}|  ||d |¡}	|| jd  }t || dd¡¡}
|  ||
|d |¡}||	 S )Nr   g      à¿éþÿÿÿéÿÿÿÿé   )Úforward_qkvÚforward_fsmnÚd_kÚtorchÚmatmulÚ	transposeÚforward_attention)r   ÚxÚmaskÚmask_shfit_chunkÚmask_att_chunk_encoderÚq_hÚk_hÚv_hÚvÚfsmn_memoryÚscoresÚatt_outsr   r   r   Úforward   s   z(MultiHeadedAttentionSANMwithMask.forward)NN)Ú__name__Ú
__module__Ú__qualname__r   r"   Ú__classcell__r   r   r	   r   r   
   s    r   )r   Úfunasr.models.sanm.attentionr   r   r   r   r   r   Ú<module>   s   