o
    *j                      @   s   d dl Z G dd deZdS )    Nc                   @   sB   e Zd Z			dddZdd Zddd	ZdddZdddZdS )TextGeneratorN c                 C   s   d| _ || _tj dk| _|| _|| _|| _d| _d| _	|| _
d| _d| _d| _|| _| jdk| _d | _| jrBg g g g d| _d S d S )	Ng333333?r   e   f      i  r   )Zpredicted_idsZbeam_parent_idsscores	log_probs)alphaloggertorchcudaZdevice_countmodelvocabsymbolsstart_token	end_tokenglobal_scorer	beam_size
min_length
max_length	dump_beamZ
beam_traceZ
beam_accum)selfr   r   r   r   r
   r    r   e/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/nlp/plug/generator.py__init__   s,   zTextGenerator.__init__c                    sf   g }|D ]}t |}|| |d  jkr|d d } nq fdd|D } j|d}|S )Nc                    s   g | ]}|t  jk r|qS r   )lenr   ).0tr   r   r   
<listcomp>5   s    z6TextGenerator._build_target_tokens.<locals>.<listcomp> )intappendr   r   Z	DecodeIdssplit)r   predtokenstokr   r   r   _build_target_tokens-   s   
z"TextGenerator._build_target_tokensr   c                 C   s   t tt| }|dkr"|| |d |d< ||< || }t | }|d  |9  < |d}||ddd|ddd j| }|dkrW|| }|S )z7
        Tiles x on dimension dim count times.
        r   r      )	listranger   sizeZpermute
contiguousviewZ	transposerepeat)r   xcountdimpermZout_sizebatchr   r   r   tile9   s"   

zTextGenerator.tileFc                 C   s@   t   | j|| j| jdW  d    S 1 sw   Y  d S )N)r   )r   Zno_grad_fast_translate_batchr   r   )r   encoder_inputsfastr   r   r   translate_batchN   s
   

$zTextGenerator.translate_batchc           /      C   sV  | j rJ | j}|\}}}|d}|j}	tj|dg| jtj|	d}
| j||||
d d dddd d
\}}}|}| j	||dd}| j	||dd}tj
|tj|	d}tj
d|| |tj|	d}tj|| dg| jtj|	d}tjd	gtd
g|d   |	d|}dd t|D }i }dd t|D |d< dd t|D |d< dg| |d< g |d< d }d }t|D ]t}| j||||||ddd|d
\}}}|d d dd d f }|d}ttj|d|dd}||k rd|d d | jf< ||dd7 }| j}d|d  d | }|| }|d|| }|j|dd\}} || }| j|dd}!| |} |!|d |!d d }"|"d}#t|d|#| ddgd}| | j}$|d |krd|$d |$d d df d}%|$ r|d||d}&t|$dD ]^}'||' }(|%|' r|$|' d |$|'  d})|)D ]}*||( ||'|*f |&|'|*dd f f q|%|' rt ||( dd dd}+|+d \},}-|d |( |, |d |( |- q|%d d}.t!|.dkr |S |d|.}|"d|.}"|d|.}|&d|.d|d}|"d}#|d|#}|d|#}q|S )Nr   r)   )dtypedeviceFT)Zcheckpoint_activationsZis_inferZparallel_outputsequence_output)r2   )stepr:   r;   g        z-inf)r;   c                 S      g | ]}g qS r   r   r   _r   r   r   r           z7TextGenerator._fast_translate_batch.<locals>.<listcomp>c                 S   r>   r   r   r?   r   r   r   r       rA   predictionsc                 S   r>   r   r   r?   r   r   r   r       rA   r   Z
gold_scorer4   r   g@xg      @g      @trunc)Zrounding_modec                 S   s   | d S )Nr   r   )r0   r   r   r   <lambda>   s    z5TextGenerator._fast_translate_batch.<locals>.<lambda>)keyreverse)"r   r   r,   r;   r   fullr   longr   r5   ZarangeZtensorfloatr/   r+   logZsoftmaxr.   r   Z	unsqueezer	   ZreshapeZtopkdivfmodcatZindex_selecteqZfill_anyZnonzeror#   sortedr   )/r   r7   r   r   r   r&   typesZpadding_maskZ
batch_sizer;   Ztmp_alive_seqZprediction_scoresZdec_feat_seqr<   Zsrc_featuresZattention_maskZbatch_offsetZbeam_offsetZ	alive_seqZtopk_log_probsZ
hypothesesresultsZdec_attn_maskZdec_position_idsr=   r@   Z
vocab_sizer   r	   Zlength_penaltyZcurr_scoresZtopk_scoresZtopk_idsZtopk_beam_indexZbatch_indexZselect_indicesis_finishedZend_conditionrB   ibZfinished_hypjZbest_hypZscorer%   Znon_finishedr   r   r   r6   S   s  














z#TextGenerator._fast_translate_batch)NNr   )r   )F)__name__
__module____qualname__r   r(   r5   r9   r6   r   r   r   r   r      s    
&

r   )r   objectr   r   r   r   r   <module>   s   