o
    *Îjã	  ã                   @   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)Z
input_sizeÚhidden_sizeZ
num_layersÚbidirectionalZbatch_firstÚmlpÚnonezPrompt function )Úsuperr   Ú__init__Úspell_lengthr   ÚtorchÚnnZ	EmbeddingÚspell_embeddingsÚ
spell_funcZLSTMÚ	lstm_headZ
SequentialZLinearZReLUÚmlp_headÚNotImplementedError)Úselfr   r   r   ©Ú	__class__© úh/var/www/html/Deteccion_Ine/venv/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   Zno_gradÚranger   ÚrandomÚ	randrangeÚchoicer   ÚweightÚdata)r   Zword_embeddingsZtask_tokensZ	num_wordsÚiZ
rand_tokenZtarget_embeddingZword_embeddingZ
task_tokenZ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   Z	unsqueezer   r   r   )r   Zprompt_embedsr   r   r   Úforward5   s   

zPromptSpell.forward)NN)Ú__name__Ú
__module__Ú__qualname__r
   r!   r"   Ú__classcell__r   r   r   r   r      s    
r   )r   r   r   ÚModuler   r   r   r   r   Ú<module>   s   