o
    ß¥µiã	  ã                   @   s(   d dl Z d dlZG dd„ dejjƒZdS )é    Nc                       s.   e Zd Z‡ fdd„Zddd„Zdd„ Z‡  ZS )	ÚPromptSpellc                    sô   t t| ƒ ¡  || _|| _tj | j| j¡| _|| _	| j	dkrKtjj
| j| jdddd| _tj tj d| j | j¡tj ¡ tj | j| j¡¡| _d S | j	dkrltj tj | j| j¡tj ¡ tj | j| j¡¡| _d S | j	dkrxtd| j	 ƒ‚d S )NÚlstmé   T)Ú
input_sizeÚhidden_sizeÚ
num_layersÚbidirectionalÚbatch_firstÚmlpÚnonezPrompt function )Úsuperr   Ú__init__Úspell_lengthr   ÚtorchÚnnÚ	EmbeddingÚspell_embeddingsÚ
spell_funcÚLSTMÚ	lstm_headÚ
SequentialÚLinearÚReLUÚmlp_headÚNotImplementedError)Úselfr   r   r   ©Ú	__class__© ú[/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/nlp/mglm/model/prompt.pyr   
   s:   
ÿ
ú
ý

ý
ÿzPromptSpell.__init__Nc                 C   s¢   d}t  ¡ A t| jƒD ]2}t |¡}|d u r|| }n|| }t |¡}|| }	t ¡ }
||
 |	d|
   }|| jjj	|< qW d   ƒ d S 1 sJw   Y  d S )Niˆ  é   )
r   Úno_gradÚranger   ÚrandomÚ	randrangeÚchoicer   ÚweightÚdata)r   Úword_embeddingsÚtask_tokensÚ	num_wordsÚiÚ
rand_tokenÚtarget_embeddingÚword_embeddingÚ
task_tokenÚtask_embeddingÚratior   r   r   Úinit_embedding%   s    



ÿõ"ÿzPromptSpell.init_embeddingc                 C   sH   | j j d¡}| jdkr|  |¡d }| jdks| jdkr"|  |¡}|S )Nr   r   r
   )r   r&   Ú	unsqueezer   r   r   )r   Úprompt_embedsr   r   r   Úforward5   s   

zPromptSpell.forward)NN)Ú__name__Ú
__module__Ú__qualname__r   r2   r5   Ú__classcell__r   r   r   r   r      s    
r   )r#   r   r   ÚModuler   r   r   r   r   Ú<module>   s   