Ë
    S^(hpÁ  ã                   óÆ   — d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlZd dlZddlmZ ddlmZmZ d	Zd
Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Zy)é    )ÚABCÚabstractmethod)ÚUserDict)ÚDictÚListÚOptionalÚTupleÚUnionNé   )Úadd_start_docstringsé   )Ú
ConstraintÚConstraintListStatea  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        next_scores (`torch.FloatTensor` of shape `(batch_size, 2 * num_beams)`):
            Current scores of the top `2 * num_beams` non-finished beam hypotheses.
        next_tokens (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):
            `input_ids` of the tokens corresponding to the top `2 * num_beams` non-finished beam hypotheses.
        next_indices (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):
            Beam indices indicating to which beam hypothesis the `next_tokens` correspond.
        pad_token_id (`int`, *optional*):
            The id of the *padding* token.
        eos_token_id (`Union[int, List[int]]`, *optional*):
            The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.
        beam_indices (`torch.LongTensor`, *optional*):
            Beam indices indicating to which beam hypothesis each token correspond.
        group_index (`int`, *optional*):
            The index of the group of beams. Used with [`~PreTrainedModel.group_beam_search`].

    Return:
        `UserDict`: A dictionary composed of the fields as defined above:

            - **next_beam_scores** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Updated scores of all
              non-finished beams.
            - **next_beam_tokens** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Next tokens to be added
              to the non-finished beam_hypotheses.
            - **next_beam_indices** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Beam indices
              indicating to which beam the next tokens shall be added.

a§  
    Args:
        input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        final_beam_scores (`torch.FloatTensor` of shape `(batch_size * num_beams)`):
            The final scores of all non-finished beams.
        final_beam_tokens (`torch.FloatTensor` of shape `(batch_size * num_beams)`):
            The last tokens to be added to the non-finished beam_hypotheses.
        final_beam_indices (`torch.FloatTensor` of shape `(batch_size * num_beams)`):
            The beam indices indicating to which beam the `final_beam_tokens` shall be added.
        pad_token_id (`int`, *optional*):
            The id of the *padding* token.
        eos_token_id (`Union[int, List[int]]`, *optional*):
            The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.

    Return:
        `torch.LongTensor` of shape `(batch_size * num_return_sequences, sequence_length)`: The generated sequences.
        The second dimension (sequence_length) is either equal to `max_length` or shorter if all batches finished early
        due to the `eos_token_id`.

c                   óZ  — e Zd ZdZe ee«      dej                  dej                  dej                  dej                  de
ej                     f
d„«       «       Ze ee«      dej                  dej                  dej                  dej                  dedej                  fd	„«       «       Zy
)Ú
BeamScorerz�
    Abstract base class for all beam scorers that are used for [`~PreTrainedModel.beam_search`] and
    [`~PreTrainedModel.beam_sample`].
    Ú	input_idsÚnext_scoresÚnext_tokensÚnext_indicesÚreturnc                 ó   — t        d«      ‚©NzThis is an abstract method.©ÚNotImplementedError)Úselfr   r   r   r   Úkwargss         úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/generation/beam_search.pyÚprocesszBeamScorer.processa   s   € ô "Ð"?Ó@Ð@ó    Ú
max_lengthc                 ó   — t        d«      ‚r   r   )r   r   r   r   r   r    r   s          r   ÚfinalizezBeamScorer.finalizem   s   € ô "Ð"?Ó@Ð@r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚPROCESS_INPUTS_DOCSTRINGÚtorchÚ
LongTensorÚFloatTensorr	   ÚTensorr   ÚFINALIZE_INPUTS_DOCSTRINGÚintr"   © r   r   r   r   [   s  „ ñð
 ÙÐ2Ó3ðAà×#Ñ#ðAð ×&Ñ&ðAð ×%Ñ%ð	Að
 ×&Ñ&ðAð 
ˆu�|‰|Ñ	òAó 4ó ðAð ÙÐ3Ó4ð	Aà×#Ñ#ð	Að ×&Ñ&ð	Að ×%Ñ%ð		Að
 ×&Ñ&ð	Að ð	Að 
×	Ñ	ò	Aó 5ó ñ	Ar   r   c                   óÊ  — e Zd ZdZ	 	 	 	 	 ddededej                  dee   dee	e
ef      dee   d	ee   d
ee   fd„Zede
fd„«       Z	 	 	 	 	 ddej                  dej                   dej                  dej                  dee	eej"                  f      dee	eee   ej"                  f      deej                     dee   dee   deeej"                  f   fd„Z	 	 	 	 ddej                  dej                   dej                  dej                  d
edee	eej"                  f      dee	eee   ej"                  f      deej                     dee   deej                     fd„Zy)ÚBeamSearchScorera‡	  
    [`BeamScorer`] implementing standard beam search decoding.

    Adapted in part from [Facebook's XLM beam search
    code](https://github.com/facebookresearch/XLM/blob/9e6f6814d17be4fe5b15f2e6c43eb2b2d76daeb4/src/model/transformer.py#L529).

    Reference for the diverse beam search algorithm and implementation [Ashwin Kalyan's DBS
    implementation](https://github.com/ashwinkalyan/dbs/blob/master/dbs/beam_utils.lua)

    Args:
        batch_size (`int`):
            Batch Size of `input_ids` for which standard beam search decoding is run in parallel.
        num_beams (`int`):
            Number of beams for beam search.
        device (`torch.device`):
            Defines the device type (*e.g.*, `"cpu"` or `"cuda"`) on which this instance of `BeamSearchScorer` will be
            allocated.
        length_penalty (`float`, *optional*, defaults to 1.0):
            Exponential penalty to the length that is used with beam-based generation. It is applied as an exponent to
            the sequence length, which in turn is used to divide the score of the sequence. Since the score is the log
            likelihood of the sequence (i.e. negative), `length_penalty` > 0.0 promotes longer sequences, while
            `length_penalty` < 0.0 encourages shorter sequences.
        do_early_stopping (`bool` or `str`, *optional*, defaults to `False`):
            Controls the stopping condition for beam-based methods, like beam-search. It accepts the following values:
            `True`, where the generation stops as soon as there are `num_beams` complete candidates; `False`, where an
            heuristic is applied and the generation stops when is it very unlikely to find better candidates;
            `"never"`, where the beam search procedure only stops when there cannot be better candidates (canonical
            beam search algorithm).
        num_beam_hyps_to_keep (`int`, *optional*, defaults to 1):
            The number of beam hypotheses that shall be returned upon calling
            [`~transformers.BeamSearchScorer.finalize`].
        num_beam_groups (`int`, *optional*, defaults to 1):
            Number of groups to divide `num_beams` into in order to ensure diversity among different groups of beams.
            See [this paper](https://arxiv.org/pdf/1610.02424.pdf) for more details.
        max_length (`int`, *optional*):
            The maximum length of the sequence to be generated.
    NÚ
batch_sizeÚ	num_beamsÚdeviceÚlength_penaltyÚdo_early_stoppingÚnum_beam_hyps_to_keepÚnum_beam_groupsr    c	           	      óº  — || _         || _        || _        || _        || _        || _        | j                   | j
                  z  | _        d| _        t        || j
                  z  «      D �	cg c]/  }	t        | j                  | j                  | j                  |¬«      ‘Œ1 c}	| _
        t        j                  t        || j
                  z  «      D �	cg c]  }	d‘Œ c}	t        j                  | j                  ¬«      | _        t        |t         «      r|dk  rt#        d|› d�«      ‚t        |t         «      r||kD  s||z  dk7  rt#        d|› d	|› d
�«      ‚y c c}	w c c}	w ©NF)r2   r4   Úearly_stoppingr    ©Údtyper3   r   zA`num_beams` has to be an integer strictly greater than 1, but is zG. For `num_beams` == 1, one should make use of `greedy_search` instead.r   zŠ`num_beam_groups` has to be an integer smaller or equal than `num_beams` and `num_beams` has to be divisible by `num_beam_groups`, but is z with `num_beams` being ú.)r2   r3   r4   r5   r6   r7   Ú
group_sizeÚ_is_initÚrangeÚBeamHypothesesÚ
_beam_hypsr(   ÚtensorÚboolÚ_doneÚ
isinstancer-   Ú
ValueError)
r   r1   r2   r3   r4   r5   r6   r7   r    Ú_s
             r   Ú__init__zBeamSearchScorer.__init__¢   sp  € ð #ˆŒØˆŒØ,ˆÔØ!2ˆÔØ%:ˆÔ"Ø.ˆÔØŸ.™.¨D×,@Ñ,@Ñ@ˆŒàˆŒô ˜:¨×(<Ñ(<Ñ<Ó=ö
ð ô ØŸ/™/Ø#×2Ñ2Ø#×5Ñ5Ø%ö	ò
ˆŒô —\‘\Ü! *¨t×/CÑ/CÑ"CÓDÖE�qŠUÒEÌUÏZÉZÐ`d×`kÑ`kô
ˆŒ
ô ˜)¤SÔ)¨Y¸!ª^ÜØSÐT]ÐS^ð _Cð Cóð ô
 ˜/¬3Ô/°OÀiÒ4OÐU^ÐapÑUpÐtuÒUuÜð;Ø;JÐ:KÐKcÐdmÐcnÐnoðqóð ð Vvùò+
ùò Fs   Á*4EÃ	Er   c                 ó6   — | j                   j                  «       S ©N©rE   Úall©r   s    r   Úis_donezBeamSearchScorer.is_doneÓ   ó   € à�z‰z�~‰~ÓÐr   r   r   r   r   Úpad_token_idÚeos_token_idÚbeam_indicesÚgroup_indexÚdecoder_prompt_lenc
                 óÀ  — |j                   d   dz   }
t        | j                  «      | j                  z  }||j                   d   | j                  z  k(  sa| j                  dkD  r)t        d|j                   d   › d| j                  › d�«      ‚t        d|j                   d   › d| j                  › d�«      ‚|j                  }t        j                  || j                  f|j                  |¬	«      }t        j                  || j                  f|j                  |¬	«      }t        j                  || j                  f|j                  |¬	«      }|�Bt        |t        j                  «      s(t        |t        «      r|g}t        j                  |«      }t        |«      D �]  }|| j                  z  |z   }| j                  |   ri| j                   t        | j                  |   «      k  rt        d
| j                   › d�«      ‚|�|€t        d«      ‚d||d d …f<   |||d d …f<   d||d d …f<   ŒŽd}t#        t%        ||   ||   ||   «      «      D ]Á  \  }\  }}}|| j                  z  |z   }|�y|j'                  «       |v rg|| j                  k\  }|rŒB|�||   }||fz   }nd }| j                  |   j)                  ||   j+                  «       |j'                  «       ||
|	z
  ¬«       n||||f<   ||||f<   ||||f<   |dz  }|| j                  k(  sŒÁ n || j                  k  r(t        d| j                  › d||   › d|› d||   › d�	«      ‚| j                  |   xs? | j                  |   j-                  ||   j/                  «       j'                  «       |
|	«      | j                  |<   �Œ	 t1        |j3                  d«      |j3                  d«      |j3                  d«      dœ«      S )Néÿÿÿÿr   r   úA group beam size of ú0 is used as the input, but a group beam size of ú  is expected by the beam scorer.úA beam size of ú* is used as the input, but a beam size of r;   ú#Batch can only be done if at least ú beams have been generatedúMGenerated beams >= num_beams -> eos_token_id and pad_token have to be defined©rS   Úgenerated_lenúAt most ú tokens in ú  can be equal to `eos_token_id: ú`. Make sure ú are corrected.©Únext_beam_scoresÚnext_beam_tokensÚnext_beam_indices)ÚshapeÚlenrB   r7   r>   rG   r3   r(   Úzerosr<   rF   r+   r-   rC   r@   rE   r2   Ú	enumerateÚzipÚitemÚaddÚclonerO   Úmaxr   Úview)r   r   r   r   r   rQ   rR   rS   rT   rU   Úcur_lenr1   r3   rh   ri   rj   Ú	batch_idxÚbatch_group_idxÚbeam_idxÚbeam_token_rankÚ
next_tokenÚ
next_scoreÚ
next_indexÚbatch_beam_idxÚ&is_beam_token_worse_than_top_num_beamsÚ
beam_indexs                             r   r   zBeamSearchScorer.process×   s=  € ð —/‘/ "Ñ%¨Ñ)ˆÜ˜Ÿ™Ó)¨T×-AÑ-AÑAˆ
à˜yŸ™¨qÑ1°T·_±_ÑDÒEØ×#Ñ# aÒ'Ü Ø+¨I¯O©O¸AÑ,>Ð+?ð @Ø#Ÿ™Ð/Ð/OðQóð ô
 !Ø% i§o¡o°aÑ&8Ð%9Ð9cØ—‘Ð'Ð'GðIóð ð
 ×!Ñ!ˆÜ Ÿ;™;¨
°D·O±OÐ'DÈK×L]ÑL]ÐflÔmÐÜ Ÿ;™;¨
°D·O±OÐ'DÈK×L]ÑL]ÐflÔmÐÜ!ŸK™K¨°T·_±_Ð(EÈ\×M_ÑM_ÐhnÔoÐàÐ#¬J°|ÄUÇ\Á\Ô,RÜ˜,¬Ô,Ø ,˜~�Ü Ÿ<™<¨Ó5ˆLä˜zÓ*ó 9	ˆIØ'¨$×*>Ñ*>Ñ>ÀÑLˆOØ�z‰z˜/Ò*Ø—>‘>¤C¨¯©¸Ñ(HÓ$IÒIÜ$Ð'JÈ4Ï>É>ÐJZÐZtÐ%uÓvÐvØÐ'¨<Ð+?Ü$Ð%tÓuÐuà12Ð  ªA Ñ.Ø1=Ð  ªA Ñ.Ø23Ð! )ªQ ,Ñ/Øð ˆHÜIRÜ�K 	Ñ*¨K¸	Ñ,BÀLÐQZÑD[Ó\óJò ÑE�Ñ!E *¨j¸*ð "+¨T¯_©_Ñ!<¸zÑ!I�à Ð,°:·?±?Ó3DÈÑ3Tà=LÐPT×P_ÑP_Ñ=_Ð:Ù=Ø Ø#Ð/Ø%1°.Ñ%A˜
Ø%/°>Ð2CÑ%C™
à%)˜
à—O‘O OÑ4×8Ñ8Ø! .Ñ1×7Ñ7Ó9Ø"Ÿ™Ó)Ø%/Ø&-Ð0BÑ&Bð	 9õ ð =GÐ$ Y°Ð%8Ñ9Ø<FÐ$ Y°Ð%8Ñ9Ø=KÐ% i°Ð&9Ñ:Ø ‘M�Hð ˜tŸ™Ó.Ùð?ðB ˜$Ÿ/™/Ò)Ü Ø˜tŸ™Ð/¨{¸;ÀyÑ;QÐ:Rð SØ$�~ ]°;¸yÑ3IÐ2JÈ/ð[óð ð +/¯*©*°_Ñ*Eò +ÈÏÉÐYhÑIi×IqÑIqØ˜IÑ&×*Ñ*Ó,×1Ñ1Ó3°WÐ>PóJˆD�J‰J�Ó'ðo9	ôv à$4×$9Ñ$9¸"Ó$=Ø$4×$9Ñ$9¸"Ó$=Ø%6×%;Ñ%;¸BÓ%?ñó
ð 	
r   Úfinal_beam_scoresÚfinal_beam_tokensÚfinal_beam_indicesc
                 ó¤  — t        | j                  «      | j                  z  }
|�Bt        |t        j
                  «      s(t        |t        «      r|g}t	        j                  |«      }t        | j                  «      D ]‰  \  }}| j                  |   rŒt        | j                  «      D ]\  }|| j                  z  |z   }||   j                  «       }||   }|�||   nd }|j                  d   |	z
  }|j                  ||||¬«       Œ^ Œ‹ |j                  |
| j                   z  «      }g }g }t	        j"                  |
| j                   z  | j$                  t        j&                  ¬«      }t        |
«      D ]ì  }| j                  || j                  z  |dz   | j                  z   }|D ��cg c]  }|j(                  D ]  }|‘Œ Œ }}}t+        |d„ ¬«      }t        | j                   «      D ]v  }|j-                  «       }|d   }|d   }|d   } t        |«      || j                   |z  |z   <   |j/                  |«       |j/                  | «       |||| j                   z  |z   <   Œx Œî |j1                  «       j                  «       dz   }!|�t3        |!|«      n|!}"|j                  |
| j                   z  |"«      }#t        |«      dkD  r%|d   � |j                  |
| j                   z  |"«      }$nd }$|j3                  «       j                  «       |j1                  «       j                  «       k7  r|€t5        d	«      ‚|#j7                  |«       |$�|$j7                  d«       t        t9        ||«      «      D ]Q  \  }\  }%}&|%|#|d ||   …f<   |$�%t	        j                  |&«      |$|d t        |&«      …f<   ||   |"k  sŒE|d   |#|||   f<   ŒS t;        |#||$d
œ«      S c c}}w )NrW   r`   ©r3   r<   r   c                 ó   — | d   S ©Nr   r.   ©Úxs    r   ú<lambda>z+BeamSearchScorer.finalize.<locals>.<lambda>l  s
   € ÀÀ!Á€ r   ©Úkeyr   r   ú `pad_token_id` has to be defined©Ú	sequencesÚsequence_scoresrS   )rl   rB   r7   rF   r(   r+   r-   rC   rn   rE   r@   r>   rp   rk   rq   Únewr6   rm   r3   Úfloat32ÚbeamsÚsortedÚpopÚappendrs   ÚminrG   Úfill_ro   r   )'r   r   r€   r�   r‚   r    rQ   rR   rS   rU   r1   rw   Úbeam_hypÚindex_per_groupr}   Úfinal_scoreÚfinal_tokensr   ra   Úsent_lengthsÚbestÚbest_indicesÚbest_scoresÚiÚbeam_hyps_in_batchÚbeamÚcandidate_beamsÚsorted_hypsÚjÚbest_hyp_tupleÚ
best_scoreÚbest_hypÚ
best_indexÚsent_lengths_maxÚsent_max_lenÚdecodedÚindicesÚhypoÚbest_idxs'                                          r   r"   zBeamSearchScorer.finalize@  sý  € ô ˜Ÿ™Ó)¨T×-AÑ-AÑAˆ
àÐ#¬J°|ÄUÇ\Á\Ô,RÜ˜,¬Ô,Ø ,˜~�Ü Ÿ<™<¨Ó5ˆLô *3°4·?±?Ó)Cò 	nÑ%ˆO˜XØ�z‰z˜/Ò*Øô $)¨¯©Ó#9ò n�Ø!0°4·?±?Ñ!BÀ_Ñ!T�Ø/°Ñ?×DÑDÓF�Ø(¨Ñ8�Ø=IÐ=U˜\¨.Ò9Ð[_�
Ø ,× 2Ñ 2°2Ñ 6Ð9KÑ K�Ø—‘˜\¨;ÀZÐ_l�Õmñnð	nð !—}‘} Z°$×2LÑ2LÑ%LÓMˆØˆØˆÜ—k‘k *¨t×/IÑ/IÑ"IÐRV×R]ÑR]Ôej×erÑerÔsˆô �zÓ"ò 	MˆAØ!%§¡°°T×5IÑ5IÑ1IÈQÐQRÉUÐVZ×VjÑVjÑLjÐ!kÐØ4F×b¨ÐS[×SaÑSaÒbÈ4štÐb˜tÐbˆOÑbÜ  ±nÔEˆKÜ˜4×5Ñ5Ó6ò M�Ø!,§¡Ó!2�Ø+¨AÑ.�
Ø)¨!Ñ,�Ø+¨AÑ.�
ÜCFÀxÃ=�˜T×7Ñ7¸!Ñ;¸aÑ?Ñ@ð —‘˜HÔ%ð ×#Ñ# JÔ/àBL�˜A × :Ñ :Ñ:¸QÑ>Ò?ñMð		Mð( (×+Ñ+Ó-×2Ñ2Ó4°qÑ8ÐØ<FÐ<R”sÐ+¨ZÔ8ÐXhˆØ$-§M¡M°*¸t×?YÑ?YÑ2YÐ[gÓ$hˆäˆ|Ó˜qÒ  \°!¡_Ð%@Ø(1¯©°jÀ4×C]ÑC]Ñ6]Ð_kÓ(l‰GàˆGð ×ÑÓ×"Ñ"Ó$¨×(8Ñ(8Ó(:×(?Ñ(?Ó(AÒAØÐ#Ü Ð!CÓDÐDØ�M‰M˜,Ô'àÐØ�M‰M˜"Ôô $-¬S°°|Ó-DÓ#Eò 	>ÑˆAÑ��hØ,0ˆG�AÐ(˜ a™Ð(Ð(Ñ)àÐ"Ü.3¯l©l¸8Ó.D�˜˜?œS ›]˜?Ð*Ñ+à˜A‰ Ó-à.:¸1©o�˜˜<¨™?Ð*Ò+ð	>ô à$Ø#.Ø 'ñó
ð 	
ùó_ cs   Æ&O©g      ð?Fr   r   N)NNNr   r   ©NNNr   )r#   r$   r%   r&   r-   r(   r3   r   Úfloatr
   rD   ÚstrrI   ÚpropertyrO   r)   r*   r+   r   r   r   r	   r"   r.   r   r   r0   r0   {   ss  „ ñ$ðV +.Ø8=Ø/0Ø)*Ø$(ñ/àð/ð ð/ð —‘ð	/ð
 ! ™ð/ð $ E¨$°¨)Ñ$4Ñ5ð/ð  (¨™}ð/ð " #™ð/ð ˜S‘Mó/ðb ð ˜ò  ó ð ð <@ØFJØ37Ø%&Ø,-ñg
à×#Ñ#ðg
ð ×&Ñ&ðg
ð ×%Ñ%ð	g
ð
 ×&Ñ&ðg
ð ˜u S¨%¯,©,Ð%6Ñ7Ñ8ðg
ð ˜u S¨$¨s©)°U·\±\Ð%AÑBÑCðg
ð ˜u×/Ñ/Ñ0ðg
ð ˜c‘]ðg
ð % S™Mðg
ð 
ˆc�5—<‘<ÐÑ	 óg
ð` <@ØFJØ37Ø,-ñ`
à×#Ñ#ð`
ð !×,Ñ,ð`
ð !×+Ñ+ð	`
ð
 "×,Ñ,ð`
ð ð`
ð ˜u S¨%¯,©,Ð%6Ñ7Ñ8ð`
ð ˜u S¨$¨s©)°U·\±\Ð%AÑBÑCð`
ð ˜u×/Ñ/Ñ0ð`
ð % S™Mð`
ð 
ˆu×ÑÑ	 ô`
r   r0   c                   ót  — e Zd ZdZ	 	 	 	 	 d&dededee   dej                  de	e
   de	eeef      d	e	e   d
e	e   de	e   fd„Zedefd„«       Zd„ Zd„ Z	 	 	 	 d'dej&                  dej(                  dej&                  dej&                  dej(                  de	eeej*                  f      de	eeee   ej*                  f      de	ej&                     de	e   deej*                     fd„Z	 d(dedej&                  dej(                  dej(                  dej&                  dej&                  d efd!„Z	 	 	 	 d'dej&                  d"ej(                  d#ej&                  d$ej&                  dede	eeej*                  f      de	eeee   ej*                  f      de	ej&                     de	e   deej&                     fd%„Zy))ÚConstrainedBeamSearchScorera 	  
    [`BeamScorer`] implementing constrained beam search decoding.


    Args:
        batch_size (`int`):
            Batch Size of `input_ids` for which standard beam search decoding is run in parallel.
        num_beams (`int`):
            Number of beams for beam search.
        constraints (`List[Constraint]`):
            A list of positive constraints represented as `Constraint` objects that must be fulfilled in the generation
            output. For more information, the documentation of [`Constraint`] should be read.
        device (`torch.device`):
            Defines the device type (*e.g.*, `"cpu"` or `"cuda"`) on which this instance of `BeamSearchScorer` will be
            allocated.
        length_penalty (`float`, *optional*, defaults to 1.0):
            Exponential penalty to the length that is used with beam-based generation. It is applied as an exponent to
            the sequence length, which in turn is used to divide the score of the sequence. Since the score is the log
            likelihood of the sequence (i.e. negative), `length_penalty` > 0.0 promotes longer sequences, while
            `length_penalty` < 0.0 encourages shorter sequences.
        do_early_stopping (`bool` or `str`, *optional*, defaults to `False`):
            Controls the stopping condition for beam-based methods, like beam-search. It accepts the following values:
            `True`, where the generation stops as soon as there are `num_beams` complete candidates; `False`, where an
            heuristic is applied and the generation stops when is it very unlikely to find better candidates;
            `"never"`, where the beam search procedure only stops when there cannot be better candidates (canonical
            beam search algorithm).
        num_beam_hyps_to_keep (`int`, *optional*, defaults to 1):
            The number of beam hypotheses that shall be returned upon calling
            [`~transformers.BeamSearchScorer.finalize`].
        num_beam_groups (`int`, *optional*, defaults to 1):
            Number of groups to divide `num_beams` into in order to ensure diversity among different groups of beams.
            See [this paper](https://arxiv.org/pdf/1610.02424.pdf) for more details.
        max_length (`int`, *optional*):
            The maximum length of the sequence to be generated.
    Nr1   r2   Úconstraintsr3   r4   r5   r6   r7   r    c
           	      ó”  — || _         || _        || _        || _        || _        || _        | j                   | j
                  z  | _        || _        d| _        t        |«      D �
cg c]/  }
t        | j                   | j                  | j                  |	¬«      ‘Œ1 c}
| _        t        j                  t        |«      D �
cg c]  }
d‘Œ c}
t        j                  | j                  ¬«      | _        t!        |t"        «      r|dk  rt%        d|› d�«      ‚t!        |t"        «      r||kD  s||z  dk7  rt%        d|› d	|› d
�«      ‚y c c}
w c c}
w r9   )r2   r3   r4   r5   r6   r7   r>   r·   r?   r@   rA   rB   r(   rC   rD   rE   rF   r-   rG   )r   r1   r2   r·   r3   r4   r5   r6   r7   r    rH   s              r   rI   z$ConstrainedBeamSearchScorer.__init__È  s]  € ð #ˆŒØˆŒØ,ˆÔØ!2ˆÔØ%:ˆÔ"Ø.ˆÔØŸ.™.¨D×,@Ñ,@Ñ@ˆŒØ&ˆÔàˆŒô ˜:Ó&ö
ð ô ØŸ.™.Ø#×2Ñ2Ø#×5Ñ5Ø%ö	ò
ˆŒô —\‘\´%¸
Ó2CÖ"D¨Q¢5Ò"DÌEÏJÉJÐ_c×_jÑ_jÔkˆŒ
ä˜)¤SÔ)¨Y¸!ª^ÜØSÐT]ÐS^ð _Cð Cóð ô
 ˜/¬3Ô/°OÀiÒ4OÐU^ÐapÑUpÐtuÒUuÜð;Ø;JÐ:KÐKcÐdmÐcnÐnoðqóð ð Vvùò#
ùò #Es   Á$4E Â<	Er   c                 ó6   — | j                   j                  «       S rK   rL   rN   s    r   rO   z#ConstrainedBeamSearchScorer.is_doneõ  rP   r   c                 ó¬   — t        |«      D ��cg c]3  }t        | j                  D �cg c]  }|j                  «       ‘Œ c}«      ‘Œ5 c}}S c c}w c c}}w rK   )r@   r   r·   Úcopy)r   ÚnrH   Ú
constraints       r   Úmake_constraint_statesz2ConstrainedBeamSearchScorer.make_constraint_statesù  s>   € ÜejÐklÓem×nÐ`aÔ#È×IYÑIYÖ$Z¸: Z§_¡_Õ%6Ò$ZÕ[ÓnÐnùÒ$ZùÓns   �A§A¾	AÁAc                 ód   — | j                  d«      d   }|j                  |«       |j                  S )Nr   r   )r¾   ÚresetÚ	completed)r   ÚsequenceÚ	new_states      r   Úcheck_completes_constraintsz7ConstrainedBeamSearchScorer.check_completes_constraintsü  s/   € Ø×/Ñ/°Ó2°1Ñ5ˆ	Ø�‰˜Ô!Ø×"Ñ"Ð"r   r   r   r   r   Úscores_for_all_vocabrQ   rR   rS   rU   c
                 óú  — |j                   d   dz   }
t        | j                  «      }||j                   d   | j                  z  k(  sa| j                  dkD  r)t        d|j                   d   › d| j                  › d�«      ‚t        d|j                   d   › d| j                  › d�«      ‚|j                  }t        j                  || j                  f|j                  |¬	«      }t        j                  || j                  f|j                  |¬	«      }t        j                  || j                  f|j                  |¬	«      }|�Bt        |t        j                  «      s(t        |t        «      r|g}t        j                  |«      }t        | j                  «      D �]&  \  }}| j                  |   r\| j                   t        |«      k  rt        d| j                   › d�«      ‚|�|€t        d«      ‚d||d
d
…f<   |||d
d
…f<   d||d
d
…f<   Œrd}t        t#        ||   ||   ||   «      «      D ]Ø  \  }\  }}}|| j                  z  |z   }|��|j%                  «       |v r~|| j                  k\  }|rŒB| j'                  ||   j)                  «       «      }|rb|�||   }||fz   }nd
}|j+                  ||   j-                  «       |j%                  «       ||
|	z
  ¬«       n||||f<   ||||f<   ||||f<   |dz  }|| j                  k(  sŒØ n | j/                  |||||   ||   ||   «      \  }}}|||<   |||<   |||<   || j                  k  r(t        d| j                  › d||   › d|› d||   › d�	«      ‚| j                  |   xs2 |j1                  ||   j3                  «       j%                  «       |
|	«      | j                  |<   �Œ) t5        |j7                  d«      |j7                  d«      |j7                  d«      dœ«      S )al	  
        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size * num_beams, sequence_length)`):
                Indices of input sequence tokens in the vocabulary.

                Indices can be obtained using any class inheriting from [`PreTrainedTokenizer`]. See
                [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

                [What are input IDs?](../glossary#input-ids)
            next_scores (`torch.FloatTensor` of shape `(batch_size, 2 * num_beams)`):
                Current scores of the top `2 * num_beams` non-finished beam hypotheses.
            next_tokens (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):
                `input_ids` of the tokens corresponding to the top `2 * num_beams` non-finished beam hypotheses.
            next_indices (`torch.LongTensor` of shape `(batch_size, 2 * num_beams)`):
                Beam indices indicating to which beam hypothesis the `next_tokens` correspond.
            scores_for_all_vocab (`torch.FloatTensor` of shape `(batch_size * num_beams, sequence_length)`):
                The scores of all tokens in the vocabulary for each of the beam hypotheses.
            pad_token_id (`int`, *optional*):
                The id of the *padding* token.
            eos_token_id (`Union[int, List[int]]`, *optional*):
                The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.
            beam_indices (`torch.LongTensor`, *optional*):
                Beam indices indicating to which beam hypothesis each token correspond.
            decoder_prompt_len (`int`, *optional*):
                The length of prompt that is included in the input to decoder.
        Return:
            `UserDict`: A dictionary composed of the fields as defined above:

                - **next_beam_scores** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Updated scores of
                  all
                non-finished beams.

                - **next_beam_tokens** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Next tokens to be
                  added
                to the non-finished beam_hypotheses.
                - **next_beam_indices** (`torch.FloatTensor` of shape `(batch_size * num_beams)`) -- Beam indices
                indicating to which beam the next tokens shall be added.
        rW   r   r   rX   rY   rZ   r[   r\   r;   Nr]   r^   r_   r`   rb   rc   rd   re   rf   rg   )rk   rl   rB   r>   r7   rG   r3   r(   rm   r<   rF   r+   r-   rC   rn   rE   r2   ro   rp   rÄ   Útolistrq   rr   Ústep_sentence_constraintrO   rs   r   rt   )r   r   r   r   r   rÅ   rQ   rR   rS   rU   ru   r1   r3   rh   ri   rj   rv   r˜   rx   ry   rz   r{   r|   r}   r~   Úcompletes_constraintr   Ú
new_scoresÚ
new_tokensÚnew_indicess                                 r   r   z#ConstrainedBeamSearchScorer.process  sˆ  € ðh —/‘/ "Ñ%¨Ñ)ˆÜ˜Ÿ™Ó)ˆ
Ø˜yŸ™¨qÑ1°T·_±_ÑDÒEØ×#Ñ# aÒ'Ü Ø+¨I¯O©O¸AÑ,>Ð+?ð @Ø#Ÿ™Ð/Ð/OðQóð ô
 !Ø% i§o¡o°aÑ&8Ð%9Ð9cØ—‘Ð'Ð'GðIóð ð
 ×!Ñ!ˆä Ÿ;™;¨
°D·O±OÐ'DÈK×L]ÑL]ÐflÔmÐÜ Ÿ;™;¨
°D·O±OÐ'DÈK×L]ÑL]ÐflÔmÐÜ!ŸK™K¨°T·_±_Ð(EÈ\×M_ÑM_ÐhnÔoÐàÐ#¬J°|ÄUÇ\Á\Ô,RÜ˜,¬Ô,Ø ,˜~�Ü Ÿ<™<¨Ó5ˆLä#,¨T¯_©_Ó#=ó H	ÑˆI�xØ�z‰z˜)Ò$Ø—>‘>¤C¨£MÒ1Ü$Ð'JÈ4Ï>É>ÐJZÐZtÐ%uÓvÐvØÐ'¨<Ð+?Ü$Ð%tÓuÐuà12Ð  ªA Ñ.Ø1=Ð  ªA Ñ.Ø23Ð! )ªQ ,Ñ/Øð ˆHÜIRÜ�K 	Ñ*¨K¸	Ñ,BÀLÐQZÑD[Ó\óJò "ÑE�Ñ!E *¨j¸*ð "+¨T¯_©_Ñ!<¸zÑ!I�à Ð,°:·?±?Ó3DÈÑ3Tà=LÐPT×P_ÑP_Ñ=_Ð:Ù=Ø à+/×+KÑ+KÈIÐVdÑLe×LlÑLlÓLnÓ+oÐ(Ù+Ø'Ð3Ø)5°nÑ)E˜JØ)3°~Ð6GÑ)G™Jà)-˜Jà Ÿ™Ø% nÑ5×;Ñ;Ó=Ø&ŸO™OÓ-Ø)3Ø*1Ð4FÑ*Fð	 %õ ð =GÐ$ Y°Ð%8Ñ9Ø<FÐ$ Y°Ð%8Ñ9Ø=KÐ% i°Ð&9Ñ:Ø ‘M�Hð ˜tŸ™Ó.ÙðE"ðH 37×2OÑ2OØØØ$Ø  Ñ+Ø  Ñ+Ø! )Ñ,ó3Ñ/ˆJ˜
 Kð +5Ð˜YÑ'Ø*4Ð˜YÑ'Ø+6Ð˜iÑ(à˜$Ÿ/™/Ò)Ü Ø˜tŸ™Ð/¨{¸;ÀyÑ;QÐ:Rð SØ$�~ ]°;¸yÑ3IÐ2JÈ/ð[óð ð %)§J¡J¨yÑ$9ò %¸X×=MÑ=MØ˜IÑ&×*Ñ*Ó,×1Ñ1Ó3°WÐ>Pó>ˆD�J‰J�yÓ!ðMH	ôT à$4×$9Ñ$9¸"Ó$=Ø$4×$9Ñ$9¸"Ó$=Ø%6×%;Ñ%;¸BÓ%?ñó
ð 	
r   rv   Úvocab_scoresÚsent_beam_scoresÚsent_beam_tokensÚsent_beam_indicesÚpush_progressc                 óB	  — |j                  d«      }|j                  }	| j                  |«      }
| j                  |«      }||z  |dz   |z  }}||| }||| }t        j                  ||   |j                  d«      fd¬«      }|j                  «       g g g g dœ}t        |«      D �]\  \  }}|
|   }|j                  ||   j                  «       «       ||   }|j                  |j                  «       «       |j                  �s$t        j                  |j                  «       t        j                  |	¬«      }|D ]é  }|j                  d¬«      }|j                  |j                  «       «       t        j                  ||j                  d«      fd«      j                  «       }||d	   vsŒq|d	   j                  |«       |d
   j                  ||z   «       |d   j                  |«       |d   j                  ||   j!                  |«      «       |d   j                  |«       Œë �Œƒ|s�Œ‡t        j"                  ||   d«      \  }}t        j                  ||j                  d«      fd«      }||   }|j                  «       }|j                  |«       ||d	   vs�Œù|d	   j                  |«       |d
   j                  |«       |d   j                  |«       |d   j                  |«       |d   j                  |«       �Œ_ t%        |d
   «      dkD  �r‚t        j                  |d
   |	¬«      }t        j&                  |d   «      j)                  |	«      }t        j&                  |d   «      j)                  |	«      }|
|d   z   }t        j                  ||fd«      } t        j                  ||fd«      }!t        j                  |D �"cg c]  }"|"j+                  «       ‘Œ c}"|	¬«      }#|#dz  |!z   }$|$j-                  d¬«      j.                  }%|#|%   }&d}'|&d   }(g })|&D ]"  }*|*|(k(  r|'dz  }'nd}'|*}(|)j                  |'«       Œ$ t        j                  t1        j2                  |)d¬«      «      }+|%|+   d | }%|!|%   }| |%   }t        j                  ||f«      |%   }|||fS c c}"w )Nr   r   rW   )Údim)Únew_seqsÚ
new_statesrÌ   rË   rÊ   r;   T)ÚstatefulrÔ   rÌ   rË   rÊ   rÕ   )r3   éd   )Ú
descendingÚ	mergesort)Úkind)Úsizer3   r¾   r(   ÚcatÚ	unsqueezerÇ   rn   rÀ   rÁ   rC   ÚadvanceÚlongr»   rq   r•   Útakers   rl   ÚstackÚtoÚget_bankÚsortr­   ÚnpÚargsort),r   rv   r   rÍ   rÎ   rÏ   rÐ   rÑ   Úorig_lenr3   Útopk_contraint_statesÚadvance_constraint_statesÚsidxÚeidxÚthis_batch_input_idsÚthis_batch_token_scoresÚfull_hypothesesÚ	track_newÚseq_idxÚpre_seqÚ
topk_stateÚadvance_stateÚadvance_tokensÚadvance_tokenrÃ   Úadvance_seqÚ	new_scoreÚ	new_tokenrÌ   rË   rÊ   Ú
all_statesÚ
all_tokensÚ
all_scoresÚoneÚ	all_banksÚzippedr­   Úsorted_banksÚcounterÚcur_bankÚ
incrementsÚbankÚrearrangerss,                                               r   rÈ   z4ConstrainedBeamSearchScorer.step_sentence_constraint   s¶  € ð( %×)Ñ)¨!Ó,ˆØ"×)Ñ)ˆð !%× ;Ñ ;¸HÓ EÐØ$(×$?Ñ$?ÀÓ$IÐ!à Ñ)¨I¸©M¸XÑ+EˆdˆØ(¨¨dÐ3ÐØ".¨t°DÐ"9ÐÜŸ)™) YÐ/@Ñ%AÐCS×C]ÑC]Ð^`ÓCaÐ$bÐhjÔkˆð (×.Ñ.Ó0ØØØØñ
ˆ	ô !*Ð*>Ó ?ó ?	BÑˆG�Wð /¨wÑ7ˆJØ×Ñ˜_¨WÑ5×<Ñ<Ó>Ô?à5°gÑ>ˆMØ×Ñ §¡Ó 0Ô1à ×*Ó*Ü!&§¡¨m×.CÑ.CÓ.EÌUÏZÉZÐ`fÔ!g�Ø%3ò B�Mà -× 2Ñ 2¸DÐ 2Ó A�IØ—M‘M -×"6Ñ"6Ó"8Ô9ä"'§)¡)¨W°m×6MÑ6MÈaÓ6PÐ,QÐSUÓ"V×"]Ñ"]Ó"_�KØ"¨)°JÑ*?Ò?à! *Ñ-×4Ñ4°[ÔAØ! -Ñ0×7Ñ7¸¸w¹ÔGØ! ,Ñ/×6Ñ6°}ÔEØ! ,Ñ/×6Ñ6Ð7NÈwÑ7W×7\Ñ7\Ð]jÓ7kÔlØ! ,Ñ/×6Ñ6°yÕAòBó ô( (-§y¡yÐ1HÈÑ1QÐSTÓ'UÑ$�	˜9Ü#Ÿi™i¨°)×2EÑ2EÀaÓ2HÐ(IÈ2ÓN�à 9¸'Ñ B�à)×0Ñ0Ó2�à×#Ñ# KÔ0Ø i°
Ñ&;Ó;à˜jÑ)×0Ñ0°Ô=Ø˜mÑ,×3Ñ3°GÔ<Ø˜lÑ+×2Ñ2°9Ô=Ø˜lÑ+×2Ñ2°9Ô=Ø˜lÑ+×2Ñ2°=ÖAð?	BôB ˆy˜Ñ'Ó(¨1Ó,ÜŸ,™, y°Ñ'?ÈÔOˆKÜŸ™ Y¨|Ñ%<Ó=×@Ñ@ÀÓHˆJÜŸ™ Y¨|Ñ%<Ó=×@Ñ@ÀÓHˆJà.°¸<Ñ1HÑHˆJÜŸ™Ð$4°jÐ#AÀ2ÓFˆJÜŸ™Ð$4°jÐ#AÀ2ÓFˆJÜŸ™À
Ö%K¸ c§l¡l¥nÒ%KÐTZÔ[ˆIà ‘_ zÑ1ˆFØ—k‘k¨T�kÓ2×:Ñ:ˆGØ$ WÑ-ˆLð ˆGØ# A‘ˆHØˆJØ$ò +�Ø˜8Ò#Ø˜q‘L‘Gà�GØ#�HØ×!Ñ! 'Õ*ð+ô  Ÿ,™,¤r§z¡z°*À;Ô'OÓPˆKà˜kÑ*¨9¨HÐ5ˆGà)¨'Ñ2ÐØ)¨'Ñ2ÐÜ %§	¡	Ð+<¸kÐ*JÓ KÈGÑ TÐàÐ!1Ð3DÐDÐDùò5 &Ls   ÏRr€   r�   r‚   c
                 óÂ  — t        | j                  «      }
|�Bt        |t        j                  «      s(t        |t
        «      r|g}t        j                  |«      }t        | j                  «      D �]a  \  }}| j                  |   rŒg }t        | j                  «      D ]�  }|| j                  z  |z   }||   j                  «       }||   }| j                  |j                  «       «      }|sŒO|�||   nd }|j                  d   |	z
  }|j                  ||||¬«       |j!                  |«       Œ‘ t        |«      | j"                  k  sŒÙt        | j                  «      D ]q  }||vrP|| j                  z  |z   }||   j                  «       }||   }|j                  d   |	z
  }|j                  |||¬«       t        |«      | j"                  k\  sŒp �Œa �Œd |j%                  |
| j"                  z  «      }g }g }t        j&                  |
| j"                  z  | j(                  t        j*                  ¬«      }t        | j                  «      D ]«  \  }}t-        |j.                  d„ ¬«      }t        | j"                  «      D ]v  }|j1                  «       }|d   }|d   }|d	   }t        |«      || j"                  |z  |z   <   |j!                  |«       |j!                  |«       |||| j"                  z  |z   <   Œx Œ­ |j3                  «       j                  «       dz   } |�t5        | |«      n| }!|j%                  |
| j"                  z  |!«      }"t        |«      dkD  r%|d   � |j%                  |
| j"                  z  |!«      }#nd }#|j5                  «       j                  «       |j3                  «       j                  «       k7  r|€t7        d
«      ‚|"j9                  |«       |#�|#j9                  d«       t        t;        ||«      «      D ]Q  \  }\  }$}%|$|"|d ||   …f<   |#�%t        j                  |%«      |#|d t        |%«      …f<   ||   |!k  sŒE|d   |"|||   f<   ŒS t=        |"||#dœ«      S )NrW   r`   )ra   r„   c                 ó   — | d   S r†   r.   r‡   s    r   r‰   z6ConstrainedBeamSearchScorer.finalize.<locals>.<lambda>j  s
   € ¸qÀ¹t€ r   rŠ   r   r   r   rŒ   r�   )rl   rB   rF   r(   r+   r-   rC   rn   rE   r@   r2   rp   rÄ   rÇ   rk   rq   r•   r6   r�   rm   r3   r‘   r“   r’   r”   rs   r–   rG   r—   ro   r   )&r   r   r€   r�   r‚   r    rQ   rR   rS   rU   r1   rv   r˜   Úids_collectÚbeam_idr}   rš   r›   rÉ   r   ra   rœ   r�   rž   rŸ   r    r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   s&                                         r   r"   z$ConstrainedBeamSearchScorer.finalize-  st  € ô ˜Ÿ™Ó)ˆ
àÐ#¬J°|ÄUÇ\Á\Ô,RÜ˜,¬Ô,Ø ,˜~�Ü Ÿ<™<¨Ó5ˆLô $-¨T¯_©_Ó#=ó 	ÑˆI�xØ�z‰z˜)Ò$Øð
 ˆKÜ  §¡Ó0ò 
0�Ø!*¨T¯^©^Ñ!;¸gÑ!E�Ø/°Ñ?×DÑDÓF�Ø(¨Ñ8�à'+×'GÑ'GÈ×H[ÑH[ÓH]Ó'^Ð$Ú'ØAMÐAY ¨nÒ!=Ð_c�JØ$0×$6Ñ$6°rÑ$:Ð=OÑ$O�MØ—L‘L ¨{ÈÐcp�LÔqØ×&Ñ& wÕ/ð
0ô �;Ó $×"<Ñ"<Ó<Ü$ T§^¡^Ó4ò �GØ kÑ1Ø)2°T·^±^Ñ)CÀgÑ)M˜Ø&7¸Ñ&G×&LÑ&LÓ&N˜Ø'0°Ñ'@˜Ø(4×(:Ñ(:¸2Ñ(>ÐASÑ(S˜Ø Ÿ™ \°;Èm˜Ô\Ü˜;Ó'¨4×+EÑ+EÓEÚòð/	ðD !—}‘} Z°$×2LÑ2LÑ%LÓMˆØˆØˆÜ—k‘k *¨t×/IÑ/IÑ"IÐRV×R]ÑR]Ôej×erÑerÔsˆô % T§_¡_Ó5ò 	M‰KˆAˆxÜ  §¡±^ÔDˆKÜ˜4×5Ñ5Ó6ò M�Ø!,§¡Ó!2�Ø+¨AÑ.�
Ø)¨!Ñ,�Ø+¨AÑ.�
ÜCFÀxÃ=�˜T×7Ñ7¸!Ñ;¸aÑ?Ñ@ð —‘˜HÔ%ð ×#Ñ# JÔ/àBL�˜A × :Ñ :Ñ:¸QÑ>Ò?ñMð	Mð$ (×+Ñ+Ó-×2Ñ2Ó4°qÑ8Ðà<FÐ<R”sÐ+¨ZÔ8ÐXhˆØ$-§M¡M°*¸t×?YÑ?YÑ2YÐ[gÓ$hˆäˆ|Ó˜qÒ  \°!¡_Ð%@Ø(1¯©°jÀ4×C]ÑC]Ñ6]Ð_kÓ(l‰GàˆGð ×ÑÓ×"Ñ"Ó$¨×(8Ñ(8Ó(:×(?Ñ(?Ó(AÒAØÐ#Ü Ð!CÓDÐDØ�M‰M˜,Ô'àÐØ�M‰M˜"Ôô $-¬S°°|Ó-DÓ#Eò 	>ÑˆAÑ��hØ,0ˆG�AÐ(˜ a™Ð(Ð(Ñ)àÐ"Ü.3¯l©l¸8Ó.D�˜˜?œS ›]˜?Ð*Ñ+à˜A‰ Ó-à.:¸1©o�˜˜<¨™?Ð*Ò+ð	>ô à$Ø#.Ø 'ñó
ð 	
r   r°   r±   )F)r#   r$   r%   r&   r-   r   r   r(   r3   r   r²   r
   rD   r³   rI   r´   rO   r¾   rÄ   r)   r*   r+   r	   r   rÈ   r"   r.   r   r   r¶   r¶   £  s  „ ñ"ðT +.Ø8=Ø/0Ø)*Ø$(ñ+àð+ð ð+ð ˜*Ñ%ð	+ð
 —‘ð+ð ! ™ð+ð $ E¨$°¨)Ñ$4Ñ5ð+ð  (¨™}ð+ð " #™ð+ð ˜S‘Mó+ðZ ð ˜ò  ó ð òoò#ð <@ØFJØ37Ø,-ñ]
à×#Ñ#ð]
ð ×&Ñ&ð]
ð ×%Ñ%ð	]
ð
 ×&Ñ&ð]
ð $×/Ñ/ð]
ð ˜u S¨%¯,©,Ð%6Ñ7Ñ8ð]
ð ˜u S¨$¨s©)°U·\±\Ð%AÑBÑCð]
ð ˜u×/Ñ/Ñ0ð]
ð % S™Mð]
ð 
ˆu�|‰|Ñ	ó]
ðN $ñKEàðKEð ×#Ñ#ðKEð ×'Ñ'ð	KEð
  ×+Ñ+ðKEð  ×*Ñ*ðKEð !×+Ñ+ðKEð óKEðh <@ØFJØ37Ø,-ñr
à×#Ñ#ðr
ð !×,Ñ,ðr
ð !×+Ñ+ð	r
ð
 "×,Ñ,ðr
ð ðr
ð ˜u S¨%¯,©,Ð%6Ñ7Ñ8ðr
ð ˜u S¨$¨s©)°U·\±\Ð%AÑBÑCðr
ð ˜u×/Ñ/Ñ0ðr
ð % S™Mðr
ð 
ˆu×ÑÑ	 ôr
r   r¶   c            
       ó¤   — e Zd Zddedededee   fd„Zd„ Z	 	 dde	j                  d	ed
ee	j                     dee   fd„Zddededee   defd„Zy)rA   Nr2   r4   r:   r    c                 ó¼   — || _         || _        || _        || _        g | _        d| _        t        | j                  t        «      s| j                  €t        d«      ‚yy)z7
        Initialize n-best list of hypotheses.
        g    eÍÍANz—When `do_early_stopping` is set to a string, `max_length` must be defined. Ensure it is passed to the BeamScorer class instance at initialization time.)	r4   r:   r    r2   r’   Úworst_scorerF   rD   rG   )r   r2   r4   r:   r    s        r   rI   zBeamHypotheses.__init__£  sf   € ð -ˆÔØ,ˆÔØ$ˆŒØ"ˆŒØˆŒ
ØˆÔä˜$×-Ñ-¬tÔ4¸¿¹Ð9PÜðEóð ð :QÐ4r   c                 ó,   — t        | j                  «      S )z3
        Number of hypotheses in the list.
        )rl   r’   rN   s    r   Ú__len__zBeamHypotheses.__len__´  s   € ô �4—:‘:‹Ðr   ÚhypÚsum_logprobsrS   ra   c           
      ó   — |�||| j                   z  z  }n||j                  d   | j                   z  z  }t        | «      | j                  k  s|| j                  kD  r¬| j
                  j                  |||f«       t        | «      | j                  kD  rZt        t        | j
                  «      D ���cg c]  \  }\  }}}||f‘Œ c}}}«      }	| j
                  |	d   d   = |	d   d   | _        yt        || j                  «      | _        yyc c}}}w )z3
        Add a new hypothesis to the list.
        NrW   r   r   )
r4   rk   rl   r2   r  r’   r•   r“   rn   r–   )
r   r  r  rS   ra   ÚscoreÚidxÚsrH   Úsorted_next_scoress
             r   rq   zBeamHypotheses.addº  s  € ð Ð$Ø  M°4×3FÑ3FÑ$FÑG‰Eð ! C§I¡I¨b¡M°T×5HÑ5HÑ$HÑIˆEäˆt‹9�t—~‘~Ò%¨°×1AÑ1AÒ)AØ�J‰J×Ñ˜u c¨<Ð8Ô9Ü�4‹y˜4Ÿ>™>Ò)Ü%+ÌIÐVZ×V`ÑV`ÓLa×,bÐ,b¹.¸#¹yÀÀ1Àa¨a°ªXÔ,bÓ%cÐ"Ø—J‘JÐ1°!Ñ4°QÑ7Ð8Ø#5°aÑ#8¸Ñ#;�Õ ä#& u¨d×.>Ñ.>Ó#?�Õ ð *Bùô -cs   Â0D	Úbest_sum_logprobsru   rU   r   c                 ó˜  — t        | «      | j                  k  ry| j                  du ry| j                  du r&|||z
  | j                  z  z  }| j                  |k\  }|S | j                  dkD  r:| j
                  |k  rt        d«      ‚|| j
                  |z
  | j                  z  z  }n|||z
  | j                  z  z  }| j                  |k\  }|S )z¿
        If there are enough hypotheses and that none of the hypotheses being generated can become better than the worst
        one in the heap, then we are done with this sentence.
        FTg        z3max_length is not larger than decoder prompt length)rl   r2   r:   r4   r  r    rG   )r   r  ru   rU   Úhighest_attainable_scoreÚrets         r   rO   zBeamHypotheses.is_doneÓ  sî   € ô ˆt‹9�t—~‘~Ò%Øð ×Ñ $Ñ&Øð × Ñ  EÑ)Ø'8¸GÐFXÑ<XÐ]a×]pÑ]pÑ;pÑ'pÐ$Ø×"Ñ"Ð&>Ñ>ˆCØˆJð ×"Ñ" SÒ(Ø—?‘?Ð&8Ò8Ü$Ð%ZÓ[Ð[à%¨¯©Ð;MÑ)MÐRV×ReÑReÑ(eÑeñ )ð
 ,=ÀÐJ\Ñ@\Ðae×atÑatÑ?tÑ+tÐ(Ø×"Ñ"Ð&>Ñ>ˆCØˆJr   rK   )NN)r   )r#   r$   r%   r-   r²   rD   r   rI   r  r(   r)   rq   rO   r.   r   r   rA   rA   ¢  s¥   „ ñ #ð °uð Èdð Ð`hÐilÑ`mó ò"ð 48Ø'+ñ@à×Ñð@ð ð@ð ˜u×/Ñ/Ñ0ð	@ð
   ‘}ó@ñ2"¨ð "¸ð "ÐRZÐ[^ÑR_ð "Ðhlô "r   rA   )Úabcr   r   Úcollectionsr   Útypingr   r   r   r	   r
   Únumpyrå   r(   Úutilsr   Úbeam_constraintsr   r   r'   r,   r   r0   r¶   rA   r.   r   r   ú<module>r     si   ð÷  $Ý  ß 5Õ 5ã Û å (ß =ð"Ð ðHÐ ô8A�ô Aô@e
�zô e
ôP	|
 *ô |
÷~Sò Sr   