o
    ß¥µi^	  ã                   @   sD   d dl Z d dlmZ G dd„ dejƒZdd„ Zedkr eƒ  dS dS )é    Nc                       s2   e Zd ZdZ			d	‡ fdd„	Zd
dd„Z‡  ZS )ÚEmbedderz$
    Composite embedding layer.
    Nçš™™™™™¹?Fc	           	         s¢   t t| ƒ ¡  t ||¡| _t ||¡| _|| jj_t ||¡| _	t ||¡| _
tj|d| _tj | jj¡ tj | jj¡ tj | j	j¡ tj | j
j¡ d S )N)Úp)Úsuperr   Ú__init__ÚnnÚ	EmbeddingÚtoken_embeddingÚpos_embeddingÚweightÚrequires_gradÚtype_embeddingÚturn_embeddingÚDropoutÚdropout_layerÚinitÚxavier_uniform_)	ÚselfÚ
hidden_dimÚnum_token_embeddingsÚnum_pos_embeddingsÚnum_type_embeddingsÚnum_turn_embeddingsÚpadding_idxÚdropoutÚpos_trainable©Ú	__class__© ú`/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/space/modules/embedder.pyr      s   	
zEmbedder.__init__c                 C   sZ   |   |¡}|d ur||  |¡7 }|d ur||  |¡7 }|d ur&||  |¡7 }|  |¡}|S )N)r	   r
   r   r   r   )r   Ú	token_inpÚpos_inpÚtype_inpÚturn_inpÚembedr   r   r   Úforward'   s   

zEmbedder.forward)Nr   F)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   Ú__classcell__r   r   r   r   r      s    
ør   c                  C   s²   dd l } tdddddƒ}t | j ddddg¡ d¡¡}t | j ddddg¡ d¡¡}t | j ddddg¡ d¡¡}t | j ddddg¡ d¡¡}|||||ƒ}t|ƒ d S )Nr   é
   é   é   Úint64)Únumpyr   ÚtorchÚtensorÚrandomÚrandintÚastypeÚprint)ÚnpÚmodelr    r!   r"   r#   Úoutr   r   r   Úmain3   s   ÿ   r9   Ú__main__)r0   Útorch.nnr   ÚModuler   r9   r&   r   r   r   r   Ú<module>   s   ,
ÿ